URI: 
       shell.lib - 9base - revived minimalist port of Plan 9 userland to Unix
  HTML git clone git://git.suckless.org/9base
   DIR Log
   DIR Files
   DIR Refs
   DIR README
   DIR LICENSE
       ---
       shell.lib (22924B)
       ---
            1 #
            2 # Shell library - for building devutf tables.
            3 #
            4 
            5 RESOLUTION=720
            6 UNITWIDTH=10
            7 
            8 OCTALESCAPES=${OCTALESCAPES:-160}        # <= code means add \0ddd names
            9 DOWNLOADVECTOR=FALSE                        # TRUE can mean incomplete tables
           10 
           11 #
           12 # BuiltinTables returns command lines that generate PostScript programs
           13 # for building a typesetter description file and font width tables for
           14 # a relatively standard collection of fonts. Use awk to select a command
           15 # line or modify an existing command to build a width table for a new
           16 # font.
           17 #
           18 
           19 BuiltinTables() {
           20         cat <<-'//End of BuiltinTables'
           21                 Proportional        R        Times-Roman
           22                 Proportional        I        Times-Italic
           23                 Proportional        B        Times-Bold
           24                 Proportional        BI        Times-BoldItalic
           25                 Proportional        AB        AvantGarde-Demi
           26                 Proportional        AI        AvantGarde-BookOblique
           27                 Proportional        AR        AvantGarde-Book
           28                 Proportional        AX        AvantGarde-DemiOblique
           29                 Proportional        H        Helvetica
           30                 Proportional        HB        Helvetica-Bold
           31                 Proportional        HI        Helvetica-Oblique
           32                 Proportional        HX        Helvetica-BoldOblique
           33                 Proportional        Hb        Helvetica-Narrow-Bold
           34                 Proportional        Hi        Helvetica-Narrow-Oblique
           35                 Proportional        Hr        Helvetica-Narrow
           36                 Proportional        Hx        Helvetica-Narrow-BoldOblique
           37                 Proportional        KB        Bookman-Demi
           38                 Proportional        KI        Bookman-LightItalic
           39                 Proportional        KR        Bookman-Light
           40                 Proportional        KX        Bookman-DemiItalic
           41                 Proportional        NB        NewCenturySchlbk-Bold
           42                 Proportional        NI        NewCenturySchlbk-Italic
           43                 Proportional        NR        NewCenturySchlbk-Roman
           44                 Proportional        NX        NewCenturySchlbk-BoldItalic
           45                 Proportional        PA        Palatino-Roman
           46                 Proportional        PB        Palatino-Bold
           47                 Proportional        PI        Palatino-Italic
           48                 Proportional        PX        Palatino-BoldItalic
           49                 Proportional        ZI        ZapfChancery-MediumItalic
           50                 FixedWidth        C        Courier
           51                 FixedWidth        CB        Courier-Bold
           52                 FixedWidth        CI        Courier-Oblique
           53                 FixedWidth        CO        Courier
           54                 FixedWidth        CW        Courier
           55                 FixedWidth        CX        Courier-BoldOblique
           56                 Dingbats        ZD        ZapfDingbats
           57                 Greek                GR        Symbol
           58                 Symbol                S        Symbol
           59                 Special                S1        Times-Roman
           60                 Description        DESC        ---
           61         //End of BuiltinTables
           62 }
           63 
           64 #
           65 # AllTables prints the complete list of builtin font names.
           66 #
           67 
           68 AllTables() {
           69         BuiltinTables | awk '{print $2}'
           70 }
           71 
           72 #
           73 # Charset functions generate keyword/value pairs (as PostScript objects)
           74 # that describe the character set available in a font. The keyword is a
           75 # PostScript string that represents troff's name for the character. The
           76 # value is usually the literal name (i.e. begins with a /) assigned to
           77 # the character in the PostScript font. The value can also be an integer
           78 # or a PostScript string. An integer value is used as an index in the
           79 # current font's Encoding array. A string value is returned to the host
           80 # unchanged when the entry for the character is constructed. Entries that
           81 # have (") as their value are synonyms for the preceeding character.
           82 #
           83 # The 18 characters missing from ROM resident fonts on older printers are
           84 # flagged with the PostScript comment "% missing".
           85 #
           86 
           87 StandardCharset() {
           88         cat <<-'//End of StandardCharset'
           89                 (!)        /exclam
           90                 (")        /quotedbl
           91                 (dq)        (")                        % synonym
           92                 (#)        /numbersign
           93                 ($)        /dollar
           94                 (%)        /percent
           95                 (&)        /ampersand
           96                 (')        /quoteright
           97                 (\()        /parenleft
           98                 (\))        /parenright
           99                 (*)        /asterisk
          100                 (+)        /plus
          101                 (,)        /comma
          102                 (-)        /hyphen                        % changed from minus by request
          103                 (.)        /period
          104                 (/)        /slash
          105                 (0)        /zero
          106                 (1)        /one
          107                 (2)        /two
          108                 (3)        /three
          109                 (4)        /four
          110                 (5)        /five
          111                 (6)        /six
          112                 (7)        /seven
          113                 (8)        /eight
          114                 (9)        /nine
          115                 (:)        /colon
          116                 (;)        /semicolon
          117                 (<)        /less
          118                 (=)        /equal
          119                 (>)        /greater
          120                 (?)        /question
          121                 (@)        /at
          122                 (A)        /A
          123                 (B)        /B
          124                 (C)        /C
          125                 (D)        /D
          126                 (E)        /E
          127                 (F)        /F
          128                 (G)        /G
          129                 (H)        /H
          130                 (I)        /I
          131                 (J)        /J
          132                 (K)        /K
          133                 (L)        /L
          134                 (M)        /M
          135                 (N)        /N
          136                 (O)        /O
          137                 (P)        /P
          138                 (Q)        /Q
          139                 (R)        /R
          140                 (S)        /S
          141                 (T)        /T
          142                 (U)        /U
          143                 (V)        /V
          144                 (W)        /W
          145                 (X)        /X
          146                 (Y)        /Y
          147                 (Z)        /Z
          148                 ([)        /bracketleft
          149                 (\\)        /backslash
          150                 (bs)        (")                        % synonym
          151                 (])        /bracketright
          152                 (^)        /asciicircum
          153                 (_)        /underscore
          154                 (`)        /quoteleft
          155                 (a)        /a
          156                 (b)        /b
          157                 (c)        /c
          158                 (d)        /d
          159                 (e)        /e
          160                 (f)        /f
          161                 (g)        /g
          162                 (h)        /h
          163                 (i)        /i
          164                 (j)        /j
          165                 (k)        /k
          166                 (l)        /l
          167                 (m)        /m
          168                 (n)        /n
          169                 (o)        /o
          170                 (p)        /p
          171                 (q)        /q
          172                 (r)        /r
          173                 (s)        /s
          174                 (t)        /t
          175                 (u)        /u
          176                 (v)        /v
          177                 (w)        /w
          178                 (x)        /x
          179                 (y)        /y
          180                 (z)        /z
          181                 ({)        /braceleft
          182                 (|)        /bar
          183                 (})        /braceright
          184                 (~)        /asciitilde
          185                 (\\`)        /grave                        % devpost character
          186                 (ga)        (")                        % synonym
          187                 (!!)        /exclamdown
          188                 (c|)        /cent
          189                 (ct)        (")                        % devpost synonym
          190                 (L-)        /sterling
          191                 (ps)        (")                        % devpost synonym
          192                 (xo)        /currency
          193                 (cr)        (")                        % devpost synonym
          194                 (Y-)        /yen
          195                 (yn)        (")                        % devpost synonym
          196                 (||)        /brokenbar                % missing
          197                 (so)        /section
          198                 (sc)        (")                        % devpost synonym
          199                 ("")        /dieresis
          200                 (:a)        (")                        % devpost synonym
          201                 (co)        /copyright
          202                 (a_)        /ordfeminine
          203                 (<<)        /guillemotleft
          204                 (-,)        /logicalnot
          205                 (hy)        /hyphen
          206                 (--)        /minus
          207                 (ro)        /registered
          208                 (rg)        (")                        % devpost synonym
          209                 (-^)        /macron
          210                 (-a)        (")                        % devpost synonym
          211                 (0^)        /degree                        % missing
          212                 (+-)        /plusminus                % missing
          213                 (2^)        /twosuperior                % missing
          214                 (3^)        /threesuperior                % missing
          215                 (\\')        /acute
          216                 (aa)        (")                        % devpost synonym
          217                 (/u)        /mu                        % missing
          218                 (P!)        /paragraph
          219                 (pg)        (")                        % devpost synonym
          220                 (.^)        /periodcentered
          221                 (,,)        /cedilla
          222                 (,a)        (")                        % devpost synonym
          223                 (1^)        /onesuperior                % missing
          224                 (o_)        /ordmasculine
          225                 (>>)        /guillemotright
          226                 (14)        /onequarter                % missing
          227                 (12)        /onehalf                % missing
          228                 (34)        /threequarters                % missing
          229                 (??)        /questiondown
          230                 (A`)        /Agrave
          231                 (A')        /Aacute
          232                 (A^)        /Acircumflex
          233                 (A~)        /Atilde
          234                 (A")        /Adieresis
          235                 (A*)        /Aring
          236                 (AE)        /AE
          237                 (C,)        /Ccedilla
          238                 (E`)        /Egrave
          239                 (E')        /Eacute
          240                 (E^)        /Ecircumflex
          241                 (E")        /Edieresis
          242                 (I`)        /Igrave
          243                 (I')        /Iacute
          244                 (I^)        /Icircumflex
          245                 (I")        /Idieresis
          246                 (D-)        /Eth                        % missing
          247                 (N~)        /Ntilde
          248                 (O`)        /Ograve
          249                 (O')        /Oacute
          250                 (O^)        /Ocircumflex
          251                 (O~)        /Otilde
          252                 (O")        /Odieresis
          253                 (xx)        /multiply                % missing
          254                 (O/)        /Oslash
          255                 (U`)        /Ugrave
          256                 (U')        /Uacute
          257                 (U^)        /Ucircumflex
          258                 (U")        /Udieresis
          259                 (Y')        /Yacute                        % missing
          260                 (TH)        /Thorn                        % missing
          261                 (ss)        /germandbls
          262                 (a`)        /agrave
          263                 (a')        /aacute
          264                 (a^)        /acircumflex
          265                 (a~)        /atilde
          266                 (a")        /adieresis
          267                 (a*)        /aring
          268                 (ae)        /ae
          269                 (c,)        /ccedilla
          270                 (e`)        /egrave
          271                 (e')        /eacute
          272                 (e^)        /ecircumflex
          273                 (e")        /edieresis
          274                 (i`)        /igrave
          275                 (i')        /iacute
          276                 (i^)        /icircumflex
          277                 (i")        /idieresis
          278                 (d-)        /eth                        % missing
          279                 (n~)        /ntilde
          280                 (o`)        /ograve
          281                 (o')        /oacute
          282                 (o^)        /ocircumflex
          283                 (o~)        /otilde
          284                 (o")        /odieresis
          285                 (-:)        /divide                        % missing
          286                 (o/)        /oslash
          287                 (u`)        /ugrave
          288                 (u')        /uacute
          289                 (u^)        /ucircumflex
          290                 (u")        /udieresis
          291                 (y')        /yacute                        % missing
          292                 (th)        /thorn                        % missing
          293                 (y")        /ydieresis
          294                 (^a)        /circumflex                % devpost accent
          295                 (~a)        /tilde                        % devpost accent
          296                 (Ua)        /breve                        % devpost accent
          297                 (.a)        /dotaccent                % devpost accent
          298                 (oa)        /ring                        % devpost accent
          299                 ("a)        /hungarumlaut                % devpost accent
          300                 (Ca)        /ogonek                        % devpost accent
          301                 (va)        /caron                        % devpost accent
          302         //End of StandardCharset
          303 }
          304 
          305 #
          306 # DingbatsCharset guarantees changes in StandardCharset don't show up in ZD.
          307 #
          308 
          309 DingbatsCharset() {
          310         cat <<-'//End of DingbatsCharset'
          311                 (!)        /exclam
          312                 (")        /quotedbl
          313                 (#)        /numbersign
          314                 ($)        /dollar
          315                 (%)        /percent
          316                 (&)        /ampersand
          317                 (')        /quoteright
          318                 (\()        /parenleft
          319                 (\))        /parenright
          320                 (*)        /asterisk
          321                 (+)        /plus
          322                 (,)        /comma
          323                 (-)        /minus                % also hyphen in devpost
          324                 (.)        /period
          325                 (/)        /slash
          326                 (0)        /zero
          327                 (1)        /one
          328                 (2)        /two
          329                 (3)        /three
          330                 (4)        /four
          331                 (5)        /five
          332                 (6)        /six
          333                 (7)        /seven
          334                 (8)        /eight
          335                 (9)        /nine
          336                 (:)        /colon
          337                 (;)        /semicolon
          338                 (<)        /less
          339                 (=)        /equal
          340                 (>)        /greater
          341                 (?)        /question
          342                 (@)        /at
          343                 (A)        /A
          344                 (B)        /B
          345                 (C)        /C
          346                 (D)        /D
          347                 (E)        /E
          348                 (F)        /F
          349                 (G)        /G
          350                 (H)        /H
          351                 (I)        /I
          352                 (J)        /J
          353                 (K)        /K
          354                 (L)        /L
          355                 (M)        /M
          356                 (N)        /N
          357                 (O)        /O
          358                 (P)        /P
          359                 (Q)        /Q
          360                 (R)        /R
          361                 (S)        /S
          362                 (T)        /T
          363                 (U)        /U
          364                 (V)        /V
          365                 (W)        /W
          366                 (X)        /X
          367                 (Y)        /Y
          368                 (Z)        /Z
          369                 ([)        /bracketleft
          370                 (\\)        /backslash
          371                 (])        /bracketright
          372                 (^)        /asciicircum
          373                 (_)        /underscore
          374                 (`)        /quoteleft
          375                 (a)        /a
          376                 (b)        /b
          377                 (c)        /c
          378                 (d)        /d
          379                 (e)        /e
          380                 (f)        /f
          381                 (g)        /g
          382                 (h)        /h
          383                 (i)        /i
          384                 (j)        /j
          385                 (k)        /k
          386                 (l)        /l
          387                 (m)        /m
          388                 (n)        /n
          389                 (o)        /o
          390                 (p)        /p
          391                 (q)        /q
          392                 (r)        /r
          393                 (s)        /s
          394                 (t)        /t
          395                 (u)        /u
          396                 (v)        /v
          397                 (w)        /w
          398                 (x)        /x
          399                 (y)        /y
          400                 (z)        /z
          401                 ({)        /braceleft
          402                 (|)        /bar
          403                 (})        /braceright
          404                 (~)        /asciitilde
          405                 (\\`)        /grave                        % devpost character
          406                 (!!)        /exclamdown
          407                 (c|)        /cent
          408                 (L-)        /sterling
          409                 (xo)        /currency
          410                 (Y-)        /yen
          411                 (||)        /brokenbar                % missing
          412                 (so)        /section
          413                 ("")        /dieresis
          414                 (co)        /copyright
          415                 (a_)        /ordfeminine
          416                 (<<)        /guillemotleft
          417                 (-,)        /logicalnot
          418                 (hy)        /hyphen
          419                 (ro)        /registered
          420                 (-^)        /macron
          421                 (0^)        /degree                        % missing
          422                 (+-)        /plusminus                % missing
          423                 (2^)        /twosuperior                % missing
          424                 (3^)        /threesuperior                % missing
          425                 (\\')        /acute
          426                 (/u)        /mu                        % missing
          427                 (P!)        /paragraph
          428                 (.^)        /periodcentered
          429                 (,,)        /cedilla
          430                 (1^)        /onesuperior                % missing
          431                 (o_)        /ordmasculine
          432                 (>>)        /guillemotright
          433                 (14)        /onequarter                % missing
          434                 (12)        /onehalf                % missing
          435                 (34)        /threequarters                % missing
          436                 (??)        /questiondown
          437                 (A`)        /Agrave
          438                 (A')        /Aacute
          439                 (A^)        /Acircumflex
          440                 (A~)        /Atilde
          441                 (A")        /Adieresis
          442                 (A*)        /Aring
          443                 (AE)        /AE
          444                 (C,)        /Ccedilla
          445                 (E`)        /Egrave
          446                 (E')        /Eacute
          447                 (E^)        /Ecircumflex
          448                 (E")        /Edieresis
          449                 (I`)        /Igrave
          450                 (I')        /Iacute
          451                 (I^)        /Icircumflex
          452                 (I")        /Idieresis
          453                 (D-)        /Eth                        % missing
          454                 (N~)        /Ntilde
          455                 (O`)        /Ograve
          456                 (O')        /Oacute
          457                 (O^)        /Ocircumflex
          458                 (O~)        /Otilde
          459                 (O")        /Odieresis
          460                 (xx)        /multiply                % missing
          461                 (O/)        /Oslash
          462                 (U`)        /Ugrave
          463                 (U')        /Uacute
          464                 (U^)        /Ucircumflex
          465                 (U")        /Udieresis
          466                 (Y')        /Yacute                        % missing
          467                 (TH)        /Thorn                        % missing
          468                 (ss)        /germandbls
          469                 (a`)        /agrave
          470                 (a')        /aacute
          471                 (a^)        /acircumflex
          472                 (a~)        /atilde
          473                 (a")        /adieresis
          474                 (a*)        /aring
          475                 (ae)        /ae
          476                 (c,)        /ccedilla
          477                 (e`)        /egrave
          478                 (e')        /eacute
          479                 (e^)        /ecircumflex
          480                 (e")        /edieresis
          481                 (i`)        /igrave
          482                 (i')        /iacute
          483                 (i^)        /icircumflex
          484                 (i")        /idieresis
          485                 (d-)        /eth                        % missing
          486                 (n~)        /ntilde
          487                 (o`)        /ograve
          488                 (o')        /oacute
          489                 (o^)        /ocircumflex
          490                 (o~)        /otilde
          491                 (o")        /odieresis
          492                 (-:)        /divide                        % missing
          493                 (o/)        /oslash
          494                 (u`)        /ugrave
          495                 (u')        /uacute
          496                 (u^)        /ucircumflex
          497                 (u")        /udieresis
          498                 (y')        /yacute                        % missing
          499                 (th)        /thorn                        % missing
          500                 (y")        /ydieresis
          501         //End of DingbatsCharset
          502 }
          503 
          504 SymbolCharset() {
          505         cat <<-'//End of SymbolCharset'
          506                 (---)                /exclam
          507                 (fa)                /universal
          508                 (---)                /numbersign
          509                 (te)                /existential
          510                 (---)                /percent
          511                 (---)                /ampersand
          512                 (st)                /suchthat
          513                 (---)                /parenleft
          514                 (---)                /parenright
          515                 (**)                /asteriskmath
          516                 (pl)                /plus
          517                 (---)                /comma
          518                 (mi)                /minus
          519                 (---)                /period
          520                 (sl)                /slash
          521                 (---)                /zero
          522                 (---)                /one
          523                 (---)                /two
          524                 (---)                /three
          525                 (---)                /four
          526                 (---)                /five
          527                 (---)                /six
          528                 (---)                /seven
          529                 (---)                /eight
          530                 (---)                /nine
          531                 (---)                /colon
          532                 (---)                /semicolon
          533                 (<)                /less
          534                 (eq)                /equal
          535                 (>)                /greater
          536                 (---)                /question
          537                 (cg)                /congruent
          538                 (*A)                /Alpha
          539                 (\244x)                (")
          540                 (*B)                /Beta
          541                 (\244y)                (")
          542                 (*X)                /Chi
          543                 (\244\257)        (")
          544                 (*D)                /Delta
          545                 (\244{)                (")
          546                 (*E)                /Epsilon
          547                 (\244|)                (")
          548                 (*F)                /Phi
          549                 (\244\256)        (")
          550                 (*G)                /Gamma
          551                 (\244z)                (")
          552                 (*Y)                /Eta
          553                 (\244~)                (")
          554                 (*I)                /Iota
          555                 (\244\241)        (")
          556                 (---)                /theta1
          557                 (\244\331)        (")
          558                 (*K)                /Kappa
          559                 (\244\242)        (")
          560                 (*L)                /Lambda
          561                 (\244\243)        (")
          562                 (*M)                /Mu
          563                 (\244\244)        (")
          564                 (*N)                /Nu
          565                 (\244\245)        (")
          566                 (*O)                /Omicron
          567                 (\244\247)        (")
          568                 (*P)                /Pi
          569                 (\244\250)        (")
          570                 (*H)                /Theta
          571                 (\244\240)        (")
          572                 (*R)                /Rho
          573                 (\244\251)        (")
          574                 (*S)                /Sigma
          575                 (\244\253)        (")
          576                 (*T)                /Tau
          577                 (\244\254)        (")
          578                 (*U)                /Upsilon
          579                 (\244\255)        (")
          580                 (ts)                /sigma1
          581                 (\244\312)        (")
          582                 (*W)                /Omega
          583                 (\244\261)        (")
          584                 (*C)                /Xi
          585                 (\244\246)        (")
          586                 (*Q)                /Psi
          587                 (\244\260)        (")
          588                 (*Z)                /Zeta
          589                 (\244})                (")
          590                 (---)                /bracketleft
          591                 (tf)                /therefore
          592                 (---)                /bracketright
          593                 (pp)                /perpendicular
          594                 (ul)                /underscore
          595                 (_)                (")                        % synonym
          596                 (rn)                /radicalex
          597                 (*a)                /alpha
          598                 (\244\271)        (")
          599                 (*b)                /beta
          600                 (\244\272)        (")
          601                 (*x)                /chi
          602                 (\244\317)        (")
          603                 (*d)                /delta
          604                 (\244\274)        (")
          605                 (*e)                /epsilon
          606                 (\244\275)        (")
          607                 (*f)                /phi
          608                 (\244\316)        (")
          609                 (*g)                /gamma
          610                 (\244\273)        (")
          611                 (*y)                /eta
          612                 (\244\277)        (")
          613                 (*i)                /iota
          614                 (\244\301)        (")
          615                 (---)                /phi1
          616                 (\244\335)        (")
          617                 (*k)                /kappa
          618                 (\244\302)        (")
          619                 (*l)                /lambda
          620                 (\244\303)        (")
          621                 (*m)                /mu
          622                 (\244\304)        (")
          623                 (*n)                /nu
          624                 (\244\305)        (")
          625                 (*o)                /omicron
          626                 (\244\307)        (")
          627                 (*p)                /pi
          628                 (\244\310)        (")
          629                 (*h)                /theta
          630                 (\244\300)        (")
          631                 (*r)                /rho
          632                 (\244\311)        (")
          633                 (*s)                /sigma
          634                 (\244\313)        (")
          635                 (*t)                /tau
          636                 (\244\314)        (")
          637                 (*u)                /upsilon
          638                 (\244\315)        (")
          639                 (---)                /omega1
          640                 (\244\336)        (")
          641                 (*w)                /omega
          642                 (\244\321)        (")
          643                 (*c)                /xi
          644                 (\244\306)        (")
          645                 (*q)                /psi
          646                 (\244\320)        (")
          647                 (*z)                /zeta
          648                 (\244\276)        (")
          649                 (---)                /braceleft
          650                 (or)                /bar
          651                 (---)                /braceright
          652                 (ap)                /similar
          653                 (---)                /Upsilon1
          654                 (fm)                /minute
          655                 (<=)                /lessequal
          656                 (fr)                /fraction                % devpost character
          657                 (if)                /infinity
          658                 (fn)                /florin                        % devpost character
          659                 (---)                /club
          660                 (---)                /diamond
          661                 (---)                /heart
          662                 (---)                /spade
          663                 (ab)                /arrowboth
          664                 (<-)                /arrowleft
          665                 (ua)                /arrowup
          666                 (->)                /arrowright
          667                 (da)                /arrowdown
          668                 (de)                /degree
          669                 (+-)                /plusminus
          670                 (---)                /second
          671                 (>=)                /greaterequal
          672                 (mu)                /multiply
          673                 (pt)                /proportional
          674                 (pd)                /partialdiff
          675                 (bu)                /bullet
          676                 (di)                /divide
          677                 (!=)                /notequal
          678                 (==)                /equivalence
          679                 (~~)                /approxequal
          680                 (el)                /ellipsis
          681                 (av)                /arrowvertex
          682                 (ah)                /arrowhorizex
          683                 (CR)                /carriagereturn
          684                 (af)                /aleph
          685                 (If)                /Ifraktur
          686                 (Rf)                /Rfraktur
          687                 (ws)                /weierstrass
          688                 (Ox)                /circlemultiply
          689                 (O+)                /circleplus
          690                 (es)                /emptyset
          691                 (ca)                /intersection
          692                 (cu)                /union
          693                 (sp)                /propersuperset
          694                 (ip)                /reflexsuperset
          695                 (!b)                /notsubset
          696                 (sb)                /propersubset
          697                 (ib)                /reflexsubset
          698                 (mo)                /element
          699                 (!m)                /notelement
          700                 (an)                /angle
          701                 (gr)                /gradient
          702                 (rg)                /registerserif
          703                 (co)                /copyrightserif
          704                 (tm)                /trademarkserif
          705                 (---)                /product
          706                 (sr)                /radical
          707                 (c.)                /dotmath
          708                 (no)                /logicalnot
          709                 (l&)                /logicaland
          710                 (l|)                /logicalor
          711                 (---)                /arrowdblboth
          712                 (---)                /arrowdblleft
          713                 (---)                /arrowdblup
          714                 (---)                /arrowdblright
          715                 (---)                /arrowdbldown
          716                 (lz)                /lozenge
          717                 (b<)                /angleleft
          718                 (RG)                /registersans
          719                 (CO)                /copyrightsans
          720                 (TM)                /trademarksans
          721                 (---)                /summation
          722                 (LT)                /parenlefttp
          723                 (br)                /parenleftex
          724                 (LX)                (")                        % synonym
          725                 (LB)                /parenleftbt
          726                 (lc)                /bracketlefttp
          727                 (lx)                /bracketleftex
          728                 (lf)                /bracketleftbt
          729                 (lt)                /bracelefttp
          730                 (lk)                /braceleftmid
          731                 (lb)                /braceleftbt
          732                 (bv)                /braceex
          733                 (|)                (")                        % synonym
          734                 (b>)                /angleright
          735                 (is)                /integral
          736                 (---)                /integraltp
          737                 (---)                /integralex
          738                 (---)                /integralbt
          739                 (RT)                /parenrighttp
          740                 (RX)                /parenrightex
          741                 (RB)                /parenrightbt
          742                 (rc)                /bracketrighttp
          743                 (rx)                /bracketrightex
          744                 (rf)                /bracketrightbt
          745                 (rt)                /bracerighttp
          746                 (rk)                /bracerightmid
          747                 (rb)                /bracerightbt
          748                 (~=)                (55        0        1)        % charlib
          749         //End of SymbolCharset
          750 }
          751 
          752 SpecialCharset() {
          753         cat <<-'//End of SpecialCharset'
          754                 (ru)        /underscore
          755                 ('')        /quotedblright                % devpost character
          756                 (``)        /quotedblleft                % devpost character
          757                 (dg)        /dagger                        % devpost character
          758                 (dd)        /daggerdbl                % devpost character
          759                 (en)        /endash                        % devpost character
          760                 (\\-)        (")                        % synonym
          761                 (em)        /emdash
          762 %                (ff)        (60        2        1)        % charlib
          763 %                (Fi)        (84        2        1)        % charlib
          764 %                (Fl)        (84        2        1)        % charlib
          765                 (14)        (75        2        1)        % charlib
          766                 (12)        (75        2        1)        % charlib
          767                 (34)        (75        2        1)        % charlib
          768                 (bx)        (50        2        1)        % charlib
          769                 (ob)        (38        2        1)        % charlib
          770                 (ci)        (75        0        1)        % charlib
          771                 (sq)        (50        2        1)        % charlib
          772                 (Sl)        (50        2        1)        % charlib
          773                 (L1)        (110        1        1)        % charlib
          774                 (LA)        (110        1        1)        % charlib
          775                 (LV)        (110        3        1)        % charlib
          776                 (LH)        (210        1        1)        % charlib
          777                 (lh)        (100        0        1)        % charlib
          778                 (rh)        (100        0        1)        % charlib
          779                 (lH)        (100        0        1)        % charlib
          780                 (rH)        (100        0        1)        % charlib
          781                 (PC)        (220        2        1)        % charlib
          782                 (DG)        (185        2        1)        % charlib
          783         //End of SpecialCharset
          784 }
          785 
          786 #
          787 # Latin1 ensures a font uses the ISOLatin1Encoding vector, although only
          788 # text fonts should be re-encoded. Downloading the Encoding vector doesn't
          789 # often make sense. No ISOLatin1Encoding array likely means ROM based fonts
          790 # on your printer are incomplete. Type 1 fonts with a full Latin1 character
          791 # set appeared sometime after Version 50.0.
          792 #
          793 
          794 Latin1() {
          795         if [ "$DOWNLOADVECTOR" = TRUE ]; then
          796                 cat <<-'//End of ISOLatin1Encoding'
          797                         /ISOLatin1Encoding [
          798                                 /.notdef
          799                                 /.notdef
          800                                 /.notdef
          801                                 /.notdef
          802                                 /.notdef
          803                                 /.notdef
          804                                 /.notdef
          805                                 /.notdef
          806                                 /.notdef
          807                                 /.notdef
          808                                 /.notdef
          809                                 /.notdef
          810                                 /.notdef
          811                                 /.notdef
          812                                 /.notdef
          813                                 /.notdef
          814                                 /.notdef
          815                                 /.notdef
          816                                 /.notdef
          817                                 /.notdef
          818                                 /.notdef
          819                                 /.notdef
          820                                 /.notdef
          821                                 /.notdef
          822                                 /.notdef
          823                                 /.notdef
          824                                 /.notdef
          825                                 /.notdef
          826                                 /.notdef
          827                                 /.notdef
          828                                 /.notdef
          829                                 /.notdef
          830                                 /space
          831                                 /exclam
          832                                 /quotedbl
          833                                 /numbersign
          834                                 /dollar
          835                                 /percent
          836                                 /ampersand
          837                                 /quoteright
          838                                 /parenleft
          839                                 /parenright
          840                                 /asterisk
          841                                 /plus
          842                                 /comma
          843                                 /minus
          844                                 /period
          845                                 /slash
          846                                 /zero
          847                                 /one
          848                                 /two
          849                                 /three
          850                                 /four
          851                                 /five
          852                                 /six
          853                                 /seven
          854                                 /eight
          855                                 /nine
          856                                 /colon
          857                                 /semicolon
          858                                 /less
          859                                 /equal
          860                                 /greater
          861                                 /question
          862                                 /at
          863                                 /A
          864                                 /B
          865                                 /C
          866                                 /D
          867                                 /E
          868                                 /F
          869                                 /G
          870                                 /H
          871                                 /I
          872                                 /J
          873                                 /K
          874                                 /L
          875                                 /M
          876                                 /N
          877                                 /O
          878                                 /P
          879                                 /Q
          880                                 /R
          881                                 /S
          882                                 /T
          883                                 /U
          884                                 /V
          885                                 /W
          886                                 /X
          887                                 /Y
          888                                 /Z
          889                                 /bracketleft
          890                                 /backslash
          891                                 /bracketright
          892                                 /asciicircum
          893                                 /underscore
          894                                 /quoteleft
          895                                 /a
          896                                 /b
          897                                 /c
          898                                 /d
          899                                 /e
          900                                 /f
          901                                 /g
          902                                 /h
          903                                 /i
          904                                 /j
          905                                 /k
          906                                 /l
          907                                 /m
          908                                 /n
          909                                 /o
          910                                 /p
          911                                 /q
          912                                 /r
          913                                 /s
          914                                 /t
          915                                 /u
          916                                 /v
          917                                 /w
          918                                 /x
          919                                 /y
          920                                 /z
          921                                 /braceleft
          922                                 /bar
          923                                 /braceright
          924                                 /asciitilde
          925                                 /.notdef
          926                                 /.notdef
          927                                 /.notdef
          928                                 /.notdef
          929                                 /.notdef
          930                                 /.notdef
          931                                 /.notdef
          932                                 /.notdef
          933                                 /.notdef
          934                                 /.notdef
          935                                 /.notdef
          936                                 /.notdef
          937                                 /.notdef
          938                                 /.notdef
          939                                 /.notdef
          940                                 /.notdef
          941                                 /.notdef
          942                                 /dotlessi
          943                                 /grave
          944                                 /acute
          945                                 /circumflex
          946                                 /tilde
          947                                 /macron
          948                                 /breve
          949                                 /dotaccent
          950                                 /dieresis
          951                                 /.notdef
          952                                 /ring
          953                                 /cedilla
          954                                 /.notdef
          955                                 /hungarumlaut
          956                                 /ogonek
          957                                 /caron
          958                                 /space
          959                                 /exclamdown
          960                                 /cent
          961                                 /sterling
          962                                 /currency
          963                                 /yen
          964                                 /brokenbar
          965                                 /section
          966                                 /dieresis
          967                                 /copyright
          968                                 /ordfeminine
          969                                 /guillemotleft
          970                                 /logicalnot
          971                                 /hyphen
          972                                 /registered
          973                                 /macron
          974                                 /degree
          975                                 /plusminus
          976                                 /twosuperior
          977                                 /threesuperior
          978                                 /acute
          979                                 /mu
          980                                 /paragraph
          981                                 /periodcentered
          982                                 /cedilla
          983                                 /onesuperior
          984                                 /ordmasculine
          985                                 /guillemotright
          986                                 /onequarter
          987                                 /onehalf
          988                                 /threequarters
          989                                 /questiondown
          990                                 /Agrave
          991                                 /Aacute
          992                                 /Acircumflex
          993                                 /Atilde
          994                                 /Adieresis
          995                                 /Aring
          996                                 /AE
          997                                 /Ccedilla
          998                                 /Egrave
          999                                 /Eacute
         1000                                 /Ecircumflex
         1001                                 /Edieresis
         1002                                 /Igrave
         1003                                 /Iacute
         1004                                 /Icircumflex
         1005                                 /Idieresis
         1006                                 /Eth
         1007                                 /Ntilde
         1008                                 /Ograve
         1009                                 /Oacute
         1010                                 /Ocircumflex
         1011                                 /Otilde
         1012                                 /Odieresis
         1013                                 /multiply
         1014                                 /Oslash
         1015                                 /Ugrave
         1016                                 /Uacute
         1017                                 /Ucircumflex
         1018                                 /Udieresis
         1019                                 /Yacute
         1020                                 /Thorn
         1021                                 /germandbls
         1022                                 /agrave
         1023                                 /aacute
         1024                                 /acircumflex
         1025                                 /atilde
         1026                                 /adieresis
         1027                                 /aring
         1028                                 /ae
         1029                                 /ccedilla
         1030                                 /egrave
         1031                                 /eacute
         1032                                 /ecircumflex
         1033                                 /edieresis
         1034                                 /igrave
         1035                                 /iacute
         1036                                 /icircumflex
         1037                                 /idieresis
         1038                                 /eth
         1039                                 /ntilde
         1040                                 /ograve
         1041                                 /oacute
         1042                                 /ocircumflex
         1043                                 /otilde
         1044                                 /odieresis
         1045                                 /divide
         1046                                 /oslash
         1047                                 /ugrave
         1048                                 /uacute
         1049                                 /ucircumflex
         1050                                 /udieresis
         1051                                 /yacute
         1052                                 /thorn
         1053                                 /ydieresis
         1054                         ] def
         1055                 //End of ISOLatin1Encoding
         1056         fi
         1057 
         1058         echo "ISOLatin1Encoding /$1 ReEncode"
         1059 }
         1060 
         1061 #
         1062 # Generating functions output PostScript programs that build font width
         1063 # tables or a typesetter description file. Send the program to a printer
         1064 # and the complete table will come back on the serial port. All write on
         1065 # stdout and assume the prologue and other required PostScript files are
         1066 # all available.
         1067 #
         1068 
         1069 Proportional() {
         1070         echo "/unitwidth $UNITWIDTH def"
         1071         echo "/resolution $RESOLUTION def"
         1072         echo "/octalescapes $OCTALESCAPES def"
         1073         echo "/charset ["
         1074                 # Get <>_ and | from S. Use accents for ascii ^ and ~.
         1075                 StandardCharset | awk '
         1076                         $1 == "(<)" && $2 == "/less" {$1 = "(---)"}
         1077                         $1 == "(>)" && $2 == "/greater" {$1 = "(---)"}
         1078                         $1 == "(_)" && $2 == "/underscore" {$1 = "(---)"}
         1079                         $1 == "(|)" && $2 == "/bar" {$1 = "(---)"}
         1080                         $1 == "(^)" && $2 == "/asciicircum" {
         1081                                 printf "(^)\t/circumflex\n"
         1082                                 $1 = "(---)"
         1083                         }
         1084                         $1 == "(~)" && $2 == "/asciitilde" {
         1085                                 printf "(~)\t/tilde\n"
         1086                                 $1 = "(---)"
         1087                         }
         1088                         {printf "%s\t%s\n", $1, $2}
         1089                 '
         1090         echo "] def"
         1091 
         1092         Latin1 $2
         1093         echo "/$2 SelectFont"
         1094         echo "(opO) SetAscender"
         1095 
         1096         echo "(name $1\\\\n) Print"
         1097         echo "(fontname $2\\\\n) Print"
         1098         echo "/$1 NamedInPrologue"
         1099         echo "(spacewidth ) Print 32 GetWidth Print (\n) Print"
         1100         echo "(charset\\\\n) Print"
         1101         echo "BuildFontCharset"
         1102 }
         1103 
         1104 FixedWidth() {
         1105         echo "/unitwidth $UNITWIDTH def"
         1106         echo "/resolution $RESOLUTION def"
         1107         echo "/octalescapes $OCTALESCAPES def"
         1108         echo "/charset ["
         1109                 StandardCharset
         1110         echo "] def"
         1111 
         1112         Latin1 $2
         1113         echo "/$2 SelectFont"
         1114         echo "(opO) SetAscender"
         1115 
         1116         echo "(name $1\\\\n) Print"
         1117         echo "(fontname $2\\\\n) Print"
         1118         echo "/$1 NamedInPrologue"
         1119         echo "(spacewidth ) Print 32 GetWidth Print (\n) Print"
         1120         echo "(charset\\\\n) Print"
         1121         echo "BuildFontCharset"
         1122 }
         1123 
         1124 Dingbats() {
         1125         echo "/unitwidth $UNITWIDTH def"
         1126         echo "/resolution $RESOLUTION def"
         1127         echo "/octalescapes $OCTALESCAPES def"
         1128         echo "/charset ["
         1129                 DingbatsCharset | awk '$1 != "(---)" && $2 ~ /^\/[a-zA-Z]/ {
         1130                         printf "%s\tISOLatin1Encoding %s GetCode\n", $1, $2
         1131                 }'
         1132         echo "] def"
         1133 
         1134         echo "/$2 SelectFont"
         1135         echo "(   ) SetAscender"
         1136 
         1137         echo "(name $1\\\\n) Print"
         1138         echo "(fontname $2\\\\n) Print"
         1139         echo "/$1 NamedInPrologue"
         1140         echo "(charset\\\\n) Print"
         1141         echo "BuildFontCharset"
         1142 }
         1143 
         1144 Greek() {
         1145         echo "/unitwidth $UNITWIDTH def"
         1146         echo "/resolution $RESOLUTION def"
         1147         echo "/charset ["
         1148                 SymbolCharset | awk '
         1149                         BEGIN {hit = -1}
         1150                         $1 ~ /\(\*[a-zA-Z]\)/ {print; hit = NR}
         1151                         $2 == "(\")" && hit == NR-1 {print; hit = NR}
         1152                 '
         1153         echo "] def"
         1154 
         1155         echo "/$2 SelectFont"
         1156         echo "(orO) SetAscender"
         1157 
         1158         echo "(name $1\\\\n) Print"
         1159         echo "(fontname $2\\\\n) Print"
         1160         echo "/$1 NamedInPrologue"
         1161         echo "(spacewidth ) Print 32 GetWidth Print (\n) Print"
         1162         echo "(charset\\\\n) Print"
         1163         echo "BuildFontCharset"
         1164 }
         1165 
         1166 Symbol() {
         1167         echo "/unitwidth $UNITWIDTH def"
         1168         echo "/resolution $RESOLUTION def"
         1169         echo "/charset ["
         1170                 SymbolCharset
         1171         echo "] def"
         1172 
         1173         echo "ChangeMetrics"
         1174         echo "/S SelectFont"
         1175         echo "(orO) SetAscender"
         1176 
         1177         echo "(name $1\\\\n) Print"
         1178         echo "(fontname $2\\\\n) Print"
         1179         echo "/$1 NamedInPrologue"
         1180         echo "(special\\\\n) Print"
         1181         echo "(charset\\\\n) Print"
         1182         echo "BuildFontCharset"
         1183 }
         1184 
         1185 Special() {
         1186         echo "/unitwidth $UNITWIDTH def"
         1187         echo "/resolution $RESOLUTION def"
         1188         echo "/charset ["
         1189                 SpecialCharset
         1190         echo "] def"
         1191 
         1192         echo "ChangeMetrics"
         1193         echo "/S1 SelectFont"
         1194 
         1195         echo "(# Times-Roman special font\\\\n) Print"
         1196         echo "(name $1\\\\n) Print"
         1197         echo "(fontname $2\\\\n) Print"
         1198         echo "/$1 NamedInPrologue"
         1199         echo "(special\\\\n) Print"
         1200         echo "(charset\\\\n) Print"
         1201         echo "BuildFontCharset"
         1202 }
         1203 
         1204 #
         1205 # The DESC file doesn't have to be built on a printer. It's only here for
         1206 # consistency.
         1207 #
         1208 
         1209 Description() {
         1210         echo "/charset ["        # awk - so the stack doesn't overflow
         1211                 StandardCharset | awk '$1 !~ /\(\\[0-9]/ {print $1}'
         1212                 SymbolCharset | awk '$1 !~ /\(\\[0-9]/ {print $1}'
         1213                 SpecialCharset | awk '$1 !~ /\(\\[0-9]/ {print $1}'
         1214         echo "] def"
         1215 
         1216         cat <<-//DESC
         1217                 (#Device Description - utf character set
         1218 
         1219                 PDL PostScript
         1220                 Encoding Latin1
         1221 
         1222                 fonts 10 R I B BI CW H HI HB S1 S
         1223                 sizes 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
         1224                 23 24 25 26 27 28 29 30 31 32 33 34 35 36 38 40 42 44 46
         1225                 48 50 52 54 56 58 60 64 68 72 78 84 90 96 100 105 110 115
         1226                 120 125 130 135 140 145 150 155 160 0
         1227                 res $RESOLUTION
         1228                 hor 1
         1229                 vert 1
         1230                 unitwidth $UNITWIDTH
         1231 
         1232                 ) Print
         1233         //DESC
         1234         echo "(charset\\\\n) Print"
         1235         echo "BuildDescCharset"
         1236         echo "(\\\\n) Print"
         1237 }
         1238