fpdf 1.53

Sign up to get free protection for your applications and to get access to all the features.
Files changed (6) hide show
  1. data/lib/bookmark.rb +99 -0
  2. data/lib/chinese.rb +445 -0
  3. data/lib/fpdf.rb +1536 -0
  4. data/lib/fpdf_eps.rb +139 -0
  5. data/lib/makefont.rb +1787 -0
  6. metadata +50 -0
@@ -0,0 +1,139 @@
1
+ # Information
2
+ #
3
+ # PDF_EPS class from Valentin Schmidt ported to ruby by Thiago Jackiw (tjackiw@gmail.com)
4
+ # working for Mingle LLC (www.mingle.com)
5
+ # Release Date: July 13th, 2006
6
+ #
7
+ # Description
8
+ #
9
+ # This script allows to embed vector-based Adobe Illustrator (AI) or AI-compatible EPS files.
10
+ # Only vector drawing is supported, not text or bitmap. Although the script was successfully
11
+ # tested with various AI format versions, best results are probably achieved with files that
12
+ # were exported in the AI3 format (tested with Illustrator CS2, Freehand MX and Photoshop CS2).
13
+ #
14
+ # ImageEps(string file, float x, float y [, float w [, float h [, string link [, boolean useBoundingBox]]]])
15
+ #
16
+ # Same parameters as for regular FPDF::Image() method, with an additional one:
17
+ #
18
+ # useBoundingBox: specifies whether to position the bounding box (true) or the complete canvas (false)
19
+ # at location (x,y). Default value is true.
20
+ #
21
+ # First added to the Ruby FPDF distribution in 1.53c
22
+ #
23
+ # Usage is as follows:
24
+ #
25
+ # require 'fpdf'
26
+ # require 'fpdf_eps'
27
+ # pdf = FPDF.new
28
+ # pdf.extend(PDF_EPS)
29
+ # pdf.ImageEps(...)
30
+ #
31
+ # This allows it to be combined with other extensions, such as the bookmark
32
+ # module.
33
+
34
+ module PDF_EPS
35
+ def ImageEps(file, x, y, w=0, h=0, link='', use_bounding_box=true)
36
+ data = nil
37
+ if File.exists?(file)
38
+ File.open(file, 'rb') do |f|
39
+ data = f.read()
40
+ end
41
+ else
42
+ Error('EPS file not found: '+file)
43
+ end
44
+
45
+ # Find BoundingBox param
46
+ regs = data.scan(/%%BoundingBox: [^\r\n]*/m)
47
+ regs << regs[0].gsub(/%%BoundingBox: /, '')
48
+ if regs.size > 1
49
+ tmp = regs[1].to_s.split(' ')
50
+ @x1 = tmp[0].to_i
51
+ @y1 = tmp[1].to_i
52
+ @x2 = tmp[2].to_i
53
+ @y2 = tmp[3].to_i
54
+ else
55
+ Error('No BoundingBox found in EPS file: '+file)
56
+ end
57
+ f_start = data.index('%%EndSetup')
58
+ f_start = data.index('%%EndProlog') if f_start === false
59
+ f_start = data.index('%%BoundingBox') if f_start === false
60
+
61
+ data = data.slice(f_start, data.length)
62
+
63
+ f_end = data.index('%%PageTrailer')
64
+ f_end = data.index('showpage') if f_end === false
65
+ data = data.slice(0, f_end) if f_end
66
+
67
+ # save the current graphic state
68
+ out('q')
69
+
70
+ k = @k
71
+
72
+ # Translate
73
+ if use_bounding_box
74
+ dx = x*k-@x1
75
+ dy = @hPt-@y2-y*k
76
+ else
77
+ dx = x*k
78
+ dy = -y*k
79
+ end
80
+ tm = [1,0,0,1,dx,dy]
81
+ out(sprintf('%.3f %.3f %.3f %.3f %.3f %.3f cm',
82
+ tm[0], tm[1], tm[2], tm[3], tm[4], tm[5]))
83
+
84
+ if w > 0
85
+ scale_x = w/((@x2-@x1)/k)
86
+ if h > 0
87
+ scale_y = h/((@y2-@y1)/k)
88
+ else
89
+ scale_y = scale_x
90
+ h = (@y2-@y1)/k * scale_y
91
+ end
92
+ else
93
+ if h > 0
94
+ scale_y = $h/((@y2-@y1)/$k)
95
+ scale_x = scale_y
96
+ w = (@x2-@x1)/k * scale_x
97
+ else
98
+ w = (@x2-@x1)/k
99
+ h = (@y2-@y1)/k
100
+ end
101
+ end
102
+
103
+ if !scale_x.nil?
104
+ # Scale
105
+ tm = [scale_x,0,0,scale_y,0,@hPt*(1-scale_y)]
106
+ out(sprintf('%.3f %.3f %.3f %.3f %.3f %.3f cm',
107
+ tm[0], tm[1], tm[2], tm[3], tm[4], tm[5]))
108
+ end
109
+
110
+ data.split(/\r\n|[\r\n]/).each do |line|
111
+ next if line == '' || line[0,1] == '%'
112
+ len = line.length
113
+ # next if (len > 2 && line[len-2,len] != ' ')
114
+ cmd = line[len-2,len].strip
115
+ case cmd
116
+ when 'm', 'l', 'v', 'y', 'c', 'k', 'K', 'g', 'G', 's', 'S', 'J', 'j', 'w', 'M', 'd':
117
+ out(line)
118
+
119
+ when 'L':
120
+ line[len-1,len]='l'
121
+ out(line)
122
+
123
+ when 'C':
124
+ line[len-1,len]='c'
125
+ out(line)
126
+
127
+ when 'f', 'F':
128
+ out('f*')
129
+
130
+ when 'b', 'B':
131
+ out(cmd + '*')
132
+ end
133
+ end
134
+
135
+ # restore previous graphic state
136
+ out('Q')
137
+ Link(x,y,w,h,link) if link
138
+ end
139
+ end
@@ -0,0 +1,1787 @@
1
+ #!/usr/bin/env ruby
2
+ #
3
+ # Utility to generate font definition files
4
+ # Version: 1.1
5
+ # Date: 2006-07-19
6
+ #
7
+ # Changelog:
8
+ # Version 1.1 - Brian Ollenberger
9
+ # - Fixed a very small bug in MakeFont for generating FontDef.diff.
10
+
11
+ Charencodings = {
12
+ # Central Europe
13
+ 'cp1250' => [
14
+ '.notdef', '.notdef', '.notdef', '.notdef',
15
+ '.notdef', '.notdef', '.notdef', '.notdef',
16
+ '.notdef', '.notdef', '.notdef', '.notdef',
17
+ '.notdef', '.notdef', '.notdef', '.notdef',
18
+ '.notdef', '.notdef', '.notdef', '.notdef',
19
+ '.notdef', '.notdef', '.notdef', '.notdef',
20
+ '.notdef', '.notdef', '.notdef', '.notdef',
21
+ '.notdef', '.notdef', '.notdef', '.notdef',
22
+ 'space', 'exclam', 'quotedbl', 'numbersign',
23
+ 'dollar', 'percent', 'ampersand', 'quotesingle',
24
+ 'parenleft', 'parenright', 'asterisk', 'plus',
25
+ 'comma', 'hyphen', 'period', 'slash',
26
+ 'zero', 'one', 'two', 'three',
27
+ 'four', 'five', 'six', 'seven',
28
+ 'eight', 'nine', 'colon', 'semicolon',
29
+ 'less', 'equal', 'greater', 'question',
30
+ 'at', 'A', 'B', 'C',
31
+ 'D', 'E', 'F', 'G',
32
+ 'H', 'I', 'J', 'K',
33
+ 'L', 'M', 'N', 'O',
34
+ 'P', 'Q', 'R', 'S',
35
+ 'T', 'U', 'V', 'W',
36
+ 'X', 'Y', 'Z', 'bracketleft',
37
+ 'backslash', 'bracketright', 'asciicircum', 'underscore',
38
+ 'grave', 'a', 'b', 'c',
39
+ 'd', 'e', 'f', 'g',
40
+ 'h', 'i', 'j', 'k',
41
+ 'l', 'm', 'n', 'o',
42
+ 'p', 'q', 'r', 's',
43
+ 't', 'u', 'v', 'w',
44
+ 'x', 'y', 'z', 'braceleft',
45
+ 'bar', 'braceright', 'asciitilde', '.notdef',
46
+ 'Euro', '.notdef', 'quotesinglbase', '.notdef',
47
+ 'quotedblbase', 'ellipsis', 'dagger', 'daggerdbl',
48
+ '.notdef', 'perthousand', 'Scaron', 'guilsinglleft',
49
+ 'Sacute', 'Tcaron', 'Zcaron', 'Zacute',
50
+ '.notdef', 'quoteleft', 'quoteright', 'quotedblleft',
51
+ 'quotedblright', 'bullet', 'endash', 'emdash',
52
+ '.notdef', 'trademark', 'scaron', 'guilsinglright',
53
+ 'sacute', 'tcaron', 'zcaron', 'zacute',
54
+ 'space', 'caron', 'breve', 'Lslash',
55
+ 'currency', 'Aogonek', 'brokenbar', 'section',
56
+ 'dieresis', 'copyright', 'Scedilla', 'guillemotleft',
57
+ 'logicalnot', 'hyphen', 'registered', 'Zdotaccent',
58
+ 'degree', 'plusminus', 'ogonek', 'lslash',
59
+ 'acute', 'mu', 'paragraph', 'periodcentered',
60
+ 'cedilla', 'aogonek', 'scedilla', 'guillemotright',
61
+ 'Lcaron', 'hungarumlaut', 'lcaron', 'zdotaccent',
62
+ 'Racute', 'Aacute', 'Acircumflex', 'Abreve',
63
+ 'Adieresis', 'Lacute', 'Cacute', 'Ccedilla',
64
+ 'Ccaron', 'Eacute', 'Eogonek', 'Edieresis',
65
+ 'Ecaron', 'Iacute', 'Icircumflex', 'Dcaron',
66
+ 'Dcroat', 'Nacute', 'Ncaron', 'Oacute',
67
+ 'Ocircumflex', 'Ohungarumlaut', 'Odieresis', 'multiply',
68
+ 'Rcaron', 'Uring', 'Uacute', 'Uhungarumlaut',
69
+ 'Udieresis', 'Yacute', 'Tcommaaccent', 'germandbls',
70
+ 'racute', 'aacute', 'acircumflex', 'abreve',
71
+ 'adieresis', 'lacute', 'cacute', 'ccedilla',
72
+ 'ccaron', 'eacute', 'eogonek', 'edieresis',
73
+ 'ecaron', 'iacute', 'icircumflex', 'dcaron',
74
+ 'dcroat', 'nacute', 'ncaron', 'oacute',
75
+ 'ocircumflex', 'ohungarumlaut', 'odieresis', 'divide',
76
+ 'rcaron', 'uring', 'uacute', 'uhungarumlaut',
77
+ 'udieresis', 'yacute', 'tcommaaccent', 'dotaccent'
78
+ ],
79
+ # Cyrillic
80
+ 'cp1251' => [
81
+ '.notdef', '.notdef', '.notdef', '.notdef',
82
+ '.notdef', '.notdef', '.notdef', '.notdef',
83
+ '.notdef', '.notdef', '.notdef', '.notdef',
84
+ '.notdef', '.notdef', '.notdef', '.notdef',
85
+ '.notdef', '.notdef', '.notdef', '.notdef',
86
+ '.notdef', '.notdef', '.notdef', '.notdef',
87
+ '.notdef', '.notdef', '.notdef', '.notdef',
88
+ '.notdef', '.notdef', '.notdef', '.notdef',
89
+ 'space', 'exclam', 'quotedbl', 'numbersign',
90
+ 'dollar', 'percent', 'ampersand', 'quotesingle',
91
+ 'parenleft', 'parenright', 'asterisk', 'plus',
92
+ 'comma', 'hyphen', 'period', 'slash',
93
+ 'zero', 'one', 'two', 'three',
94
+ 'four', 'five', 'six', 'seven',
95
+ 'eight', 'nine', 'colon', 'semicolon',
96
+ 'less', 'equal', 'greater', 'question',
97
+ 'at', 'A', 'B', 'C',
98
+ 'D', 'E', 'F', 'G',
99
+ 'H', 'I', 'J', 'K',
100
+ 'L', 'M', 'N', 'O',
101
+ 'P', 'Q', 'R', 'S',
102
+ 'T', 'U', 'V', 'W',
103
+ 'X', 'Y', 'Z', 'bracketleft',
104
+ 'backslash', 'bracketright', 'asciicircum', 'underscore',
105
+ 'grave', 'a', 'b', 'c',
106
+ 'd', 'e', 'f', 'g',
107
+ 'h', 'i', 'j', 'k',
108
+ 'l', 'm', 'n', 'o',
109
+ 'p', 'q', 'r', 's',
110
+ 't', 'u', 'v', 'w',
111
+ 'x', 'y', 'z', 'braceleft',
112
+ 'bar', 'braceright', 'asciitilde', '.notdef',
113
+ 'afii10051', 'afii10052', 'quotesinglbase', 'afii10100',
114
+ 'quotedblbase', 'ellipsis', 'dagger', 'daggerdbl',
115
+ 'Euro', 'perthousand', 'afii10058', 'guilsinglleft',
116
+ 'afii10059', 'afii10061', 'afii10060', 'afii10145',
117
+ 'afii10099', 'quoteleft', 'quoteright', 'quotedblleft',
118
+ 'quotedblright', 'bullet', 'endash', 'emdash',
119
+ '.notdef', 'trademark', 'afii10106', 'guilsinglright',
120
+ 'afii10107', 'afii10109', 'afii10108', 'afii10193',
121
+ 'space', 'afii10062', 'afii10110', 'afii10057',
122
+ 'currency', 'afii10050', 'brokenbar', 'section',
123
+ 'afii10023', 'copyright', 'afii10053', 'guillemotleft',
124
+ 'logicalnot', 'hyphen', 'registered', 'afii10056',
125
+ 'degree', 'plusminus', 'afii10055', 'afii10103',
126
+ 'afii10098', 'mu', 'paragraph', 'periodcentered',
127
+ 'afii10071', 'afii61352', 'afii10101', 'guillemotright',
128
+ 'afii10105', 'afii10054', 'afii10102', 'afii10104',
129
+ 'afii10017', 'afii10018', 'afii10019', 'afii10020',
130
+ 'afii10021', 'afii10022', 'afii10024', 'afii10025',
131
+ 'afii10026', 'afii10027', 'afii10028', 'afii10029',
132
+ 'afii10030', 'afii10031', 'afii10032', 'afii10033',
133
+ 'afii10034', 'afii10035', 'afii10036', 'afii10037',
134
+ 'afii10038', 'afii10039', 'afii10040', 'afii10041',
135
+ 'afii10042', 'afii10043', 'afii10044', 'afii10045',
136
+ 'afii10046', 'afii10047', 'afii10048', 'afii10049',
137
+ 'afii10065', 'afii10066', 'afii10067', 'afii10068',
138
+ 'afii10069', 'afii10070', 'afii10072', 'afii10073',
139
+ 'afii10074', 'afii10075', 'afii10076', 'afii10077',
140
+ 'afii10078', 'afii10079', 'afii10080', 'afii10081',
141
+ 'afii10082', 'afii10083', 'afii10084', 'afii10085',
142
+ 'afii10086', 'afii10087', 'afii10088', 'afii10089',
143
+ 'afii10090', 'afii10091', 'afii10092', 'afii10093',
144
+ 'afii10094', 'afii10095', 'afii10096', 'afii10097'
145
+ ],
146
+ # Western Europe
147
+ 'cp1252' => [
148
+ '.notdef', '.notdef', '.notdef', '.notdef',
149
+ '.notdef', '.notdef', '.notdef', '.notdef',
150
+ '.notdef', '.notdef', '.notdef', '.notdef',
151
+ '.notdef', '.notdef', '.notdef', '.notdef',
152
+ '.notdef', '.notdef', '.notdef', '.notdef',
153
+ '.notdef', '.notdef', '.notdef', '.notdef',
154
+ '.notdef', '.notdef', '.notdef', '.notdef',
155
+ '.notdef', '.notdef', '.notdef', '.notdef',
156
+ 'space', 'exclam', 'quotedbl', 'numbersign',
157
+ 'dollar', 'percent', 'ampersand', 'quotesingle',
158
+ 'parenleft', 'parenright', 'asterisk', 'plus',
159
+ 'comma', 'hyphen', 'period', 'slash',
160
+ 'zero', 'one', 'two', 'three',
161
+ 'four', 'five', 'six', 'seven',
162
+ 'eight', 'nine', 'colon', 'semicolon',
163
+ 'less', 'equal', 'greater', 'question',
164
+ 'at', 'A', 'B', 'C',
165
+ 'D', 'E', 'F', 'G',
166
+ 'H', 'I', 'J', 'K',
167
+ 'L', 'M', 'N', 'O',
168
+ 'P', 'Q', 'R', 'S',
169
+ 'T', 'U', 'V', 'W',
170
+ 'X', 'Y', 'Z', 'bracketleft',
171
+ 'backslash', 'bracketright', 'asciicircum', 'underscore',
172
+ 'grave', 'a', 'b', 'c',
173
+ 'd', 'e', 'f', 'g',
174
+ 'h', 'i', 'j', 'k',
175
+ 'l', 'm', 'n', 'o',
176
+ 'p', 'q', 'r', 's',
177
+ 't', 'u', 'v', 'w',
178
+ 'x', 'y', 'z', 'braceleft',
179
+ 'bar', 'braceright', 'asciitilde', '.notdef',
180
+ 'Euro', '.notdef', 'quotesinglbase', 'florin',
181
+ 'quotedblbase', 'ellipsis', 'dagger', 'daggerdbl',
182
+ 'circumflex', 'perthousand', 'Scaron', 'guilsinglleft',
183
+ 'OE', '.notdef', 'Zcaron', '.notdef',
184
+ '.notdef', 'quoteleft', 'quoteright', 'quotedblleft',
185
+ 'quotedblright', 'bullet', 'endash', 'emdash',
186
+ 'tilde', 'trademark', 'scaron', 'guilsinglright',
187
+ 'oe', '.notdef', 'zcaron', 'Ydieresis',
188
+ 'space', 'exclamdown', 'cent', 'sterling',
189
+ 'currency', 'yen', 'brokenbar', 'section',
190
+ 'dieresis', 'copyright', 'ordfeminine', 'guillemotleft',
191
+ 'logicalnot', 'hyphen', 'registered', 'macron',
192
+ 'degree', 'plusminus', 'twosuperior', 'threesuperior',
193
+ 'acute', 'mu', 'paragraph', 'periodcentered',
194
+ 'cedilla', 'onesuperior', 'ordmasculine', 'guillemotright',
195
+ 'onequarter', 'onehalf', 'threequarters', 'questiondown',
196
+ 'Agrave', 'Aacute', 'Acircumflex', 'Atilde',
197
+ 'Adieresis', 'Aring', 'AE', 'Ccedilla',
198
+ 'Egrave', 'Eacute', 'Ecircumflex', 'Edieresis',
199
+ 'Igrave', 'Iacute', 'Icircumflex', 'Idieresis',
200
+ 'Eth', 'Ntilde', 'Ograve', 'Oacute',
201
+ 'Ocircumflex', 'Otilde', 'Odieresis', 'multiply',
202
+ 'Oslash', 'Ugrave', 'Uacute', 'Ucircumflex',
203
+ 'Udieresis', 'Yacute', 'Thorn', 'germandbls',
204
+ 'agrave', 'aacute', 'acircumflex', 'atilde',
205
+ 'adieresis', 'aring', 'ae', 'ccedilla',
206
+ 'egrave', 'eacute', 'ecircumflex', 'edieresis',
207
+ 'igrave', 'iacute', 'icircumflex', 'idieresis',
208
+ 'eth', 'ntilde', 'ograve', 'oacute',
209
+ 'ocircumflex', 'otilde', 'odieresis', 'divide',
210
+ 'oslash', 'ugrave', 'uacute', 'ucircumflex',
211
+ 'udieresis', 'yacute', 'thorn', 'ydieresis'
212
+ ],
213
+ # Greek
214
+ 'cp1253' => [
215
+ '.notdef', '.notdef', '.notdef', '.notdef',
216
+ '.notdef', '.notdef', '.notdef', '.notdef',
217
+ '.notdef', '.notdef', '.notdef', '.notdef',
218
+ '.notdef', '.notdef', '.notdef', '.notdef',
219
+ '.notdef', '.notdef', '.notdef', '.notdef',
220
+ '.notdef', '.notdef', '.notdef', '.notdef',
221
+ '.notdef', '.notdef', '.notdef', '.notdef',
222
+ '.notdef', '.notdef', '.notdef', '.notdef',
223
+ 'space', 'exclam', 'quotedbl', 'numbersign',
224
+ 'dollar', 'percent', 'ampersand', 'quotesingle',
225
+ 'parenleft', 'parenright', 'asterisk', 'plus',
226
+ 'comma', 'hyphen', 'period', 'slash',
227
+ 'zero', 'one', 'two', 'three',
228
+ 'four', 'five', 'six', 'seven',
229
+ 'eight', 'nine', 'colon', 'semicolon',
230
+ 'less', 'equal', 'greater', 'question',
231
+ 'at', 'A', 'B', 'C',
232
+ 'D', 'E', 'F', 'G',
233
+ 'H', 'I', 'J', 'K',
234
+ 'L', 'M', 'N', 'O',
235
+ 'P', 'Q', 'R', 'S',
236
+ 'T', 'U', 'V', 'W',
237
+ 'X', 'Y', 'Z', 'bracketleft',
238
+ 'backslash', 'bracketright', 'asciicircum', 'underscore',
239
+ 'grave', 'a', 'b', 'c',
240
+ 'd', 'e', 'f', 'g',
241
+ 'h', 'i', 'j', 'k',
242
+ 'l', 'm', 'n', 'o',
243
+ 'p', 'q', 'r', 's',
244
+ 't', 'u', 'v', 'w',
245
+ 'x', 'y', 'z', 'braceleft',
246
+ 'bar', 'braceright', 'asciitilde', '.notdef',
247
+ 'Euro', '.notdef', 'quotesinglbase', 'florin',
248
+ 'quotedblbase', 'ellipsis', 'dagger', 'daggerdbl',
249
+ '.notdef', 'perthousand', '.notdef', 'guilsinglleft',
250
+ '.notdef', '.notdef', '.notdef', '.notdef',
251
+ '.notdef', 'quoteleft', 'quoteright', 'quotedblleft',
252
+ 'quotedblright', 'bullet', 'endash', 'emdash',
253
+ '.notdef', 'trademark', '.notdef', 'guilsinglright',
254
+ '.notdef', '.notdef', '.notdef', '.notdef',
255
+ 'space', 'dieresistonos', 'Alphatonos', 'sterling',
256
+ 'currency', 'yen', 'brokenbar', 'section',
257
+ 'dieresis', 'copyright', '.notdef', 'guillemotleft',
258
+ 'logicalnot', 'hyphen', 'registered', 'afii00208',
259
+ 'degree', 'plusminus', 'twosuperior', 'threesuperior',
260
+ 'tonos', 'mu', 'paragraph', 'periodcentered',
261
+ 'Epsilontonos', 'Etatonos', 'Iotatonos', 'guillemotright',
262
+ 'Omicrontonos', 'onehalf', 'Upsilontonos', 'Omegatonos',
263
+ 'iotadieresistonos','Alpha', 'Beta', 'Gamma',
264
+ 'Delta', 'Epsilon', 'Zeta', 'Eta',
265
+ 'Theta', 'Iota', 'Kappa', 'Lambda',
266
+ 'Mu', 'Nu', 'Xi', 'Omicron',
267
+ 'Pi', 'Rho', '.notdef', 'Sigma',
268
+ 'Tau', 'Upsilon', 'Phi', 'Chi',
269
+ 'Psi', 'Omega', 'Iotadieresis', 'Upsilondieresis',
270
+ 'alphatonos', 'epsilontonos', 'etatonos', 'iotatonos',
271
+ 'upsilondieresistonos','alpha', 'beta', 'gamma',
272
+ 'delta', 'epsilon', 'zeta', 'eta',
273
+ 'theta', 'iota', 'kappa', 'lambda',
274
+ 'mu', 'nu', 'xi', 'omicron',
275
+ 'pi', 'rho', 'sigma1', 'sigma',
276
+ 'tau', 'upsilon', 'phi', 'chi',
277
+ 'psi', 'omega', 'iotadieresis', 'upsilondieresis',
278
+ 'omicrontonos', 'upsilontonos', 'omegatonos', '.notdef'
279
+ ],
280
+ # Turkish
281
+ 'cp1254' => [
282
+ '.notdef', '.notdef', '.notdef', '.notdef',
283
+ '.notdef', '.notdef', '.notdef', '.notdef',
284
+ '.notdef', '.notdef', '.notdef', '.notdef',
285
+ '.notdef', '.notdef', '.notdef', '.notdef',
286
+ '.notdef', '.notdef', '.notdef', '.notdef',
287
+ '.notdef', '.notdef', '.notdef', '.notdef',
288
+ '.notdef', '.notdef', '.notdef', '.notdef',
289
+ '.notdef', '.notdef', '.notdef', '.notdef',
290
+ 'space', 'exclam', 'quotedbl', 'numbersign',
291
+ 'dollar', 'percent', 'ampersand', 'quotesingle',
292
+ 'parenleft', 'parenright', 'asterisk', 'plus',
293
+ 'comma', 'hyphen', 'period', 'slash',
294
+ 'zero', 'one', 'two', 'three',
295
+ 'four', 'five', 'six', 'seven',
296
+ 'eight', 'nine', 'colon', 'semicolon',
297
+ 'less', 'equal', 'greater', 'question',
298
+ 'at', 'A', 'B', 'C',
299
+ 'D', 'E', 'F', 'G',
300
+ 'H', 'I', 'J', 'K',
301
+ 'L', 'M', 'N', 'O',
302
+ 'P', 'Q', 'R', 'S',
303
+ 'T', 'U', 'V', 'W',
304
+ 'X', 'Y', 'Z', 'bracketleft',
305
+ 'backslash', 'bracketright', 'asciicircum', 'underscore',
306
+ 'grave', 'a', 'b', 'c',
307
+ 'd', 'e', 'f', 'g',
308
+ 'h', 'i', 'j', 'k',
309
+ 'l', 'm', 'n', 'o',
310
+ 'p', 'q', 'r', 's',
311
+ 't', 'u', 'v', 'w',
312
+ 'x', 'y', 'z', 'braceleft',
313
+ 'bar', 'braceright', 'asciitilde', '.notdef',
314
+ 'Euro', '.notdef', 'quotesinglbase', 'florin',
315
+ 'quotedblbase', 'ellipsis', 'dagger', 'daggerdbl',
316
+ 'circumflex', 'perthousand', 'Scaron', 'guilsinglleft',
317
+ 'OE', '.notdef', '.notdef', '.notdef',
318
+ '.notdef', 'quoteleft', 'quoteright', 'quotedblleft',
319
+ 'quotedblright', 'bullet', 'endash', 'emdash',
320
+ 'tilde', 'trademark', 'scaron', 'guilsinglright',
321
+ 'oe', '.notdef', '.notdef', 'Ydieresis',
322
+ 'space', 'exclamdown', 'cent', 'sterling',
323
+ 'currency', 'yen', 'brokenbar', 'section',
324
+ 'dieresis', 'copyright', 'ordfeminine', 'guillemotleft',
325
+ 'logicalnot', 'hyphen', 'registered', 'macron',
326
+ 'degree', 'plusminus', 'twosuperior', 'threesuperior',
327
+ 'acute', 'mu', 'paragraph', 'periodcentered',
328
+ 'cedilla', 'onesuperior', 'ordmasculine', 'guillemotright',
329
+ 'onequarter', 'onehalf', 'threequarters', 'questiondown',
330
+ 'Agrave', 'Aacute', 'Acircumflex', 'Atilde',
331
+ 'Adieresis', 'Aring', 'AE', 'Ccedilla',
332
+ 'Egrave', 'Eacute', 'Ecircumflex', 'Edieresis',
333
+ 'Igrave', 'Iacute', 'Icircumflex', 'Idieresis',
334
+ 'Gbreve', 'Ntilde', 'Ograve', 'Oacute',
335
+ 'Ocircumflex', 'Otilde', 'Odieresis', 'multiply',
336
+ 'Oslash', 'Ugrave', 'Uacute', 'Ucircumflex',
337
+ 'Udieresis', 'Idotaccent', 'Scedilla', 'germandbls',
338
+ 'agrave', 'aacute', 'acircumflex', 'atilde',
339
+ 'adieresis', 'aring', 'ae', 'ccedilla',
340
+ 'egrave', 'eacute', 'ecircumflex', 'edieresis',
341
+ 'igrave', 'iacute', 'icircumflex', 'idieresis',
342
+ 'gbreve', 'ntilde', 'ograve', 'oacute',
343
+ 'ocircumflex', 'otilde', 'odieresis', 'divide',
344
+ 'oslash', 'ugrave', 'uacute', 'ucircumflex',
345
+ 'udieresis', 'dotlessi', 'scedilla', 'ydieresis'
346
+ ],
347
+ # Hebrew
348
+ 'cp1255' => [
349
+ '.notdef', '.notdef', '.notdef', '.notdef',
350
+ '.notdef', '.notdef', '.notdef', '.notdef',
351
+ '.notdef', '.notdef', '.notdef', '.notdef',
352
+ '.notdef', '.notdef', '.notdef', '.notdef',
353
+ '.notdef', '.notdef', '.notdef', '.notdef',
354
+ '.notdef', '.notdef', '.notdef', '.notdef',
355
+ '.notdef', '.notdef', '.notdef', '.notdef',
356
+ '.notdef', '.notdef', '.notdef', '.notdef',
357
+ 'space', 'exclam', 'quotedbl', 'numbersign',
358
+ 'dollar', 'percent', 'ampersand', 'quotesingle',
359
+ 'parenleft', 'parenright', 'asterisk', 'plus',
360
+ 'comma', 'hyphen', 'period', 'slash',
361
+ 'zero', 'one', 'two', 'three',
362
+ 'four', 'five', 'six', 'seven',
363
+ 'eight', 'nine', 'colon', 'semicolon',
364
+ 'less', 'equal', 'greater', 'question',
365
+ 'at', 'A', 'B', 'C',
366
+ 'D', 'E', 'F', 'G',
367
+ 'H', 'I', 'J', 'K',
368
+ 'L', 'M', 'N', 'O',
369
+ 'P', 'Q', 'R', 'S',
370
+ 'T', 'U', 'V', 'W',
371
+ 'X', 'Y', 'Z', 'bracketleft',
372
+ 'backslash', 'bracketright', 'asciicircum', 'underscore',
373
+ 'grave', 'a', 'b', 'c',
374
+ 'd', 'e', 'f', 'g',
375
+ 'h', 'i', 'j', 'k',
376
+ 'l', 'm', 'n', 'o',
377
+ 'p', 'q', 'r', 's',
378
+ 't', 'u', 'v', 'w',
379
+ 'x', 'y', 'z', 'braceleft',
380
+ 'bar', 'braceright', 'asciitilde', '.notdef',
381
+ 'Euro', '.notdef', 'quotesinglbase', 'florin',
382
+ 'quotedblbase', 'ellipsis', 'dagger', 'daggerdbl',
383
+ 'circumflex', 'perthousand', '.notdef', 'guilsinglleft',
384
+ '.notdef', '.notdef', '.notdef', '.notdef',
385
+ '.notdef', 'quoteleft', 'quoteright', 'quotedblleft',
386
+ 'quotedblright', 'bullet', 'endash', 'emdash',
387
+ 'tilde', 'trademark', '.notdef', 'guilsinglright',
388
+ '.notdef', '.notdef', '.notdef', '.notdef',
389
+ 'space', 'exclamdown', 'cent', 'sterling',
390
+ 'afii57636', 'yen', 'brokenbar', 'section',
391
+ 'dieresis', 'copyright', 'multiply', 'guillemotleft',
392
+ 'logicalnot', 'sfthyphen', 'registered', 'macron',
393
+ 'degree', 'plusminus', 'twosuperior', 'threesuperior',
394
+ 'acute', 'mu', 'paragraph', 'middot',
395
+ 'cedilla', 'onesuperior', 'divide', 'guillemotright',
396
+ 'onequarter', 'onehalf', 'threequarters', 'questiondown',
397
+ 'afii57799', 'afii57801', 'afii57800', 'afii57802',
398
+ 'afii57793', 'afii57794', 'afii57795', 'afii57798',
399
+ 'afii57797', 'afii57806', '.notdef', 'afii57796',
400
+ 'afii57807', 'afii57839', 'afii57645', 'afii57841',
401
+ 'afii57842', 'afii57804', 'afii57803', 'afii57658',
402
+ 'afii57716', 'afii57717', 'afii57718', 'gereshhebrew',
403
+ 'gershayimhebrew','.notdef', '.notdef', '.notdef',
404
+ '.notdef', '.notdef', '.notdef', '.notdef',
405
+ 'afii57664', 'afii57665', 'afii57666', 'afii57667',
406
+ 'afii57668', 'afii57669', 'afii57670', 'afii57671',
407
+ 'afii57672', 'afii57673', 'afii57674', 'afii57675',
408
+ 'afii57676', 'afii57677', 'afii57678', 'afii57679',
409
+ 'afii57680', 'afii57681', 'afii57682', 'afii57683',
410
+ 'afii57684', 'afii57685', 'afii57686', 'afii57687',
411
+ 'afii57688', 'afii57689', 'afii57690', '.notdef',
412
+ '.notdef', 'afii299', 'afii300', '.notdef'
413
+ ],
414
+ # Baltic
415
+ 'cp1257' => [
416
+ '.notdef', '.notdef', '.notdef', '.notdef',
417
+ '.notdef', '.notdef', '.notdef', '.notdef',
418
+ '.notdef', '.notdef', '.notdef', '.notdef',
419
+ '.notdef', '.notdef', '.notdef', '.notdef',
420
+ '.notdef', '.notdef', '.notdef', '.notdef',
421
+ '.notdef', '.notdef', '.notdef', '.notdef',
422
+ '.notdef', '.notdef', '.notdef', '.notdef',
423
+ '.notdef', '.notdef', '.notdef', '.notdef',
424
+ 'space', 'exclam', 'quotedbl', 'numbersign',
425
+ 'dollar', 'percent', 'ampersand', 'quotesingle',
426
+ 'parenleft', 'parenright', 'asterisk', 'plus',
427
+ 'comma', 'hyphen', 'period', 'slash',
428
+ 'zero', 'one', 'two', 'three',
429
+ 'four', 'five', 'six', 'seven',
430
+ 'eight', 'nine', 'colon', 'semicolon',
431
+ 'less', 'equal', 'greater', 'question',
432
+ 'at', 'A', 'B', 'C',
433
+ 'D', 'E', 'F', 'G',
434
+ 'H', 'I', 'J', 'K',
435
+ 'L', 'M', 'N', 'O',
436
+ 'P', 'Q', 'R', 'S',
437
+ 'T', 'U', 'V', 'W',
438
+ 'X', 'Y', 'Z', 'bracketleft',
439
+ 'backslash', 'bracketright', 'asciicircum', 'underscore',
440
+ 'grave', 'a', 'b', 'c',
441
+ 'd', 'e', 'f', 'g',
442
+ 'h', 'i', 'j', 'k',
443
+ 'l', 'm', 'n', 'o',
444
+ 'p', 'q', 'r', 's',
445
+ 't', 'u', 'v', 'w',
446
+ 'x', 'y', 'z', 'braceleft',
447
+ 'bar', 'braceright', 'asciitilde', '.notdef',
448
+ 'Euro', '.notdef', 'quotesinglbase', '.notdef',
449
+ 'quotedblbase', 'ellipsis', 'dagger', 'daggerdbl',
450
+ '.notdef', 'perthousand', '.notdef', 'guilsinglleft',
451
+ '.notdef', 'dieresis', 'caron', 'cedilla',
452
+ '.notdef', 'quoteleft', 'quoteright', 'quotedblleft',
453
+ 'quotedblright', 'bullet', 'endash', 'emdash',
454
+ '.notdef', 'trademark', '.notdef', 'guilsinglright',
455
+ '.notdef', 'macron', 'ogonek', '.notdef',
456
+ 'space', '.notdef', 'cent', 'sterling',
457
+ 'currency', '.notdef', 'brokenbar', 'section',
458
+ 'Oslash', 'copyright', 'Rcommaaccent', 'guillemotleft',
459
+ 'logicalnot', 'hyphen', 'registered', 'AE',
460
+ 'degree', 'plusminus', 'twosuperior', 'threesuperior',
461
+ 'acute', 'mu', 'paragraph', 'periodcentered',
462
+ 'oslash', 'onesuperior', 'rcommaaccent', 'guillemotright',
463
+ 'onequarter', 'onehalf', 'threequarters', 'ae',
464
+ 'Aogonek', 'Iogonek', 'Amacron', 'Cacute',
465
+ 'Adieresis', 'Aring', 'Eogonek', 'Emacron',
466
+ 'Ccaron', 'Eacute', 'Zacute', 'Edotaccent',
467
+ 'Gcommaaccent', 'Kcommaaccent', 'Imacron', 'Lcommaaccent',
468
+ 'Scaron', 'Nacute', 'Ncommaaccent', 'Oacute',
469
+ 'Omacron', 'Otilde', 'Odieresis', 'multiply',
470
+ 'Uogonek', 'Lslash', 'Sacute', 'Umacron',
471
+ 'Udieresis', 'Zdotaccent', 'Zcaron', 'germandbls',
472
+ 'aogonek', 'iogonek', 'amacron', 'cacute',
473
+ 'adieresis', 'aring', 'eogonek', 'emacron',
474
+ 'ccaron', 'eacute', 'zacute', 'edotaccent',
475
+ 'gcommaaccent', 'kcommaaccent', 'imacron', 'lcommaaccent',
476
+ 'scaron', 'nacute', 'ncommaaccent', 'oacute',
477
+ 'omacron', 'otilde', 'odieresis', 'divide',
478
+ 'uogonek', 'lslash', 'sacute', 'umacron',
479
+ 'udieresis', 'zdotaccent', 'zcaron', 'dotaccent'
480
+ ],
481
+ # Vietnamese
482
+ 'cp1258' => [
483
+ '.notdef', '.notdef', '.notdef', '.notdef',
484
+ '.notdef', '.notdef', '.notdef', '.notdef',
485
+ '.notdef', '.notdef', '.notdef', '.notdef',
486
+ '.notdef', '.notdef', '.notdef', '.notdef',
487
+ '.notdef', '.notdef', '.notdef', '.notdef',
488
+ '.notdef', '.notdef', '.notdef', '.notdef',
489
+ '.notdef', '.notdef', '.notdef', '.notdef',
490
+ '.notdef', '.notdef', '.notdef', '.notdef',
491
+ 'space', 'exclam', 'quotedbl', 'numbersign',
492
+ 'dollar', 'percent', 'ampersand', 'quotesingle',
493
+ 'parenleft', 'parenright', 'asterisk', 'plus',
494
+ 'comma', 'hyphen', 'period', 'slash',
495
+ 'zero', 'one', 'two', 'three',
496
+ 'four', 'five', 'six', 'seven',
497
+ 'eight', 'nine', 'colon', 'semicolon',
498
+ 'less', 'equal', 'greater', 'question',
499
+ 'at', 'A', 'B', 'C',
500
+ 'D', 'E', 'F', 'G',
501
+ 'H', 'I', 'J', 'K',
502
+ 'L', 'M', 'N', 'O',
503
+ 'P', 'Q', 'R', 'S',
504
+ 'T', 'U', 'V', 'W',
505
+ 'X', 'Y', 'Z', 'bracketleft',
506
+ 'backslash', 'bracketright', 'asciicircum', 'underscore',
507
+ 'grave', 'a', 'b', 'c',
508
+ 'd', 'e', 'f', 'g',
509
+ 'h', 'i', 'j', 'k',
510
+ 'l', 'm', 'n', 'o',
511
+ 'p', 'q', 'r', 's',
512
+ 't', 'u', 'v', 'w',
513
+ 'x', 'y', 'z', 'braceleft',
514
+ 'bar', 'braceright', 'asciitilde', '.notdef',
515
+ 'Euro', '.notdef', 'quotesinglbase', 'florin',
516
+ 'quotedblbase', 'ellipsis', 'dagger', 'daggerdbl',
517
+ 'circumflex', 'perthousand', '.notdef', 'guilsinglleft',
518
+ 'OE', '.notdef', '.notdef', '.notdef',
519
+ '.notdef', 'quoteleft', 'quoteright', 'quotedblleft',
520
+ 'quotedblright', 'bullet', 'endash', 'emdash',
521
+ 'tilde', 'trademark', '.notdef', 'guilsinglright',
522
+ 'oe', '.notdef', '.notdef', 'Ydieresis',
523
+ 'space', 'exclamdown', 'cent', 'sterling',
524
+ 'currency', 'yen', 'brokenbar', 'section',
525
+ 'dieresis', 'copyright', 'ordfeminine', 'guillemotleft',
526
+ 'logicalnot', 'hyphen', 'registered', 'macron',
527
+ 'degree', 'plusminus', 'twosuperior', 'threesuperior',
528
+ 'acute', 'mu', 'paragraph', 'periodcentered',
529
+ 'cedilla', 'onesuperior', 'ordmasculine', 'guillemotright',
530
+ 'onequarter', 'onehalf', 'threequarters', 'questiondown',
531
+ 'Agrave', 'Aacute', 'Acircumflex', 'Abreve',
532
+ 'Adieresis', 'Aring', 'AE', 'Ccedilla',
533
+ 'Egrave', 'Eacute', 'Ecircumflex', 'Edieresis',
534
+ 'gravecomb', 'Iacute', 'Icircumflex', 'Idieresis',
535
+ 'Dcroat', 'Ntilde', 'hookabovecomb', 'Oacute',
536
+ 'Ocircumflex', 'Ohorn', 'Odieresis', 'multiply',
537
+ 'Oslash', 'Ugrave', 'Uacute', 'Ucircumflex',
538
+ 'Udieresis', 'Uhorn', 'tildecomb', 'germandbls',
539
+ 'agrave', 'aacute', 'acircumflex', 'abreve',
540
+ 'adieresis', 'aring', 'ae', 'ccedilla',
541
+ 'egrave', 'eacute', 'ecircumflex', 'edieresis',
542
+ 'acutecomb', 'iacute', 'icircumflex', 'idieresis',
543
+ 'dcroat', 'ntilde', 'dotbelowcomb', 'oacute',
544
+ 'ocircumflex', 'ohorn', 'odieresis', 'divide',
545
+ 'oslash', 'ugrave', 'uacute', 'ucircumflex',
546
+ 'udieresis', 'uhorn', 'dong', 'ydieresis'
547
+ ],
548
+ # Thai
549
+ 'cp874' => [
550
+ '.notdef', '.notdef', '.notdef', '.notdef',
551
+ '.notdef', '.notdef', '.notdef', '.notdef',
552
+ '.notdef', '.notdef', '.notdef', '.notdef',
553
+ '.notdef', '.notdef', '.notdef', '.notdef',
554
+ '.notdef', '.notdef', '.notdef', '.notdef',
555
+ '.notdef', '.notdef', '.notdef', '.notdef',
556
+ '.notdef', '.notdef', '.notdef', '.notdef',
557
+ '.notdef', '.notdef', '.notdef', '.notdef',
558
+ 'space', 'exclam', 'quotedbl', 'numbersign',
559
+ 'dollar', 'percent', 'ampersand', 'quotesingle',
560
+ 'parenleft', 'parenright', 'asterisk', 'plus',
561
+ 'comma', 'hyphen', 'period', 'slash',
562
+ 'zero', 'one', 'two', 'three',
563
+ 'four', 'five', 'six', 'seven',
564
+ 'eight', 'nine', 'colon', 'semicolon',
565
+ 'less', 'equal', 'greater', 'question',
566
+ 'at', 'A', 'B', 'C',
567
+ 'D', 'E', 'F', 'G',
568
+ 'H', 'I', 'J', 'K',
569
+ 'L', 'M', 'N', 'O',
570
+ 'P', 'Q', 'R', 'S',
571
+ 'T', 'U', 'V', 'W',
572
+ 'X', 'Y', 'Z', 'bracketleft',
573
+ 'backslash', 'bracketright', 'asciicircum', 'underscore',
574
+ 'grave', 'a', 'b', 'c',
575
+ 'd', 'e', 'f', 'g',
576
+ 'h', 'i', 'j', 'k',
577
+ 'l', 'm', 'n', 'o',
578
+ 'p', 'q', 'r', 's',
579
+ 't', 'u', 'v', 'w',
580
+ 'x', 'y', 'z', 'braceleft',
581
+ 'bar', 'braceright', 'asciitilde', '.notdef',
582
+ 'Euro', '.notdef', '.notdef', '.notdef',
583
+ '.notdef', 'ellipsis', '.notdef', '.notdef',
584
+ '.notdef', '.notdef', '.notdef', '.notdef',
585
+ '.notdef', '.notdef', '.notdef', '.notdef',
586
+ '.notdef', 'quoteleft', 'quoteright', 'quotedblleft',
587
+ 'quotedblright', 'bullet', 'endash', 'emdash',
588
+ '.notdef', '.notdef', '.notdef', '.notdef',
589
+ '.notdef', '.notdef', '.notdef', '.notdef',
590
+ 'space', 'kokaithai', 'khokhaithai', 'khokhuatthai',
591
+ 'khokhwaithai', 'khokhonthai', 'khorakhangthai', 'ngonguthai',
592
+ 'chochanthai', 'chochingthai', 'chochangthai', 'sosothai',
593
+ 'chochoethai', 'yoyingthai', 'dochadathai', 'topatakthai',
594
+ 'thothanthai', 'thonangmonthothai', 'thophuthaothai', 'nonenthai',
595
+ 'dodekthai', 'totaothai', 'thothungthai', 'thothahanthai',
596
+ 'thothongthai', 'nonuthai', 'bobaimaithai', 'poplathai',
597
+ 'phophungthai', 'fofathai', 'phophanthai', 'fofanthai',
598
+ 'phosamphaothai', 'momathai', 'yoyakthai', 'roruathai',
599
+ 'ruthai', 'lolingthai', 'luthai', 'wowaenthai',
600
+ 'sosalathai', 'sorusithai', 'sosuathai', 'hohipthai',
601
+ 'lochulathai', 'oangthai', 'honokhukthai', 'paiyannoithai',
602
+ 'saraathai', 'maihanakatthai', 'saraaathai', 'saraamthai',
603
+ 'saraithai', 'saraiithai', 'sarauethai', 'saraueethai',
604
+ 'sarauthai', 'sarauuthai', 'phinthuthai', '.notdef',
605
+ '.notdef', '.notdef', '.notdef', 'bahtthai',
606
+ 'saraethai', 'saraaethai', 'saraothai', 'saraaimaimuanthai',
607
+ 'saraaimaimalaithai', 'lakkhangyaothai', 'maiyamokthai', 'maitaikhuthai',
608
+ 'maiekthai', 'maithothai', 'maitrithai', 'maichattawathai',
609
+ 'thanthakhatthai', 'nikhahitthai', 'yamakkanthai', 'fongmanthai',
610
+ 'zerothai', 'onethai', 'twothai', 'threethai',
611
+ 'fourthai', 'fivethai', 'sixthai', 'seventhai',
612
+ 'eightthai', 'ninethai', 'angkhankhuthai', 'khomutthai',
613
+ '.notdef', '.notdef', '.notdef', '.notdef'
614
+ ],
615
+ # Western Europe
616
+ 'ISO-8859-1' => [
617
+ '.notdef', '.notdef', '.notdef', '.notdef',
618
+ '.notdef', '.notdef', '.notdef', '.notdef',
619
+ '.notdef', '.notdef', '.notdef', '.notdef',
620
+ '.notdef', '.notdef', '.notdef', '.notdef',
621
+ '.notdef', '.notdef', '.notdef', '.notdef',
622
+ '.notdef', '.notdef', '.notdef', '.notdef',
623
+ '.notdef', '.notdef', '.notdef', '.notdef',
624
+ '.notdef', '.notdef', '.notdef', '.notdef',
625
+ 'space', 'exclam', 'quotedbl', 'numbersign',
626
+ 'dollar', 'percent', 'ampersand', 'quotesingle',
627
+ 'parenleft', 'parenright', 'asterisk', 'plus',
628
+ 'comma', 'hyphen', 'period', 'slash',
629
+ 'zero', 'one', 'two', 'three',
630
+ 'four', 'five', 'six', 'seven',
631
+ 'eight', 'nine', 'colon', 'semicolon',
632
+ 'less', 'equal', 'greater', 'question',
633
+ 'at', 'A', 'B', 'C',
634
+ 'D', 'E', 'F', 'G',
635
+ 'H', 'I', 'J', 'K',
636
+ 'L', 'M', 'N', 'O',
637
+ 'P', 'Q', 'R', 'S',
638
+ 'T', 'U', 'V', 'W',
639
+ 'X', 'Y', 'Z', 'bracketleft',
640
+ 'backslash', 'bracketright', 'asciicircum', 'underscore',
641
+ 'grave', 'a', 'b', 'c',
642
+ 'd', 'e', 'f', 'g',
643
+ 'h', 'i', 'j', 'k',
644
+ 'l', 'm', 'n', 'o',
645
+ 'p', 'q', 'r', 's',
646
+ 't', 'u', 'v', 'w',
647
+ 'x', 'y', 'z', 'braceleft',
648
+ 'bar', 'braceright', 'asciitilde', '.notdef',
649
+ '.notdef', '.notdef', '.notdef', '.notdef',
650
+ '.notdef', '.notdef', '.notdef', '.notdef',
651
+ '.notdef', '.notdef', '.notdef', '.notdef',
652
+ '.notdef', '.notdef', '.notdef', '.notdef',
653
+ '.notdef', '.notdef', '.notdef', '.notdef',
654
+ '.notdef', '.notdef', '.notdef', '.notdef',
655
+ '.notdef', '.notdef', '.notdef', '.notdef',
656
+ '.notdef', '.notdef', '.notdef', '.notdef',
657
+ 'space', 'exclamdown', 'cent', 'sterling',
658
+ 'currency', 'yen', 'brokenbar', 'section',
659
+ 'dieresis', 'copyright', 'ordfeminine', 'guillemotleft',
660
+ 'logicalnot', 'hyphen', 'registered', 'macron',
661
+ 'degree', 'plusminus', 'twosuperior', 'threesuperior',
662
+ 'acute', 'mu', 'paragraph', 'periodcentered',
663
+ 'cedilla', 'onesuperior', 'ordmasculine', 'guillemotright',
664
+ 'onequarter', 'onehalf', 'threequarters', 'questiondown',
665
+ 'Agrave', 'Aacute', 'Acircumflex', 'Atilde',
666
+ 'Adieresis', 'Aring', 'AE', 'Ccedilla',
667
+ 'Egrave', 'Eacute', 'Ecircumflex', 'Edieresis',
668
+ 'Igrave', 'Iacute', 'Icircumflex', 'Idieresis',
669
+ 'Eth', 'Ntilde', 'Ograve', 'Oacute',
670
+ 'Ocircumflex', 'Otilde', 'Odieresis', 'multiply',
671
+ 'Oslash', 'Ugrave', 'Uacute', 'Ucircumflex',
672
+ 'Udieresis', 'Yacute', 'Thorn', 'germandbls',
673
+ 'agrave', 'aacute', 'acircumflex', 'atilde',
674
+ 'adieresis', 'aring', 'ae', 'ccedilla',
675
+ 'egrave', 'eacute', 'ecircumflex', 'edieresis',
676
+ 'igrave', 'iacute', 'icircumflex', 'idieresis',
677
+ 'eth', 'ntilde', 'ograve', 'oacute',
678
+ 'ocircumflex', 'otilde', 'odieresis', 'divide',
679
+ 'oslash', 'ugrave', 'uacute', 'ucircumflex',
680
+ 'udieresis', 'yacute', 'thorn', 'ydieresis'
681
+ ],
682
+ # Central Europe
683
+ 'ISO-8859-2' => [
684
+ '.notdef', '.notdef', '.notdef', '.notdef',
685
+ '.notdef', '.notdef', '.notdef', '.notdef',
686
+ '.notdef', '.notdef', '.notdef', '.notdef',
687
+ '.notdef', '.notdef', '.notdef', '.notdef',
688
+ '.notdef', '.notdef', '.notdef', '.notdef',
689
+ '.notdef', '.notdef', '.notdef', '.notdef',
690
+ '.notdef', '.notdef', '.notdef', '.notdef',
691
+ '.notdef', '.notdef', '.notdef', '.notdef',
692
+ 'space', 'exclam', 'quotedbl', 'numbersign',
693
+ 'dollar', 'percent', 'ampersand', 'quotesingle',
694
+ 'parenleft', 'parenright', 'asterisk', 'plus',
695
+ 'comma', 'hyphen', 'period', 'slash',
696
+ 'zero', 'one', 'two', 'three',
697
+ 'four', 'five', 'six', 'seven',
698
+ 'eight', 'nine', 'colon', 'semicolon',
699
+ 'less', 'equal', 'greater', 'question',
700
+ 'at', 'A', 'B', 'C',
701
+ 'D', 'E', 'F', 'G',
702
+ 'H', 'I', 'J', 'K',
703
+ 'L', 'M', 'N', 'O',
704
+ 'P', 'Q', 'R', 'S',
705
+ 'T', 'U', 'V', 'W',
706
+ 'X', 'Y', 'Z', 'bracketleft',
707
+ 'backslash', 'bracketright', 'asciicircum', 'underscore',
708
+ 'grave', 'a', 'b', 'c',
709
+ 'd', 'e', 'f', 'g',
710
+ 'h', 'i', 'j', 'k',
711
+ 'l', 'm', 'n', 'o',
712
+ 'p', 'q', 'r', 's',
713
+ 't', 'u', 'v', 'w',
714
+ 'x', 'y', 'z', 'braceleft',
715
+ 'bar', 'braceright', 'asciitilde', '.notdef',
716
+ '.notdef', '.notdef', '.notdef', '.notdef',
717
+ '.notdef', '.notdef', '.notdef', '.notdef',
718
+ '.notdef', '.notdef', '.notdef', '.notdef',
719
+ '.notdef', '.notdef', '.notdef', '.notdef',
720
+ '.notdef', '.notdef', '.notdef', '.notdef',
721
+ '.notdef', '.notdef', '.notdef', '.notdef',
722
+ '.notdef', '.notdef', '.notdef', '.notdef',
723
+ '.notdef', '.notdef', '.notdef', '.notdef',
724
+ 'space', 'Aogonek', 'breve', 'Lslash',
725
+ 'currency', 'Lcaron', 'Sacute', 'section',
726
+ 'dieresis', 'Scaron', 'Scedilla', 'Tcaron',
727
+ 'Zacute', 'hyphen', 'Zcaron', 'Zdotaccent',
728
+ 'degree', 'aogonek', 'ogonek', 'lslash',
729
+ 'acute', 'lcaron', 'sacute', 'caron',
730
+ 'cedilla', 'scaron', 'scedilla', 'tcaron',
731
+ 'zacute', 'hungarumlaut', 'zcaron', 'zdotaccent',
732
+ 'Racute', 'Aacute', 'Acircumflex', 'Abreve',
733
+ 'Adieresis', 'Lacute', 'Cacute', 'Ccedilla',
734
+ 'Ccaron', 'Eacute', 'Eogonek', 'Edieresis',
735
+ 'Ecaron', 'Iacute', 'Icircumflex', 'Dcaron',
736
+ 'Dcroat', 'Nacute', 'Ncaron', 'Oacute',
737
+ 'Ocircumflex', 'Ohungarumlaut', 'Odieresis', 'multiply',
738
+ 'Rcaron', 'Uring', 'Uacute', 'Uhungarumlaut',
739
+ 'Udieresis', 'Yacute', 'Tcommaaccent', 'germandbls',
740
+ 'racute', 'aacute', 'acircumflex', 'abreve',
741
+ 'adieresis', 'lacute', 'cacute', 'ccedilla',
742
+ 'ccaron', 'eacute', 'eogonek', 'edieresis',
743
+ 'ecaron', 'iacute', 'icircumflex', 'dcaron',
744
+ 'dcroat', 'nacute', 'ncaron', 'oacute',
745
+ 'ocircumflex', 'ohungarumlaut', 'odieresis', 'divide',
746
+ 'rcaron', 'uring', 'uacute', 'uhungarumlaut',
747
+ 'udieresis', 'yacute', 'tcommaaccent', 'dotaccent'
748
+ ],
749
+ # Baltic
750
+ 'ISO-8859-4' => [
751
+ '.notdef', '.notdef', '.notdef', '.notdef',
752
+ '.notdef', '.notdef', '.notdef', '.notdef',
753
+ '.notdef', '.notdef', '.notdef', '.notdef',
754
+ '.notdef', '.notdef', '.notdef', '.notdef',
755
+ '.notdef', '.notdef', '.notdef', '.notdef',
756
+ '.notdef', '.notdef', '.notdef', '.notdef',
757
+ '.notdef', '.notdef', '.notdef', '.notdef',
758
+ '.notdef', '.notdef', '.notdef', '.notdef',
759
+ 'space', 'exclam', 'quotedbl', 'numbersign',
760
+ 'dollar', 'percent', 'ampersand', 'quotesingle',
761
+ 'parenleft', 'parenright', 'asterisk', 'plus',
762
+ 'comma', 'hyphen', 'period', 'slash',
763
+ 'zero', 'one', 'two', 'three',
764
+ 'four', 'five', 'six', 'seven',
765
+ 'eight', 'nine', 'colon', 'semicolon',
766
+ 'less', 'equal', 'greater', 'question',
767
+ 'at', 'A', 'B', 'C',
768
+ 'D', 'E', 'F', 'G',
769
+ 'H', 'I', 'J', 'K',
770
+ 'L', 'M', 'N', 'O',
771
+ 'P', 'Q', 'R', 'S',
772
+ 'T', 'U', 'V', 'W',
773
+ 'X', 'Y', 'Z', 'bracketleft',
774
+ 'backslash', 'bracketright', 'asciicircum', 'underscore',
775
+ 'grave', 'a', 'b', 'c',
776
+ 'd', 'e', 'f', 'g',
777
+ 'h', 'i', 'j', 'k',
778
+ 'l', 'm', 'n', 'o',
779
+ 'p', 'q', 'r', 's',
780
+ 't', 'u', 'v', 'w',
781
+ 'x', 'y', 'z', 'braceleft',
782
+ 'bar', 'braceright', 'asciitilde', '.notdef',
783
+ '.notdef', '.notdef', '.notdef', '.notdef',
784
+ '.notdef', '.notdef', '.notdef', '.notdef',
785
+ '.notdef', '.notdef', '.notdef', '.notdef',
786
+ '.notdef', '.notdef', '.notdef', '.notdef',
787
+ '.notdef', '.notdef', '.notdef', '.notdef',
788
+ '.notdef', '.notdef', '.notdef', '.notdef',
789
+ '.notdef', '.notdef', '.notdef', '.notdef',
790
+ '.notdef', '.notdef', '.notdef', '.notdef',
791
+ 'space', 'Aogonek', 'kgreenlandic', 'Rcommaaccent',
792
+ 'currency', 'Itilde', 'Lcommaaccent', 'section',
793
+ 'dieresis', 'Scaron', 'Emacron', 'Gcommaaccent',
794
+ 'Tbar', 'hyphen', 'Zcaron', 'macron',
795
+ 'degree', 'aogonek', 'ogonek', 'rcommaaccent',
796
+ 'acute', 'itilde', 'lcommaaccent', 'caron',
797
+ 'cedilla', 'scaron', 'emacron', 'gcommaaccent',
798
+ 'tbar', 'Eng', 'zcaron', 'eng',
799
+ 'Amacron', 'Aacute', 'Acircumflex', 'Atilde',
800
+ 'Adieresis', 'Aring', 'AE', 'Iogonek',
801
+ 'Ccaron', 'Eacute', 'Eogonek', 'Edieresis',
802
+ 'Edotaccent', 'Iacute', 'Icircumflex', 'Imacron',
803
+ 'Dcroat', 'Ncommaaccent', 'Omacron', 'Kcommaaccent',
804
+ 'Ocircumflex', 'Otilde', 'Odieresis', 'multiply',
805
+ 'Oslash', 'Uogonek', 'Uacute', 'Ucircumflex',
806
+ 'Udieresis', 'Utilde', 'Umacron', 'germandbls',
807
+ 'amacron', 'aacute', 'acircumflex', 'atilde',
808
+ 'adieresis', 'aring', 'ae', 'iogonek',
809
+ 'ccaron', 'eacute', 'eogonek', 'edieresis',
810
+ 'edotaccent', 'iacute', 'icircumflex', 'imacron',
811
+ 'dcroat', 'ncommaaccent', 'omacron', 'kcommaaccent',
812
+ 'ocircumflex', 'otilde', 'odieresis', 'divide',
813
+ 'oslash', 'uogonek', 'uacute', 'ucircumflex',
814
+ 'udieresis', 'utilde', 'umacron', 'dotaccent'
815
+ ],
816
+ # Cyrillic
817
+ 'ISO-8859-5' => [
818
+ '.notdef', '.notdef', '.notdef', '.notdef',
819
+ '.notdef', '.notdef', '.notdef', '.notdef',
820
+ '.notdef', '.notdef', '.notdef', '.notdef',
821
+ '.notdef', '.notdef', '.notdef', '.notdef',
822
+ '.notdef', '.notdef', '.notdef', '.notdef',
823
+ '.notdef', '.notdef', '.notdef', '.notdef',
824
+ '.notdef', '.notdef', '.notdef', '.notdef',
825
+ '.notdef', '.notdef', '.notdef', '.notdef',
826
+ 'space', 'exclam', 'quotedbl', 'numbersign',
827
+ 'dollar', 'percent', 'ampersand', 'quotesingle',
828
+ 'parenleft', 'parenright', 'asterisk', 'plus',
829
+ 'comma', 'hyphen', 'period', 'slash',
830
+ 'zero', 'one', 'two', 'three',
831
+ 'four', 'five', 'six', 'seven',
832
+ 'eight', 'nine', 'colon', 'semicolon',
833
+ 'less', 'equal', 'greater', 'question',
834
+ 'at', 'A', 'B', 'C',
835
+ 'D', 'E', 'F', 'G',
836
+ 'H', 'I', 'J', 'K',
837
+ 'L', 'M', 'N', 'O',
838
+ 'P', 'Q', 'R', 'S',
839
+ 'T', 'U', 'V', 'W',
840
+ 'X', 'Y', 'Z', 'bracketleft',
841
+ 'backslash', 'bracketright', 'asciicircum', 'underscore',
842
+ 'grave', 'a', 'b', 'c',
843
+ 'd', 'e', 'f', 'g',
844
+ 'h', 'i', 'j', 'k',
845
+ 'l', 'm', 'n', 'o',
846
+ 'p', 'q', 'r', 's',
847
+ 't', 'u', 'v', 'w',
848
+ 'x', 'y', 'z', 'braceleft',
849
+ 'bar', 'braceright', 'asciitilde', '.notdef',
850
+ '.notdef', '.notdef', '.notdef', '.notdef',
851
+ '.notdef', '.notdef', '.notdef', '.notdef',
852
+ '.notdef', '.notdef', '.notdef', '.notdef',
853
+ '.notdef', '.notdef', '.notdef', '.notdef',
854
+ '.notdef', '.notdef', '.notdef', '.notdef',
855
+ '.notdef', '.notdef', '.notdef', '.notdef',
856
+ '.notdef', '.notdef', '.notdef', '.notdef',
857
+ '.notdef', '.notdef', '.notdef', '.notdef',
858
+ 'space', 'afii10023', 'afii10051', 'afii10052',
859
+ 'afii10053', 'afii10054', 'afii10055', 'afii10056',
860
+ 'afii10057', 'afii10058', 'afii10059', 'afii10060',
861
+ 'afii10061', 'hyphen', 'afii10062', 'afii10145',
862
+ 'afii10017', 'afii10018', 'afii10019', 'afii10020',
863
+ 'afii10021', 'afii10022', 'afii10024', 'afii10025',
864
+ 'afii10026', 'afii10027', 'afii10028', 'afii10029',
865
+ 'afii10030', 'afii10031', 'afii10032', 'afii10033',
866
+ 'afii10034', 'afii10035', 'afii10036', 'afii10037',
867
+ 'afii10038', 'afii10039', 'afii10040', 'afii10041',
868
+ 'afii10042', 'afii10043', 'afii10044', 'afii10045',
869
+ 'afii10046', 'afii10047', 'afii10048', 'afii10049',
870
+ 'afii10065', 'afii10066', 'afii10067', 'afii10068',
871
+ 'afii10069', 'afii10070', 'afii10072', 'afii10073',
872
+ 'afii10074', 'afii10075', 'afii10076', 'afii10077',
873
+ 'afii10078', 'afii10079', 'afii10080', 'afii10081',
874
+ 'afii10082', 'afii10083', 'afii10084', 'afii10085',
875
+ 'afii10086', 'afii10087', 'afii10088', 'afii10089',
876
+ 'afii10090', 'afii10091', 'afii10092', 'afii10093',
877
+ 'afii10094', 'afii10095', 'afii10096', 'afii10097',
878
+ 'afii61352', 'afii10071', 'afii10099', 'afii10100',
879
+ 'afii10101', 'afii10102', 'afii10103', 'afii10104',
880
+ 'afii10105', 'afii10106', 'afii10107', 'afii10108',
881
+ 'afii10109', 'section', 'afii10110', 'afii10193'
882
+ ],
883
+ # Greek
884
+ 'ISO-8859-7' => [
885
+ '.notdef', '.notdef', '.notdef', '.notdef',
886
+ '.notdef', '.notdef', '.notdef', '.notdef',
887
+ '.notdef', '.notdef', '.notdef', '.notdef',
888
+ '.notdef', '.notdef', '.notdef', '.notdef',
889
+ '.notdef', '.notdef', '.notdef', '.notdef',
890
+ '.notdef', '.notdef', '.notdef', '.notdef',
891
+ '.notdef', '.notdef', '.notdef', '.notdef',
892
+ '.notdef', '.notdef', '.notdef', '.notdef',
893
+ 'space', 'exclam', 'quotedbl', 'numbersign',
894
+ 'dollar', 'percent', 'ampersand', 'quotesingle',
895
+ 'parenleft', 'parenright', 'asterisk', 'plus',
896
+ 'comma', 'hyphen', 'period', 'slash',
897
+ 'zero', 'one', 'two', 'three',
898
+ 'four', 'five', 'six', 'seven',
899
+ 'eight', 'nine', 'colon', 'semicolon',
900
+ 'less', 'equal', 'greater', 'question',
901
+ 'at', 'A', 'B', 'C',
902
+ 'D', 'E', 'F', 'G',
903
+ 'H', 'I', 'J', 'K',
904
+ 'L', 'M', 'N', 'O',
905
+ 'P', 'Q', 'R', 'S',
906
+ 'T', 'U', 'V', 'W',
907
+ 'X', 'Y', 'Z', 'bracketleft',
908
+ 'backslash', 'bracketright', 'asciicircum', 'underscore',
909
+ 'grave', 'a', 'b', 'c',
910
+ 'd', 'e', 'f', 'g',
911
+ 'h', 'i', 'j', 'k',
912
+ 'l', 'm', 'n', 'o',
913
+ 'p', 'q', 'r', 's',
914
+ 't', 'u', 'v', 'w',
915
+ 'x', 'y', 'z', 'braceleft',
916
+ 'bar', 'braceright', 'asciitilde', '.notdef',
917
+ '.notdef', '.notdef', '.notdef', '.notdef',
918
+ '.notdef', '.notdef', '.notdef', '.notdef',
919
+ '.notdef', '.notdef', '.notdef', '.notdef',
920
+ '.notdef', '.notdef', '.notdef', '.notdef',
921
+ '.notdef', '.notdef', '.notdef', '.notdef',
922
+ '.notdef', '.notdef', '.notdef', '.notdef',
923
+ '.notdef', '.notdef', '.notdef', '.notdef',
924
+ '.notdef', '.notdef', '.notdef', '.notdef',
925
+ 'space', 'quoteleft', 'quoteright', 'sterling',
926
+ '.notdef', '.notdef', 'brokenbar', 'section',
927
+ 'dieresis', 'copyright', '.notdef', 'guillemotleft',
928
+ 'logicalnot', 'hyphen', '.notdef', 'afii00208',
929
+ 'degree', 'plusminus', 'twosuperior', 'threesuperior',
930
+ 'tonos', 'dieresistonos', 'Alphatonos', 'periodcentered',
931
+ 'Epsilontonos', 'Etatonos', 'Iotatonos', 'guillemotright',
932
+ 'Omicrontonos', 'onehalf', 'Upsilontonos', 'Omegatonos',
933
+ 'iotadieresistonos','Alpha', 'Beta', 'Gamma',
934
+ 'Delta', 'Epsilon', 'Zeta', 'Eta',
935
+ 'Theta', 'Iota', 'Kappa', 'Lambda',
936
+ 'Mu', 'Nu', 'Xi', 'Omicron',
937
+ 'Pi', 'Rho', '.notdef', 'Sigma',
938
+ 'Tau', 'Upsilon', 'Phi', 'Chi',
939
+ 'Psi', 'Omega', 'Iotadieresis', 'Upsilondieresis',
940
+ 'alphatonos', 'epsilontonos', 'etatonos', 'iotatonos',
941
+ 'upsilondieresistonos','alpha', 'beta', 'gamma',
942
+ 'delta', 'epsilon', 'zeta', 'eta',
943
+ 'theta', 'iota', 'kappa', 'lambda',
944
+ 'mu', 'nu', 'xi', 'omicron',
945
+ 'pi', 'rho', 'sigma1', 'sigma',
946
+ 'tau', 'upsilon', 'phi', 'chi',
947
+ 'psi', 'omega', 'iotadieresis', 'upsilondieresis',
948
+ 'omicrontonos', 'upsilontonos', 'omegatonos', '.notdef'
949
+ ],
950
+ # Turkish
951
+ 'ISO-8859-9' => [
952
+ '.notdef', '.notdef', '.notdef', '.notdef',
953
+ '.notdef', '.notdef', '.notdef', '.notdef',
954
+ '.notdef', '.notdef', '.notdef', '.notdef',
955
+ '.notdef', '.notdef', '.notdef', '.notdef',
956
+ '.notdef', '.notdef', '.notdef', '.notdef',
957
+ '.notdef', '.notdef', '.notdef', '.notdef',
958
+ '.notdef', '.notdef', '.notdef', '.notdef',
959
+ '.notdef', '.notdef', '.notdef', '.notdef',
960
+ 'space', 'exclam', 'quotedbl', 'numbersign',
961
+ 'dollar', 'percent', 'ampersand', 'quotesingle',
962
+ 'parenleft', 'parenright', 'asterisk', 'plus',
963
+ 'comma', 'hyphen', 'period', 'slash',
964
+ 'zero', 'one', 'two', 'three',
965
+ 'four', 'five', 'six', 'seven',
966
+ 'eight', 'nine', 'colon', 'semicolon',
967
+ 'less', 'equal', 'greater', 'question',
968
+ 'at', 'A', 'B', 'C',
969
+ 'D', 'E', 'F', 'G',
970
+ 'H', 'I', 'J', 'K',
971
+ 'L', 'M', 'N', 'O',
972
+ 'P', 'Q', 'R', 'S',
973
+ 'T', 'U', 'V', 'W',
974
+ 'X', 'Y', 'Z', 'bracketleft',
975
+ 'backslash', 'bracketright', 'asciicircum', 'underscore',
976
+ 'grave', 'a', 'b', 'c',
977
+ 'd', 'e', 'f', 'g',
978
+ 'h', 'i', 'j', 'k',
979
+ 'l', 'm', 'n', 'o',
980
+ 'p', 'q', 'r', 's',
981
+ 't', 'u', 'v', 'w',
982
+ 'x', 'y', 'z', 'braceleft',
983
+ 'bar', 'braceright', 'asciitilde', '.notdef',
984
+ '.notdef', '.notdef', '.notdef', '.notdef',
985
+ '.notdef', '.notdef', '.notdef', '.notdef',
986
+ '.notdef', '.notdef', '.notdef', '.notdef',
987
+ '.notdef', '.notdef', '.notdef', '.notdef',
988
+ '.notdef', '.notdef', '.notdef', '.notdef',
989
+ '.notdef', '.notdef', '.notdef', '.notdef',
990
+ '.notdef', '.notdef', '.notdef', '.notdef',
991
+ '.notdef', '.notdef', '.notdef', '.notdef',
992
+ 'space', 'exclamdown', 'cent', 'sterling',
993
+ 'currency', 'yen', 'brokenbar', 'section',
994
+ 'dieresis', 'copyright', 'ordfeminine', 'guillemotleft',
995
+ 'logicalnot', 'hyphen', 'registered', 'macron',
996
+ 'degree', 'plusminus', 'twosuperior', 'threesuperior',
997
+ 'acute', 'mu', 'paragraph', 'periodcentered',
998
+ 'cedilla', 'onesuperior', 'ordmasculine', 'guillemotright',
999
+ 'onequarter', 'onehalf', 'threequarters', 'questiondown',
1000
+ 'Agrave', 'Aacute', 'Acircumflex', 'Atilde',
1001
+ 'Adieresis', 'Aring', 'AE', 'Ccedilla',
1002
+ 'Egrave', 'Eacute', 'Ecircumflex', 'Edieresis',
1003
+ 'Igrave', 'Iacute', 'Icircumflex', 'Idieresis',
1004
+ 'Gbreve', 'Ntilde', 'Ograve', 'Oacute',
1005
+ 'Ocircumflex', 'Otilde', 'Odieresis', 'multiply',
1006
+ 'Oslash', 'Ugrave', 'Uacute', 'Ucircumflex',
1007
+ 'Udieresis', 'Idotaccent', 'Scedilla', 'germandbls',
1008
+ 'agrave', 'aacute', 'acircumflex', 'atilde',
1009
+ 'adieresis', 'aring', 'ae', 'ccedilla',
1010
+ 'egrave', 'eacute', 'ecircumflex', 'edieresis',
1011
+ 'igrave', 'iacute', 'icircumflex', 'idieresis',
1012
+ 'gbreve', 'ntilde', 'ograve', 'oacute',
1013
+ 'ocircumflex', 'otilde', 'odieresis', 'divide',
1014
+ 'oslash', 'ugrave', 'uacute', 'ucircumflex',
1015
+ 'udieresis', 'dotlessi', 'scedilla', 'ydieresis'
1016
+ ],
1017
+ # Thai
1018
+ 'ISO-8859-11' => [
1019
+ '.notdef', '.notdef', '.notdef', '.notdef',
1020
+ '.notdef', '.notdef', '.notdef', '.notdef',
1021
+ '.notdef', '.notdef', '.notdef', '.notdef',
1022
+ '.notdef', '.notdef', '.notdef', '.notdef',
1023
+ '.notdef', '.notdef', '.notdef', '.notdef',
1024
+ '.notdef', '.notdef', '.notdef', '.notdef',
1025
+ '.notdef', '.notdef', '.notdef', '.notdef',
1026
+ '.notdef', '.notdef', '.notdef', '.notdef',
1027
+ 'space', 'exclam', 'quotedbl', 'numbersign',
1028
+ 'dollar', 'percent', 'ampersand', 'quotesingle',
1029
+ 'parenleft', 'parenright', 'asterisk', 'plus',
1030
+ 'comma', 'hyphen', 'period', 'slash',
1031
+ 'zero', 'one', 'two', 'three',
1032
+ 'four', 'five', 'six', 'seven',
1033
+ 'eight', 'nine', 'colon', 'semicolon',
1034
+ 'less', 'equal', 'greater', 'question',
1035
+ 'at', 'A', 'B', 'C',
1036
+ 'D', 'E', 'F', 'G',
1037
+ 'H', 'I', 'J', 'K',
1038
+ 'L', 'M', 'N', 'O',
1039
+ 'P', 'Q', 'R', 'S',
1040
+ 'T', 'U', 'V', 'W',
1041
+ 'X', 'Y', 'Z', 'bracketleft',
1042
+ 'backslash', 'bracketright', 'asciicircum', 'underscore',
1043
+ 'grave', 'a', 'b', 'c',
1044
+ 'd', 'e', 'f', 'g',
1045
+ 'h', 'i', 'j', 'k',
1046
+ 'l', 'm', 'n', 'o',
1047
+ 'p', 'q', 'r', 's',
1048
+ 't', 'u', 'v', 'w',
1049
+ 'x', 'y', 'z', 'braceleft',
1050
+ 'bar', 'braceright', 'asciitilde', '.notdef',
1051
+ '.notdef', '.notdef', '.notdef', '.notdef',
1052
+ '.notdef', '.notdef', '.notdef', '.notdef',
1053
+ '.notdef', '.notdef', '.notdef', '.notdef',
1054
+ '.notdef', '.notdef', '.notdef', '.notdef',
1055
+ '.notdef', '.notdef', '.notdef', '.notdef',
1056
+ '.notdef', '.notdef', '.notdef', '.notdef',
1057
+ '.notdef', '.notdef', '.notdef', '.notdef',
1058
+ '.notdef', '.notdef', '.notdef', '.notdef',
1059
+ 'space', 'kokaithai', 'khokhaithai', 'khokhuatthai',
1060
+ 'khokhwaithai', 'khokhonthai', 'khorakhangthai', 'ngonguthai',
1061
+ 'chochanthai', 'chochingthai', 'chochangthai', 'sosothai',
1062
+ 'chochoethai', 'yoyingthai', 'dochadathai', 'topatakthai',
1063
+ 'thothanthai', 'thonangmonthothai','thophuthaothai', 'nonenthai',
1064
+ 'dodekthai', 'totaothai', 'thothungthai', 'thothahanthai',
1065
+ 'thothongthai', 'nonuthai', 'bobaimaithai', 'poplathai',
1066
+ 'phophungthai', 'fofathai', 'phophanthai', 'fofanthai',
1067
+ 'phosamphaothai', 'momathai', 'yoyakthai', 'roruathai',
1068
+ 'ruthai', 'lolingthai', 'luthai', 'wowaenthai',
1069
+ 'sosalathai', 'sorusithai', 'sosuathai', 'hohipthai',
1070
+ 'lochulathai', 'oangthai', 'honokhukthai', 'paiyannoithai',
1071
+ 'saraathai', 'maihanakatthai', 'saraaathai', 'saraamthai',
1072
+ 'saraithai', 'saraiithai', 'sarauethai', 'saraueethai',
1073
+ 'sarauthai', 'sarauuthai', 'phinthuthai', '.notdef',
1074
+ '.notdef', '.notdef', '.notdef', 'bahtthai',
1075
+ 'saraethai', 'saraaethai', 'saraothai', 'saraaimaimuanthai',
1076
+ 'saraaimaimalaithai','lakkhangyaothai','maiyamokthai', 'maitaikhuthai',
1077
+ 'maiekthai', 'maithothai', 'maitrithai', 'maichattawathai',
1078
+ 'thanthakhatthai','nikhahitthai', 'yamakkanthai', 'fongmanthai',
1079
+ 'zerothai', 'onethai', 'twothai', 'threethai',
1080
+ 'fourthai', 'fivethai', 'sixthai', 'seventhai',
1081
+ 'eightthai', 'ninethai', 'angkhankhuthai', 'khomutthai',
1082
+ '.notdef', '.notdef', '.notdef', '.notdef'
1083
+ ],
1084
+ # Western Europe
1085
+ 'ISO-8859-15' => [
1086
+ '.notdef', '.notdef', '.notdef', '.notdef',
1087
+ '.notdef', '.notdef', '.notdef', '.notdef',
1088
+ '.notdef', '.notdef', '.notdef', '.notdef',
1089
+ '.notdef', '.notdef', '.notdef', '.notdef',
1090
+ '.notdef', '.notdef', '.notdef', '.notdef',
1091
+ '.notdef', '.notdef', '.notdef', '.notdef',
1092
+ '.notdef', '.notdef', '.notdef', '.notdef',
1093
+ '.notdef', '.notdef', '.notdef', '.notdef',
1094
+ 'space', 'exclam', 'quotedbl', 'numbersign',
1095
+ 'dollar', 'percent', 'ampersand', 'quotesingle',
1096
+ 'parenleft', 'parenright', 'asterisk', 'plus',
1097
+ 'comma', 'hyphen', 'period', 'slash',
1098
+ 'zero', 'one', 'two', 'three',
1099
+ 'four', 'five', 'six', 'seven',
1100
+ 'eight', 'nine', 'colon', 'semicolon',
1101
+ 'less', 'equal', 'greater', 'question',
1102
+ 'at', 'A', 'B', 'C',
1103
+ 'D', 'E', 'F', 'G',
1104
+ 'H', 'I', 'J', 'K',
1105
+ 'L', 'M', 'N', 'O',
1106
+ 'P', 'Q', 'R', 'S',
1107
+ 'T', 'U', 'V', 'W',
1108
+ 'X', 'Y', 'Z', 'bracketleft',
1109
+ 'backslash', 'bracketright', 'asciicircum', 'underscore',
1110
+ 'grave', 'a', 'b', 'c',
1111
+ 'd', 'e', 'f', 'g',
1112
+ 'h', 'i', 'j', 'k',
1113
+ 'l', 'm', 'n', 'o',
1114
+ 'p', 'q', 'r', 's',
1115
+ 't', 'u', 'v', 'w',
1116
+ 'x', 'y', 'z', 'braceleft',
1117
+ 'bar', 'braceright', 'asciitilde', '.notdef',
1118
+ '.notdef', '.notdef', '.notdef', '.notdef',
1119
+ '.notdef', '.notdef', '.notdef', '.notdef',
1120
+ '.notdef', '.notdef', '.notdef', '.notdef',
1121
+ '.notdef', '.notdef', '.notdef', '.notdef',
1122
+ '.notdef', '.notdef', '.notdef', '.notdef',
1123
+ '.notdef', '.notdef', '.notdef', '.notdef',
1124
+ '.notdef', '.notdef', '.notdef', '.notdef',
1125
+ '.notdef', '.notdef', '.notdef', '.notdef',
1126
+ 'space', 'exclamdown', 'cent', 'sterling',
1127
+ 'Euro', 'yen', 'Scaron', 'section',
1128
+ 'scaron', 'copyright', 'ordfeminine', 'guillemotleft',
1129
+ 'logicalnot', 'hyphen', 'registered', 'macron',
1130
+ 'degree', 'plusminus', 'twosuperior', 'threesuperior',
1131
+ 'Zcaron', 'mu', 'paragraph', 'periodcentered',
1132
+ 'zcaron', 'onesuperior', 'ordmasculine', 'guillemotright',
1133
+ 'OE', 'oe', 'Ydieresis', 'questiondown',
1134
+ 'Agrave', 'Aacute', 'Acircumflex', 'Atilde',
1135
+ 'Adieresis', 'Aring', 'AE', 'Ccedilla',
1136
+ 'Egrave', 'Eacute', 'Ecircumflex', 'Edieresis',
1137
+ 'Igrave', 'Iacute', 'Icircumflex', 'Idieresis',
1138
+ 'Eth', 'Ntilde', 'Ograve', 'Oacute',
1139
+ 'Ocircumflex', 'Otilde', 'Odieresis', 'multiply',
1140
+ 'Oslash', 'Ugrave', 'Uacute', 'Ucircumflex',
1141
+ 'Udieresis', 'Yacute', 'Thorn', 'germandbls',
1142
+ 'agrave', 'aacute', 'acircumflex', 'atilde',
1143
+ 'adieresis', 'aring', 'ae', 'ccedilla',
1144
+ 'egrave', 'eacute', 'ecircumflex', 'edieresis',
1145
+ 'igrave', 'iacute', 'icircumflex', 'idieresis',
1146
+ 'eth', 'ntilde', 'ograve', 'oacute',
1147
+ 'ocircumflex', 'otilde', 'odieresis', 'divide',
1148
+ 'oslash', 'ugrave', 'uacute', 'ucircumflex',
1149
+ 'udieresis', 'yacute', 'thorn', 'ydieresis'
1150
+ ],
1151
+ # Central Europe
1152
+ 'ISO-8859-16' => [
1153
+ '.notdef', '.notdef', '.notdef', '.notdef',
1154
+ '.notdef', '.notdef', '.notdef', '.notdef',
1155
+ '.notdef', '.notdef', '.notdef', '.notdef',
1156
+ '.notdef', '.notdef', '.notdef', '.notdef',
1157
+ '.notdef', '.notdef', '.notdef', '.notdef',
1158
+ '.notdef', '.notdef', '.notdef', '.notdef',
1159
+ '.notdef', '.notdef', '.notdef', '.notdef',
1160
+ '.notdef', '.notdef', '.notdef', '.notdef',
1161
+ 'space', 'exclam', 'quotedbl', 'numbersign',
1162
+ 'dollar', 'percent', 'ampersand', 'quotesingle',
1163
+ 'parenleft', 'parenright', 'asterisk', 'plus',
1164
+ 'comma', 'hyphen', 'period', 'slash',
1165
+ 'zero', 'one', 'two', 'three',
1166
+ 'four', 'five', 'six', 'seven',
1167
+ 'eight', 'nine', 'colon', 'semicolon',
1168
+ 'less', 'equal', 'greater', 'question',
1169
+ 'at', 'A', 'B', 'C',
1170
+ 'D', 'E', 'F', 'G',
1171
+ 'H', 'I', 'J', 'K',
1172
+ 'L', 'M', 'N', 'O',
1173
+ 'P', 'Q', 'R', 'S',
1174
+ 'T', 'U', 'V', 'W',
1175
+ 'X', 'Y', 'Z', 'bracketleft',
1176
+ 'backslash', 'bracketright', 'asciicircum', 'underscore',
1177
+ 'grave', 'a', 'b', 'c',
1178
+ 'd', 'e', 'f', 'g',
1179
+ 'h', 'i', 'j', 'k',
1180
+ 'l', 'm', 'n', 'o',
1181
+ 'p', 'q', 'r', 's',
1182
+ 't', 'u', 'v', 'w',
1183
+ 'x', 'y', 'z', 'braceleft',
1184
+ 'bar', 'braceright', 'asciitilde', '.notdef',
1185
+ '.notdef', '.notdef', '.notdef', '.notdef',
1186
+ '.notdef', '.notdef', '.notdef', '.notdef',
1187
+ '.notdef', '.notdef', '.notdef', '.notdef',
1188
+ '.notdef', '.notdef', '.notdef', '.notdef',
1189
+ '.notdef', '.notdef', '.notdef', '.notdef',
1190
+ '.notdef', '.notdef', '.notdef', '.notdef',
1191
+ '.notdef', '.notdef', '.notdef', '.notdef',
1192
+ '.notdef', '.notdef', '.notdef', '.notdef',
1193
+ 'space', 'Aogonek', 'aogonek', 'Lslash',
1194
+ 'Euro', 'quotedblbase', 'Scaron', 'section',
1195
+ 'scaron', 'copyright', 'Scommaaccent', 'guillemotleft',
1196
+ 'Zacute', 'hyphen', 'zacute', 'Zdotaccent',
1197
+ 'degree', 'plusminus', 'Ccaron', 'lslash',
1198
+ 'Zcaron', 'quotedblright', 'paragraph', 'periodcentered',
1199
+ 'zcaron', 'ccaron', 'scommaaccent', 'guillemotright',
1200
+ 'OE', 'oe', 'Ydieresis', 'zdotaccent',
1201
+ 'Agrave', 'Aacute', 'Acircumflex', 'Abreve',
1202
+ 'Adieresis', 'Cacute', 'AE', 'Ccedilla',
1203
+ 'Egrave', 'Eacute', 'Ecircumflex', 'Edieresis',
1204
+ 'Igrave', 'Iacute', 'Icircumflex', 'Idieresis',
1205
+ 'Dcroat', 'Nacute', 'Ograve', 'Oacute',
1206
+ 'Ocircumflex', 'Ohungarumlaut', 'Odieresis', 'Sacute',
1207
+ 'Uhungarumlaut', 'Ugrave', 'Uacute', 'Ucircumflex',
1208
+ 'Udieresis', 'Eogonek', 'Tcommaaccent', 'germandbls',
1209
+ 'agrave', 'aacute', 'acircumflex', 'abreve',
1210
+ 'adieresis', 'cacute', 'ae', 'ccedilla',
1211
+ 'egrave', 'eacute', 'ecircumflex', 'edieresis',
1212
+ 'igrave', 'iacute', 'icircumflex', 'idieresis',
1213
+ 'dcroat', 'nacute', 'ograve', 'oacute',
1214
+ 'ocircumflex', 'ohungarumlaut', 'odieresis', 'sacute',
1215
+ 'uhungarumlaut', 'ugrave', 'uacute', 'ucircumflex',
1216
+ 'udieresis', 'eogonek', 'tcommaaccent', 'ydieresis'
1217
+ ],
1218
+ # Russian
1219
+ 'KOI8-R' => [
1220
+ '.notdef', '.notdef', '.notdef', '.notdef',
1221
+ '.notdef', '.notdef', '.notdef', '.notdef',
1222
+ '.notdef', '.notdef', '.notdef', '.notdef',
1223
+ '.notdef', '.notdef', '.notdef', '.notdef',
1224
+ '.notdef', '.notdef', '.notdef', '.notdef',
1225
+ '.notdef', '.notdef', '.notdef', '.notdef',
1226
+ '.notdef', '.notdef', '.notdef', '.notdef',
1227
+ '.notdef', '.notdef', '.notdef', '.notdef',
1228
+ 'space', 'exclam', 'quotedbl', 'numbersign',
1229
+ 'dollar', 'percent', 'ampersand', 'quotesingle',
1230
+ 'parenleft', 'parenright', 'asterisk', 'plus',
1231
+ 'comma', 'hyphen', 'period', 'slash',
1232
+ 'zero', 'one', 'two', 'three',
1233
+ 'four', 'five', 'six', 'seven',
1234
+ 'eight', 'nine', 'colon', 'semicolon',
1235
+ 'less', 'equal', 'greater', 'question',
1236
+ 'at', 'A', 'B', 'C',
1237
+ 'D', 'E', 'F', 'G',
1238
+ 'H', 'I', 'J', 'K',
1239
+ 'L', 'M', 'N', 'O',
1240
+ 'P', 'Q', 'R', 'S',
1241
+ 'T', 'U', 'V', 'W',
1242
+ 'X', 'Y', 'Z', 'bracketleft',
1243
+ 'backslash', 'bracketright', 'asciicircum', 'underscore',
1244
+ 'grave', 'a', 'b', 'c',
1245
+ 'd', 'e', 'f', 'g',
1246
+ 'h', 'i', 'j', 'k',
1247
+ 'l', 'm', 'n', 'o',
1248
+ 'p', 'q', 'r', 's',
1249
+ 't', 'u', 'v', 'w',
1250
+ 'x', 'y', 'z', 'braceleft',
1251
+ 'bar', 'braceright', 'asciitilde', '.notdef',
1252
+ 'SF100000', 'SF110000', 'SF010000', 'SF030000',
1253
+ 'SF020000', 'SF040000', 'SF080000', 'SF090000',
1254
+ 'SF060000', 'SF070000', 'SF050000', 'upblock',
1255
+ 'dnblock', 'block', 'lfblock', 'rtblock',
1256
+ 'ltshade', 'shade', 'dkshade', 'integraltp',
1257
+ 'filledbox', 'periodcentered', 'radical', 'approxequal',
1258
+ 'lessequal', 'greaterequal', 'space', 'integralbt',
1259
+ 'degree', 'twosuperior', 'periodcentered', 'divide',
1260
+ 'SF430000', 'SF240000', 'SF510000', 'afii10071',
1261
+ 'SF520000', 'SF390000', 'SF220000', 'SF210000',
1262
+ 'SF250000', 'SF500000', 'SF490000', 'SF380000',
1263
+ 'SF280000', 'SF270000', 'SF260000', 'SF360000',
1264
+ 'SF370000', 'SF420000', 'SF190000', 'afii10023',
1265
+ 'SF200000', 'SF230000', 'SF470000', 'SF480000',
1266
+ 'SF410000', 'SF450000', 'SF460000', 'SF400000',
1267
+ 'SF540000', 'SF530000', 'SF440000', 'copyright',
1268
+ 'afii10096', 'afii10065', 'afii10066', 'afii10088',
1269
+ 'afii10069', 'afii10070', 'afii10086', 'afii10068',
1270
+ 'afii10087', 'afii10074', 'afii10075', 'afii10076',
1271
+ 'afii10077', 'afii10078', 'afii10079', 'afii10080',
1272
+ 'afii10081', 'afii10097', 'afii10082', 'afii10083',
1273
+ 'afii10084', 'afii10085', 'afii10072', 'afii10067',
1274
+ 'afii10094', 'afii10093', 'afii10073', 'afii10090',
1275
+ 'afii10095', 'afii10091', 'afii10089', 'afii10092',
1276
+ 'afii10048', 'afii10017', 'afii10018', 'afii10040',
1277
+ 'afii10021', 'afii10022', 'afii10038', 'afii10020',
1278
+ 'afii10039', 'afii10026', 'afii10027', 'afii10028',
1279
+ 'afii10029', 'afii10030', 'afii10031', 'afii10032',
1280
+ 'afii10033', 'afii10049', 'afii10034', 'afii10035',
1281
+ 'afii10036', 'afii10037', 'afii10024', 'afii10019',
1282
+ 'afii10046', 'afii10045', 'afii10025', 'afii10042',
1283
+ 'afii10047', 'afii10043', 'afii10041', 'afii10044'
1284
+ ],
1285
+ # Ukrainian
1286
+ 'KOI8-U' => [
1287
+ '.notdef', '.notdef', '.notdef', '.notdef',
1288
+ '.notdef', '.notdef', '.notdef', '.notdef',
1289
+ '.notdef', '.notdef', '.notdef', '.notdef',
1290
+ '.notdef', '.notdef', '.notdef', '.notdef',
1291
+ '.notdef', '.notdef', '.notdef', '.notdef',
1292
+ '.notdef', '.notdef', '.notdef', '.notdef',
1293
+ '.notdef', '.notdef', '.notdef', '.notdef',
1294
+ '.notdef', '.notdef', '.notdef', '.notdef',
1295
+ 'space', 'exclam', 'quotedbl', 'numbersign',
1296
+ 'dollar', 'percent', 'ampersand', 'quotesingle',
1297
+ 'parenleft', 'parenright', 'asterisk', 'plus',
1298
+ 'comma', 'hyphen', 'period', 'slash',
1299
+ 'zero', 'one', 'two', 'three',
1300
+ 'four', 'five', 'six', 'seven',
1301
+ 'eight', 'nine', 'colon', 'semicolon',
1302
+ 'less', 'equal', 'greater', 'question',
1303
+ 'at', 'A', 'B', 'C',
1304
+ 'D', 'E', 'F', 'G',
1305
+ 'H', 'I', 'J', 'K',
1306
+ 'L', 'M', 'N', 'O',
1307
+ 'P', 'Q', 'R', 'S',
1308
+ 'T', 'U', 'V', 'W',
1309
+ 'X', 'Y', 'Z', 'bracketleft',
1310
+ 'backslash', 'bracketright', 'asciicircum', 'underscore',
1311
+ 'grave', 'a', 'b', 'c',
1312
+ 'd', 'e', 'f', 'g',
1313
+ 'h', 'i', 'j', 'k',
1314
+ 'l', 'm', 'n', 'o',
1315
+ 'p', 'q', 'r', 's',
1316
+ 't', 'u', 'v', 'w',
1317
+ 'x', 'y', 'z', 'braceleft',
1318
+ 'bar', 'braceright', 'asciitilde', '.notdef',
1319
+ 'SF100000', 'SF110000', 'SF010000', 'SF030000',
1320
+ 'SF020000', 'SF040000', 'SF080000', 'SF090000',
1321
+ 'SF060000', 'SF070000', 'SF050000', 'upblock',
1322
+ 'dnblock', 'block', 'lfblock', 'rtblock',
1323
+ 'ltshade', 'shade', 'dkshade', 'integraltp',
1324
+ 'filledbox', 'bullet', 'radical', 'approxequal',
1325
+ 'lessequal', 'greaterequal', 'space', 'integralbt',
1326
+ 'degree', 'twosuperior', 'periodcentered', 'divide',
1327
+ 'SF430000', 'SF240000', 'SF510000', 'afii10071',
1328
+ 'afii10101', 'SF390000', 'afii10103', 'afii10104',
1329
+ 'SF250000', 'SF500000', 'SF490000', 'SF380000',
1330
+ 'SF280000', 'afii10098', 'SF260000', 'SF360000',
1331
+ 'SF370000', 'SF420000', 'SF190000', 'afii10023',
1332
+ 'afii10053', 'SF230000', 'afii10055', 'afii10056',
1333
+ 'SF410000', 'SF450000', 'SF460000', 'SF400000',
1334
+ 'SF540000', 'afii10050', 'SF440000', 'copyright',
1335
+ 'afii10096', 'afii10065', 'afii10066', 'afii10088',
1336
+ 'afii10069', 'afii10070', 'afii10086', 'afii10068',
1337
+ 'afii10087', 'afii10074', 'afii10075', 'afii10076',
1338
+ 'afii10077', 'afii10078', 'afii10079', 'afii10080',
1339
+ 'afii10081', 'afii10097', 'afii10082', 'afii10083',
1340
+ 'afii10084', 'afii10085', 'afii10072', 'afii10067',
1341
+ 'afii10094', 'afii10093', 'afii10073', 'afii10090',
1342
+ 'afii10095', 'afii10091', 'afii10089', 'afii10092',
1343
+ 'afii10048', 'afii10017', 'afii10018', 'afii10040',
1344
+ 'afii10021', 'afii10022', 'afii10038', 'afii10020',
1345
+ 'afii10039', 'afii10026', 'afii10027', 'afii10028',
1346
+ 'afii10029', 'afii10030', 'afii10031', 'afii10032',
1347
+ 'afii10033', 'afii10049', 'afii10034', 'afii10035',
1348
+ 'afii10036', 'afii10037', 'afii10024', 'afii10019',
1349
+ 'afii10046', 'afii10045', 'afii10025', 'afii10042',
1350
+ 'afii10047', 'afii10043', 'afii10041', 'afii10044'
1351
+ ]
1352
+ }
1353
+
1354
+ def ReadAFM(file, map)
1355
+
1356
+ # Read a font metric file
1357
+ a = IO.readlines(file)
1358
+
1359
+ raise "File no found: #{file}" if a.size == 0
1360
+
1361
+ widths = {}
1362
+ fm = {}
1363
+ fix = { 'Edot' => 'Edotaccent', 'edot' => 'edotaccent',
1364
+ 'Idot' => 'Idotaccent',
1365
+ 'Zdot' => 'Zdotaccent', 'zdot' => 'zdotaccent',
1366
+ 'Odblacute' => 'Ohungarumlaut', 'odblacute' => 'ohungarumlaut',
1367
+ 'Udblacute' => 'Uhungarumlaut', 'udblacute' => 'uhungarumlaut',
1368
+ 'Gcedilla' => 'Gcommaaccent', 'gcedilla' => 'gcommaaccent',
1369
+ 'Kcedilla' => 'Kcommaaccent', 'kcedilla' => 'kcommaaccent',
1370
+ 'Lcedilla' => 'Lcommaaccent', 'lcedilla' => 'lcommaaccent',
1371
+ 'Ncedilla' => 'Ncommaaccent', 'ncedilla' => 'ncommaaccent',
1372
+ 'Rcedilla' => 'Rcommaaccent', 'rcedilla' => 'rcommaaccent',
1373
+ 'Scedilla' => 'Scommaaccent',' scedilla' => 'scommaaccent',
1374
+ 'Tcedilla' => 'Tcommaaccent',' tcedilla' => 'tcommaaccent',
1375
+ 'Dslash' => 'Dcroat', 'dslash' => 'dcroat',
1376
+ 'Dmacron' => 'Dcroat', 'dmacron' => 'dcroat',
1377
+ 'combininggraveaccent' => 'gravecomb',
1378
+ 'combininghookabove' => 'hookabovecomb',
1379
+ 'combiningtildeaccent' => 'tildecomb',
1380
+ 'combiningacuteaccent' => 'acutecomb',
1381
+ 'combiningdotbelow' => 'dotbelowcomb',
1382
+ 'dongsign' => 'dong'
1383
+ }
1384
+
1385
+ a.each do |line|
1386
+
1387
+ e = line.rstrip.split(' ')
1388
+ next if e.size < 2
1389
+
1390
+ code = e[0]
1391
+ param = e[1]
1392
+
1393
+ if code == 'C' then
1394
+
1395
+ # Character metrics
1396
+ cc = e[1].to_i
1397
+ w = e[4]
1398
+ gn = e[7]
1399
+
1400
+ gn = 'Euro' if gn[-4, 4] == '20AC'
1401
+
1402
+ if fix[gn] then
1403
+
1404
+ # Fix incorrect glyph name
1405
+ 0.upto(map.size - 1) do |i|
1406
+ if map[i] == fix[gn] then
1407
+ map[i] = gn
1408
+ end
1409
+ end
1410
+ end
1411
+
1412
+ if map.size == 0 then
1413
+ # Symbolic font: use built-in encoding
1414
+ widths[cc] = w
1415
+ else
1416
+ widths[gn] = w
1417
+ fm['CapXHeight'] = e[13].to_i if gn == 'X'
1418
+ end
1419
+
1420
+ fm['MissingWidth'] = w if gn == '.notdef'
1421
+
1422
+ elsif code == 'FontName' then
1423
+ fm['FontName'] = param
1424
+ elsif code == 'Weight' then
1425
+ fm['Weight'] = param
1426
+ elsif code == 'ItalicAngle' then
1427
+ fm['ItalicAngle'] = param.to_f
1428
+ elsif code == 'Ascender' then
1429
+ fm['Ascender'] = param.to_i
1430
+ elsif code == 'Descender' then
1431
+ fm['Descender'] = param.to_i
1432
+ elsif code == 'UnderlineThickness' then
1433
+ fm['UnderlineThickness'] = param.to_i
1434
+ elsif code == 'UnderlinePosition' then
1435
+ fm['UnderlinePosition'] = param.to_i
1436
+ elsif code == 'IsFixedPitch' then
1437
+ fm['IsFixedPitch'] = (param == 'true')
1438
+ elsif code == 'FontBBox' then
1439
+ fm['FontBBox'] = "[#{e[1]},#{e[2]},#{e[3]},#{e[4]}]"
1440
+ elsif code == 'CapHeight' then
1441
+ fm['CapHeight'] = param.to_i
1442
+ elsif code == 'StdVW' then
1443
+ fm['StdVW'] = param.to_i
1444
+ end
1445
+ end
1446
+
1447
+ raise 'FontName not found' unless fm['FontName']
1448
+
1449
+ if map.size > 0 then
1450
+ widths['.notdef'] = 600 unless widths['.notdef']
1451
+
1452
+ if (widths['Delta'] == nil) && widths['increment'] then
1453
+ widths['Delta'] = widths['increment']
1454
+ end
1455
+
1456
+ # Order widths according to map
1457
+ 0.upto(255) do |i|
1458
+ if widths[map[i]] == nil
1459
+ puts "Warning: character #{map[i]} is missing"
1460
+ widths[i] = widths['.notdef']
1461
+ else
1462
+ widths[i] = widths[map[i]]
1463
+ end
1464
+ end
1465
+ end
1466
+
1467
+ fm['Widths'] = widths
1468
+
1469
+ return fm
1470
+ end
1471
+
1472
+ def MakeFontDescriptor(fm, symbolic)
1473
+
1474
+ # Ascent
1475
+ asc = fm['Ascender'] ? fm['Ascender'] : 1000
1476
+ fd = "{\n 'Ascent' => '#{asc}'"
1477
+
1478
+ # Descent
1479
+ desc = fm['Descender'] ? fm['Descender'] : -200
1480
+ fd += ", 'Descent' => '#{desc}'"
1481
+
1482
+ # CapHeight
1483
+ if fm['CapHeight'] then
1484
+ ch = fm['CapHeight']
1485
+ elsif fm['CapXHeight']
1486
+ ch = fm['CapXHeight']
1487
+ else
1488
+ ch = asc
1489
+ end
1490
+ fd += ", 'CapHeight' => '#{ch}'"
1491
+
1492
+ # Flags
1493
+ flags = 0
1494
+
1495
+ if fm['IsFixedPitch'] then
1496
+ flags += 1 << 0
1497
+ end
1498
+
1499
+ if symbolic then
1500
+ flags += 1 << 2
1501
+ else
1502
+ flags += 1 << 5
1503
+ end
1504
+
1505
+ if fm['ItalicAngle'] && (fm['ItalicAngle'] != 0) then
1506
+ flags += 1 << 6
1507
+ end
1508
+
1509
+ fd += ",\n 'Flags' => '#{flags}'"
1510
+
1511
+ # FontBBox
1512
+ if fm['FontBBox'] then
1513
+ fbb = fm['FontBBox'].gsub(/,/, ' ')
1514
+ else
1515
+ fbb = "[0 #{desc - 100} 1000 #{asc + 100}]"
1516
+ end
1517
+
1518
+ fd += ", 'FontBBox' => '#{fbb}'"
1519
+
1520
+ # ItalicAngle
1521
+ ia = fm['ItalicAngle'] ? fm['ItalicAngle'] : 0
1522
+ fd += ",\n 'ItalicAngle' => '#{ia}'"
1523
+
1524
+ # StemV
1525
+ if fm['StdVW'] then
1526
+ stemv = fm['StdVW']
1527
+ elsif fm['Weight'] && (/bold|black/i =~ fm['Weight'])
1528
+ stemv = 120
1529
+ else
1530
+ stemv = 70
1531
+ end
1532
+
1533
+ fd += ", 'StemV' => '#{stemv}'"
1534
+
1535
+ # MissingWidth
1536
+ if fm['MissingWidth'] then
1537
+ fd += ", 'MissingWidth' => '#{fm['MissingWidth']}'"
1538
+ end
1539
+
1540
+ fd += "\n }"
1541
+ return fd
1542
+ end
1543
+
1544
+ def MakeWidthArray(fm)
1545
+
1546
+ # Make character width array
1547
+ s = " [\n "
1548
+
1549
+ cw = fm['Widths']
1550
+
1551
+ 0.upto(255) do |i|
1552
+ s += "%5d" % cw[i]
1553
+ s += "," if i != 255
1554
+ s += "\n " if (i % 8) == 7
1555
+ end
1556
+
1557
+ s += ']'
1558
+
1559
+ return s
1560
+ end
1561
+
1562
+ def MakeFontEncoding(map)
1563
+
1564
+ # Build differences from reference encoding
1565
+ ref = Charencodings['cp1252']
1566
+ s = ''
1567
+ last = 0
1568
+ 32.upto(255) do |i|
1569
+ if map[i] != ref[i] then
1570
+ if i != last + 1 then
1571
+ s += i.to_s + ' '
1572
+ end
1573
+ last = i
1574
+ s += '/' + map[i] + ' '
1575
+ end
1576
+ end
1577
+ return s.rstrip
1578
+ end
1579
+
1580
+ def ReadShort(f)
1581
+ a = f.read(2).unpack('n')
1582
+ return a[0]
1583
+ end
1584
+
1585
+ def ReadLong(f)
1586
+ a = f.read(4).unpack('N')
1587
+ return a[0]
1588
+ end
1589
+
1590
+ def CheckTTF(file)
1591
+
1592
+ rl = false
1593
+ pp = false
1594
+ e = false
1595
+
1596
+ # Check if font license allows embedding
1597
+ File.open(file, 'rb') do |f|
1598
+
1599
+ # Extract number of tables
1600
+ f.seek(4, IO::SEEK_CUR)
1601
+ nb = ReadShort(f)
1602
+ f.seek(6, IO::SEEK_CUR)
1603
+
1604
+ # Seek OS/2 table
1605
+ found = false
1606
+ 0.upto(nb - 1) do |i|
1607
+ if f.read(4) == 'OS/2' then
1608
+ found = true
1609
+ break
1610
+ end
1611
+
1612
+ f.seek(12, IO::SEEK_CUR)
1613
+ end
1614
+
1615
+ if ! found then
1616
+ return
1617
+ end
1618
+
1619
+ f.seek(4, IO::SEEK_CUR)
1620
+ offset = ReadLong(f)
1621
+ f.seek(offset, IO::SEEK_SET)
1622
+
1623
+ # Extract fsType flags
1624
+ f.seek(8, IO::SEEK_CUR)
1625
+ fsType = ReadShort(f)
1626
+
1627
+ rl = (fsType & 0x02) != 0
1628
+ pp = (fsType & 0x04) != 0
1629
+ e = (fsType & 0x08) != 0
1630
+ end
1631
+
1632
+ if rl && ( ! pp) && ( ! e) then
1633
+ puts 'Warning: font license does not allow embedding'
1634
+ end
1635
+ end
1636
+
1637
+ #
1638
+ # fontfile: path to TTF file (or empty string if not to be embedded)
1639
+ # afmfile: path to AFM file
1640
+ # enc: font encoding (or empty string for symbolic fonts)
1641
+ # patch: optional patch for encoding
1642
+ # type : font type if $fontfile is empty
1643
+ #
1644
+ def MakeFont(fontfile, afmfile, enc = 'cp1252', patch = {}, type = 'TrueType')
1645
+ # Generate a font definition file
1646
+ if (enc != nil) && (enc != '') then
1647
+ map = Charencodings[enc]
1648
+ patch.each { |cc, gn| map[cc] = gn }
1649
+ else
1650
+ map = []
1651
+ end
1652
+
1653
+ raise "Error: AFM file not found: #{afmfile}" unless File.exists?(afmfile)
1654
+
1655
+ fm = ReadAFM(afmfile, map)
1656
+
1657
+ if (enc != nil) && (enc != '') then
1658
+ diff = MakeFontEncoding(map)
1659
+ else
1660
+ diff = ''
1661
+ end
1662
+
1663
+ fd = MakeFontDescriptor(fm, (map.size == 0))
1664
+
1665
+ # Find font type
1666
+ if fontfile then
1667
+ ext = File.extname(fontfile).downcase.sub(/^\./, '')
1668
+
1669
+ if ext == 'ttf' then
1670
+ type = 'TrueType'
1671
+ elsif ext == 'pfb'
1672
+ type = 'Type1'
1673
+ else
1674
+ raise "Error: unrecognized font file extension: #{ext}"
1675
+ end
1676
+ else
1677
+ raise "Error: incorrect font type: #{type}" if (type != 'TrueType') && (type != 'Type1')
1678
+ end
1679
+ printf "type = #{type}\n"
1680
+ # Start generation
1681
+ s = "# #{fm['FontName']} font definition\n\n"
1682
+ s += "module FontDef\n"
1683
+ s += " def FontDef.type\n '#{type}'\n end\n"
1684
+ s += " def FontDef.name\n '#{fm['FontName']}'\n end\n"
1685
+ s += " def FontDef.desc\n #{fd}\n end\n"
1686
+
1687
+ if fm['UnderlinePosition'] == nil then
1688
+ fm['UnderlinePosition'] = -100
1689
+ end
1690
+
1691
+ if fm['UnderlineThickness'] == nil then
1692
+ fm['UnderlineThickness'] = 50
1693
+ end
1694
+
1695
+ s += " def FontDef.up\n #{fm['UnderlinePosition']}\n end\n"
1696
+ s += " def FontDef.ut\n #{fm['UnderlineThickness']}\n end\n"
1697
+
1698
+ w = MakeWidthArray(fm)
1699
+ s += " def FontDef.cw\n#{w}\n end\n"
1700
+
1701
+ s += " def FontDef.enc\n '#{enc}'\n end\n"
1702
+ s += " def FontDef.diff\n #{(diff == nil) || (diff == '') ? 'nil' : '\'' + diff + '\''}\n end\n"
1703
+
1704
+ basename = File.basename(afmfile, '.*')
1705
+
1706
+ if fontfile then
1707
+ # Embedded font
1708
+ if ! File.exist?(fontfile) then
1709
+ raise "Error: font file not found: #{fontfile}"
1710
+ end
1711
+
1712
+ if type == 'TrueType' then
1713
+ CheckTTF(fontfile)
1714
+ end
1715
+
1716
+ file = ''
1717
+ File.open(fontfile, 'rb') do |f|
1718
+ file = f.read()
1719
+ end
1720
+
1721
+ if type == 'Type1' then
1722
+ # Find first two sections and discard third one
1723
+ header = file[0] == 128
1724
+ file = file[6, file.length - 6] if header
1725
+
1726
+ pos = file.index('eexec')
1727
+ raise 'Error: font file does not seem to be valid Type1' if pos == nil
1728
+
1729
+ size1 = pos + 6
1730
+
1731
+ file = file[0, size1] + file[size1 + 6, file.length - (size1 + 6)] if header && file[size1] == 128
1732
+
1733
+ pos = file.index('00000000')
1734
+ raise 'Error: font file does not seem to be valid Type1' if pos == nil
1735
+
1736
+ size2 = pos - size1
1737
+ file = file[0, size1 + size2]
1738
+ end
1739
+
1740
+ if require 'zlib' then
1741
+ File.open(basename + '.z', 'wb') { |f| f.write(Zlib::Deflate.deflate(file)) }
1742
+ s += " def FontDef.file\n '#{basename}.z'\n end\n"
1743
+ puts "Font file compressed ('#{basename}.z')"
1744
+ else
1745
+ s += " def FontDef.file\n '#{File.basename(fontfile)}'\n end\n"
1746
+ puts 'Notice: font file could not be compressed (zlib not available)'
1747
+ end
1748
+
1749
+ if type == 'Type1' then
1750
+ s += " def FontDef.size1\n '#{size1}'\n end\n"
1751
+ s += " def FontDef.size2\n '#{size2}'\n end\n"
1752
+ else
1753
+ s += " def FontDef.originalsize\n '#{File.size(fontfile)}'\n end\n"
1754
+ end
1755
+
1756
+ else
1757
+ # Not embedded font
1758
+ s += " def FontDef.file\n ''\n end\n"
1759
+ end
1760
+
1761
+ s += "end\n"
1762
+ File.open(basename + '.rb', 'w') { |file| file.write(s)}
1763
+ puts "Font definition file generated (#{basename}.rb)"
1764
+ end
1765
+
1766
+
1767
+ if $0 == __FILE__ then
1768
+ if ARGV.length >= 3 then
1769
+ enc = ARGV[2]
1770
+ else
1771
+ enc = 'cp1252'
1772
+ end
1773
+
1774
+ if ARGV.length >= 4 then
1775
+ patch = ARGV[3]
1776
+ else
1777
+ patch = {}
1778
+ end
1779
+
1780
+ if ARGV.length >= 5 then
1781
+ type = ARGV[4]
1782
+ else
1783
+ type = 'TrueType'
1784
+ end
1785
+
1786
+ MakeFont(ARGV[0], ARGV[1], enc, patch, type)
1787
+ end