@doccloak/core 0.12.1 → 0.14.0

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 (79) hide show
  1. package/CHANGELOG.md +386 -0
  2. package/NOTICE +5 -0
  3. package/README.md +148 -9
  4. package/dist/dom/errors.d.ts +1 -1
  5. package/dist/dom/ocr.d.ts +33 -7
  6. package/dist/dom/ocr.js +98 -4
  7. package/dist/dom/office.d.ts +22 -6
  8. package/dist/dom/office.js +45 -11
  9. package/dist/engine.js +4 -5
  10. package/dist/env.d.ts +3 -3
  11. package/dist/pdf/cmap.d.ts +83 -0
  12. package/dist/pdf/cmap.js +659 -0
  13. package/dist/pdf/encodings.d.ts +49 -0
  14. package/dist/pdf/encodings.js +181 -0
  15. package/dist/pdf/extract.d.ts +108 -0
  16. package/dist/pdf/extract.js +1164 -0
  17. package/dist/pdf/fallback-fonts.d.ts +146 -0
  18. package/dist/pdf/fallback-fonts.js +312 -0
  19. package/dist/pdf/fit.d.ts +35 -0
  20. package/dist/pdf/fit.js +60 -0
  21. package/dist/pdf/fonts.d.ts +82 -0
  22. package/dist/pdf/fonts.js +465 -0
  23. package/dist/pdf/glyphlist.d.ts +37 -0
  24. package/dist/pdf/glyphlist.js +485 -0
  25. package/dist/pdf/index.d.ts +21 -0
  26. package/dist/pdf/index.js +7 -0
  27. package/dist/pdf/lexer.d.ts +61 -0
  28. package/dist/pdf/lexer.js +554 -0
  29. package/dist/pdf/objects.d.ts +57 -0
  30. package/dist/pdf/objects.js +217 -0
  31. package/dist/pdf/oracle.d.ts +149 -0
  32. package/dist/pdf/oracle.js +384 -0
  33. package/dist/pdf/raster.d.ts +119 -0
  34. package/dist/pdf/raster.js +405 -0
  35. package/dist/pdf/read.d.ts +36 -0
  36. package/dist/pdf/read.js +65 -0
  37. package/dist/pdf/serializer.d.ts +21 -0
  38. package/dist/pdf/serializer.js +106 -0
  39. package/dist/pdf/standard-metrics.d.ts +27 -0
  40. package/dist/pdf/standard-metrics.js +72 -0
  41. package/dist/pdf/surgery.d.ts +131 -0
  42. package/dist/pdf/surgery.js +847 -0
  43. package/dist/pdf/textstate.d.ts +88 -0
  44. package/dist/pdf/textstate.js +293 -0
  45. package/dist/pdf/types.d.ts +206 -0
  46. package/dist/pdf/types.js +11 -0
  47. package/dist/pdf/verify.d.ts +33 -0
  48. package/dist/pdf/verify.js +446 -0
  49. package/dist/pdf/write.d.ts +62 -0
  50. package/dist/pdf/write.js +750 -0
  51. package/dist/pipeline.d.ts +15 -0
  52. package/dist/pipeline.js +123 -8
  53. package/dist/providers/bardsai.d.ts +1 -1
  54. package/dist/providers/bardsai.js +5 -1
  55. package/dist/providers/gliner-base.d.ts +1 -1
  56. package/dist/providers/gliner-base.js +5 -1
  57. package/dist/providers/gliner.d.ts +1 -1
  58. package/dist/providers/gliner.js +5 -1
  59. package/dist/regex/rules.data.js +13 -8
  60. package/dist/types.d.ts +17 -2
  61. package/dist/types.js +17 -0
  62. package/dist/worker-protocol.d.ts +11 -0
  63. package/dist/worker-protocol.js +41 -8
  64. package/fonts/liberation/LICENSE +102 -0
  65. package/fonts/liberation/LiberationMono-Bold.ttf +0 -0
  66. package/fonts/liberation/LiberationMono-BoldItalic.ttf +0 -0
  67. package/fonts/liberation/LiberationMono-Italic.ttf +0 -0
  68. package/fonts/liberation/LiberationMono-Regular.ttf +0 -0
  69. package/fonts/liberation/LiberationSans-Bold.ttf +0 -0
  70. package/fonts/liberation/LiberationSans-BoldItalic.ttf +0 -0
  71. package/fonts/liberation/LiberationSans-Italic.ttf +0 -0
  72. package/fonts/liberation/LiberationSans-Regular.ttf +0 -0
  73. package/fonts/liberation/LiberationSerif-Bold.ttf +0 -0
  74. package/fonts/liberation/LiberationSerif-BoldItalic.ttf +0 -0
  75. package/fonts/liberation/LiberationSerif-Italic.ttf +0 -0
  76. package/fonts/liberation/LiberationSerif-Regular.ttf +0 -0
  77. package/package.json +11 -2
  78. package/rules/pl.json +7 -3
  79. package/rules/universal.json +6 -5
@@ -0,0 +1,485 @@
1
+ /**
2
+ * @doccloak/core/pdf - Adobe Glyph List (T207).
3
+ *
4
+ * Glyph name -> Unicode for simple fonts whose encoding is expressed as glyph
5
+ * names (Annex D tables, /Differences arrays, Type 1 built-in encodings), and
6
+ * the reverse lookup used to check whether a placeholder can be encoded in a
7
+ * document font.
8
+ *
9
+ * The table is a subset of the Adobe Glyph List 2.0 (aglfn + AGL) chosen for
10
+ * European text: Basic Latin, Latin-1, Latin Extended-A/B and Additional,
11
+ * spacing modifiers, Greek, Cyrillic (afii names), general punctuation,
12
+ * super/subscripts, currency, letterlike, number forms, arrows, mathematical
13
+ * operators, technical, blocks, geometric shapes, miscellaneous symbols and
14
+ * dingbats, the fi/fl/ff/ffi/ffl/st presentation forms, the Adobe corporate
15
+ * use area (small caps, superiors, Symbol font extenders), every name used by
16
+ * the Annex D encodings, and the ITC Zapf Dingbats list (a1..a191). Hebrew,
17
+ * Arabic, Thai, CJK and Hangul names are left out on purpose.
18
+ *
19
+ * Name resolution follows the AGL specification (section 3 "Mapping glyph
20
+ * names to Unicode"): strip everything from the first period, split ligature
21
+ * components on underscore, then per component: AGL lookup, `uniXXXX[YYYY...]`
22
+ * (4-digit groups, BMP, no surrogates), `uXXXX`..`uXXXXXX`. Anything else
23
+ * (`g12`, `cid12`, `glyph12`, `G12`, `.notdef`) yields undefined.
24
+ */
25
+ import { MAC_ROMAN_ENCODING, PDF_DOC_ENCODING, STANDARD_ENCODING, SYMBOL_ENCODING, WIN_ANSI_ENCODING, ZAPF_DINGBATS_ENCODING, } from "./encodings.js";
26
+ /** 'name:HEX;name:HEX;...' in AGL order (ASCII sort), dingbats names appended. Parsed lazily once. */
27
+ const AGL_DATA = 'A:41;AE:C6;AEacute:1FC;AEmacron:1E2;AEsmall:F7E6;Aacute:C1;Aacutesmall:F7E1;Abreve:102;' +
28
+ 'Abreveacute:1EAE;Abrevecyrillic:4D0;Abrevedotbelow:1EB6;Abrevegrave:1EB0;Abrevehookabove:1EB2;' +
29
+ 'Abrevetilde:1EB4;Acaron:1CD;Acircumflex:C2;Acircumflexacute:1EA4;Acircumflexdotbelow:1EAC;' +
30
+ 'Acircumflexgrave:1EA6;Acircumflexhookabove:1EA8;Acircumflexsmall:F7E2;Acircumflextilde:1EAA;' +
31
+ 'Acute:F6C9;Acutesmall:F7B4;Acyrillic:410;Adblgrave:200;Adieresis:C4;Adieresiscyrillic:4D2;' +
32
+ 'gravecomb:300;acutecomb:301;tildecomb:303;hookabovecomb:309;dotbelowcomb:323;Adieresismacron:1DE;Adieresissmall:F7E4;Adotbelow:1EA0;Adotmacron:1E0;Agrave:C0;Agravesmall:F7E0;' +
33
+ 'Ahookabove:1EA2;Aiecyrillic:4D4;Ainvertedbreve:202;Alpha:391;Alphatonos:386;Amacron:100;Aogonek:104;' +
34
+ 'Aring:C5;Aringacute:1FA;Aringbelow:1E00;Aringsmall:F7E5;Asmall:F761;Atilde:C3;Atildesmall:F7E3;B:42;' +
35
+ 'Bdotaccent:1E02;Bdotbelow:1E04;Becyrillic:411;Beta:392;Bhook:181;Blinebelow:1E06;Brevesmall:F6F4;' +
36
+ 'Bsmall:F762;Btopbar:182;C:43;Cacute:106;Caron:F6CA;Caronsmall:F6F5;Ccaron:10C;Ccedilla:C7;' +
37
+ 'Ccedillaacute:1E08;Ccedillasmall:F7E7;Ccircumflex:108;Cdot:10A;Cdotaccent:10A;Cedillasmall:F7B8;' +
38
+ 'Cheabkhasiancyrillic:4BC;Checyrillic:427;Chedescenderabkhasiancyrillic:4BE;Chedescendercyrillic:4B6;' +
39
+ 'Chedieresiscyrillic:4F4;Chekhakassiancyrillic:4CB;Cheverticalstrokecyrillic:4B8;Chi:3A7;Chook:187;' +
40
+ 'Circumflexsmall:F6F6;Csmall:F763;D:44;DZ:1F1;DZcaron:1C4;Dafrican:189;Dcaron:10E;Dcedilla:1E10;' +
41
+ 'Dcircumflexbelow:1E12;Dcroat:110;Ddotaccent:1E0A;Ddotbelow:1E0C;Decyrillic:414;Deicoptic:3EE;' +
42
+ 'Delta:2206;Deltagreek:394;Dhook:18A;Dieresis:F6CB;DieresisAcute:F6CC;DieresisGrave:F6CD;' +
43
+ 'Dieresissmall:F7A8;Digammagreek:3DC;Djecyrillic:402;Dlinebelow:1E0E;Dotaccentsmall:F6F7;Dslash:110;' +
44
+ 'Dsmall:F764;Dtopbar:18B;Dz:1F2;Dzcaron:1C5;Dzeabkhasiancyrillic:4E0;Dzecyrillic:405;Dzhecyrillic:40F;' +
45
+ 'E:45;Eacute:C9;Eacutesmall:F7E9;Ebreve:114;Ecaron:11A;Ecedillabreve:1E1C;Ecircumflex:CA;' +
46
+ 'Ecircumflexacute:1EBE;Ecircumflexbelow:1E18;Ecircumflexdotbelow:1EC6;Ecircumflexgrave:1EC0;' +
47
+ 'Ecircumflexhookabove:1EC2;Ecircumflexsmall:F7EA;Ecircumflextilde:1EC4;Ecyrillic:404;Edblgrave:204;' +
48
+ 'Edieresis:CB;Edieresissmall:F7EB;Edot:116;Edotaccent:116;Edotbelow:1EB8;Efcyrillic:424;Egrave:C8;' +
49
+ 'Egravesmall:F7E8;Ehookabove:1EBA;Eightroman:2167;Einvertedbreve:206;Eiotifiedcyrillic:464;' +
50
+ 'Elcyrillic:41B;Elevenroman:216A;Emacron:112;Emacronacute:1E16;Emacrongrave:1E14;Emcyrillic:41C;' +
51
+ 'Encyrillic:41D;Endescendercyrillic:4A2;Eng:14A;Enghecyrillic:4A4;Enhookcyrillic:4C7;Eogonek:118;' +
52
+ 'Eopen:190;Epsilon:395;Epsilontonos:388;Ercyrillic:420;Ereversed:18E;Ereversedcyrillic:42D;' +
53
+ 'Escyrillic:421;Esdescendercyrillic:4AA;Esh:1A9;Esmall:F765;Eta:397;Etatonos:389;Eth:D0;Ethsmall:F7F0;' +
54
+ 'Etilde:1EBC;Etildebelow:1E1A;Euro:20AC;Ezh:1B7;Ezhcaron:1EE;Ezhreversed:1B8;F:46;Fdotaccent:1E1E;' +
55
+ 'Feicoptic:3E4;Fhook:191;Fitacyrillic:472;Fiveroman:2164;Fourroman:2163;Fsmall:F766;G:47;Gacute:1F4;' +
56
+ 'Gamma:393;Gammaafrican:194;Gangiacoptic:3EA;Gbreve:11E;Gcaron:1E6;Gcedilla:122;Gcircumflex:11C;' +
57
+ 'Gcommaaccent:122;Gdot:120;Gdotaccent:120;Gecyrillic:413;Ghemiddlehookcyrillic:494;' +
58
+ 'Ghestrokecyrillic:492;Gheupturncyrillic:490;Ghook:193;Gjecyrillic:403;Gmacron:1E20;Grave:F6CE;' +
59
+ 'Gravesmall:F760;Gsmall:F767;Gstroke:1E4;H:48;H18533:25CF;H18543:25AA;H18551:25AB;H22073:25A1;' +
60
+ 'Haabkhasiancyrillic:4A8;Hadescendercyrillic:4B2;Hardsigncyrillic:42A;Hbar:126;Hbrevebelow:1E2A;' +
61
+ 'Hcedilla:1E28;Hcircumflex:124;Hdieresis:1E26;Hdotaccent:1E22;Hdotbelow:1E24;Horicoptic:3E8;' +
62
+ 'Hsmall:F768;Hungarumlaut:F6CF;Hungarumlautsmall:F6F8;I:49;IAcyrillic:42F;IJ:132;IUcyrillic:42E;' +
63
+ 'Iacute:CD;Iacutesmall:F7ED;Ibreve:12C;Icaron:1CF;Icircumflex:CE;Icircumflexsmall:F7EE;Icyrillic:406;' +
64
+ 'Idblgrave:208;Idieresis:CF;Idieresisacute:1E2E;Idieresiscyrillic:4E4;Idieresissmall:F7EF;Idot:130;' +
65
+ 'Idotaccent:130;Idotbelow:1ECA;Iebrevecyrillic:4D6;Iecyrillic:415;Ifraktur:2111;Igrave:CC;' +
66
+ 'Igravesmall:F7EC;Ihookabove:1EC8;Iicyrillic:418;Iinvertedbreve:20A;Iishortcyrillic:419;Imacron:12A;' +
67
+ 'Imacroncyrillic:4E2;Iocyrillic:401;Iogonek:12E;Iota:399;Iotaafrican:196;Iotadieresis:3AA;' +
68
+ 'Iotatonos:38A;Ismall:F769;Istroke:197;Itilde:128;Itildebelow:1E2C;Izhitsacyrillic:474;' +
69
+ 'Izhitsadblgravecyrillic:476;J:4A;Jcircumflex:134;Jecyrillic:408;Jsmall:F76A;K:4B;' +
70
+ 'Kabashkircyrillic:4A0;Kacute:1E30;Kacyrillic:41A;Kadescendercyrillic:49A;Kahookcyrillic:4C3;' +
71
+ 'Kappa:39A;Kastrokecyrillic:49E;Kaverticalstrokecyrillic:49C;Kcaron:1E8;Kcedilla:136;Kcommaaccent:136;' +
72
+ 'Kdotbelow:1E32;Khacyrillic:425;Kheicoptic:3E6;Khook:198;Kjecyrillic:40C;Klinebelow:1E34;' +
73
+ 'Koppacyrillic:480;Koppagreek:3DE;Ksicyrillic:46E;Ksmall:F76B;L:4C;LJ:1C7;LL:F6BF;Lacute:139;' +
74
+ 'Lambda:39B;Lcaron:13D;Lcedilla:13B;Lcircumflexbelow:1E3C;Lcommaaccent:13B;Ldot:13F;Ldotaccent:13F;' +
75
+ 'Ldotbelow:1E36;Ldotbelowmacron:1E38;Lj:1C8;Ljecyrillic:409;Llinebelow:1E3A;Lslash:141;' +
76
+ 'Lslashsmall:F6F9;Lsmall:F76C;M:4D;Macron:F6D0;Macronsmall:F7AF;Macute:1E3E;Mdotaccent:1E40;' +
77
+ 'Mdotbelow:1E42;Msmall:F76D;Mturned:19C;Mu:39C;N:4E;NJ:1CA;Nacute:143;Ncaron:147;Ncedilla:145;' +
78
+ 'Ncircumflexbelow:1E4A;Ncommaaccent:145;Ndotaccent:1E44;Ndotbelow:1E46;Nhookleft:19D;Nineroman:2168;' +
79
+ 'Nj:1CB;Njecyrillic:40A;Nlinebelow:1E48;Nsmall:F76E;Ntilde:D1;Ntildesmall:F7F1;Nu:39D;O:4F;OE:152;' +
80
+ 'OEsmall:F6FA;Oacute:D3;Oacutesmall:F7F3;Obarredcyrillic:4E8;Obarreddieresiscyrillic:4EA;Obreve:14E;' +
81
+ 'Ocaron:1D1;Ocenteredtilde:19F;Ocircumflex:D4;Ocircumflexacute:1ED0;Ocircumflexdotbelow:1ED8;' +
82
+ 'Ocircumflexgrave:1ED2;Ocircumflexhookabove:1ED4;Ocircumflexsmall:F7F4;Ocircumflextilde:1ED6;' +
83
+ 'Ocyrillic:41E;Odblacute:150;Odblgrave:20C;Odieresis:D6;Odieresiscyrillic:4E6;Odieresissmall:F7F6;' +
84
+ 'Odotbelow:1ECC;Ogoneksmall:F6FB;Ograve:D2;Ogravesmall:F7F2;Ohm:2126;Ohookabove:1ECE;Ohorn:1A0;' +
85
+ 'Ohornacute:1EDA;Ohorndotbelow:1EE2;Ohorngrave:1EDC;Ohornhookabove:1EDE;Ohorntilde:1EE0;' +
86
+ 'Ohungarumlaut:150;Oi:1A2;Oinvertedbreve:20E;Omacron:14C;Omacronacute:1E52;Omacrongrave:1E50;' +
87
+ 'Omega:2126;Omegacyrillic:460;Omegagreek:3A9;Omegaroundcyrillic:47A;Omegatitlocyrillic:47C;' +
88
+ 'Omegatonos:38F;Omicron:39F;Omicrontonos:38C;Oneroman:2160;Oogonek:1EA;Oogonekmacron:1EC;Oopen:186;' +
89
+ 'Oslash:D8;Oslashacute:1FE;Oslashsmall:F7F8;Osmall:F76F;Ostrokeacute:1FE;Otcyrillic:47E;Otilde:D5;' +
90
+ 'Otildeacute:1E4C;Otildedieresis:1E4E;Otildesmall:F7F5;P:50;Pacute:1E54;Pdotaccent:1E56;' +
91
+ 'Pecyrillic:41F;Pemiddlehookcyrillic:4A6;Phi:3A6;Phook:1A4;Pi:3A0;Psi:3A8;Psicyrillic:470;Psmall:F770;' +
92
+ 'Q:51;Qsmall:F771;R:52;Racute:154;Rcaron:158;Rcedilla:156;Rcommaaccent:156;Rdblgrave:210;' +
93
+ 'Rdotaccent:1E58;Rdotbelow:1E5A;Rdotbelowmacron:1E5C;Rfraktur:211C;Rho:3A1;Ringsmall:F6FC;' +
94
+ 'Rinvertedbreve:212;Rlinebelow:1E5E;Rsmall:F772;Rsmallinvertedsuperior:2B6;S:53;Sacute:15A;' +
95
+ 'Sacutedotaccent:1E64;Sampigreek:3E0;Scaron:160;Scarondotaccent:1E66;Scaronsmall:F6FD;Scedilla:15E;' +
96
+ 'Schwa:18F;Schwacyrillic:4D8;Schwadieresiscyrillic:4DA;Scircumflex:15C;Scommaaccent:218;' +
97
+ 'Sdotaccent:1E60;Sdotbelow:1E62;Sdotbelowdotaccent:1E68;Sevenroman:2166;Shacyrillic:428;' +
98
+ 'Shchacyrillic:429;Sheicoptic:3E2;Shhacyrillic:4BA;Shimacoptic:3EC;Sigma:3A3;Sixroman:2165;' +
99
+ 'Softsigncyrillic:42C;Ssmall:F773;Stigmagreek:3DA;T:54;Tau:3A4;Tbar:166;Tcaron:164;Tcedilla:162;' +
100
+ 'Tcircumflexbelow:1E70;Tcommaaccent:162;Tdotaccent:1E6A;Tdotbelow:1E6C;Tecyrillic:422;' +
101
+ 'Tedescendercyrillic:4AC;Tenroman:2169;Tetsecyrillic:4B4;Theta:398;Thook:1AC;Thorn:DE;Thornsmall:F7FE;' +
102
+ 'Threeroman:2162;Tildesmall:F6FE;Tlinebelow:1E6E;Tonefive:1BC;Tonesix:184;Tonetwo:1A7;' +
103
+ 'Tretroflexhook:1AE;Tsecyrillic:426;Tshecyrillic:40B;Tsmall:F774;Twelveroman:216B;Tworoman:2161;U:55;' +
104
+ 'Uacute:DA;Uacutesmall:F7FA;Ubreve:16C;Ucaron:1D3;Ucircumflex:DB;Ucircumflexbelow:1E76;' +
105
+ 'Ucircumflexsmall:F7FB;Ucyrillic:423;Udblacute:170;Udblgrave:214;Udieresis:DC;Udieresisacute:1D7;' +
106
+ 'Udieresisbelow:1E72;Udieresiscaron:1D9;Udieresiscyrillic:4F0;Udieresisgrave:1DB;Udieresismacron:1D5;' +
107
+ 'Udieresissmall:F7FC;Udotbelow:1EE4;Ugrave:D9;Ugravesmall:F7F9;Uhookabove:1EE6;Uhorn:1AF;' +
108
+ 'Uhornacute:1EE8;Uhorndotbelow:1EF0;Uhorngrave:1EEA;Uhornhookabove:1EEC;Uhorntilde:1EEE;' +
109
+ 'Uhungarumlaut:170;Uhungarumlautcyrillic:4F2;Uinvertedbreve:216;Ukcyrillic:478;Umacron:16A;' +
110
+ 'Umacroncyrillic:4EE;Umacrondieresis:1E7A;Uogonek:172;Upsilon:3A5;Upsilon1:3D2;' +
111
+ 'Upsilonacutehooksymbolgreek:3D3;Upsilonafrican:1B1;Upsilondieresis:3AB;' +
112
+ 'Upsilondieresishooksymbolgreek:3D4;Upsilonhooksymbol:3D2;Upsilontonos:38E;Uring:16E;' +
113
+ 'Ushortcyrillic:40E;Usmall:F775;Ustraightcyrillic:4AE;Ustraightstrokecyrillic:4B0;Utilde:168;' +
114
+ 'Utildeacute:1E78;Utildebelow:1E74;V:56;Vdotbelow:1E7E;Vecyrillic:412;Vhook:1B2;Vsmall:F776;' +
115
+ 'Vtilde:1E7C;W:57;Wacute:1E82;Wcircumflex:174;Wdieresis:1E84;Wdotaccent:1E86;Wdotbelow:1E88;' +
116
+ 'Wgrave:1E80;Wsmall:F777;X:58;Xdieresis:1E8C;Xdotaccent:1E8A;Xi:39E;Xsmall:F778;Y:59;Yacute:DD;' +
117
+ 'Yacutesmall:F7FD;Yatcyrillic:462;Ycircumflex:176;Ydieresis:178;Ydieresissmall:F7FF;Ydotaccent:1E8E;' +
118
+ 'Ydotbelow:1EF4;Yericyrillic:42B;Yerudieresiscyrillic:4F8;Ygrave:1EF2;Yhook:1B3;Yhookabove:1EF6;' +
119
+ 'Yicyrillic:407;Ysmall:F779;Ytilde:1EF8;Yusbigcyrillic:46A;Yusbigiotifiedcyrillic:46C;' +
120
+ 'Yuslittlecyrillic:466;Yuslittleiotifiedcyrillic:468;Z:5A;Zacute:179;Zcaron:17D;Zcaronsmall:F6FF;' +
121
+ 'Zcircumflex:1E90;Zdot:17B;Zdotaccent:17B;Zdotbelow:1E92;Zecyrillic:417;Zedescendercyrillic:498;' +
122
+ 'Zedieresiscyrillic:4DE;Zeta:396;Zhebrevecyrillic:4C1;Zhecyrillic:416;Zhedescendercyrillic:496;' +
123
+ 'Zhedieresiscyrillic:4DC;Zlinebelow:1E94;Zsmall:F77A;Zstroke:1B5;a:61;aacute:E1;abreve:103;' +
124
+ 'abreveacute:1EAF;abrevecyrillic:4D1;abrevedotbelow:1EB7;abrevegrave:1EB1;abrevehookabove:1EB3;' +
125
+ 'abrevetilde:1EB5;acaron:1CE;acircumflex:E2;acircumflexacute:1EA5;acircumflexdotbelow:1EAD;' +
126
+ 'acircumflexgrave:1EA7;acircumflexhookabove:1EA9;acircumflextilde:1EAB;acute:B4;acutelowmod:2CF;' +
127
+ 'acyrillic:430;adblgrave:201;adieresis:E4;adieresiscyrillic:4D3;adieresismacron:1DF;adotbelow:1EA1;' +
128
+ 'adotmacron:1E1;ae:E6;aeacute:1FD;aemacron:1E3;afii00208:2015;afii08941:20A4;afii10017:410;' +
129
+ 'afii10018:411;afii10019:412;afii10020:413;afii10021:414;afii10022:415;afii10023:401;afii10024:416;' +
130
+ 'afii10025:417;afii10026:418;afii10027:419;afii10028:41A;afii10029:41B;afii10030:41C;afii10031:41D;' +
131
+ 'afii10032:41E;afii10033:41F;afii10034:420;afii10035:421;afii10036:422;afii10037:423;afii10038:424;' +
132
+ 'afii10039:425;afii10040:426;afii10041:427;afii10042:428;afii10043:429;afii10044:42A;afii10045:42B;' +
133
+ 'afii10046:42C;afii10047:42D;afii10048:42E;afii10049:42F;afii10050:490;afii10051:402;afii10052:403;' +
134
+ 'afii10053:404;afii10054:405;afii10055:406;afii10056:407;afii10057:408;afii10058:409;afii10059:40A;' +
135
+ 'afii10060:40B;afii10061:40C;afii10062:40E;afii10063:F6C4;afii10064:F6C5;afii10065:430;afii10066:431;' +
136
+ 'afii10067:432;afii10068:433;afii10069:434;afii10070:435;afii10071:451;afii10072:436;afii10073:437;' +
137
+ 'afii10074:438;afii10075:439;afii10076:43A;afii10077:43B;afii10078:43C;afii10079:43D;afii10080:43E;' +
138
+ 'afii10081:43F;afii10082:440;afii10083:441;afii10084:442;afii10085:443;afii10086:444;afii10087:445;' +
139
+ 'afii10088:446;afii10089:447;afii10090:448;afii10091:449;afii10092:44A;afii10093:44B;afii10094:44C;' +
140
+ 'afii10095:44D;afii10096:44E;afii10097:44F;afii10098:491;afii10099:452;afii10100:453;afii10101:454;' +
141
+ 'afii10102:455;afii10103:456;afii10104:457;afii10105:458;afii10106:459;afii10107:45A;afii10108:45B;' +
142
+ 'afii10109:45C;afii10110:45E;afii10145:40F;afii10146:462;afii10147:472;afii10148:474;afii10192:F6C6;' +
143
+ 'afii10193:45F;afii10194:463;afii10195:473;afii10196:475;afii10831:F6C7;afii10832:F6C8;afii10846:4D9;' +
144
+ 'afii299:200E;afii300:200F;afii301:200D;afii57636:20AA;afii57929:2BC;afii61248:2105;afii61289:2113;' +
145
+ 'afii61352:2116;afii61573:202C;afii61574:202D;afii61575:202E;afii61664:200C;afii64937:2BD;agrave:E0;' +
146
+ 'ahookabove:1EA3;aiecyrillic:4D5;ainvertedbreve:203;aleph:2135;allequal:224C;alpha:3B1;alphatonos:3AC;' +
147
+ 'amacron:101;ampersand:26;ampersandsmall:F726;angle:2220;angleleft:2329;angleright:232A;angstrom:212B;' +
148
+ 'anoteleia:387;aogonek:105;apostrophemod:2BC;apple:F8FF;approaches:2250;approxequal:2248;' +
149
+ 'approxequalorimage:2252;approximatelyequal:2245;arc:2312;arighthalfring:1E9A;aring:E5;aringacute:1FB;' +
150
+ 'aringbelow:1E01;arrowboth:2194;arrowdashdown:21E3;arrowdashleft:21E0;arrowdashright:21E2;' +
151
+ 'arrowdashup:21E1;arrowdblboth:21D4;arrowdbldown:21D3;arrowdblleft:21D0;arrowdblright:21D2;' +
152
+ 'arrowdblup:21D1;arrowdown:2193;arrowdownleft:2199;arrowdownright:2198;arrowdownwhite:21E9;' +
153
+ 'arrowheaddownmod:2C5;arrowheadleftmod:2C2;arrowheadrightmod:2C3;arrowheadupmod:2C4;arrowhorizex:F8E7;' +
154
+ 'arrowleft:2190;arrowleftdbl:21D0;arrowleftdblstroke:21CD;arrowleftoverright:21C6;arrowleftwhite:21E6;' +
155
+ 'arrowright:2192;arrowrightdblstroke:21CF;arrowrightheavy:279E;arrowrightoverleft:21C4;' +
156
+ 'arrowrightwhite:21E8;arrowtableft:21E4;arrowtabright:21E5;arrowup:2191;arrowupdn:2195;' +
157
+ 'arrowupdnbse:21A8;arrowupdownbase:21A8;arrowupleft:2196;arrowupleftofdown:21C5;arrowupright:2197;' +
158
+ 'arrowupwhite:21E7;arrowvertex:F8E6;asciicircum:5E;asciitilde:7E;asterisk:2A;asteriskmath:2217;' +
159
+ 'asterism:2042;asuperior:F6E9;asymptoticallyequal:2243;at:40;atilde:E3;b:62;backslash:5C;bar:7C;' +
160
+ 'bdotaccent:1E03;bdotbelow:1E05;beamedsixteenthnotes:266C;because:2235;becyrillic:431;beta:3B2;' +
161
+ 'betasymbolgreek:3D0;blackcircle:25CF;blackdiamond:25C6;blackdownpointingtriangle:25BC;' +
162
+ 'blackleftpointingpointer:25C4;blackleftpointingtriangle:25C0;blacklowerlefttriangle:25E3;' +
163
+ 'blacklowerrighttriangle:25E2;blackrectangle:25AC;blackrightpointingpointer:25BA;' +
164
+ 'blackrightpointingtriangle:25B6;blacksmallsquare:25AA;blacksmilingface:263B;blacksquare:25A0;' +
165
+ 'blackstar:2605;blackupperlefttriangle:25E4;blackupperrighttriangle:25E5;' +
166
+ 'blackuppointingsmalltriangle:25B4;blackuppointingtriangle:25B2;blinebelow:1E07;block:2588;' +
167
+ 'braceex:F8F4;braceleft:7B;braceleftbt:F8F3;braceleftmid:F8F2;bracelefttp:F8F1;braceright:7D;' +
168
+ 'bracerightbt:F8FE;bracerightmid:F8FD;bracerighttp:F8FC;bracketleft:5B;bracketleftbt:F8F0;' +
169
+ 'bracketleftex:F8EF;bracketlefttp:F8EE;bracketright:5D;bracketrightbt:F8FB;bracketrightex:F8FA;' +
170
+ 'bracketrighttp:F8F9;breve:2D8;brokenbar:A6;bstroke:180;bsuperior:F6EA;btopbar:183;bullet:2022;' +
171
+ 'bulletinverse:25D8;bulletoperator:2219;bullseye:25CE;c:63;cacute:107;capslock:21EA;careof:2105;' +
172
+ 'caron:2C7;carriagereturn:21B5;ccaron:10D;ccedilla:E7;ccedillaacute:1E09;ccircumflex:109;cdot:10B;' +
173
+ 'cdotaccent:10B;cedilla:B8;cent:A2;centigrade:2103;centinferior:F6DF;centoldstyle:F7A2;' +
174
+ 'centsuperior:F6E0;cheabkhasiancyrillic:4BD;checkmark:2713;checyrillic:447;' +
175
+ 'chedescenderabkhasiancyrillic:4BF;chedescendercyrillic:4B7;chedieresiscyrillic:4F5;' +
176
+ 'chekhakassiancyrillic:4CC;cheverticalstrokecyrillic:4B9;chi:3C7;chook:188;circle:25CB;' +
177
+ 'circlecopyrt:A9;circlemultiply:2297;circleot:2299;circleplus:2295;circlewithlefthalfblack:25D0;' +
178
+ 'circlewithrighthalfblack:25D1;circumflex:2C6;clear:2327;clickalveolar:1C2;clickdental:1C0;' +
179
+ 'clicklateral:1C1;clickretroflex:1C3;club:2663;clubsuitblack:2663;clubsuitwhite:2667;colon:3A;' +
180
+ 'colonmonetary:20A1;colonsign:20A1;colontriangularhalfmod:2D1;colontriangularmod:2D0;comma:2C;' +
181
+ 'commaaccent:F6C3;commainferior:F6E1;commareversedmod:2BD;commasuperior:F6E2;commaturnedmod:2BB;' +
182
+ 'compass:263C;congruent:2245;contourintegral:222E;control:2303;controlDEL:7F;copyright:A9;' +
183
+ 'copyrightsans:F8E9;copyrightserif:F6D9;cruzeiro:20A2;curlyand:22CF;curlyor:22CE;currency:A4;' +
184
+ 'cyrBreve:F6D1;cyrFlex:F6D2;cyrbreve:F6D4;cyrflex:F6D5;d:64;dagger:2020;daggerdbl:2021;' +
185
+ 'dasiapneumatacyrilliccmb:485;dblGrave:F6D3;dblarrowleft:21D4;dblarrowright:21D2;dblgrave:F6D6;' +
186
+ 'dblintegral:222C;dbllowline:2017;dblprimemod:2BA;dblverticalbar:2016;dcaron:10F;dcedilla:1E11;' +
187
+ 'dcircumflexbelow:1E13;dcroat:111;ddotaccent:1E0B;ddotbelow:1E0D;decyrillic:434;degree:B0;' +
188
+ 'deicoptic:3EF;deleteleft:232B;deleteright:2326;delta:3B4;deltaturned:18D;dialytikatonos:385;' +
189
+ 'diamond:2666;diamondsuitwhite:2662;dieresis:A8;dieresisacute:F6D7;dieresisgrave:F6D8;' +
190
+ 'dieresistonos:385;divide:F7;divides:2223;divisionslash:2215;djecyrillic:452;dkshade:2593;' +
191
+ 'dlinebelow:1E0F;dmacron:111;dnblock:2584;dollar:24;dollarinferior:F6E3;dollaroldstyle:F724;' +
192
+ 'dollarsuperior:F6E4;dong:20AB;dotaccent:2D9;dotlessi:131;dotlessj:F6BE;dotmath:22C5;' +
193
+ 'dottedcircle:25CC;downtackmod:2D5;dsuperior:F6EB;dtopbar:18C;dz:1F3;dzcaron:1C6;' +
194
+ 'dzeabkhasiancyrillic:4E1;dzecyrillic:455;dzhecyrillic:45F;e:65;eacute:E9;earth:2641;ebreve:115;' +
195
+ 'ecaron:11B;ecedillabreve:1E1D;ecircumflex:EA;ecircumflexacute:1EBF;ecircumflexbelow:1E19;' +
196
+ 'ecircumflexdotbelow:1EC7;ecircumflexgrave:1EC1;ecircumflexhookabove:1EC3;ecircumflextilde:1EC5;' +
197
+ 'ecyrillic:454;edblgrave:205;edieresis:EB;edot:117;edotaccent:117;edotbelow:1EB9;efcyrillic:444;' +
198
+ 'egrave:E8;ehookabove:1EBB;eight:38;eightcircleinversesansserif:2791;eighthnotebeamed:266B;' +
199
+ 'eightinferior:2088;eightoldstyle:F738;eightroman:2177;eightsuperior:2078;einvertedbreve:207;' +
200
+ 'eiotifiedcyrillic:465;elcyrillic:43B;element:2208;elevenroman:217A;ellipsis:2026;' +
201
+ 'ellipsisvertical:22EE;emacron:113;emacronacute:1E17;emacrongrave:1E15;emcyrillic:43C;emdash:2014;' +
202
+ 'emptyset:2205;encyrillic:43D;endash:2013;endescendercyrillic:4A3;eng:14B;enghecyrillic:4A5;' +
203
+ 'enhookcyrillic:4C8;enspace:2002;eogonek:119;epsilon:3B5;epsilontonos:3AD;equal:3D;equalsuperior:207C;' +
204
+ 'equivalence:2261;ercyrillic:440;ereversedcyrillic:44D;escyrillic:441;esdescendercyrillic:4AB;' +
205
+ 'eshreversedloop:1AA;estimated:212E;esuperior:F6EC;eta:3B7;etatonos:3AE;eth:F0;etilde:1EBD;' +
206
+ 'etildebelow:1E1B;eturned:1DD;euro:20AC;exclam:21;exclamdbl:203C;exclamdown:A1;exclamdownsmall:F7A1;' +
207
+ 'exclamsmall:F721;existential:2203;ezhcaron:1EF;ezhreversed:1B9;ezhtail:1BA;f:66;fahrenheit:2109;' +
208
+ 'fdotaccent:1E1F;feicoptic:3E5;female:2640;ff:FB00;f_f:FB00;ffi:FB03;f_f_i:FB03;ffl:FB04;f_f_l:FB04;' +
209
+ 'fi:FB01;f_i:FB01;figuredash:2012;filledbox:25A0;filledrect:25AC;firsttonechinese:2C9;fisheye:25C9;' +
210
+ 'fitacyrillic:473;five:35;fivecircleinversesansserif:278E;fiveeighths:215D;fiveinferior:2085;' +
211
+ 'fiveoldstyle:F735;fiveroman:2174;fivesuperior:2075;fl:FB02;f_l:FB02;florin:192;forall:2200;four:34;' +
212
+ 'fourcircleinversesansserif:278D;fourinferior:2084;fouroldstyle:F734;fourroman:2173;foursuperior:2074;' +
213
+ 'fourthtonechinese:2CB;fraction:2044;franc:20A3;g:67;gacute:1F5;gamma:3B3;gammasuperior:2E0;' +
214
+ 'gangiacoptic:3EB;gbreve:11F;gcaron:1E7;gcedilla:123;gcircumflex:11D;gcommaaccent:123;gdot:121;' +
215
+ 'gdotaccent:121;gecyrillic:433;geometricallyequal:2251;germandbls:DF;ghemiddlehookcyrillic:495;' +
216
+ 'ghestrokecyrillic:493;gheupturncyrillic:491;gjecyrillic:453;glottalinvertedstroke:1BE;' +
217
+ 'glottalstopmod:2C0;glottalstopreversedmod:2C1;glottalstopreversedsuperior:2E4;gmacron:1E21;' +
218
+ 'gradient:2207;grave:60;gravelowmod:2CE;greater:3E;greaterequal:2265;greaterequalorless:22DB;' +
219
+ 'greaterorequivalent:2273;greaterorless:2277;greateroverequal:2267;gstroke:1E5;guillemotleft:AB;' +
220
+ 'guillemotright:BB;guilsinglleft:2039;guilsinglright:203A;h:68;haabkhasiancyrillic:4A9;' +
221
+ 'hadescendercyrillic:4B3;hardsigncyrillic:44A;harpoonleftbarbup:21BC;harpoonrightbarbup:21C0;hbar:127;' +
222
+ 'hbrevebelow:1E2B;hcedilla:1E29;hcircumflex:125;hdieresis:1E27;hdotaccent:1E23;hdotbelow:1E25;' +
223
+ 'heart:2665;heartsuitblack:2665;heartsuitwhite:2661;hhooksuperior:2B1;hlinebelow:1E96;horicoptic:3E9;' +
224
+ 'horizontalbar:2015;hotsprings:2668;house:2302;hsuperior:2B0;hungarumlaut:2DD;hv:195;hyphen:2D;' +
225
+ 'hypheninferior:F6E5;hyphensuperior:F6E6;hyphentwo:2010;i:69;iacute:ED;iacyrillic:44F;ibreve:12D;' +
226
+ 'icaron:1D0;icircumflex:EE;icyrillic:456;idblgrave:209;idieresis:EF;idieresisacute:1E2F;' +
227
+ 'idieresiscyrillic:4E5;idotbelow:1ECB;iebrevecyrillic:4D7;iecyrillic:435;igrave:EC;ihookabove:1EC9;' +
228
+ 'iicyrillic:438;iinvertedbreve:20B;iishortcyrillic:439;ij:133;ilde:2DC;imacron:12B;' +
229
+ 'imacroncyrillic:4E3;imageorapproximatelyequal:2253;increment:2206;infinity:221E;integral:222B;' +
230
+ 'integralbottom:2321;integralbt:2321;integralex:F8F5;integraltop:2320;integraltp:2320;' +
231
+ 'intersection:2229;invbullet:25D8;invcircle:25D9;invsmileface:263B;iocyrillic:451;iogonek:12F;' +
232
+ 'iota:3B9;iotadieresis:3CA;iotadieresistonos:390;iotatonos:3AF;isuperior:F6ED;itilde:129;' +
233
+ 'itildebelow:1E2D;iucyrillic:44E;izhitsacyrillic:475;izhitsadblgravecyrillic:477;j:6A;jcaron:1F0;' +
234
+ 'jcircumflex:135;jecyrillic:458;jsuperior:2B2;k:6B;kabashkircyrillic:4A1;kacute:1E31;kacyrillic:43A;' +
235
+ 'kadescendercyrillic:49B;kahookcyrillic:4C4;kappa:3BA;kappasymbolgreek:3F0;kastrokecyrillic:49F;' +
236
+ 'kaverticalstrokecyrillic:49D;kcaron:1E9;kcedilla:137;kcommaaccent:137;kdotbelow:1E33;' +
237
+ 'kgreenlandic:138;khacyrillic:445;kheicoptic:3E7;khook:199;kjecyrillic:45C;klinebelow:1E35;' +
238
+ 'koppacyrillic:481;ksicyrillic:46F;l:6C;lacute:13A;lambda:3BB;lambdastroke:19B;largecircle:25EF;' +
239
+ 'lbar:19A;lcaron:13E;lcedilla:13C;lcircumflexbelow:1E3D;lcommaaccent:13C;ldot:140;ldotaccent:140;' +
240
+ 'ldotbelow:1E37;ldotbelowmacron:1E39;less:3C;lessequal:2264;lessequalorgreater:22DA;' +
241
+ 'lessorequivalent:2272;lessorgreater:2276;lessoverequal:2266;lfblock:258C;lira:20A4;lj:1C9;' +
242
+ 'ljecyrillic:459;ll:F6C0;llinebelow:1E3B;logicaland:2227;logicalnot:AC;logicalnotreversed:2310;' +
243
+ 'logicalor:2228;longs:17F;lozenge:25CA;lslash:142;lsquare:2113;lsuperior:F6EE;ltshade:2591;m:6D;' +
244
+ 'macron:AF;macronlowmod:2CD;macute:1E3F;maichattawalowleftthai:F895;maichattawalowrightthai:F894;' +
245
+ 'maichattawaupperleftthai:F893;maieklowleftthai:F88C;maieklowrightthai:F88B;maiekupperleftthai:F88A;' +
246
+ 'maihanakatleftthai:F884;maitaikhuleftthai:F889;maitholowleftthai:F88F;maitholowrightthai:F88E;' +
247
+ 'maithoupperleftthai:F88D;maitrilowleftthai:F892;maitrilowrightthai:F891;maitriupperleftthai:F890;' +
248
+ 'male:2642;mars:2642;mdotaccent:1E41;mdotbelow:1E43;middot:B7;minus:2212;minuscircle:2296;' +
249
+ 'minusmod:2D7;minusplus:2213;minute:2032;msuperior:F6EF;mu:B5;mu1:B5;muchgreater:226B;muchless:226A;' +
250
+ 'mugreek:3BC;multiply:D7;musicalnote:266A;musicalnotedbl:266B;musicflatsign:266D;musicsharpsign:266F;' +
251
+ 'n:6E;nabla:2207;nacute:144;napostrophe:149;nbspace:A0;ncaron:148;ncedilla:146;ncircumflexbelow:1E4B;' +
252
+ 'ncommaaccent:146;ndotaccent:1E45;ndotbelow:1E47;newsheqelsign:20AA;nikhahitleftthai:F899;nine:39;' +
253
+ 'ninecircleinversesansserif:2792;nineinferior:2089;nineoldstyle:F739;nineroman:2178;ninesuperior:2079;' +
254
+ 'nj:1CC;njecyrillic:45A;nlegrightlong:19E;nlinebelow:1E49;nonbreakingspace:A0;notcontains:220C;' +
255
+ 'notelement:2209;notelementof:2209;notequal:2260;notgreater:226F;notgreaternorequal:2271;' +
256
+ 'notgreaternorless:2279;notidentical:2262;notless:226E;notlessnorequal:2270;notparallel:2226;' +
257
+ 'notprecedes:2280;notsubset:2284;notsucceeds:2281;notsuperset:2285;nsuperior:207F;ntilde:F1;nu:3BD;' +
258
+ 'numbersign:23;numeralsigngreek:374;numeralsignlowergreek:375;numero:2116;o:6F;oacute:F3;' +
259
+ 'obarredcyrillic:4E9;obarreddieresiscyrillic:4EB;obreve:14F;ocaron:1D2;ocircumflex:F4;' +
260
+ 'ocircumflexacute:1ED1;ocircumflexdotbelow:1ED9;ocircumflexgrave:1ED3;ocircumflexhookabove:1ED5;' +
261
+ 'ocircumflextilde:1ED7;ocyrillic:43E;odblacute:151;odblgrave:20D;odieresis:F6;odieresiscyrillic:4E7;' +
262
+ 'odotbelow:1ECD;oe:153;ogonek:2DB;ograve:F2;ohookabove:1ECF;ohorn:1A1;ohornacute:1EDB;' +
263
+ 'ohorndotbelow:1EE3;ohorngrave:1EDD;ohornhookabove:1EDF;ohorntilde:1EE1;ohungarumlaut:151;oi:1A3;' +
264
+ 'oinvertedbreve:20F;omacron:14D;omacronacute:1E53;omacrongrave:1E51;omega:3C9;omega1:3D6;' +
265
+ 'omegacyrillic:461;omegaroundcyrillic:47B;omegatitlocyrillic:47D;omegatonos:3CE;omicron:3BF;' +
266
+ 'omicrontonos:3CC;one:31;onecircleinversesansserif:278A;onedotenleader:2024;oneeighth:215B;' +
267
+ 'onefitted:F6DC;onehalf:BD;oneinferior:2081;oneoldstyle:F731;onequarter:BC;oneroman:2170;' +
268
+ 'onesuperior:B9;onethird:2153;oogonek:1EB;oogonekmacron:1ED;openbullet:25E6;option:2325;' +
269
+ 'ordfeminine:AA;ordmasculine:BA;orthogonal:221F;oslash:F8;oslashacute:1FF;ostrokeacute:1FF;' +
270
+ 'osuperior:F6F0;otcyrillic:47F;otilde:F5;otildeacute:1E4D;otildedieresis:1E4F;overline:203E;' +
271
+ 'overscore:AF;p:70;pacute:1E55;pagedown:21DF;pageup:21DE;palatalizationcyrilliccmb:484;' +
272
+ 'palochkacyrillic:4C0;paragraph:B6;parallel:2225;parenleft:28;parenleftbt:F8ED;parenleftex:F8EC;' +
273
+ 'parenleftinferior:208D;parenleftsuperior:207D;parenlefttp:F8EB;parenright:29;parenrightbt:F8F8;' +
274
+ 'parenrightex:F8F7;parenrightinferior:208E;parenrightsuperior:207E;parenrighttp:F8F6;partialdiff:2202;' +
275
+ 'pdotaccent:1E57;pecyrillic:43F;pemiddlehookcyrillic:4A7;percent:25;period:2E;periodcentered:B7;' +
276
+ 'periodinferior:F6E7;periodsuperior:F6E8;perpendicular:22A5;perthousand:2030;peseta:20A7;phi:3C6;' +
277
+ 'phi1:3D5;phisymbolgreek:3D5;phook:1A5;pi:3C0;pisymbolgreek:3D6;planckover2pi:210F;' +
278
+ 'planckover2pi1:210F;plus:2B;pluscircle:2295;plusminus:B1;plusmod:2D6;plussuperior:207A;' +
279
+ 'pointingindexdownwhite:261F;pointingindexleftwhite:261C;pointingindexrightwhite:261E;' +
280
+ 'pointingindexupwhite:261D;precedes:227A;prescription:211E;primemod:2B9;primereversed:2035;' +
281
+ 'product:220F;projective:2305;propellor:2318;propersubset:2282;propersuperset:2283;proportion:2237;' +
282
+ 'proportional:221D;psi:3C8;psicyrillic:471;psilipneumatacyrilliccmb:486;q:71;quarternote:2669;' +
283
+ 'question:3F;questiondown:BF;questiondownsmall:F7BF;questiongreek:37E;questionsmall:F73F;quotedbl:22;' +
284
+ 'quotedblbase:201E;quotedblleft:201C;quotedblright:201D;quoteleft:2018;quoteleftreversed:201B;' +
285
+ 'quotereversed:201B;quoteright:2019;quoterightn:149;quotesinglbase:201A;quotesingle:27;r:72;' +
286
+ 'racute:155;radical:221A;radicalex:F8E5;ratio:2236;rcaron:159;rcedilla:157;rcommaaccent:157;' +
287
+ 'rdblgrave:211;rdotaccent:1E59;rdotbelow:1E5B;rdotbelowmacron:1E5D;referencemark:203B;' +
288
+ 'reflexsubset:2286;reflexsuperset:2287;registered:AE;registersans:F8E8;registerserif:F6DA;' +
289
+ 'reversedtilde:223D;revlogicalnot:2310;rho:3C1;rhookturnedsuperior:2B5;rhosymbolgreek:3F1;' +
290
+ 'rhotichookmod:2DE;rightangle:221F;righttriangle:22BF;ring:2DA;ringhalfleft:2BF;' +
291
+ 'ringhalfleftcentered:2D3;ringhalfright:2BE;ringhalfrightcentered:2D2;rinvertedbreve:213;' +
292
+ 'rlinebelow:1E5F;rsuperior:F6F1;rtblock:2590;rturnedsuperior:2B4;rupiah:F6DD;s:73;sacute:15B;' +
293
+ 'sacutedotaccent:1E65;saraiileftthai:F886;saraileftthai:F885;saraueeleftthai:F888;saraueleftthai:F887;' +
294
+ 'scaron:161;scarondotaccent:1E67;scedilla:15F;schwacyrillic:4D9;schwadieresiscyrillic:4DB;' +
295
+ 'scircumflex:15D;scommaaccent:219;sdotaccent:1E61;sdotbelow:1E63;sdotbelowdotaccent:1E69;second:2033;' +
296
+ 'secondtonechinese:2CA;section:A7;semicolon:3B;seven:37;sevencircleinversesansserif:2790;' +
297
+ 'seveneighths:215E;seveninferior:2087;sevenoldstyle:F737;sevenroman:2176;sevensuperior:2077;' +
298
+ 'sfthyphen:AD;shacyrillic:448;shade:2592;shadedark:2593;shadelight:2591;shademedium:2592;' +
299
+ 'shchacyrillic:449;sheicoptic:3E3;sheqel:20AA;sheqelhebrew:20AA;shhacyrillic:4BB;shimacoptic:3ED;' +
300
+ 'sigma:3C3;sigma1:3C2;sigmafinal:3C2;sigmalunatesymbolgreek:3F2;similar:223C;six:36;' +
301
+ 'sixcircleinversesansserif:278F;sixinferior:2086;sixoldstyle:F736;sixroman:2175;sixsuperior:2076;' +
302
+ 'slash:2F;slong:17F;slongdotaccent:1E9B;smileface:263A;softhyphen:AD;softsigncyrillic:44C;space:20;' +
303
+ 'spacehackarabic:20;spade:2660;spadesuitblack:2660;spadesuitwhite:2664;' +
304
+ 'squarediagonalcrosshatchfill:25A9;squarehorizontalfill:25A4;squareorthogonalcrosshatchfill:25A6;' +
305
+ 'squareupperlefttolowerrightfill:25A7;squareupperrighttolowerleftfill:25A8;squareverticalfill:25A5;' +
306
+ 'squarewhitewithsmallblack:25A3;ssuperior:F6F2;sterling:A3;subset:2282;subsetnotequal:228A;' +
307
+ 'subsetorequal:2286;succeeds:227B;suchthat:220B;summation:2211;sun:263C;superset:2283;' +
308
+ 'supersetnotequal:228B;supersetorequal:2287;t:74;tackdown:22A4;tackleft:22A3;tau:3C4;tbar:167;' +
309
+ 'tcaron:165;tcedilla:163;tcircumflexbelow:1E71;tcommaaccent:163;tdieresis:1E97;tdotaccent:1E6B;' +
310
+ 'tdotbelow:1E6D;tecyrillic:442;tedescendercyrillic:4AD;telephone:2121;telephoneblack:260E;' +
311
+ 'tenroman:2179;tetsecyrillic:4B5;thanthakhatlowleftthai:F898;thanthakhatlowrightthai:F897;' +
312
+ 'thanthakhatupperleftthai:F896;thereexists:2203;therefore:2234;theta:3B8;theta1:3D1;' +
313
+ 'thetasymbolgreek:3D1;thook:1AD;thorn:FE;thousandcyrillic:482;three:33;' +
314
+ 'threecircleinversesansserif:278C;threeeighths:215C;threeinferior:2083;threeoldstyle:F733;' +
315
+ 'threequarters:BE;threequartersemdash:F6DE;threeroman:2172;threesuperior:B3;tilde:2DC;' +
316
+ 'tildeoperator:223C;timescircle:2297;titlocyrilliccmb:483;tlinebelow:1E6F;tonebarextrahighmod:2E5;' +
317
+ 'tonebarextralowmod:2E9;tonebarhighmod:2E6;tonebarlowmod:2E8;tonebarmidmod:2E7;tonefive:1BD;' +
318
+ 'tonesix:185;tonetwo:1A8;tonos:384;tpalatalhook:1AB;trademark:2122;trademarksans:F8EA;' +
319
+ 'trademarkserif:F6DB;triagdn:25BC;triaglf:25C4;triagrt:25BA;triagup:25B2;tsecyrillic:446;' +
320
+ 'tshecyrillic:45B;tsuperior:F6F3;twelveroman:217B;two:32;twocircleinversesansserif:278B;' +
321
+ 'twodotenleader:2025;twodotleader:2025;twoinferior:2082;twooldstyle:F732;tworoman:2171;twostroke:1BB;' +
322
+ 'twosuperior:B2;twothirds:2154;u:75;uacute:FA;ubreve:16D;ucaron:1D4;ucircumflex:FB;' +
323
+ 'ucircumflexbelow:1E77;ucyrillic:443;udblacute:171;udblgrave:215;udieresis:FC;udieresisacute:1D8;' +
324
+ 'udieresisbelow:1E73;udieresiscaron:1DA;udieresiscyrillic:4F1;udieresisgrave:1DC;udieresismacron:1D6;' +
325
+ 'udotbelow:1EE5;ugrave:F9;uhookabove:1EE7;uhorn:1B0;uhornacute:1EE9;uhorndotbelow:1EF1;' +
326
+ 'uhorngrave:1EEB;uhornhookabove:1EED;uhorntilde:1EEF;uhungarumlaut:171;uhungarumlautcyrillic:4F3;' +
327
+ 'uinvertedbreve:217;ukcyrillic:479;umacron:16B;umacroncyrillic:4EF;umacrondieresis:1E7B;underscore:5F;' +
328
+ 'underscoredbl:2017;union:222A;universal:2200;uogonek:173;upblock:2580;upsilon:3C5;' +
329
+ 'upsilondieresis:3CB;upsilondieresistonos:3B0;upsilontonos:3CD;uptackmod:2D4;uring:16F;' +
330
+ 'ushortcyrillic:45E;ustraightcyrillic:4AF;ustraightstrokecyrillic:4B1;utilde:169;utildeacute:1E79;' +
331
+ 'utildebelow:1E75;v:76;vdotbelow:1E7F;vecyrillic:432;venus:2640;verticalbar:7C;verticallinelowmod:2CC;' +
332
+ 'verticallinemod:2C8;vtilde:1E7D;w:77;wacute:1E83;wcircumflex:175;wdieresis:1E85;wdotaccent:1E87;' +
333
+ 'wdotbelow:1E89;weierstrass:2118;wgrave:1E81;whitebullet:25E6;whitecircle:25CB;' +
334
+ 'whitecircleinverse:25D9;whitediamond:25C7;whitediamondcontainingblacksmalldiamond:25C8;' +
335
+ 'whitedownpointingsmalltriangle:25BF;whitedownpointingtriangle:25BD;' +
336
+ 'whiteleftpointingsmalltriangle:25C3;whiteleftpointingtriangle:25C1;' +
337
+ 'whiterightpointingsmalltriangle:25B9;whiterightpointingtriangle:25B7;whitesmallsquare:25AB;' +
338
+ 'whitesmilingface:263A;whitesquare:25A1;whitestar:2606;whitetelephone:260F;' +
339
+ 'whiteuppointingsmalltriangle:25B5;whiteuppointingtriangle:25B3;won:20A9;wring:1E98;wsuperior:2B7;' +
340
+ 'wynn:1BF;x:78;xdieresis:1E8D;xdotaccent:1E8B;xi:3BE;xsuperior:2E3;y:79;yacute:FD;yatcyrillic:463;' +
341
+ 'ycircumflex:177;ydieresis:FF;ydotaccent:1E8F;ydotbelow:1EF5;yen:A5;yericyrillic:44B;' +
342
+ 'yerudieresiscyrillic:4F9;ygrave:1EF3;yhook:1B4;yhookabove:1EF7;yicyrillic:457;yinyang:262F;' +
343
+ 'yotgreek:3F3;ypogegrammeni:37A;yr:1A6;yring:1E99;ysuperior:2B8;ytilde:1EF9;yusbigcyrillic:46B;' +
344
+ 'yusbigiotifiedcyrillic:46D;yuslittlecyrillic:467;yuslittleiotifiedcyrillic:469;z:7A;zacute:17A;' +
345
+ 'zcaron:17E;zcircumflex:1E91;zdot:17C;zdotaccent:17C;zdotbelow:1E93;zecyrillic:437;' +
346
+ 'zedescendercyrillic:499;zedieresiscyrillic:4DF;zero:30;zeroinferior:2080;zerooldstyle:F730;' +
347
+ 'zerosuperior:2070;zerowidthnonjoiner:200C;zerowidthspace:200B;zeta:3B6;zhebrevecyrillic:4C2;' +
348
+ 'zhecyrillic:436;zhedescendercyrillic:497;zhedieresiscyrillic:4DD;zlinebelow:1E95;zstroke:1B6;a1:2701;' +
349
+ 'a2:2702;a202:2703;a3:2704;a4:260E;a5:2706;a119:2707;a118:2708;a117:2709;a11:261B;a12:261E;a13:270C;' +
350
+ 'a14:270D;a15:270E;a16:270F;a105:2710;a17:2711;a18:2712;a19:2713;a20:2714;a21:2715;a22:2716;a23:2717;' +
351
+ 'a24:2718;a25:2719;a26:271A;a27:271B;a28:271C;a6:271D;a7:271E;a8:271F;a9:2720;a10:2721;a29:2722;' +
352
+ 'a30:2723;a31:2724;a32:2725;a33:2726;a34:2727;a35:2605;a36:2729;a37:272A;a38:272B;a39:272C;a40:272D;' +
353
+ 'a41:272E;a42:272F;a43:2730;a44:2731;a45:2732;a46:2733;a47:2734;a48:2735;a49:2736;a50:2737;a51:2738;' +
354
+ 'a52:2739;a53:273A;a54:273B;a55:273C;a56:273D;a57:273E;a58:273F;a59:2740;a60:2741;a61:2742;a62:2743;' +
355
+ 'a63:2744;a64:2745;a65:2746;a66:2747;a67:2748;a68:2749;a69:274A;a70:274B;a71:25CF;a72:274D;a73:25A0;' +
356
+ 'a74:274F;a203:2750;a75:2751;a204:2752;a76:25B2;a77:25BC;a78:25C6;a79:2756;a81:25D7;a82:2758;a83:2759;' +
357
+ 'a84:275A;a97:275B;a98:275C;a99:275D;a100:275E;a101:2761;a102:2762;a103:2763;a104:2764;a106:2765;' +
358
+ 'a107:2766;a108:2767;a112:2663;a111:2666;a110:2665;a109:2660;a120:2460;a121:2461;a122:2462;a123:2463;' +
359
+ 'a124:2464;a125:2465;a126:2466;a127:2467;a128:2468;a129:2469;a130:2776;a131:2777;a132:2778;a133:2779;' +
360
+ 'a134:277A;a135:277B;a136:277C;a137:277D;a138:277E;a139:277F;a140:2780;a141:2781;a142:2782;a143:2783;' +
361
+ 'a144:2784;a145:2785;a146:2786;a147:2787;a148:2788;a149:2789;a150:278A;a151:278B;a152:278C;a153:278D;' +
362
+ 'a154:278E;a155:278F;a156:2790;a157:2791;a158:2792;a159:2793;a160:2794;a161:2192;a163:2194;a164:2195;' +
363
+ 'a196:2798;a165:2799;a192:279A;a166:279B;a167:279C;a168:279D;a169:279E;a170:279F;a171:27A0;a172:27A1;' +
364
+ 'a173:27A2;a162:27A3;a174:27A4;a175:27A5;a176:27A6;a177:27A7;a178:27A8;a179:27A9;a193:27AA;a180:27AB;' +
365
+ 'a199:27AC;a181:27AD;a200:27AE;a182:27AF;a201:27B1;a183:27B2;a184:27B3;a197:27B4;a185:27B5;a194:27B6;' +
366
+ 'a198:27B7;a186:27B8;a195:27B9;a187:27BA;a188:27BB;a189:27BC;a190:27BD;a191:27BE;a89:2768;a90:2769;' +
367
+ 'a93:276A;a94:276B;a91:276C;a92:276D;a205:276E;a85:276F;a206:2770;a86:2771;a87:2772;a88:2773;a95:2774;' +
368
+ 'a96:2775;.notdef:0';
369
+ let forward;
370
+ let reverse;
371
+ function forwardMap() {
372
+ if (forward)
373
+ return forward;
374
+ const map = new Map();
375
+ for (const entry of AGL_DATA.split(';')) {
376
+ const colon = entry.indexOf(':');
377
+ map.set(entry.slice(0, colon), String.fromCodePoint(parseInt(entry.slice(colon + 1), 16)));
378
+ }
379
+ forward = map;
380
+ return map;
381
+ }
382
+ function reverseMap() {
383
+ if (reverse)
384
+ return reverse;
385
+ const fwd = forwardMap();
386
+ const map = new Map();
387
+ const add = (name, text) => {
388
+ if (text.length === 0 || text.codePointAt(0) === undefined)
389
+ return;
390
+ if (String.fromCodePoint(text.codePointAt(0)) !== text)
391
+ return; // several code points
392
+ if (!map.has(text))
393
+ map.set(text, name);
394
+ };
395
+ // Names used by the predefined encodings win over other AGL synonyms (periodcentered
396
+ // over middot, mu over mu1, space over spacehackarabic) so that the name found here
397
+ // is the one a simple font's encoding is likely to contain.
398
+ for (const table of [
399
+ STANDARD_ENCODING,
400
+ WIN_ANSI_ENCODING,
401
+ MAC_ROMAN_ENCODING,
402
+ PDF_DOC_ENCODING,
403
+ SYMBOL_ENCODING,
404
+ ZAPF_DINGBATS_ENCODING,
405
+ ]) {
406
+ for (const name of table) {
407
+ if (name === undefined)
408
+ continue;
409
+ const text = fwd.get(name);
410
+ if (text !== undefined)
411
+ add(name, text);
412
+ }
413
+ }
414
+ for (const [name, text] of fwd)
415
+ add(name, text);
416
+ reverse = map;
417
+ return map;
418
+ }
419
+ function isScalar(cp) {
420
+ return cp <= 0x10ffff && (cp < 0xd800 || cp > 0xdfff);
421
+ }
422
+ const UNI_RE = /^uni((?:[0-9A-Fa-f]{4})+)$/;
423
+ const U_RE = /^u([0-9A-Fa-f]{4,6})$/;
424
+ function componentToUnicode(name) {
425
+ const direct = forwardMap().get(name);
426
+ if (direct !== undefined)
427
+ return direct;
428
+ const uni = UNI_RE.exec(name);
429
+ if (uni) {
430
+ const hex = uni[1];
431
+ let out = '';
432
+ for (let i = 0; i < hex.length; i += 4) {
433
+ const cp = parseInt(hex.slice(i, i + 4), 16);
434
+ if (!isScalar(cp))
435
+ return undefined;
436
+ out += String.fromCodePoint(cp);
437
+ }
438
+ return out;
439
+ }
440
+ const u = U_RE.exec(name);
441
+ if (u) {
442
+ const cp = parseInt(u[1], 16);
443
+ return isScalar(cp) ? String.fromCodePoint(cp) : undefined;
444
+ }
445
+ return undefined;
446
+ }
447
+ /**
448
+ * Maps a glyph name to the text it represents, or undefined when the name
449
+ * carries no Unicode meaning. The result may be several code points
450
+ * (`uni00660069`, `f_i`).
451
+ */
452
+ export function glyphNameToUnicode(name) {
453
+ if (name.length === 0)
454
+ return undefined;
455
+ const period = name.indexOf('.');
456
+ if (period === 0)
457
+ return undefined; // .notdef, .null
458
+ const base = period > 0 ? name.slice(0, period) : name;
459
+ if (base.length === 0)
460
+ return undefined;
461
+ if (base.indexOf('_') < 0)
462
+ return componentToUnicode(base);
463
+ let out = '';
464
+ for (const part of base.split('_')) {
465
+ const text = componentToUnicode(part);
466
+ if (text === undefined)
467
+ return undefined;
468
+ out += text;
469
+ }
470
+ return out;
471
+ }
472
+ /**
473
+ * Reverse of the AGL table for a single code point: the glyph name a simple
474
+ * font is expected to use for `ch`. Names used by the Annex D encodings take
475
+ * precedence, then the first AGL name in list order. Undefined for input that
476
+ * is not exactly one code point or has no AGL name.
477
+ */
478
+ export function unicodeToGlyphName(ch) {
479
+ if (ch.length === 0)
480
+ return undefined;
481
+ const cp = ch.codePointAt(0);
482
+ if (cp === undefined || String.fromCodePoint(cp) !== ch)
483
+ return undefined;
484
+ return reverseMap().get(ch);
485
+ }
@@ -0,0 +1,21 @@
1
+ /**
2
+ * @doccloak/core/pdf - PDF redaction that keeps the text layer (T206-T215).
3
+ *
4
+ * readPdf(file) -> PdfExtraction (plainText for detection, geometry, parts)
5
+ * writeAnonymizedPdfWithReport(extraction, replacements, values, options) -> redacted PDF
6
+ */
7
+ export type * from './types.js';
8
+ export { readPdf, isPdfFile, toPdfBytes } from './read.js';
9
+ export type { PdfExtraction, PdfInput } from './read.js';
10
+ export { writeAnonymizedPdfWithReport, StalePdfExtractionError, NORMALISED_PDF_DATE } from './write.js';
11
+ export type { PdfWriteOptionsInternal } from './write.js';
12
+ export { PdfVerifyError, verifyPdf } from './verify.js';
13
+ export type { VerifyFinding } from './verify.js';
14
+ export { fitPlaceholder, DEFAULT_FIT } from './fit.js';
15
+ export type { FitResult, FitInput } from './fit.js';
16
+ export { openWithOracle, normalizeForCompare, defaultCanvasFactory } from './oracle.js';
17
+ export type { OracleDocument, CanvasFactory, CanvasHandle, RenderedPage, OracleTextItem } from './oracle.js';
18
+ export { FallbackFontProvider, FallbackFontEmbedder, faceFor, styleFromFontName, FALLBACK_FACES, faceFileName } from './fallback-fonts.js';
19
+ export type { FallbackFace } from './fallback-fonts.js';
20
+ export { extractPdf } from './extract.js';
21
+ export type { ExtractionResult } from './extract.js';
@@ -0,0 +1,7 @@
1
+ export { readPdf, isPdfFile, toPdfBytes } from "./read.js";
2
+ export { writeAnonymizedPdfWithReport, StalePdfExtractionError, NORMALISED_PDF_DATE } from "./write.js";
3
+ export { PdfVerifyError, verifyPdf } from "./verify.js";
4
+ export { fitPlaceholder, DEFAULT_FIT } from "./fit.js";
5
+ export { openWithOracle, normalizeForCompare, defaultCanvasFactory } from "./oracle.js";
6
+ export { FallbackFontProvider, FallbackFontEmbedder, faceFor, styleFromFontName, FALLBACK_FACES, faceFileName } from "./fallback-fonts.js";
7
+ export { extractPdf } from "./extract.js";
@@ -0,0 +1,61 @@
1
+ /**
2
+ * @doccloak/core/pdf - content stream lexer (T206).
3
+ *
4
+ * Tokenizes a PDF content stream (ISO 32000-1 section 7.2 and 7.8.2) into
5
+ * operators with typed operands, keeping the source byte range of every
6
+ * operator so untouched operators can be copied back verbatim by the
7
+ * serializer. Inline images (BI ... ID <binary> EI) are kept as one opaque
8
+ * operator holding the raw bytes. Unknown operators are kept as-is.
9
+ *
10
+ * The lexer never throws on malformed input: an unparsable byte sequence
11
+ * ends up as an operator with `op: ''` and the raw bytes, which the callers
12
+ * treat as "unsafe page" (rasterize) rather than silently dropping content.
13
+ */
14
+ export type Operand = {
15
+ kind: 'number';
16
+ value: number;
17
+ } | {
18
+ kind: 'name';
19
+ value: string;
20
+ } | {
21
+ kind: 'string';
22
+ bytes: Uint8Array;
23
+ hex: boolean;
24
+ } | {
25
+ kind: 'array';
26
+ items: Operand[];
27
+ } | {
28
+ kind: 'dict';
29
+ entries: Map<string, Operand>;
30
+ } | {
31
+ kind: 'bool';
32
+ value: boolean;
33
+ } | {
34
+ kind: 'null';
35
+ };
36
+ export interface ContentOp {
37
+ /** Operator name ('Tj', 'TJ', 'q', ...). 'BI' for an inline image. '' for unparsable bytes. */
38
+ op: string;
39
+ operands: Operand[];
40
+ /** Byte range of the whole operator (operands included) in the source stream. Absent for synthesized ops. */
41
+ start?: number;
42
+ end?: number;
43
+ /** For 'BI': the raw bytes of the whole BI ... EI segment. For '': the skipped bytes. */
44
+ raw?: Uint8Array;
45
+ }
46
+ export declare function latin1(bytes: Uint8Array): string;
47
+ /**
48
+ * PDF numbers: optional sign, digits, optional fraction; tolerant to '--5', '.5', '5.', '3.4.5' (viewers
49
+ * accept). Any '-' among the sign characters makes the number negative, as pdf.js and Acrobat read '--5'.
50
+ */
51
+ export declare function parsePdfNumber(text: string): number | null;
52
+ /** Tokenize a content stream into operators. Never throws. */
53
+ export declare function lexContent(bytes: Uint8Array): ContentOp[];
54
+ export declare const num: (value: number) => Operand;
55
+ export declare const name: (value: string) => Operand;
56
+ export declare const hexString: (bytes: Uint8Array) => Operand;
57
+ export declare const array: (items: Operand[]) => Operand;
58
+ export declare const makeOp: (op: string, ...operands: Operand[]) => ContentOp;
59
+ /** Operator classes used by the state machine and the surgery. */
60
+ export declare const TEXT_SHOW_OPS: ReadonlySet<string>;
61
+ export declare const TEXT_POSITION_OPS: ReadonlySet<string>;