% Punctuation marks and accents for GL % Author: Bert Bos % Date 22 Oct 1990 % SPACE (not used by TeX) % defchar(" ", 2u#+0.3width#, xheight#, 0, lcthinpen, 0); erase drawdot (0,0); endchar; % PUNCTUATION MARKS defchar(".", 2u#+dotwidth#, dotwidth#, 0, dotpen, 0); % % ## % ## % drawdot (w/2,h/2); endchar; vardef comma(expr X, Y) = % % ## % ## % # % # % save x, y; pickup dotpen; z1'=(X,Y+dotwidth/2); drawdot z1'; x2l=X-1/2dotwidth; y2r=Y-comma_depth; penpos2(fine,-45); z1r=rt z1'; penpos1(lc_thin,0); penstroke z1e{down}..{down+left}z2e; enddef; defchar(",", 2u#+dotwidth#, dotwidth#, comma_depth#, dotpen, 0); comma(w/2,0); endchar; ligtable ",": "," kern -u#; % Low (Dutch) opening quotes ,, defchar(hex"002", 2u#+dotwidth#, cap#, 0, dotpen, 0); comma(w/2,cap-dotwidth); % apostrophe endchar; defchar("'", 2u#+dotwidth#, cap#, 0, dotpen, 0); comma(w/2,cap-dotwidth); % quoteright endchar; ligtable "'": "'" kern -u#; % Closing quotes '' defchar(oct"003", 3u#+2dotwidth#, cap#, 0, dotpen, 0); comma(u+dotwidth/2,cap-dotwidth); % quotation mark comma(w-u-dotwidth/2,cap-dotwidth); endchar; defchar(oct"004", 3u#+2dotwidth#, cap#, 0, dotpen, 0); comma(u+dotwidth/2,cap-dotwidth); % quotation mark comma(w-u-dotwidth/2,cap-dotwidth); endchar; vardef invcomma(expr X, Y) = % % ## % ## % # % # % % % % save x, y; pickup dotpen; top z1'=(X,Y+dotwidth); drawdot z1'; x2r=X+dotwidth/2; y2l=bot y1'-comma_depth; penpos2(fine,45); z1l=lft z1'; penpos1(lc_thin,0); penstroke z1e{down}..{down+right}z2e; enddef; defchar("`", 2u#+dotwidth#, cap#, 0, dotpen, 0); invcomma(w/2,cap-dotwidth); endchar; ligtable "`": "`" kern -u#; % Opening quotes `` defchar(oct"005", 3u#+2dotwidth#, cap#, 0, dotpen, 0); invcomma(u+dotwidth/2,cap-dotwidth); % quotedblleft invcomma(w-u-dotwidth/2,cap-dotwidth); endchar; defchar(":", 2u#+dotwidth#, xheight#, 0, dotpen, 0); % % ## 1 % ## % % % ## 2 % ## % top z1=(w/2,h); bot z2=(w/2,0); drawdot z1; drawdot z2; endchar; defchar(";", 2u#+dotwidth#, xheight#, comma_depth#, dotpen, 0); % % ## % ## % % % ## % ## % # % # % top z3=(w/2,h); drawdot z3; bot z1'=(w/2,0); drawdot z1'; x2l=u; y2r=-d; penpos2(fine,-45); z1r=rt z1'; penpos1(lc_thin,0); penstroke z1e{down}..{down+left}z2e; endchar; defchar("!", 2.5u#+uc_thick#, cap#, 0, dotpen, 0); % % 3 % ### % ### % ### % ### % ### % ### 2 % % ### % ### 1 % bot z1=((w+1/2u)/2,0); drawdot z1; pickup ucthinpen; bot z2=(x1,dotwidth+lc_thick); drawdot z2; pickup ucthickpen; top z3=(x2,h+vo); drawdot z3; penpos2(uc_thin,0); penpos3(uc_thick,0); penstroke z2e..z3e; endchar; ligtable "!": "`" =: oct"006"; defchar(oct"006",2.5u#+uc_thick#, cap#, 0, dotpen, 0); % % ### % ### 1 % % ### 2 % ### % ### % ### % ### % ### % 3 % top z1=((w-1/2u)/2,h); drawdot z1; pickup ucthinpen; top z2=(x1,h-dotwidth-lc_thick); drawdot z2; pickup ucthickpen; bot z3=(x2,-vo); drawdot z3; penpos2(uc_thin,0); penpos3(uc_thick,0); penstroke z2e..z3e; endchar; defchar("?", 2.5u#+0.32width#, cap#, 0, lccurvepen, 0); % % 4 % #### % 5 # ### % ### 3 % ### % ### % ### % 2 ### % % ### % 1 ### % z5l=(3/2u-ho,0.8h); penpos5(fine,inclination-90); top z4=((w+1/2u)/2,h+vo); penpos4(pen_top-pen_bot,-90); penstroke z5e{dir inclination}..{right}z4e; bot z2=(x4,dotwidth+lc_thick); rt z3=(w-u+ho,0.75h); draw z2{up}..{up}z3..{left}z4; pickup dotpen; bot z1=(x4,-vo); drawdot z1; endchar; ligtable "?": "`" =: oct"007"; defchar(oct"007", 2.5u#+0.32width#, cap#, 0, lccurvepen, 0); % % 1 ### % ### % % 2 ### % ### % ### % ### % ### 3 % ### # 5 % #### % 4 % z5r=(w-3/2u+ho,h-0.8h); penpos5(fine,inclination-90); bot z4=((w-1/2u)/2,-vo); penpos4(pen_top-pen_bot,-90); penstroke z5e{dir(inclination-180)}..{left}z4e; top z2=(x4,h-dotwidth-lc_thick); lft z3=(u-ho,0.25h); draw z2{down}..{down}z3..{right}z4; pickup dotpen; top z1=(x4,h+vo); drawdot z1; endchar; defchar("/", 2u#+0.3width#, cap#, 0, lcthinpen, 0); % % 1 ## % ## % ## % ## % 2 ## % rt z1=(w-u+ho,h); lft z2=(u-ho,0); draw z1..z2; cutoff(z1,90); cutoff(z2,-90); endchar; defchar(oct"001", 2u#+0.3width#, cap#, 0, lcthinpen, 0); % % 1 ## % ## % ## % ## % 2 ## % lft z1=(u-ho,h); rt z2=(w-u+ho,0); draw z1..z2; cutoff(z1,90); cutoff(z2,-90); endchar; defchar("$", 2u#+0.5width#-2ba#, cap#, u#, lcthinpen, 0); % % 8 10 % # 2# % ######## % 3 ## # # # 1 % ## # # % ######## % # 4# ## % # # ## 5 % 7 # # # ## % ######## % # 6# % 9 11 % save s, t, p; path p; numeric s, t; top rt z1=(w-u+ba+ho,4/5(h-u)); z1'=rt z1; top z2=(1/2w,h-u+vo); bot lft z7=(u-ba-ho,1/5(h-u)); z7'=lft z7; bot z6=(1/2w,-vo); z4=(1/2w,0.55(h-u)); pickup lcpen; lft z3=(u-ba-ho,1/2[y2,y4]); rt z5=(w-u+ba+ho,1/2[y6,y4]); p=z1{up}..{left}z2..{down}z3..z4..{down}z5..{left}z6..{up}z7; s=directiontime (-dirpentilt) of (subpath (1,2) of p); t=directiontime (-dirpentilt) of (subpath (4,5) of p); pickup lcthinpen; cutdraw subpath (0,1+s) of p; cutdraw subpath (4+t,infinity) of p; pickup lcpen; cutdraw subpath (1+s,2) of p; cutdraw subpath (4,4+t) of p; pickup lcthickpen; cutdraw subpath (2,4) of p; pickup dotpen; drawdot lft z1'; drawdot rt z7'; % And now the two vertical lines pickup lcthinpen; z8=(2/3[x3,x2],h); z9=(x8,-u); draw z8..z9; z10=(w-x8,y8); z11=(x10,y9); draw z10..z11; endchar; defchar(oct"043", 10u#, cap#, descender#, lcthinpen, 0); % % 5 7 % ## ## % ## ## % 1 ############# 2 % ## ## % ## ## % 3 ############# 4 % ## ## % ## ## % 6 8 % lft x1=round u - eps; x3=x1; x2=x4=w-x1; y1=y2=good.y(.5[-d,h]+pt); y3=y4=h-d-y1; draw z1--z2; draw z3--z4; lft x6=round 2u; x7=w-x6; x8=good.x .5w; x5-x6=x7-x8; top y5=top y7=h+eps; bot y6=bot y8=-d-eps; y15=y1; z15=whatever[z5,z6]; y36=y3; z36=whatever[z5,z6]; y27=y2; z27=whatever[z7,z8]; y48=y4; z48=whatever[z7,z8]; draw z5--(good.x(x15+.5),y1)--(good.x(x15-.5),y1) --(good.x(x36+.5),y3)--(good.x(x36-.5),y3)--z6; draw z7--(good.x(x27+.5),y2)--(good.x(x27-.5),y2) --(good.x(x48+.5),y4)--(good.x(x48-.5),y4)--z8; endchar; defchar(oct"045", 2u#+0.55width#, cap#, 0, lcthinpen, 0); % % 3 1 % ### ## % 4## ##6 ## % ### ## % 5 ## % ## % ## 7 % ## ### % ## 8## ##10 % ## ### % 2 9 % rt z1=(w-u,h); lft z2=(u,0); draw z1..z2; cutoff(z1,90); cutoff(z2,-90); top z3=(u+0.2w,h+vo); lft z4=(u-ho,h-0.2h); bot z5=(x3,2[top y3,y4]); rt z6=(2[lft x4,x3],y4); draw z3..z4..z5..z6..cycle; bot z9=(w-x3,-vo); rt z10=(w-u+ho,h-y4); top z7=(w-x5,h-bot y5); lft z8=(w-rt x6,h-y6); draw z7..z8..z9..z10..cycle; endchar; defchar("@", 2u#+0.6width#, cap#, 0, lcthinpen, 0); % % 6 % ########## % # # % # 13 1 # % # ##### # # % # # ##2 # % 8# # # #5 % # #12 # # % # # # # % # # ##3 # % # ##### ### % # 11 4 % # % ##########10 % 9 % rt z5=(w-u+ho,h/2); top z6=(w/2,h+vo); lft z8=(u-ho,h/2); bot z9=(w/2,-vo); rt z10=(w-u-lc_thin/2,1/10h); top rt z1=(2/3w,3/4h); bot z4=(0.5[x1,x5],1/4h); z2=(x1,5/8h); z3=(x1,3/8h); top z13=(w/2,y1+vo); lft z12=(1/3w,h/2); bot z11=(w/2,y4-vo); draw z1..z2..z3..{right}z4..{up}z5...{left}z6..{down}z8..{right}z9..z10; draw z2..{left}z13..{down}z12..{right}z11..z3; endchar; defchar("&", 2u#+0.68width#, cap#, 0, lccurvepen, 0); % % 3 % ### % ## ### % 2 ### ### 4 % ### ## % #### 9 10 % 1 ### ####### % #### 8 ### % # ### ### 7 % ## ### ## % 5 ### ### # % ### #### ## 11 % ### ### ## % ###### #### % 6 0 % lft z5=(u-ho,0.25h); bot z6=(x3,-vo); lft z2=(u+0.14h-ho,0.82h); bot z0=(w-u-0.25h,-vo); rt z11=(w-u+ho,1/5h); z1=whatever[z0,z2+lc_thick*down]; y1=y8; top z3=(0.42w,h+vo); rt z4=(2[x2,x3], y2); z7=(w-u-0.25h,1/3h); z8=(w-u-2lc_thick,0.55h); cutdraw z11{-dir inclination}..z0---z1..{up}z2..{right}z3..{down}z4..{down}z5 ..{right}z6; pickup lcthinpen; draw z6{right}..z7..z8; y9=y10; x9+2lc_thick=x10; z8=1/2[z9,z10]; penpos9(lc_thick,inclination); penpos10(lc_thick,inclination); penstroke z9e..z10e; endchar; defchar("-", u#+0.23width#, xheight#, 0, lcthinpen, 0); % % 1 2 % ##### % z1=(1/2u,h/2); z2=(w-1/2u,h/2); cutdraw z1..z2; endchar; defchar("+", 2u#+0.45width#, xheight#, 0, lcthinpen, 0); % % 3 % # % # % 1 ####### 2 % # % # % 4 % penpos1(lc_thin,90); z1=(u,h/2); penpos2(lc_thin,90); z2=(w-u,h/2); penstroke z1e..z2e; penpos3(lc_thin,0); z3=(w/2,h); penpos4(lc_thin,0); z4=(w/2,0); penstroke z3e..z4e; endchar; defchar("*", 2u#+0.4width#, ascender#, 0, lcmedpen, 0); % % 3 5 % # # % # # % 1 ####### 2 % # # % # # % 6 4 % penpos1(lc_med,90); z1r=(u,h-(w-2u)/2); penpos2(lc_med,90); z2=(w-u,y1); penpos7(lc_thin,90); z7=(w/2,y1); penstroke z1e--z7e--z2e; penpos3(lc_med,60); z3r=(1/3w,h); penpos4(lc_med,60); z4=2[z3,z7]; penpos8(lc_thin,60); z8=z7; penstroke z3e--z8e--z4e; penpos5(lc_med,120); z5r=(2/3w,h); penpos6(lc_med,120); z6=2[z5,z7]; penpos9(lc_thin,120); z9=z7; penstroke z5e--z9e--z6e; drawdot z1; drawdot z2; drawdot z3; drawdot z4; drawdot z5; drawdot z6; endchar; defchar(oct"173", 2u#+0.65width#, xheight#, 0, lcthinpen, 0); % % 1 2 % ######## % penpos1(lc_thin,90); z1=(u,h/2); penpos2(lc_thin,90); z2=(w-u,h/2); penstroke z1e..z2e; endchar; ligtable "-": "-" =: oct"173"; defchar(oct"174", 2u#+0.9width#, xheight#, 0, lcthinpen, 0); % % 1 2 % ########### % penpos1(lc_thin,90); z1=(u,h/2); penpos2(lc_thin,90); z2=(w-u,h/2); penstroke z1e..z2e; endchar; ligtable oct"173": "-" =: oct"174"; defchar("=", 2u#+0.6width#, xheight#, 0, lcthinpen, 0); % % 1 2 % ####### % % 3 4 % ####### % penpos1(lc_thin,90); z1=(u,2/3h); penpos2(lc_thin,90); z2=(w-u,y1); penstroke z1e..z2e; penpos3(lc_thin,90); z3=(x1,1/3h); penpos4(lc_thin,90); z4=(x2,y3); penstroke z3e..z4e; endchar; defchar("(", 2u#+0.2width#, ascender#, comma_depth#, finepen, 0); % % 1 % ## % ## % ## % 2 ## 4 % ## % ## % ## % 3 % top rt z1=(w-u+ho,h+vo); z1'=z1+left; bot rt z3=(w-u+ho,-d-vo); z3'=z3+left; lft z2=(u-ho,0.5[h,-d]); rt z4=(lft x2+lc_thick,y2); filldraw z1'..z2{down}..z3'--z3..z4{up}..z1--cycle; endchar; defchar(")", 2u#+0.2width#, ascender#, comma_depth#, finepen, 0); % % 1 % ## % ## % ## % 4 ## 2 % ## % ## % ## % 3 % top lft z1=(u-ho,h+vo); z1'=z1+right; bot lft z3=(u-ho,-d-vo); z3'=z3+right; rt z2=(w-u+ho,0.5[h,-d]); lft z4=(rt x2-lc_thick,y2); filldraw z1'..z2{down}..z3'--z3..{up}z4..z1--cycle; endchar; defchar("[", 2u#+3lc_thick#, ascender#, comma_depth#, lcpen, 0); % % 2 #### 1 % ## % ## % ## % ## % ## % ## % ## % ## % 3 #### 4 % z1l=(w-u,h); penpos1(lc_thin,-90); z2l=(u,h); z2r=(u+lc_thick,y1r); z3l=(u,-d); z3r=(x2r,y4r); z4l=(w-u,-d); penpos4(lc_thin,90); penstroke z1e--z2e--z3e--z4e; endchar; defchar("]", 2u#+3lc_thick#, ascender#, comma_depth#, lcpen, 0); % % 1 #### 2 % ## % ## % ## % ## % ## % ## % ## % ## % 4 #### 3 % z1r=(u,h); penpos1(lc_thin,90); z2r=(w-u,h); z2l=(w-u-lc_thick,y1l); z3r=(w-u,-d); z3l=(x2l,y4l); z4r=(u,-d); penpos4(lc_thin,-90); penstroke z1e--z2e--z3e--z4e; endchar; defchar(oct"042", 2u#+4lc_thick#, xheight#, 0, lcpen, 0); % % 1 ## ## 4 -- Guillemets (closing) % ## ## % 2 ## ## 5 % ## ## % 3 ## ## 6 % z1l=(u-ho,4/5h); penpos1(fine, 45); z5r=(w-u+ho,h/2); penpos5(lc_thick,0); z3l=(x1l,1/5h); penpos3(fine, -45); z2r=(x5l-lc_thick,h/2); penpos2(lc_thick,0); z4l=(x5-(x2-x1l),4/5h); penpos4(fine, 45); z6l=(x4l,1/5h); penpos6(fine, -45); penstroke z1e--z2e--z3e; penstroke z4e--z5e--z6e; endchar; ligtable ">": ">" =: oct"042"; defchar(oct"134", 2u#+4lc_thick#, xheight#, 0, lcpen, 0); % % 1 ## ## 4 -- Guillemets (opening) % ## ## % 2 ## ## 5 % ## ## % 3 ## ## 6 % z4r=(w-u+ho,4/5h); penpos4(fine, -45); z2l=(u-ho,h/2); penpos2(lc_thick,0); z6r=(x4r,1/5h); penpos6(fine, 45); z5l=(x2r+lc_thick,h/2); penpos5(lc_thick,0); z1r=(x4r-(x5-x2),4/5h); penpos1(fine, -45); z3r=(x1r,1/5h); penpos3(fine, 45); penstroke z1e--z2e--z3e; penstroke z4e--z5e--z6e; endchar; ligtable "<": "<" =: oct"134"; defchar("<", 2u#+0.3width#, ascender#, comma_depth#, finepen, 0); % % 1 % ## % ## % ## % 2 ## 4 % ## % ## % ## % 3 % top rt z1=(w-u+ho,h+vo); z1'=z1+left; bot rt z3=(w-u+ho,-d-vo); z3'=z3+left; lft z2=(u-ho,0.5[h,-d]); rt z4=(lft x2+lc_thick,y2); filldraw z1'--z2--z3'--z3--z4--z1--cycle; endchar; defchar(">", 2u#+0.3width#, ascender#, comma_depth#, finepen, 0); % % 1 % ## % ## % ## % 4 ## 2 % ## % ## % ## % 3 % top lft z1=(u-ho,h+vo); z1'=z1+right; bot lft z3=(u-ho,-d-vo); z3'=z3+right; rt z2=(w-u+ho,0.5[h,-d]); lft z4=(rt x2-lc_thick,y2); filldraw z1'--z2--z3'--z3--z4--z1--cycle; endchar; defchar(oct"011", 2u#+lc_thick#, ascender#, descender#, lcthickpen, 0); % % 1 % ## % ## % ## % ## % ## % ## % ## % 2 % z1=(w/2,h); penpos1(lc_thick,0); z2=(w/2,-d); penpos2(lc_thick,0); penstroke z1e--z2e; endchar; defchar("_", 2u#+0.65width#, 0, comma_depth#, lcthinpen, 0); % % % % 1 2 % ######## % z1r=(0,-d); penpos1(lc_thin,-90); z2r=(w,-d); penpos2(lc_thin,-90); penstroke z1e--z2e; endchar; % ACCENTS % acute(X,Y) draws an acute accent a little above point (X,Y) % % ### c -- Acute accent ("kuut") % b #### d % a ### % % 0.05width 0.15width % |<->$<---->| % vardef acute(expr X, Y) = save a, b, c, d; pair a, b, c, d; a=(X-0.05width,Y+lc_thick); b=(X-0.05width,Y+lc_thick+fine); c=(X+0.15width,Y+2lc_thick+uc_thick); d=(X+0.15width,Y+2lc_thick); fill a--b--c--d--cycle; enddef; defchar(oct"023", 0.30width#, xheight#+2lc_thick#+uc_thick#, 0, finepen, 0); % % ### -- Acute accent ("kuut") % #### % ### % acute(w/2,xheight); % z1l=(1/3w,xheight+lc_thick); penpos1(fine,90); % 2r=(w,h); penpos2(uc_thick,90); % penstroke z1e..z2e; endchar; vardef grave(expr X, Y) = % % c ### -- Grave accent ("aigu") % d #### b % ### a % % 0.15width 0.05width % |<---->$<->| % save a, b, c, d; pair a, b, c, d; a=(X+0.05width,Y+lc_thick); b=(X+0.05width,Y+lc_thick+fine); c=(X-0.15width,Y+2lc_thick+uc_thick); d=(X-0.15width,Y+2lc_thick); fill a--b--c--d--cycle; % z1l=(2/3w,xheight+lc_thick); penpos1(fine,90); % z2r=(0,h); penpos2(uc_thick,90); % penstroke z1e..z2e; enddef; defchar(oct"022", 0.30width#, xheight#+2lc_thick#+uc_thick#, 0, finepen, 0); grave(w/2,xheight); endchar; def caron(expr X, Y) = % % 1 ## ## 3 -- H\'a\v cek accent % ## 4 ## % ### % 2 % save x, y; pickup finepen; top lft z1=(X-1/8width-ho,Y+ascender-xheight+vo); rt z3=(X+1/8width+ho,y1); bot z2=(X,Y+lc_thick); top z4=(X,bot y2+lc_thick); filldraw z1--z2--z3--z4--cycle; enddef; defchar(oct"024", 0.25width#, ascender#, 0, finepen, 0); caron(w/2,xheight); endchar; vardef breve(expr X, Y) = % % 1 # # 3 -- Breve accent ("boogje") % ## 4 ## % ##### % 2 % save x, y; pickup finepen; z1l=(X-1/8width-ho,Y+ascender-xheight+vo); penpos1(fine,0); z2l=(X,Y+lc_thick); penpos2(lc_thin,90); z3l=(X+1/8width+ho,Y+ascender-xheight+vo); penpos3(fine,180); penstroke z1e{down}..z2e..{up}z3e; enddef; defchar(oct"025", 0.25width#, ascender#, 0, finepen, 0); breve(w/2,xheight); endchar; defchar(oct"026", 0.25width#, xheight#+lc_thick#+fine#, 0, finepen, 0); % % 1 ####### 2 -- Macron accent ("streepje") % top lft z1=(-ho,h); top rt z2=(w+ho,h); draw z1..z2; endchar; vardef ring(expr X, Y) = % % # -- Corona accent % # # % # % pickup lcthinpen; draw fullcircle scaled 0.15width shifted (X,Y+lc_thick+0.075width); enddef; defchar(oct"027", 0.15width#, xheight#+lc_thick#+0.15width#, 0, lcthinpen, 0); ring(w/2,xheight); endchar; vardef circumflex(expr X, Y) = % % b -- Circumflex accent ("kap") % ### % ## d ## % a ## ## c % save a, b, c, d; pair a, b, c, d; pickup finepen; bot lft a=(X-0.125width-ho,Y+lc_thick-vo); rt c=(X+0.125width+ho,ypart a); top b=(X,Y+ascender-xheight+vo); bot d=(X,top ypart b-lc_thick); filldraw a--b--c--d--cycle; % bot lft z1=(-ho,xheight+lc_thick-vo); % rt z3=(w+ho,y1); % top z2=(w/2,h+vo); % bot z4=(w/2,top y2-lc_thick); % filldraw z1--z2--z3--z4--cycle; enddef; defchar(hex"08", 0.25width#, ascender#, 0, finepen, 0); circumflex(w/2,xheight); % asciicircum endchar; defchar(oct"136", 0.25width#, ascender#, 0, finepen, 0); circumflex(w/2,xheight); % circumflex accent endchar; vardef dotaccent(expr X, Y) = % % ### -- Dot accent ("punt") % ### % pickup lcthickpen; drawdot bot (X,Y+2uc_thick); enddef; defchar(hex"ad", dotwidth#, xheight#+2uc_thick#, 0, lcthickpen, 0); dotaccent(w/2,xheight); endchar; vardef hungarumlaut(expr X, Y) = % % 2 4 -- Long Hungarian umlaut ("dubbele aigu") % # # % # # % 1 # # 3 % save x, y; pickup finepen; z1l=(X-1/8width-ho,Y+lc_thick-vo); penpos1(fine,0); y2=Y+ascender-xheight+vo; z2=z1+whatever*dir 70; penpos2(uc_thick,0); penstroke z1e..z2e; y3=y1; z3=z4+whatever*dir 70; penpos3(fine,0); z4r=(X+1/8width+ho,Y+ascender-xheight+vo); penpos4(uc_thick,0); penstroke z3e..z4e; enddef; defchar(oct"175", 0.25width#, ascender#, 0, finepen, 0); hungarumlaut(w/2,xheight); endchar; vardef tilde(expr X, Y) = % % 2 -- Tilde accent ("slangetje") % ### # 4 % # # 3 # % 1 # ### % % save x, y; pickup finepen; z1l=(X-1/8width-ho,y3r); penpos1(fine,0); z4r=(X+1/8width+ho,y2l); penpos4(fine,0); z2l=(X-1/16width,Y+lc_thick+2lc_thin+vo); penpos2(lc_thin,-90); z3r=(X+1/16width,Y+lc_thick-vo); penpos3(lc_thin,-90); penstroke z1e{up}..z2e{right}..{right}z3e...{up}z4e; enddef; defchar(oct"176", 0.25width#, xheight#+lc_thick#+2lc_thin#, 0, finepen, 0); tilde(w/2,xheight); endchar; defchar(hex"1A", 0.25width#, xheight#+lc_thick#+2lc_thin#, 0, finepen, 0); tilde(w/2,xheight); % asciitilde endchar; vardef umlaut(expr X, Y) = % % ## ## % ## ## % save a, b; pair a, b; pickup ucthickpen; top lft a=(X-3/2uc_thick,Y+2uc_thick); drawdot a; top rt b=(X+3/2uc_thick,Y+2uc_thick); drawdot b; % top lft z1=(0,h); drawdot z1; % top rt z2=(w,h); drawdot z2; enddef; defchar(oct"177", 3uc_thick#, xheight#+2uc_thick#, 0, ucthickpen, 0); umlaut(w/2,xheight); endchar; % ACCENTS THROUGH THE LETTER def shortslash(expr X, Y) = % % ### 2 -- Dash for Polish crossed l and L % 1 ### % save x, y; pickup finepen; lft z1=(X-serifwd-lc_thick/2,Y-xheight/10); rt z2=(X+serifwd+lc_thick/2,Y+xheight/10); draw z1..z2; enddef; defchar(oct"031", 2serifwd#+lc_thick#, xheight#, 0, finepen, 0); shortslash(w/2,h/2); endchar; % ACCENTS BELOW THE LETTER vardef cedilla(expr X, Y) = % % a # -- Cedille % b ## % # c % d #### % save a, b, c, d; pair a, b, c, d; pickup finepen; a=(X,Y); b=(X,Y-2/3lc_thick); rt c=(X+0.075width+ho,-4/3lc_thick); bot lft d=(X-0.075width-ho,Y-2lc_thick-vo); draw a--b{right}..{down}c..{left}d; enddef; defchar(oct"030", 0.15width#, 0, 2lc_thick#, finepen, 0); cedilla(w/2,0); endchar; def ogonek(expr X, Y) = % % # 1 -- Inverted cedille ("haakje") % ## 2 % 3 # % #### 4 % % To use this accent, add a definition to Plain TeX: % % \def\C#1{\setbox0=\hbox{#1}\ifdim\ht0=1ex \accent'33 #1% % \else{\oalign{\hidewidth\char'33\hidewidth\crcr\unhbox0}}\fi} % save x, y; pickup finepen; z1=(X,Y); z2=(X,Y-1/3d); lft z3=(X-0.075width-ho,Y-4/3lc_thick); bot rt z4=(X+0.075width+ho,Y-2lc_thick-vo); draw z1--z2{left}..{down}z3..{right}z4; enddef; defchar(oct"033", 0.15width#, 0, 2lc_thick#, finepen, 0); ogonek(w/2,0); endchar;