Encoding.h 37 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655
  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(FN) \
  11. FN(A, 65, 65, 65, 65) \
  12. FN(AE, 225, 174, 198, 198) \
  13. FN(Aacute, -1, 231, 193, 193) \
  14. FN(Acircumflex, -1, 229, 194, 194) \
  15. FN(Adieresis, -1, 128, 196, 196) \
  16. FN(Agrave, -1, 203, 192, 192) \
  17. FN(Aring, -1, 129, 197, 197) \
  18. FN(Atilde, -1, 204, 195, 195) \
  19. FN(B, 66, 66, 66, 66) \
  20. FN(C, 67, 67, 67, 67) \
  21. FN(Ccedilla, -1, 130, 199, 199) \
  22. FN(D, 68, 68, 68, 68) \
  23. FN(E, 69, 69, 69, 69) \
  24. FN(Eacute, -1, 131, 201, 201) \
  25. FN(Ecircumflex, -1, 230, 202, 202) \
  26. FN(Edieresis, -1, 232, 203, 203) \
  27. FN(Egrave, -1, 233, 200, 200) \
  28. FN(Eth, -1, -1, 208, 208) \
  29. FN(Euro, -1, -1, 128, 160) /* FIXME: Note 1 */ \
  30. FN(F, 70, 70, 70, 70) \
  31. FN(G, 71, 71, 71, 71) \
  32. FN(H, 72, 72, 72, 72) \
  33. FN(I, 73, 73, 73, 73) \
  34. FN(Iacute, -1, 234, 205, 205) \
  35. FN(Icircumflex, -1, 235, 206, 206) \
  36. FN(Idieresis, -1, 236, 207, 207) \
  37. FN(Igrave, -1, 237, 204, 204) \
  38. FN(J, 74, 74, 74, 74) \
  39. FN(K, 75, 75, 75, 75) \
  40. FN(L, 76, 76, 76, 76) \
  41. FN(Lslash, 232, -1, -1, 149) \
  42. FN(M, 77, 77, 77, 77) \
  43. FN(N, 78, 78, 78, 78) \
  44. FN(Ntilde, -1, 132, 209, 209) \
  45. FN(O, 79, 79, 79, 79) \
  46. FN(OE, 234, 206, 140, 150) \
  47. FN(Oacute, -1, 238, 211, 211) \
  48. FN(Ocircumflex, -1, 239, 212, 212) \
  49. FN(Odieresis, -1, 133, 214, 214) \
  50. FN(Ograve, -1, 241, 210, 210) \
  51. FN(Oslash, 233, 175, 216, 216) \
  52. FN(Otilde, -1, 205, 213, 213) \
  53. FN(P, 80, 80, 80, 80) \
  54. FN(Q, 81, 81, 81, 81) \
  55. FN(R, 82, 82, 82, 82) \
  56. FN(S, 83, 83, 83, 83) \
  57. FN(Scaron, -1, -1, 138, 151) \
  58. FN(T, 84, 84, 84, 84) \
  59. FN(Thorn, -1, -1, 222, 222) \
  60. FN(U, 85, 85, 85, 85) \
  61. FN(Uacute, -1, 242, 218, 218) \
  62. FN(Ucircumflex, -1, 243, 219, 219) \
  63. FN(Udieresis, -1, 134, 220, 220) \
  64. FN(Ugrave, -1, 244, 217, 217) \
  65. FN(V, 86, 86, 86, 86) \
  66. FN(W, 87, 87, 87, 87) \
  67. FN(X, 88, 88, 88, 88) \
  68. FN(Y, 89, 89, 89, 89) \
  69. FN(Yacute, -1, -1, 221, 221) \
  70. FN(Ydieresis, -1, 217, 159, 152) \
  71. FN(Z, 90, 90, 90, 90) \
  72. FN(Zcaron, -1, -1, 142, 153) /* FIXME: Note 2 */ \
  73. FN(a, 97, 97, 97, 97) \
  74. FN(aacute, -1, 135, 225, 225) \
  75. FN(acircumflex, -1, 137, 226, 226) \
  76. FN(acute, 194, 171, 180, 180) \
  77. FN(adieresis, -1, 138, 228, 228) \
  78. FN(ae, 241, 190, 230, 230) \
  79. FN(agrave, -1, 136, 224, 224) \
  80. FN(ampersand, 38, 38, 38, 38) \
  81. FN(aring, -1, 140, 229, 229) \
  82. FN(asciicircum, 94, 94, 94, 94) \
  83. FN(asciitilde, 126, 126, 126, 126) \
  84. FN(asterisk, 42, 42, 42, 42) \
  85. FN(at, 64, 64, 64, 64) \
  86. FN(atilde, -1, 139, 227, 227) \
  87. FN(b, 98, 98, 98, 98) \
  88. FN(backslash, 92, 92, 92, 92) \
  89. FN(bar, 124, 124, 124, 124) \
  90. FN(braceleft, 123, 123, 123, 123) \
  91. FN(braceright, 125, 125, 125, 125) \
  92. FN(bracketleft, 91, 91, 91, 91) \
  93. FN(bracketright, 93, 93, 93, 93) \
  94. FN(breve, 198, 249, -1, 24) \
  95. FN(brokenbar, -1, -1, 166, 166) \
  96. FN(bullet, 183, 165, 149, 128) \
  97. FN(c, 99, 99, 99, 99) \
  98. FN(caron, 207, 255, -1, 25) \
  99. FN(ccedilla, -1, 141, 231, 231) \
  100. FN(cedilla, 203, 252, 184, 184) \
  101. FN(cent, 162, 162, 162, 162) \
  102. FN(circumflex, 195, 246, 136, 26) \
  103. FN(colon, 58, 58, 58, 58) \
  104. FN(comma, 44, 44, 44, 44) \
  105. FN(copyright, -1, 169, 169, 169) \
  106. FN(currency, 168, 219, 164, 164) /* FIXME: Note 1 */ \
  107. FN(d, 100, 100, 100, 100) \
  108. FN(dagger, 178, 160, 134, 129) \
  109. FN(daggerdbl, 179, 224, 135, 130) \
  110. FN(degree, -1, 161, 176, 176) \
  111. FN(dieresis, 200, 172, 168, 168) \
  112. FN(divide, -1, 214, 247, 247) \
  113. FN(dollar, 36, 36, 36, 36) \
  114. FN(dotaccent, 199, 250, -1, 27) \
  115. FN(dotlessi, 245, 245, -1, 154) \
  116. FN(e, 101, 101, 101, 101) \
  117. FN(eacute, -1, 142, 233, 233) \
  118. FN(ecircumflex, -1, 144, 234, 234) \
  119. FN(edieresis, -1, 145, 235, 235) \
  120. FN(egrave, -1, 143, 232, 232) \
  121. FN(eight, 56, 56, 56, 56) \
  122. FN(ellipsis, 188, 201, 133, 131) \
  123. FN(emdash, 208, 209, 151, 132) \
  124. FN(endash, 177, 208, 150, 133) \
  125. FN(equal, 61, 61, 61, 61) \
  126. FN(eth, -1, -1, 240, 240) \
  127. FN(exclam, 33, 33, 33, 33) \
  128. FN(exclamdown, 161, 193, 161, 161) \
  129. FN(f, 102, 102, 102, 102) \
  130. FN(fi, 174, 222, -1, 147) \
  131. FN(five, 53, 53, 53, 53) \
  132. FN(fl, 175, 223, -1, 148) \
  133. FN(florin, 166, 196, 131, 134) \
  134. FN(four, 52, 52, 52, 52) \
  135. FN(fraction, 164, 218, -1, 135) \
  136. FN(g, 103, 103, 103, 103) \
  137. FN(germandbls, 251, 167, 223, 223) \
  138. FN(grave, 193, 96, 96, 96) \
  139. FN(greater, 62, 62, 62, 62) \
  140. FN(guillemotleft, 171, 199, 171, 171) /* FIXME: Note 4 */ \
  141. FN(guillemotright, 187, 200, 187, 187) /* FIXME: Note 4 */ \
  142. FN(guilsinglleft, 172, 220, 139, 136) \
  143. FN(guilsinglright, 173, 221, 155, 137) \
  144. FN(h, 104, 104, 104, 104) \
  145. FN(hungarumlaut, 205, 253, -1, 28) \
  146. FN(hyphen, 45, 45, 45, 45) /* FIXME: Note 5 */ \
  147. FN(i, 105, 105, 105, 105) \
  148. FN(iacute, -1, 146, 237, 237) \
  149. FN(icircumflex, -1, 148, 238, 238) \
  150. FN(idieresis, -1, 149, 239, 239) \
  151. FN(igrave, -1, 147, 236, 236) \
  152. FN(j, 106, 106, 106, 106) \
  153. FN(k, 107, 107, 107, 107) \
  154. FN(l, 108, 108, 108, 108) \
  155. FN(less, 60, 60, 60, 60) \
  156. FN(logicalnot, -1, 194, 172, 172) \
  157. FN(lslash, 248, -1, -1, 155) \
  158. FN(m, 109, 109, 109, 109) \
  159. FN(macron, 197, 248, 175, 175) \
  160. FN(minus, -1, -1, -1, 138) \
  161. FN(mu, -1, 181, 181, 181) \
  162. FN(multiply, -1, -1, 215, 215) \
  163. FN(n, 110, 110, 110, 110) \
  164. FN(nine, 57, 57, 57, 57) \
  165. FN(ntilde, -1, 150, 241, 241) \
  166. FN(numbersign, 35, 35, 35, 35) \
  167. FN(o, 111, 111, 111, 111) \
  168. FN(oacute, -1, 151, 243, 243) \
  169. FN(ocircumflex, -1, 153, 244, 244) \
  170. FN(odieresis, -1, 154, 246, 246) \
  171. FN(oe, 250, 207, 156, 156) \
  172. FN(ogonek, 206, 254, -1, 29) \
  173. FN(ograve, -1, 152, 242, 242) \
  174. FN(one, 49, 49, 49, 49) \
  175. FN(onehalf, -1, -1, 189, 189) \
  176. FN(onequarter, -1, -1, 188, 188) \
  177. FN(onesuperior, -1, -1, 185, 185) \
  178. FN(ordfeminine, 227, 187, 170, 170) \
  179. FN(ordmasculine, 235, 188, 186, 186) \
  180. FN(oslash, 249, 191, 248, 248) \
  181. FN(otilde, -1, 155, 245, 245) \
  182. FN(p, 112, 112, 112, 112) \
  183. FN(paragraph, 182, 166, 182, 182) \
  184. FN(parenleft, 40, 40, 40, 40) \
  185. FN(parenright, 41, 41, 41, 41) \
  186. FN(percent, 37, 37, 37, 37) \
  187. FN(period, 46, 46, 46, 46) \
  188. FN(periodcentered, 180, 225, 183, 183) \
  189. FN(perthousand, 189, 228, 137, 139) \
  190. FN(plus, 43, 43, 43, 43) \
  191. FN(plusminus, -1, 177, 177, 177) \
  192. FN(q, 113, 113, 113, 113) \
  193. FN(question, 63, 63, 63, 63) \
  194. FN(questiondown, 191, 192, 191, 191) \
  195. FN(quotedbl, 34, 34, 34, 34) \
  196. FN(quotedblbase, 185, 227, 132, 140) \
  197. FN(quotedblleft, 170, 210, 147, 141) \
  198. FN(quotedblright, 186, 211, 148, 142) \
  199. FN(quoteleft, 96, 212, 145, 143) \
  200. FN(quoteright, 39, 213, 146, 144) \
  201. FN(quotesinglbase, 184, 226, 130, 145) \
  202. FN(quotesingle, 169, 39, 39, 39) \
  203. FN(r, 114, 114, 114, 114) \
  204. FN(registered, -1, 168, 174, 174) \
  205. FN(ring, 202, 251, -1, 30) \
  206. FN(s, 115, 115, 115, 115) \
  207. FN(scaron, -1, -1, 154, 157) \
  208. FN(section, 167, 164, 167, 167) \
  209. FN(semicolon, 59, 59, 59, 59) \
  210. FN(seven, 55, 55, 55, 55) \
  211. FN(six, 54, 54, 54, 54) \
  212. FN(slash, 47, 47, 47, 47) \
  213. FN(space, 32, 32, 32, 32) /* FIXME: Note 6 */ \
  214. FN(sterling, 163, 163, 163, 163) \
  215. FN(t, 116, 116, 116, 116) \
  216. FN(thorn, -1, -1, 254, 254) \
  217. FN(three, 51, 51, 51, 51) \
  218. FN(threequarters, -1, -1, 190, 190) \
  219. FN(threesuperior, -1, -1, 179, 179) \
  220. FN(tilde, 196, 247, 152, 31) \
  221. FN(trademark, -1, 170, 153, 146) \
  222. FN(two, 50, 50, 50, 50) \
  223. FN(twosuperior, -1, -1, 178, 178) \
  224. FN(u, 117, 117, 117, 117) \
  225. FN(uacute, -1, 156, 250, 250) \
  226. FN(ucircumflex, -1, 158, 251, 251) \
  227. FN(udieresis, -1, 159, 252, 252) \
  228. FN(ugrave, -1, 157, 249, 249) \
  229. FN(underscore, 95, 95, 95, 95) \
  230. FN(v, 118, 118, 118, 118) \
  231. FN(w, 119, 119, 119, 119) \
  232. FN(x, 120, 120, 120, 120) \
  233. FN(y, 121, 121, 121, 121) \
  234. FN(yacute, -1, -1, 253, 253) \
  235. FN(ydieresis, -1, 216, 255, 255) \
  236. FN(yen, 165, 180, 165, 165) \
  237. FN(z, 122, 122, 122, 122) \
  238. FN(zcaron, -1, -1, 158, 158) /* FIXME: Note 2 */ \
  239. FN(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(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(five, 53) \
  336. V(florin, 166) \
  337. V(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(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(omega1, 118) \
  371. V(omicron, 111) \
  372. V(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(seven, 55) \
  406. V(sigma, 115) \
  407. V(sigma1, 86) \
  408. V(similar, 126) \
  409. V(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(three, 51) \
  420. V(trademarksans, 228) \
  421. V(trademarkserif, 212) \
  422. V(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(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, 0100) \
  465. V(a10, 0101) \
  466. V(a29, 0102) \
  467. V(a30, 0103) \
  468. V(a31, 0104) \
  469. V(a32, 0105) \
  470. V(a33, 0106) \
  471. V(a34, 0107) \
  472. V(a35, 0110) \
  473. V(a36, 0111) \
  474. V(a37, 0112) \
  475. V(a38, 0113) \
  476. V(a39, 0114) \
  477. V(a40, 0115) \
  478. V(a41, 0116) \
  479. V(a42, 0117) \
  480. V(a43, 0120) \
  481. V(a44, 0121) \
  482. V(a45, 0122) \
  483. V(a46, 0123) \
  484. V(a47, 0124) \
  485. V(a48, 0125) \
  486. V(a49, 0126) \
  487. V(a50, 0127) \
  488. V(a51, 0130) \
  489. V(a52, 0131) \
  490. V(a53, 0132) \
  491. V(a54, 0133) \
  492. V(a55, 0134) \
  493. V(a56, 0135) \
  494. V(a57, 0136) \
  495. V(a58, 0137) \
  496. V(a59, 0140) \
  497. V(a60, 0141) \
  498. V(a61, 0142) \
  499. V(a62, 0143) \
  500. V(a63, 0144) \
  501. V(a64, 0145) \
  502. V(a65, 0146) \
  503. V(a66, 0147) \
  504. V(a67, 0150) \
  505. V(a68, 0151) \
  506. V(a69, 0152) \
  507. V(a70, 0153) \
  508. V(a71, 0154) \
  509. V(a72, 0155) \
  510. V(a73, 0156) \
  511. V(a74, 0157) \
  512. V(a203, 0160) \
  513. V(a75, 0161) \
  514. V(a204, 0162) \
  515. V(a76, 0163) \
  516. V(a77, 0164) \
  517. V(a78, 0165) \
  518. V(a79, 0166) \
  519. V(a81, 0167) \
  520. V(a82, 0170) \
  521. V(a83, 0171) \
  522. V(a84, 0172) \
  523. V(a97, 0173) \
  524. V(a98, 0174) \
  525. V(a99, 0175) \
  526. V(a100, 0176) \
  527. V(a101, 0241) \
  528. V(a102, 0242) \
  529. V(a103, 0243) \
  530. V(a104, 0244) \
  531. V(a106, 0245) \
  532. V(a107, 0246) \
  533. V(a108, 0247) \
  534. V(a112, 0250) \
  535. V(a111, 0251) \
  536. V(a110, 0252) \
  537. V(a109, 0253) \
  538. V(a120, 0254) \
  539. V(a121, 0255) \
  540. V(a122, 0256) \
  541. V(a123, 0257) \
  542. V(a124, 0260) \
  543. V(a125, 0261) \
  544. V(a126, 0262) \
  545. V(a127, 0263) \
  546. V(a128, 0264) \
  547. V(a129, 0265) \
  548. V(a130, 0266) \
  549. V(a131, 0267) \
  550. V(a132, 0270) \
  551. V(a133, 0271) \
  552. V(a134, 0272) \
  553. V(a135, 0273) \
  554. V(a136, 0274) \
  555. V(a137, 0275) \
  556. V(a138, 0276) \
  557. V(a139, 0277) \
  558. V(a140, 0300) \
  559. V(a141, 0301) \
  560. V(a142, 0302) \
  561. V(a143, 0303) \
  562. V(a144, 0304) \
  563. V(a145, 0305) \
  564. V(a146, 0306) \
  565. V(a147, 0307) \
  566. V(a148, 0310) \
  567. V(a149, 0311) \
  568. V(a150, 0312) \
  569. V(a151, 0313) \
  570. V(a152, 0314) \
  571. V(a153, 0315) \
  572. V(a154, 0316) \
  573. V(a155, 0317) \
  574. V(a156, 0320) \
  575. V(a157, 0321) \
  576. V(a158, 0322) \
  577. V(a159, 0323) \
  578. V(a160, 0324) \
  579. V(a161, 0325) \
  580. V(a163, 0326) \
  581. V(a164, 0327) \
  582. V(a196, 0330) \
  583. V(a165, 0331) \
  584. V(a192, 0332) \
  585. V(a166, 0333) \
  586. V(a167, 0334) \
  587. V(a168, 0335) \
  588. V(a169, 0336) \
  589. V(a170, 0337) \
  590. V(a171, 0340) \
  591. V(a172, 0341) \
  592. V(a173, 0342) \
  593. V(a162, 0343) \
  594. V(a174, 0344) \
  595. V(a175, 0345) \
  596. V(a176, 0346) \
  597. V(a177, 0347) \
  598. V(a178, 0350) \
  599. V(a179, 0351) \
  600. V(a193, 0352) \
  601. V(a180, 0353) \
  602. V(a199, 0354) \
  603. V(a181, 0355) \
  604. V(a200, 0356) \
  605. V(a182, 0357) \
  606. V(a201, 0361) \
  607. V(a183, 0362) \
  608. V(a184, 0363) \
  609. V(a197, 0364) \
  610. V(a185, 0365) \
  611. V(a194, 0366) \
  612. V(a198, 0367) \
  613. V(a186, 0370) \
  614. V(a195, 0371) \
  615. V(a187, 0372) \
  616. V(a188, 0373) \
  617. V(a189, 0374) \
  618. V(a190, 0375) \
  619. V(a191, 0376)
  620. namespace PDF {
  621. class Encoding : public RefCounted<Encoding> {
  622. public:
  623. using CharCodeType = u8;
  624. static NonnullRefPtr<Encoding> create();
  625. static PDFErrorOr<NonnullRefPtr<Encoding>> from_object(Document*, NonnullRefPtr<Object> const&);
  626. static NonnullRefPtr<Encoding> standard_encoding();
  627. static NonnullRefPtr<Encoding> mac_encoding();
  628. static NonnullRefPtr<Encoding> windows_encoding();
  629. static NonnullRefPtr<Encoding> pdf_doc_encoding();
  630. static NonnullRefPtr<Encoding> symbol_encoding();
  631. static NonnullRefPtr<Encoding> zapf_encoding();
  632. HashMap<ByteString, CharCodeType> const& name_mapping() const { return m_name_mapping; }
  633. u16 get_char_code(ByteString const&) const;
  634. DeprecatedFlyString get_name(u8 char_code) const;
  635. void set(CharCodeType char_code, DeprecatedFlyString const& glyph_name);
  636. protected:
  637. HashMap<CharCodeType, DeprecatedFlyString> m_descriptors;
  638. HashMap<ByteString, CharCodeType> m_name_mapping;
  639. bool m_windows { false };
  640. };
  641. }