% METAFONT for "Okuda" orthography of pIqaD (Klingon language) % By Mark Shoulson (shoulson@ctr.columbia.edu). This file may be freely % distributed, provided this header and assorted comments are included, % blah blah blah. Please let me know if you like it. I'm no METAFONT % genius, and luckily the font is such that it probably wouldn't have % helped if I were. I could have saved some time with more defines, % but probably not much. Basically, this was done by squinting through % graph-paper at photocopier-enlarged letters and tweaking stuff with % the key points. Low-tech. % % The glyphs here are (at least some of) those used by Paramount in the % current Star Trek movies and shows. The sound assignments to the % standard romanized transliteration of tlhIngan Hol (the Klingon % language) as written by Marc Okrand (ref. The Klingon Dictionary, % ISBN 0-671-74559-X) were made by... someone. I'm not sure if it % was someone at Paramount or Dr. Lawrence Schoen at the Klingon % Language Institute (P.O. Box 634, Flourtown, PA 19031-0634 USA) % % I haven't managed to clear up the strange path errors at all % resolutions; it works most of the time, and when it does error % just hitting enter (or setting turningcheck:=0) usually works. % % Too bad the spacing is so lousy... mode_setup; if unknown u#: 14u#=10pt#; % Letters were 14 squares high on graph paper, and 10pt % seemed a nice round number. fi define_pixels(u); font_slant 0u#; font_normal_space 13u#; font_normal_stretch 5u#; font_normal_shrink 2u#; font_x_height 14u#; font_quad 18u#; font_extra_space 10u#; design_size=15pt#; pickup pencircle scaled .1u; piqpen:=savepen; % just for a little thickness. beginchar("a",15u#,14u#,0pt#); "Klingon a"; pickup piqpen; z1=(15u,14u); y2=y1; x2+5.7u=x1; z3=(.7u,2.7u); z2.3=(4.6u,7u); z4=(x1,-.2u); z3.4=(11.5u,2.4u); z5=(13.1u,6.8u); z4.5=(7.2u,6u); z4.5.1=(10u,5u); z5.1=(9.5u,10.7u); labels(1,2,3,4,5,2.3,3.4,4.5,4.5.1,5.1); filldraw z1--z2&flex(z2,z2.3,z3)&z3{right}...{z4-z3}z3.4...z4& z4{z5-z4}..z4.5.1..{z5-z4}z4.5...{right}z5& z5{dir 175}...{z1-z5}z5.1...{dir 5}z1..cycle; endchar; beginchar("b",14u#,14u#,0u#); "Klingon b"; pickup piqpen; z1=(.5u,10.7u); z2=(3.7u,14.2u); z1.2=(2.5u,12.5u); z3=(5u,13.7u); z3.4=(7u,11.7u); z3.4.4=(10.8u,13.3u); z4=(w,w); z5=(12u,-.2u); z4.5=(9u,9u); z6=(3.7u,7.7u); z5.6=(5u,9.2u); z5.6.1=(8u,5u); z7=(2.5u,7.6u); z7.1=(2u,9u); labels(1,2,3,4,5,6,7,1.2,3.4,4.5,5.6,5.6.1,7.1,3.4.4); filldraw flex(z1,z1.2,z2)--z3{dir -60}...z3.4{z4-z3}...z3.4.4...{right}z4& flex(z4,z4.5,z5)&z5..z5.6.1...{left}z5.6...z6-- flex(z7,z7.1,z1)..cycle; endchar; beginchar("C",15u#,14u#,0u#); "Klingon ch"; pickup piqpen; z1=(0u,3u); z2=(4.3u,h); z1.2=(2.1u,8.5u); z2.3=(10u,6.2u); z2.2.3=(7u,9u); z3=(w+.1u,h); z3.4.1=(w,4u); z3.4.2=(10u,-.6u); z4=(4.2u,1.2u); z4.5.1=(9u,1u); z4.5.2=(11.8u,3u); z5=(7.1u,4.5u); z5.1=(6u,7.1u); labels(1,2,3,4,5,1.2,2.3,2.2.3,3.4.1,3.4.2,4.5.1,4.5.2,5.1); filldraw flex(z1,z1.2,z2)&z2{z2.3-(x2+3u,y2)}..{z2.3-z2}z2.2.3.. {right}z2.3...{dir 80}z3& z3{dir 265}..{down}z3.4.1..{left}z3.4.2..z4& z4..{right}z4.5.1..{up}z4.5.2..{dir 185}z5& z5{up}..{left}z5.1..z1..cycle; endchar; beginchar("D",12u#,14u#,0u#); "Klingon D"; pickup piqpen; rt z1=(4u,0u); z2=(x1,2u); z2.3=(2.2u,2.5u); z3=(4u,7.7u); z3.3.1=(3.2u,6u); z3.1=(.6u,1.7u); filldraw z1--z2{left}..{up}z2.3..{up}z3& z3..z3.3.1..{down}z3.1..{right}z1..cycle; z4=(5.3u,.3u); z5=(x4,1.7u); z5.6.1=(9u,4u); z5.6.2=(3.2u,12.3u); z6=(3.5u,14u); z7=(4u,13.8u); z7.7.4=(7u,9u); z7.4=(12.3u,3.6u); labels(1,2,3,4,5,6,7,2.3,5.6.1,5.6.2,7.7.4,7.4); filldraw z4--z5{right}...{up}z5.6.1..{up}z5.6.2..z6& z6{z7-z6}...z7{dir 280}..{z7.4-z7}z7.7.4..tension 1 and 3.. {down}z7.4..tension 3 and 1..{dir 185}z4..cycle; endchar; beginchar("e",9u#,14u#,0u#); "Klingon e"; pickup piqpen; z1=(1u,0u); z2=(2.8u,2.4u); z2.3=(2u,5u); z3=(3u,11.3u); z3.4=(6u,11.8u); z4=(9.1u,11.7u); z5=(9.2u,h); z6=(0,h); z6.1=(0,7u); labels(1,2,3,4,5,6,2.3,3.4,6.1); filldraw z1--z2..{up}z2.3..z3& z3..{right}z3.4..z4--z5--z6& z6..tension 10..z6.1..{down}z1..cycle; endchar; beginchar("G",17u#,14u#,0u#); "Klingon gh"; pickup piqpen; z1=(0,-.2u); z1.2=(3u,2.1u); z2=(7.3u,4u); z3=(9u,11.6u); z4=(6u,12.5u); z5=(5u,h); z6=(14.8u,y5); z7=(16.7u,12u); z8=(11.7u,11.7u); z9=(10.3u,4.1u); z10=(16.4u,2u); z10.1=(12u,2.6u); labels(1,2,3,4,5,6,7,8,9,10,1.2,10.1); filldraw z1..z1.2..z2--z3--z4--z5--z6--z7{left}..z8--z9& z9{right}..z10&z10..{left}z10.1..z1..cycle; endchar; beginchar("H",8u#,14u#,0u#); "Klingon H"; pickup piqpen; z1=(0u,10u); z2=(4u,h); z4=(7.3u,10.2u); z4.5=(4u,4.5u); z5=(5.8u,0u); z5.1=(2u,4u); filldraw z1..tension 4..z2..tension 4..z4& z4..tension 2.5..{down}z4.5..tension 1.5..z5& flex(z5,z5.1,z1)&z1..cycle; cullit; z6=(1.8u,10.2u); z7=(5.6u,11u); z8=(4.1u,7.8u); z9=(2u,7.1u); unfill z6..tension 5..{right}z7..tension 5.. z8..tension 5..z9..tension 7..cycle; labels(1,2,3,4,5,6,7,8,9,5.1); endchar; beginchar("I",12u#,14u#,0u#); "Klingon I"; pickup piqpen; z1=(11u,0u); z2=(7.5u,1.5u); z3=(.5u,9.8u); z4=(2.5u,h); z5=(6u,h); z6=(3.1u,10.7u); z7=(7u,8.6u); z8=(9u,11.2u); z9=(8.1u,h); z10=(11.7u,h); z11=(w,11u); z12=(7.5u,5.5u); labels(1,2,3,4,5,6,7,8,9,10,11,12); filldraw z1..tension 3..z2..tension 4..z3..tension 4..z4--z5& z5..tension 2..z6{down}..tension 2 and 1.. z7{right}..z8{up}..z9--z10..tension 4..z11..tension 3.. z12..tension 2..{dir -45}z1..cycle; endchar; beginchar("j",13u#,14u#,0u#); "Klingon j"; pickup piqpen; z1=(.5u,.5u); z2=(1.5u,11.6u); z1.2=(4.5u,8.5u); z3=(4.2u,h); z3.4=(7.5u,y4); z4=(w,13u); z4.5=(11.8u,7u); z5=(9u,2u); z5.6=(10u,8.6u); z6=(8.2u,10.3u); z6.1=(5u,5.5u); z6.1.1=(2.6u,2u); labels(1,2,3,4,5,6,1.2,3.4,4.5,5.6,6.1,6.1.1); filldraw z1..{up}z1.2..{left}z2--z3..z3.4---z4& z4{down}..z4.5..z5& z5..{up}z5.6..{left}z6.. %{z1-z6} z6.1.. z6.1.1..z1..cycle; endchar; beginchar("l",10u#,14u#,0u#); "Klingon l"; pickup piqpen; z1=(0u,2u); z1.2.1=(2.5u,2.1u); z1.2.2=(5.5u,2u); z2=(w,-.3u); z2.3=(8.3u,3u); z3=(4.6u,4.4u); z4=(6.7u,9.8u); z5=(w-.2u,10.2u); z6=(6.7u,h); labels(1,2,3,4,5,6,1.2.1,1.2.2,2.3); filldraw z1..z1.2.1{right}..z1.2.2..z2& z2..z2.3..z3--z4--z5--z6--z1..cycle; endchar; beginchar("m",10u#,14u#,0u#); "Klingon m"; pickup piqpen; z1=(0u,10u); z1.2=(2.7u,11.4u); z2=(5.5u,h); z2.3=(7u,13.2u); z3=(w,10.1u); z4=(7u,3.7u); z5=(7.8u,7.5u); z6=(6.2u,10.3u); z7=(3.9u,7.5u); z8=(7.2u,-.1u); labels(1,2,3,4,5,6,7,8,1.2,2.3); filldraw flex(z1,z1.2,z2)&flex(z2,z2.3,z3)& z3{down}..z4& z4..{up}z5..{left}z6..{down}z7..z8&z8..{up}z1..cycle; endchar; beginchar("n",12u#,14u#,0u#); "Klingon n"; pickup piqpen; z1=(w,-.3u); z2=(7.6u,0u); z3=(0u,9.4u); z4=(5.3u,h); z5=(9u,11.3u); z6=(8u,10.8u); z6.7=(5.1u,11u); z7=(3u,9u); z8=(8.8u,9u); z9=(10u,7u); z10=(6u,6u); z10.1=(8.5u,2.4u); labels(1,2,3,4,5,6,7,8,9,10,6.7,z10.1); filldraw z1--z2..tension 4..z3..tension 4..z4..tension 3.5..z5--z6{left} ..{left}z6.7...{z3-z4}z7--z8--z9{left}...{down}z10..z10.1.. z1..cycle; endchar; beginchar("N",16u#,14u#,0u#); "Klingon ng"; pickup piqpen; z1=(0u,h+.2u); z1.2=(10u,h-.1u); z2=(w-1.1u,h+.2u); z3=(w,h-1); z4=(14.2u,8.3u); z5=(11.6u,12u); z6=(10u,10.4u); z7=(10.6u,8.8u); z8=(6.3u,6.6u); z9=(11.3u,0u); z10=(2u,6.6u); z11=(5u,10.7u); labels(1,2,3,4,5,6,7,8,9,10,11,1.2); filldraw z1..{right}z1.2..{right}z2..z3---z4& z4{up}..{left}z5..{down}z6..z7& z7{left}..tension 2 and 1..{down}z8..tension 1 and 2..z9& z9..tension 3 and 2..{up}z10..tension 2 and 1..z11..tension 1.5.. {curl 0}z1..cycle; endchar; beginchar("o",13u#,14u#,0u#); "Klingon o"; pickup piqpen; z1=(-.3u,h+.3u); z1.2=(6.7u,h-.2u); z2=(w-1u,h+.1u); z3=(w,h-3.2u); z4=(w-1.1u,h-3u); z5=(w-1.8u,h-3.6u); z6=(w-.5u,h-6.3u); z7=(w-4u,5u); z8=(w-1u,0u); z9=(6.1u,y7); z10=(8.4u,9.5u); z10.1=(2u,h-1.2u); labels(1,2,3,4,5,6,7,8,9,10,1.2,10.1); filldraw z1..z1.2...{curl 8}z2--z3..{left}z4..{down}z5..{curl 0}z6& z6..tension 2..{down}z7..tension 2..z8& z8..tension 2 and 1..{up}z9..{up}z10..{z1-z10}z10.1..z1..cycle; endchar; beginchar("p",10u#,14u#,0u#); "Klingon p"; pickup piqpen; z1=(0,0); z2=(w-.5u,8u); z3=(4.5u,10.9u); z4=(4.1u,h+.2u); z4.5=(2.3u,h-4u); z5=(.2u,7.5u); z6=(4.4u,9.3u); z7=(6.5u,7.1u); labels(1,2,3,4,5,6,7,4.5); filldraw z1..tension 2 and 1..{up}z2..{left}z3& z3--z4..{z5-z4}z4.5..z5& z5{z3-z5}..{right}z6..{down}z7..tension 1 and 2..z1..cycle; endchar; beginchar("q",6u#,14u#,0u#); "Klingon q"; pickup piqpen; z1=(0,9u); z1.2=(3.3u,11.9u); z2=(4.5u,13.7u); z2.3=.5[z2,z3]+(0,.1u); z3=(6.3u,11.3u); z4=(4.3u,9.2u); z5=(5.9u,5.2u); z6=(4.1u,0); z6.1=(3.6u,5.5u); labels(1,2,3,4,5,6,1.2,2.3,6.1); filldraw flex(z1,z1.2,z2)&flex(z2,z2.3,z3)--z4& z4..{down}z5..z6& z6{up}..z6.1..z1..cycle; endchar; beginchar("Q",10u#,14u#,0u#); "Klingon Q"; pickup piqpen; z1=(.2u,0u); z2=(3u,4.5u); z3=(0u,7.3u); z4=(5u,12.9u); z3.4=.4[z3,z4]+(0,-.1u); z5=(w,h+.4u); z6=(4.4u,8u); z7=(5.4u,5.5u); labels(1,2,3,4,5,6,7,3.4); filldraw z1..{up}z2..{left}z3& flex(z3,z3.4,z4)& z4{right}..z5& z5{(z6+(2.2u,0))-z5}..tension 1 and 2..z6& z6..{down}z7..z1..cycle; endchar; beginchar("r",12u#,14.4u#,0u#); "Klingon r"; pickup piqpen; z1=(0u,1u); z2=(5.9u,10u); z3=(-.3u,h); z3.4=3/4[z3,z4]+(0,-.15u); z4=(11u,h); z5=(w,12.4u); z6=(9.2u,y5); z7=(9.6u,9.95u); z8=(w,10.2u); %z9=z1+(.1u,0); %z8.1=1/4[z8,z1]+(0,.2u); labels(1,2,3,4,5,6,7,8,3.4,8.1); % must shift z3 by -epsilon to avoid strange path. filldraw z1{curl 0}..tension 4..z2..tension 4..z3+(0,-epsilon)-- z3..{right}z3.4..z4--z5& z5{dir 165}..tension 2..z6..tension 2..z7..tension 2..{dir 20}z8& z8--z1..cycle; endchar; beginchar("S",15u#,14u#,0u#); "Klingon S"; pickup piqpen; z1=(0u,0u); z2=(4.9u,9u); z3=(3.3u,h+.2u); z4=(8.2u,12.4u); z4.5=(11.5u,13u); z5=(12.2u,13u); z6=(7.2u,6.9u); z6.7=(12u,2u); z7=(w,0u); z8=(7.2u,1.7u); labels(1,2,3,4,5,6,7,8,4.5); filldraw z1..{up}z2..z3& z3..{right}z4..z4.5---z5& z5..{down}z6..z6.7..z7& z7..{left}z8..z1..cycle; endchar; beginchar("t",13u#,14u#,0u#); "Klingon t"; pickup piqpen; z1=(0u,0u); z2=(3.2u,9.2u); z3=(3u,6.6u); z4=(4.5u,4.9u); z4.5=(11.5u,13.1u); z5=(w+.1u,h+.2u); z6=(w-.9u,9.3u); z7=(w+.1u,5.2u); labels(1,2,3,4,5,6,7,4.5); filldraw z1{up}..z2& z2..{down}z3..{right}flex(z4,z4.5,z5)& z5..{down}z6..z7& z7{left}..z1..cycle; endchar; beginchar("T",13u#,14u#,0u#); "Klingon tlh"; pickup piqpen; z1=(11u,-.2u); z2=(6.4u,5u); z3=(w,h); z4=(8.3u,h+.1u); z5=(9.4u,12.7u); z6=(5.5u,8.7u); z7=(4.95u,9.3u); z8=(5u,12u); z9=(6.2u,h); z10=(4.7u,h+.2u); z11=(-.3u,11.9u); z12=(.2u,11.2u); z13=(2.3u,11.8u); z14=(3.2u,10u); z15=(1.3u,6.2u); z16=(5.9u,0u); labels(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16); filldraw z1..tension 1.5..{up}z2..tension 1.5 and 2..{up}z3& z3{left}..{left}z4& z4{down}..{down}z5..{left}z6.. z7---z8..{right}z9& z9{left}..tension 2..{left}z10..tension 2..{left}z11& z11..{right}z12..{right}z13..{down}z14..tension 1 and 2.. z15..tension 2..z16--cycle; endchar; beginchar("u",14u#,14u#,0u#); "Klingon u"; pickup piqpen; z1=(0u,0u); z1.2=3/4[z1,z2]+(0,.4u); z2=(10.2u,h+.2u); z3=(9.95u,12.3u); z4=(10.4u,10.1u); z5=(9.1u,10.3u); z6=(5.9u,6.2u); z7=(6.7u,5.9u); z8=(11.7u,8.6u); z8.9=(13u,6.7u); z9=(14.3u,5.9u); labels(1,2,3,4,5,6,7,8,9,8.9); filldraw z1..z1.2..z2& z2..{down}z3..z4& %z4..{left}z5..tension 3..z6{down}.. {dir 170}z4{curl 2}..tension 2..z6{down}.. {right}z7..{curl 2}z8& z8..tension 2..{z9-z8}z8.9..tension 2..z9& z9{left}..tension 1.5..z1..cycle; endchar; beginchar("v",16u#,14u#,0u#); "Klingon v"; pickup piqpen; z1=(-.3u,-.3u); z2=(0u,1u); z3=(0u,5.1u); z4=(1.7u,8.6u); z5=(5u,5.05u); z6=(9.6u,5.7u); z6.7=(11u,9u); z7=(w+.1u,h+.2u); z8=(13.3u,6.6u); z9=(14.9u,.1u); z10=(14.2u,0u); z11=(9u,3u); z12=(1.9u,2u); z12.1=(1u,.4u); labels(1,2,3,4,5,6,7,8,9,10,11,12,12.1); filldraw z1..z2---z3..z4& z4{down}..z5{right}..tension 1 and 3..z6& z6..z6.7..z7& z7..z8{down}..z9& z9..{left}z10..tension 1 and 3..z11& z11..tension 4..z12..tension 3..{z1-z12}z12.1..z1..cycle; endchar; beginchar("w",13u#,14u#,0u#); "Klingon w"; pickup piqpen; z1=(5.5u,-.2u); z2=(2.95u,9.9u); z2.3=(11u,13u); z3=(12.8u,h+.2u); z4=(10u,h); z5=(0u,h); labels(1,2,3,4,5,2.3); filldraw z1..tension 3 and 1..{up}z2..{z3-z2}z2.3..z3& z3..z4---z5& z5{down}..z1..cycle; endchar; beginchar("y",13u#,14.2u#,0u#); "Klingon y"; pickup piqpen; z1=(w,0u); z2=(10.3u,5.1u); z3=(w+.1u,h); z4=(5.7u,h); z5=(.3u,8.5u); labels(1,2,3,4,5); filldraw z1..tension 3 and 1..{up}z2..tension 1 and 3..z3& z3---z4..{down}z5..tension 4..z1..cycle; cullit; z6=(4.7u,9.5u); z7=(7.5u,12.3u); z8=(8.4u,12u); z9=(7.8u,10u); z10=(7.8u,7.2u); z11=(7u,6.7u); labels(6,7,8,9,10,11); unfill z6{up}..{right}z7..{down}z8..z9---z10..{left}z11..tension 1.5..cycle; endchar; beginchar("'",3u#,14u#,0u#); "Klingon '"; pickup piqpen; z1=(.6u,h); z2=(w,h-2.3u); z3=(1.9u,h-5.7u); z4=(w-.1u,h-7.2u); z5=(1.9u,h-7.8u); z6=(0u,h-4.8u); z7=(1.4u,h-1.7u); labels(1,2,3,4,5,6,7); filldraw z1..{down}z2..{down}z3..z4--z5..tension 7 and 1.. {up}z6..{up}z7..z1..cycle; endchar; beginchar("0",13u#,14u#,0u#); "Klingon numeral 0"; pickup piqpen; %% Alternate one. Better? %pickup piqpen; %fill (0,h/2){curl 10}..{right}(w/2,h/2+1.55u)..{curl 10}(w,h/2)& % (w,h/2){curl 10}..{left}(w/2,h/2-1.55u)..{curl 10}(0,h/2)..cycle; %endchar; % %% none of these are all that great, I fear. It's a simple enough shape, tho. filldraw fullcircle xscaled w yscaled 3.1u shifted (w/2,7u); endchar; beginchar("1",15u#,14u#,0u#); "Klingon numeral 1"; pickup piqpen; z1=(0u,0u); z2=(3.5u,11.8u); z3=(w,h); z4=(4.3u,9u); labels(1,2,3,4); filldraw z1..tension 3..z2..tension 3..z3& z3..tension 2..{z1-z3}z4..tension 2..z1& z1..cycle; endchar; beginchar("2",6u#,14u#,0u#); "Klingon numeral 2"; pickup piqpen; z1=(5u,0u); z2=(2.2u,7.5u); z3=(w,h); z4=(0u,y2); labels(1,2,3,4); filldraw z1..tension 3 and 1..{up}z2..tension 1 and 3..z3& z3..tension 3 and 1..{down}z4..tension 1 and 3..z1..cycle endchar; beginchar("3",11u#,14u#,0u#); "Klingon numeral 3"; pickup piqpen; z1=(w,0u); z2=(5.6u,5.7u); z3=(10u,9.4u); z4=(5u,8.5u); z5=(3.5u,10u); z6=(5u,h); z7=(.3u,8.8u); labels(1,2,3,4,5,6,7); filldraw z1..tension 3 and 1..{up}z2..tension 1 and 3..z3-- z3+(0,eps)..tension 4 and 1..{left}z4..{up}z5..z6& z6..tension 2 and 1..{down}z7..tension 1 and 3..z1..cycle; endchar; beginchar("4",14u#,14u#,0u#); "Klingon numeral 4"; pickup piqpen; z1=(-.2u,5u); z2=(4.7u,2.7u); z3=(7.3u,4u); z4=(2u,h); z5=(w,0u); z6=(2.2u,0u); labels(1,2,3,4,5,6); filldraw z1..{right}z2..z3---z4--z5---z6..tension 7..z1..cycle; z7=(13.8u,14.1u); z8=(12.6u,14u); z9=(4.7u,12.4u); z10=(7.7u,9.5u); z11=(7.6u,10u); labels(7,8,9,10,11); filldraw z7..{left}z8..z9--z10& z10..{up}z11..tension 2..{z7-z10}z7..cycle; endchar; beginchar("5",8u#,14u#,.5u#); "Klingon numeral 5"; pickup piqpen; z1=(5.2u,-.5u); z2=(4.3u,2.8u); z3=(7.5u,6.5u); z4=(6u,6u); %z5=(4.9u,6.5u); z5=1.75[.5[z3,z7],.5[z4,z6]]; z7=(7.1u,8.6u); z7-z6=z3-z4; z8=(4u,8u); z9=(2.9u,9u); z10=(6.7u,h); z11=(.5u,12.7u); z12=(0u,11u); labels(1,2,3,4,5,6,7,8,9,10,11,12); %draw z1..tension 3 and 1..{up}z2..tension 1 and 3..z3& % z3---z4..{curl 4}z5{up}..z6---z7& % z7..tension 5 and 1..{left}z8..{up}z9..tension 1..z10& % z10{left}..z11..{down}z12..tension 2..z1..cycle; filldraw z1..tension 3 and 1..{up}z2..tension 1 and 3..z3& {z4-z3}z3..tension 2 and 1..z5{up}..tension 1 and 2..z7{z3-z4}-- z7+(0,eps)..tension 3 and 1..{left}z8.. {up}z9..tension 1..{right}z10& z10{left}...z11..{down}z12..tension 2..z1..cycle; endchar; beginchar("6",14u#,13u#,0u#); "Klingon numeral 6"; pickup piqpen; z1=(11.6u,0u); z1.1=(12.3u,5.5u); z1.2=(13.5u,8u); z2=(14u,11u); z3=(7.6u,9.1u); z4=(-.4u,h); z5=(1.7u,6u); z6=(1.2u,2.2u); z6.7=(4u,7u); z7.1=(9u,7u); z7=(6.6u,7.3u); labels(1,2,3,4,5,6,7,1.1,1.2,6.7,7.1); filldraw z1{up}..tension 1..z1.1..z1.2..tension 1..{up}z2& z2..{left}z3..z4& z4{curl 0}..{down}z5..{curl 0}z6-- (z6+(eps,0))..tension 2 and 1..z6.7..{right}z7..z7.1.. tension 1 and 2..{dir -80}z1..cycle; endchar; beginchar("7",11u#,14u#,.2u#); "Klingon numeral 7"; pickup piqpen; z1=(w+.2u,-d); z1.2=(8.1u,7u); z2=(w-.1u,h); z2.1=(8u,12u); z2.3=(6u,10.5u); z3=(3.4u,12u); z4=(0u,9u); z5=(3u,9.4u); z6=(3.9u,8.6u); z7=(3.3u,6.5u); z8=(3.4u,6u); z9=(5u,7u); z9.1=(6.5u,5.5u); labels(1,2,3,4,5,6,7,8,9,1.2,2.3,2.1,9.1); filldraw z1..{up}z1.2..z2& z2{z2.3-z2}..{left}z2.3..z3--z4& z4..{right}z5..{down}z6..z7--z8& z8..{right}z9..z9.1..z1..cycle; endchar; beginchar("8",16u#,14u#,0u#); "Klingon numeral 8"; pickup piqpen; z1=(w/2,1u); z2=(5u,.5u); z3=(6.1u,2.5u); z4=(4.7u,3u); z4.5=(2u,1u); z5=(0u,0u); z5.6=(2u,1.8u); z6=(4u,h/2); labels(1,2,3,4,5,6,4.5,5.6); %save p; %path p; %p=z1{left}..z2&z2..{up}z3..{left}z4..z4.5..z5&z5..z5.6..{up}z6; %filldraw p..reverse p reflectedabout((0,y6),(w,y6)).. % p rotatedaround((x1,y6),180).. % reverse p reflectedabout((x1,0),(x1,h))..cycle; %% Oops, not top/bottom symmetrical! z6.7=(2.5u,11.3u); z7=(0u,h); z7.8=(2.6u,13u); z8=(6u,9.6u); z9=(6.7u,9.8u); z10=(4.8u,13.6u); z11=(w/2,13.2u); save p; path p; p=z1{left}..z2&z2..{up}z3..{left}z4..z4.5..z5&z5..z5.6..{up}z6.. z6.7..z7& z7..z7.8..{right}z8..{up}z9..z10&z10..{right}z11; filldraw p..reverse p reflectedabout((x1,0),(x1,h))..cycle; endchar; beginchar("9",11u#,14u#,0u#); "Klingon numeral 9"; pickup piqpen; z1=(w/2,.1u); z2=(3u,-.2u); z3=(5.3u,6.7u); z4=(2.7u,9.6u); z5=(0u,9u); z5.1=(1u,10.1u); z5.2=(2.8u,11.2u); z6=(x1,h); labels(1,2,3,4,5,6,5.1,5.2); save p; path p; p=z1{left}..z2&z2..{up}z3..{left}z4..z5& flex(z5,z5.1,z5.2,z6); filldraw p .. reverse p reflectedabout ((w/2,0),(w/2,h))..cycle; endchar; % Dummy characters to make the ligtable happy for TeX. for i="c","g","h": beginchar(i,0u#,0u#,0u#); "Dummy character "&i; endchar; endfor; for i=1,2: beginchar(i,0u#,0u#,0u#); "Dummy character "&decimal i; endchar; endfor; k=u#; kk=2u#; kkk=3u#; kkkk=4u#; zz=0u#; % override later values. %% Better to have had the sidebars on the various letters arranged better, %% but that would have required actual thought, and I'm lazy. %% Tried to make the ligatures do *all* the work of converting from %% Okrandese to my mapping, but it gets hairy. Used dummy characters %% to hold intermediate steps and such, but that's not easy, considering %% things like "ngh", which goes to "nG", but looks like "Nh". %% Also, there are reams of kerns, and they only look at the first character %% of ligatures, so anything kerning before a "C" must do so for "c" as well, %% and so on. You're welcome to try to clean up this mess. ligtable "c": "h"=:"C"; ligtable "g": "h"=:"G"; ligtable "n": "g"=:"N", "o" kern -kk, "I" kern -k, "a" kern -k, "b" kern -k; ligtable "t": "e" kern kk, "G" kern -kk, %"l"|=:|1,skipto 1; % doesn't work. "H" kern k, "m" kern k, "n" kern k, "p" kern k, "q" kern k, "w" kern k, "y" kern k, "'" kern k; ligtable "N": "e" kern kk, "t" kern -k, "u" kern -k, "N" kern kk, "G" kern k, "o" kern kk, "r" kern kk, "S" kern k, "'" kern kk, "w" kern kk; % "h"=:"n", skipto 2; % bleah. %%dummy ligtables: (I gave up on these). ligtable 1: 1:: "h"=:"T"; ligtable 2: 2:: "n"|=:>"G"; ligtable "b": "a" kern -kk, "G" kern -k, "g" kern -k, "e" kern k, "N" kern kk, "G" kern k, "o" kern kk, "r" kern kk, "S" kern k, "'" kern kk, "w" kern kk; ligtable "C": "b" kern k, "D" kern k, "e" kern kk, "N" kern k, "H" kern k, "I" kern k, "q" kern k, "l" kern k, "m" kern k, "n" kern k, "o" kern k, "p" kern k, "Q" kern k, "r" kern k, "v" kern k, "w" kern k, "y" kern k, "'" kern kk; ligtable "D": "e" kern k, "w" kern k, "o" kern -kkk, "I" kern -kk, "l" kern k, "v" kern k; ligtable "e": "N" kern k, "o" kern k, "r" kern k, "w" kern k, "T" kern k, "'" kern k, "G" kern -k, "g" kern -k, "l" kern -k, "v" kern -k; ligtable "G": "e" kern k, "o" kern k, "G" kern zz, "N" kern kk, "G" kern k, "o" kern kk, "r" kern kk, "S" kern k, "'" kern kk, "w" kern kk; ligtable "I": "'" kern kk, "r" kern k, "H" kern k, "n" kern k, "e" kern kk, "N" kern k, "o" kern k, "w" kern kk, "y" kern k; ligtable "y": "e" kern kk, "N" kern kk, "G" kern k, "o" kern kk, "r" kern kk, "S" kern k, "'" kern kk, "w" kern kk; ligtable "p": "e" kern k, "y" kern k, "m" kern k, "u" kern -kk, "a" kern -k, "G" kern -kk, "j" kern -k, "o" kern -kk, "S" kern -k, "'" kern k; ligtable "'": "e" kern kk, "w" kern kk, "a" kern -k, "b" kern k, "H" kern k, "m" kern k, "n" kern k, "N" kern k, "o" kern k, "p" kern k, "q" kern k, "Q" kern k, "r" kern k, "T" kern k, "v" kern k, "y" kern k, "'" kern kk; ligtable "r": "e" kern kk, "w" kern k, "a" kern -kk, "G" kern -k, "H" kern k, "I" kern k, "l" kern -k, "m" kern k, "n" kern k, "S" kern -k, "t" kern -k, "T" kern k, "u" kern -kk, "'" kern k; ligtable "l": "e" kern k, "'" kern k; ligtable "m": "e" kern kk, "'" kern kk, "G" kern -kk, "g" kern -kk, "p" kern k, "H" kern k, "y" kern k, "w" kern k, "y" kern k, "a" kern -k; ligtable "T": "e" kern k, "a" kern -kk, skipto 3; ligtable "S": "o" kern -k, "m" kern -kk, "a" kern -k, "H" kern -k, "I" kern -k, "y" kern -k; ligtable "o": "H" kern k, "'" kern kk, "y" kern k, "e" kern k, "m" kern k, "n" kern k, "w" kern k; ligtable "u": "G" kern -kkkk, "g" kern -kkk, % doesn't know it's G yet. "j" kern -kk, "o" kern -k, "'" kern k; ligtable "H": "a" kern -k, "e" kern k, "G" kern -k, "u" kern -k, "'" kern k; ligtable "w": "a" kern -2kkk, "D" kern -k, "G" kern -kk, "j" kern -k, "l" kern -kk, "p" kern -k, "q" kern -k, "Q" kern -kk, "S" kern -k, "t" kern -kkk, "u" kern -kkk, "v" kern -kk, "'" kern k; ligtable "j": "a" kern -k, "I" kern k, "e" kern kk, "G" kern -kk, "H" kern k, "m" kern k, "n" kern k, "u" kern -k, "w" kern k, "y" kern k, "'" kern kk; ligtable "v": "a" kern -k, "e" kern k, "'" kern k; ligtable "q": "C" kern k, "D" kern k, "e" kern kk, "H" kern k, "I" kern k, "m" kern k, "n" kern k, "p" kern k, "Q" kern k, "T" kern k, "v" kern k, "w" kern k, "y" kern k, "'" kern kk; ligtable "Q": "u" kern -kk, "a" kern -kk, "e" kern k, "G" kern -kk, "l" kern -kk, "p" kern -k, "t" kern -k, "w" kern k, "'" kern k; ligtable "a": "e" kern k, 3:: "N" kern kk, "G" kern k, "o" kern kk, "r" kern kk, "S" kern k, "'" kern kk, "w" kern kk; % Numbers and letters will rarely be next to each other... ligtable "0": "0" kern k, "2" kern k, "3" kern k; ligtable "1": "0" kern -kkk, "1" kern -k, "2" kern -k, "7" kern -k; end;