3 % by Gary Wong 2023, Open Font Licence 1.1.
4 % https://openfontlicense.org/
6 % A replica of the neo-grotesque monoline small cap sans-serif typeface
7 % inscribed by Thomas Child at Gilgal Sculpture Garden.
12 font_size 10pt#; % design size
16 fcht#:=8.5pt#; % full cap height
17 scht#:=7pt#; % small cap height
18 u#:=0.5pt#; % general unit
20 o#:=0.1pt#; % overshoot
21 ho#:=o#; % horizontal overshoot
22 px#:=0.67pt#; % pen scale
23 punct#:=1pt#; % punctuation pen scale
24 arch_depth=0.3; % depth of arches on AMNOUW
25 arch_tension=0.8; % tension of arches on AMNOUW
26 bowl_tension=0.8; % tension of outer stroke of bowls on BPR
27 min_tension=0.75; % minimum possible tension
28 asymm:=0.05; % asymmetry
30 angle_nu:=false; % whether the slightly stressed spurs on n and u should
31 % deviate from the vertical
32 lstem#:=u#+s#; % left stem location
37 define_pixels(ht,fcht,scht,u,s);
38 define_blacker_pixels(px,punct);
40 pickup pencircle scaled px; basepen:=savepen;
41 pickup pensquare scaled px; squarepen:=savepen;
43 define_good_x_pixels(lstem);
44 define_corrected_pixels(o);
45 define_horizontal_corrected_pixels(ho);
47 for smallcap=true,false:
50 topbar:=good.y( (0.5+asymm)*scht );
51 botbar:=good.y( (0.5-asymm)*scht );
53 topbar:=good.y( (0.5+asymm)*fcht );
54 botbar:=good.y( (0.5-asymm)*fcht );
57 def beginscchar( expr code, unit_width, need_mid ) =
58 beginchar( code, if smallcap: unit_width*u# else: unit_width*1.15*u# fi,
59 if smallcap: scht# else: fcht# fi,0 );
60 if smallcap: charcode:=charcode + ASCII"a" - ASCII"A"; fi
63 if 0.5w <> good.x 0.5w:
70 rstem=good.x( w-lstem );
71 for i=lstem,mid,rstem: proofrule( (i,0), (i,h) ); endfor
72 for i=botbar, topbar: proofrule( (0,i), (w,i) ); endfor
73 ( if smallcap: "Small capital " else: "Capital " fi ) & code;
80 exitif not known x[i];
81 makelabel(decimal i,z[i]);
89 beginscchar("A",10,false); % --- A ---
95 y2=y4=(1-arch_depth)*h;
98 cutdraw z1..{up}z2..tension arch_tension..z3..tension arch_tension..{down}z4..z5;
108 beginscchar("B",10,false); % --- B ---
120 p=z1{right}..tension min_tension and bowl_tension..z2{down}..tension bowl_tension and 3..z3;
123 draw z5..tension bowl_tension..{down}z6..tension 1 and min_tension..{left}z4;
130 beginscchar("C",10,false); % --- C ---
133 x2=x4=0.6[lstem,rstem];
135 x5=1.05[lstem,rstem];
142 cutdraw z1..{left}z2..{down}z3..z4{right}..z5;
146 beginscchar("D",10.5,false); % --- D ---
157 draw z1..z3{right}..tension 0.85..z4..tension 0.85..z5{left}..z2;
164 beginscchar("E",9,false); % --- E ---
168 x1=0.86[lstem,rstem];
171 x6=0.72[lstem,rstem];
181 beginscchar("F",9,false); % --- F ---
187 x5=0.72[lstem,rstem];
197 beginscchar("G",11,false); % --- G ---
211 cutdraw z1..{left}z2..z3..z4{right}..z5..z6--z7;
215 beginscchar("H",10,false); % --- H ---
231 beginscchar("I",5,true); % --- I ---
243 beginscchar("J",9,true); % --- J ---
253 cutdraw z1{down}..z2{down}..z3{left}..z4;
257 beginscchar("K",10,false); % --- K ---
266 draw z1{dir -100}..z3..z2;
268 draw z3..{dir -80}z4;
276 beginscchar("L",9,false); % --- L ---
289 beginscchar("M",14,true); % --- M ---
299 y2=y4=y7=(1-arch_depth)*h;
301 cutdraw z1..{up}z2..tension arch_tension..z3..tension arch_tension..{down}z4..z5;
302 cutdraw z5..{up}z4..tension arch_tension..z6..tension arch_tension..{down}z7..z8;
306 beginscchar("N",10,false); % --- N ---
312 y2=y4=(1-arch_depth)*h;
315 cutdraw z1..{up}z2..tension arch_tension..z3..tension arch_tension..{down}z4..z5;
324 fill z2--z6--z7--z8--cycle;
336 fill z8--z9--z10--z7--z6--cycle;
342 beginscchar("O",10,false); % --- O ---
348 y2=y6=(1-arch_depth)*h;
352 draw z1..tension arch_tension..{down}z2--z3{down}..tension arch_tension..z4..tension arch_tension..{up}z5--z6{up}..tension arch_tension..cycle;
356 beginscchar("P",10,false); % --- P ---
365 draw z1{right}..tension min_tension and bowl_tension..z2{down}..tension bowl_tension and infinity..z3;
372 beginscchar("Q",11,false); % --- Q ---
375 x2=x3=0.95[lstem,rstem];
378 y2=y6=(1-arch_depth)*h;
382 draw z1..tension arch_tension..{down}z2--z3{down}..tension arch_tension..z4..tension arch_tension..{up}z5--z6{up}..tension arch_tension..cycle;
384 pickup pencircle scaled 0.4px;
391 filldraw z7--z8--z9--cycle;
395 beginscchar("R",10,false); % --- R ---
407 p=z1{right}..tension min_tension and bowl_tension..z2{down}..tension bowl_tension and infinity..z3;
418 beginscchar("S",10,false); % --- S ---
426 y3=(0.8+0.5asymm)[y5,y2];
428 y4=(0.2+1.5asymm)[y5,y2];
432 draw z1..z2{left}..z3{down}..tension 1.2..z4{down}..tension 0.85 and 1..z5{left}..z6;
433 pickup squarepen; cutoff(z1,-45); cutoff(z6,135);
437 beginscchar("T",9,true); % --- T ---
444 top y1=top y2=top y3=h;
452 beginscchar("U",10,false); % --- U ---
461 cutdraw z1..{down}z2..tension arch_tension..z3..tension arch_tension..{up}z4..z5;
470 fill z2--z6--z7--z8--cycle;
482 fill z8--z9--z10--z7--z6--cycle;
488 beginscchar("V",10,false); % --- V ---
495 cutdraw z1{down}..{right}z2;
503 beginscchar("W",14,true); % --- W ---
513 y2=y4=y7=arch_depth*h;
515 draw z1..{down}z2..tension arch_tension..z3..tension arch_tension..{up}z4..z5;
516 cutoff(z1,90); cutoff(z5,90);
517 draw z5..{down}z4..tension arch_tension..z6..tension arch_tension..{up}z7..z8;
518 cutoff(z5,90); cutoff(z8,90);
522 beginscchar("X",11,false); % --- X ---
524 x1=0.03[lstem,rstem];
525 x2=0.97[lstem,rstem];
526 x3=(-0.03)[lstem,rstem];
527 x4=1.03[lstem,rstem];
531 cutdraw z1{down}..{down}z4;
532 cutdraw z2{down}..{down}z3;
536 beginscchar("Y",11.5,false); % --- Y ---
548 draw z3{down}..tension 0.8 and 1.2..z2..tension 0.8..{left}z4;
549 cutoff(z3,90); cutoff(z4,180);
553 beginscchar("Z",10,false); % --- Z ---
560 draw z1{right}..{right}z2{down}..{down}z3{right}..{right}z4;
561 cutoff(z1,180); cutoff(z4,0);
567 beginchar(".",4u#,3u#,0); % --- . ---
571 pickup pencircle scaled punct;
581 beginchar(",",4u#,3u#,3u#); % --- , ---
585 pickup pencircle scaled punct;
595 fill z3{curl1}..{up}z1..z2{down}..cycle;
601 beginchar(";",4u#,10u#,3u#); % --- ; ---
605 pickup pencircle scaled punct;
618 fill z4{curl1}..{up}z2..z3{down}..cycle;
624 beginchar("'",4u#,fcht#,0); % --- ' ---
628 pickup pencircle scaled punct;
634 y3=y2+pen_bot-pen_top;
638 fill z3{curl1}..{up}z1..z2{down}..cycle;
644 beginchar("!",4u#,scht#,0); % --- ! ---
648 pickup pencircle scaled punct;
659 fill z3{(-1,3)}..tension 2 and 1.5..z2{right}..tension 1.5 and 2..z3{(-1,-3)}..cycle;
665 % The following glyphs were added by extrapolating from others; no direct
666 % source references for the shapes are known.
668 beginchar(":",4u#,10u#,0); % --- : ---
672 pickup pencircle scaled punct;
685 beginchar("/",9u#,fcht#,0); % --- / ---
692 pickup pencircle scaled px;
699 beginchar("(",8u#,fcht#,0); % --- ( ---
707 pickup pencircle scaled px;
708 cutdraw z1..z2{down}..z3;;
714 beginchar(")",8u#,fcht#,0); % --- ) ---
719 z2=(w-s-u,0.5[y1,y3]);
722 pickup pencircle scaled px;
723 cutdraw z1..z2{down}..z3;;
766 font_normal_space 4u#+2s#;
767 font_normal_stretch 3u#;
768 font_normal_shrink 2u#;
769 font_identifier "Gilgal";
770 font_coding_scheme "OT1";