1# Widths for the standard 14 fonts as described on page 416 of the PDF 1.7 standard
2STANDARD_WIDTHS = {
3 "Helvetica": { # 4 fonts, includes bold, oblique and boldoblique variants
4 " ": 278,
5 "!": 278,
6 '"': 355,
7 "#": 556,
8 "$": 556,
9 "%": 889,
10 "&": 667,
11 "'": 191,
12 "(": 333,
13 ")": 333,
14 "*": 389,
15 "+": 584,
16 ",": 278,
17 "-": 333,
18 ".": 278,
19 "/": 278,
20 "0": 556,
21 "1": 556,
22 "2": 556,
23 "3": 556,
24 "4": 556,
25 "5": 556,
26 "6": 556,
27 "7": 556,
28 "8": 556,
29 "9": 556,
30 ":": 278,
31 ";": 278,
32 "<": 584,
33 "=": 584,
34 ">": 584,
35 "?": 611,
36 "@": 975,
37 "A": 667,
38 "B": 667,
39 "C": 722,
40 "D": 722,
41 "E": 667,
42 "F": 611,
43 "G": 778,
44 "H": 722,
45 "I": 278,
46 "J": 500,
47 "K": 667,
48 "L": 556,
49 "M": 833,
50 "N": 722,
51 "O": 778,
52 "P": 667,
53 "Q": 944,
54 "R": 667,
55 "S": 667,
56 "T": 611,
57 "U": 278,
58 "V": 278,
59 "W": 584,
60 "X": 556,
61 "Y": 556,
62 "Z": 500,
63 "[": 556,
64 "\\": 556,
65 "]": 556,
66 "^": 278,
67 "_": 278,
68 "`": 278,
69 "a": 278,
70 "b": 278,
71 "c": 333,
72 "d": 556,
73 "e": 556,
74 "f": 556,
75 "g": 556,
76 "h": 556,
77 "i": 556,
78 "j": 556,
79 "k": 556,
80 "l": 556,
81 "m": 556,
82 "n": 278,
83 "o": 278,
84 "p": 556,
85 "q": 556,
86 "r": 500,
87 "s": 556,
88 "t": 556,
89 "u": 278,
90 "v": 500,
91 "w": 500,
92 "x": 222,
93 "y": 222,
94 "z": 556,
95 "{": 222,
96 "|": 833,
97 "}": 556,
98 "~": 556,
99 },
100 "Times": { # 4 fonts, includes bold, oblique and boldoblique variants
101 " ": 250,
102 "!": 333,
103 '"': 408,
104 "#": 500,
105 "$": 500,
106 "%": 833,
107 "&": 778,
108 "'": 180,
109 "(": 333,
110 ")": 333,
111 "*": 500,
112 "+": 564,
113 ",": 250,
114 "-": 333,
115 ".": 250,
116 "/": 564,
117 "0": 500,
118 "1": 500,
119 "2": 500,
120 "3": 500,
121 "4": 500,
122 "5": 500,
123 "6": 500,
124 "7": 500,
125 "8": 500,
126 "9": 500,
127 ":": 278,
128 ";": 278,
129 "<": 564,
130 "=": 564,
131 ">": 564,
132 "?": 444,
133 "@": 921,
134 "A": 722,
135 "B": 667,
136 "C": 667,
137 "D": 722,
138 "E": 611,
139 "F": 556,
140 "G": 722,
141 "H": 722,
142 "I": 333,
143 "J": 389,
144 "K": 722,
145 "L": 611,
146 "M": 889,
147 "N": 722,
148 "O": 722,
149 "P": 556,
150 "Q": 722,
151 "R": 667,
152 "S": 556,
153 "T": 611,
154 "U": 722,
155 "V": 722,
156 "W": 944,
157 "X": 722,
158 "Y": 722,
159 "Z": 611,
160 "[": 333,
161 "\\": 278,
162 "]": 333,
163 "^": 469,
164 "_": 500,
165 "`": 333,
166 "a": 444,
167 "b": 500,
168 "c": 444,
169 "d": 500,
170 "e": 444,
171 "f": 333,
172 "g": 500,
173 "h": 500,
174 "i": 278,
175 "j": 278,
176 "k": 500,
177 "l": 278,
178 "m": 722,
179 "n": 500,
180 "o": 500,
181 "p": 500,
182 "q": 500,
183 "r": 333,
184 "s": 389,
185 "t": 278,
186 "u": 500,
187 "v": 444,
188 "w": 722,
189 "x": 500,
190 "y": 444,
191 "z": 389,
192 "{": 348,
193 "|": 220,
194 "}": 348,
195 "~": 469,
196 },
197}
198
199# 4 fonts, includes bold, oblique and bold oblique variants
200STANDARD_WIDTHS[
201 "Courier"
202] = dict.fromkeys(STANDARD_WIDTHS["Times"], 600) # fixed width
203STANDARD_WIDTHS["ZapfDingbats"] = dict.fromkeys(STANDARD_WIDTHS["Times"], 1000) # 1 font
204STANDARD_WIDTHS["Symbol"] = dict.fromkeys(STANDARD_WIDTHS["Times"], 500) # 1 font
205# add aliases per table H.3 on page 1110 of the PDF 1.7 standard
206STANDARD_WIDTHS["CourierNew"] = STANDARD_WIDTHS["Courier"]
207STANDARD_WIDTHS["Arial"] = STANDARD_WIDTHS["Helvetica"]
208STANDARD_WIDTHS["TimesNewRoman"] = STANDARD_WIDTHS["Times"]