% % lycyracc.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: % % accents from txaccent.mf (tc fonts) + Cyrillic accents % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Accents for capital letters % LHver_check(3,5); % 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