diff options
author | Norbert Preining <norbert@preining.info> | 2019-09-02 13:46:59 +0900 |
---|---|---|
committer | Norbert Preining <norbert@preining.info> | 2019-09-02 13:46:59 +0900 |
commit | e0c6872cf40896c7be36b11dcc744620f10adf1d (patch) | |
tree | 60335e10d2f4354b0674ec22d7b53f0f8abee672 /fonts/okuda/modified |
Initial commit
Diffstat (limited to 'fonts/okuda/modified')
-rw-r--r-- | fonts/okuda/modified/pIq.mf | 963 | ||||
-rw-r--r-- | fonts/okuda/modified/pIq.tex | 75 |
2 files changed, 1038 insertions, 0 deletions
diff --git a/fonts/okuda/modified/pIq.mf b/fonts/okuda/modified/pIq.mf new file mode 100644 index 0000000000..db686c16d5 --- /dev/null +++ b/fonts/okuda/modified/pIq.mf @@ -0,0 +1,963 @@ +% METAFONT for "Okuda" orthography of pIqaD (Klingon language) +% By Mark Shoulson (shoulson@ctr.columbia.edu), modified by Olaf Kummer +% (kummer@informatik.uni-hamburg.de). 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,3: + 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. + +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, % tl => tricktable 1 + "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"=:|3; % Nh => tricktable 3 +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; +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; + +% Here comes the tricktable. Generated by Olaf Kummer +% (kummer@informatik.uni-hamburg.de). +% +% To process the special cases when "ng" is followed by "h" and +% when "tl" is not followed by an "h" we must use some dummy +% characters. +% +% The procedure runs as follows: +% tlh => 1h => T +% tl[other] => 1[other] => 11[other] => 121[other] => t21[other] +% (typeset t) -> 21[other] => l[other] +% ngh => Nh => 3h => 3gh => ngh (immediately typeset n) -> gh => G +% ng[other] => N[other] +% +% Kerning might be lost during this process, but only before the characters +% that are handled by these conversion routines. + +% Char 1 is produced by the input "tl". +% If the letter "h" follows, build the ligature "tlh", otherwise +% recover the letters "t" and "l" and proceed normally. We +% must set boundarychar to recover "t" and "l" at the end of +% a word. +boundarychar:=3; +ligtable 1: "h"=:"T", % 1h => T + 1|=:|2, % 11[other] => 121[other] + 2=:|"t" , % 121[other] => t21[other] + boundarychar|=:|1, % 1[boundary] => 11[boundary] + % 1[other] => 11[other] + "a"|=:|1, "b"|=:|1, "C"|=:|1, "D"|=:|1, "e"|=:|1, "G"|=:|1, + "H"|=:|1, "I"|=:|1, "j"|=:|1, "l"|=:|1, "m"|=:|1, "n"|=:|1, + "N"|=:|1, "o"|=:|1, "p"|=:|1, "q"|=:|1, "Q"|=:|1, "r"|=:|1, + "S"|=:|1, "t"|=:|1, "T"|=:|1, "u"|=:|1, "v"|=:|1, "w"|=:|1, + "y"|=:|1, "'"|=:|1, "0"|=:|1, "1"|=:|1, "2"|=:|1, "3"|=:|1, + "4"|=:|1, "5"|=:|1, "6"|=:|1, "7"|=:|1, "8"|=:|1, "9"|=:|1; +ligtable 2: 1=:"l"; % 21[other] => l[other] + +% Char 3 is produced by the input "ngh". The original "h" is +% still in the queue. Replace char 3 by "ng", but with the letter "n" +% already typeset to avoid looping. +ligtable 3: "h"|=:|"g", % 3h => 3gh + "g"=:|>"n"; % 3gh => ngh, skip n + +end; diff --git a/fonts/okuda/modified/pIq.tex b/fonts/okuda/modified/pIq.tex new file mode 100644 index 0000000000..f3c16137ec --- /dev/null +++ b/fonts/okuda/modified/pIq.tex @@ -0,0 +1,75 @@ +\documentclass{article} +\begin{document} + +\section*{Okuda font with new ligtable} + +This file demonstrates the font \texttt{pIq.mf} which was +originally coded by Mark Shoulson (\texttt{shoulson@cs.columbia.edu}). +In this version the ligature mechanism handles the complete +conversion from the Okrand transcription to the Klingon glyphs. +If this causes any problems, please report them to Olaf Kummer +(\texttt{kummer@informatik.uni-hamburg.de}). + +Look at the file \texttt{pIq.mf} for a copyright notice +and additional references on the origins of this font. + +Let's have a look at the glyphs. Note that some of the +characters are entered as multi-letter sequences. + +\medskip + +\newfont{\kling}{pIq scaled 1000} + +\centerline{\begin{tabular}{ccccccccccccc} +a & b & ch & D & e & gh & H & I & j & l & m & n & ng \\ +\hline \rule{0pt}{12pt} +\kling a & \kling b & \kling ch & \kling D & \kling e & +\kling gh & \kling H & \kling I & \kling j & \kling l & +\kling m & \kling n & \kling ng \\ +\end{tabular}} + +\medskip + +\centerline{\begin{tabular}{ccccccccccccc} +o & p & q & Q & r & S & t & tlh & u & v & w & y & ' \\ +\hline \rule{0pt}{12pt} +\kling o & \kling p & \kling q & \kling Q & \kling r & +\kling S & \kling t & \kling tlh & \kling u & \kling v & +\kling w & \kling y & \kling ' \\ +\end{tabular}} + +\medskip + +\centerline{\begin{tabular}{cccccccccc} +0 & 1 & 2 & 3 & 4 & 5 & 6 & 7 & 8 & 9 \\ +\hline \rule{0pt}{12pt} +\kling 0 & \kling 1 & \kling 2 & \kling 3 & \kling 4 & +\kling 5 & \kling 6 & \kling 7 & \kling 8 & \kling 9 \\ +\end{tabular}} + +\medskip + +The new ligtables handle the inputs \texttt{tl} +(\raisebox{-2pt}{\kling tl}), \texttt{tlh} +(\raisebox{-2pt}{\kling tlh}), \texttt{ng} +(\raisebox{-2pt}{\kling ng}), and \texttt{ngh} +(\raisebox{-2pt}{\kling ngh}) correctly. These inputs +used to be a problem, because they force us to look at three +characters before we can determine the output for the first +character. When you are interested in the implementation, you might +want to have a look at the \textsf{Metafont} sources +in \texttt{pIq.mf}. + +In fact, words in which \texttt{tl} is not +followed by an \texttt{h} are pretty rare, but they do occur. +Consider for example the word \texttt{nuvItlaH} +(\raisebox{-2pt}{\kling nuvItlaH}), which means +`He can tell us the truth' in English. + +Words in which an \texttt{n} is followed by \texttt{gh} are +even more obscure. But maybe some Klingon liguists want to +discuss whether `the program' is properly translated as +\texttt{ghun} (\raisebox{-2pt}{\kling ghun}) or +\texttt{ghunghach} (\raisebox{-2pt}{\kling ghunghach}). + +\end{document} |