%% SEMAPHORE ALPHABET FONT, METAFONT driver file "semaf.mf" %% %% Font znaku semaforove abecedy, ridici soubor pro METAFONT. %% %% Copyright (C) 1998 Vit ZYKA, zyka@cmp.felk.cvut.cz %% %% This program is free software; you can redistribute it and/or %% modify it under the terms of the GNU General Public License %% as published by the Free Software Foundation; either version 2 %% of the License, or (at your option) any later version. %% %% This program is distributed in the hope that it will be useful, %% but WITHOUT ANY WARRANTY; without even the implied warranty of %% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the %% GNU General Public License for more details. %% %% You should have received a copy of the GNU General Public License %% along with this program; if not, see web page %% http://www.gnu.org/copyleft/fdl.html or write to the Free Software %% Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. %% % ----------------------------------------------------------------------- CODE L#:=4.75u#; % left width C#:=1u#; % center width R#:=4.75u#; % right width H#:=10u#; % character height HC#:=H#/2; % center height %% |width#|, |height#|, |WC#|, |HC#| (center width, height) %% is evaluated in macro |beginchar| define_pixels(u,C); % ----------------------------------------------------------------------- BASE def base_empty= pickup pencircle scaled (series*1*u); drawdot origin slanted slant; enddef; def base_pillar= pickup pencircle scaled (series*1*u); drawdot origin slanted slant; pickup pencircle scaled (series*.2*u); draw (origin--(0,-HC)) slanted slant; draw ((-C,-HC)--(C,-HC)) slanted slant; enddef; def base_person= pickup pencircle scaled (series*1.2*u); drawdot (0,.4*HC) slanted slant; pickup pencircle scaled (series*.2*u); draw ((0,.4*HC)--(0,-.2*HC)) slanted slant; draw ((-.7C,-HC)--(0,-.2*HC)--(.7C,-HC)) slanted slant; enddef; % ---------------------------------------------------------------------- FLAG r:=if proportional: 4.5u else: 4.3u fi; % flag radius a:=1.5u; % flag width b:=1.8u; % flag height def flag= pickup pencircle scaled (series*.5*u); draw (origin--(r,0)) withweight 2; pickup pencircle scaled (series*.3*u); unfill ((r,0)--(r-a,0)--(r-a,b)--cycle); draw ((r-a,0)--(r-a,b)--(r,b)--(r,0)); fill ((r,0)--(r-a,b)--(r,b)--cycle); enddef; def flagL(expr angel)= begingroup; save currenttransform; transform currenttransform; currenttransform:= identity rotated angel slanted slant; flag; endgroup; enddef; def flagR(expr angel)= begingroup; save currenttransform; transform currenttransform; currenttransform:= identity reflectedabout ((0,0),(1,0)) rotated angel slanted slant; flag; endgroup; enddef; uu:=0.95; % upper portion of |L#| (|R#|) bb:=0.8; % botton dd:=0.55; % character d def charA= if SL#<(uu*L#): SL#:= bb*L# fi; flagL(-135); enddef; def charB= SL#:= L#; flagL(180); enddef; def charC= if SL#<L#: SL#:= uu*L# fi; SH#:= H#; flagL(135); enddef; def charD= if SL#<(bb*L#): SL#:= dd*L#; fi; charic:= slant*HC#; SH#:= H#; flagL(90); enddef; def charE= if SR#<R#: SR#:= uu*R# fi; SH#:= H#; if charic=0: charic:=.5*slant*HC# fi; flagR(45); enddef; def charF= SR#:= R#; flagR(0); enddef; def charG= if SR#<(uu*R#): SR#:= bb*R# fi; flagR(-45); enddef; def sipka(expr length, direct, point)= begingroup save x,y; z1=origin; x2=x3=-length; -y2=y3=3/7length; draw (z2..{dir 5}z1) rotated direct shifted point slanted slant; draw (z3..{dir -5}z1) rotated direct shifted point slanted slant; endgroup enddef; % ------------------------------------ extensions tokens into begin and end char extra_beginchar:= "SL#:= 0.75u#; SR#:= 0.75u#; SH#:= HC#+(C#/2);"; extra_endchar:= "if proportional:" & "WC#:= (C#/2)+SL#;" & "charwd:= SL#+C#+SR#; charht:= SH#; chardp:= 0u#;" & "else:" & "charwd:= L#+(C#/2)+R#; WC#:= charwd/2; charht:= SH#; chardp:= 0u#;" & "fi;" & "w:=hround(charwd*hppp); h:=vround(charht*hppp); d:= vround(chardp*hppp);" & "define_pixels( WC, HC);" & "scantokens center;" & "currentpicture:= currentpicture shifted (WC,HC);"; % ------------------------------------------------------------ lowercase letter beginchar("a", 0pt, 0pt, 0pt); charA; endchar; beginchar("b", 0pt, 0pt, 0pt); charB; endchar; beginchar("c", 0pt, 0pt, 0pt); charC; endchar; beginchar("d", 0pt, 0pt, 0pt); charD; endchar; beginchar("e", 0pt, 0pt, 0pt); charE; endchar; beginchar("f", 0pt, 0pt, 0pt); charF; endchar; beginchar("g", 0pt, 0pt, 0pt); charG; endchar; beginchar("h", 0pt, 0pt, 0pt); charA; charB; endchar; beginchar("i", 0pt, 0pt, 0pt); charA; charC; endchar; beginchar("k", 0pt, 0pt, 0pt); charA; charD; endchar; beginchar("l", 0pt, 0pt, 0pt); charA; charE; endchar; beginchar("m", 0pt, 0pt, 0pt); charA; charF; endchar; beginchar("n", 0pt, 0pt, 0pt); charA; charG; endchar; beginchar("o", 0pt, 0pt, 0pt); charB; charC; endchar; beginchar("p", 0pt, 0pt, 0pt); charB; charD; endchar; beginchar("q", 0pt, 0pt, 0pt); charB; charE; endchar; beginchar("r", 0pt, 0pt, 0pt); charB; charF; endchar; beginchar("s", 0pt, 0pt, 0pt); charB; charG; endchar; beginchar("t", 0pt, 0pt, 0pt); charC; charD; endchar; beginchar("u", 0pt, 0pt, 0pt); charC; charE; endchar; beginchar("y", 0pt, 0pt, 0pt); charC; charF; endchar; beginchar("j", 0pt, 0pt, 0pt); charD; charF; endchar; beginchar("v", 0pt, 0pt, 0pt); charD; charG; endchar; beginchar("w", 0pt, 0pt, 0pt); charE; charF; endchar; beginchar("x", 0pt, 0pt, 0pt); charE; charG; endchar; beginchar("z", 0pt, 0pt, 0pt); charF; charG; endchar; % -------------------------------------------------------------- capital letter beginchar("A", 0pt, 0pt, 0pt); charA; endchar; beginchar("B", 0pt, 0pt, 0pt); charB; endchar; beginchar("C", 0pt, 0pt, 0pt); charC; endchar; beginchar("D", 0pt, 0pt, 0pt); charD; endchar; beginchar("E", 0pt, 0pt, 0pt); charE; endchar; beginchar("F", 0pt, 0pt, 0pt); charF; endchar; beginchar("G", 0pt, 0pt, 0pt); charG; endchar; beginchar("H", 0pt, 0pt, 0pt); charA; charB; endchar; beginchar("I", 0pt, 0pt, 0pt); charA; charC; endchar; beginchar("K", 0pt, 0pt, 0pt); charA; charD; endchar; beginchar("L", 0pt, 0pt, 0pt); charA; charE; endchar; beginchar("M", 0pt, 0pt, 0pt); charA; charF; endchar; beginchar("N", 0pt, 0pt, 0pt); charA; charG; endchar; beginchar("O", 0pt, 0pt, 0pt); charB; charC; endchar; beginchar("P", 0pt, 0pt, 0pt); charB; charD; endchar; beginchar("Q", 0pt, 0pt, 0pt); charB; charE; endchar; beginchar("R", 0pt, 0pt, 0pt); charB; charF; endchar; beginchar("S", 0pt, 0pt, 0pt); charB; charG; endchar; beginchar("T", 0pt, 0pt, 0pt); charC; charD; endchar; beginchar("U", 0pt, 0pt, 0pt); charC; charE; endchar; beginchar("Y", 0pt, 0pt, 0pt); charC; charF; endchar; beginchar("J", 0pt, 0pt, 0pt); charD; charF; endchar; beginchar("V", 0pt, 0pt, 0pt); charD; charG; endchar; beginchar("W", 0pt, 0pt, 0pt); charE; charF; endchar; beginchar("X", 0pt, 0pt, 0pt); charE; charG; endchar; beginchar("Z", 0pt, 0pt, 0pt); charF; charG; endchar; % --------------------------------------------------- accented letters (in IL2) beginchar(152, 0pt, 0pt, 0pt); charA; endchar; beginchar(165, 0pt, 0pt, 0pt); charA; charE; endchar; beginchar(169, 0pt, 0pt, 0pt); charB; charG; endchar; beginchar(171, 0pt, 0pt, 0pt); charC; charD; endchar; beginchar(174, 0pt, 0pt, 0pt); charF; charG; endchar; beginchar(181, 0pt, 0pt, 0pt); charA; charE; endchar; beginchar(184, 0pt, 0pt, 0pt); charA; endchar; beginchar(185, 0pt, 0pt, 0pt); charB; charG; endchar; beginchar(187, 0pt, 0pt, 0pt); charC; charD; endchar; beginchar(190, 0pt, 0pt, 0pt); charF; charG; endchar; beginchar(192, 0pt, 0pt, 0pt); charB; charF; endchar; beginchar(193, 0pt, 0pt, 0pt); charA; endchar; beginchar(196, 0pt, 0pt, 0pt); charA; endchar; beginchar(197, 0pt, 0pt, 0pt); charA; charE; endchar; beginchar(200, 0pt, 0pt, 0pt); charC; endchar; beginchar(201, 0pt, 0pt, 0pt); charE; endchar; beginchar(204, 0pt, 0pt, 0pt); charE; endchar; beginchar(205, 0pt, 0pt, 0pt); charA; charC; endchar; beginchar(207, 0pt, 0pt, 0pt); charD; endchar; beginchar(210, 0pt, 0pt, 0pt); charA; charG; endchar; beginchar(211, 0pt, 0pt, 0pt); charB; charC; endchar; beginchar(212, 0pt, 0pt, 0pt); charB; charC; endchar; beginchar(214, 0pt, 0pt, 0pt); charB; charC; endchar; beginchar(216, 0pt, 0pt, 0pt); charB; charF; endchar; beginchar(217, 0pt, 0pt, 0pt); charC; charE; endchar; beginchar(218, 0pt, 0pt, 0pt); charC; charE; endchar; beginchar(220, 0pt, 0pt, 0pt); charC; charE; endchar; beginchar(221, 0pt, 0pt, 0pt); charC; charF; endchar; beginchar(224, 0pt, 0pt, 0pt); charB; charF; endchar; beginchar(225, 0pt, 0pt, 0pt); charA; endchar; beginchar(228, 0pt, 0pt, 0pt); charA; endchar; beginchar(229, 0pt, 0pt, 0pt); charA; charE; endchar; beginchar(232, 0pt, 0pt, 0pt); charC; endchar; beginchar(233, 0pt, 0pt, 0pt); charE; endchar; beginchar(236, 0pt, 0pt, 0pt); charE; endchar; beginchar(237, 0pt, 0pt, 0pt); charA; charC; endchar; beginchar(239, 0pt, 0pt, 0pt); charD; endchar; beginchar(242, 0pt, 0pt, 0pt); charA; charG; endchar; beginchar(243, 0pt, 0pt, 0pt); charB; charC; endchar; beginchar(244, 0pt, 0pt, 0pt); charB; charC; endchar; beginchar(246, 0pt, 0pt, 0pt); charB; charC; endchar; beginchar(248, 0pt, 0pt, 0pt); charB; charF; endchar; beginchar(249, 0pt, 0pt, 0pt); charC; charE; endchar; beginchar(250, 0pt, 0pt, 0pt); charC; charE; endchar; beginchar(252, 0pt, 0pt, 0pt); charC; charE; endchar; beginchar(253, 0pt, 0pt, 0pt); charC; charF; endchar; % --------------------------------------------------------------------- digits beginchar("1", 0pt, 0pt, 0pt); charA; endchar; beginchar("2", 0pt, 0pt, 0pt); charB; endchar; beginchar("3", 0pt, 0pt, 0pt); charC; endchar; beginchar("4", 0pt, 0pt, 0pt); charD; endchar; beginchar("5", 0pt, 0pt, 0pt); charE; endchar; beginchar("6", 0pt, 0pt, 0pt); charF; endchar; beginchar("7", 0pt, 0pt, 0pt); charG; endchar; beginchar("8", 0pt, 0pt, 0pt); charA; charB; endchar; beginchar("9", 0pt, 0pt, 0pt); charA; charC; endchar; beginchar("0", 0pt, 0pt, 0pt); charA; charD; endchar; % ---------------------------------------------------------- special characters beginchar(" ", L#+C#+R#, 0pt, 0pt); % space endchar; beginchar("*", 0pt, 0pt, 0pt); % all flag positions (asterisk) charA; charB; charC; charD; charE; charF; charG; endchar; beginchar(".", 0pt, 0pt, 0pt); % separator (period) begingroup; save currenttransform; transform currenttransform; currenttransform:= identity rotated -90 slanted slant; flag; currenttransform:= identity reflectedabout ((0,0),(1,0)) rotated -90 slanted slant; flag; endgroup; SL#:= L#; SR#:= R#; k:= (r-a)++b; pickup pencircle scaled (series*.2*u); z1=(0,-k) rotated -50; z2=(0,-k) rotated 50; draw (z1..(-k,0)..(0,k)..(k,0)..z2) slanted slant; sipka( 2/5b, -50-5, z1); sipka( 2/5b, 180+50+5, z2); endchar; beginchar("~", 0pt, 0pt, 0pt); % mistake charC; charG; endchar; beginchar("$", 0pt, 0pt, 0pt); % begin digits charD; charE; endchar; beginchar("#", 0pt, 0pt, 0pt); % end digits charD; charF; endchar; % ------------------------------------------------------- fontdimen parameters font_identifier:="SEMAF"; font_coding_scheme:="TEX CS TEXT"; designsize:=10u#; font_slant:=slant; % fontdimen 1 font_height:=10u#; % 5 if proportional: font_normal_space:=8u#; % 2 font_normal_stretch:=4u#; % 3 font_normal_shrink:=2u#; % 4 font_extra_space:=5u#; % 7 font_quad:=16u#; % 6 else: font_normal_space:=10u#; % 2 font_normal_stretch:=0u#; % 3 font_normal_shrink:=0u#; % 4 font_extra_space:=10u#; % 7 font_quad:=20u#; % 6 fi; % ------------------------------------------------------ kernings and ligatures def chars="a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", 152, 165, 169, 171, 174, 181, 184, 185, 187, 190, 192, 193, 196, 197, 200, 201, 204, 205, 207, 210, 211, 212, 214, 216, 217, 218, 220, 221, 224, 225, 228, 229, 232, 233, 236, 237, 239, 242, 243, 244, 246, 248, 249, 250, 252, 253 enddef; def digits="1", "2", "3", "4", "5", "6", "7", "8", "9", "0" enddef; def chars_tr="e", "l", "q", "u", "$", "E", "L", "Q", "U", 165, 181, 197, 201, 204, 217, 218, 220, 229, 233, 236, 249, 250, 252 enddef; def chars_br="g", "n", "s", "~", "v", "G", "N", "S", "V", 169, 185, 210, 242 enddef; def digits_tr="5" enddef; def digits_br="7" enddef; def chars_nr="a", "b", "c", "d", "f", "h", "i", "j", "k", "m", "o", "p", "r", "t", "w", "x", "y", "z", "A", "B", "C", "D", "F", "H", "I", "J", "K", "M", "O", "P", "R", "T", "W", "X", "Y", "Z", 152, 171, 174, 184, 187, 190, 192, 193, 196, 200, 205, 207, 211, 212, 214, 216, 221, 224, 225, 228, 232, 237, 239, 243, 244, 246, 248, 253 enddef; def digits_nr="1", "2", "3", "4", "6", "8", "9", "0" enddef; def tr=chars_tr, digits_tr enddef; def br=chars_br, digits_br enddef; def tl="c", "t", "u", "y", "~", "C", "T", "U", "Y", "3", 171, 187, 200, 217, 218, 220, 221, 232, 249, 250, 252, 253 enddef; def bl="a", "l", "m", "n", "A", "L", "M", "N", "1", 152, 165, 181, 184, 193, 196, 197, 210, 225, 228, 229, 242 enddef; def td="d", "$", "j", "v", "D", "J", "V", "4", 207, 239 enddef; boundarychar:=1; ligtable for i=chars_tr: i: endfor for i=digits: i|=:|>>"$", endfor skipto 1; ligtable for i=digits_tr: i: endfor for i=chars: i|=:|>>"#", endfor 1|=:|"#", skipto 1; ligtable 1:: if proportional: for i=bl: i kern-1u#, endfor fi " " kern 0u#; ligtable for i=chars_br: i: endfor for i=digits: i|=:|>>"$", endfor skipto 2; ligtable for i=digits_br: i: endfor for i=chars: i|=:|>>"#", endfor 1|=:|"#", skipto 2; ligtable 2:: if proportional: for i=tl: i kern-1u#, endfor for i=td: i kern-.5u#, endfor fi " " kern 0u#; ligtable for i=chars_nr: i: endfor for i=digits: i|=:|>>"$", endfor " "|=:>" "; ligtable for i=digits_nr: i: endfor for i=chars: i|=:|>>"#", endfor 1|=:|"#"; ligtable ||: for i=digits: i|=:|>>"$", endfor " "|=:>" "; endinput;