% % lcyrbeg.mf % %% Cyrillic font container with T2 encoding beta-support % % This file is future part of lxfonts package % Version 3.5 // Patchlevel=0 % (c) O.Lapko % % This package is freeware product 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 all this package as well) 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,5); % 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; if ebbase=1: classic_sharp_s:=true; % Chooses shape of sharp s (CMBRIGHT) else: classic_sharp_s:=false; % Chooses shape of sharp s fi fi % Chooses shape of sharp s if unknown true_mono: boolean true_mono; true_mono:=false; % |true| forces ligatures to monowidth fi 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