%% Prologue for building troff width tables. The gsave/grestore pairs are% for hardcopy.% /slowdown 25 def/flagduplicates false def /ascenderheight -1 def/descenderdepth 0 def/octalescapes 256 def/startcomments 256 def/currentfontdict null def/scratchstring 512 string def /Print { scratchstring cvs print flush slowdown {1 pop} repeat} def /ReEncode { % vector fontname ReEncode - dup findfont dup length dict begin {1 index /FID ne {def}{pop pop} ifelse} forall /Encoding 3 -1 roll def currentdict end definefont pop} bind def /SelectFont { % fontname SelectFont - findfont dup /PaintType get 0 eq { /scaling 1 def unitwidth resolution 72.0 div mul }{ /scaling resolution 72 div def unitwidth } ifelse scalefont /currentfontdict exch def} def /ChangeMetrics {DpostPrologue begin addmetrics end} def /NamedInPrologue { dup DpostPrologue exch known { DpostPrologue exch get type /nametype eq { (named in prologue\n) Print } if }{pop} ifelse} def /SetAscender { /str exch def gsave currentfontdict setfont newpath 0 0 moveto str false charpath flattenpath pathbbox /descenderdepth 4 -1 roll .5 mul def exch pop exch pop newpath 0 0 moveto str 0 1 getinterval false charpath flattenpath pathbbox 4 1 roll pop pop pop dup 3 1 roll sub .25 mul add /ascenderheight exch def grestore} def /GetAscender { ascenderheight descenderdepth ge { gsave currentfontdict setfont newpath 0 0 moveto ( ) dup 0 4 -1 roll put false charpath flattenpath pathbbox exch pop 3 -1 roll pop ascenderheight gt {2}{0} ifelse exch descenderdepth lt {1}{0} ifelse or grestore }{0} ifelse} def /GetWidth { gsave currentfontdict setfont ( ) dup 0 4 -1 roll put stringwidth pop scaling mul round cvi grestore} def /GetCode { 256 3 1 roll % last unprintable match 0 3 -1 roll { 2 index eq { dup 127 and 32 ge {exit} if 3 -1 roll pop dup 3 1 roll } if 1 add } forall exch pop dup 255 gt {pop}{exch pop} ifelse} def /BuildFontCharset { 0 2 charset length 2 sub { /i exch def /chcode -1 def /chname null def /key charset i get def /val charset i 1 add get def val type /integertype eq { /chcode val def /chname currentfontdict /Encoding get chcode get def } if val type /nametype eq { /chname val def /chcode currentfontdict /Encoding get chname GetCode def } if val type /stringtype eq {/chcode 0 def} if chcode 0 lt chcode 255 gt or { chcode 0 lt {(syntaxerror: )}{(undefinedname: )} ifelse Print key Print (\t) Print val Print (\n) Print quit } if val type /stringtype eq { key Print (\t) Print val Print (\n) Print }{ chcode octalescapes ge key (---) eq and { (\\0) Print chcode 8 ( ) cvrs Print }{key Print} ifelse (\t) Print chcode GetWidth Print (\t) Print chcode GetAscender Print (\t) Print chcode Print chcode startcomments ge { (\t# ) Print chname Print } if (\n) Print chcode octalescapes ge (---) key ne and { key (\\0) anchorsearch not { pop (\\0) Print chcode 8 ( ) cvrs Print (\t"\n) Print }{pop pop} ifelse } if } ifelse } for} def /BuildDescCharset { /DescDict 512 dict def /Characters 0 def 0 1 charset length 1 sub { /i exch def /key charset i get def key length 2 eq { DescDict key cvn known { flagduplicates { % for debugging (<<<duplicated character: ) Print key Print (>>>\n) Print } if }{ DescDict key cvn 1 put key Print /Characters Characters 1 add def Characters 20 mod 0 eq {(\n)}{( )} ifelse Print } ifelse } if } for} def
%
% Prologue for building troff width tables. The gsave/grestore pairs are
% for hardcopy.
%
/slowdown 25 def
/flagduplicates false def
/ascenderheight -1 def
/descenderdepth 0 def
/octalescapes 256 def
/startcomments 256 def
/currentfontdict null def
/scratchstring 512 string def
/Print {
scratchstring cvs print flush
slowdown {1 pop} repeat
} def
/ReEncode { % vector fontname ReEncode -
dup
findfont dup length dict begin
{1 index /FID ne {def}{pop pop} ifelse} forall
/Encoding 3 -1 roll def
currentdict
end
definefont pop
} bind def
/SelectFont { % fontname SelectFont -
findfont
dup /PaintType get 0 eq {
/scaling 1 def
unitwidth resolution 72.0 div mul
}{
/scaling resolution 72 div def
unitwidth
} ifelse
scalefont
/currentfontdict exch def
} def
/ChangeMetrics {DpostPrologue begin addmetrics end} def
/NamedInPrologue {
dup
DpostPrologue exch known {
DpostPrologue exch get type /nametype eq {
(named in prologue\n) Print
} if
}{pop} ifelse
} def
/SetAscender {
/str exch def
gsave
currentfontdict setfont
newpath
0 0 moveto
str false charpath flattenpath pathbbox
/descenderdepth 4 -1 roll .5 mul def
exch pop exch pop
newpath
0 0 moveto
str 0 1 getinterval false charpath flattenpath pathbbox
4 1 roll pop pop pop
dup 3 1 roll sub .25 mul add
/ascenderheight exch def
grestore
} def
/GetAscender {
ascenderheight descenderdepth ge {
gsave
currentfontdict setfont
newpath
0 0 moveto
( ) dup 0 4 -1 roll put
false charpath flattenpath pathbbox
exch pop 3 -1 roll pop
ascenderheight gt {2}{0} ifelse
exch descenderdepth lt {1}{0} ifelse
or
grestore
}{0} ifelse
} def
/GetWidth {
gsave
currentfontdict setfont
( ) dup 0 4 -1 roll put
stringwidth pop scaling mul round cvi
grestore
} def
/GetCode {
256 3 1 roll % last unprintable match
0 3 -1 roll {
2 index eq {
dup 127 and 32 ge {exit} if
3 -1 roll pop
dup 3 1 roll
} if
1 add
} forall
exch pop
dup 255 gt {pop}{exch pop} ifelse
} def
/BuildFontCharset {
0 2 charset length 2 sub {
/i exch def
/chcode -1 def
/chname null def
/key charset i get def
/val charset i 1 add get def
val type /integertype eq {
/chcode val def
/chname currentfontdict /Encoding get chcode get def
} if
val type /nametype eq {
/chname val def
/chcode currentfontdict /Encoding get chname GetCode def
} if
val type /stringtype eq {/chcode 0 def} if
chcode 0 lt chcode 255 gt or {
chcode 0 lt {(syntaxerror: )}{(undefinedname: )} ifelse
Print key Print (\t) Print val Print (\n) Print
quit
} if
val type /stringtype eq {
key Print
(\t) Print val Print
(\n) Print
}{
chcode octalescapes ge key (---) eq and {
(\\0) Print chcode 8 ( ) cvrs Print
}{key Print} ifelse
(\t) Print chcode GetWidth Print
(\t) Print chcode GetAscender Print
(\t) Print chcode Print
chcode startcomments ge {
(\t# ) Print chname Print
} if
(\n) Print
chcode octalescapes ge (---) key ne and {
key (\\0) anchorsearch not {
pop
(\\0) Print chcode 8 ( ) cvrs Print
(\t"\n) Print
}{pop pop} ifelse
} if
} ifelse
} for
} def
/BuildDescCharset {
/DescDict 512 dict def
/Characters 0 def
0 1 charset length 1 sub {
/i exch def
/key charset i get def
key length 2 eq {
DescDict key cvn known {
flagduplicates { % for debugging
(<<<duplicated character: ) Print
key Print
(>>>\n) Print
} if
}{
DescDict key cvn 1 put
key Print
/Characters Characters 1 add def
Characters 20 mod 0 eq {(\n)}{( )} ifelse Print
} ifelse
} if
} for
} def