% This is the driver file lroman.mf based on roman.mf in the
% Computer Modern Roman family of fonts (by D. E. Knuth, 1979--1985)
% It differs from roman.mf only in that it has been
% adjusted to change capital I with a special uppercase I
% for the Slides fonts: llcmss8, llcmssb8, llcmssi8 and llcmsso8.
% Also the lower case l has been modified in order to avoid confusions
% with other glyphs.
% Written by Pierre A. MacKay, 16 Sept. 1986
% and modified by Claudio Beccari, 1999

if ligs>1: font_coding_scheme:="TeX text";
 spanish_shriek=oct"074"; spanish_query=oct"076";
else: font_coding_scheme:=if ligs=0: "TeX typewriter text"
  else: "TeX text without f-ligatures" fi;
 spanish_shriek=oct"016"; spanish_query=oct"017"; fi

mode_setup; font_setup;

 input romanu;  % upper case (majuscules)
 input romanl;  % lower case (minuscules)
 input greeku;  % upper case Greek letters
 input romand;  % numerals
 input romanp;  % ampersand, question marks, currency sign
 input romspl;  % lowercase specials (dotless \i, ligature \ae, etc.)
 input romspu;  % uppercase specials (\AE, \OE, \O)
 input punct;  % punctuation symbols common to roman and italic text
 input accent;  % accents common to roman and italic text



if ligs>1: input romlig; fi  % letter ligatures
if ligs>0: input comlig; fi  % ligatures common with italic text
if ligs<=1: input romsub; fi  % substitutes for ligatures

% Redrawing capital I

cmchar "The modified letter I";
beginchar("I",max(6u#,4u#+cap_stem#),cap_height#,0);
italcorr cap_height#*slant-.25u#;
adjust_fit(cap_serif_fit#,cap_serif_fit#);
pickup tiny.nib; pos1(cap_stem,0); pos2(cap_stem,0);
lft x1l=lft x2l=hround(.5w-.5cap_stem); top y1=h; bot y2=0;
filldraw stroke z1e--z2e;   % stem
pickup crisp.nib;           % arms
pos5(hair,90); pos6(hair,90); % top arm
lft x5= hround(u);rt x6=hround(w-u); top y5r=top y6r= top y1;
filldraw stroke z5e--z6e;
pos7(hair,-90); pos8(hair,-90); % bottom arm
x7=x5; x6=x8;
bot y7r= bot y8r= bot y2;
filldraw stroke z7e--z8e;
math_fit(0,.5ic#); penlabels(1,2,5,6,7,8); endchar;

% Redrawing lower case l

cmchar "The modified letter l";
beginchar("l",6u#+max(u#,.5stem#),
 min(asc_height#,if hefty:9/7 else:10/7 fi\\ x_height#),0);
italcorr x_height#*slant  -.4u#;
adjust_fit(-(u#-stem#/5.5), -.5u#);
numeric shaved_stem; shaved_stem=hround(stem if hefty:-\\2stem_corr fi);
pickup fine.nib;
pos1(shaved_stem,180);
pos2(shaved_stem,180);
pos3(shaved_stem,180);
lft x2r=lft x3r=hround(2.5u-.5shaved_stem);
y2=x_height;
y3=max(.5bar_height,2vair);
top y1=h; x1=x2;
interim superness:=more_super;
pos4(vair',-90); bot y4r=-oo; rt x5r=hround(w-u);
 pos5(vair,-75); top y5l=vround .2[top y4l,bar_height];
 x5l:=good.x x5l; x4l=1/3[x3l,x5l]; x4r:=1/3[x3r,x5r]; y3l:=y3l+.2vair;
 filldraw stroke z1e--z2e..super_arc.e(3,4);  % stem and hook
 path p; p=stroke z4e{right}..tension .9 and atleast 1..z5e;  % terminal
 if (xpart(z5l-precontrol 1 of p)<0) or (xpart(z5r-postcontrol 2 of p)<0):
  filldraw stroke z4e{right}...{up}z5e;
 else: filldraw p; fi;
penlabels(1,2,3,4,5,6,7,8); endchar;

% Redrawing ligature fl

cmchar "The modified ligature fl";
beginchar(oct"015",12u#+2letter_fit#,asc_height#,0);
italcorr asc_height#*slant-serif_fit#+.5stem#-2u#;
adjust_fit(0,serif_fit#);
pickup tiny.nib;
pos1(stem',0);
lft x1l=hround(2.5u-.5stem');
pickup fine.nib; numeric bulb_diam, inner_jut; % letter f
pos2(5/7[vair,flare],90); top y2r=h; rt x2=hround 5.3u;
f_stroke(1,2,a,b,c,jut,inner_jut); % left stem, arc, terminal
pickup crisp.nib; top y3r=top y4r=x_height; lft x3=hround .5u-1;
pos3(bar,90); pos4(bar,90);
rt x4= hround 5.3u;
pickup crisp.nib; filldraw stroke z3e--z4e;  % bar
%
pos11(stem',180);pos12(stem',180);pos13(stem',180); %letter l
lft x12r=lft x13r=hround(x2+1.5u);y12=x_height;
y13=max(.5bar_height,2vair);top y11=h; x11=x12;
interim superness:=more_super;
pos14(vair',-90); bot y14r=-oo; rt x15r=hround(w-u);
 pos15(vair,-75); top y15l=vround .2[top y14l,bar_height];
 x15l:=good.x x15l; x14l=1/3[x13l,x15l]; x14r:=1/3[x13r,x15r]; y13l:=y13l+.2vair;
 filldraw stroke z11e--z12e..super_arc.e(13,14);  % stem and hook
 path p; p=stroke z14e{right}..tension .9 and atleast 1..z15e;  % terminal
 if (xpart(z15l-precontrol 1 of p)<0) or (xpart(z15r-postcontrol 2 of p)<0):
  filldraw stroke z14e{right}...{up}z15e;
 else: filldraw p; fi;
penlabels(1,2,3,4,11,12,13,14,15); endchar;

% Redrawing ligature ffl

cmchar "The modified ligature ffl";
beginchar(oct"017",15u#+4letter_fit#,asc_height#,0);
italcorr asc_height#*slant-serif_fit#+.5stem#-2u#;
adjust_fit(0,2u#+serif_fit#);
pickup tiny.nib; pos1(stem',0); lft x1l=hround(2.5u-.5stem'); % the double f
pos11(stem',0); lft x11l=hround(.5w-.5stem');
pickup fine.nib; numeric bulb_diam, inner_jut;
 pos2(5/7[vair,flare],90); top y2r=h; rt x2=hround 5.75u;
 pos12(5/7[vair,flare],90); y12=y2; rt x12=hround(.5w+2.8u);
f_stroke(1,2,a,b,c,jut,inner_jut); % left stem, arc, terminal
f_stroke(11,12,d,e,f,inner_jut,inner_jut); % middle ditto
pickup crisp.nib; top y3r=top y4r=x_height; lft x3=hround.5u-1;
pos3(bar,90); pos4(bar,90);
rt x4=hround(.5w+2.8u);
pos3'(bar,90); x3'-x1=x4-x11; y3'=y3;
 pos4'(bar,90); x4'=x11; y4'=y4;
 filldraw stroke z3e--z3'e; filldraw stroke z4'e--z4e;  % bars
%
pos21(stem',180);pos22(stem',180);pos23(stem',180); %letter l
lft x22r=lft x23r=hround(x12+1.5u);y22=x_height;
y23=max(.5bar_height,2vair);top y21=h; x21=x22;
interim superness:=more_super;
pos24(vair',-90); bot y24r=-oo; rt x25r=hround(x23r+4u);
 pos25(vair,-75); top y25l=vround .2[top y24l,bar_height];
 x25l:=good.x x25l; x24l=1/3[x23l,x25l]; x24r:=1/3[x23r,x25r]; y23l:=y23l+.2vair;
 filldraw stroke z21e--z22e..super_arc.e(23,24);  % stem and hook
 path p; p=stroke z24e{right}..tension .9 and atleast 1..z25e;  % terminal
 if (xpart(z25l-precontrol 1 of p)<0) or (xpart(z25r-postcontrol 2 of p)<0):
  filldraw stroke z24e{right}...{up}z25e;
 else: filldraw p; fi;
penlabels(1,2,3,4,11,12,21,22,23,24,25); endchar;

%% Modified accents

cmchar "Breve accent";
beginchar(oct"025",9u#,min(asc_height#,2x_height#),0);
italcorr h#*slant+.5vair#-1.5u#;
adjust_fit(0,0);
pickup crisp.nib; pos1(vair,-180); pos3(vair,0);
numeric mid_thickness; mid_thickness=vround 1/3[vair,stem];
pos2(mid_thickness,-90); x2=.5w;
bot y2r=vround max(x_height+o+tiny,1/3[x_height,h]+o-.5mid_thickness);
top y1=top y3=max(h,top y2l+.8vair); lft x1r=w-rt x3r=hround(2u-.5vair);
filldraw stroke z1e{down}...z2e{right}...{up}z3e;  % stroke
penlabels(1,2,3); endchar;


cmchar "Scandinavian circle accent";
beginchar(oct"027",13u#+4/3(asc_height#-x_height#)*slant,asc_height#,0);
adjust_fit(cap_serif_fit#,cap_serif_fit#);
numeric circ_hair,circ_vair;
circ_hair=hround min(hair,u+.5); %circ_vair=vround min(vair,(h-x_height)/6+.5);
circ_vair=circ_hair;
penpos1(circ_vair,90); penpos3(circ_vair,-90);
penpos2(circ_hair,180); penpos4(circ_hair,0);
x2r=hround(.5w-u-.5circ_hair);
x4r=w-x2r; x1=x3=.5w;
y2=y4=.5[y1,y3];
y3r=vround(1/3[x_height,h]+apex_o); y1r-y3r=x4r-x2r;
penstroke pulled_arc.e(1,2) & pulled_arc.e(2,3)
 & pulled_arc.e(3,4) & pulled_arc.e(4,1) & cycle;  % bowl
penlabels(1,2,3,4); endchar;

iff ligs>0: cmchar "Dot accent";
numeric dot_diam#; dot_diam#=max(dot_size#,cap_curve#);
beginchar(oct"137",5u#,min(asc_height#,10/7x_height#+.5dot_diam#),0);
define_whole_blacker_pixels(dot_diam);
italcorr h#*slant+.5dot_diam#-2u#;
adjust_fit(0,0);
pickup tiny.nib; pos1(dot_diam,0); pos2(dot_diam,90);
x1=x2=.5w; z1=z2;
y2l= vround(.5[x_height,h]+apex_o);
dot(1,2);  % dot
penlabels(1,2); endchar;

cmchar "Umlaut (double dot) accent";
numeric dot_diam#,dot_diam;
dot_diam#=max(dot_size#,cap_curve#);
beginchar(oct"177",9u#,min(asc_height#,10/7x_height#+.5dot_diam#),0);
dot_diam=max(tiny.breadth,hround(max(dot_size,cap_curve)-2stem_corr));
italcorr h#*slant+.5dot_diam#-2.25u#;
adjust_fit(0,0);
pickup tiny.nib; pos1(dot_diam,0); pos2(dot_diam,90);
x1=x2=2.75u; z1=z2;
y2l= vround(.5[x_height,h]+apex_o);
dot(1,2);  % left dot
pos3(dot_diam,0); penpos4(y2r-y2l,90); y3=y4=y1; x3=x4=w-x1;
dot(3,4);  % right dot
penlabels(1,2,3,4); endchar;


ligtable "!": "`" =: spanish_shriek;
ligtable "?": "`" =: spanish_query;
font_slant slant; font_x_height x_height#;
if monospace: font_normal_space 9u#; % no stretching or shrinking
 font_quad 18u#;
 font_extra_space 9u#;
else: font_normal_space 6u#+2letter_fit#;
 font_normal_stretch 3u#; font_normal_shrink 2u#;
 font_quad 18u#+4letter_fit#;
 font_extra_space 2u#;
 k#:=-.5u#; kk#:=-1.5u#; kkk#:=-2u#; % three degrees of kerning
 ligtable "k": if serifs: "v": "a" kern -u#, fi\\"w": "e" kern k#,
  "a" kern k#, "o" kern k#, "c" kern k#;
 ligtable "P": "A" kern kk#,
  "y": "o" kern k#, "e" kern k#, "a" kern k#, "." kern kk#, "," kern kk#;
 ligtable "F": "V": "W": if serifs: "o" kern kk#, "e" kern kk#, "u" kern kk#,
    "r" kern kk#, "a" kern kk#, "A" kern kkk#,
   else: "o" kern k#, "e" kern k#, "u" kern k#,
    "r" kern k#, "a" kern k#, "A" kern kk#, fi
  "K": "X": "O" kern k#, "C" kern k#, "G" kern k#, "Q" kern k#;
 ligtable "T": "y" kern if serifs: k# else: kk# fi,
  "Y": "e" kern kk#, "o" kern kk#,
   "r" kern kk#, "a" kern kk#, "A" kern kk#, "u" kern kk#;
 ligtable "O": "D": "X" kern k#, "W" kern k#, "A" kern k#,
   "V" kern k#, "Y" kern k#;
 if serifs: ligtable "h": "m": "n":
   "t" kern k#, "u" kern k#, "b" kern k#, "y" kern k#, "v" kern k#, "w" kern k#;
  ligtable "c": "h" kern k#, "k" kern k#; fi
 ligtable "o": "b": "p": "e" kern -k#, "o" kern -k#, "x" kern k#,
   "d" kern -k#, "c" kern -k#, "q" kern -k#,
  "a": if serifs: "v" kern k#, "j" kern u#, else: "r" kern k#, fi
  "t": "y" kern k#,
  "u": "w" kern k#;
 ligtable "A": if serifs: "R": fi\\ "t" kern k#,
  "C" kern k#, "O" kern k#, "G" kern k#, "U" kern k#, "Q" kern k#,
  "L": "T" kern kk#, "Y" kern kk#, "V" kern kkk#, "W" kern kkk#;
 ligtable "g": "j" kern -k#; % logjam
 ligtable "I": "I" kern -k#; fi % Richard III
 ligtable "l": "e" kern k#, "o" kern k#;
 % there are ligature/kern programs for |"f"| in the {\tt romlig} file
 % and for |"-"|, |"`"|, and |"'"| in the {\tt comlig} file
bye.

