summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/fonts/source/public/oldlatin/oromligs.mf
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/fonts/source/public/oldlatin/oromligs.mf')
-rw-r--r--Master/texmf-dist/fonts/source/public/oldlatin/oromligs.mf773
1 files changed, 773 insertions, 0 deletions
diff --git a/Master/texmf-dist/fonts/source/public/oldlatin/oromligs.mf b/Master/texmf-dist/fonts/source/public/oldlatin/oromligs.mf
new file mode 100644
index 00000000000..10c95c08644
--- /dev/null
+++ b/Master/texmf-dist/fonts/source/public/oldlatin/oromligs.mf
@@ -0,0 +1,773 @@
+% Old Latin ligatures part 2 oromligs.mf (part 1 is oromlig.mf)
+% This file describes five roman ligatures
+% that begin with ``langes Es'' or end with ``t''
+% and puts them in code positions \0213--.
+
+% This file should be read just after ``oromlig.mf'',
+% because the next two lines are in oromlig.mf:
+% > numeric itc#; % modified italic correction on `f' and `ff'
+% > itc#=if serifs: max(0,flare#-.25u#) else: 1.25u# fi;
+
+ligtable "s": "i"=:oct"214", "f"=:oct"213", "l"=:oct"215",
+ "s"=:oct"253", ":"=:oct"363", "t"=:oct"334",
+ "'" kern itc#, "?" kern itc#, "!" kern itc#, ")" kern itc#, "]" kern itc#;
+ligtable oct"213": "i"=:oct"216", "l"=:oct"217",
+% "t"=:oct"336", % ligature of sft, which should not be used in old text
+ "'" kern itc#, "?" kern itc#, "!" kern itc#, ")" kern itc#, "]" kern itc#;
+ligtable oct"253": "i"=:oct"256", "l"=:oct"257", "t"=:oct"376",
+ "'" kern itc#, "?" kern itc#, "!" kern itc#, ")" kern itc#, "]" kern itc#;
+
+% Combinations "langes Es" and "f"
+
+cmchar "The ligature langes sf";
+beginchar(oct"213",10.5u#+2letter_fit#,asc_height#,0);
+italcorr asc_height#*slant+if serifs:flare#-.25u# else: 1.25u# fi;
+adjust_fit(0,0);
+pickup tiny.nib; pos1(stem',0); lft x1l=hround(2.5u-.5stem');
+pos11(stem',0); rt x11r=hround(w-3u+.5stem');
+pickup fine.nib; numeric bulb_diam, inner_jut;
+if serifs: bulb_diam=hround .8[stem,flare];
+ pos2(bulb_diam,0); pos12(bulb_diam,0);
+ rt x2r=hround(rt x11r-stem_corr); lft x12l=hround(w-.75u+.5);
+ y2+.5bulb_diam=.85[x_height,h+oo]; y12+.5bulb_diam=.9[x_height,h+oo];
+ if rt x1r+jut+.5u+2<=lft x11l-jut: inner_jut=jut;
+ else: rt x1r+inner_jut+.5u+2=lft x11l-inner_jut; fi
+else: pos2(5/7[vair,flare],90); top y2r=h; rt x2=hround 6.25u;
+ pos12(5/7[vair,flare],90); y12=y2; rt x12=hround(w+.75u); fi
+f_stroke(1,2,a,b,c,jut,inner_jut); % left stem, arc, terminal, serif
+f_stroke(11,12,d,e,f,inner_jut,1.25jut); % right stem, arc, terminal, serif
+pickup crisp.nib; top y3r=top y4r=x_height; lft x3=hround .5u-1;
+pos3(bar,90); pos4(bar,90);
+rt x4=hround(w-1/3u);
+pos3'(bar,90); x3'=x1; y3'=y3;
+pos4'(bar,90); x4'-x11=x3-x1; y4'=y4;
+filldraw stroke z3e--z3'e; filldraw stroke z4'e--z4e; % bars
+penlabels(1,2,3,4,11,12); endchar;
+
+cmchar "The ligature langes si";
+beginchar(oct"214",10u#+2letter_fit#,asc_height#,0);
+italcorr asc_height#*slant-serif_fit#+.5if serifs:stem# else:dot_size# fi-2u#;
+adjust_fit(0,serif_fit#);
+pickup tiny.nib; pos1(stem',0); lft x1l=hround(2.5u-.5stem');
+pos11(stem',0); rt x11r=hround(w-2.5u+.5stem');
+pos12(stem',0); x11=x12; bot y12=0;
+pickup fine.nib; numeric bulb_diam, inner_jut;
+if serifs: bulb_diam=hround 1/4[.8[stem,flare],dot_size];
+ pos2(bulb_diam,0); x2r=x12r;
+ y2+.5bulb_diam=.8[x_height,h+oo]; top y11=x_height+min(oo,serif_drop);
+ if rt x1r+jut+.5u+2<=lft x11l-jut: inner_jut=jut;
+ else: rt x1r+inner_jut+.5u+2=lft x11l-inner_jut; fi
+else: bulb_diam=max(stem,dot_size);
+ pos2(6/7[vair,flare],90); top y2r=h; rt x2=hround 5.3u;
+ pickup tiny.nib; pos13(bulb_diam,0); pos14(bulb_diam,90);
+ x13=x11-.5; top y14r=min(2x_height,h+1); top y11=x_height;
+ if bot y14l-x_height<tiny: y14l:=min(y14r-eps,y11+2tiny); fi
+ x13=x14; y13=.5[y14l,y14r]; dot(13,14); % dot
+fi; % this is the ligature we're drawing
+f_stroke(1,2,a,b,c,jut,inner_jut); % left stem, arc, terminal, serif
+pickup tiny.nib; filldraw stroke z11e--z12e; % right stem
+pickup crisp.nib; top y3r=top y4r=x_height; lft x3=hround .5u-1;
+pos3(bar,90); pos4(bar,90);
+if serifs: x4=x1;
+ sloped_serif.l(11,12,d,1/3,jut,min(oo,serif_drop)); % upper right serif
+ dish_serif(12,11,e,1/3,inner_jut,f,1/3,jut); % lower right serif
+else: rt x4=x1; fi
+pickup crisp.nib; filldraw stroke z3e--z4e; % bar
+penlabels(1,2,3,4,11,12,13,14); endchar;
+
+cmchar "The ligature langes sl";
+beginchar(oct"215",10u#+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');
+pos11(stem',0); rt x11r=hround(w-2.5u+.5stem');
+pos12(stem',0); x11=x12; bot y12=0; top y11=h;
+filldraw stroke z11e--z12e; % right stem
+pickup fine.nib; numeric bulb_diam, inner_jut;
+if serifs: bulb_diam=hround .8[stem,flare];
+ pos2(bulb_diam,0); x2r=x11r-stem_corr;
+ y2+.5bulb_diam=.9[x_height,h+oo];
+ sloped_serif.l(11,12,d,1/3,eps,max(serif_drop,oo)); % erase excess at top
+ if rt x1r+jut+.5u+2<=lft x11l-jut: inner_jut=jut;
+ else: rt x1r+inner_jut+.5u+2=lft x11l-inner_jut; fi
+else: pos2(5/7[vair,flare],90); top y2r=h; rt x2=hround 5.3u; fi
+f_stroke(1,2,a,b,c,jut,inner_jut); % left stem, arc, terminal, serif
+pickup crisp.nib; top y3r=top y4r=x_height; lft x3=hround .5u-1;
+pos3(bar,90); pos4(bar,90);
+if serifs: x4=x1;
+ dish_serif(12,11,e,1/3,inner_jut,f,1/3,jut); % lower right serif
+else: rt x4=x1; fi
+pickup crisp.nib; filldraw stroke z3e--z4e; % bar
+penlabels(1,2,3,4,11,12); endchar;
+
+cmchar "The ligature langes sfi";
+beginchar(oct"216",15u#+4letter_fit#,asc_height#,0);
+italcorr asc_height#*slant-serif_fit#+.5if serifs:stem# else:dot_size# fi-2u#;
+adjust_fit(0,serif_fit#);
+pickup tiny.nib; pos1(stem',0); lft x1l=hround(2.5u-.5stem');
+pos11(stem',0); lft x11l=hround(.5w-.5stem');
+pos21(stem',0); rt x21r=hround(w-2.5u+.5stem');
+pos22(stem',0); x21=x22; bot y22=0;
+pickup fine.nib; numeric bulb_diam, inner_jut;
+if serifs: bulb_diam=hround 1/4[.8[stem,flare],dot_size];
+ pos2(bulb_diam,0); x2r=x11r-stem_corr;
+ pos12(bulb_diam,0); x12r=x21r;
+ top y21=x_height+min(oo,serif_drop);
+ y2+.5bulb_diam=.8[x_height,h+oo]; y12=y2;
+ if rt x1r+jut+.5u+2<=lft x11l-jut: inner_jut=jut;
+ else: rt x1r+inner_jut+.5u+2=lft x11l-inner_jut; fi
+else: bulb_diam=max(stem,dot_size);
+ pos2(5/7[vair,flare],90); top y2r=h; rt x2=hround 5.75u;
+ pos12(6/7[vair,flare],90); y12=y2; rt x12=hround(.5w+2.8u);
+ pickup tiny.nib; pos23(bulb_diam,0); pos24(bulb_diam,90);
+ x23=x21-.5; top y24r=min(10/7x_height+.5bulb_diam,h)+1; top y21=x_height;
+ if bot y24l-x_height<tiny: y24l:=min(y24r-eps,y21+2tiny); fi
+ x23=x24; y23=.5[y24l,y24r]; dot(23,24); fi % dot
+f_stroke(1,2,a,b,c,jut,inner_jut); % left stem, arc, terminal, serif
+f_stroke(11,12,d,e,f,inner_jut,inner_jut); % middle ditto
+pickup tiny.nib; filldraw stroke z21e--z22e; % right stem
+pickup crisp.nib; top y3r=top y4r=x_height; lft x3=hround.5u-1;
+pos3(bar,90); pos4(bar,90);
+if serifs: x4=x21; % bar will overlap upper right serif
+ sloped_serif.l(21,22,g,1/3,jut,min(oo,serif_drop)); % upper right serif
+ dish_serif(22,21,h,1/3,inner_jut,i,1/3,jut); % lower right serif
+else: rt x4=hround(.5w+2.8u); fi
+pickup crisp.nib;
+pos3'(bar,90); x3'=x1; y3'=y3;
+pos4'(bar,90); x4'-x11=x3-x1; y4'=y4;
+filldraw stroke z3e--z3'e; filldraw stroke z4'e--z4e; % bars
+penlabels(1,2,3,4,11,12,21,22,23,24); endchar;
+
+cmchar "The ligature langes sfl";
+beginchar(oct"217",15u#+4letter_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');
+pos11(stem',0); lft x11l=hround(.5w-.5stem');
+pos21(stem',0); rt x21r=hround(w-2.5u+.5stem');
+pos22(stem',0); x21=x22; bot y22=0; top y21=h;
+filldraw stroke z21e--z22e; % right stem
+pickup fine.nib; numeric bulb_diam, inner_jut;
+if serifs: bulb_diam=hround .8[stem,flare];
+ pos2(bulb_diam,0); x2r=x11r-stem_corr;
+ pos12(bulb_diam,0); x12r=x21r-stem_corr;
+ y2+.5bulb_diam=.85[x_height,h+oo]; y12+.5bulb_diam=.9[x_height,h+oo];
+ sloped_serif.l(21,22,g,1/3,eps,max(serif_drop,oo)); % erase excess at top
+ if rt x1r+jut+.5u+2<=lft x11l-jut: inner_jut=jut;
+ else: rt x1r+inner_jut+.5u+2=lft x11l-inner_jut; fi
+else: 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); fi
+f_stroke(1,2,a,b,c,jut,inner_jut); % left stem, arc, terminal, serif
+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);
+if serifs: dish_serif(22,21,h,1/3,inner_jut,i,1/3,jut); % lower right serif
+ pickup crisp.nib; x4=x21;
+else: rt x4=hround(.5w+2.8u); fi
+pos3'(bar,90); x3'=x1; y3'=y3;
+pos4'(bar,90); x4'-x11=x3-x1; y4'=y4;
+filldraw stroke z3e--z3'e; filldraw stroke z4'e--z4e; % bars
+penlabels(1,2,3,4,11,12,21,22); endchar;
+
+% Combinations "f" and "langes Es"
+
+cmchar "The ligature langes fs";
+beginchar(oct"233",10.5u#+2letter_fit#,asc_height#,0);
+italcorr asc_height#*slant+if serifs:flare#-.25u# else: 1.25u# fi;
+adjust_fit(0,0);
+pickup tiny.nib; pos1(stem',0); lft x1l=hround(2.5u-.5stem');
+pos11(stem',0); rt x11r=hround(w-3u+.5stem');
+pickup fine.nib; numeric bulb_diam, inner_jut;
+if serifs: bulb_diam=hround .8[stem,flare];
+ pos2(bulb_diam,0); pos12(bulb_diam,0);
+ rt x2r=hround(rt x11r-stem_corr); lft x12l=hround(w-.75u+.5);
+ y2+.5bulb_diam=.85[x_height,h+oo]; y12+.5bulb_diam=.9[x_height,h+oo];
+ if rt x1r+jut+.5u+2<=lft x11l-jut: inner_jut=jut;
+ else: rt x1r+inner_jut+.5u+2=lft x11l-inner_jut; fi
+else: pos2(5/7[vair,flare],90); top y2r=h; rt x2=hround 6.25u;
+ pos12(5/7[vair,flare],90); y12=y2; rt x12=hround(w+.75u); fi
+f_stroke(1,2,a,b,c,jut,inner_jut); % left stem, arc, terminal, serif
+f_stroke(11,12,d,e,f,inner_jut,1.25jut); % right stem, arc, terminal, serif
+pickup crisp.nib; top y3r=top y4r=x_height; lft x3=hround .5u-1;
+pos3(bar,90); pos4(bar,90);
+rt x4=hround(w-1/3u);
+pos4'(bar,90); x4'=x11; y4'=y4;
+filldraw stroke z3e--z4'e; % bar
+penlabels(1,2,3,4,11,12); endchar;
+
+cmchar "The ligature langes fsi";
+beginchar(oct"236",15u#+4letter_fit#,asc_height#,0);
+italcorr asc_height#*slant-serif_fit#+.5if serifs:stem# else:dot_size# fi-2u#;
+adjust_fit(0,serif_fit#);
+pickup tiny.nib; pos1(stem',0); lft x1l=hround(2.5u-.5stem');
+pos11(stem',0); lft x11l=hround(.5w-.5stem');
+pos21(stem',0); rt x21r=hround(w-2.5u+.5stem');
+pos22(stem',0); x21=x22; bot y22=0;
+pickup fine.nib; numeric bulb_diam, inner_jut;
+if serifs: bulb_diam=hround 1/4[.8[stem,flare],dot_size];
+ pos2(bulb_diam,0); x2r=x11r-stem_corr;
+ pos12(bulb_diam,0); x12r=x21r;
+ top y21=x_height+min(oo,serif_drop);
+ y2+.5bulb_diam=.8[x_height,h+oo]; y12=y2;
+ if rt x1r+jut+.5u+2<=lft x11l-jut: inner_jut=jut;
+ else: rt x1r+inner_jut+.5u+2=lft x11l-inner_jut; fi
+else: bulb_diam=max(stem,dot_size);
+ pos2(5/7[vair,flare],90); top y2r=h; rt x2=hround 5.75u;
+ pos12(6/7[vair,flare],90); y12=y2; rt x12=hround(.5w+2.8u);
+ pickup tiny.nib; pos23(bulb_diam,0); pos24(bulb_diam,90);
+ x23=x21-.5; top y24r=min(10/7x_height+.5bulb_diam,h)+1; top y21=x_height;
+ if bot y24l-x_height<tiny: y24l:=min(y24r-eps,y21+2tiny); fi
+ x23=x24; y23=.5[y24l,y24r]; dot(23,24); fi % dot
+f_stroke(1,2,a,b,c,jut,inner_jut); % left stem, arc, terminal, serif
+f_stroke(11,12,d,e,f,inner_jut,inner_jut); % middle ditto
+pickup tiny.nib; filldraw stroke z21e--z22e; % right stem
+pickup crisp.nib; top y3r=top y4r=x_height; lft x3=hround.5u-1;
+pos3(bar,90); pos4(bar,90);
+if serifs: x4=x21; % bar will overlap upper right serif
+ sloped_serif.l(21,22,g,1/3,jut,min(oo,serif_drop)); % upper right serif
+ dish_serif(22,21,h,1/3,inner_jut,i,1/3,jut); % lower right serif
+else: rt x4=hround(.5w+2.8u); fi
+pickup crisp.nib;
+pos4'(bar,90); x4'=x11; y4'=y4;
+filldraw stroke z3e--z4'e; % bar
+penlabels(1,2,3,4,11,12,21,22,23,24); endchar;
+
+cmchar "The ligature langes fsl";
+beginchar(oct"237",15u#+4letter_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');
+pos11(stem',0); lft x11l=hround(.5w-.5stem');
+pos21(stem',0); rt x21r=hround(w-2.5u+.5stem');
+pos22(stem',0); x21=x22; bot y22=0; top y21=h;
+filldraw stroke z21e--z22e; % right stem
+pickup fine.nib; numeric bulb_diam, inner_jut;
+if serifs: bulb_diam=hround .8[stem,flare];
+ pos2(bulb_diam,0); x2r=x11r-stem_corr;
+ pos12(bulb_diam,0); x12r=x21r-stem_corr;
+ y2+.5bulb_diam=.85[x_height,h+oo]; y12+.5bulb_diam=.9[x_height,h+oo];
+ sloped_serif.l(21,22,g,1/3,eps,max(serif_drop,oo)); % erase excess at top
+ if rt x1r+jut+.5u+2<=lft x11l-jut: inner_jut=jut;
+ else: rt x1r+inner_jut+.5u+2=lft x11l-inner_jut; fi
+else: 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); fi
+f_stroke(1,2,a,b,c,jut,inner_jut); % left stem, arc, terminal, serif
+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);
+if serifs: dish_serif(22,21,h,1/3,inner_jut,i,1/3,jut); % lower right serif
+ pickup crisp.nib; x4=x21;
+else: rt x4=hround(.5w+2.8u); fi
+pos4'(bar,90); x4'=x11; y4'=y4;
+filldraw stroke z3e--z4'e; % bar
+penlabels(1,2,3,4,11,12,21,22); endchar;
+
+% Combinations "langes Es" and "langes Es"
+
+cmchar "The ligature lange ss";
+beginchar(oct"253",10.5u#+2letter_fit#,asc_height#,0);
+italcorr asc_height#*slant+if serifs:flare#-.25u# else: 1.25u# fi;
+adjust_fit(0,0);
+pickup tiny.nib; pos1(stem',0); lft x1l=hround(2.5u-.5stem');
+pos11(stem',0); rt x11r=hround(w-3u+.5stem');
+pickup fine.nib; numeric bulb_diam, inner_jut;
+if serifs: bulb_diam=hround .8[stem,flare];
+ pos2(bulb_diam,0); pos12(bulb_diam,0);
+ rt x2r=hround(rt x11r-stem_corr); lft x12l=hround(w-.75u+.5);
+ y2+.5bulb_diam=.85[x_height,h+oo]; y12+.5bulb_diam=.9[x_height,h+oo];
+ if rt x1r+jut+.5u+2<=lft x11l-jut: inner_jut=jut;
+ else: rt x1r+inner_jut+.5u+2=lft x11l-inner_jut; fi
+else: pos2(5/7[vair,flare],90); top y2r=h; rt x2=hround 6.25u;
+ pos12(5/7[vair,flare],90); y12=y2; rt x12=hround(w+.75u); fi
+f_stroke(1,2,a,b,c,jut,inner_jut); % left stem, arc, terminal, serif
+f_stroke(11,12,d,e,f,inner_jut,1.25jut); % right stem, arc, terminal, serif
+pickup crisp.nib; top y3r=top y4r=x_height; lft x3=hround .5u-1;
+pos3(bar,90); pos4(bar,90);
+rt x4=x11;
+pos3'(bar,90); x3'=x1; y3'=y3;
+pos4'(bar,90); x4'-x11=x3-x1; y4'=y4;
+filldraw stroke z3e--z3'e; filldraw stroke z4'e--z4e; % bars
+penlabels(1,2,3,4,11,12); endchar;
+
+cmchar "The ligature lange ssi";
+beginchar(oct"256",15u#+4letter_fit#,asc_height#,0);
+italcorr asc_height#*slant-serif_fit#+.5if serifs:stem# else:dot_size# fi-2u#;
+adjust_fit(0,serif_fit#);
+pickup tiny.nib; pos1(stem',0); lft x1l=hround(2.5u-.5stem');
+pos11(stem',0); lft x11l=hround(.5w-.5stem');
+pos21(stem',0); rt x21r=hround(w-2.5u+.5stem');
+pos22(stem',0); x21=x22; bot y22=0;
+pickup fine.nib; numeric bulb_diam, inner_jut;
+if serifs: bulb_diam=hround 1/4[.8[stem,flare],dot_size];
+ pos2(bulb_diam,0); x2r=x11r-stem_corr;
+ pos12(bulb_diam,0); x12r=x21r;
+ top y21=x_height+min(oo,serif_drop);
+ y2+.5bulb_diam=.8[x_height,h+oo]; y12=y2;
+ if rt x1r+jut+.5u+2<=lft x11l-jut: inner_jut=jut;
+ else: rt x1r+inner_jut+.5u+2=lft x11l-inner_jut; fi
+else: bulb_diam=max(stem,dot_size);
+ pos2(5/7[vair,flare],90); top y2r=h; rt x2=hround 5.75u;
+ pos12(6/7[vair,flare],90); y12=y2; rt x12=hround(.5w+2.8u);
+ pickup tiny.nib; pos23(bulb_diam,0); pos24(bulb_diam,90);
+ x23=x21-.5; top y24r=min(10/7x_height+.5bulb_diam,h)+1; top y21=x_height;
+ if bot y24l-x_height<tiny: y24l:=min(y24r-eps,y21+2tiny); fi
+ x23=x24; y23=.5[y24l,y24r]; dot(23,24); fi % dot
+f_stroke(1,2,a,b,c,jut,inner_jut); % left stem, arc, terminal, serif
+f_stroke(11,12,d,e,f,inner_jut,inner_jut); % middle ditto
+pickup tiny.nib; filldraw stroke z21e--z22e; % right stem
+pickup crisp.nib; top y3r=top y4r=x_height; lft x3=hround.5u-1;
+pos3(bar,90); pos4(bar,90);
+if serifs: x4=x11; % bar will overlap upper right serif
+ sloped_serif.l(21,22,g,1/3,jut,min(oo,serif_drop)); % upper right serif
+ dish_serif(22,21,h,1/3,inner_jut,i,1/3,jut); % lower right serif
+else: rt x4=x11; fi
+pickup crisp.nib;
+pos3'(bar,90); x3'=x1; y3'=y3;
+pos4'(bar,90); x4'-x11=x3-x1; y4'=y4;
+filldraw stroke z3e--z3'e; filldraw stroke z4'e--z4e; % bars
+penlabels(1,2,3,4,11,12,21,22,23,24); endchar;
+
+cmchar "The ligature lange ssl";
+beginchar(oct"257",15u#+4letter_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');
+pos11(stem',0); lft x11l=hround(.5w-.5stem');
+pos21(stem',0); rt x21r=hround(w-2.5u+.5stem');
+pos22(stem',0); x21=x22; bot y22=0; top y21=h;
+filldraw stroke z21e--z22e; % right stem
+pickup fine.nib; numeric bulb_diam, inner_jut;
+if serifs: bulb_diam=hround .8[stem,flare];
+ pos2(bulb_diam,0); x2r=x11r-stem_corr;
+ pos12(bulb_diam,0); x12r=x21r-stem_corr;
+ y2+.5bulb_diam=.85[x_height,h+oo]; y12+.5bulb_diam=.9[x_height,h+oo];
+ sloped_serif.l(21,22,g,1/3,eps,max(serif_drop,oo)); % erase excess at top
+ if rt x1r+jut+.5u+2<=lft x11l-jut: inner_jut=jut;
+ else: rt x1r+inner_jut+.5u+2=lft x11l-inner_jut; fi
+else: 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); fi
+f_stroke(1,2,a,b,c,jut,inner_jut); % left stem, arc, terminal, serif
+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);
+if serifs: dish_serif(22,21,h,1/3,inner_jut,i,1/3,jut); % lower right serif
+ pickup crisp.nib; x4=x11;
+else: rt x4=x11; fi
+pos3'(bar,90); x3'=x1; y3'=y3;
+pos4'(bar,90); x4'-x11=x3-x1; y4'=y4;
+filldraw stroke z3e--z3'e; filldraw stroke z4'e--z4e; % bars
+penlabels(1,2,3,4,11,12,21,22); endchar;
+
+% Combinations "f" and "t"
+
+cmchar "The ligature ft";
+beginchar(oct"314",12u#+2letter_fit#,asc_height#,0);
+italcorr x_height#*slant if serifs: -.9u# else: -.4u# fi;
+adjust_fit(0,if serifs: 0 else: -.5u# fi);
+pickup tiny.nib; pos1(stem',0); lft x1l=hround(2.5u-.5stem');
+pos11(stem',0); rt x11r=hround(w-4.5u+.5stem');
+pos12(stem',0); x11=x12; bot y12=0;
+pickup fine.nib; numeric bulb_diam, inner_jut;
+if serifs: bulb_diam=hround 1/4[.8[stem,flare],dot_size];
+ pos2(hround(shaved_stem-stem_corr),0); x2=x12;
+ y2+.5bulb_diam=.8[x_height,h+oo]; top y11=x_height+min(oo,serif_drop);
+ if rt x1r+jut+.5u+2<=lft x11l-jut: inner_jut=jut;
+ else: rt x1r+inner_jut+.5u+2=lft x11l-inner_jut; fi
+else: bulb_diam=max(stem,dot_size);
+ pos2(6/7[vair,flare],90); top y2r=h; rt x2=hround 5.3u;
+fi; % this is the ligature we're drawing
+f_stroke(1,2,a,b,c,jut,inner_jut); % left stem, arc, terminal, serif
+pickup crisp.nib; top y3r=top y4r=x_height; lft x3=hround .5u-1;
+pos3(bar,90); pos4(bar,90);
+if serifs: x4=x11; % bar will overlap upper right serif
+else: x4=x11; fi
+pickup crisp.nib; filldraw stroke z3e--z4e; % bar
+numeric shaved_stem; shaved_stem=hround(stem if hefty:-\\2stem_corr fi);
+pickup fine.nib; pos22(shaved_stem,180);pos23(shaved_stem,180);
+x22=x23=x11;
+y22=y28; y23=max(.5bar_height,2vair);
+pickup crisp.nib; pos28(bar,90);
+rt x28=hround(w-1.3u); top y28r=x_height; x27-x22=x3-x1; y27l=y28l;
+pos27(bar,90);
+filldraw stroke z27e--z28e; % crossbar
+pickup tiny.nib; pos21(hround(shaved_stem-stem_corr),0);
+rt x21r=fine.rt x22l; top if serifs: y21=y2 else: y21=9/7x_height fi;
+penpos22'(x21r-x21l,0); x22'=x21; y22'=y22;
+filldraw stroke z21e--z22'e; % upper terminal
+pickup fine.nib; interim superness:=more_super;
+pos24(vair',-90); bot y24r=-oo; rt x25r=hround(w-u);
+if serifs: pos25(hair,0); y25=y23; x24l=.5[x23l,x25l];
+ (x,y24r)=whatever[z24l,z25l]; x24r:=max(x,.5[x23r,x24]);
+ filldraw stroke z22e..super_arc.e(23,24)...{up}z25e; % stem and hook
+ pickup crisp.nib; pos26(hair,0); pos25'(hair,0);
+ x26=x25=x25'; top y26=max(vround .75bar_height,top y25); y25=y25';
+ filldraw stroke z25'e--z26e; % terminal
+else: 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 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 fi;
+penlabels(1,2,3,4,11,12,13,14,21,22,23,24,25,26,27,28); endchar;
+
+cmchar "The ligature fft";
+beginchar(oct"316",17u#+4letter_fit#,asc_height#,0);
+italcorr x_height#*slant if serifs: -.9u# else: -.4u# fi;
+adjust_fit(0,if serifs: 0 else: -.5u# fi);
+pickup tiny.nib; pos1(stem',0); lft x1l=hround(2.5u-.5stem');
+pos11(stem',0); x11=7.5u;
+pos21(stem',0); rt x21r=hround(w-4.5u+.5stem');
+pos22(stem',0); x21=x22; bot y22=0;
+pickup fine.nib; numeric bulb_diam, inner_jut;
+if serifs: bulb_diam=hround 1/4[.8[stem,flare],dot_size];
+ pos2(bulb_diam,0); x2r=x11r-stem_corr;
+ pos12(hround(shaved_stem-stem_corr),0); x12=x21;
+ top y21=x_height+min(oo,serif_drop);
+ y2+.5bulb_diam=.8[x_height,h+oo]; y12=y2;
+ if rt x1r+jut+.5u+2<=lft x11l-jut: inner_jut=jut;
+ else: rt x1r+inner_jut+.5u+2=lft x11l-inner_jut; fi
+else: bulb_diam=max(stem,dot_size);
+ pos2(5/7[vair,flare],90); top y2r=h; rt x2=hround 5.75u;
+ pos12(6/7[vair,flare],90); y12=y2; rt x12=hround(.5w+2.8u); fi
+f_stroke(1,2,a,b,c,jut,inner_jut); % left stem, arc, terminal, serif
+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);
+if serifs: x4=x21; % bar will overlap upper right serif
+else: rt x4=hround(.5w+2.8u); fi
+pickup crisp.nib;
+if hefty: pos3'(bar,90); x3'-x1=.8(x2-x1); y3'=y3;
+ pos4'(bar,90); x4'=x11; y4'=y4;
+ filldraw stroke z3e--z3'e; filldraw stroke z4'e--z4e; % bars
+else: filldraw stroke z3e--z4e; fi % bar
+numeric shaved_stem; shaved_stem=hround(stem if hefty:-\\2stem_corr fi);
+pickup fine.nib; pos32(shaved_stem,180);pos33(shaved_stem,180);
+x32=x33=x21;
+y32=y38; y33=max(.5bar_height,2vair);
+pickup crisp.nib; pos38(bar,90);
+rt x38=hround(w-1.3u); top y38r=x_height; x37-x32=x3-x1; y37l=y38l;
+pos37(bar,90);
+filldraw stroke z37e--z38e; % crossbar
+pickup tiny.nib; pos31(hround(shaved_stem-stem_corr),0);
+rt x31r=fine.rt x32l; top if serifs: y31=y2 else: y31=9/7x_height fi;
+penpos32'(x31r-x31l,0); x32'=x31; y32'=y32;
+filldraw stroke z31e--z32'e; % upper terminal
+pickup fine.nib; interim superness:=more_super;
+pos34(vair',-90); bot y34r=-oo; rt x35r=hround(w-u);
+if serifs: pos35(hair,0); y35=y33; x34l=.5[x33l,x35l];
+ (x,y34r)=whatever[z34l,z35l]; x34r:=max(x,.5[x33r,x34]);
+ filldraw stroke z32e..super_arc.e(33,34)...{up}z35e; % stem and hook
+ pickup crisp.nib; pos36(hair,0); pos35'(hair,0);
+ x36=x35=x35'; top y36=max(vround .75bar_height,top y35); y35=y35';
+ filldraw stroke z35'e--z36e; % terminal
+else: pos35(vair,-75); top y35l=vround .2[top y34l,bar_height];
+ x35l:=good.x x35l; x34l=1/3[x33l,x35l]; x34r:=1/3[x33r,x35r];
+ y33l:=y33l+.2vair;
+ filldraw stroke z32e..super_arc.e(33,34); % stem and hook
+ path p; p=stroke z34e{right}..tension .9 and atleast 1..z35e; % terminal
+ if (xpart(z35l-precontrol 1 of p)<0) or (xpart(z35r-postcontrol 2 of p)<0):
+ filldraw stroke z34e{right}...{up}z35e;
+ else: filldraw p; fi fi;
+penlabels(1,2,3,4,11,12,21,22,23,24,31,32,33,34,35,36,37,38); endchar;
+
+% Combinations "langes Es" and ("t" or "ft")
+
+cmchar "The ligature langes st";
+beginchar(oct"334",12u#+2letter_fit#,asc_height#,0);
+italcorr x_height#*slant if serifs: -.9u# else: -.4u# fi;
+adjust_fit(0,if serifs: 0 else: -.5u# fi);
+pickup tiny.nib; pos1(stem',0); lft x1l=hround(2.5u-.5stem');
+pos11(stem',0); rt x11r=hround(w-4.5u+.5stem');
+pos12(stem',0); x11=x12; bot y12=0;
+pickup fine.nib; numeric bulb_diam, inner_jut;
+if serifs: bulb_diam=hround 1/4[.8[stem,flare],dot_size];
+ pos2(hround(shaved_stem-stem_corr),0); x2=x12;
+ y2+.5bulb_diam=.8[x_height,h+oo]; top y11=x_height+min(oo,serif_drop);
+ if rt x1r+jut+.5u+2<=lft x11l-jut: inner_jut=jut;
+ else: rt x1r+inner_jut+.5u+2=lft x11l-inner_jut; fi
+else: bulb_diam=max(stem,dot_size);
+ pos2(6/7[vair,flare],90); top y2r=h; rt x2=hround 5.3u;
+fi; % this is the ligature we're drawing
+f_stroke(1,2,a,b,c,jut,inner_jut); % left stem, arc, terminal, serif
+pickup crisp.nib; top y3r=top y4r=x_height; lft x3=hround .5u-1;
+pos3(bar,90); pos4(bar,90);
+if serifs: x4=x1; % bar will overlap upper right serif
+else: x4=x1; fi
+pickup crisp.nib; filldraw stroke z3e--z4e; % bar
+numeric shaved_stem; shaved_stem=hround(stem if hefty:-\\2stem_corr fi);
+pickup fine.nib; pos22(shaved_stem,180);pos23(shaved_stem,180);
+x22=x23=x11;
+y22=y28; y23=max(.5bar_height,2vair);
+pickup crisp.nib; pos28(bar,90);
+rt x28=hround(w-1.3u); top y28r=x_height; x27-x22=x3-x1; y27l=y28l;
+pos27(bar,90);
+filldraw stroke z27e--z28e; % crossbar
+pickup tiny.nib; pos21(hround(shaved_stem-stem_corr),0);
+rt x21r=fine.rt x22l; top if serifs: y21=y2 else: y21=9/7x_height fi;
+penpos22'(x21r-x21l,0); x22'=x21; y22'=y22;
+filldraw stroke z21e--z22'e; % upper terminal
+pickup fine.nib; interim superness:=more_super;
+pos24(vair',-90); bot y24r=-oo; rt x25r=hround(w-u);
+if serifs: pos25(hair,0); y25=y23; x24l=.5[x23l,x25l];
+ (x,y24r)=whatever[z24l,z25l]; x24r:=max(x,.5[x23r,x24]);
+ filldraw stroke z22e..super_arc.e(23,24)...{up}z25e; % stem and hook
+ pickup crisp.nib; pos26(hair,0); pos25'(hair,0);
+ x26=x25=x25'; top y26=max(vround .75bar_height,top y25); y25=y25';
+ filldraw stroke z25'e--z26e; % terminal
+else: 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 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 fi;
+penlabels(1,2,3,4,11,12,13,14,21,22,23,24,25,26,27,28); endchar;
+
+cmchar "The ligature langes sft";
+beginchar(oct"336",17u#+4letter_fit#,asc_height#,0);
+italcorr x_height#*slant if serifs: -.9u# else: -.4u# fi;
+adjust_fit(0,if serifs: 0 else: -.5u# fi);
+pickup tiny.nib; pos1(stem',0); lft x1l=hround(2.5u-.5stem');
+pos11(stem',0); x11=7.5u;
+pos21(stem',0); rt x21r=hround(w-4.5u+.5stem');
+pos22(stem',0); x21=x22; bot y22=0;
+pickup fine.nib; numeric bulb_diam, inner_jut;
+if serifs: bulb_diam=hround 1/4[.8[stem,flare],dot_size];
+ pos2(bulb_diam,0); x2r=x11r-stem_corr;
+ pos12(hround(shaved_stem-stem_corr),0); x12=x21;
+ top y21=x_height+min(oo,serif_drop);
+ y2+.5bulb_diam=.8[x_height,h+oo]; y12=y2;
+ if rt x1r+jut+.5u+2<=lft x11l-jut: inner_jut=jut;
+ else: rt x1r+inner_jut+.5u+2=lft x11l-inner_jut; fi
+else: bulb_diam=max(stem,dot_size);
+ pos2(5/7[vair,flare],90); top y2r=h; rt x2=hround 5.75u;
+ pos12(6/7[vair,flare],90); y12=y2; rt x12=hround(.5w+2.8u); fi
+f_stroke(1,2,a,b,c,jut,inner_jut); % left stem, arc, terminal, serif
+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);
+if serifs: x4=x21; % bar will overlap upper right serif
+else: rt x4=hround(.5w+2.8u); fi
+pickup crisp.nib;
+pos3'(bar,90); x3'=x1; y3'=y3;
+pos4'(bar,90); x4'-x11=x3-x1; y4'=y4;
+filldraw stroke z3e--z3'e; filldraw stroke z4'e--z4e; % bars
+numeric shaved_stem; shaved_stem=hround(stem if hefty:-\\2stem_corr fi);
+pickup fine.nib; pos32(shaved_stem,180);pos33(shaved_stem,180);
+x32=x33=x21;
+y32=y38; y33=max(.5bar_height,2vair);
+pickup crisp.nib; pos38(bar,90);
+rt x38=hround(w-1.3u); top y38r=x_height; x37-x32=x3-x1; y37l=y38l;
+pos37(bar,90);
+filldraw stroke z37e--z38e; % crossbar
+pickup tiny.nib; pos31(hround(shaved_stem-stem_corr),0);
+rt x31r=fine.rt x32l; top if serifs: y31=y2 else: y31=9/7x_height fi;
+penpos32'(x31r-x31l,0); x32'=x31; y32'=y32;
+filldraw stroke z31e--z32'e; % upper terminal
+pickup fine.nib; interim superness:=more_super;
+pos34(vair',-90); bot y34r=-oo; rt x35r=hround(w-u);
+if serifs: pos35(hair,0); y35=y33; x34l=.5[x33l,x35l];
+ (x,y34r)=whatever[z34l,z35l]; x34r:=max(x,.5[x33r,x34]);
+ filldraw stroke z32e..super_arc.e(33,34)...{up}z35e; % stem and hook
+ pickup crisp.nib; pos36(hair,0); pos35'(hair,0);
+ x36=x35=x35'; top y36=max(vround .75bar_height,top y35); y35=y35';
+ filldraw stroke z35'e--z36e; % terminal
+else: pos35(vair,-75); top y35l=vround .2[top y34l,bar_height];
+ x35l:=good.x x35l; x34l=1/3[x33l,x35l]; x34r:=1/3[x33r,x35r];
+ y33l:=y33l+.2vair;
+ filldraw stroke z32e..super_arc.e(33,34); % stem and hook
+ path p; p=stroke z34e{right}..tension .9 and atleast 1..z35e; % terminal
+ if (xpart(z35l-precontrol 1 of p)<0) or (xpart(z35r-postcontrol 2 of p)<0):
+ filldraw stroke z34e{right}...{up}z35e;
+ else: filldraw p; fi fi;
+penlabels(1,2,3,4,11,12,21,22,23,24,31,32,33,34,35,36,37,38); endchar;
+
+% Variations "fft"
+
+cmchar "The ligature langes fst";
+beginchar(oct"356",17u#+4letter_fit#,asc_height#,0);
+italcorr x_height#*slant if serifs: -.9u# else: -.4u# fi;
+adjust_fit(0,if serifs: 0 else: -.5u# fi);
+pickup tiny.nib; pos1(stem',0); lft x1l=hround(2.5u-.5stem');
+pos11(stem',0); x11=7.5u;
+pos21(stem',0); rt x21r=hround(w-4.5u+.5stem');
+pos22(stem',0); x21=x22; bot y22=0;
+pickup fine.nib; numeric bulb_diam, inner_jut;
+if serifs: bulb_diam=hround 1/4[.8[stem,flare],dot_size];
+ pos2(bulb_diam,0); x2r=x11r-stem_corr;
+ pos12(hround(shaved_stem-stem_corr),0); x12=x21;
+ top y21=x_height+min(oo,serif_drop);
+ y2+.5bulb_diam=.8[x_height,h+oo]; y12=y2;
+ if rt x1r+jut+.5u+2<=lft x11l-jut: inner_jut=jut;
+ else: rt x1r+inner_jut+.5u+2=lft x11l-inner_jut; fi
+else: bulb_diam=max(stem,dot_size);
+ pos2(5/7[vair,flare],90); top y2r=h; rt x2=hround 5.75u;
+ pos12(6/7[vair,flare],90); y12=y2; rt x12=hround(.5w+2.8u); fi
+f_stroke(1,2,a,b,c,jut,inner_jut); % left stem, arc, terminal, serif
+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);
+if serifs: x4=x21; % bar will overlap upper right serif
+else: rt x4=hround(.5w+2.8u); fi
+pickup crisp.nib;
+pos4'(bar,90); x4'=x11; y4'=y4;
+filldraw stroke z3e--z4'e; % bar
+numeric shaved_stem; shaved_stem=hround(stem if hefty:-\\2stem_corr fi);
+pickup fine.nib; pos32(shaved_stem,180);pos33(shaved_stem,180);
+x32=x33=x21;
+y32=y38; y33=max(.5bar_height,2vair);
+pickup crisp.nib; pos38(bar,90);
+rt x38=hround(w-1.3u); top y38r=x_height; x37-x32=x3-x1; y37l=y38l;
+pos37(bar,90);
+filldraw stroke z37e--z38e; % crossbar
+pickup tiny.nib; pos31(hround(shaved_stem-stem_corr),0);
+rt x31r=fine.rt x32l; top if serifs: y31=y2 else: y31=9/7x_height fi;
+penpos32'(x31r-x31l,0); x32'=x31; y32'=y32;
+filldraw stroke z31e--z32'e; % upper terminal
+pickup fine.nib; interim superness:=more_super;
+pos34(vair',-90); bot y34r=-oo; rt x35r=hround(w-u);
+if serifs: pos35(hair,0); y35=y33; x34l=.5[x33l,x35l];
+ (x,y34r)=whatever[z34l,z35l]; x34r:=max(x,.5[x33r,x34]);
+ filldraw stroke z32e..super_arc.e(33,34)...{up}z35e; % stem and hook
+ pickup crisp.nib; pos36(hair,0); pos35'(hair,0);
+ x36=x35=x35'; top y36=max(vround .75bar_height,top y35); y35=y35';
+ filldraw stroke z35'e--z36e; % terminal
+else: pos35(vair,-75); top y35l=vround .2[top y34l,bar_height];
+ x35l:=good.x x35l; x34l=1/3[x33l,x35l]; x34r:=1/3[x33r,x35r];
+ y33l:=y33l+.2vair;
+ filldraw stroke z32e..super_arc.e(33,34); % stem and hook
+ path p; p=stroke z34e{right}..tension .9 and atleast 1..z35e; % terminal
+ if (xpart(z35l-precontrol 1 of p)<0) or (xpart(z35r-postcontrol 2 of p)<0):
+ filldraw stroke z34e{right}...{up}z35e;
+ else: filldraw p; fi fi;
+penlabels(1,2,3,4,11,12,21,22,23,24,31,32,33,34,35,36,37,38); endchar;
+
+cmchar "The ligature lange sst";
+beginchar(oct"376",17u#+4letter_fit#,asc_height#,0);
+italcorr x_height#*slant if serifs: -.9u# else: -.4u# fi;
+adjust_fit(0,if serifs: 0 else: -.5u# fi);
+pickup tiny.nib; pos1(stem',0); lft x1l=hround(2.5u-.5stem');
+pos11(stem',0); x11=7.5u;
+pos21(stem',0); rt x21r=hround(w-4.5u+.5stem');
+pos22(stem',0); x21=x22; bot y22=0;
+pickup fine.nib; numeric bulb_diam, inner_jut;
+if serifs: bulb_diam=hround 1/4[.8[stem,flare],dot_size];
+ pos2(bulb_diam,0); x2r=x11r-stem_corr;
+ pos12(hround(shaved_stem-stem_corr),0); x12=x21;
+ top y21=x_height+min(oo,serif_drop);
+ y2+.5bulb_diam=.8[x_height,h+oo]; y12=y2;
+ if rt x1r+jut+.5u+2<=lft x11l-jut: inner_jut=jut;
+ else: rt x1r+inner_jut+.5u+2=lft x11l-inner_jut; fi
+else: bulb_diam=max(stem,dot_size);
+ pos2(5/7[vair,flare],90); top y2r=h; rt x2=hround 5.75u;
+ pos12(6/7[vair,flare],90); y12=y2; rt x12=hround(.5w+2.8u); fi
+f_stroke(1,2,a,b,c,jut,inner_jut); % left stem, arc, terminal, serif
+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);
+if serifs: x4=x11; % bar will overlap upper right serif
+else: rt x4=x11; fi
+pickup crisp.nib;
+pos3'(bar,90); x3'=x1; y3'=y3;
+pos4'(bar,90); x4'-x11=x3-x1; y4'=y4;
+filldraw stroke z3e--z3'e; filldraw stroke z4'e--z4e; % bars
+numeric shaved_stem; shaved_stem=hround(stem if hefty:-\\2stem_corr fi);
+pickup fine.nib; pos32(shaved_stem,180);pos33(shaved_stem,180);
+x32=x33=x21;
+y32=y38; y33=max(.5bar_height,2vair);
+pickup crisp.nib; pos38(bar,90);
+rt x38=hround(w-1.3u); top y38r=x_height; x37-x32=x3-x1; y37l=y38l;
+pos37(bar,90);
+filldraw stroke z37e--z38e; % crossbar
+pickup tiny.nib; pos31(hround(shaved_stem-stem_corr),0);
+rt x31r=fine.rt x32l; top if serifs: y31=y2 else: y31=9/7x_height fi;
+penpos32'(x31r-x31l,0); x32'=x31; y32'=y32;
+filldraw stroke z31e--z32'e; % upper terminal
+pickup fine.nib; interim superness:=more_super;
+pos34(vair',-90); bot y34r=-oo; rt x35r=hround(w-u);
+if serifs: pos35(hair,0); y35=y33; x34l=.5[x33l,x35l];
+ (x,y34r)=whatever[z34l,z35l]; x34r:=max(x,.5[x33r,x34]);
+ filldraw stroke z32e..super_arc.e(33,34)...{up}z35e; % stem and hook
+ pickup crisp.nib; pos36(hair,0); pos35'(hair,0);
+ x36=x35=x35'; top y36=max(vround .75bar_height,top y35); y35=y35';
+ filldraw stroke z35'e--z36e; % terminal
+else: pos35(vair,-75); top y35l=vround .2[top y34l,bar_height];
+ x35l:=good.x x35l; x34l=1/3[x33l,x35l]; x34r:=1/3[x33r,x35r];
+ y33l:=y33l+.2vair;
+ filldraw stroke z32e..super_arc.e(33,34); % stem and hook
+ path p; p=stroke z34e{right}..tension .9 and atleast 1..z35e; % terminal
+ if (xpart(z35l-precontrol 1 of p)<0) or (xpart(z35r-postcontrol 2 of p)<0):
+ filldraw stroke z34e{right}...{up}z35e;
+ else: filldraw p; fi fi;
+penlabels(1,2,3,4,11,12,21,22,23,24,31,32,33,34,35,36,37,38); endchar;
+
+cmchar "The ligature ct";
+beginchar(oct"343",15u#+max(u#,.5stem#),asc_height#,0);
+italcorr x_height#*slant if serifs: -.9u# else: -.4u# fi;
+adjust_fit(0,if serifs: 0 else: -.5u# fi);
+numeric shaved_stem; shaved_stem=hround(stem if hefty:-\\2stem_corr fi);
+pickup fine.nib; pos2(vair',90); pos4(vair',270);
+x2=x4=.5(8u+u); top y2r=vround(x_height+1.5oo); bot y4r=-oo;
+pos3(curve,180); lft x3r=hround max(.6u,1.35u-.5curve); y3=.5x_height;
+if serifs: pos1(hair,0); pos0(flare,0);
+ y1=min(bar_height+.5flare+2vair'+2,.9[bar_height,x_height]-.5flare);
+ rt x1r=hround(8u-.7u); bulb(2,1,0); % bulb
+ pos5(hair,0); rt x5r=hround(8u-.5u);
+ y5=max(good.y(.5bar_height-.9),y4l+vair');
+ (x,y4l)=whatever[z4r,z5l]; x4l:=min(x,x4l+.5u);
+ filldraw stroke pulled_super_arc.e(2,3)(.7superpull)
+ & pulled_super_arc.e(3,4)(.5superpull)
+ ..tension .9 and 1..{x5-x4,5(y5-y4)}z5e; % arc and lower terminal
+else: pos1(4/7[vair',flare],80);
+ rt x1r=hround(8u-.6u); top y1r=vround .82[bar_height,top y2r];
+ filldraw stroke term.e(2,1,right,.8,4); % upper terminal
+ pos5(.6[vair',flare],275); rt x5r=hround(8u-.5u);
+ y5r=good.y(y5r+1/3bar_height-y5); y5l:=good.y y5l; x5l:=good.x x5l;
+ forsuffixes e=l,r: path p.e; p.e=z4e{right}..tension .9 and 1..z5e;
+ if angle direction 1 of p.e>75:
+ p.e:=z4e{right}..tension atleast.9 and 1..{dir 75}z5e; fi endfor
+ filldraw stroke pulled_super_arc.e(2,3)(.7superpull)
+ & pulled_super_arc.e(3,4)(.5superpull) & p.e; fi % arc and lower terminal
+pickup fine.nib; pos22(shaved_stem,180);pos23(shaved_stem,180);
+lft x22r=lft x23r=hround(9u+2.5u-.5shaved_stem);
+y22=y28; y23=max(.5bar_height,2vair);
+pickup crisp.nib; pos28(bar,90);
+rt x28=hround(w-1.3u); top y28r=x_height; lft x27=hround 9u+1/3u; y27l=y28l;
+if hefty: pos27(bar,90);
+ filldraw stroke z27e--z28e; % crossbar
+ pickup tiny.nib; pos21(hround(shaved_stem-stem_corr),0);
+ rt x21r=fine.rt x22l; top y21=9/7x_height;
+ penpos22'(x21r-x21l,0); x22'=x21; y22'=y22;
+ filldraw stroke z21e--z22'e; % upper terminal
+else: pos27(vair,90); pos21(hair,0);
+ rt x21r=fine.rt x22l; top y21=10/7x_height;
+ filldraw z21l{down}...{left}z27r--z27l--z28l
+ --z28r--(x21r,y28r)--z21r--cycle; fi % upper terminal and crossbar
+pickup fine.nib; interim superness:=more_super;
+pos24(vair',-90); bot y24r=-oo; rt x25r=hround(w-u);
+if serifs: pos25(hair,0); y25=y23; x24l=.5[x23l,x25l];
+ filldraw stroke z22e..super_arc.e(23,24)...{up}z25e; % stem and hool
+ pickup crisp.nib; pos26(hair,0); pos25'(hair,0);
+ x26=x25=x25'; top y26=max(vround .75bar_height,top y25); y25=y25';
+ filldraw stroke z25'e--z26e; % terminal
+else: 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 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 fi;
+pickup tiny.nib;
+if hefty:
+ pos31(4/7[vair',flare],80); x31=x1; y31=y1;
+ pos32(hair,-90); x32=8.5u; y32=h;
+ pos33(hround(shaved_stem-stem_corr),-180); x33=x21; y33=y21;
+else:
+ pos31(2hair,0); x31l=x0l+.5fine; y31=y0;
+ pos32(hair,-90); x32=8.5u; y32=h;
+ pos33(hair,-180); x33=x21; y33=y21; fi;
+filldraw stroke z31e..z32e..{down}z33e;
+penlabels(0,1,2,3,4,5,21,22,23,24,25,26,27,28,31,32,33); endchar;