Encoding.h 39 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652
  1. /*
  2. * Copyright (c) 2022, Matthew Olsson <mattco@serenityos.org>
  3. *
  4. * SPDX-License-Identifier: BSD-2-Clause
  5. */
  6. #pragma once
  7. #include <AK/HashMap.h>
  8. #include <LibPDF/ObjectDerivatives.h>
  9. // Appendix D.2: Latin Character Set and Encodings
  10. #define ENUMERATE_LATIN_CHARACTER_SET(V) \
  11. V("A", A, 65, 65, 65, 65) \
  12. V("Æ", AE, 225, 174, 198, 198) \
  13. V("Á", Aacute, -1, 231, 193, 193) \
  14. V("Â", Acircumflex, -1, 229, 194, 194) \
  15. V("Ä", Adieresis, -1, 128, 196, 196) \
  16. V("À", Agrave, -1, 203, 192, 192) \
  17. V("Å", Aring, -1, 129, 197, 197) \
  18. V("Ã", Atilde, -1, 204, 195, 195) \
  19. V("B", B, 66, 66, 66, 66) \
  20. V("C", C, 67, 67, 67, 67) \
  21. V("Ç", Ccedilla, -1, 130, 199, 199) \
  22. V("D", D, 68, 68, 68, 68) \
  23. V("E", E, 69, 69, 69, 69) \
  24. V("É", Eacute, -1, 131, 201, 201) \
  25. V("Ê", Ecircumflex, -1, 230, 202, 202) \
  26. V("Ë", Edieresis, -1, 232, 203, 203) \
  27. V("È", Egrave, -1, 233, 200, 200) \
  28. V("Ð", Eth, -1, -1, 208, 208) \
  29. V("€", Euro, -1, -1, 128, 160) /* FIXME: Note 1 */ \
  30. V("F", F, 70, 70, 70, 70) \
  31. V("G", G, 71, 71, 71, 71) \
  32. V("H", H, 72, 72, 72, 72) \
  33. V("I", I, 73, 73, 73, 73) \
  34. V("Í", Iacute, -1, 234, 205, 205) \
  35. V("Î", Icircumflex, -1, 235, 206, 206) \
  36. V("Ï", Idieresis, -1, 236, 207, 207) \
  37. V("Ì", Igrave, -1, 237, 204, 204) \
  38. V("J", J, 74, 74, 74, 74) \
  39. V("K", K, 75, 75, 75, 75) \
  40. V("L", L, 76, 76, 76, 76) \
  41. V("Ł", Lslash, 232, -1, -1, 149) \
  42. V("M", M, 77, 77, 77, 77) \
  43. V("N", N, 78, 78, 78, 78) \
  44. V("Ñ", Ntilde, -1, 132, 209, 209) \
  45. V("O", O, 79, 79, 79, 79) \
  46. V("Œ", OE, 234, 206, 140, 150) \
  47. V("Ó", Oacute, -1, 238, 211, 211) \
  48. V("Ô", Ocircumflex, -1, 239, 212, 212) \
  49. V("Ö", Odieresis, -1, 133, 214, 214) \
  50. V("Ò", Ograve, -1, 241, 210, 210) \
  51. V("Ø", Oslash, 233, 175, 216, 216) \
  52. V("Õ", Otilde, -1, 205, 213, 213) \
  53. V("P", P, 80, 80, 80, 80) \
  54. V("Q", Q, 81, 81, 81, 81) \
  55. V("R", R, 82, 82, 82, 82) \
  56. V("S", S, 83, 83, 83, 83) \
  57. V("Š", Scaron, -1, -1, 138, 151) \
  58. V("T", T, 84, 84, 84, 84) \
  59. V("Þ", Thorn, -1, -1, 222, 222) \
  60. V("U", U, 85, 85, 85, 85) \
  61. V("Ú", Uacute, -1, 242, 218, 218) \
  62. V("Û", Ucircumflex, -1, 243, 219, 219) \
  63. V("Ü", Udieresis, -1, 134, 220, 220) \
  64. V("Ù", Ugrave, -1, 244, 217, 217) \
  65. V("V", V, 86, 86, 86, 86) \
  66. V("W", W, 87, 87, 87, 87) \
  67. V("X", X, 88, 88, 88, 88) \
  68. V("Y", Y, 89, 89, 89, 89) \
  69. V("Ý", Yacute, -1, -1, 221, 221) \
  70. V("Ÿ", Ydieresis, -1, 217, 159, 152) \
  71. V("Z", Z, 90, 90, 90, 90) \
  72. V("Ž", Zcaron, -1, -1, 142, 153) /* FIXME: Note 2 */ \
  73. V("a", a, 97, 97, 97, 97) \
  74. V("á", aacute, -1, 135, 225, 225) \
  75. V("â", acircumflex, -1, 137, 226, 226) \
  76. V("́", acute, 194, 171, 180, 180) \
  77. V("ä", adieresis, -1, 138, 228, 228) \
  78. V("æ", ae, 241, 190, 230, 230) \
  79. V("à", agrave, -1, 136, 224, 224) \
  80. V("&", ampersand, 38, 38, 38, 38) \
  81. V("å", aring, -1, 140, 229, 229) \
  82. V("^", asciicircum, 94, 94, 94, 94) \
  83. V("~", asciitilde, 126, 126, 126, 126) \
  84. V("*", asterisk, 42, 42, 42, 42) \
  85. V("@", at, 64, 64, 64, 64) \
  86. V("ã", atilde, -1, 139, 227, 227) \
  87. V("b", b, 98, 98, 98, 98) \
  88. V("\\", backslash, 92, 92, 92, 92) \
  89. V("|", bar, 124, 124, 124, 124) \
  90. V("{", braceleft, 123, 123, 123, 123) \
  91. V("}", braceright, 125, 125, 125, 125) \
  92. V("[", bracketleft, 91, 91, 91, 91) \
  93. V("]", bracketright, 93, 93, 93, 93) \
  94. V(" ̆", breve, 198, 249, -1, 24) \
  95. V("¦", brokenbar, -1, -1, 166, 166) \
  96. V("•", bullet, 183, 165, 149, 128) /* FIXME: Note 3 */ \
  97. V("c", c, 99, 99, 99, 99) \
  98. V("ˇ", caron, 207, 255, -1, 25) \
  99. V("ç", ccedilla, -1, 141, 231, 231) \
  100. V("̧", cedilla, 203, 252, 184, 184) \
  101. V("¢", cent, 162, 162, 162, 162) \
  102. V("ˆ", circumflex, 195, 246, 136, 26) \
  103. V(":", colon, 58, 58, 58, 58) \
  104. V(",", comma, 44, 44, 44, 44) \
  105. V("©", copyright, -1, 169, 169, 169) \
  106. V("¤", currency, 168, 219, 164, 164) /* FIXME: Note 1 */ \
  107. V("d", d, 100, 100, 100, 100) \
  108. V("†", dagger, 178, 160, 134, 129) \
  109. V("‡", daggerdbl, 179, 224, 135, 130) \
  110. V("°", degree, -1, 161, 176, 176) \
  111. V("̈", dieresis, 200, 172, 168, 168) \
  112. V("÷", divide, -1, 214, 247, 247) \
  113. V("$", dollar, 36, 36, 36, 36) \
  114. V("̇", dotaccent, 199, 250, -1, 27) \
  115. V("ı", dotlessi, 245, 245, -1, 154) \
  116. V("e", e, 101, 101, 101, 101) \
  117. V("é", eacute, -1, 142, 233, 233) \
  118. V("ê", ecircumflex, -1, 144, 234, 234) \
  119. V("ë", edieresis, -1, 145, 235, 235) \
  120. V("è", egrave, -1, 143, 232, 232) \
  121. V("8", eight, 56, 56, 56, 56) \
  122. V("…", ellipsis, 188, 201, 133, 131) \
  123. V("—", emdash, 208, 209, 151, 132) \
  124. V("–", endash, 177, 208, 150, 133) \
  125. V("=", equal, 61, 61, 61, 61) \
  126. V("ð", eth, -1, -1, 240, 240) \
  127. V("!", exclam, 33, 33, 33, 33) \
  128. V("¡", exclamdown, 161, 193, 161, 161) \
  129. V("f", f, 102, 102, 102, 102) \
  130. V("fi", fi, 174, 222, -1, 147) \
  131. V("5", five, 53, 53, 53, 53) \
  132. V("fl", fl, 175, 223, -1, 148) \
  133. V("ƒ", florin, 166, 196, 131, 134) \
  134. V("4", four, 52, 52, 52, 52) \
  135. V("⁄", fraction, 164, 218, -1, 135) \
  136. V("g", g, 103, 103, 103, 103) \
  137. V("ß", germandbls, 251, 167, 223, 223) \
  138. V("`", grave, 193, 96, 96, 96) \
  139. V(">", greater, 62, 62, 62, 62) \
  140. V("«", guillemotleft, 171, 199, 171, 171) /* FIXME: Note 4 */ \
  141. V("»", guillemotright, 187, 200, 187, 187) /* FIXME: Note 4 */ \
  142. V("‹", guilsinglleft, 172, 220, 139, 136) \
  143. V("›", guilsinglright, 173, 221, 155, 137) \
  144. V("h", h, 104, 104, 104, 104) \
  145. V("̋", hungarumlaut, 205, 253, -1, 28) \
  146. V("-", hyphen, 45, 45, 45, 45) /* FIXME: Note 5 */ \
  147. V("i", i, 105, 105, 105, 105) \
  148. V("í", iacute, -1, 146, 237, 237) \
  149. V("î", icircumflex, -1, 148, 238, 238) \
  150. V("ï", idieresis, -1, 149, 239, 239) \
  151. V("ì", igrave, -1, 147, 236, 236) \
  152. V("j", j, 106, 106, 106, 106) \
  153. V("k", k, 107, 107, 107, 107) \
  154. V("l", l, 108, 108, 108, 108) \
  155. V("<", less, 60, 60, 60, 60) \
  156. V("¬", logicalnot, -1, 194, 172, 172) \
  157. V("ł", lslash, 248, -1, -1, 155) \
  158. V("m", m, 109, 109, 109, 109) \
  159. V("̄", macron, 197, 248, 175, 175) \
  160. V("−", minus, -1, -1, -1, 138) \
  161. V("μ", mu, -1, 181, 181, 181) \
  162. V("×", multiply, -1, -1, 215, 215) \
  163. V("n", n, 110, 110, 110, 110) \
  164. V("9", nine, 57, 57, 57, 57) \
  165. V("ñ", ntilde, -1, 150, 241, 241) \
  166. V("#", numbersign, 35, 35, 35, 35) \
  167. V("o", o, 111, 111, 111, 111) \
  168. V("ó", oacute, -1, 151, 243, 243) \
  169. V("ô", ocircumflex, -1, 153, 244, 244) \
  170. V("ö", odieresis, -1, 154, 246, 246) \
  171. V("œ", oe, 250, 207, 156, 156) \
  172. V("̨", ogonek, 206, 254, -1, 29) \
  173. V("ò", ograve, -1, 152, 242, 242) \
  174. V("1", one, 49, 49, 49, 49) \
  175. V("½", onehalf, -1, -1, 189, 189) \
  176. V("¼", onequarter, -1, -1, 188, 188) \
  177. V("¹", onesuperior, -1, -1, 185, 185) \
  178. V("ª", ordfeminine, 227, 187, 170, 170) \
  179. V("º", ordmasculine, 235, 188, 186, 186) \
  180. V("ø", oslash, 249, 191, 248, 248) \
  181. V("õ", otilde, -1, 155, 245, 245) \
  182. V("p", p, 112, 112, 112, 112) \
  183. V("¶", paragraph, 182, 166, 182, 182) \
  184. V("(", parenleft, 40, 40, 40, 40) \
  185. V(")", parenright, 41, 41, 41, 41) \
  186. V("%", percent, 37, 37, 37, 37) \
  187. V(".", period, 46, 46, 46, 46) \
  188. V("·", periodcentered, 180, 225, 183, 183) \
  189. V("‰", perthousand, 189, 228, 137, 139) \
  190. V("+", plus, 43, 43, 43, 43) \
  191. V("±", plusminus, -1, 177, 177, 177) \
  192. V("q", q, 113, 113, 113, 113) \
  193. V("?", question, 63, 63, 63, 63) \
  194. V("¿", questiondown, 191, 192, 191, 191) \
  195. V("\"", quotedbl, 34, 34, 34, 34) \
  196. V("„", quotedblbase, 185, 227, 132, 140) \
  197. V("“", quotedblleft, 170, 210, 147, 141) \
  198. V("”", quotedblright, 186, 211, 148, 142) \
  199. V("‘", quoteleft, 96, 212, 145, 143) \
  200. V("’", quoteright, 39, 213, 146, 144) \
  201. V("‚", quotesinglbase, 184, 226, 130, 145) \
  202. V(",", quotesingle, 169, 39, 39, 39) \
  203. V("r", r, 114, 114, 114, 114) \
  204. V("®", registered, -1, 168, 174, 174) \
  205. V("̊", ring, 202, 251, -1, 30) \
  206. V("s", s, 115, 115, 115, 115) \
  207. V("š", scaron, -1, -1, 154, 157) \
  208. V("§", section, 167, 164, 167, 167) \
  209. V(";", semicolon, 59, 59, 59, 59) \
  210. V("7", seven, 55, 55, 55, 55) \
  211. V("6", six, 54, 54, 54, 54) \
  212. V("/", slash, 47, 47, 47, 47) \
  213. V(" ", space, 32, 32, 32, 32) /* FIXME: Note 6 */ \
  214. V("£", sterling, 163, 163, 163, 163) \
  215. V("t", t, 116, 116, 116, 116) \
  216. V("þ", thorn, -1, -1, 254, 254) \
  217. V("3", three, 51, 51, 51, 51) \
  218. V("¾", threequarters, -1, -1, 190, 190) \
  219. V("³", threesuperior, -1, -1, 179, 179) \
  220. V("̃", tilde, 196, 247, 152, 31) \
  221. V("™", trademark, -1, 170, 153, 146) \
  222. V("2", two, 50, 50, 50, 50) \
  223. V("²", twosuperior, -1, -1, 178, 178) \
  224. V("u", u, 117, 117, 117, 117) \
  225. V("ú", uacute, -1, 156, 250, 250) \
  226. V("û", ucircumflex, -1, 158, 251, 251) \
  227. V("ü", udieresis, -1, 159, 252, 252) \
  228. V("ù", ugrave, -1, 157, 249, 249) \
  229. V("_", underscore, 95, 95, 95, 95) \
  230. V("v", v, 118, 118, 118, 118) \
  231. V("w", w, 119, 119, 119, 119) \
  232. V("x", x, 120, 120, 120, 120) \
  233. V("y", y, 121, 121, 121, 121) \
  234. V("ý", yacute, -1, -1, 253, 253) \
  235. V("ÿ", ydieresis, -1, 216, 255, 255) \
  236. V("¥", yen, 165, 180, 165, 165) \
  237. V("z", z, 122, 122, 122, 122) \
  238. V("ž", zcaron, -1, -1, 158, 158) /* FIXME: Note 2 */ \
  239. V("0", zero, 48, 48, 48, 48)
  240. // https://help.adobe.com/en_US/framemaker/2015/using/using-framemaker-2015/frm_references_re/frm_character_sets_cs/Symbol_and_ZapfDingbats_character_sets-.htm
  241. #define ENUMERATE_SYMBOL_CHARACTER_SET(V) \
  242. V("Α", Alpha, 65) \
  243. V("Β", Beta, 66) \
  244. V("Χ", Chi, 67) \
  245. V("Δ", Delta, 68) \
  246. V("Ε", Epsilon, 69) \
  247. V("Η", Eta, 72) \
  248. V("€", Euro, 160) \
  249. V("Γ", Gamma, 71) \
  250. V("ℑ", Ifraktur, 193) \
  251. V("Ι", Iota, 73) \
  252. V("Κ", Kappa, 75) \
  253. V("Λ", Lambda, 76) \
  254. V("Μ", Mu, 77) \
  255. V("Ν", Nu, 78) \
  256. V("Ω", Omega, 87) \
  257. V("Ο", Omicron, 79) \
  258. V("Φ", Phi, 70) \
  259. V("Π", Pi, 80) \
  260. V("Ψ", Psi, 89) \
  261. V("ℜ", Rfraktur, 194) \
  262. V("Ρ", Rho, 82) \
  263. V("Σ", Sigma, 83) \
  264. V("Τ", Tau, 84) \
  265. V("Θ", Theta, 81) \
  266. V("Υ", Upsilon, 85) \
  267. V("ϒ", Upsilon1, 161) \
  268. V("Ξ", Xi, 88) \
  269. V("Ζ", Zeta, 90) \
  270. V("ℵ", aleph, 192) \
  271. V("α", alpha, 97) \
  272. V("&", ampersand, 38) \
  273. V("∠", angle, 208) \
  274. V("〈", angleleft, 225) \
  275. V("〉", angleright, 241) \
  276. V("≈", approxequal, 187) \
  277. V("↔", arrowboth, 171) \
  278. V("⇔", arrowdblboth, 219) \
  279. V("⇓", arrowdbldown, 223) \
  280. V("⇐", arrowdblleft, 220) \
  281. V("⇒", arrowdblright, 222) \
  282. V("⇑", arrowdblup, 221) \
  283. V("↓", arrowdown, 175) \
  284. V("", arrowhorizex, 190) \
  285. V("←", arrowleft, 172) \
  286. V("→", arrowright, 174) \
  287. V("↑", arrowup, 173) \
  288. V("", arrowvertex, 189) \
  289. V("∗", asteriskmath, 42) \
  290. V("|", bar, 124) \
  291. V("β", beta, 98) \
  292. V("{", braceleft, 123) \
  293. V("}", braceright, 125) \
  294. V("", bracelefttp, 236) \
  295. V("", braceleftmid, 237) \
  296. V("", braceleftbt, 238) \
  297. V("", bracerighttp, 252) \
  298. V("", bracerightmid, 253) \
  299. V("", bracerightbt, 254) \
  300. V("", braceex, 239) \
  301. V("[", bracketleft, 91) \
  302. V("]", bracketright, 93) \
  303. V("", bracketlefttp, 233) \
  304. V("", bracketleftex, 234) \
  305. V("", bracketleftbt, 235) \
  306. V("", bracketrighttp, 249) \
  307. V("", bracketrightex, 250) \
  308. V("", bracketrightbt, 251) \
  309. V("•", bullet, 183) \
  310. V("↵", carriagereturn, 191) \
  311. V("χ", chi, 99) \
  312. V("⊗", circlemultiply, 196) \
  313. V("⊕", circleplus, 197) \
  314. V("♣", club, 167) \
  315. V(":", colon, 58) \
  316. V(",", comma, 44) \
  317. V("≅", congruent, 64) \
  318. V("", copyrightsans, 227) \
  319. V("©", copyrightserif, 211) \
  320. V("°", degree, 176) \
  321. V("δ", delta, 100) \
  322. V("♦", diamond, 168) \
  323. V("÷", divide, 184) \
  324. V("⋅", dotmath, 215) \
  325. V("8", eight, 56) \
  326. V("∈", element, 206) \
  327. V("…", ellipsis, 188) \
  328. V("∅", emptyset, 198) \
  329. V("ε", epsilon, 101) \
  330. V("=", equal, 61) \
  331. V("≡", equivalence, 186) \
  332. V("η", eta, 104) \
  333. V("!", exclam, 33) \
  334. V("∃", existential, 36) \
  335. V("5", five, 53) \
  336. V("ƒ", florin, 166) \
  337. V("4", four, 52) \
  338. V("⁄", fraction, 164) \
  339. V("γ", gamma, 103) \
  340. V("∇", gradient, 209) \
  341. V(">", greater, 62) \
  342. V("≥", greaterequal, 179) \
  343. V("♥", heart, 169) \
  344. V("∞", infinity, 165) \
  345. V("`", integral, 242) \
  346. V("∫", integraltp, 243) \
  347. V("", integralex, 244) \
  348. V("⌡", integralbt, 245) \
  349. V("∩", intersection, 199) \
  350. V("ι", iota, 105) \
  351. V("κ", kappa, 107) \
  352. V("λ", lambda, 108) \
  353. V("<", less, 60) \
  354. V("≤", lessequal, 163) \
  355. V("∧", logicaland, 217) \
  356. V("¬", logicalnot, 216) \
  357. V("∨", logicalor, 218) \
  358. V("⋄", lozenge, 224) \
  359. V("−", minus, 45) \
  360. V("′", minute, 162) \
  361. V("μ", mu, 109) \
  362. V("×", multiply, 180) \
  363. V("9", nine, 57) \
  364. V("∉", notelement, 207) \
  365. V("≠", notequal, 185) \
  366. V("⊄", notsubset, 203) \
  367. V("ν", nu, 110) \
  368. V("#", numbersign, 35) \
  369. V("ω", omega, 119) \
  370. V("v", omega1, 118) \
  371. V("ϖ", omicron, 111) \
  372. V("1", one, 49) \
  373. V("(", parenleft, 40) \
  374. V(")", parenright, 41) \
  375. V("", parenlefttp, 230) \
  376. V("", parenleftex, 231) \
  377. V("", parenleftbt, 232) \
  378. V("", parenrighttp, 246) \
  379. V("", parenrightex, 247) \
  380. V("", parenrightbt, 248) \
  381. V("∂", partialdiff, 182) \
  382. V("%", percent, 37) \
  383. V(".", period, 46) \
  384. V("⊥", perpendicular, 94) \
  385. V("φ", phi, 102) \
  386. V("ϕ", phi1, 106) \
  387. V("π", pi, 112) \
  388. V("+", plus, 43) \
  389. V("±", plusminus, 177) \
  390. V("∏", product, 213) \
  391. V("⊂", propersubset, 204) \
  392. V("⊃", propersuperset, 201) \
  393. V("∝", proportional, 181) \
  394. V("ψ", psi, 121) \
  395. V("?", question, 63) \
  396. V("√", radical, 214) \
  397. V("?", radicalex, 96) /* FIXME: What is this character, ? */ \
  398. V("⊆", reflexsubset, 205) \
  399. V("⊇", reflexsuperset, 202) \
  400. V("", registersans, 226) \
  401. V("®", registerserif, 210) \
  402. V("ρ", rho, 114) \
  403. V("″", second, 178) \
  404. V(";", semicolon, 59) \
  405. V("7", seven, 55) \
  406. V("σ", sigma, 115) \
  407. V("ς", sigma1, 86) \
  408. V("∼", similar, 126) \
  409. V("6", six, 54) \
  410. V("/", slash, 47) \
  411. V(" ", space, 32) \
  412. V("¤", spade, 170) \
  413. V("∋", suchthat, 39) \
  414. V("∑", summation, 229) \
  415. V("τ", tau, 116) \
  416. V("∴", therefore, 92) \
  417. V("θ", theta, 113) \
  418. V("ϑ", theta1, 74) \
  419. V("3", three, 51) \
  420. V("", trademarksans, 228) \
  421. V("™", trademarkserif, 212) \
  422. V("2", two, 50) \
  423. V("_", underscore, 95) \
  424. V("∪", union, 200) \
  425. V("∀", universal, 34) \
  426. V("υ", upsilon, 117) \
  427. V("℘", weierstrass, 195) \
  428. V("ξ", xi, 120) \
  429. V("0", zero, 48) \
  430. V("ζ", zeta, 15)
  431. #define ENUMERATE_ZAPF_DINGBATS_CHARACTER_SET(V) \
  432. V(" ", space, 040) \
  433. V("✁", a1, 041) \
  434. V("✂", a2, 042) \
  435. V("✃", a202, 043) \
  436. V("✄", a3, 044) \
  437. V("☎", a4, 045) \
  438. V("✆", a5, 046) \
  439. V("✇", a119, 047) \
  440. V("✈", a118, 050) \
  441. V("✉", a117, 051) \
  442. V("☛", a11, 052) \
  443. V("☞", a12, 053) \
  444. V("✌", a13, 054) \
  445. V("✍", a14, 055) \
  446. V("✎", a15, 056) \
  447. V("✏", a16, 057) \
  448. V("✐", a105, 060) \
  449. V("✑", a17, 061) \
  450. V("✒", a18, 062) \
  451. V("✓", a19, 063) \
  452. V("✔", a20, 064) \
  453. V("✕", a21, 065) \
  454. V("✖", a22, 066) \
  455. V("✗", a23, 067) \
  456. V("✘", a24, 070) \
  457. V("✙", a25, 071) \
  458. V("✚", a26, 072) \
  459. V("✛", a27, 073) \
  460. V("✜", a28, 074) \
  461. V("✝", a6, 075) \
  462. V("✞", a7, 076) \
  463. V("✟", a8, 077) \
  464. V("✠", a9, 100) \
  465. V("✡", a10, 101) \
  466. V("✢", a29, 102) \
  467. V("✣", a30, 103) \
  468. V("✤", a31, 104) \
  469. V("✥", a32, 105) \
  470. V("✦", a33, 106) \
  471. V("✧", a34, 107) \
  472. V("★", a35, 110) \
  473. V("✩", a36, 111) \
  474. V("✪", a37, 112) \
  475. V("✫", a38, 113) \
  476. V("✬", a39, 114) \
  477. V("✭", a40, 115) \
  478. V("✮", a41, 116) \
  479. V("✯", a42, 117) \
  480. V("✰", a43, 120) \
  481. V("✱", a44, 121) \
  482. V("✲", a45, 122) \
  483. V("✳", a46, 123) \
  484. V("✴", a47, 124) \
  485. V("✵", a48, 125) \
  486. V("✶", a49, 126) \
  487. V("✷", a50, 127) \
  488. V("✸", a51, 130) \
  489. V("✹", a52, 131) \
  490. V("✺", a53, 132) \
  491. V("✻", a54, 133) \
  492. V("✼", a55, 134) \
  493. V("✽", a56, 135) \
  494. V("✾", a57, 136) \
  495. V("✿", a58, 137) \
  496. V("❀", a59, 140) \
  497. V("❁", a60, 141) \
  498. V("❂", a61, 142) \
  499. V("❃", a62, 143) \
  500. V("❄", a63, 144) \
  501. V("❅", a64, 145) \
  502. V("❆", a65, 146) \
  503. V("❇", a66, 147) \
  504. V("❈", a67, 150) \
  505. V("❉", a68, 151) \
  506. V("❊", a69, 152) \
  507. V("❋", a70, 153) \
  508. V("●", a71, 154) \
  509. V("❍", a72, 155) \
  510. V("■", a73, 156) \
  511. V("❏", a74, 157) \
  512. V("❐", a203, 160) \
  513. V("❑", a75, 161) \
  514. V("❒", a204, 162) \
  515. V("▲", a76, 163) \
  516. V("▼", a77, 164) \
  517. V("◆", a78, 165) \
  518. V("❖", a79, 166) \
  519. V("◗", a81, 167) \
  520. V("❘", a82, 170) \
  521. V("❙", a83, 171) \
  522. V("❚", a84, 172) \
  523. V("❛", a97, 173) \
  524. V("❜", a98, 174) \
  525. V("❝", a99, 175) \
  526. V("❞", a100, 176) \
  527. V("❡", a101, 241) \
  528. V("❢", a102, 242) \
  529. V("❣", a103, 243) \
  530. V("❤", a104, 244) \
  531. V("❥", a106, 245) \
  532. V("❦", a107, 246) \
  533. V("❧", a108, 247) \
  534. V("♣", a112, 250) \
  535. V("♦", a111, 251) \
  536. V("♥", a110, 252) \
  537. V("♠", a109, 253) \
  538. V("①", a120, 254) \
  539. V("②", a121, 255) \
  540. V("③", a122, 256) \
  541. V("④", a123, 257) \
  542. V("⑤", a124, 260) \
  543. V("⑥", a125, 261) \
  544. V("⑦", a126, 262) \
  545. V("⑧", a127, 263) \
  546. V("⑨", a128, 264) \
  547. V("⑩", a129, 265) \
  548. V("❶", a130, 266) \
  549. V("❷", a131, 267) \
  550. V("❸", a132, 270) \
  551. V("❹", a133, 271) \
  552. V("❺", a134, 272) \
  553. V("❻", a135, 273) \
  554. V("❼", a136, 274) \
  555. V("❽", a137, 275) \
  556. V("❾", a138, 276) \
  557. V("❿", a139, 277) \
  558. V("➀", a140, 300) \
  559. V("➁", a141, 301) \
  560. V("➂", a142, 302) \
  561. V("➃", a143, 303) \
  562. V("➄", a144, 304) \
  563. V("➅", a145, 305) \
  564. V("➆", a146, 306) \
  565. V("➇", a147, 307) \
  566. V("➈", a148, 310) \
  567. V("➉", a149, 311) \
  568. V("➊", a150, 312) \
  569. V("➋", a151, 313) \
  570. V("➌", a152, 314) \
  571. V("➍", a153, 315) \
  572. V("➎", a154, 316) \
  573. V("➏", a155, 317) \
  574. V("➐", a156, 320) \
  575. V("➑", a157, 321) \
  576. V("➒", a158, 322) \
  577. V("➓", a159, 323) \
  578. V("➔", a160, 324) \
  579. V("→", a161, 325) \
  580. V("↔", a163, 326) \
  581. V("↕", a164, 327) \
  582. V("➘", a196, 330) \
  583. V("➙", a165, 331) \
  584. V("➚", a192, 332) \
  585. V("➛", a166, 333) \
  586. V("➜", a167, 334) \
  587. V("➝", a168, 335) \
  588. V("➞", a169, 336) \
  589. V("➟", a170, 337) \
  590. V("➠", a171, 340) \
  591. V("➡", a172, 341) \
  592. V("➢", a173, 342) \
  593. V("➣", a162, 343) \
  594. V("➤", a174, 344) \
  595. V("➥", a175, 345) \
  596. V("➦", a176, 346) \
  597. V("➧", a177, 347) \
  598. V("➨", a178, 350) \
  599. V("➩", a179, 351) \
  600. V("➪", a193, 352) \
  601. V("➫", a180, 353) \
  602. V("➬", a199, 354) \
  603. V("➭", a181, 355) \
  604. V("➮", a200, 356) \
  605. V("➯", a182, 357) \
  606. V("➱", a201, 361) \
  607. V("➲", a183, 362) \
  608. V("➳", a184, 363) \
  609. V("➴", a197, 364) \
  610. V("➵", a185, 365) \
  611. V("➶", a194, 366) \
  612. V("➷", a198, 367) \
  613. V("➸", a186, 370) \
  614. V("➹", a195, 371) \
  615. V("➺", a187, 372) \
  616. V("➻", a188, 373) \
  617. V("➼", a189, 374) \
  618. V("➽", a190, 375) \
  619. V("➾", a191, 376)
  620. namespace PDF {
  621. struct CharDescriptor {
  622. String name;
  623. u32 code_point;
  624. };
  625. class Encoding : public RefCounted<Encoding> {
  626. public:
  627. static PDFErrorOr<NonnullRefPtr<Encoding>> from_object(Document*, NonnullRefPtr<Object> const&);
  628. static NonnullRefPtr<Encoding> standard_encoding();
  629. static NonnullRefPtr<Encoding> mac_encoding();
  630. static NonnullRefPtr<Encoding> windows_encoding();
  631. static NonnullRefPtr<Encoding> pdf_doc_encoding();
  632. static NonnullRefPtr<Encoding> symbol_encoding();
  633. static NonnullRefPtr<Encoding> zapf_encoding();
  634. HashMap<u16, CharDescriptor> const& descriptors() const { return m_descriptors; }
  635. CharDescriptor const& get_char_code_descriptor(u16 char_code) const;
  636. protected:
  637. HashMap<u16, CharDescriptor> m_descriptors;
  638. };
  639. }