Subversion Repositories planix.SVN

Rev

Rev 2 | Blame | Compare with Previous | Last modification | View Log | RSS feed

#
# Shell library - for building devutf tables.
#

RESOLUTION=720
UNITWIDTH=10

OCTALESCAPES=${OCTALESCAPES:-160}       # <= code means add \0ddd names
DOWNLOADVECTOR=FALSE                    # TRUE can mean incomplete tables

#
# BuiltinTables returns command lines that generate PostScript programs
# for building a typesetter description file and font width tables for
# a relatively standard collection of fonts. Use awk to select a command
# line or modify an existing command to build a width table for a new
# font.
#

BuiltinTables() {
        cat <<-'//End of BuiltinTables'
                Proportional    R       Times-Roman
                Proportional    I       Times-Italic
                Proportional    B       Times-Bold
                Proportional    BI      Times-BoldItalic
                Proportional    AB      AvantGarde-Demi
                Proportional    AI      AvantGarde-BookOblique
                Proportional    AR      AvantGarde-Book
                Proportional    AX      AvantGarde-DemiOblique
                Proportional    H       Helvetica
                Proportional    HB      Helvetica-Bold
                Proportional    HI      Helvetica-Oblique
                Proportional    HX      Helvetica-BoldOblique
                Proportional    Hb      Helvetica-Narrow-Bold
                Proportional    Hi      Helvetica-Narrow-Oblique
                Proportional    Hr      Helvetica-Narrow
                Proportional    Hx      Helvetica-Narrow-BoldOblique
                Proportional    KB      Bookman-Demi
                Proportional    KI      Bookman-LightItalic
                Proportional    KR      Bookman-Light
                Proportional    KX      Bookman-DemiItalic
                Proportional    NB      NewCenturySchlbk-Bold
                Proportional    NI      NewCenturySchlbk-Italic
                Proportional    NR      NewCenturySchlbk-Roman
                Proportional    NX      NewCenturySchlbk-BoldItalic
                Proportional    PA      Palatino-Roman
                Proportional    PB      Palatino-Bold
                Proportional    PI      Palatino-Italic
                Proportional    PX      Palatino-BoldItalic
                Proportional    ZI      ZapfChancery-MediumItalic
                FixedWidth      C       Courier
                FixedWidth      CB      Courier-Bold
                FixedWidth      CI      Courier-Oblique
                FixedWidth      CO      Courier
                FixedWidth      CW      Courier
                FixedWidth      CX      Courier-BoldOblique
                Dingbats        ZD      ZapfDingbats
                Greek           GR      Symbol
                Symbol          S       Symbol
                Special         S1      Times-Roman
                Description     DESC    ---
        //End of BuiltinTables
}

#
# AllTables prints the complete list of builtin font names.
#

AllTables() {
        BuiltinTables | awk '{print $2}'
}

#
# Charset functions generate keyword/value pairs (as PostScript objects)
# that describe the character set available in a font. The keyword is a
# PostScript string that represents troff's name for the character. The
# value is usually the literal name (i.e. begins with a /) assigned to
# the character in the PostScript font. The value can also be an integer
# or a PostScript string. An integer value is used as an index in the
# current font's Encoding array. A string value is returned to the host
# unchanged when the entry for the character is constructed. Entries that
# have (") as their value are synonyms for the preceeding character.
#
# The 18 characters missing from ROM resident fonts on older printers are
# flagged with the PostScript comment "% missing".
#

StandardCharset() {
        cat <<-'//End of StandardCharset'
                (!)     /exclam
                (")     /quotedbl
                (dq)    (")                     % synonym
                (#)     /numbersign
                ($)     /dollar
                (%)     /percent
                (&)     /ampersand
                (')     /quoteright
                (\()    /parenleft
                (\))    /parenright
                (*)     /asterisk
                (+)     /plus
                (,)     /comma
                (-)     /hyphen                 % changed from minus by request
                (.)     /period
                (/)     /slash
                (0)     /zero
                (1)     /one
                (2)     /two
                (3)     /three
                (4)     /four
                (5)     /five
                (6)     /six
                (7)     /seven
                (8)     /eight
                (9)     /nine
                (:)     /colon
                (;)     /semicolon
                (<)     /less
                (=)     /equal
                (>)     /greater
                (?)     /question
                (@)     /at
                (A)     /A
                (B)     /B
                (C)     /C
                (D)     /D
                (E)     /E
                (F)     /F
                (G)     /G
                (H)     /H
                (I)     /I
                (J)     /J
                (K)     /K
                (L)     /L
                (M)     /M
                (N)     /N
                (O)     /O
                (P)     /P
                (Q)     /Q
                (R)     /R
                (S)     /S
                (T)     /T
                (U)     /U
                (V)     /V
                (W)     /W
                (X)     /X
                (Y)     /Y
                (Z)     /Z
                ([)     /bracketleft
                (\\)    /backslash
                (bs)    (")                     % synonym
                (])     /bracketright
                (^)     /asciicircum
                (_)     /underscore
                (`)     /quoteleft
                (a)     /a
                (b)     /b
                (c)     /c
                (d)     /d
                (e)     /e
                (f)     /f
                (g)     /g
                (h)     /h
                (i)     /i
                (j)     /j
                (k)     /k
                (l)     /l
                (m)     /m
                (n)     /n
                (o)     /o
                (p)     /p
                (q)     /q
                (r)     /r
                (s)     /s
                (t)     /t
                (u)     /u
                (v)     /v
                (w)     /w
                (x)     /x
                (y)     /y
                (z)     /z
                ({)     /braceleft
                (|)     /bar
                (})     /braceright
                (~)     /asciitilde
                (\\`)   /grave                  % devpost character
                (ga)    (")                     % synonym
                (!!)    /exclamdown
                (c|)    /cent
                (ct)    (")                     % devpost synonym
                (L-)    /sterling
                (ps)    (")                     % devpost synonym
                (xo)    /currency
                (cr)    (")                     % devpost synonym
                (Y-)    /yen
                (yn)    (")                     % devpost synonym
                (||)    /brokenbar              % missing
                (so)    /section
                (sc)    (")                     % devpost synonym
                ("")    /dieresis
                (:a)    (")                     % devpost synonym
                (co)    /copyright
                (a_)    /ordfeminine
                (<<)    /guillemotleft
                (-,)    /logicalnot
                (hy)    /hyphen
                (--)    /minus
                (ro)    /registered
                (rg)    (")                     % devpost synonym
                (-^)    /macron
                (-a)    (")                     % devpost synonym
                (0^)    /degree                 % missing
                (+-)    /plusminus              % missing
                (2^)    /twosuperior            % missing
                (3^)    /threesuperior          % missing
                (\\')   /acute
                (aa)    (")                     % devpost synonym
                (/u)    /mu                     % missing
                (P!)    /paragraph
                (pg)    (")                     % devpost synonym
                (.^)    /periodcentered
                (,,)    /cedilla
                (,a)    (")                     % devpost synonym
                (1^)    /onesuperior            % missing
                (o_)    /ordmasculine
                (>>)    /guillemotright
                (14)    /onequarter             % missing
                (12)    /onehalf                % missing
                (34)    /threequarters          % missing
                (??)    /questiondown
                (A`)    /Agrave
                (A')    /Aacute
                (A^)    /Acircumflex
                (A~)    /Atilde
                (A")    /Adieresis
                (A*)    /Aring
                (AE)    /AE
                (C,)    /Ccedilla
                (E`)    /Egrave
                (E')    /Eacute
                (E^)    /Ecircumflex
                (E")    /Edieresis
                (I`)    /Igrave
                (I')    /Iacute
                (I^)    /Icircumflex
                (I")    /Idieresis
                (D-)    /Eth                    % missing
                (N~)    /Ntilde
                (O`)    /Ograve
                (O')    /Oacute
                (O^)    /Ocircumflex
                (O~)    /Otilde
                (O")    /Odieresis
                (xx)    /multiply               % missing
                (O/)    /Oslash
                (U`)    /Ugrave
                (U')    /Uacute
                (U^)    /Ucircumflex
                (U")    /Udieresis
                (Y')    /Yacute                 % missing
                (TH)    /Thorn                  % missing
                (ss)    /germandbls
                (a`)    /agrave
                (a')    /aacute
                (a^)    /acircumflex
                (a~)    /atilde
                (a")    /adieresis
                (a*)    /aring
                (ae)    /ae
                (c,)    /ccedilla
                (e`)    /egrave
                (e')    /eacute
                (e^)    /ecircumflex
                (e")    /edieresis
                (i`)    /igrave
                (i')    /iacute
                (i^)    /icircumflex
                (i")    /idieresis
                (d-)    /eth                    % missing
                (n~)    /ntilde
                (o`)    /ograve
                (o')    /oacute
                (o^)    /ocircumflex
                (o~)    /otilde
                (o")    /odieresis
                (-:)    /divide                 % missing
                (o/)    /oslash
                (u`)    /ugrave
                (u')    /uacute
                (u^)    /ucircumflex
                (u")    /udieresis
                (y')    /yacute                 % missing
                (th)    /thorn                  % missing
                (y")    /ydieresis
                (^a)    /circumflex             % devpost accent
                (~a)    /tilde                  % devpost accent
                (Ua)    /breve                  % devpost accent
                (.a)    /dotaccent              % devpost accent
                (oa)    /ring                   % devpost accent
                ("a)    /hungarumlaut           % devpost accent
                (Ca)    /ogonek                 % devpost accent
                (va)    /caron                  % devpost accent
        //End of StandardCharset
}

#
# DingbatsCharset guarantees changes in StandardCharset don't show up in ZD.
#

DingbatsCharset() {
        cat <<-'//End of DingbatsCharset'
                (!)     /exclam
                (")     /quotedbl
                (#)     /numbersign
                ($)     /dollar
                (%)     /percent
                (&)     /ampersand
                (')     /quoteright
                (\()    /parenleft
                (\))    /parenright
                (*)     /asterisk
                (+)     /plus
                (,)     /comma
                (-)     /minus          % also hyphen in devpost
                (.)     /period
                (/)     /slash
                (0)     /zero
                (1)     /one
                (2)     /two
                (3)     /three
                (4)     /four
                (5)     /five
                (6)     /six
                (7)     /seven
                (8)     /eight
                (9)     /nine
                (:)     /colon
                (;)     /semicolon
                (<)     /less
                (=)     /equal
                (>)     /greater
                (?)     /question
                (@)     /at
                (A)     /A
                (B)     /B
                (C)     /C
                (D)     /D
                (E)     /E
                (F)     /F
                (G)     /G
                (H)     /H
                (I)     /I
                (J)     /J
                (K)     /K
                (L)     /L
                (M)     /M
                (N)     /N
                (O)     /O
                (P)     /P
                (Q)     /Q
                (R)     /R
                (S)     /S
                (T)     /T
                (U)     /U
                (V)     /V
                (W)     /W
                (X)     /X
                (Y)     /Y
                (Z)     /Z
                ([)     /bracketleft
                (\\)    /backslash
                (])     /bracketright
                (^)     /asciicircum
                (_)     /underscore
                (`)     /quoteleft
                (a)     /a
                (b)     /b
                (c)     /c
                (d)     /d
                (e)     /e
                (f)     /f
                (g)     /g
                (h)     /h
                (i)     /i
                (j)     /j
                (k)     /k
                (l)     /l
                (m)     /m
                (n)     /n
                (o)     /o
                (p)     /p
                (q)     /q
                (r)     /r
                (s)     /s
                (t)     /t
                (u)     /u
                (v)     /v
                (w)     /w
                (x)     /x
                (y)     /y
                (z)     /z
                ({)     /braceleft
                (|)     /bar
                (})     /braceright
                (~)     /asciitilde
                (\\`)   /grave                  % devpost character
                (!!)    /exclamdown
                (c|)    /cent
                (L-)    /sterling
                (xo)    /currency
                (Y-)    /yen
                (||)    /brokenbar              % missing
                (so)    /section
                ("")    /dieresis
                (co)    /copyright
                (a_)    /ordfeminine
                (<<)    /guillemotleft
                (-,)    /logicalnot
                (hy)    /hyphen
                (ro)    /registered
                (-^)    /macron
                (0^)    /degree                 % missing
                (+-)    /plusminus              % missing
                (2^)    /twosuperior            % missing
                (3^)    /threesuperior          % missing
                (\\')   /acute
                (/u)    /mu                     % missing
                (P!)    /paragraph
                (.^)    /periodcentered
                (,,)    /cedilla
                (1^)    /onesuperior            % missing
                (o_)    /ordmasculine
                (>>)    /guillemotright
                (14)    /onequarter             % missing
                (12)    /onehalf                % missing
                (34)    /threequarters          % missing
                (??)    /questiondown
                (A`)    /Agrave
                (A')    /Aacute
                (A^)    /Acircumflex
                (A~)    /Atilde
                (A")    /Adieresis
                (A*)    /Aring
                (AE)    /AE
                (C,)    /Ccedilla
                (E`)    /Egrave
                (E')    /Eacute
                (E^)    /Ecircumflex
                (E")    /Edieresis
                (I`)    /Igrave
                (I')    /Iacute
                (I^)    /Icircumflex
                (I")    /Idieresis
                (D-)    /Eth                    % missing
                (N~)    /Ntilde
                (O`)    /Ograve
                (O')    /Oacute
                (O^)    /Ocircumflex
                (O~)    /Otilde
                (O")    /Odieresis
                (xx)    /multiply               % missing
                (O/)    /Oslash
                (U`)    /Ugrave
                (U')    /Uacute
                (U^)    /Ucircumflex
                (U")    /Udieresis
                (Y')    /Yacute                 % missing
                (TH)    /Thorn                  % missing
                (ss)    /germandbls
                (a`)    /agrave
                (a')    /aacute
                (a^)    /acircumflex
                (a~)    /atilde
                (a")    /adieresis
                (a*)    /aring
                (ae)    /ae
                (c,)    /ccedilla
                (e`)    /egrave
                (e')    /eacute
                (e^)    /ecircumflex
                (e")    /edieresis
                (i`)    /igrave
                (i')    /iacute
                (i^)    /icircumflex
                (i")    /idieresis
                (d-)    /eth                    % missing
                (n~)    /ntilde
                (o`)    /ograve
                (o')    /oacute
                (o^)    /ocircumflex
                (o~)    /otilde
                (o")    /odieresis
                (-:)    /divide                 % missing
                (o/)    /oslash
                (u`)    /ugrave
                (u')    /uacute
                (u^)    /ucircumflex
                (u")    /udieresis
                (y')    /yacute                 % missing
                (th)    /thorn                  % missing
                (y")    /ydieresis
        //End of DingbatsCharset
}

SymbolCharset() {
        cat <<-'//End of SymbolCharset'
                (---)           /exclam
                (fa)            /universal
                (---)           /numbersign
                (te)            /existential
                (---)           /percent
                (---)           /ampersand
                (st)            /suchthat
                (---)           /parenleft
                (---)           /parenright
                (**)            /asteriskmath
                (pl)            /plus
                (---)           /comma
                (mi)            /minus
                (---)           /period
                (sl)            /slash
                (---)           /zero
                (---)           /one
                (---)           /two
                (---)           /three
                (---)           /four
                (---)           /five
                (---)           /six
                (---)           /seven
                (---)           /eight
                (---)           /nine
                (---)           /colon
                (---)           /semicolon
                (<)             /less
                (eq)            /equal
                (>)             /greater
                (---)           /question
                (cg)            /congruent
                (*A)            /Alpha
                (\244x)         (")
                (*B)            /Beta
                (\244y)         (")
                (*X)            /Chi
                (\244\257)      (")
                (*D)            /Delta
                (\244{)         (")
                (*E)            /Epsilon
                (\244|)         (")
                (*F)            /Phi
                (\244\256)      (")
                (*G)            /Gamma
                (\244z)         (")
                (*Y)            /Eta
                (\244~)         (")
                (*I)            /Iota
                (\244\241)      (")
                (---)           /theta1
                (\244\331)      (")
                (*K)            /Kappa
                (\244\242)      (")
                (*L)            /Lambda
                (\244\243)      (")
                (*M)            /Mu
                (\244\244)      (")
                (*N)            /Nu
                (\244\245)      (")
                (*O)            /Omicron
                (\244\247)      (")
                (*P)            /Pi
                (\244\250)      (")
                (*H)            /Theta
                (\244\240)      (")
                (*R)            /Rho
                (\244\251)      (")
                (*S)            /Sigma
                (\244\253)      (")
                (*T)            /Tau
                (\244\254)      (")
                (*U)            /Upsilon
                (\244\255)      (")
                (ts)            /sigma1
                (\244\312)      (")
                (*W)            /Omega
                (\244\261)      (")
                (*C)            /Xi
                (\244\246)      (")
                (*Q)            /Psi
                (\244\260)      (")
                (*Z)            /Zeta
                (\244})         (")
                (---)           /bracketleft
                (tf)            /therefore
                (---)           /bracketright
                (pp)            /perpendicular
                (ul)            /underscore
                (_)             (")                     % synonym
                (rn)            /radicalex
                (*a)            /alpha
                (\244\271)      (")
                (*b)            /beta
                (\244\272)      (")
                (*x)            /chi
                (\244\317)      (")
                (*d)            /delta
                (\244\274)      (")
                (*e)            /epsilon
                (\244\275)      (")
                (*f)            /phi
                (\244\316)      (")
                (*g)            /gamma
                (\244\273)      (")
                (*y)            /eta
                (\244\277)      (")
                (*i)            /iota
                (\244\301)      (")
                (---)           /phi1
                (\244\335)      (")
                (*k)            /kappa
                (\244\302)      (")
                (*l)            /lambda
                (\244\303)      (")
                (*m)            /mu
                (\244\304)      (")
                (*n)            /nu
                (\244\305)      (")
                (*o)            /omicron
                (\244\307)      (")
                (*p)            /pi
                (\244\310)      (")
                (*h)            /theta
                (\244\300)      (")
                (*r)            /rho
                (\244\311)      (")
                (*s)            /sigma
                (\244\313)      (")
                (*t)            /tau
                (\244\314)      (")
                (*u)            /upsilon
                (\244\315)      (")
                (---)           /omega1
                (\244\336)      (")
                (*w)            /omega
                (\244\321)      (")
                (*c)            /xi
                (\244\306)      (")
                (*q)            /psi
                (\244\320)      (")
                (*z)            /zeta
                (\244\276)      (")
                (---)           /braceleft
                (or)            /bar
                (---)           /braceright
                (ap)            /similar
                (---)           /Upsilon1
                (fm)            /minute
                (<=)            /lessequal
                (fr)            /fraction               % devpost character
                (if)            /infinity
                (fn)            /florin                 % devpost character
                (---)           /club
                (---)           /diamond
                (---)           /heart
                (---)           /spade
                (ab)            /arrowboth
                (<-)            /arrowleft
                (ua)            /arrowup
                (->)            /arrowright
                (da)            /arrowdown
                (de)            /degree
                (+-)            /plusminus
                (---)           /second
                (>=)            /greaterequal
                (mu)            /multiply
                (pt)            /proportional
                (pd)            /partialdiff
                (bu)            /bullet
                (di)            /divide
                (!=)            /notequal
                (==)            /equivalence
                (~~)            /approxequal
                (el)            /ellipsis
                (av)            /arrowvertex
                (ah)            /arrowhorizex
                (CR)            /carriagereturn
                (af)            /aleph
                (If)            /Ifraktur
                (Rf)            /Rfraktur
                (ws)            /weierstrass
                (Ox)            /circlemultiply
                (O+)            /circleplus
                (es)            /emptyset
                (ca)            /intersection
                (cu)            /union
                (sp)            /propersuperset
                (ip)            /reflexsuperset
                (!b)            /notsubset
                (sb)            /propersubset
                (ib)            /reflexsubset
                (mo)            /element
                (!m)            /notelement
                (an)            /angle
                (gr)            /gradient
                (rg)            /registerserif
                (co)            /copyrightserif
                (tm)            /trademarkserif
                (---)           /product
                (sr)            /radical
                (c.)            /dotmath
                (no)            /logicalnot
                (l&)            /logicaland
                (l|)            /logicalor
                (---)           /arrowdblboth
                (---)           /arrowdblleft
                (---)           /arrowdblup
                (---)           /arrowdblright
                (---)           /arrowdbldown
                (lz)            /lozenge
                (b<)            /angleleft
                (RG)            /registersans
                (CO)            /copyrightsans
                (TM)            /trademarksans
                (---)           /summation
                (LT)            /parenlefttp
                (br)            /parenleftex
                (LX)            (")                     % synonym
                (LB)            /parenleftbt
                (lc)            /bracketlefttp
                (lx)            /bracketleftex
                (lf)            /bracketleftbt
                (lt)            /bracelefttp
                (lk)            /braceleftmid
                (lb)            /braceleftbt
                (bv)            /braceex
                (|)             (")                     % synonym
                (b>)            /angleright
                (is)            /integral
                (---)           /integraltp
                (---)           /integralex
                (---)           /integralbt
                (RT)            /parenrighttp
                (RX)            /parenrightex
                (RB)            /parenrightbt
                (rc)            /bracketrighttp
                (rx)            /bracketrightex
                (rf)            /bracketrightbt
                (rt)            /bracerighttp
                (rk)            /bracerightmid
                (rb)            /bracerightbt
                (~=)            (55     0        1)      % charlib
        //End of SymbolCharset
}

SpecialCharset() {
        cat <<-'//End of SpecialCharset'
                (ru)    /underscore
                ('')    /quotedblright          % devpost character
                (``)    /quotedblleft           % devpost character
                (dg)    /dagger                 % devpost character
                (dd)    /daggerdbl              % devpost character
                (en)    /endash                 % devpost character
                (\\-)   (")                     % synonym
                (em)    /emdash
%               (ff)    (60     2       1)      % charlib
%               (Fi)    (84     2       1)      % charlib
%               (Fl)    (84     2       1)      % charlib
                (14)    (75     2       1)      % charlib
                (12)    (75     2       1)      % charlib
                (34)    (75     2       1)      % charlib
                (bx)    (50     2       1)      % charlib
                (ob)    (38     2       1)      % charlib
                (ci)    (75     0        1)      % charlib
                (sq)    (50     2       1)      % charlib
                (Sl)    (50     2       1)      % charlib
                (L1)    (110    1       1)      % charlib
                (LA)    (110    1       1)      % charlib
                (LV)    (110    3       1)      % charlib
                (LH)    (210    1       1)      % charlib
                (lh)    (100    0        1)      % charlib
                (rh)    (100    0        1)      % charlib
                (lH)    (100    0        1)      % charlib
                (rH)    (100    0        1)      % charlib
                (PC)    (220    2       1)      % charlib
                (DG)    (185    2       1)      % charlib
        //End of SpecialCharset
}

#
# Latin1 ensures a font uses the ISOLatin1Encoding vector, although only
# text fonts should be re-encoded. Downloading the Encoding vector doesn't
# often make sense. No ISOLatin1Encoding array likely means ROM based fonts
# on your printer are incomplete. Type 1 fonts with a full Latin1 character
# set appeared sometime after Version 50.0.
#

Latin1() {
        if [ "$DOWNLOADVECTOR" = TRUE ]; then
                cat <<-'//End of ISOLatin1Encoding'
                        /ISOLatin1Encoding [
                                /.notdef
                                /.notdef
                                /.notdef
                                /.notdef
                                /.notdef
                                /.notdef
                                /.notdef
                                /.notdef
                                /.notdef
                                /.notdef
                                /.notdef
                                /.notdef
                                /.notdef
                                /.notdef
                                /.notdef
                                /.notdef
                                /.notdef
                                /.notdef
                                /.notdef
                                /.notdef
                                /.notdef
                                /.notdef
                                /.notdef
                                /.notdef
                                /.notdef
                                /.notdef
                                /.notdef
                                /.notdef
                                /.notdef
                                /.notdef
                                /.notdef
                                /.notdef
                                /space
                                /exclam
                                /quotedbl
                                /numbersign
                                /dollar
                                /percent
                                /ampersand
                                /quoteright
                                /parenleft
                                /parenright
                                /asterisk
                                /plus
                                /comma
                                /minus
                                /period
                                /slash
                                /zero
                                /one
                                /two
                                /three
                                /four
                                /five
                                /six
                                /seven
                                /eight
                                /nine
                                /colon
                                /semicolon
                                /less
                                /equal
                                /greater
                                /question
                                /at
                                /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
                                /bracketleft
                                /backslash
                                /bracketright
                                /asciicircum
                                /underscore
                                /quoteleft
                                /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
                                /braceleft
                                /bar
                                /braceright
                                /asciitilde
                                /.notdef
                                /.notdef
                                /.notdef
                                /.notdef
                                /.notdef
                                /.notdef
                                /.notdef
                                /.notdef
                                /.notdef
                                /.notdef
                                /.notdef
                                /.notdef
                                /.notdef
                                /.notdef
                                /.notdef
                                /.notdef
                                /.notdef
                                /dotlessi
                                /grave
                                /acute
                                /circumflex
                                /tilde
                                /macron
                                /breve
                                /dotaccent
                                /dieresis
                                /.notdef
                                /ring
                                /cedilla
                                /.notdef
                                /hungarumlaut
                                /ogonek
                                /caron
                                /space
                                /exclamdown
                                /cent
                                /sterling
                                /currency
                                /yen
                                /brokenbar
                                /section
                                /dieresis
                                /copyright
                                /ordfeminine
                                /guillemotleft
                                /logicalnot
                                /hyphen
                                /registered
                                /macron
                                /degree
                                /plusminus
                                /twosuperior
                                /threesuperior
                                /acute
                                /mu
                                /paragraph
                                /periodcentered
                                /cedilla
                                /onesuperior
                                /ordmasculine
                                /guillemotright
                                /onequarter
                                /onehalf
                                /threequarters
                                /questiondown
                                /Agrave
                                /Aacute
                                /Acircumflex
                                /Atilde
                                /Adieresis
                                /Aring
                                /AE
                                /Ccedilla
                                /Egrave
                                /Eacute
                                /Ecircumflex
                                /Edieresis
                                /Igrave
                                /Iacute
                                /Icircumflex
                                /Idieresis
                                /Eth
                                /Ntilde
                                /Ograve
                                /Oacute
                                /Ocircumflex
                                /Otilde
                                /Odieresis
                                /multiply
                                /Oslash
                                /Ugrave
                                /Uacute
                                /Ucircumflex
                                /Udieresis
                                /Yacute
                                /Thorn
                                /germandbls
                                /agrave
                                /aacute
                                /acircumflex
                                /atilde
                                /adieresis
                                /aring
                                /ae
                                /ccedilla
                                /egrave
                                /eacute
                                /ecircumflex
                                /edieresis
                                /igrave
                                /iacute
                                /icircumflex
                                /idieresis
                                /eth
                                /ntilde
                                /ograve
                                /oacute
                                /ocircumflex
                                /otilde
                                /odieresis
                                /divide
                                /oslash
                                /ugrave
                                /uacute
                                /ucircumflex
                                /udieresis
                                /yacute
                                /thorn
                                /ydieresis
                        ] def
                //End of ISOLatin1Encoding
        fi

        echo "ISOLatin1Encoding /$1 ReEncode"
}

#
# Generating functions output PostScript programs that build font width
# tables or a typesetter description file. Send the program to a printer
# and the complete table will come back on the serial port. All write on
# stdout and assume the prologue and other required PostScript files are
# all available.
#

Proportional() {
        echo "/unitwidth $UNITWIDTH def"
        echo "/resolution $RESOLUTION def"
        echo "/octalescapes $OCTALESCAPES def"
        echo "/charset ["
                # Get <>_ and | from S. Use accents for ascii ^ and ~.
                StandardCharset | awk '
                        $1 == "(<)" && $2 == "/less" {$1 = "(---)"}
                        $1 == "(>)" && $2 == "/greater" {$1 = "(---)"}
                        $1 == "(_)" && $2 == "/underscore" {$1 = "(---)"}
                        $1 == "(|)" && $2 == "/bar" {$1 = "(---)"}
                        $1 == "(^)" && $2 == "/asciicircum" {
                                printf "(^)\t/circumflex\n"
                                $1 = "(---)"
                        }
                        $1 == "(~)" && $2 == "/asciitilde" {
                                printf "(~)\t/tilde\n"
                                $1 = "(---)"
                        }
                        {printf "%s\t%s\n", $1, $2}
                '
        echo "] def"

        Latin1 $2
        echo "/$2 SelectFont"
        echo "(opO) SetAscender"

        echo "(name $1\\\\n) Print"
        echo "(fontname $2\\\\n) Print"
        echo "/$1 NamedInPrologue"
        echo "(spacewidth ) Print 32 GetWidth Print (\n) Print"
        echo "(charset\\\\n) Print"
        echo "BuildFontCharset"
}

FixedWidth() {
        echo "/unitwidth $UNITWIDTH def"
        echo "/resolution $RESOLUTION def"
        echo "/octalescapes $OCTALESCAPES def"
        echo "/charset ["
                StandardCharset
        echo "] def"

        Latin1 $2
        echo "/$2 SelectFont"
        echo "(opO) SetAscender"

        echo "(name $1\\\\n) Print"
        echo "(fontname $2\\\\n) Print"
        echo "/$1 NamedInPrologue"
        echo "(spacewidth ) Print 32 GetWidth Print (\n) Print"
        echo "(charset\\\\n) Print"
        echo "BuildFontCharset"
}

Dingbats() {
        echo "/unitwidth $UNITWIDTH def"
        echo "/resolution $RESOLUTION def"
        echo "/octalescapes $OCTALESCAPES def"
        echo "/charset ["
                DingbatsCharset | awk '$1 != "(---)" && $2 ~ /^\/[a-zA-Z]/ {
                        printf "%s\tISOLatin1Encoding %s GetCode\n", $1, $2
                }'
        echo "] def"

        echo "/$2 SelectFont"
        echo "(   ) SetAscender"

        echo "(name $1\\\\n) Print"
        echo "(fontname $2\\\\n) Print"
        echo "/$1 NamedInPrologue"
        echo "(charset\\\\n) Print"
        echo "BuildFontCharset"
}

Greek() {
        echo "/unitwidth $UNITWIDTH def"
        echo "/resolution $RESOLUTION def"
        echo "/charset ["
                SymbolCharset | awk '
                        BEGIN {hit = -1}
                        $1 ~ /\(\*[a-zA-Z]\)/ {print; hit = NR}
                        $2 == "(\")" && hit == NR-1 {print; hit = NR}
                '
        echo "] def"

        echo "/$2 SelectFont"
        echo "(orO) SetAscender"

        echo "(name $1\\\\n) Print"
        echo "(fontname $2\\\\n) Print"
        echo "/$1 NamedInPrologue"
        echo "(spacewidth ) Print 32 GetWidth Print (\n) Print"
        echo "(charset\\\\n) Print"
        echo "BuildFontCharset"
}

Symbol() {
        echo "/unitwidth $UNITWIDTH def"
        echo "/resolution $RESOLUTION def"
        echo "/charset ["
                SymbolCharset
        echo "] def"

        echo "ChangeMetrics"
        echo "/S SelectFont"
        echo "(orO) SetAscender"

        echo "(name $1\\\\n) Print"
        echo "(fontname $2\\\\n) Print"
        echo "/$1 NamedInPrologue"
        echo "(special\\\\n) Print"
        echo "(charset\\\\n) Print"
        echo "BuildFontCharset"
}

Special() {
        echo "/unitwidth $UNITWIDTH def"
        echo "/resolution $RESOLUTION def"
        echo "/charset ["
                SpecialCharset
        echo "] def"

        echo "ChangeMetrics"
        echo "/S1 SelectFont"

        echo "(# Times-Roman special font\\\\n) Print"
        echo "(name $1\\\\n) Print"
        echo "(fontname $2\\\\n) Print"
        echo "/$1 NamedInPrologue"
        echo "(special\\\\n) Print"
        echo "(charset\\\\n) Print"
        echo "BuildFontCharset"
}

#
# The DESC file doesn't have to be built on a printer. It's only here for
# consistency.
#

Description() {
        echo "/charset ["       # awk - so the stack doesn't overflow
                StandardCharset | awk '$1 !~ /\(\\[0-9]/ {print $1}'
                SymbolCharset | awk '$1 !~ /\(\\[0-9]/ {print $1}'
                SpecialCharset | awk '$1 !~ /\(\\[0-9]/ {print $1}'
        echo "] def"

        cat <<-//DESC
                (#Device Description - utf character set

                PDL PostScript
                Encoding Latin1

                fonts 10 R I B BI CW H HI HB S1 S
                sizes 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
                23 24 25 26 27 28 29 30 31 32 33 34 35 36 38 40 42 44 46
                48 50 52 54 56 58 60 64 68 72 78 84 90 96 100 105 110 115
                120 125 130 135 140 145 150 155 160 0
                res $RESOLUTION
                hor 1
                vert 1
                unitwidth $UNITWIDTH

                ) Print
        //DESC
        echo "(charset\\\\n) Print"
        echo "BuildDescCharset"
        echo "(\\\\n) Print"
}