Annotation of researchv10no/cmd/post.src/trofftable/trofftable.ps, revision 1.1.1.1

1.1       root        1: %
                      2: % Prologue for building troff width tables. The gsave/grestore pairs are
                      3: % for hardcopy.
                      4: %
                      5: 
                      6: /slowdown 25 def
                      7: /flagduplicates false def
                      8: 
                      9: /ascenderheight -1 def
                     10: /descenderdepth 0 def
                     11: /octalescapes 256 def
                     12: /startcomments 256 def
                     13: /currentfontdict null def
                     14: /scratchstring 512 string def
                     15: 
                     16: /Print {
                     17:        scratchstring cvs print flush
                     18:        slowdown {1 pop} repeat
                     19: } def
                     20: 
                     21: /ReEncode {    % vector fontname ReEncode -
                     22:        dup
                     23:        findfont dup length dict begin
                     24:                {1 index /FID ne {def}{pop pop} ifelse} forall
                     25:                /Encoding 3 -1 roll def
                     26:                currentdict
                     27:        end
                     28:        definefont pop
                     29: } bind def
                     30: 
                     31: /SelectFont {  % fontname SelectFont -
                     32:        findfont
                     33:                dup /PaintType get 0 eq {
                     34:                        /scaling 1 def
                     35:                        unitwidth resolution 72.0 div mul
                     36:                }{
                     37:                        /scaling resolution 72 div def
                     38:                        unitwidth
                     39:                } ifelse 
                     40:        scalefont
                     41:        /currentfontdict exch def
                     42: } def
                     43: 
                     44: /ChangeMetrics {DpostPrologue begin addmetrics end} def
                     45: 
                     46: /NamedInPrologue {
                     47:        dup
                     48:        DpostPrologue exch known {
                     49:                DpostPrologue exch get type /nametype eq {
                     50:                        (named in prologue\n) Print
                     51:                } if
                     52:        }{pop} ifelse
                     53: } def
                     54: 
                     55: /SetAscender {
                     56:        /str exch def
                     57: 
                     58:        gsave
                     59:                currentfontdict setfont
                     60:                newpath
                     61:                0 0 moveto
                     62:                str false charpath flattenpath pathbbox
                     63:                /descenderdepth 4 -1 roll .5 mul def
                     64:                exch pop exch pop
                     65: 
                     66:                newpath
                     67:                0 0 moveto
                     68:                str 0 1 getinterval false charpath flattenpath pathbbox
                     69:                4 1 roll pop pop pop
                     70:                dup 3 1 roll sub .25 mul add
                     71:                /ascenderheight exch def
                     72:        grestore
                     73: } def
                     74: 
                     75: /GetAscender {
                     76:        ascenderheight descenderdepth ge {
                     77:                gsave
                     78:                        currentfontdict setfont
                     79:                        newpath
                     80:                        0 0 moveto
                     81:                        ( ) dup 0 4 -1 roll put
                     82:                        false charpath flattenpath pathbbox
                     83:                        exch pop 3 -1 roll pop
                     84:                        ascenderheight gt {2}{0} ifelse
                     85:                        exch descenderdepth lt {1}{0} ifelse
                     86:                        or
                     87:                grestore
                     88:        }{0} ifelse
                     89: } def
                     90: 
                     91: /GetWidth {
                     92:        gsave
                     93:                currentfontdict setfont
                     94:                ( ) dup 0 4 -1 roll put
                     95:                stringwidth pop scaling mul round cvi
                     96:        grestore
                     97: } def
                     98: 
                     99: /GetCode {
                    100:        256 3 1 roll            % last unprintable match
                    101:        0 3 -1 roll {
                    102:                2 index eq {
                    103:                        dup 127 and 32 ge {exit} if
                    104:                        3 -1 roll pop
                    105:                        dup 3 1 roll
                    106:                } if
                    107:                1 add
                    108:        } forall
                    109:        exch pop
                    110:        dup 255 gt {pop}{exch pop} ifelse
                    111: } def
                    112: 
                    113: /BuildFontCharset {
                    114:        0 2 charset length 2 sub {
                    115:                /i exch def
                    116:                /chcode -1 def
                    117:                /chname null def
                    118:                /key charset i get def
                    119:                /val charset i 1 add get def
                    120: 
                    121:                val type /integertype eq {
                    122:                        /chcode val def
                    123:                        /chname currentfontdict /Encoding get chcode get def
                    124:                } if
                    125: 
                    126:                val type /nametype eq {
                    127:                        /chname val def
                    128:                        /chcode currentfontdict /Encoding get chname GetCode def
                    129:                } if
                    130: 
                    131:                val type /stringtype eq {/chcode 0 def} if
                    132: 
                    133:                chcode 0 lt chcode 255 gt or {
                    134:                        chcode 0 lt {(syntaxerror: )}{(undefinedname: )} ifelse
                    135:                        Print key Print (\t) Print val Print (\n) Print
                    136:                        quit
                    137:                } if
                    138: 
                    139:                val type /stringtype eq {
                    140:                        key Print
                    141:                        (\t) Print val Print
                    142:                        (\n) Print
                    143:                }{
                    144:                        chcode octalescapes ge key (---) eq and {
                    145:                                (\\0) Print chcode 8 (   ) cvrs Print
                    146:                        }{key Print} ifelse
                    147:                        (\t) Print chcode GetWidth Print
                    148:                        (\t) Print chcode GetAscender Print
                    149:                        (\t) Print chcode Print
                    150:                        chcode startcomments ge {
                    151:                                (\t# ) Print chname Print
                    152:                        } if
                    153:                        (\n) Print
                    154:                        chcode octalescapes ge (---) key ne and {
                    155:                                key (\\0) anchorsearch not {
                    156:                                        pop
                    157:                                        (\\0) Print chcode 8 (   ) cvrs Print
                    158:                                        (\t"\n) Print
                    159:                                }{pop pop} ifelse
                    160:                        } if
                    161:                } ifelse
                    162:        } for
                    163: } def
                    164: 
                    165: /BuildDescCharset {
                    166:        /DescDict 512 dict def
                    167:        /Characters 0 def
                    168: 
                    169:        0 1 charset length 1 sub {
                    170:                /i exch def
                    171:                /key charset i get def
                    172: 
                    173:                key length 2 eq {
                    174:                        DescDict key cvn known {
                    175:                                flagduplicates {        % for debugging
                    176:                                        (<<<duplicated character: ) Print
                    177:                                        key Print
                    178:                                        (>>>\n) Print
                    179:                                } if
                    180:                        }{
                    181:                                DescDict key cvn 1 put
                    182:                                key Print
                    183:                                /Characters Characters 1 add def
                    184:                                Characters 20 mod 0 eq {(\n)}{( )} ifelse Print
                    185:                        } ifelse
                    186:                } if
                    187:        } for
                    188: } def
                    189: 

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.