pdf_paradise 0.3.20

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