|
|
1.1 root 1: %
2: % Formatted font dump. Assumes all fonts include valid FontBBox arrays.
3: %
4:
5: /#copies 1 store
6: /aspectratio 1 def
7: /landscape false def
8: /magnification 1 def
9: /margin 10 def
10: /orientation 0 def
11: /rotation 1 def
12: /xoffset 0 def
13: /yoffset 0 def
14:
15: /axescount 0 def
16: /charwidth false def
17: /graynotdef 0.85 def
18: /hireslinewidth 0.2 def
19: /longnames false def
20: /maxsize 6.0 def
21: /minsize 4.5 def
22: /numbercell true def
23: /radix 16 def
24: /labelfont /Helvetica def
25: /labelspace 36 def
26: /zerocell 0 def
27:
28: /roundpage true def
29: /useclippath true def
30: /pagebbox [0 0 612 792] def
31:
32: /inch {72 mul} def
33: /min {2 copy gt {exch} if pop} def
34: /max {2 copy lt {exch} if pop} def
35:
36: /LLx {0 get} bind def
37: /LLy {1 get} bind def
38: /URx {2 get} bind def
39: /URy {3 get} bind def
40: /BBoxHeight {dup URy exch LLy sub} bind def
41: /BBoxWidth {dup URx exch LLx sub} bind def
42:
43: /setup {
44: /graylevels [1 0 0] def
45: /scratchstring 512 string def
46: /Product statusdict begin /product where {pop product}{(Unknown)} ifelse end def
47: /Resolution 0 72 dtransform dup mul exch dup mul add sqrt cvi def
48: /Version /version where {pop version}{(???)} ifelse def
49:
50: landscape {/orientation 90 orientation add def} if
51:
52: pagedimensions
53: xcenter ycenter translate
54: orientation rotation mul rotate
55: width 2 div neg height 2 div translate
56: xoffset inch yoffset inch neg translate
57: margin dup neg translate
58: 0 labelspace .75 mul neg translate
59: magnification dup aspectratio mul scale
60: 0 0 transform round exch round exch itransform translate
61:
62: currentdict /linewidth known not {
63: /linewidth Resolution 400 le {0}{hireslinewidth} ifelse def
64: } if
65: } def
66:
67: /pagedimensions {
68: useclippath {
69: /pagebbox [clippath pathbbox newpath] def
70: roundpage currentdict /roundpagebbox known and {roundpagebbox} if
71: } if
72: pagebbox aload pop
73: 4 -1 roll exch 4 1 roll 4 copy
74: landscape {4 2 roll} if
75: sub /width exch def
76: sub /height exch def
77: add 2 div /xcenter exch def
78: add 2 div /ycenter exch def
79: } def
80:
81: /CharSetup {
82: /chcode exch def
83: /chname Encoding chcode get def
84: /chstring ( ) dup 0 chcode put def
85: /chknown true def
86:
87: graylevels 0 1 put % initial cell fill
88: graylevels 1 0 put % cell text
89: graylevels 2 0 put % cell border
90:
91: FontDict /CharStrings known {
92: FontDict /CharStrings get chname known not {
93: /chknown false def
94: graylevels 0 0 put
95: graylevels 1 1 put
96: } if
97: } if
98:
99: chname /.notdef eq {
100: /chknown false def
101: graylevels 0 graynotdef put
102: graylevels 1 graynotdef put
103: } if
104:
105: /chwid chknown
106: {FontDict 1 scalefont setfont chstring stringwidth pop}
107: {0}
108: ifelse def
109: } bind def
110:
111: /CellSetup {
112: /gridwidth width margin 2 mul sub def
113: /gridheight height labelspace sub margin 2 mul sub def
114: /cellwidth gridwidth radix div def
115: /cellheight gridheight Entries radix div ceiling div def
116:
117: cellwidth cellheight dtransform truncate exch truncate exch idtransform
118: /cellheight exch def
119: /cellwidth exch def
120:
121: labelfont findfont 1 scalefont setfont
122: /LabelBBox currentfont /FontBBox get TransformBBox def
123:
124: LabelBBox 2 0 Encoding {
125: scratchstring cvs stringwidth pop
126: 2 copy lt {exch} if
127: pop
128: } forall put
129:
130: /CellLabelSize
131: cellheight .20 mul cellwidth .90 mul LabelBBox BestFit
132: minsize max
133: maxsize min
134: def
135: zerocell CellOrigin cellheight add neg exch neg exch translate
136: } bind def
137:
138: /FontSetup {
139: FontName findfont 1 scalefont setfont
140: /BBox currentfont /FontBBox get TransformBBox def
141: /PointSize cellheight .5 mul cellwidth .8 mul BBox BestFit def
142: BBox {PointSize mul} forall BBox astore pop
143:
144: /xorigin cellwidth BBox BBoxWidth sub 2 div BBox LLx sub def
145: /yorigin cellheight BBox BBoxHeight sub 2 div BBox LLy sub def
146: } bind def
147:
148: /BestFit {
149: /bbox exch def
150: bbox BBoxWidth div exch
151: bbox BBoxHeight div min
152: } bind def
153:
154: /TransformBBox { % font bbox to user space
155: aload pop
156: currentfont /FontMatrix get dtransform 4 2 roll
157: currentfont /FontMatrix get dtransform 4 2 roll
158: 4 array astore % should build user space bbox if all zeros
159: } bind def
160:
161: /CellOrigin {
162: dup
163: exch radix mod cellwidth mul
164: exch radix idiv 1 add neg cellheight mul
165: } bind def
166:
167: /CellOutline {
168: newpath
169: CellOrigin moveto
170: cellwidth 0 rlineto
171: 0 cellheight rlineto
172: cellwidth neg 0 rlineto
173: closepath
174: } bind def
175:
176: /LabelCell {
177: gsave
178: chcode CellOrigin translate
179: linewidth .5 mul setlinewidth
180: labelfont findfont CellLabelSize scalefont setfont
181:
182: numbercell {
183: cellwidth .025 mul cellheight .05 mul moveto
184: chcode radix scratchstring cvrs show
185: } if
186:
187: charwidth chknown and {
188: /wid chwid 0.0005 add scratchstring cvs 0 5 getinterval def
189: cellwidth wid stringwidth pop 1.10 mul sub cellheight .05 mul moveto
190: wid show
191: } if
192:
193: longnames chknown not or {
194: cellwidth .025 mul
195: cellheight LabelBBox URy CellLabelSize mul sub .05 sub moveto
196: Encoding chcode get scratchstring cvs show
197: } if
198:
199: axescount 1 ge chknown and { % gsave/grestore if not last
200: newpath
201: xorigin yorigin translate
202:
203: BBox LLx 0 moveto % baseline
204: BBox URx 0 lineto stroke
205:
206: axescount 2 ge { % vertical through current origin
207: 0 BBox LLy moveto
208: 0 BBox URy lineto stroke
209: } if
210:
211: axescount 3 ge { % vertical through next origin
212: chwid PointSize mul BBox LLy
213: dtransform round exch round exch idtransform moveto
214: 0 BBox BBoxHeight rlineto stroke
215: %chwid PointSize mul BBox URy lineto stroke
216: } if
217: } if
218: grestore
219: } bind def
220:
221: /PlaceChar {
222: FontName findfont PointSize scalefont setfont
223: chcode CellOrigin moveto
224: xorigin yorigin rmoveto
225: ( ) dup 0 chcode put show
226: } bind def
227:
228: /LabelPage {
229: labelfont findfont labelspace .75 mul .75 mul 18 min scalefont setfont
230: 0 labelspace .75 mul .25 mul moveto
231: FontName scratchstring cvs show
232:
233: labelfont findfont labelspace .25 mul .75 mul 9 min scalefont setfont
234: 0 gridheight neg moveto
235: 0 labelspace .25 mul .75 mul neg rmoveto
236: Product show ( Version ) show Version show
237: ( \() show Resolution scratchstring cvs show (dpi\)) show
238:
239: gridwidth gridheight neg moveto
240: 0 labelspace .25 mul .75 mul neg rmoveto
241: (size=, ) stringwidth pop neg 0 rmoveto
242: PointSize cvi scratchstring cvs stringwidth pop neg 0 rmoveto
243: (gray=, ) stringwidth pop neg 0 rmoveto
244: graynotdef scratchstring cvs stringwidth pop neg 0 rmoveto
245: (linewidth=) stringwidth pop neg 0 rmoveto
246: linewidth scratchstring cvs stringwidth pop neg 0 rmoveto
247: (size=) show PointSize cvi scratchstring cvs show (, ) show
248: (gray=) show graynotdef scratchstring cvs show (, ) show
249: (linewidth=) show linewidth scratchstring cvs show
250: } bind def
251:
252: %
253: % Formatted dump of the encoded characters in a single font.
254: %
255:
256: /PrintFont {
257: /saveobj save def
258: /FontName exch def
259: /FontDict FontName findfont def
260: /Encoding FontDict /Encoding get def
261: /Entries Encoding length def
262:
263: CellSetup
264: FontSetup
265: LabelPage
266: zerocell 1 Entries 1 sub {
267: CharSetup
268: graylevels 0 get setgray
269: chcode CellOutline fill
270: graylevels 1 get setgray
271: LabelCell
272: PlaceChar
273: graylevels 2 get setgray
274: linewidth setlinewidth
275: chcode CellOutline stroke
276: } for
277: showpage
278: saveobj restore
279: } bind def
280:
281: %
282: % Dump of all ROM and disk fonts - in alphabetical order.
283: %
284:
285: /AllFonts {
286: /AllFontNames FontDirectory maxlength array def
287: AllFontNames 0 0 put
288:
289: FontDirectory {pop AllFontNames Insert} forall
290:
291: /filenameforall where {
292: pop
293: (fonts/*)
294: {(fonts/) search pop pop pop AllFontNames Insert}
295: 200 string
296: filenameforall
297: } if
298:
299: 1 1 AllFontNames 0 get {
300: AllFontNames exch get cvn PrintFont
301: } for
302: } bind def
303:
304: /Insert { % name in a sorted list
305: /List exch def
306: /Name exch 128 string cvs def
307:
308: /Slot 1 def
309: List 0 get {
310: Name List Slot get le {exit} if
311: /Slot Slot 1 add def
312: } repeat
313:
314: List 0 get -1 Slot {
315: dup List exch get
316: List 3 1 roll exch 1 add exch put
317: } for
318: List Slot Name put
319: List 0 List 0 get 1 add put
320: } bind def
321:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.