blob: 2b4ed14e88966c7e67c65fa6bb997c893987412a (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
|
%!
% written by James Clark <jjc@jclark.uucp>
% print an afm file on the standard output
% usage is `fontname printafm' eg `/Times-Roman printafm'
% From the `dvitops' distribution, which included this notice:
% dvitops is not copyrighted; you can do with it exactly as you please.
% I would, however, ask that if you make improvements or modifications,
% you ask me before distributing them to others.
% Altered by d.love@dl.ac.uk to produce input for Rokicki's afm2tfm,
% which groks the format of the Adobe AFMs.
% $Id: printafm.ps,v 1.1.6.1 2002/04/10 09:22:58 giles Exp $
% Modified by L. Peter Deutsch 9/14/93:
% uses Ghostscript's =only procedure to replace 'buf cvs print'.
% Modified by L. Peter Deutsch 9/6/95:
% uses Ghostscript's shellarguments facility to accept the font name
% on the command line.
/onechar 1 string def
% c toupper - c
/toupper {
dup dup 8#141 ge exch 8#172 le and {
8#40 sub
} if
} bind def
% printcharmetrics -
/printcharmetrics {
(StartCharMetrics ) print
currentfont /CharStrings get dup length exch /.notdef known { 1 sub } if =
currentfont 1000 scalefont setfont 0 0 moveto
/e currentfont /Encoding get def
0 1 255 {
dup e exch get
dup /.notdef ne {
exch dup printmetric
} {
pop pop
} ifelse
} for
% s contains an entry for each name in the original encoding vector
/s 256 dict def
e {
s exch true put
} forall
% v is the new encoding vector
/v 256 array def
0 1 255 {
v exch /.notdef put
} for
% fill up v with names in CharStrings
/i 0 def
currentfont /CharStrings get {
pop
i 255 le {
v i 3 -1 roll put
/i i 1 add def
} {
pop
} ifelse
} forall
% define a new font with v as its encoding vector
currentfont maxlength dict /f exch def
currentfont {
exch dup dup /FID ne exch /Encoding ne and {
exch f 3 1 roll put
} {
pop pop
} ifelse
} forall
f /Encoding v put
f /FontName /temp put
% make this new font the current font
/temp f definefont setfont
% print a entry for each character not in old vector
/e currentfont /Encoding get def
0 1 255 {
dup e exch get
dup dup /.notdef ne exch s exch known not and {
exch -1 printmetric
} {
pop pop
} ifelse
} for
(EndCharMetrics) =
} bind def
% name actual_code normal_code printmetric -
/printmetric {
/saved save def
(C ) print =only
( ; WX ) print
onechar 0 3 -1 roll put
onechar stringwidth pop round cvi =only
( ; N ) print =only
( ; B ) print
onechar false charpath flattenpath mark pathbbox counttomark {
counttomark -1 roll
round cvi =only
( ) print
} repeat pop
(;) =
saved restore
} bind def
% fontname printafm -
/printafm {
findfont gsave setfont
(StartFontMetrics 2.0) =
(FontName ) print currentfont /FontName get =
% Print the FontInfo
currentfont /FontInfo get {
exch
=string cvs dup dup 0 get 0 exch toupper put print
( ) print =
} forall
% Print the FontBBox
(FontBBox) print
currentfont /FontBBox get {
( ) print round cvi =only
} forall
(\n) print
printcharmetrics
(EndFontMetrics) =
grestore
} bind def
% Check for command line arguments.
[ shellarguments
{ ] dup length 1 eq
{ 0 get printafm }
{ (Usage: printafm fontname\n) print flush }
ifelse
}
{ pop }
ifelse
|