diff options
Diffstat (limited to 'Master/texmf-dist/fonts/source/lh/base/lycyracc.mf')
-rw-r--r-- | Master/texmf-dist/fonts/source/lh/base/lycyracc.mf | 317 |
1 files changed, 317 insertions, 0 deletions
diff --git a/Master/texmf-dist/fonts/source/lh/base/lycyracc.mf b/Master/texmf-dist/fonts/source/lh/base/lycyracc.mf new file mode 100644 index 00000000000..053856c787d --- /dev/null +++ b/Master/texmf-dist/fonts/source/lh/base/lycyracc.mf @@ -0,0 +1,317 @@ +% +% lycyracc.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: +% +% accents from txaccent.mf (tc fonts) + Cyrillic accents +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +% Accents for capital letters +% + +LHver_check(3,4); % like |version_check| in ec + +% A dirty trick, better left unseen. |cap_height| and |cap_height#| +% are restored at the end of this file. + +numeric saved_cap_height#; saved_cap_height#=cap_height#; +cap_height#:=hi.x_height#; +numeric saved_cap_height; saved_cap_height=cap_height; +cap_height:=hi.x_height; + +%turn for this file: is_cap toggled by this value +cyrcaph:=true; + +lhchar"Grave accent"; +cyrchar_twice(Agrave,9u#,x_height#,0); % |put_gravis| changes the height +adjust_fit(0,0); +put_gravis; +repeat_once; +endchar; + +lhchar"Acute accent"; % using acute from plfonts +cyrchar_twice(Aacute,9u#,x_height#,0); % |put_accent| changes the height +italcorr h#*slant-if serifs: 1.5 fi u#; +adjust_fit(0,0); +put_accent; +repeat_once; +endchar; + +lhchar"Circumflex (hat) accent"; +cyrchar(Ahat,9u#,cap_accent_height#,0); +if serifs: italcorr .5[x_height#,h#]*slant+.5hair#-1.75u#; +else: italcorr 2/3[x_height#,h#]*slant-.5stem#+.5vair#-.75u#; +fi +adjust_fit(0,0); +uppercase_hat(.5w,0,1,2,3,4,5); +penlabels(1,2,3,4,5); endchar; + +lhchar"Tilde (squiggle) accent"; +cyrchar(Atilde,9u#,cap_accent_height#,0); +italcorr h#*slant-u#; +adjust_fit(0,0); +uppercase_tilde(0,0,1,2,3,4,5); +penlabels(1,2,3,4,5); endchar; + +lhchar"Umlaut (double dot) accent"; +cyrchar(Aumlaut,9u#,cap_accent_height#,0); +adjust_fit(0,0); +uppercase_umlaut(0,0,1,2,3,4); +penlabels(1,2,3,4); endchar; + +lhchar"Double acute accent (Long Hungarian umlaut accent)"; +cyrchar_twice(Aacute_dbl,9u#,min(asc_height#,2x_height#),0); +italcorr h#*slant-u#; +adjust_fit(0,0); +if monospace: hpos_corr=-2u; put_accent; hpos_corr=2u; put_accent; +else: hpos_corr=-1.5u; put_accent; hpos_corr=1.5u; put_accent; fi +repeat_once; +endchar; + +lhchar"Scandinavian circle accent"; +cyrchar(Aring,13u#+.5width_adj#,cap_accent_height#,0); +adjust_fit(cap_serif_fit#,cap_serif_fit#); +y[-1]= cap_height+if hefty: .5 fi accent_gap; +uppercase_circle(.5w,y[-1],1,2,3,4); +penlabels(1,2,3,4); endchar; + +lhchar"Hachek (check) accent"; +cyrchar(Ahachek,9u#,cap_accent_height#,0); +adjust_fit(0,0); +uc_hachek_accent(.5w); +endchar; + +lhchar"Breve accent"; +cyrchar(Abreve,9u#,cap_accent_height#,0); +italcorr h#*slant+.5vair#-1.5u#; +adjust_fit(0,0); +uppercase_breve(.5w,0,1,2,3); +penlabels(1,2,3); endchar; + +lhchar"Macron (bar) accent"; +numeric macron_breadth#; macron_breadth#=.2[vair#,stem#]; +cyrchar(Abar,9u#,cap_accent_height#,0); +italcorr h#*slant-.75u#; +adjust_fit(0,0); +numeric macron_breadth; macron_breadth:=Vround .2[vair,stem]; +pickup if serifs: crisp.nib else: fine.nib fi; +pos1(macron_breadth,90); pos2(macron_breadth,90); +top y1r=top y2r=h+o; lft x1=w-rt x2=hround 1.25u; +filldraw stroke z1e--z2e; % bar +penlabels(1,2); endchar; + +lhchar"Dot accent"; +cyrchar_twice(Adot,5u#,x_height#,0); +adjust_fit(0,0); +put_dot(tiny,max(dot_size#,cap_curve#)); +repeat_once; +endchar; + +lhchar"Cedilla accent"; +cyrchar(Acedilla,8u#,0,.875desc_depth#); +adjust_fit(0,0); +uppercase_cedilla(.5w,0,1,2,3,4,5); +penlabels(1,2,3,4,5); endchar; + +lhchar"Ogonek"; +cyrchar(Aogonek,5u#,0,desc_depth#); +italcorr 0; +adjust_fit(0,0); +%the_ogonek(.5w,0,1,2,3); +% polish-like "easy_ogonek" instead of Computer Modern "the_ogonek" +def the_pen=if known ogonek_pen: ogonek_pen + elseif serifs: tiny elseif is_bold: fisp else: fine fi +enddef; +% |diag_end| refers to |tiny| pen, hence |tiny| in the following equation: +ogonek_pos=(.5w if not serifs: +.5stem if is_bold: +.75tiny fi\\ fi,.5the_pen) + if serifs and not is_egyptian: +(.5xvair,0) fi; +easy_ogonek(the_pen, 1,2,3); % ogonek +penlabels(1,2,3); endchar; + +% +% differs from lowercase form +% +lhchar "Cyrillic accent Ahcross - horisontal cross"; +cyrchar(Ahcross,7u#,cap_height#,desc_depth#); +italcorr asc_height#*slant+.5dot_size#-2u#; +adjust_fit(0,0); +% hcross +pickup crisp.nib; numeric outer_jut; +% some funny fonts have an extremally small |jut|: +outer_jut=.5cap_stem+if serifs: max(limit_dist,cap_jut) else: 1.8u fi; +pos1(bar,90); pos2(bar,90); +top y1r=top y2r=vround (.52h+.5bar)+eps; +x1=.5w-outer_jut; x2=.5w+outer_jut; +filldraw stroke z1e--z2e; % cross bar +endchar; + +% differs from lowercase form +lhchar "Cyrillic accent Avcross - vertical cross"; +cyrchar(Avcross,5u#,cap_height#,0); +italcorr asc_height#*slant+.5dot_size#-2u#; +adjust_fit(0,0); +% vcross +if serifs: pickup crisp.nib; else: pickup fine.nib; fi +pos1(bar,0); pos2(bar,0); +lft x1l=lft x2l=hround(.5w-.5bar); +top y2-bot y1=.5cap_height; .5[y1,y2]=.52h; +filldraw stroke z1e--z2e; +endchar; + +lhchar "Cyrillic accent Aacute_cross - diagonal cross"; % cross from pl_ml (plfonts) +cyrchar_twice(Aacute_cross,7u#,cap_height#,0); +italcorr asc_height#*slant-serif_fit#+.5stem#-2u#; +adjust_fit(serif_fit#,serif_fit#); +numeric unbalance,outer_jut; +unbalance=if monospace: 1 else: 1.1 fi; +% some funny fonts have an extremally small |jut|: +outer_jut=.5cap_stem+if serifs: max(limit_dist,cap_jut) else: 1.8u fi; +put_cyrcross(.5w,0,outer_jut,unbalance*outer_jut); +repeat_once; +endchar; + +lhchar "Cyrillic accent Agrave_cross - diagonal cross"; % cross from pl_ml (plfonts) +cyrchar_twice(Agrave_cross,7u#,cap_height#,0); +italcorr asc_height#*slant-serif_fit#+.5stem#-2u#; +adjust_fit(serif_fit#,serif_fit#); +numeric unbalance,outer_jut; +unbalance=if monospace: 1 else: 1.1 fi; +% some funny fonts have an extremally small |jut|: +outer_jut=.5cap_stem+if serifs: max(limit_dist,cap_jut) else: 1.8u fi; +put_cyrcross(.5w,0,-unbalance*outer_jut,-outer_jut); +repeat_once; +endchar; + +lhchar"Cyrillic accent Agrave_dbl - double grave"; +cyrchar_twice(Agrave_dbl,9u#,x_height#,0); +italcorr h#*slant-u#; +adjust_fit(0,0); +if monospace: hpos_corr=-2u; put_accent; hpos_corr=2u; put_accent; +else: hpos_corr=-1.5u; put_gravis; hpos_corr=1.5u; put_gravis; fi +repeat_once; +endchar; + +lhchar "Cyrillic accent Acyrbreve - cyrillic breve"; +cyrchar(Acyrbreve,9u#,cap_height#+acc_height#,0); +italcorr h#*slant+.5vair#-1.5u#; +adjust_fit(0,0); +cbreve(.5w,0, 1,2,3,4,5,6,7); +endchar; + +lhchar"Cyrillic tie accent"; % centered +cyrchar(Atie,9u#,asc_height#,0); +italcorr 4/9[x_height#,asc_height#]*slant+4.5u#+2letter_fit#+.5hair#; +adjust_fit(if monospace:2u#,2u# else:serif_fit#,serif_fit# fi); +pickup fine.nib; pos1(hair,180); pos2(vround 1/5[vair,stem],90); +pos3(hair,0); +lft x1r=w-rt x3r=hround(2u-.5vair); x2=.5w; +y1=y3=4/9[x_height,asc_height]; top y2r=vround 8/9[x_height,asc_height]; +filldraw stroke super_arc.e(1,2) & super_arc.e(2,3); % arc +penlabels(1,2,3); endchar; + +lhchar "Cyrillic frown accent"; +cyrchar(Afrown,9u#,x_height#+acc_height#,0); +italcorr h#*slant+.5vair#-1.5u#; +adjust_fit(0,0); +%!!! uppercase_breve flipped +x_center:=.5w; y_move:=0; _one:=1; _two:=2; _three:=3; +% +pickup crisp.nib; pos[_one](vair,-180); +pos[_three](vair,0); +top y[_two]r=cap_height + acc_height; +x[_two]=hround x_center; +x[_two]-rt x[_one]l + =(lft x[_three]l)-x[_two] + =hround (2.5u if monospace: /expansion_factor fi -.5vair); +numeric mid_thickness; +mid_thickness=max(crisp.breadth,vround min(1/3[vair,stem],.5acc_height));%!!! +pos[_two](mid_thickness,90); +% |accent_gap| SHOULD be defined by the acute accent, before this macro runs +if unknown accent_gap: % accent_gap emulation + if serifs: + y[_two]'=h-.5mid_stem+eps-max(2/3[h,hi.x_height],hi.x_height+o+hair); + accent_gap=a_ht-(y[_two]'+.5mid_stem)-hi.x_height; + else: + top y[_two]'=h-vround(2/3[h,hi.x_height]); + accent_gap=a_ht-y[_two]'-hi.x_height; + fi +fi +bot y[_one]=bot y[_three]=cap_height + if hefty: .5 fi accent_gap; +filldraw stroke z[_one]e{up}...z[_two]e{right}... + {down}z[_three]e; % stroke +% +penlabels(1,2,3); endchar; + +lhchar "Cyrillic accent Abreve_long - long breve"; %accent width enlarged by 3u +cyrchar(Abreve_long,12u#,x_height#+acc_height#,0); +italcorr h#*slant+.5vair#-1.5u#; +adjust_fit(0,0); +x_center:=.5w; y_move:=0; +_one:=1; _two:=2; _three:=3; +pickup crisp.nib; pos[_one](vair,-180); +pos[_three](vair,0); +top y[_one]=top y[_three]=h; +x[_two]=x_center; +lft x[_one]r=hround(x[_two]-4.75u%!2.5u + if monospace: /expansion_factor fi -0.5vair); +rt x[_three]r=hround(x[_two]+4.75u%!2.5u + if monospace: /expansion_factor fi +0.5vair); +numeric mid_thickness; mid_thickness=vround 1/3[vair,stem]; +pos[_two](mid_thickness,-90); +bot y[_two]r= + vround max(x_height+o+tiny,1/3[x_height,h]+o-.5mid_thickness); +filldraw stroke z[_one]e{down}... + z[_two]e{right}...{up}z[_three]e; % stroke +endchar; + +lhchar "Cyrillic accent Abar_long - long bar"; %accent width enlarged by 3u +cyrchar(Abar_long,12u#,lc_trema_height#,0); +italcorr h#*slant-.75u#; +adjust_fit(0,0); +numeric macron_breadth; macron_breadth:=Vround .2[vair,stem]; +pickup if serifs: crisp.nib else: fine.nib fi; +pos1(macron_breadth,90); pos2(macron_breadth,90); +top y1r=top y2r=h+o; lft x1=w-rt x2=hround .5u;%!1.25u +filldraw stroke z1e--z2e; % bar +penlabels(1,2); endchar; + +% +% outsiders +% + +lhchar "Cyrillic accent Adesc_up - uppercase descender"; +cyrchar(Adesc_up,5u#,pdot_diam#,cap_sbeak#); +adjust_fit(0,cap_serif_fit#); +pickup tiny.nib; +pos1(cap_stem,0); pos2(cap_stem,0); +rt x1r=rt x2r=w-hround max(2u,3u-.5cap_stem); +top y1=h; bot y2=0; +inner_jut:=.5cap_stem+eps; +save bracket; bracket:=0; +numeric left_jut; +left_jut=if serifs: + max(limit_dist,if monospace: 1.414cap_jut else: 1.1cap_jut fi) + else: hround (r-rt x2r-.65u) fi; +cyr_serif(2,1,a,1/3,beak_darkness,left_jut,beak_jut); % right descender +endchar; + +% Restore original values of |cap_height| and |cap_height#| +cap_height:=saved_cap_height; numeric saved_cap_height; +cap_height#:=saved_cap_height#; numeric saved_cap_height#; + +cyrcaph:=false; %turned back + +endinput; +%end of file |