summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/fonts/source/lh/base/lcyrbeg.mf
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/fonts/source/lh/base/lcyrbeg.mf')
-rw-r--r--Master/texmf-dist/fonts/source/lh/base/lcyrbeg.mf188
1 files changed, 188 insertions, 0 deletions
diff --git a/Master/texmf-dist/fonts/source/lh/base/lcyrbeg.mf b/Master/texmf-dist/fonts/source/lh/base/lcyrbeg.mf
new file mode 100644
index 00000000000..b959d126440
--- /dev/null
+++ b/Master/texmf-dist/fonts/source/lh/base/lcyrbeg.mf
@@ -0,0 +1,188 @@
+%
+% lcyrbeg.mf
+%
+%% Cyrillic font container with T2 encoding beta-support
+%
+% This file is future part of lxfonts package
+% Version 3.4 // Patchlevel=0
+% (c) O.Lapko
+%
+% This package belongs to the public domain under conditions similar to
+% those of D. E. Knuth specified for the Computer Modern family of fonts.
+% In particular, only the authors are entitled to modify this file
+% and to save it under the same name.
+%
+% Content:
+%
+% File with macros which emulate exbase.mf from ec fonts (J"org Knappen)
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+% Contents:
+%
+% *) font booleans (mostly for ec); slitex used in SliTeX cm fonts
+% *) macros for processing chars twice: for some accents
+% *) routines to generate the parameter sets by extrapolation
+% ** macros for accenting moved in file lcyrdefs.mf
+%
+
+LHver_check(3,4); % like |version_check| in ec
+
+if unknown slitex:
+ boolean slitex; slitex := false; fi % |true| simulates behaviour of |sroman|
+if unknown one_serif:
+ boolean one_serif; one_serif:=true; fi % |false| suppresses base serif on `1'
+if unknown classic_serif:
+ boolean classic_serif; classic_serif := false; fi
+if unknown suppress_i_dot:
+ boolean suppress_i_dot; suppress_i_dot :=false; fi
+if unknown hach_sharp:
+ boolean hach_sharp; hach_sharp:=false; fi
+if unknown classic_sharp_s:
+ boolean classic_sharp_s; classic_sharp_s:=false; fi % Chooses shape of sharp s
+if unknown knuthian_ae:
+ boolean knuthian_ae; knuthian_ae:=false; fi % |true| reproduces cm italic \ae
+if unknown fancy_thorn:
+ boolean fancy_thorn; fancy_thorn:=false; fi % |true| produces \th with fancier bulb
+if unknown is_small_cap:
+ boolean is_small_cap; is_small_cap:=false; fi
+tracingstats:=1; % Print statistics at the end of run
+
+%
+%
+%
+% some extra font parameters
+%
+def font_cap_height expr x = fontdimen 8: x enddef;
+def font_asc_height expr x = fontdimen 9: x enddef;
+def font_acc_cap_height expr x = fontdimen 10: x enddef;
+def font_desc_depth expr x = fontdimen 11: x enddef;
+def font_max_height expr x = fontdimen 12: x enddef;
+def font_max_depth expr x = fontdimen 13: x enddef;
+def font_digit_width expr x = fontdimen 14: x enddef;
+def font_cap_stem expr x = fontdimen 15: x enddef;
+def font_baselineskip expr x = fontdimen 16: x enddef;
+
+
+
+%
+% XXXXXXX The following routines generate the parameter
+% X X sets by extrapolation
+% X X
+% X X
+% X X
+% XXXX XXXX
+% X X
+% X X
+% X X
+% X X
+% X X
+% X
+%
+%
+% needed variables
+%
+
+vardef simple_gendef@#(text aa)(text t)=
+ string s[];
+ s1:="";
+ s2:=str @#;
+ index:=1;
+ forsuffixes $=t: ydata[index]:=$ if s1<>s2: *@# fi;
+ index:=index+1;
+ endfor;
+ if numpoints>(index-1): errmessage "Missing parameter"; message str aa; fi;
+ if numpoints<(index-1): errmessage "Too many parameters"; message str aa; fi;
+ aa:=ydata[merke];
+ if gencheck: message str aa fi;
+enddef;
+
+vardef extended_gendef@#(text aa)(text t)=
+ string s[];
+ s1:="";
+ s2:=str @#;
+ index:=1;
+ forsuffixes $=t: ydata[index]:=$ if s1<>s2: *@# fi;
+ index:=index+1;
+ endfor;
+ if numpoints>(index-1): errmessage "Missing parameter"; message str aa; fi;
+ if numpoints<(index-1): errmessage "Too many parameters"; message str aa; fi;
+ if gensize>basedata[numpoints]:
+ numeric hilf [];
+ hilf[1]:=(ydata[numpoints]-ydata[numpoints-1])/(basedata[numpoints]-basedata[numpoints-1]);
+ hilf[2]:=(ydata[numpoints]-ydata[numpoints-2])/(basedata[numpoints]-basedata[numpoints-2]);
+ hilf[3]:=ydata[numpoints]-hilf1*basedata[numpoints];
+ hilf[4]:=ydata[numpoints]-hilf2*basedata[numpoints];
+ spy:=(hilf[1]*gensize+hilf[3])/2+(hilf[2]*gensize+hilf[4])/2;
+ aa:=spy;
+ else:
+ for index = 1 upto numpoints-1:
+ interval[index]:=basedata[index+1]-basedata[index];
+ endfor;
+ for index=1 upto numpoints:
+ spline[1][index]:=ydata[index];
+ endfor;
+ for index=2 upto numpoints-1:
+ alpha[index]:=3*((spline[1][index+1]*interval[index-1])%
+ -(spline[1][index]*(basedata[index+1]-basedata[index-1]))%
+ +(spline[1][index-1]*interval[index]))%
+ /(interval[index-1]*interval[index]);
+ endfor;
+ spl[1]:=0;
+ spmu[1]:=0;
+ spz[1]:=0;
+ for index=2 upto numpoints-1:
+ spl[index]:=2*(basedata[index+1]-basedata[index-1])%
+ -interval[index-1]*spmu[index-1];
+ spmu[index]:=interval[index]/spl[index];
+ spz[index]:=(alpha[index]-interval[index-1]*spz[index-1])/spl[index];
+ endfor;
+ spline[3][numpoints]:=0;
+ for index=numpoints-1 downto 1:
+ spline[3][index]:=spz[index]-spmu[index]*spline[3][index+1];
+ endfor;
+ for index=numpoints -1 downto 1:
+ spline[2][index]:=(spline[1][index+1]-spline[1][index])/interval[index]%
+ -interval[index]*(spline[3][index+1]*spline[3][index])/3;
+ spline[4][index]:=(spline[3][index+1]-spline[3][index])/(3*interval[index]);
+ endfor;
+ location:=1;
+ for term=1 upto numpoints-1:
+ if gensize > basedata[term]: location:=term; fi
+ endfor;
+ spx:=gensize-basedata[location];
+ spy:=((spline[4][location]*spx+spline[3][location])*spx+spline[2][location])*spx+spline[1][location];
+ aa:=spy; fi;
+ if gencheck: message str aa fi;
+enddef;
+
+vardef basedef(text t)=
+ boolean basevalue; boolean gencheck;
+ numeric index; numeric ergbnis; numeric location; numeric term;
+ numeric numpoints; numeric spx; numeric spy;
+ numeric basedata[]; numeric interval[]; numeric alpha[];
+ numeric spl[]; numeric spmu[]; numeric spz[];
+ numeric ydata[]; numeric spline[][];
+ basevalue:=false; gencheck:=false;
+ index:=1;
+ forsuffixes $=t: basedata[index]:=$;
+ if $=gensize: basevalue:=true; merke:=index; fi;
+ index:=index+1;
+ endfor;
+ numpoints:=index-1;
+ if numpoints<3: errmessage "Not enough reference points"; fi
+ if basevalue: def gendef=simple_gendef enddef; else:
+ def gendef=extended_gendef enddef; fi
+enddef;
+
+def clear_extra_memory= % Release ressources hold by the extrapolation routine
+ numeric index; numeric ergbnis; numeric location; numeric term;
+ numeric numpoints; numeric spx; numeric spy;
+ numeric basedata[]; numeric interval[]; numeric alpha[];
+ numeric spl[]; numeric spmu[]; numeric spz[];
+ numeric ydata[]; numeric spline[][];
+ numeric hilf []; string s[];
+enddef;
+
+endinput;
+%end of file