emf-converter 4.18.1 → 4.19.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.
- package/README.md +10 -0
- package/dist/browser.js +72 -14
- package/dist/browser.mjs +72 -14
- package/dist/index.d.mts +21 -0
- package/dist/index.d.ts +21 -0
- package/dist/index.js +72 -14
- package/dist/index.mjs +72 -14
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -144,9 +144,19 @@ Without `fonts`, text is drawn by the host's canvas font engine (supply `fontFam
|
|
|
144
144
|
|
|
145
145
|
#### `EmfConvertOptions`
|
|
146
146
|
|
|
147
|
+
`ansiCodePage` and `oemCodePage` set the known code pages of the playback
|
|
148
|
+
device (for example, `936` from Windows `GetACP()` and `866` from `GetOEMCP()`).
|
|
149
|
+
Windows decodes ANSI text records (EMF and WMF) in ANSI/DEFAULT fonts with the
|
|
150
|
+
ANSI code page, WMF font face names too, and text in OEM fonts with the OEM code
|
|
151
|
+
page. The defaults are `1252` and `437`; explicit text charsets are unchanged.
|
|
152
|
+
`wmfAnsiCodePage` overrides `ansiCodePage` for WMF input only. See the
|
|
153
|
+
[API reference](docs/api.md) for supported values.
|
|
154
|
+
|
|
147
155
|
| Field | Type | Default | Description |
|
|
148
156
|
| -------------------- | ------------------------------------- | ----------------- | ----------- |
|
|
149
157
|
| `maxWidth` | `number` | None | Maximum output width in pixels (aspect ratio preserved) |
|
|
158
|
+
| `ansiCodePage` | `number` | `1252` | Playback-device ANSI code page (`GetACP()`) for ANSI/DEFAULT text |
|
|
159
|
+
| `oemCodePage` | `number` | `437` | Playback-device OEM code page (`GetOEMCP()`) for OEM text |
|
|
150
160
|
| `maxHeight` | `number` | None | Maximum output height in pixels |
|
|
151
161
|
| `dpiScale` | `number` | `1` | Resolution multiplier; clamped to `4` |
|
|
152
162
|
| `maxCanvasDimension` | `number` | `8192` | Hard cap on output width/height in pixels |
|
package/dist/browser.js
CHANGED
|
@@ -24852,6 +24852,7 @@ function drawNestedMetafile(rCtx, img, cached, source) {
|
|
|
24852
24852
|
imageCache: caches?.images,
|
|
24853
24853
|
fontFamilyMap: rCtx.fontFamilyMap,
|
|
24854
24854
|
gdiAntialias: rCtx.gdiAntialias,
|
|
24855
|
+
codePages: rCtx.codePages,
|
|
24855
24856
|
nestingDepth: depth + 1
|
|
24856
24857
|
});
|
|
24857
24858
|
} finally {
|
|
@@ -36049,6 +36050,20 @@ function handleEmfGdiBlendBlitRecord(rCtx, recType, offset, dataOff, recSize) {
|
|
|
36049
36050
|
|
|
36050
36051
|
// src/emf-ansi-tables.ts
|
|
36051
36052
|
var OEM437_HIGH = "\xC7\xFC\xE9\xE2\xE4\xE0\xE5\xE7\xEA\xEB\xE8\xEF\xEE\xEC\xC4\xC5\xC9\xE6\xC6\xF4\xF6\xF2\xFB\xF9\xFF\xD6\xDC\xA2\xA3\xA5\u20A7\u0192\xE1\xED\xF3\xFA\xF1\xD1\xAA\xBA\xBF\u2310\xAC\xBD\xBC\xA1\xAB\xBB\u2591\u2592\u2593\u2502\u2524\u2561\u2562\u2556\u2555\u2563\u2551\u2557\u255D\u255C\u255B\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u255E\u255F\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u2567\u2568\u2564\u2565\u2559\u2558\u2552\u2553\u256B\u256A\u2518\u250C\u2588\u2584\u258C\u2590\u2580\u03B1\xDF\u0393\u03C0\u03A3\u03C3\xB5\u03C4\u03A6\u0398\u03A9\u03B4\u221E\u03C6\u03B5\u2229\u2261\xB1\u2265\u2264\u2320\u2321\xF7\u2248\xB0\u2219\xB7\u221A\u207F\xB2\u25A0\xA0";
|
|
36053
|
+
var OEM_HIGH = {
|
|
36054
|
+
737: "\u0391\u0392\u0393\u0394\u0395\u0396\u0397\u0398\u0399\u039A\u039B\u039C\u039D\u039E\u039F\u03A0\u03A1\u03A3\u03A4\u03A5\u03A6\u03A7\u03A8\u03A9\u03B1\u03B2\u03B3\u03B4\u03B5\u03B6\u03B7\u03B8\u03B9\u03BA\u03BB\u03BC\u03BD\u03BE\u03BF\u03C0\u03C1\u03C3\u03C2\u03C4\u03C5\u03C6\u03C7\u03C8\u2591\u2592\u2593\u2502\u2524\u2561\u2562\u2556\u2555\u2563\u2551\u2557\u255D\u255C\u255B\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u255E\u255F\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u2567\u2568\u2564\u2565\u2559\u2558\u2552\u2553\u256B\u256A\u2518\u250C\u2588\u2584\u258C\u2590\u2580\u03C9\u03AC\u03AD\u03AE\u03CA\u03AF\u03CC\u03CD\u03CB\u03CE\u0386\u0388\u0389\u038A\u038C\u038E\u038F\xB1\u2265\u2264\u03AA\u03AB\xF7\u2248\xB0\u2219\xB7\u221A\u207F\xB2\u25A0\xA0",
|
|
36055
|
+
775: "\u0106\xFC\xE9\u0101\xE4\u0123\xE5\u0107\u0142\u0113\u0156\u0157\u012B\u0179\xC4\xC5\xC9\xE6\xC6\u014D\xF6\u0122\xA2\u015A\u015B\xD6\xDC\xF8\xA3\xD8\xD7\xA4\u0100\u012A\xF3\u017B\u017C\u017A\u201D\xA6\xA9\xAE\xAC\xBD\xBC\u0141\xAB\xBB\u2591\u2592\u2593\u2502\u2524\u0104\u010C\u0118\u0116\u2563\u2551\u2557\u255D\u012E\u0160\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u0172\u016A\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u017D\u0105\u010D\u0119\u0117\u012F\u0161\u0173\u016B\u017E\u2518\u250C\u2588\u2584\u258C\u2590\u2580\xD3\xDF\u014C\u0143\xF5\xD5\xB5\u0144\u0136\u0137\u013B\u013C\u0146\u0112\u0145\u2019\xAD\xB1\u201C\xBE\xB6\xA7\xF7\u201E\xB0\u2219\xB7\xB9\xB3\xB2\u25A0\xA0",
|
|
36056
|
+
850: "\xC7\xFC\xE9\xE2\xE4\xE0\xE5\xE7\xEA\xEB\xE8\xEF\xEE\xEC\xC4\xC5\xC9\xE6\xC6\xF4\xF6\xF2\xFB\xF9\xFF\xD6\xDC\xF8\xA3\xD8\xD7\u0192\xE1\xED\xF3\xFA\xF1\xD1\xAA\xBA\xBF\xAE\xAC\xBD\xBC\xA1\xAB\xBB\u2591\u2592\u2593\u2502\u2524\xC1\xC2\xC0\xA9\u2563\u2551\u2557\u255D\xA2\xA5\u2510\u2514\u2534\u252C\u251C\u2500\u253C\xE3\xC3\u255A\u2554\u2569\u2566\u2560\u2550\u256C\xA4\xF0\xD0\xCA\xCB\xC8\u0131\xCD\xCE\xCF\u2518\u250C\u2588\u2584\xA6\xCC\u2580\xD3\xDF\xD4\xD2\xF5\xD5\xB5\xFE\xDE\xDA\xDB\xD9\xFD\xDD\xAF\xB4\xAD\xB1\u2017\xBE\xB6\xA7\xF7\xB8\xB0\xA8\xB7\xB9\xB3\xB2\u25A0\xA0",
|
|
36057
|
+
852: "\xC7\xFC\xE9\xE2\xE4\u016F\u0107\xE7\u0142\xEB\u0150\u0151\xEE\u0179\xC4\u0106\xC9\u0139\u013A\xF4\xF6\u013D\u013E\u015A\u015B\xD6\xDC\u0164\u0165\u0141\xD7\u010D\xE1\xED\xF3\xFA\u0104\u0105\u017D\u017E\u0118\u0119\xAC\u017A\u010C\u015F\xAB\xBB\u2591\u2592\u2593\u2502\u2524\xC1\xC2\u011A\u015E\u2563\u2551\u2557\u255D\u017B\u017C\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u0102\u0103\u255A\u2554\u2569\u2566\u2560\u2550\u256C\xA4\u0111\u0110\u010E\xCB\u010F\u0147\xCD\xCE\u011B\u2518\u250C\u2588\u2584\u0162\u016E\u2580\xD3\xDF\xD4\u0143\u0144\u0148\u0160\u0161\u0154\xDA\u0155\u0170\xFD\xDD\u0163\xB4\xAD\u02DD\u02DB\u02C7\u02D8\xA7\xF7\xB8\xB0\xA8\u02D9\u0171\u0158\u0159\u25A0\xA0",
|
|
36058
|
+
855: "\u0452\u0402\u0453\u0403\u0451\u0401\u0454\u0404\u0455\u0405\u0456\u0406\u0457\u0407\u0458\u0408\u0459\u0409\u045A\u040A\u045B\u040B\u045C\u040C\u045E\u040E\u045F\u040F\u044E\u042E\u044A\u042A\u0430\u0410\u0431\u0411\u0446\u0426\u0434\u0414\u0435\u0415\u0444\u0424\u0433\u0413\xAB\xBB\u2591\u2592\u2593\u2502\u2524\u0445\u0425\u0438\u0418\u2563\u2551\u2557\u255D\u0439\u0419\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u043A\u041A\u255A\u2554\u2569\u2566\u2560\u2550\u256C\xA4\u043B\u041B\u043C\u041C\u043D\u041D\u043E\u041E\u043F\u2518\u250C\u2588\u2584\u041F\u044F\u2580\u042F\u0440\u0420\u0441\u0421\u0442\u0422\u0443\u0423\u0436\u0416\u0432\u0412\u044C\u042C\u2116\xAD\u044B\u042B\u0437\u0417\u0448\u0428\u044D\u042D\u0449\u0429\u0447\u0427\xA7\u25A0\xA0",
|
|
36059
|
+
858: "\xC7\xFC\xE9\xE2\xE4\xE0\xE5\xE7\xEA\xEB\xE8\xEF\xEE\xEC\xC4\xC5\xC9\xE6\xC6\xF4\xF6\xF2\xFB\xF9\xFF\xD6\xDC\xF8\xA3\xD8\xD7\u0192\xE1\xED\xF3\xFA\xF1\xD1\xAA\xBA\xBF\xAE\xAC\xBD\xBC\xA1\xAB\xBB\u2591\u2592\u2593\u2502\u2524\xC1\xC2\xC0\xA9\u2563\u2551\u2557\u255D\xA2\xA5\u2510\u2514\u2534\u252C\u251C\u2500\u253C\xE3\xC3\u255A\u2554\u2569\u2566\u2560\u2550\u256C\xA4\xF0\xD0\xCA\xCB\xC8\u20AC\xCD\xCE\xCF\u2518\u250C\u2588\u2584\xA6\xCC\u2580\xD3\xDF\xD4\xD2\xF5\xD5\xB5\xFE\xDE\xDA\xDB\xD9\xFD\xDD\xAF\xB4\xAD\xB1\u2017\xBE\xB6\xA7\xF7\xB8\xB0\xA8\xB7\xB9\xB3\xB2\u25A0\xA0",
|
|
36060
|
+
860: "\xC7\xFC\xE9\xE2\xE3\xE0\xC1\xE7\xEA\xCA\xE8\xCD\xD4\xEC\xC3\xC2\xC9\xC0\xC8\xF4\xF5\xF2\xDA\xF9\xCC\xD5\xDC\xA2\xA3\xD9\u20A7\xD3\xE1\xED\xF3\xFA\xF1\xD1\xAA\xBA\xBF\xD2\xAC\xBD\xBC\xA1\xAB\xBB\u2591\u2592\u2593\u2502\u2524\u2561\u2562\u2556\u2555\u2563\u2551\u2557\u255D\u255C\u255B\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u255E\u255F\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u2567\u2568\u2564\u2565\u2559\u2558\u2552\u2553\u256B\u256A\u2518\u250C\u2588\u2584\u258C\u2590\u2580\u03B1\xDF\u0393\u03C0\u03A3\u03C3\xB5\u03C4\u03A6\u0398\u03A9\u03B4\u221E\u03C6\u03B5\u2229\u2261\xB1\u2265\u2264\u2320\u2321\xF7\u2248\xB0\u2219\xB7\u221A\u207F\xB2\u25A0\xA0",
|
|
36061
|
+
861: "\xC7\xFC\xE9\xE2\xE4\xE0\xE5\xE7\xEA\xEB\xE8\xD0\xF0\xDE\xC4\xC5\xC9\xE6\xC6\xF4\xF6\xFE\xFB\xDD\xFD\xD6\xDC\xF8\xA3\xD8\u20A7\u0192\xE1\xED\xF3\xFA\xC1\xCD\xD3\xDA\xBF\u2310\xAC\xBD\xBC\xA1\xAB\xBB\u2591\u2592\u2593\u2502\u2524\u2561\u2562\u2556\u2555\u2563\u2551\u2557\u255D\u255C\u255B\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u255E\u255F\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u2567\u2568\u2564\u2565\u2559\u2558\u2552\u2553\u256B\u256A\u2518\u250C\u2588\u2584\u258C\u2590\u2580\u03B1\xDF\u0393\u03C0\u03A3\u03C3\xB5\u03C4\u03A6\u0398\u03A9\u03B4\u221E\u03C6\u03B5\u2229\u2261\xB1\u2265\u2264\u2320\u2321\xF7\u2248\xB0\u2219\xB7\u221A\u207F\xB2\u25A0\xA0",
|
|
36062
|
+
862: "\u05D0\u05D1\u05D2\u05D3\u05D4\u05D5\u05D6\u05D7\u05D8\u05D9\u05DA\u05DB\u05DC\u05DD\u05DE\u05DF\u05E0\u05E1\u05E2\u05E3\u05E4\u05E5\u05E6\u05E7\u05E8\u05E9\u05EA\xA2\xA3\xA5\u20A7\u0192\xE1\xED\xF3\xFA\xF1\xD1\xAA\xBA\xBF\u2310\xAC\xBD\xBC\xA1\xAB\xBB\u2591\u2592\u2593\u2502\u2524\u2561\u2562\u2556\u2555\u2563\u2551\u2557\u255D\u255C\u255B\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u255E\u255F\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u2567\u2568\u2564\u2565\u2559\u2558\u2552\u2553\u256B\u256A\u2518\u250C\u2588\u2584\u258C\u2590\u2580\u03B1\xDF\u0393\u03C0\u03A3\u03C3\xB5\u03C4\u03A6\u0398\u03A9\u03B4\u221E\u03C6\u03B5\u2229\u2261\xB1\u2265\u2264\u2320\u2321\xF7\u2248\xB0\u2219\xB7\u221A\u207F\xB2\u25A0\xA0",
|
|
36063
|
+
863: "\xC7\xFC\xE9\xE2\xC2\xE0\xB6\xE7\xEA\xEB\xE8\xEF\xEE\u2017\xC0\xA7\xC9\xC8\xCA\xF4\xCB\xCF\xFB\xF9\xA4\xD4\xDC\xA2\xA3\xD9\xDB\u0192\xA6\xB4\xF3\xFA\xA8\xB8\xB3\xAF\xCE\u2310\xAC\xBD\xBC\xBE\xAB\xBB\u2591\u2592\u2593\u2502\u2524\u2561\u2562\u2556\u2555\u2563\u2551\u2557\u255D\u255C\u255B\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u255E\u255F\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u2567\u2568\u2564\u2565\u2559\u2558\u2552\u2553\u256B\u256A\u2518\u250C\u2588\u2584\u258C\u2590\u2580\u03B1\xDF\u0393\u03C0\u03A3\u03C3\xB5\u03C4\u03A6\u0398\u03A9\u03B4\u221E\u03C6\u03B5\u2229\u2261\xB1\u2265\u2264\u2320\u2321\xF7\u2248\xB0\u2219\xB7\u221A\u207F\xB2\u25A0\xA0",
|
|
36064
|
+
865: "\xC7\xFC\xE9\xE2\xE4\xE0\xE5\xE7\xEA\xEB\xE8\xEF\xEE\xEC\xC4\xC5\xC9\xE6\xC6\xF4\xF6\xF2\xFB\xF9\xFF\xD6\xDC\xF8\xA3\xD8\u20A7\u0192\xE1\xED\xF3\xFA\xF1\xD1\xAA\xBA\xBF\u2310\xAC\xBD\xBC\xA1\xAB\xA4\u2591\u2592\u2593\u2502\u2524\u2561\u2562\u2556\u2555\u2563\u2551\u2557\u255D\u255C\u255B\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u255E\u255F\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u2567\u2568\u2564\u2565\u2559\u2558\u2552\u2553\u256B\u256A\u2518\u250C\u2588\u2584\u258C\u2590\u2580\u03B1\xDF\u0393\u03C0\u03A3\u03C3\xB5\u03C4\u03A6\u0398\u03A9\u03B4\u221E\u03C6\u03B5\u2229\u2261\xB1\u2265\u2264\u2320\u2321\xF7\u2248\xB0\u2219\xB7\u221A\u207F\xB2\u25A0\xA0",
|
|
36065
|
+
866: "\u0410\u0411\u0412\u0413\u0414\u0415\u0416\u0417\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u0420\u0421\u0422\u0423\u0424\u0425\u0426\u0427\u0428\u0429\u042A\u042B\u042C\u042D\u042E\u042F\u0430\u0431\u0432\u0433\u0434\u0435\u0436\u0437\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u2591\u2592\u2593\u2502\u2524\u2561\u2562\u2556\u2555\u2563\u2551\u2557\u255D\u255C\u255B\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u255E\u255F\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u2567\u2568\u2564\u2565\u2559\u2558\u2552\u2553\u256B\u256A\u2518\u250C\u2588\u2584\u258C\u2590\u2580\u0440\u0441\u0442\u0443\u0444\u0445\u0446\u0447\u0448\u0449\u044A\u044B\u044C\u044D\u044E\u044F\u0401\u0451\u0404\u0454\u0407\u0457\u040E\u045E\xB0\u2219\xB7\u221A\u2116\xA4\u25A0\xA0"
|
|
36066
|
+
};
|
|
36052
36067
|
var JOHAB_ROWS = {
|
|
36053
36068
|
132: "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u11A8\u11A9\u11AA\u11AB\u11AC\u11AD\u11AE\u11AF\u11B0\u11B1\u11B2\u11B3\u11B4\u11B5\u11B6\u11B7\uFFFD\u11B8\u11B9\u11BA\u11BB\u11BC\u11BD\u11BE\u11BF\u11C0\u11C1\u11C2\uFFFD\uFFFD\uFFFD\u1161\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u1162\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u1163\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u1164\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u1165\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD",
|
|
36054
36069
|
133: "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u1166\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u1167\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u1168\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u1169\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u116A\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u116B\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD",
|
|
@@ -36223,12 +36238,41 @@ var CHARSET_ENCODING = {
|
|
|
36223
36238
|
238: "windows-1250",
|
|
36224
36239
|
255: "ibm437"
|
|
36225
36240
|
};
|
|
36226
|
-
|
|
36241
|
+
var ANSI_CODE_PAGE_ENCODING = {
|
|
36242
|
+
874: "windows-874",
|
|
36243
|
+
932: "shift_jis",
|
|
36244
|
+
936: "gbk",
|
|
36245
|
+
949: "euc-kr",
|
|
36246
|
+
950: "big5",
|
|
36247
|
+
1250: "windows-1250",
|
|
36248
|
+
1251: "windows-1251",
|
|
36249
|
+
1252: "windows-1252",
|
|
36250
|
+
1253: "windows-1253",
|
|
36251
|
+
1254: "windows-1254",
|
|
36252
|
+
1255: "windows-1255",
|
|
36253
|
+
1256: "windows-1256",
|
|
36254
|
+
1257: "windows-1257",
|
|
36255
|
+
1258: "windows-1258",
|
|
36256
|
+
54936: "gb18030",
|
|
36257
|
+
65001: "utf-8"
|
|
36258
|
+
};
|
|
36259
|
+
var OEM_CODE_PAGE_ENCODING = {
|
|
36260
|
+
874: "windows-874",
|
|
36261
|
+
932: "shift_jis",
|
|
36262
|
+
936: "gbk",
|
|
36263
|
+
949: "euc-kr",
|
|
36264
|
+
950: "big5"
|
|
36265
|
+
};
|
|
36266
|
+
function decodeOemTable(bytes, high) {
|
|
36267
|
+
return { codes: bytes.map((b) => b < 128 ? b : high.charCodeAt(b - 128)), byteLengths: bytes.map(() => 1) };
|
|
36268
|
+
}
|
|
36269
|
+
function decodeAnsiRecord(bytes, charSet, codePages) {
|
|
36227
36270
|
if (charSet === 2) {
|
|
36228
36271
|
return { codes: [...bytes], byteLengths: bytes.map(() => 1) };
|
|
36229
36272
|
}
|
|
36230
|
-
|
|
36231
|
-
|
|
36273
|
+
const oemCodePage = codePages?.oem;
|
|
36274
|
+
if (charSet === 255 && (oemCodePage === void 0 || !(oemCodePage in OEM_CODE_PAGE_ENCODING))) {
|
|
36275
|
+
return decodeOemTable(bytes, (oemCodePage !== void 0 ? OEM_HIGH[oemCodePage] : void 0) ?? OEM437_HIGH);
|
|
36232
36276
|
}
|
|
36233
36277
|
if (charSet === 130) {
|
|
36234
36278
|
const codes = [];
|
|
@@ -36244,10 +36288,14 @@ function decodeAnsiRecord(bytes, charSet) {
|
|
|
36244
36288
|
}
|
|
36245
36289
|
return { codes, byteLengths };
|
|
36246
36290
|
}
|
|
36247
|
-
const
|
|
36291
|
+
const ansiCodePage = codePages?.ansi;
|
|
36292
|
+
const label = charSet === 255 && oemCodePage !== void 0 ? OEM_CODE_PAGE_ENCODING[oemCodePage] : (charSet === 0 || charSet === 1) && ansiCodePage !== void 0 ? ANSI_CODE_PAGE_ENCODING[ansiCodePage] ?? "windows-1252" : CHARSET_ENCODING[charSet] ?? "windows-1252";
|
|
36293
|
+
if (label === "windows-1252") {
|
|
36294
|
+
return { codes: bytes.map((b) => ansiToCode(b, charSet)), byteLengths: bytes.map(() => 1) };
|
|
36295
|
+
}
|
|
36248
36296
|
try {
|
|
36249
|
-
const decoder = new TextDecoder(label, { fatal: true });
|
|
36250
|
-
const replacementDecoder = new TextDecoder(label);
|
|
36297
|
+
const decoder = new TextDecoder(label, { fatal: true, ignoreBOM: true });
|
|
36298
|
+
const replacementDecoder = new TextDecoder(label, { ignoreBOM: true });
|
|
36251
36299
|
const source = new Uint8Array(bytes);
|
|
36252
36300
|
const codes = [];
|
|
36253
36301
|
const byteLengths = [];
|
|
@@ -37061,8 +37109,9 @@ function drawTextCall(rCtx, x, y, codes, options2, rect, dx) {
|
|
|
37061
37109
|
const child = { ...rCtx, view };
|
|
37062
37110
|
handleExtTextOutW(child, 0, 8, size);
|
|
37063
37111
|
}
|
|
37064
|
-
function readAnsiRecord(
|
|
37065
|
-
|
|
37112
|
+
function readAnsiRecord(rCtx, start, count, charSet) {
|
|
37113
|
+
const { view } = rCtx;
|
|
37114
|
+
return decodeAnsiRecord(Array.from({ length: count }, (_, i) => view.getUint8(start + i)), charSet, rCtx.codePages);
|
|
37066
37115
|
}
|
|
37067
37116
|
function collapseAnsiDx(dx, byteLengths, pdy) {
|
|
37068
37117
|
if (!dx) return null;
|
|
@@ -37097,7 +37146,7 @@ function handlePolyText(rCtx, offset, dataOff, recSize, wide) {
|
|
|
37097
37146
|
const offDx = view.getUint32(e + 36, true);
|
|
37098
37147
|
const unit = wide ? 2 : 1;
|
|
37099
37148
|
if (!offString || offString > end - offset || n > Math.floor((end - (offset + offString)) / unit)) continue;
|
|
37100
|
-
const ansi = wide ? null : readAnsiRecord(
|
|
37149
|
+
const ansi = wide ? null : readAnsiRecord(rCtx, offset + offString, n, charSet);
|
|
37101
37150
|
const codes = wide ? Array.from({ length: n }, (_, j) => view.getUint16(offset + offString + j * 2, true)) : ansi.codes;
|
|
37102
37151
|
let dx = null;
|
|
37103
37152
|
const pdy = (options2 & ETO_PDY) !== 0;
|
|
@@ -37138,7 +37187,7 @@ function handleEmfGdiDrawTextRecord(rCtx, recType, offset, dataOff, recSize) {
|
|
|
37138
37187
|
const n = view.getUint32(dataOff + 36, true), strOff = view.getUint32(dataOff + 40, true), options2 = view.getUint32(dataOff + 44, true);
|
|
37139
37188
|
if (!strOff || strOff > end - offset) return true;
|
|
37140
37189
|
if (n > end - (offset + strOff)) return true;
|
|
37141
|
-
const ansi = readAnsiRecord(
|
|
37190
|
+
const ansi = readAnsiRecord(rCtx, offset + strOff, n, state.fontDetails?.charSet ?? 1);
|
|
37142
37191
|
const rect = [view.getInt32(dataOff + 48, true), view.getInt32(dataOff + 52, true), view.getInt32(dataOff + 56, true), view.getInt32(dataOff + 60, true)];
|
|
37143
37192
|
const offDx = view.getUint32(dataOff + 64, true);
|
|
37144
37193
|
let dx = null;
|
|
@@ -40893,6 +40942,7 @@ function replayEmfPlusRecords(view, offset, length, ctx, canvasW, canvasH, state
|
|
|
40893
40942
|
imageCache: s.imageCache,
|
|
40894
40943
|
nestingDepth: s.nestingDepth,
|
|
40895
40944
|
gdiAntialias: s.gdiAntialias,
|
|
40945
|
+
codePages: s.codePages,
|
|
40896
40946
|
antiAlias: s.antiAlias,
|
|
40897
40947
|
ext: s.ext ?? (s.ext = {})
|
|
40898
40948
|
};
|
|
@@ -41070,6 +41120,7 @@ function replayEmfRecords(view, ctx, bounds, canvasW, canvasH, dpiScale = 1, rep
|
|
|
41070
41120
|
const plusScale = dpiScale > 0 ? dpiScale : 1;
|
|
41071
41121
|
emfPlusState.imageCache = replayOptions.imageCache;
|
|
41072
41122
|
emfPlusState.gdiAntialias = replayOptions.gdiAntialias;
|
|
41123
|
+
emfPlusState.codePages = replayOptions.codePages;
|
|
41073
41124
|
emfPlusState.baseTransform = replayOptions.plusBaseTransform ?? [
|
|
41074
41125
|
sx / plusScale,
|
|
41075
41126
|
0,
|
|
@@ -41109,7 +41160,8 @@ function replayEmfRecords(view, ctx, bounds, canvasW, canvasH, dpiScale = 1, rep
|
|
|
41109
41160
|
sy,
|
|
41110
41161
|
pathCmds: [],
|
|
41111
41162
|
gdiAntialias: replayOptions.gdiAntialias,
|
|
41112
|
-
fonts: replayOptions.fonts
|
|
41163
|
+
fonts: replayOptions.fonts,
|
|
41164
|
+
codePages: replayOptions.codePages
|
|
41113
41165
|
};
|
|
41114
41166
|
let offset = 0;
|
|
41115
41167
|
const maxOffset = view.byteLength;
|
|
@@ -41506,14 +41558,15 @@ function createFont(p, dataOff, recSize, recEnd) {
|
|
|
41506
41558
|
addObject(p, { kind: "other" });
|
|
41507
41559
|
return;
|
|
41508
41560
|
}
|
|
41509
|
-
|
|
41561
|
+
const faceBytes = [];
|
|
41510
41562
|
for (let i = 0; i < 32 && dataOff + 18 + i < recEnd; i++) {
|
|
41511
41563
|
const ch = view.getUint8(dataOff + 18 + i);
|
|
41512
41564
|
if (ch === 0) {
|
|
41513
41565
|
break;
|
|
41514
41566
|
}
|
|
41515
|
-
|
|
41567
|
+
faceBytes.push(ch);
|
|
41516
41568
|
}
|
|
41569
|
+
const family = String.fromCharCode(...decodeAnsiRecord(faceBytes, 1, { ansi: p.ansiCodePage }).codes);
|
|
41517
41570
|
const font = {
|
|
41518
41571
|
kind: "font",
|
|
41519
41572
|
// Sign kept: resolveFontPixelHeight() tells cell from character height by it.
|
|
@@ -42540,7 +42593,7 @@ function drawWithFontEngine2(p, call, codes, dx) {
|
|
|
42540
42593
|
}
|
|
42541
42594
|
function playText(p, call) {
|
|
42542
42595
|
const charSet = p.rCtx.state.fontDetails?.charSet ?? 1;
|
|
42543
|
-
const { codes, byteLengths } = decodeAnsiRecord(call.bytes, charSet);
|
|
42596
|
+
const { codes, byteLengths } = decodeAnsiRecord(call.bytes, charSet, { ansi: p.ansiCodePage, oem: p.oemCodePage });
|
|
42544
42597
|
const n = codes.length;
|
|
42545
42598
|
if (n === 0) {
|
|
42546
42599
|
return;
|
|
@@ -42672,6 +42725,8 @@ function createWmfPlayer(view, ctx, header, canvasW, canvasH, replayOptions = {}
|
|
|
42672
42725
|
};
|
|
42673
42726
|
const p = {
|
|
42674
42727
|
rCtx,
|
|
42728
|
+
ansiCodePage: replayOptions.wmfAnsiCodePage ?? replayOptions.codePages?.ansi,
|
|
42729
|
+
oemCodePage: replayOptions.codePages?.oem,
|
|
42675
42730
|
view,
|
|
42676
42731
|
kx,
|
|
42677
42732
|
ky,
|
|
@@ -43170,6 +43225,7 @@ async function replayMetafile(buffer, options2, createSurface) {
|
|
|
43170
43225
|
maxRecords: opts.maxRecords,
|
|
43171
43226
|
maxRecordsEmfPlus: opts.maxRecords,
|
|
43172
43227
|
fontFamilyMap: opts.fontFamilyMap,
|
|
43228
|
+
codePages: { ansi: opts.ansiCodePage, oem: opts.oemCodePage },
|
|
43173
43229
|
textureCache,
|
|
43174
43230
|
imageCache,
|
|
43175
43231
|
gdiAntialias: opts.gdiAntialias,
|
|
@@ -43203,6 +43259,8 @@ async function replayMetafile(buffer, options2, createSurface) {
|
|
|
43203
43259
|
surface.ctx.save();
|
|
43204
43260
|
replayWmfRecords(view, surface.ctx, header, surface.width, surface.height, {
|
|
43205
43261
|
wmfReferenceDpi: opts.wmfReferenceDpi,
|
|
43262
|
+
wmfAnsiCodePage: opts.wmfAnsiCodePage,
|
|
43263
|
+
codePages: { ansi: opts.ansiCodePage, oem: opts.oemCodePage },
|
|
43206
43264
|
maxRecords: opts.maxRecords,
|
|
43207
43265
|
fontFamilyMap: opts.fontFamilyMap,
|
|
43208
43266
|
gdiAntialias: opts.gdiAntialias,
|
package/dist/browser.mjs
CHANGED
|
@@ -24850,6 +24850,7 @@ function drawNestedMetafile(rCtx, img, cached, source) {
|
|
|
24850
24850
|
imageCache: caches?.images,
|
|
24851
24851
|
fontFamilyMap: rCtx.fontFamilyMap,
|
|
24852
24852
|
gdiAntialias: rCtx.gdiAntialias,
|
|
24853
|
+
codePages: rCtx.codePages,
|
|
24853
24854
|
nestingDepth: depth + 1
|
|
24854
24855
|
});
|
|
24855
24856
|
} finally {
|
|
@@ -36047,6 +36048,20 @@ function handleEmfGdiBlendBlitRecord(rCtx, recType, offset, dataOff, recSize) {
|
|
|
36047
36048
|
|
|
36048
36049
|
// src/emf-ansi-tables.ts
|
|
36049
36050
|
var OEM437_HIGH = "\xC7\xFC\xE9\xE2\xE4\xE0\xE5\xE7\xEA\xEB\xE8\xEF\xEE\xEC\xC4\xC5\xC9\xE6\xC6\xF4\xF6\xF2\xFB\xF9\xFF\xD6\xDC\xA2\xA3\xA5\u20A7\u0192\xE1\xED\xF3\xFA\xF1\xD1\xAA\xBA\xBF\u2310\xAC\xBD\xBC\xA1\xAB\xBB\u2591\u2592\u2593\u2502\u2524\u2561\u2562\u2556\u2555\u2563\u2551\u2557\u255D\u255C\u255B\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u255E\u255F\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u2567\u2568\u2564\u2565\u2559\u2558\u2552\u2553\u256B\u256A\u2518\u250C\u2588\u2584\u258C\u2590\u2580\u03B1\xDF\u0393\u03C0\u03A3\u03C3\xB5\u03C4\u03A6\u0398\u03A9\u03B4\u221E\u03C6\u03B5\u2229\u2261\xB1\u2265\u2264\u2320\u2321\xF7\u2248\xB0\u2219\xB7\u221A\u207F\xB2\u25A0\xA0";
|
|
36051
|
+
var OEM_HIGH = {
|
|
36052
|
+
737: "\u0391\u0392\u0393\u0394\u0395\u0396\u0397\u0398\u0399\u039A\u039B\u039C\u039D\u039E\u039F\u03A0\u03A1\u03A3\u03A4\u03A5\u03A6\u03A7\u03A8\u03A9\u03B1\u03B2\u03B3\u03B4\u03B5\u03B6\u03B7\u03B8\u03B9\u03BA\u03BB\u03BC\u03BD\u03BE\u03BF\u03C0\u03C1\u03C3\u03C2\u03C4\u03C5\u03C6\u03C7\u03C8\u2591\u2592\u2593\u2502\u2524\u2561\u2562\u2556\u2555\u2563\u2551\u2557\u255D\u255C\u255B\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u255E\u255F\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u2567\u2568\u2564\u2565\u2559\u2558\u2552\u2553\u256B\u256A\u2518\u250C\u2588\u2584\u258C\u2590\u2580\u03C9\u03AC\u03AD\u03AE\u03CA\u03AF\u03CC\u03CD\u03CB\u03CE\u0386\u0388\u0389\u038A\u038C\u038E\u038F\xB1\u2265\u2264\u03AA\u03AB\xF7\u2248\xB0\u2219\xB7\u221A\u207F\xB2\u25A0\xA0",
|
|
36053
|
+
775: "\u0106\xFC\xE9\u0101\xE4\u0123\xE5\u0107\u0142\u0113\u0156\u0157\u012B\u0179\xC4\xC5\xC9\xE6\xC6\u014D\xF6\u0122\xA2\u015A\u015B\xD6\xDC\xF8\xA3\xD8\xD7\xA4\u0100\u012A\xF3\u017B\u017C\u017A\u201D\xA6\xA9\xAE\xAC\xBD\xBC\u0141\xAB\xBB\u2591\u2592\u2593\u2502\u2524\u0104\u010C\u0118\u0116\u2563\u2551\u2557\u255D\u012E\u0160\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u0172\u016A\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u017D\u0105\u010D\u0119\u0117\u012F\u0161\u0173\u016B\u017E\u2518\u250C\u2588\u2584\u258C\u2590\u2580\xD3\xDF\u014C\u0143\xF5\xD5\xB5\u0144\u0136\u0137\u013B\u013C\u0146\u0112\u0145\u2019\xAD\xB1\u201C\xBE\xB6\xA7\xF7\u201E\xB0\u2219\xB7\xB9\xB3\xB2\u25A0\xA0",
|
|
36054
|
+
850: "\xC7\xFC\xE9\xE2\xE4\xE0\xE5\xE7\xEA\xEB\xE8\xEF\xEE\xEC\xC4\xC5\xC9\xE6\xC6\xF4\xF6\xF2\xFB\xF9\xFF\xD6\xDC\xF8\xA3\xD8\xD7\u0192\xE1\xED\xF3\xFA\xF1\xD1\xAA\xBA\xBF\xAE\xAC\xBD\xBC\xA1\xAB\xBB\u2591\u2592\u2593\u2502\u2524\xC1\xC2\xC0\xA9\u2563\u2551\u2557\u255D\xA2\xA5\u2510\u2514\u2534\u252C\u251C\u2500\u253C\xE3\xC3\u255A\u2554\u2569\u2566\u2560\u2550\u256C\xA4\xF0\xD0\xCA\xCB\xC8\u0131\xCD\xCE\xCF\u2518\u250C\u2588\u2584\xA6\xCC\u2580\xD3\xDF\xD4\xD2\xF5\xD5\xB5\xFE\xDE\xDA\xDB\xD9\xFD\xDD\xAF\xB4\xAD\xB1\u2017\xBE\xB6\xA7\xF7\xB8\xB0\xA8\xB7\xB9\xB3\xB2\u25A0\xA0",
|
|
36055
|
+
852: "\xC7\xFC\xE9\xE2\xE4\u016F\u0107\xE7\u0142\xEB\u0150\u0151\xEE\u0179\xC4\u0106\xC9\u0139\u013A\xF4\xF6\u013D\u013E\u015A\u015B\xD6\xDC\u0164\u0165\u0141\xD7\u010D\xE1\xED\xF3\xFA\u0104\u0105\u017D\u017E\u0118\u0119\xAC\u017A\u010C\u015F\xAB\xBB\u2591\u2592\u2593\u2502\u2524\xC1\xC2\u011A\u015E\u2563\u2551\u2557\u255D\u017B\u017C\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u0102\u0103\u255A\u2554\u2569\u2566\u2560\u2550\u256C\xA4\u0111\u0110\u010E\xCB\u010F\u0147\xCD\xCE\u011B\u2518\u250C\u2588\u2584\u0162\u016E\u2580\xD3\xDF\xD4\u0143\u0144\u0148\u0160\u0161\u0154\xDA\u0155\u0170\xFD\xDD\u0163\xB4\xAD\u02DD\u02DB\u02C7\u02D8\xA7\xF7\xB8\xB0\xA8\u02D9\u0171\u0158\u0159\u25A0\xA0",
|
|
36056
|
+
855: "\u0452\u0402\u0453\u0403\u0451\u0401\u0454\u0404\u0455\u0405\u0456\u0406\u0457\u0407\u0458\u0408\u0459\u0409\u045A\u040A\u045B\u040B\u045C\u040C\u045E\u040E\u045F\u040F\u044E\u042E\u044A\u042A\u0430\u0410\u0431\u0411\u0446\u0426\u0434\u0414\u0435\u0415\u0444\u0424\u0433\u0413\xAB\xBB\u2591\u2592\u2593\u2502\u2524\u0445\u0425\u0438\u0418\u2563\u2551\u2557\u255D\u0439\u0419\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u043A\u041A\u255A\u2554\u2569\u2566\u2560\u2550\u256C\xA4\u043B\u041B\u043C\u041C\u043D\u041D\u043E\u041E\u043F\u2518\u250C\u2588\u2584\u041F\u044F\u2580\u042F\u0440\u0420\u0441\u0421\u0442\u0422\u0443\u0423\u0436\u0416\u0432\u0412\u044C\u042C\u2116\xAD\u044B\u042B\u0437\u0417\u0448\u0428\u044D\u042D\u0449\u0429\u0447\u0427\xA7\u25A0\xA0",
|
|
36057
|
+
858: "\xC7\xFC\xE9\xE2\xE4\xE0\xE5\xE7\xEA\xEB\xE8\xEF\xEE\xEC\xC4\xC5\xC9\xE6\xC6\xF4\xF6\xF2\xFB\xF9\xFF\xD6\xDC\xF8\xA3\xD8\xD7\u0192\xE1\xED\xF3\xFA\xF1\xD1\xAA\xBA\xBF\xAE\xAC\xBD\xBC\xA1\xAB\xBB\u2591\u2592\u2593\u2502\u2524\xC1\xC2\xC0\xA9\u2563\u2551\u2557\u255D\xA2\xA5\u2510\u2514\u2534\u252C\u251C\u2500\u253C\xE3\xC3\u255A\u2554\u2569\u2566\u2560\u2550\u256C\xA4\xF0\xD0\xCA\xCB\xC8\u20AC\xCD\xCE\xCF\u2518\u250C\u2588\u2584\xA6\xCC\u2580\xD3\xDF\xD4\xD2\xF5\xD5\xB5\xFE\xDE\xDA\xDB\xD9\xFD\xDD\xAF\xB4\xAD\xB1\u2017\xBE\xB6\xA7\xF7\xB8\xB0\xA8\xB7\xB9\xB3\xB2\u25A0\xA0",
|
|
36058
|
+
860: "\xC7\xFC\xE9\xE2\xE3\xE0\xC1\xE7\xEA\xCA\xE8\xCD\xD4\xEC\xC3\xC2\xC9\xC0\xC8\xF4\xF5\xF2\xDA\xF9\xCC\xD5\xDC\xA2\xA3\xD9\u20A7\xD3\xE1\xED\xF3\xFA\xF1\xD1\xAA\xBA\xBF\xD2\xAC\xBD\xBC\xA1\xAB\xBB\u2591\u2592\u2593\u2502\u2524\u2561\u2562\u2556\u2555\u2563\u2551\u2557\u255D\u255C\u255B\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u255E\u255F\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u2567\u2568\u2564\u2565\u2559\u2558\u2552\u2553\u256B\u256A\u2518\u250C\u2588\u2584\u258C\u2590\u2580\u03B1\xDF\u0393\u03C0\u03A3\u03C3\xB5\u03C4\u03A6\u0398\u03A9\u03B4\u221E\u03C6\u03B5\u2229\u2261\xB1\u2265\u2264\u2320\u2321\xF7\u2248\xB0\u2219\xB7\u221A\u207F\xB2\u25A0\xA0",
|
|
36059
|
+
861: "\xC7\xFC\xE9\xE2\xE4\xE0\xE5\xE7\xEA\xEB\xE8\xD0\xF0\xDE\xC4\xC5\xC9\xE6\xC6\xF4\xF6\xFE\xFB\xDD\xFD\xD6\xDC\xF8\xA3\xD8\u20A7\u0192\xE1\xED\xF3\xFA\xC1\xCD\xD3\xDA\xBF\u2310\xAC\xBD\xBC\xA1\xAB\xBB\u2591\u2592\u2593\u2502\u2524\u2561\u2562\u2556\u2555\u2563\u2551\u2557\u255D\u255C\u255B\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u255E\u255F\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u2567\u2568\u2564\u2565\u2559\u2558\u2552\u2553\u256B\u256A\u2518\u250C\u2588\u2584\u258C\u2590\u2580\u03B1\xDF\u0393\u03C0\u03A3\u03C3\xB5\u03C4\u03A6\u0398\u03A9\u03B4\u221E\u03C6\u03B5\u2229\u2261\xB1\u2265\u2264\u2320\u2321\xF7\u2248\xB0\u2219\xB7\u221A\u207F\xB2\u25A0\xA0",
|
|
36060
|
+
862: "\u05D0\u05D1\u05D2\u05D3\u05D4\u05D5\u05D6\u05D7\u05D8\u05D9\u05DA\u05DB\u05DC\u05DD\u05DE\u05DF\u05E0\u05E1\u05E2\u05E3\u05E4\u05E5\u05E6\u05E7\u05E8\u05E9\u05EA\xA2\xA3\xA5\u20A7\u0192\xE1\xED\xF3\xFA\xF1\xD1\xAA\xBA\xBF\u2310\xAC\xBD\xBC\xA1\xAB\xBB\u2591\u2592\u2593\u2502\u2524\u2561\u2562\u2556\u2555\u2563\u2551\u2557\u255D\u255C\u255B\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u255E\u255F\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u2567\u2568\u2564\u2565\u2559\u2558\u2552\u2553\u256B\u256A\u2518\u250C\u2588\u2584\u258C\u2590\u2580\u03B1\xDF\u0393\u03C0\u03A3\u03C3\xB5\u03C4\u03A6\u0398\u03A9\u03B4\u221E\u03C6\u03B5\u2229\u2261\xB1\u2265\u2264\u2320\u2321\xF7\u2248\xB0\u2219\xB7\u221A\u207F\xB2\u25A0\xA0",
|
|
36061
|
+
863: "\xC7\xFC\xE9\xE2\xC2\xE0\xB6\xE7\xEA\xEB\xE8\xEF\xEE\u2017\xC0\xA7\xC9\xC8\xCA\xF4\xCB\xCF\xFB\xF9\xA4\xD4\xDC\xA2\xA3\xD9\xDB\u0192\xA6\xB4\xF3\xFA\xA8\xB8\xB3\xAF\xCE\u2310\xAC\xBD\xBC\xBE\xAB\xBB\u2591\u2592\u2593\u2502\u2524\u2561\u2562\u2556\u2555\u2563\u2551\u2557\u255D\u255C\u255B\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u255E\u255F\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u2567\u2568\u2564\u2565\u2559\u2558\u2552\u2553\u256B\u256A\u2518\u250C\u2588\u2584\u258C\u2590\u2580\u03B1\xDF\u0393\u03C0\u03A3\u03C3\xB5\u03C4\u03A6\u0398\u03A9\u03B4\u221E\u03C6\u03B5\u2229\u2261\xB1\u2265\u2264\u2320\u2321\xF7\u2248\xB0\u2219\xB7\u221A\u207F\xB2\u25A0\xA0",
|
|
36062
|
+
865: "\xC7\xFC\xE9\xE2\xE4\xE0\xE5\xE7\xEA\xEB\xE8\xEF\xEE\xEC\xC4\xC5\xC9\xE6\xC6\xF4\xF6\xF2\xFB\xF9\xFF\xD6\xDC\xF8\xA3\xD8\u20A7\u0192\xE1\xED\xF3\xFA\xF1\xD1\xAA\xBA\xBF\u2310\xAC\xBD\xBC\xA1\xAB\xA4\u2591\u2592\u2593\u2502\u2524\u2561\u2562\u2556\u2555\u2563\u2551\u2557\u255D\u255C\u255B\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u255E\u255F\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u2567\u2568\u2564\u2565\u2559\u2558\u2552\u2553\u256B\u256A\u2518\u250C\u2588\u2584\u258C\u2590\u2580\u03B1\xDF\u0393\u03C0\u03A3\u03C3\xB5\u03C4\u03A6\u0398\u03A9\u03B4\u221E\u03C6\u03B5\u2229\u2261\xB1\u2265\u2264\u2320\u2321\xF7\u2248\xB0\u2219\xB7\u221A\u207F\xB2\u25A0\xA0",
|
|
36063
|
+
866: "\u0410\u0411\u0412\u0413\u0414\u0415\u0416\u0417\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u0420\u0421\u0422\u0423\u0424\u0425\u0426\u0427\u0428\u0429\u042A\u042B\u042C\u042D\u042E\u042F\u0430\u0431\u0432\u0433\u0434\u0435\u0436\u0437\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u2591\u2592\u2593\u2502\u2524\u2561\u2562\u2556\u2555\u2563\u2551\u2557\u255D\u255C\u255B\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u255E\u255F\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u2567\u2568\u2564\u2565\u2559\u2558\u2552\u2553\u256B\u256A\u2518\u250C\u2588\u2584\u258C\u2590\u2580\u0440\u0441\u0442\u0443\u0444\u0445\u0446\u0447\u0448\u0449\u044A\u044B\u044C\u044D\u044E\u044F\u0401\u0451\u0404\u0454\u0407\u0457\u040E\u045E\xB0\u2219\xB7\u221A\u2116\xA4\u25A0\xA0"
|
|
36064
|
+
};
|
|
36050
36065
|
var JOHAB_ROWS = {
|
|
36051
36066
|
132: "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u11A8\u11A9\u11AA\u11AB\u11AC\u11AD\u11AE\u11AF\u11B0\u11B1\u11B2\u11B3\u11B4\u11B5\u11B6\u11B7\uFFFD\u11B8\u11B9\u11BA\u11BB\u11BC\u11BD\u11BE\u11BF\u11C0\u11C1\u11C2\uFFFD\uFFFD\uFFFD\u1161\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u1162\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u1163\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u1164\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u1165\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD",
|
|
36052
36067
|
133: "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u1166\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u1167\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u1168\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u1169\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u116A\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u116B\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD",
|
|
@@ -36221,12 +36236,41 @@ var CHARSET_ENCODING = {
|
|
|
36221
36236
|
238: "windows-1250",
|
|
36222
36237
|
255: "ibm437"
|
|
36223
36238
|
};
|
|
36224
|
-
|
|
36239
|
+
var ANSI_CODE_PAGE_ENCODING = {
|
|
36240
|
+
874: "windows-874",
|
|
36241
|
+
932: "shift_jis",
|
|
36242
|
+
936: "gbk",
|
|
36243
|
+
949: "euc-kr",
|
|
36244
|
+
950: "big5",
|
|
36245
|
+
1250: "windows-1250",
|
|
36246
|
+
1251: "windows-1251",
|
|
36247
|
+
1252: "windows-1252",
|
|
36248
|
+
1253: "windows-1253",
|
|
36249
|
+
1254: "windows-1254",
|
|
36250
|
+
1255: "windows-1255",
|
|
36251
|
+
1256: "windows-1256",
|
|
36252
|
+
1257: "windows-1257",
|
|
36253
|
+
1258: "windows-1258",
|
|
36254
|
+
54936: "gb18030",
|
|
36255
|
+
65001: "utf-8"
|
|
36256
|
+
};
|
|
36257
|
+
var OEM_CODE_PAGE_ENCODING = {
|
|
36258
|
+
874: "windows-874",
|
|
36259
|
+
932: "shift_jis",
|
|
36260
|
+
936: "gbk",
|
|
36261
|
+
949: "euc-kr",
|
|
36262
|
+
950: "big5"
|
|
36263
|
+
};
|
|
36264
|
+
function decodeOemTable(bytes, high) {
|
|
36265
|
+
return { codes: bytes.map((b) => b < 128 ? b : high.charCodeAt(b - 128)), byteLengths: bytes.map(() => 1) };
|
|
36266
|
+
}
|
|
36267
|
+
function decodeAnsiRecord(bytes, charSet, codePages) {
|
|
36225
36268
|
if (charSet === 2) {
|
|
36226
36269
|
return { codes: [...bytes], byteLengths: bytes.map(() => 1) };
|
|
36227
36270
|
}
|
|
36228
|
-
|
|
36229
|
-
|
|
36271
|
+
const oemCodePage = codePages?.oem;
|
|
36272
|
+
if (charSet === 255 && (oemCodePage === void 0 || !(oemCodePage in OEM_CODE_PAGE_ENCODING))) {
|
|
36273
|
+
return decodeOemTable(bytes, (oemCodePage !== void 0 ? OEM_HIGH[oemCodePage] : void 0) ?? OEM437_HIGH);
|
|
36230
36274
|
}
|
|
36231
36275
|
if (charSet === 130) {
|
|
36232
36276
|
const codes = [];
|
|
@@ -36242,10 +36286,14 @@ function decodeAnsiRecord(bytes, charSet) {
|
|
|
36242
36286
|
}
|
|
36243
36287
|
return { codes, byteLengths };
|
|
36244
36288
|
}
|
|
36245
|
-
const
|
|
36289
|
+
const ansiCodePage = codePages?.ansi;
|
|
36290
|
+
const label = charSet === 255 && oemCodePage !== void 0 ? OEM_CODE_PAGE_ENCODING[oemCodePage] : (charSet === 0 || charSet === 1) && ansiCodePage !== void 0 ? ANSI_CODE_PAGE_ENCODING[ansiCodePage] ?? "windows-1252" : CHARSET_ENCODING[charSet] ?? "windows-1252";
|
|
36291
|
+
if (label === "windows-1252") {
|
|
36292
|
+
return { codes: bytes.map((b) => ansiToCode(b, charSet)), byteLengths: bytes.map(() => 1) };
|
|
36293
|
+
}
|
|
36246
36294
|
try {
|
|
36247
|
-
const decoder = new TextDecoder(label, { fatal: true });
|
|
36248
|
-
const replacementDecoder = new TextDecoder(label);
|
|
36295
|
+
const decoder = new TextDecoder(label, { fatal: true, ignoreBOM: true });
|
|
36296
|
+
const replacementDecoder = new TextDecoder(label, { ignoreBOM: true });
|
|
36249
36297
|
const source = new Uint8Array(bytes);
|
|
36250
36298
|
const codes = [];
|
|
36251
36299
|
const byteLengths = [];
|
|
@@ -37059,8 +37107,9 @@ function drawTextCall(rCtx, x, y, codes, options2, rect, dx) {
|
|
|
37059
37107
|
const child = { ...rCtx, view };
|
|
37060
37108
|
handleExtTextOutW(child, 0, 8, size);
|
|
37061
37109
|
}
|
|
37062
|
-
function readAnsiRecord(
|
|
37063
|
-
|
|
37110
|
+
function readAnsiRecord(rCtx, start, count, charSet) {
|
|
37111
|
+
const { view } = rCtx;
|
|
37112
|
+
return decodeAnsiRecord(Array.from({ length: count }, (_, i) => view.getUint8(start + i)), charSet, rCtx.codePages);
|
|
37064
37113
|
}
|
|
37065
37114
|
function collapseAnsiDx(dx, byteLengths, pdy) {
|
|
37066
37115
|
if (!dx) return null;
|
|
@@ -37095,7 +37144,7 @@ function handlePolyText(rCtx, offset, dataOff, recSize, wide) {
|
|
|
37095
37144
|
const offDx = view.getUint32(e + 36, true);
|
|
37096
37145
|
const unit = wide ? 2 : 1;
|
|
37097
37146
|
if (!offString || offString > end - offset || n > Math.floor((end - (offset + offString)) / unit)) continue;
|
|
37098
|
-
const ansi = wide ? null : readAnsiRecord(
|
|
37147
|
+
const ansi = wide ? null : readAnsiRecord(rCtx, offset + offString, n, charSet);
|
|
37099
37148
|
const codes = wide ? Array.from({ length: n }, (_, j) => view.getUint16(offset + offString + j * 2, true)) : ansi.codes;
|
|
37100
37149
|
let dx = null;
|
|
37101
37150
|
const pdy = (options2 & ETO_PDY) !== 0;
|
|
@@ -37136,7 +37185,7 @@ function handleEmfGdiDrawTextRecord(rCtx, recType, offset, dataOff, recSize) {
|
|
|
37136
37185
|
const n = view.getUint32(dataOff + 36, true), strOff = view.getUint32(dataOff + 40, true), options2 = view.getUint32(dataOff + 44, true);
|
|
37137
37186
|
if (!strOff || strOff > end - offset) return true;
|
|
37138
37187
|
if (n > end - (offset + strOff)) return true;
|
|
37139
|
-
const ansi = readAnsiRecord(
|
|
37188
|
+
const ansi = readAnsiRecord(rCtx, offset + strOff, n, state.fontDetails?.charSet ?? 1);
|
|
37140
37189
|
const rect = [view.getInt32(dataOff + 48, true), view.getInt32(dataOff + 52, true), view.getInt32(dataOff + 56, true), view.getInt32(dataOff + 60, true)];
|
|
37141
37190
|
const offDx = view.getUint32(dataOff + 64, true);
|
|
37142
37191
|
let dx = null;
|
|
@@ -40891,6 +40940,7 @@ function replayEmfPlusRecords(view, offset, length, ctx, canvasW, canvasH, state
|
|
|
40891
40940
|
imageCache: s.imageCache,
|
|
40892
40941
|
nestingDepth: s.nestingDepth,
|
|
40893
40942
|
gdiAntialias: s.gdiAntialias,
|
|
40943
|
+
codePages: s.codePages,
|
|
40894
40944
|
antiAlias: s.antiAlias,
|
|
40895
40945
|
ext: s.ext ?? (s.ext = {})
|
|
40896
40946
|
};
|
|
@@ -41068,6 +41118,7 @@ function replayEmfRecords(view, ctx, bounds, canvasW, canvasH, dpiScale = 1, rep
|
|
|
41068
41118
|
const plusScale = dpiScale > 0 ? dpiScale : 1;
|
|
41069
41119
|
emfPlusState.imageCache = replayOptions.imageCache;
|
|
41070
41120
|
emfPlusState.gdiAntialias = replayOptions.gdiAntialias;
|
|
41121
|
+
emfPlusState.codePages = replayOptions.codePages;
|
|
41071
41122
|
emfPlusState.baseTransform = replayOptions.plusBaseTransform ?? [
|
|
41072
41123
|
sx / plusScale,
|
|
41073
41124
|
0,
|
|
@@ -41107,7 +41158,8 @@ function replayEmfRecords(view, ctx, bounds, canvasW, canvasH, dpiScale = 1, rep
|
|
|
41107
41158
|
sy,
|
|
41108
41159
|
pathCmds: [],
|
|
41109
41160
|
gdiAntialias: replayOptions.gdiAntialias,
|
|
41110
|
-
fonts: replayOptions.fonts
|
|
41161
|
+
fonts: replayOptions.fonts,
|
|
41162
|
+
codePages: replayOptions.codePages
|
|
41111
41163
|
};
|
|
41112
41164
|
let offset = 0;
|
|
41113
41165
|
const maxOffset = view.byteLength;
|
|
@@ -41504,14 +41556,15 @@ function createFont(p, dataOff, recSize, recEnd) {
|
|
|
41504
41556
|
addObject(p, { kind: "other" });
|
|
41505
41557
|
return;
|
|
41506
41558
|
}
|
|
41507
|
-
|
|
41559
|
+
const faceBytes = [];
|
|
41508
41560
|
for (let i = 0; i < 32 && dataOff + 18 + i < recEnd; i++) {
|
|
41509
41561
|
const ch = view.getUint8(dataOff + 18 + i);
|
|
41510
41562
|
if (ch === 0) {
|
|
41511
41563
|
break;
|
|
41512
41564
|
}
|
|
41513
|
-
|
|
41565
|
+
faceBytes.push(ch);
|
|
41514
41566
|
}
|
|
41567
|
+
const family = String.fromCharCode(...decodeAnsiRecord(faceBytes, 1, { ansi: p.ansiCodePage }).codes);
|
|
41515
41568
|
const font = {
|
|
41516
41569
|
kind: "font",
|
|
41517
41570
|
// Sign kept: resolveFontPixelHeight() tells cell from character height by it.
|
|
@@ -42538,7 +42591,7 @@ function drawWithFontEngine2(p, call, codes, dx) {
|
|
|
42538
42591
|
}
|
|
42539
42592
|
function playText(p, call) {
|
|
42540
42593
|
const charSet = p.rCtx.state.fontDetails?.charSet ?? 1;
|
|
42541
|
-
const { codes, byteLengths } = decodeAnsiRecord(call.bytes, charSet);
|
|
42594
|
+
const { codes, byteLengths } = decodeAnsiRecord(call.bytes, charSet, { ansi: p.ansiCodePage, oem: p.oemCodePage });
|
|
42542
42595
|
const n = codes.length;
|
|
42543
42596
|
if (n === 0) {
|
|
42544
42597
|
return;
|
|
@@ -42670,6 +42723,8 @@ function createWmfPlayer(view, ctx, header, canvasW, canvasH, replayOptions = {}
|
|
|
42670
42723
|
};
|
|
42671
42724
|
const p = {
|
|
42672
42725
|
rCtx,
|
|
42726
|
+
ansiCodePage: replayOptions.wmfAnsiCodePage ?? replayOptions.codePages?.ansi,
|
|
42727
|
+
oemCodePage: replayOptions.codePages?.oem,
|
|
42673
42728
|
view,
|
|
42674
42729
|
kx,
|
|
42675
42730
|
ky,
|
|
@@ -43168,6 +43223,7 @@ async function replayMetafile(buffer, options2, createSurface) {
|
|
|
43168
43223
|
maxRecords: opts.maxRecords,
|
|
43169
43224
|
maxRecordsEmfPlus: opts.maxRecords,
|
|
43170
43225
|
fontFamilyMap: opts.fontFamilyMap,
|
|
43226
|
+
codePages: { ansi: opts.ansiCodePage, oem: opts.oemCodePage },
|
|
43171
43227
|
textureCache,
|
|
43172
43228
|
imageCache,
|
|
43173
43229
|
gdiAntialias: opts.gdiAntialias,
|
|
@@ -43201,6 +43257,8 @@ async function replayMetafile(buffer, options2, createSurface) {
|
|
|
43201
43257
|
surface.ctx.save();
|
|
43202
43258
|
replayWmfRecords(view, surface.ctx, header, surface.width, surface.height, {
|
|
43203
43259
|
wmfReferenceDpi: opts.wmfReferenceDpi,
|
|
43260
|
+
wmfAnsiCodePage: opts.wmfAnsiCodePage,
|
|
43261
|
+
codePages: { ansi: opts.ansiCodePage, oem: opts.oemCodePage },
|
|
43204
43262
|
maxRecords: opts.maxRecords,
|
|
43205
43263
|
fontFamilyMap: opts.fontFamilyMap,
|
|
43206
43264
|
gdiAntialias: opts.gdiAntialias,
|
package/dist/index.d.mts
CHANGED
|
@@ -113,6 +113,27 @@ interface EmfConvertOptions {
|
|
|
113
113
|
x: number;
|
|
114
114
|
y: number;
|
|
115
115
|
};
|
|
116
|
+
/**
|
|
117
|
+
* ANSI code page of the playback device (Windows `GetACP()`), used for
|
|
118
|
+
* ANSI/DEFAULT charset text in EMF and WMF ANSI text records and for WMF
|
|
119
|
+
* LOGFONT face names, as Windows decodes them. Defaults to 1252.
|
|
120
|
+
* Supported values: 874, 932, 936, 949, 950, 1250..1258, 54936 and
|
|
121
|
+
* 65001. Other values fall back to 1252. Explicit text charsets keep
|
|
122
|
+
* their own code page.
|
|
123
|
+
*/
|
|
124
|
+
ansiCodePage?: number;
|
|
125
|
+
/**
|
|
126
|
+
* OEM code page of the playback device (Windows `GetOEMCP()`), used for
|
|
127
|
+
* OEM_CHARSET text in EMF and WMF ANSI text records. Defaults to 437.
|
|
128
|
+
* Supported values: 437, 737, 775, 850, 852, 855, 858, 860, 861, 862,
|
|
129
|
+
* 863, 865, 866, 874, 932, 936, 949 and 950. Other values fall back to 437.
|
|
130
|
+
*/
|
|
131
|
+
oemCodePage?: number;
|
|
132
|
+
/**
|
|
133
|
+
* ANSI code page of the WMF playback device only; overrides
|
|
134
|
+
* {@link ansiCodePage} for WMF input. Same values as `ansiCodePage`.
|
|
135
|
+
*/
|
|
136
|
+
wmfAnsiCodePage?: number;
|
|
116
137
|
/** Maximum output width in pixels. */
|
|
117
138
|
maxWidth?: number;
|
|
118
139
|
/** Maximum output height in pixels. */
|
package/dist/index.d.ts
CHANGED
|
@@ -113,6 +113,27 @@ interface EmfConvertOptions {
|
|
|
113
113
|
x: number;
|
|
114
114
|
y: number;
|
|
115
115
|
};
|
|
116
|
+
/**
|
|
117
|
+
* ANSI code page of the playback device (Windows `GetACP()`), used for
|
|
118
|
+
* ANSI/DEFAULT charset text in EMF and WMF ANSI text records and for WMF
|
|
119
|
+
* LOGFONT face names, as Windows decodes them. Defaults to 1252.
|
|
120
|
+
* Supported values: 874, 932, 936, 949, 950, 1250..1258, 54936 and
|
|
121
|
+
* 65001. Other values fall back to 1252. Explicit text charsets keep
|
|
122
|
+
* their own code page.
|
|
123
|
+
*/
|
|
124
|
+
ansiCodePage?: number;
|
|
125
|
+
/**
|
|
126
|
+
* OEM code page of the playback device (Windows `GetOEMCP()`), used for
|
|
127
|
+
* OEM_CHARSET text in EMF and WMF ANSI text records. Defaults to 437.
|
|
128
|
+
* Supported values: 437, 737, 775, 850, 852, 855, 858, 860, 861, 862,
|
|
129
|
+
* 863, 865, 866, 874, 932, 936, 949 and 950. Other values fall back to 437.
|
|
130
|
+
*/
|
|
131
|
+
oemCodePage?: number;
|
|
132
|
+
/**
|
|
133
|
+
* ANSI code page of the WMF playback device only; overrides
|
|
134
|
+
* {@link ansiCodePage} for WMF input. Same values as `ansiCodePage`.
|
|
135
|
+
*/
|
|
136
|
+
wmfAnsiCodePage?: number;
|
|
116
137
|
/** Maximum output width in pixels. */
|
|
117
138
|
maxWidth?: number;
|
|
118
139
|
/** Maximum output height in pixels. */
|
package/dist/index.js
CHANGED
|
@@ -24853,6 +24853,7 @@ function drawNestedMetafile(rCtx, img, cached, source) {
|
|
|
24853
24853
|
imageCache: caches?.images,
|
|
24854
24854
|
fontFamilyMap: rCtx.fontFamilyMap,
|
|
24855
24855
|
gdiAntialias: rCtx.gdiAntialias,
|
|
24856
|
+
codePages: rCtx.codePages,
|
|
24856
24857
|
nestingDepth: depth + 1
|
|
24857
24858
|
});
|
|
24858
24859
|
} finally {
|
|
@@ -36050,6 +36051,20 @@ function handleEmfGdiBlendBlitRecord(rCtx, recType, offset, dataOff, recSize) {
|
|
|
36050
36051
|
|
|
36051
36052
|
// src/emf-ansi-tables.ts
|
|
36052
36053
|
var OEM437_HIGH = "\xC7\xFC\xE9\xE2\xE4\xE0\xE5\xE7\xEA\xEB\xE8\xEF\xEE\xEC\xC4\xC5\xC9\xE6\xC6\xF4\xF6\xF2\xFB\xF9\xFF\xD6\xDC\xA2\xA3\xA5\u20A7\u0192\xE1\xED\xF3\xFA\xF1\xD1\xAA\xBA\xBF\u2310\xAC\xBD\xBC\xA1\xAB\xBB\u2591\u2592\u2593\u2502\u2524\u2561\u2562\u2556\u2555\u2563\u2551\u2557\u255D\u255C\u255B\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u255E\u255F\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u2567\u2568\u2564\u2565\u2559\u2558\u2552\u2553\u256B\u256A\u2518\u250C\u2588\u2584\u258C\u2590\u2580\u03B1\xDF\u0393\u03C0\u03A3\u03C3\xB5\u03C4\u03A6\u0398\u03A9\u03B4\u221E\u03C6\u03B5\u2229\u2261\xB1\u2265\u2264\u2320\u2321\xF7\u2248\xB0\u2219\xB7\u221A\u207F\xB2\u25A0\xA0";
|
|
36054
|
+
var OEM_HIGH = {
|
|
36055
|
+
737: "\u0391\u0392\u0393\u0394\u0395\u0396\u0397\u0398\u0399\u039A\u039B\u039C\u039D\u039E\u039F\u03A0\u03A1\u03A3\u03A4\u03A5\u03A6\u03A7\u03A8\u03A9\u03B1\u03B2\u03B3\u03B4\u03B5\u03B6\u03B7\u03B8\u03B9\u03BA\u03BB\u03BC\u03BD\u03BE\u03BF\u03C0\u03C1\u03C3\u03C2\u03C4\u03C5\u03C6\u03C7\u03C8\u2591\u2592\u2593\u2502\u2524\u2561\u2562\u2556\u2555\u2563\u2551\u2557\u255D\u255C\u255B\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u255E\u255F\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u2567\u2568\u2564\u2565\u2559\u2558\u2552\u2553\u256B\u256A\u2518\u250C\u2588\u2584\u258C\u2590\u2580\u03C9\u03AC\u03AD\u03AE\u03CA\u03AF\u03CC\u03CD\u03CB\u03CE\u0386\u0388\u0389\u038A\u038C\u038E\u038F\xB1\u2265\u2264\u03AA\u03AB\xF7\u2248\xB0\u2219\xB7\u221A\u207F\xB2\u25A0\xA0",
|
|
36056
|
+
775: "\u0106\xFC\xE9\u0101\xE4\u0123\xE5\u0107\u0142\u0113\u0156\u0157\u012B\u0179\xC4\xC5\xC9\xE6\xC6\u014D\xF6\u0122\xA2\u015A\u015B\xD6\xDC\xF8\xA3\xD8\xD7\xA4\u0100\u012A\xF3\u017B\u017C\u017A\u201D\xA6\xA9\xAE\xAC\xBD\xBC\u0141\xAB\xBB\u2591\u2592\u2593\u2502\u2524\u0104\u010C\u0118\u0116\u2563\u2551\u2557\u255D\u012E\u0160\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u0172\u016A\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u017D\u0105\u010D\u0119\u0117\u012F\u0161\u0173\u016B\u017E\u2518\u250C\u2588\u2584\u258C\u2590\u2580\xD3\xDF\u014C\u0143\xF5\xD5\xB5\u0144\u0136\u0137\u013B\u013C\u0146\u0112\u0145\u2019\xAD\xB1\u201C\xBE\xB6\xA7\xF7\u201E\xB0\u2219\xB7\xB9\xB3\xB2\u25A0\xA0",
|
|
36057
|
+
850: "\xC7\xFC\xE9\xE2\xE4\xE0\xE5\xE7\xEA\xEB\xE8\xEF\xEE\xEC\xC4\xC5\xC9\xE6\xC6\xF4\xF6\xF2\xFB\xF9\xFF\xD6\xDC\xF8\xA3\xD8\xD7\u0192\xE1\xED\xF3\xFA\xF1\xD1\xAA\xBA\xBF\xAE\xAC\xBD\xBC\xA1\xAB\xBB\u2591\u2592\u2593\u2502\u2524\xC1\xC2\xC0\xA9\u2563\u2551\u2557\u255D\xA2\xA5\u2510\u2514\u2534\u252C\u251C\u2500\u253C\xE3\xC3\u255A\u2554\u2569\u2566\u2560\u2550\u256C\xA4\xF0\xD0\xCA\xCB\xC8\u0131\xCD\xCE\xCF\u2518\u250C\u2588\u2584\xA6\xCC\u2580\xD3\xDF\xD4\xD2\xF5\xD5\xB5\xFE\xDE\xDA\xDB\xD9\xFD\xDD\xAF\xB4\xAD\xB1\u2017\xBE\xB6\xA7\xF7\xB8\xB0\xA8\xB7\xB9\xB3\xB2\u25A0\xA0",
|
|
36058
|
+
852: "\xC7\xFC\xE9\xE2\xE4\u016F\u0107\xE7\u0142\xEB\u0150\u0151\xEE\u0179\xC4\u0106\xC9\u0139\u013A\xF4\xF6\u013D\u013E\u015A\u015B\xD6\xDC\u0164\u0165\u0141\xD7\u010D\xE1\xED\xF3\xFA\u0104\u0105\u017D\u017E\u0118\u0119\xAC\u017A\u010C\u015F\xAB\xBB\u2591\u2592\u2593\u2502\u2524\xC1\xC2\u011A\u015E\u2563\u2551\u2557\u255D\u017B\u017C\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u0102\u0103\u255A\u2554\u2569\u2566\u2560\u2550\u256C\xA4\u0111\u0110\u010E\xCB\u010F\u0147\xCD\xCE\u011B\u2518\u250C\u2588\u2584\u0162\u016E\u2580\xD3\xDF\xD4\u0143\u0144\u0148\u0160\u0161\u0154\xDA\u0155\u0170\xFD\xDD\u0163\xB4\xAD\u02DD\u02DB\u02C7\u02D8\xA7\xF7\xB8\xB0\xA8\u02D9\u0171\u0158\u0159\u25A0\xA0",
|
|
36059
|
+
855: "\u0452\u0402\u0453\u0403\u0451\u0401\u0454\u0404\u0455\u0405\u0456\u0406\u0457\u0407\u0458\u0408\u0459\u0409\u045A\u040A\u045B\u040B\u045C\u040C\u045E\u040E\u045F\u040F\u044E\u042E\u044A\u042A\u0430\u0410\u0431\u0411\u0446\u0426\u0434\u0414\u0435\u0415\u0444\u0424\u0433\u0413\xAB\xBB\u2591\u2592\u2593\u2502\u2524\u0445\u0425\u0438\u0418\u2563\u2551\u2557\u255D\u0439\u0419\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u043A\u041A\u255A\u2554\u2569\u2566\u2560\u2550\u256C\xA4\u043B\u041B\u043C\u041C\u043D\u041D\u043E\u041E\u043F\u2518\u250C\u2588\u2584\u041F\u044F\u2580\u042F\u0440\u0420\u0441\u0421\u0442\u0422\u0443\u0423\u0436\u0416\u0432\u0412\u044C\u042C\u2116\xAD\u044B\u042B\u0437\u0417\u0448\u0428\u044D\u042D\u0449\u0429\u0447\u0427\xA7\u25A0\xA0",
|
|
36060
|
+
858: "\xC7\xFC\xE9\xE2\xE4\xE0\xE5\xE7\xEA\xEB\xE8\xEF\xEE\xEC\xC4\xC5\xC9\xE6\xC6\xF4\xF6\xF2\xFB\xF9\xFF\xD6\xDC\xF8\xA3\xD8\xD7\u0192\xE1\xED\xF3\xFA\xF1\xD1\xAA\xBA\xBF\xAE\xAC\xBD\xBC\xA1\xAB\xBB\u2591\u2592\u2593\u2502\u2524\xC1\xC2\xC0\xA9\u2563\u2551\u2557\u255D\xA2\xA5\u2510\u2514\u2534\u252C\u251C\u2500\u253C\xE3\xC3\u255A\u2554\u2569\u2566\u2560\u2550\u256C\xA4\xF0\xD0\xCA\xCB\xC8\u20AC\xCD\xCE\xCF\u2518\u250C\u2588\u2584\xA6\xCC\u2580\xD3\xDF\xD4\xD2\xF5\xD5\xB5\xFE\xDE\xDA\xDB\xD9\xFD\xDD\xAF\xB4\xAD\xB1\u2017\xBE\xB6\xA7\xF7\xB8\xB0\xA8\xB7\xB9\xB3\xB2\u25A0\xA0",
|
|
36061
|
+
860: "\xC7\xFC\xE9\xE2\xE3\xE0\xC1\xE7\xEA\xCA\xE8\xCD\xD4\xEC\xC3\xC2\xC9\xC0\xC8\xF4\xF5\xF2\xDA\xF9\xCC\xD5\xDC\xA2\xA3\xD9\u20A7\xD3\xE1\xED\xF3\xFA\xF1\xD1\xAA\xBA\xBF\xD2\xAC\xBD\xBC\xA1\xAB\xBB\u2591\u2592\u2593\u2502\u2524\u2561\u2562\u2556\u2555\u2563\u2551\u2557\u255D\u255C\u255B\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u255E\u255F\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u2567\u2568\u2564\u2565\u2559\u2558\u2552\u2553\u256B\u256A\u2518\u250C\u2588\u2584\u258C\u2590\u2580\u03B1\xDF\u0393\u03C0\u03A3\u03C3\xB5\u03C4\u03A6\u0398\u03A9\u03B4\u221E\u03C6\u03B5\u2229\u2261\xB1\u2265\u2264\u2320\u2321\xF7\u2248\xB0\u2219\xB7\u221A\u207F\xB2\u25A0\xA0",
|
|
36062
|
+
861: "\xC7\xFC\xE9\xE2\xE4\xE0\xE5\xE7\xEA\xEB\xE8\xD0\xF0\xDE\xC4\xC5\xC9\xE6\xC6\xF4\xF6\xFE\xFB\xDD\xFD\xD6\xDC\xF8\xA3\xD8\u20A7\u0192\xE1\xED\xF3\xFA\xC1\xCD\xD3\xDA\xBF\u2310\xAC\xBD\xBC\xA1\xAB\xBB\u2591\u2592\u2593\u2502\u2524\u2561\u2562\u2556\u2555\u2563\u2551\u2557\u255D\u255C\u255B\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u255E\u255F\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u2567\u2568\u2564\u2565\u2559\u2558\u2552\u2553\u256B\u256A\u2518\u250C\u2588\u2584\u258C\u2590\u2580\u03B1\xDF\u0393\u03C0\u03A3\u03C3\xB5\u03C4\u03A6\u0398\u03A9\u03B4\u221E\u03C6\u03B5\u2229\u2261\xB1\u2265\u2264\u2320\u2321\xF7\u2248\xB0\u2219\xB7\u221A\u207F\xB2\u25A0\xA0",
|
|
36063
|
+
862: "\u05D0\u05D1\u05D2\u05D3\u05D4\u05D5\u05D6\u05D7\u05D8\u05D9\u05DA\u05DB\u05DC\u05DD\u05DE\u05DF\u05E0\u05E1\u05E2\u05E3\u05E4\u05E5\u05E6\u05E7\u05E8\u05E9\u05EA\xA2\xA3\xA5\u20A7\u0192\xE1\xED\xF3\xFA\xF1\xD1\xAA\xBA\xBF\u2310\xAC\xBD\xBC\xA1\xAB\xBB\u2591\u2592\u2593\u2502\u2524\u2561\u2562\u2556\u2555\u2563\u2551\u2557\u255D\u255C\u255B\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u255E\u255F\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u2567\u2568\u2564\u2565\u2559\u2558\u2552\u2553\u256B\u256A\u2518\u250C\u2588\u2584\u258C\u2590\u2580\u03B1\xDF\u0393\u03C0\u03A3\u03C3\xB5\u03C4\u03A6\u0398\u03A9\u03B4\u221E\u03C6\u03B5\u2229\u2261\xB1\u2265\u2264\u2320\u2321\xF7\u2248\xB0\u2219\xB7\u221A\u207F\xB2\u25A0\xA0",
|
|
36064
|
+
863: "\xC7\xFC\xE9\xE2\xC2\xE0\xB6\xE7\xEA\xEB\xE8\xEF\xEE\u2017\xC0\xA7\xC9\xC8\xCA\xF4\xCB\xCF\xFB\xF9\xA4\xD4\xDC\xA2\xA3\xD9\xDB\u0192\xA6\xB4\xF3\xFA\xA8\xB8\xB3\xAF\xCE\u2310\xAC\xBD\xBC\xBE\xAB\xBB\u2591\u2592\u2593\u2502\u2524\u2561\u2562\u2556\u2555\u2563\u2551\u2557\u255D\u255C\u255B\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u255E\u255F\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u2567\u2568\u2564\u2565\u2559\u2558\u2552\u2553\u256B\u256A\u2518\u250C\u2588\u2584\u258C\u2590\u2580\u03B1\xDF\u0393\u03C0\u03A3\u03C3\xB5\u03C4\u03A6\u0398\u03A9\u03B4\u221E\u03C6\u03B5\u2229\u2261\xB1\u2265\u2264\u2320\u2321\xF7\u2248\xB0\u2219\xB7\u221A\u207F\xB2\u25A0\xA0",
|
|
36065
|
+
865: "\xC7\xFC\xE9\xE2\xE4\xE0\xE5\xE7\xEA\xEB\xE8\xEF\xEE\xEC\xC4\xC5\xC9\xE6\xC6\xF4\xF6\xF2\xFB\xF9\xFF\xD6\xDC\xF8\xA3\xD8\u20A7\u0192\xE1\xED\xF3\xFA\xF1\xD1\xAA\xBA\xBF\u2310\xAC\xBD\xBC\xA1\xAB\xA4\u2591\u2592\u2593\u2502\u2524\u2561\u2562\u2556\u2555\u2563\u2551\u2557\u255D\u255C\u255B\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u255E\u255F\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u2567\u2568\u2564\u2565\u2559\u2558\u2552\u2553\u256B\u256A\u2518\u250C\u2588\u2584\u258C\u2590\u2580\u03B1\xDF\u0393\u03C0\u03A3\u03C3\xB5\u03C4\u03A6\u0398\u03A9\u03B4\u221E\u03C6\u03B5\u2229\u2261\xB1\u2265\u2264\u2320\u2321\xF7\u2248\xB0\u2219\xB7\u221A\u207F\xB2\u25A0\xA0",
|
|
36066
|
+
866: "\u0410\u0411\u0412\u0413\u0414\u0415\u0416\u0417\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u0420\u0421\u0422\u0423\u0424\u0425\u0426\u0427\u0428\u0429\u042A\u042B\u042C\u042D\u042E\u042F\u0430\u0431\u0432\u0433\u0434\u0435\u0436\u0437\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u2591\u2592\u2593\u2502\u2524\u2561\u2562\u2556\u2555\u2563\u2551\u2557\u255D\u255C\u255B\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u255E\u255F\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u2567\u2568\u2564\u2565\u2559\u2558\u2552\u2553\u256B\u256A\u2518\u250C\u2588\u2584\u258C\u2590\u2580\u0440\u0441\u0442\u0443\u0444\u0445\u0446\u0447\u0448\u0449\u044A\u044B\u044C\u044D\u044E\u044F\u0401\u0451\u0404\u0454\u0407\u0457\u040E\u045E\xB0\u2219\xB7\u221A\u2116\xA4\u25A0\xA0"
|
|
36067
|
+
};
|
|
36053
36068
|
var JOHAB_ROWS = {
|
|
36054
36069
|
132: "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u11A8\u11A9\u11AA\u11AB\u11AC\u11AD\u11AE\u11AF\u11B0\u11B1\u11B2\u11B3\u11B4\u11B5\u11B6\u11B7\uFFFD\u11B8\u11B9\u11BA\u11BB\u11BC\u11BD\u11BE\u11BF\u11C0\u11C1\u11C2\uFFFD\uFFFD\uFFFD\u1161\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u1162\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u1163\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u1164\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u1165\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD",
|
|
36055
36070
|
133: "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u1166\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u1167\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u1168\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u1169\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u116A\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u116B\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD",
|
|
@@ -36224,12 +36239,41 @@ var CHARSET_ENCODING = {
|
|
|
36224
36239
|
238: "windows-1250",
|
|
36225
36240
|
255: "ibm437"
|
|
36226
36241
|
};
|
|
36227
|
-
|
|
36242
|
+
var ANSI_CODE_PAGE_ENCODING = {
|
|
36243
|
+
874: "windows-874",
|
|
36244
|
+
932: "shift_jis",
|
|
36245
|
+
936: "gbk",
|
|
36246
|
+
949: "euc-kr",
|
|
36247
|
+
950: "big5",
|
|
36248
|
+
1250: "windows-1250",
|
|
36249
|
+
1251: "windows-1251",
|
|
36250
|
+
1252: "windows-1252",
|
|
36251
|
+
1253: "windows-1253",
|
|
36252
|
+
1254: "windows-1254",
|
|
36253
|
+
1255: "windows-1255",
|
|
36254
|
+
1256: "windows-1256",
|
|
36255
|
+
1257: "windows-1257",
|
|
36256
|
+
1258: "windows-1258",
|
|
36257
|
+
54936: "gb18030",
|
|
36258
|
+
65001: "utf-8"
|
|
36259
|
+
};
|
|
36260
|
+
var OEM_CODE_PAGE_ENCODING = {
|
|
36261
|
+
874: "windows-874",
|
|
36262
|
+
932: "shift_jis",
|
|
36263
|
+
936: "gbk",
|
|
36264
|
+
949: "euc-kr",
|
|
36265
|
+
950: "big5"
|
|
36266
|
+
};
|
|
36267
|
+
function decodeOemTable(bytes, high) {
|
|
36268
|
+
return { codes: bytes.map((b) => b < 128 ? b : high.charCodeAt(b - 128)), byteLengths: bytes.map(() => 1) };
|
|
36269
|
+
}
|
|
36270
|
+
function decodeAnsiRecord(bytes, charSet, codePages) {
|
|
36228
36271
|
if (charSet === 2) {
|
|
36229
36272
|
return { codes: [...bytes], byteLengths: bytes.map(() => 1) };
|
|
36230
36273
|
}
|
|
36231
|
-
|
|
36232
|
-
|
|
36274
|
+
const oemCodePage = codePages?.oem;
|
|
36275
|
+
if (charSet === 255 && (oemCodePage === void 0 || !(oemCodePage in OEM_CODE_PAGE_ENCODING))) {
|
|
36276
|
+
return decodeOemTable(bytes, (oemCodePage !== void 0 ? OEM_HIGH[oemCodePage] : void 0) ?? OEM437_HIGH);
|
|
36233
36277
|
}
|
|
36234
36278
|
if (charSet === 130) {
|
|
36235
36279
|
const codes = [];
|
|
@@ -36245,10 +36289,14 @@ function decodeAnsiRecord(bytes, charSet) {
|
|
|
36245
36289
|
}
|
|
36246
36290
|
return { codes, byteLengths };
|
|
36247
36291
|
}
|
|
36248
|
-
const
|
|
36292
|
+
const ansiCodePage = codePages?.ansi;
|
|
36293
|
+
const label = charSet === 255 && oemCodePage !== void 0 ? OEM_CODE_PAGE_ENCODING[oemCodePage] : (charSet === 0 || charSet === 1) && ansiCodePage !== void 0 ? ANSI_CODE_PAGE_ENCODING[ansiCodePage] ?? "windows-1252" : CHARSET_ENCODING[charSet] ?? "windows-1252";
|
|
36294
|
+
if (label === "windows-1252") {
|
|
36295
|
+
return { codes: bytes.map((b) => ansiToCode(b, charSet)), byteLengths: bytes.map(() => 1) };
|
|
36296
|
+
}
|
|
36249
36297
|
try {
|
|
36250
|
-
const decoder = new TextDecoder(label, { fatal: true });
|
|
36251
|
-
const replacementDecoder = new TextDecoder(label);
|
|
36298
|
+
const decoder = new TextDecoder(label, { fatal: true, ignoreBOM: true });
|
|
36299
|
+
const replacementDecoder = new TextDecoder(label, { ignoreBOM: true });
|
|
36252
36300
|
const source = new Uint8Array(bytes);
|
|
36253
36301
|
const codes = [];
|
|
36254
36302
|
const byteLengths = [];
|
|
@@ -37062,8 +37110,9 @@ function drawTextCall(rCtx, x, y, codes, options2, rect, dx) {
|
|
|
37062
37110
|
const child = { ...rCtx, view };
|
|
37063
37111
|
handleExtTextOutW(child, 0, 8, size);
|
|
37064
37112
|
}
|
|
37065
|
-
function readAnsiRecord(
|
|
37066
|
-
|
|
37113
|
+
function readAnsiRecord(rCtx, start, count, charSet) {
|
|
37114
|
+
const { view } = rCtx;
|
|
37115
|
+
return decodeAnsiRecord(Array.from({ length: count }, (_, i) => view.getUint8(start + i)), charSet, rCtx.codePages);
|
|
37067
37116
|
}
|
|
37068
37117
|
function collapseAnsiDx(dx, byteLengths, pdy) {
|
|
37069
37118
|
if (!dx) return null;
|
|
@@ -37098,7 +37147,7 @@ function handlePolyText(rCtx, offset, dataOff, recSize, wide) {
|
|
|
37098
37147
|
const offDx = view.getUint32(e + 36, true);
|
|
37099
37148
|
const unit = wide ? 2 : 1;
|
|
37100
37149
|
if (!offString || offString > end - offset || n > Math.floor((end - (offset + offString)) / unit)) continue;
|
|
37101
|
-
const ansi = wide ? null : readAnsiRecord(
|
|
37150
|
+
const ansi = wide ? null : readAnsiRecord(rCtx, offset + offString, n, charSet);
|
|
37102
37151
|
const codes = wide ? Array.from({ length: n }, (_, j) => view.getUint16(offset + offString + j * 2, true)) : ansi.codes;
|
|
37103
37152
|
let dx = null;
|
|
37104
37153
|
const pdy = (options2 & ETO_PDY) !== 0;
|
|
@@ -37139,7 +37188,7 @@ function handleEmfGdiDrawTextRecord(rCtx, recType, offset, dataOff, recSize) {
|
|
|
37139
37188
|
const n = view.getUint32(dataOff + 36, true), strOff = view.getUint32(dataOff + 40, true), options2 = view.getUint32(dataOff + 44, true);
|
|
37140
37189
|
if (!strOff || strOff > end - offset) return true;
|
|
37141
37190
|
if (n > end - (offset + strOff)) return true;
|
|
37142
|
-
const ansi = readAnsiRecord(
|
|
37191
|
+
const ansi = readAnsiRecord(rCtx, offset + strOff, n, state.fontDetails?.charSet ?? 1);
|
|
37143
37192
|
const rect = [view.getInt32(dataOff + 48, true), view.getInt32(dataOff + 52, true), view.getInt32(dataOff + 56, true), view.getInt32(dataOff + 60, true)];
|
|
37144
37193
|
const offDx = view.getUint32(dataOff + 64, true);
|
|
37145
37194
|
let dx = null;
|
|
@@ -40894,6 +40943,7 @@ function replayEmfPlusRecords(view, offset, length, ctx, canvasW, canvasH, state
|
|
|
40894
40943
|
imageCache: s.imageCache,
|
|
40895
40944
|
nestingDepth: s.nestingDepth,
|
|
40896
40945
|
gdiAntialias: s.gdiAntialias,
|
|
40946
|
+
codePages: s.codePages,
|
|
40897
40947
|
antiAlias: s.antiAlias,
|
|
40898
40948
|
ext: s.ext ?? (s.ext = {})
|
|
40899
40949
|
};
|
|
@@ -41071,6 +41121,7 @@ function replayEmfRecords(view, ctx, bounds, canvasW, canvasH, dpiScale = 1, rep
|
|
|
41071
41121
|
const plusScale = dpiScale > 0 ? dpiScale : 1;
|
|
41072
41122
|
emfPlusState.imageCache = replayOptions.imageCache;
|
|
41073
41123
|
emfPlusState.gdiAntialias = replayOptions.gdiAntialias;
|
|
41124
|
+
emfPlusState.codePages = replayOptions.codePages;
|
|
41074
41125
|
emfPlusState.baseTransform = replayOptions.plusBaseTransform ?? [
|
|
41075
41126
|
sx / plusScale,
|
|
41076
41127
|
0,
|
|
@@ -41110,7 +41161,8 @@ function replayEmfRecords(view, ctx, bounds, canvasW, canvasH, dpiScale = 1, rep
|
|
|
41110
41161
|
sy,
|
|
41111
41162
|
pathCmds: [],
|
|
41112
41163
|
gdiAntialias: replayOptions.gdiAntialias,
|
|
41113
|
-
fonts: replayOptions.fonts
|
|
41164
|
+
fonts: replayOptions.fonts,
|
|
41165
|
+
codePages: replayOptions.codePages
|
|
41114
41166
|
};
|
|
41115
41167
|
let offset = 0;
|
|
41116
41168
|
const maxOffset = view.byteLength;
|
|
@@ -41507,14 +41559,15 @@ function createFont(p, dataOff, recSize, recEnd) {
|
|
|
41507
41559
|
addObject(p, { kind: "other" });
|
|
41508
41560
|
return;
|
|
41509
41561
|
}
|
|
41510
|
-
|
|
41562
|
+
const faceBytes = [];
|
|
41511
41563
|
for (let i = 0; i < 32 && dataOff + 18 + i < recEnd; i++) {
|
|
41512
41564
|
const ch = view.getUint8(dataOff + 18 + i);
|
|
41513
41565
|
if (ch === 0) {
|
|
41514
41566
|
break;
|
|
41515
41567
|
}
|
|
41516
|
-
|
|
41568
|
+
faceBytes.push(ch);
|
|
41517
41569
|
}
|
|
41570
|
+
const family = String.fromCharCode(...decodeAnsiRecord(faceBytes, 1, { ansi: p.ansiCodePage }).codes);
|
|
41518
41571
|
const font = {
|
|
41519
41572
|
kind: "font",
|
|
41520
41573
|
// Sign kept: resolveFontPixelHeight() tells cell from character height by it.
|
|
@@ -42541,7 +42594,7 @@ function drawWithFontEngine2(p, call, codes, dx) {
|
|
|
42541
42594
|
}
|
|
42542
42595
|
function playText(p, call) {
|
|
42543
42596
|
const charSet = p.rCtx.state.fontDetails?.charSet ?? 1;
|
|
42544
|
-
const { codes, byteLengths } = decodeAnsiRecord(call.bytes, charSet);
|
|
42597
|
+
const { codes, byteLengths } = decodeAnsiRecord(call.bytes, charSet, { ansi: p.ansiCodePage, oem: p.oemCodePage });
|
|
42545
42598
|
const n = codes.length;
|
|
42546
42599
|
if (n === 0) {
|
|
42547
42600
|
return;
|
|
@@ -42673,6 +42726,8 @@ function createWmfPlayer(view, ctx, header, canvasW, canvasH, replayOptions = {}
|
|
|
42673
42726
|
};
|
|
42674
42727
|
const p = {
|
|
42675
42728
|
rCtx,
|
|
42729
|
+
ansiCodePage: replayOptions.wmfAnsiCodePage ?? replayOptions.codePages?.ansi,
|
|
42730
|
+
oemCodePage: replayOptions.codePages?.oem,
|
|
42676
42731
|
view,
|
|
42677
42732
|
kx,
|
|
42678
42733
|
ky,
|
|
@@ -43171,6 +43226,7 @@ async function replayMetafile(buffer, options2, createSurface) {
|
|
|
43171
43226
|
maxRecords: opts.maxRecords,
|
|
43172
43227
|
maxRecordsEmfPlus: opts.maxRecords,
|
|
43173
43228
|
fontFamilyMap: opts.fontFamilyMap,
|
|
43229
|
+
codePages: { ansi: opts.ansiCodePage, oem: opts.oemCodePage },
|
|
43174
43230
|
textureCache,
|
|
43175
43231
|
imageCache,
|
|
43176
43232
|
gdiAntialias: opts.gdiAntialias,
|
|
@@ -43204,6 +43260,8 @@ async function replayMetafile(buffer, options2, createSurface) {
|
|
|
43204
43260
|
surface.ctx.save();
|
|
43205
43261
|
replayWmfRecords(view, surface.ctx, header, surface.width, surface.height, {
|
|
43206
43262
|
wmfReferenceDpi: opts.wmfReferenceDpi,
|
|
43263
|
+
wmfAnsiCodePage: opts.wmfAnsiCodePage,
|
|
43264
|
+
codePages: { ansi: opts.ansiCodePage, oem: opts.oemCodePage },
|
|
43207
43265
|
maxRecords: opts.maxRecords,
|
|
43208
43266
|
fontFamilyMap: opts.fontFamilyMap,
|
|
43209
43267
|
gdiAntialias: opts.gdiAntialias,
|
package/dist/index.mjs
CHANGED
|
@@ -24851,6 +24851,7 @@ function drawNestedMetafile(rCtx, img, cached, source) {
|
|
|
24851
24851
|
imageCache: caches?.images,
|
|
24852
24852
|
fontFamilyMap: rCtx.fontFamilyMap,
|
|
24853
24853
|
gdiAntialias: rCtx.gdiAntialias,
|
|
24854
|
+
codePages: rCtx.codePages,
|
|
24854
24855
|
nestingDepth: depth + 1
|
|
24855
24856
|
});
|
|
24856
24857
|
} finally {
|
|
@@ -36048,6 +36049,20 @@ function handleEmfGdiBlendBlitRecord(rCtx, recType, offset, dataOff, recSize) {
|
|
|
36048
36049
|
|
|
36049
36050
|
// src/emf-ansi-tables.ts
|
|
36050
36051
|
var OEM437_HIGH = "\xC7\xFC\xE9\xE2\xE4\xE0\xE5\xE7\xEA\xEB\xE8\xEF\xEE\xEC\xC4\xC5\xC9\xE6\xC6\xF4\xF6\xF2\xFB\xF9\xFF\xD6\xDC\xA2\xA3\xA5\u20A7\u0192\xE1\xED\xF3\xFA\xF1\xD1\xAA\xBA\xBF\u2310\xAC\xBD\xBC\xA1\xAB\xBB\u2591\u2592\u2593\u2502\u2524\u2561\u2562\u2556\u2555\u2563\u2551\u2557\u255D\u255C\u255B\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u255E\u255F\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u2567\u2568\u2564\u2565\u2559\u2558\u2552\u2553\u256B\u256A\u2518\u250C\u2588\u2584\u258C\u2590\u2580\u03B1\xDF\u0393\u03C0\u03A3\u03C3\xB5\u03C4\u03A6\u0398\u03A9\u03B4\u221E\u03C6\u03B5\u2229\u2261\xB1\u2265\u2264\u2320\u2321\xF7\u2248\xB0\u2219\xB7\u221A\u207F\xB2\u25A0\xA0";
|
|
36052
|
+
var OEM_HIGH = {
|
|
36053
|
+
737: "\u0391\u0392\u0393\u0394\u0395\u0396\u0397\u0398\u0399\u039A\u039B\u039C\u039D\u039E\u039F\u03A0\u03A1\u03A3\u03A4\u03A5\u03A6\u03A7\u03A8\u03A9\u03B1\u03B2\u03B3\u03B4\u03B5\u03B6\u03B7\u03B8\u03B9\u03BA\u03BB\u03BC\u03BD\u03BE\u03BF\u03C0\u03C1\u03C3\u03C2\u03C4\u03C5\u03C6\u03C7\u03C8\u2591\u2592\u2593\u2502\u2524\u2561\u2562\u2556\u2555\u2563\u2551\u2557\u255D\u255C\u255B\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u255E\u255F\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u2567\u2568\u2564\u2565\u2559\u2558\u2552\u2553\u256B\u256A\u2518\u250C\u2588\u2584\u258C\u2590\u2580\u03C9\u03AC\u03AD\u03AE\u03CA\u03AF\u03CC\u03CD\u03CB\u03CE\u0386\u0388\u0389\u038A\u038C\u038E\u038F\xB1\u2265\u2264\u03AA\u03AB\xF7\u2248\xB0\u2219\xB7\u221A\u207F\xB2\u25A0\xA0",
|
|
36054
|
+
775: "\u0106\xFC\xE9\u0101\xE4\u0123\xE5\u0107\u0142\u0113\u0156\u0157\u012B\u0179\xC4\xC5\xC9\xE6\xC6\u014D\xF6\u0122\xA2\u015A\u015B\xD6\xDC\xF8\xA3\xD8\xD7\xA4\u0100\u012A\xF3\u017B\u017C\u017A\u201D\xA6\xA9\xAE\xAC\xBD\xBC\u0141\xAB\xBB\u2591\u2592\u2593\u2502\u2524\u0104\u010C\u0118\u0116\u2563\u2551\u2557\u255D\u012E\u0160\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u0172\u016A\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u017D\u0105\u010D\u0119\u0117\u012F\u0161\u0173\u016B\u017E\u2518\u250C\u2588\u2584\u258C\u2590\u2580\xD3\xDF\u014C\u0143\xF5\xD5\xB5\u0144\u0136\u0137\u013B\u013C\u0146\u0112\u0145\u2019\xAD\xB1\u201C\xBE\xB6\xA7\xF7\u201E\xB0\u2219\xB7\xB9\xB3\xB2\u25A0\xA0",
|
|
36055
|
+
850: "\xC7\xFC\xE9\xE2\xE4\xE0\xE5\xE7\xEA\xEB\xE8\xEF\xEE\xEC\xC4\xC5\xC9\xE6\xC6\xF4\xF6\xF2\xFB\xF9\xFF\xD6\xDC\xF8\xA3\xD8\xD7\u0192\xE1\xED\xF3\xFA\xF1\xD1\xAA\xBA\xBF\xAE\xAC\xBD\xBC\xA1\xAB\xBB\u2591\u2592\u2593\u2502\u2524\xC1\xC2\xC0\xA9\u2563\u2551\u2557\u255D\xA2\xA5\u2510\u2514\u2534\u252C\u251C\u2500\u253C\xE3\xC3\u255A\u2554\u2569\u2566\u2560\u2550\u256C\xA4\xF0\xD0\xCA\xCB\xC8\u0131\xCD\xCE\xCF\u2518\u250C\u2588\u2584\xA6\xCC\u2580\xD3\xDF\xD4\xD2\xF5\xD5\xB5\xFE\xDE\xDA\xDB\xD9\xFD\xDD\xAF\xB4\xAD\xB1\u2017\xBE\xB6\xA7\xF7\xB8\xB0\xA8\xB7\xB9\xB3\xB2\u25A0\xA0",
|
|
36056
|
+
852: "\xC7\xFC\xE9\xE2\xE4\u016F\u0107\xE7\u0142\xEB\u0150\u0151\xEE\u0179\xC4\u0106\xC9\u0139\u013A\xF4\xF6\u013D\u013E\u015A\u015B\xD6\xDC\u0164\u0165\u0141\xD7\u010D\xE1\xED\xF3\xFA\u0104\u0105\u017D\u017E\u0118\u0119\xAC\u017A\u010C\u015F\xAB\xBB\u2591\u2592\u2593\u2502\u2524\xC1\xC2\u011A\u015E\u2563\u2551\u2557\u255D\u017B\u017C\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u0102\u0103\u255A\u2554\u2569\u2566\u2560\u2550\u256C\xA4\u0111\u0110\u010E\xCB\u010F\u0147\xCD\xCE\u011B\u2518\u250C\u2588\u2584\u0162\u016E\u2580\xD3\xDF\xD4\u0143\u0144\u0148\u0160\u0161\u0154\xDA\u0155\u0170\xFD\xDD\u0163\xB4\xAD\u02DD\u02DB\u02C7\u02D8\xA7\xF7\xB8\xB0\xA8\u02D9\u0171\u0158\u0159\u25A0\xA0",
|
|
36057
|
+
855: "\u0452\u0402\u0453\u0403\u0451\u0401\u0454\u0404\u0455\u0405\u0456\u0406\u0457\u0407\u0458\u0408\u0459\u0409\u045A\u040A\u045B\u040B\u045C\u040C\u045E\u040E\u045F\u040F\u044E\u042E\u044A\u042A\u0430\u0410\u0431\u0411\u0446\u0426\u0434\u0414\u0435\u0415\u0444\u0424\u0433\u0413\xAB\xBB\u2591\u2592\u2593\u2502\u2524\u0445\u0425\u0438\u0418\u2563\u2551\u2557\u255D\u0439\u0419\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u043A\u041A\u255A\u2554\u2569\u2566\u2560\u2550\u256C\xA4\u043B\u041B\u043C\u041C\u043D\u041D\u043E\u041E\u043F\u2518\u250C\u2588\u2584\u041F\u044F\u2580\u042F\u0440\u0420\u0441\u0421\u0442\u0422\u0443\u0423\u0436\u0416\u0432\u0412\u044C\u042C\u2116\xAD\u044B\u042B\u0437\u0417\u0448\u0428\u044D\u042D\u0449\u0429\u0447\u0427\xA7\u25A0\xA0",
|
|
36058
|
+
858: "\xC7\xFC\xE9\xE2\xE4\xE0\xE5\xE7\xEA\xEB\xE8\xEF\xEE\xEC\xC4\xC5\xC9\xE6\xC6\xF4\xF6\xF2\xFB\xF9\xFF\xD6\xDC\xF8\xA3\xD8\xD7\u0192\xE1\xED\xF3\xFA\xF1\xD1\xAA\xBA\xBF\xAE\xAC\xBD\xBC\xA1\xAB\xBB\u2591\u2592\u2593\u2502\u2524\xC1\xC2\xC0\xA9\u2563\u2551\u2557\u255D\xA2\xA5\u2510\u2514\u2534\u252C\u251C\u2500\u253C\xE3\xC3\u255A\u2554\u2569\u2566\u2560\u2550\u256C\xA4\xF0\xD0\xCA\xCB\xC8\u20AC\xCD\xCE\xCF\u2518\u250C\u2588\u2584\xA6\xCC\u2580\xD3\xDF\xD4\xD2\xF5\xD5\xB5\xFE\xDE\xDA\xDB\xD9\xFD\xDD\xAF\xB4\xAD\xB1\u2017\xBE\xB6\xA7\xF7\xB8\xB0\xA8\xB7\xB9\xB3\xB2\u25A0\xA0",
|
|
36059
|
+
860: "\xC7\xFC\xE9\xE2\xE3\xE0\xC1\xE7\xEA\xCA\xE8\xCD\xD4\xEC\xC3\xC2\xC9\xC0\xC8\xF4\xF5\xF2\xDA\xF9\xCC\xD5\xDC\xA2\xA3\xD9\u20A7\xD3\xE1\xED\xF3\xFA\xF1\xD1\xAA\xBA\xBF\xD2\xAC\xBD\xBC\xA1\xAB\xBB\u2591\u2592\u2593\u2502\u2524\u2561\u2562\u2556\u2555\u2563\u2551\u2557\u255D\u255C\u255B\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u255E\u255F\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u2567\u2568\u2564\u2565\u2559\u2558\u2552\u2553\u256B\u256A\u2518\u250C\u2588\u2584\u258C\u2590\u2580\u03B1\xDF\u0393\u03C0\u03A3\u03C3\xB5\u03C4\u03A6\u0398\u03A9\u03B4\u221E\u03C6\u03B5\u2229\u2261\xB1\u2265\u2264\u2320\u2321\xF7\u2248\xB0\u2219\xB7\u221A\u207F\xB2\u25A0\xA0",
|
|
36060
|
+
861: "\xC7\xFC\xE9\xE2\xE4\xE0\xE5\xE7\xEA\xEB\xE8\xD0\xF0\xDE\xC4\xC5\xC9\xE6\xC6\xF4\xF6\xFE\xFB\xDD\xFD\xD6\xDC\xF8\xA3\xD8\u20A7\u0192\xE1\xED\xF3\xFA\xC1\xCD\xD3\xDA\xBF\u2310\xAC\xBD\xBC\xA1\xAB\xBB\u2591\u2592\u2593\u2502\u2524\u2561\u2562\u2556\u2555\u2563\u2551\u2557\u255D\u255C\u255B\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u255E\u255F\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u2567\u2568\u2564\u2565\u2559\u2558\u2552\u2553\u256B\u256A\u2518\u250C\u2588\u2584\u258C\u2590\u2580\u03B1\xDF\u0393\u03C0\u03A3\u03C3\xB5\u03C4\u03A6\u0398\u03A9\u03B4\u221E\u03C6\u03B5\u2229\u2261\xB1\u2265\u2264\u2320\u2321\xF7\u2248\xB0\u2219\xB7\u221A\u207F\xB2\u25A0\xA0",
|
|
36061
|
+
862: "\u05D0\u05D1\u05D2\u05D3\u05D4\u05D5\u05D6\u05D7\u05D8\u05D9\u05DA\u05DB\u05DC\u05DD\u05DE\u05DF\u05E0\u05E1\u05E2\u05E3\u05E4\u05E5\u05E6\u05E7\u05E8\u05E9\u05EA\xA2\xA3\xA5\u20A7\u0192\xE1\xED\xF3\xFA\xF1\xD1\xAA\xBA\xBF\u2310\xAC\xBD\xBC\xA1\xAB\xBB\u2591\u2592\u2593\u2502\u2524\u2561\u2562\u2556\u2555\u2563\u2551\u2557\u255D\u255C\u255B\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u255E\u255F\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u2567\u2568\u2564\u2565\u2559\u2558\u2552\u2553\u256B\u256A\u2518\u250C\u2588\u2584\u258C\u2590\u2580\u03B1\xDF\u0393\u03C0\u03A3\u03C3\xB5\u03C4\u03A6\u0398\u03A9\u03B4\u221E\u03C6\u03B5\u2229\u2261\xB1\u2265\u2264\u2320\u2321\xF7\u2248\xB0\u2219\xB7\u221A\u207F\xB2\u25A0\xA0",
|
|
36062
|
+
863: "\xC7\xFC\xE9\xE2\xC2\xE0\xB6\xE7\xEA\xEB\xE8\xEF\xEE\u2017\xC0\xA7\xC9\xC8\xCA\xF4\xCB\xCF\xFB\xF9\xA4\xD4\xDC\xA2\xA3\xD9\xDB\u0192\xA6\xB4\xF3\xFA\xA8\xB8\xB3\xAF\xCE\u2310\xAC\xBD\xBC\xBE\xAB\xBB\u2591\u2592\u2593\u2502\u2524\u2561\u2562\u2556\u2555\u2563\u2551\u2557\u255D\u255C\u255B\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u255E\u255F\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u2567\u2568\u2564\u2565\u2559\u2558\u2552\u2553\u256B\u256A\u2518\u250C\u2588\u2584\u258C\u2590\u2580\u03B1\xDF\u0393\u03C0\u03A3\u03C3\xB5\u03C4\u03A6\u0398\u03A9\u03B4\u221E\u03C6\u03B5\u2229\u2261\xB1\u2265\u2264\u2320\u2321\xF7\u2248\xB0\u2219\xB7\u221A\u207F\xB2\u25A0\xA0",
|
|
36063
|
+
865: "\xC7\xFC\xE9\xE2\xE4\xE0\xE5\xE7\xEA\xEB\xE8\xEF\xEE\xEC\xC4\xC5\xC9\xE6\xC6\xF4\xF6\xF2\xFB\xF9\xFF\xD6\xDC\xF8\xA3\xD8\u20A7\u0192\xE1\xED\xF3\xFA\xF1\xD1\xAA\xBA\xBF\u2310\xAC\xBD\xBC\xA1\xAB\xA4\u2591\u2592\u2593\u2502\u2524\u2561\u2562\u2556\u2555\u2563\u2551\u2557\u255D\u255C\u255B\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u255E\u255F\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u2567\u2568\u2564\u2565\u2559\u2558\u2552\u2553\u256B\u256A\u2518\u250C\u2588\u2584\u258C\u2590\u2580\u03B1\xDF\u0393\u03C0\u03A3\u03C3\xB5\u03C4\u03A6\u0398\u03A9\u03B4\u221E\u03C6\u03B5\u2229\u2261\xB1\u2265\u2264\u2320\u2321\xF7\u2248\xB0\u2219\xB7\u221A\u207F\xB2\u25A0\xA0",
|
|
36064
|
+
866: "\u0410\u0411\u0412\u0413\u0414\u0415\u0416\u0417\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u0420\u0421\u0422\u0423\u0424\u0425\u0426\u0427\u0428\u0429\u042A\u042B\u042C\u042D\u042E\u042F\u0430\u0431\u0432\u0433\u0434\u0435\u0436\u0437\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u2591\u2592\u2593\u2502\u2524\u2561\u2562\u2556\u2555\u2563\u2551\u2557\u255D\u255C\u255B\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u255E\u255F\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u2567\u2568\u2564\u2565\u2559\u2558\u2552\u2553\u256B\u256A\u2518\u250C\u2588\u2584\u258C\u2590\u2580\u0440\u0441\u0442\u0443\u0444\u0445\u0446\u0447\u0448\u0449\u044A\u044B\u044C\u044D\u044E\u044F\u0401\u0451\u0404\u0454\u0407\u0457\u040E\u045E\xB0\u2219\xB7\u221A\u2116\xA4\u25A0\xA0"
|
|
36065
|
+
};
|
|
36051
36066
|
var JOHAB_ROWS = {
|
|
36052
36067
|
132: "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u11A8\u11A9\u11AA\u11AB\u11AC\u11AD\u11AE\u11AF\u11B0\u11B1\u11B2\u11B3\u11B4\u11B5\u11B6\u11B7\uFFFD\u11B8\u11B9\u11BA\u11BB\u11BC\u11BD\u11BE\u11BF\u11C0\u11C1\u11C2\uFFFD\uFFFD\uFFFD\u1161\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u1162\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u1163\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u1164\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u1165\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD",
|
|
36053
36068
|
133: "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u1166\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u1167\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u1168\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u1169\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u116A\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u116B\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD",
|
|
@@ -36222,12 +36237,41 @@ var CHARSET_ENCODING = {
|
|
|
36222
36237
|
238: "windows-1250",
|
|
36223
36238
|
255: "ibm437"
|
|
36224
36239
|
};
|
|
36225
|
-
|
|
36240
|
+
var ANSI_CODE_PAGE_ENCODING = {
|
|
36241
|
+
874: "windows-874",
|
|
36242
|
+
932: "shift_jis",
|
|
36243
|
+
936: "gbk",
|
|
36244
|
+
949: "euc-kr",
|
|
36245
|
+
950: "big5",
|
|
36246
|
+
1250: "windows-1250",
|
|
36247
|
+
1251: "windows-1251",
|
|
36248
|
+
1252: "windows-1252",
|
|
36249
|
+
1253: "windows-1253",
|
|
36250
|
+
1254: "windows-1254",
|
|
36251
|
+
1255: "windows-1255",
|
|
36252
|
+
1256: "windows-1256",
|
|
36253
|
+
1257: "windows-1257",
|
|
36254
|
+
1258: "windows-1258",
|
|
36255
|
+
54936: "gb18030",
|
|
36256
|
+
65001: "utf-8"
|
|
36257
|
+
};
|
|
36258
|
+
var OEM_CODE_PAGE_ENCODING = {
|
|
36259
|
+
874: "windows-874",
|
|
36260
|
+
932: "shift_jis",
|
|
36261
|
+
936: "gbk",
|
|
36262
|
+
949: "euc-kr",
|
|
36263
|
+
950: "big5"
|
|
36264
|
+
};
|
|
36265
|
+
function decodeOemTable(bytes, high) {
|
|
36266
|
+
return { codes: bytes.map((b) => b < 128 ? b : high.charCodeAt(b - 128)), byteLengths: bytes.map(() => 1) };
|
|
36267
|
+
}
|
|
36268
|
+
function decodeAnsiRecord(bytes, charSet, codePages) {
|
|
36226
36269
|
if (charSet === 2) {
|
|
36227
36270
|
return { codes: [...bytes], byteLengths: bytes.map(() => 1) };
|
|
36228
36271
|
}
|
|
36229
|
-
|
|
36230
|
-
|
|
36272
|
+
const oemCodePage = codePages?.oem;
|
|
36273
|
+
if (charSet === 255 && (oemCodePage === void 0 || !(oemCodePage in OEM_CODE_PAGE_ENCODING))) {
|
|
36274
|
+
return decodeOemTable(bytes, (oemCodePage !== void 0 ? OEM_HIGH[oemCodePage] : void 0) ?? OEM437_HIGH);
|
|
36231
36275
|
}
|
|
36232
36276
|
if (charSet === 130) {
|
|
36233
36277
|
const codes = [];
|
|
@@ -36243,10 +36287,14 @@ function decodeAnsiRecord(bytes, charSet) {
|
|
|
36243
36287
|
}
|
|
36244
36288
|
return { codes, byteLengths };
|
|
36245
36289
|
}
|
|
36246
|
-
const
|
|
36290
|
+
const ansiCodePage = codePages?.ansi;
|
|
36291
|
+
const label = charSet === 255 && oemCodePage !== void 0 ? OEM_CODE_PAGE_ENCODING[oemCodePage] : (charSet === 0 || charSet === 1) && ansiCodePage !== void 0 ? ANSI_CODE_PAGE_ENCODING[ansiCodePage] ?? "windows-1252" : CHARSET_ENCODING[charSet] ?? "windows-1252";
|
|
36292
|
+
if (label === "windows-1252") {
|
|
36293
|
+
return { codes: bytes.map((b) => ansiToCode(b, charSet)), byteLengths: bytes.map(() => 1) };
|
|
36294
|
+
}
|
|
36247
36295
|
try {
|
|
36248
|
-
const decoder = new TextDecoder(label, { fatal: true });
|
|
36249
|
-
const replacementDecoder = new TextDecoder(label);
|
|
36296
|
+
const decoder = new TextDecoder(label, { fatal: true, ignoreBOM: true });
|
|
36297
|
+
const replacementDecoder = new TextDecoder(label, { ignoreBOM: true });
|
|
36250
36298
|
const source = new Uint8Array(bytes);
|
|
36251
36299
|
const codes = [];
|
|
36252
36300
|
const byteLengths = [];
|
|
@@ -37060,8 +37108,9 @@ function drawTextCall(rCtx, x, y, codes, options2, rect, dx) {
|
|
|
37060
37108
|
const child = { ...rCtx, view };
|
|
37061
37109
|
handleExtTextOutW(child, 0, 8, size);
|
|
37062
37110
|
}
|
|
37063
|
-
function readAnsiRecord(
|
|
37064
|
-
|
|
37111
|
+
function readAnsiRecord(rCtx, start, count, charSet) {
|
|
37112
|
+
const { view } = rCtx;
|
|
37113
|
+
return decodeAnsiRecord(Array.from({ length: count }, (_, i) => view.getUint8(start + i)), charSet, rCtx.codePages);
|
|
37065
37114
|
}
|
|
37066
37115
|
function collapseAnsiDx(dx, byteLengths, pdy) {
|
|
37067
37116
|
if (!dx) return null;
|
|
@@ -37096,7 +37145,7 @@ function handlePolyText(rCtx, offset, dataOff, recSize, wide) {
|
|
|
37096
37145
|
const offDx = view.getUint32(e + 36, true);
|
|
37097
37146
|
const unit = wide ? 2 : 1;
|
|
37098
37147
|
if (!offString || offString > end - offset || n > Math.floor((end - (offset + offString)) / unit)) continue;
|
|
37099
|
-
const ansi = wide ? null : readAnsiRecord(
|
|
37148
|
+
const ansi = wide ? null : readAnsiRecord(rCtx, offset + offString, n, charSet);
|
|
37100
37149
|
const codes = wide ? Array.from({ length: n }, (_, j) => view.getUint16(offset + offString + j * 2, true)) : ansi.codes;
|
|
37101
37150
|
let dx = null;
|
|
37102
37151
|
const pdy = (options2 & ETO_PDY) !== 0;
|
|
@@ -37137,7 +37186,7 @@ function handleEmfGdiDrawTextRecord(rCtx, recType, offset, dataOff, recSize) {
|
|
|
37137
37186
|
const n = view.getUint32(dataOff + 36, true), strOff = view.getUint32(dataOff + 40, true), options2 = view.getUint32(dataOff + 44, true);
|
|
37138
37187
|
if (!strOff || strOff > end - offset) return true;
|
|
37139
37188
|
if (n > end - (offset + strOff)) return true;
|
|
37140
|
-
const ansi = readAnsiRecord(
|
|
37189
|
+
const ansi = readAnsiRecord(rCtx, offset + strOff, n, state.fontDetails?.charSet ?? 1);
|
|
37141
37190
|
const rect = [view.getInt32(dataOff + 48, true), view.getInt32(dataOff + 52, true), view.getInt32(dataOff + 56, true), view.getInt32(dataOff + 60, true)];
|
|
37142
37191
|
const offDx = view.getUint32(dataOff + 64, true);
|
|
37143
37192
|
let dx = null;
|
|
@@ -40892,6 +40941,7 @@ function replayEmfPlusRecords(view, offset, length, ctx, canvasW, canvasH, state
|
|
|
40892
40941
|
imageCache: s.imageCache,
|
|
40893
40942
|
nestingDepth: s.nestingDepth,
|
|
40894
40943
|
gdiAntialias: s.gdiAntialias,
|
|
40944
|
+
codePages: s.codePages,
|
|
40895
40945
|
antiAlias: s.antiAlias,
|
|
40896
40946
|
ext: s.ext ?? (s.ext = {})
|
|
40897
40947
|
};
|
|
@@ -41069,6 +41119,7 @@ function replayEmfRecords(view, ctx, bounds, canvasW, canvasH, dpiScale = 1, rep
|
|
|
41069
41119
|
const plusScale = dpiScale > 0 ? dpiScale : 1;
|
|
41070
41120
|
emfPlusState.imageCache = replayOptions.imageCache;
|
|
41071
41121
|
emfPlusState.gdiAntialias = replayOptions.gdiAntialias;
|
|
41122
|
+
emfPlusState.codePages = replayOptions.codePages;
|
|
41072
41123
|
emfPlusState.baseTransform = replayOptions.plusBaseTransform ?? [
|
|
41073
41124
|
sx / plusScale,
|
|
41074
41125
|
0,
|
|
@@ -41108,7 +41159,8 @@ function replayEmfRecords(view, ctx, bounds, canvasW, canvasH, dpiScale = 1, rep
|
|
|
41108
41159
|
sy,
|
|
41109
41160
|
pathCmds: [],
|
|
41110
41161
|
gdiAntialias: replayOptions.gdiAntialias,
|
|
41111
|
-
fonts: replayOptions.fonts
|
|
41162
|
+
fonts: replayOptions.fonts,
|
|
41163
|
+
codePages: replayOptions.codePages
|
|
41112
41164
|
};
|
|
41113
41165
|
let offset = 0;
|
|
41114
41166
|
const maxOffset = view.byteLength;
|
|
@@ -41505,14 +41557,15 @@ function createFont(p, dataOff, recSize, recEnd) {
|
|
|
41505
41557
|
addObject(p, { kind: "other" });
|
|
41506
41558
|
return;
|
|
41507
41559
|
}
|
|
41508
|
-
|
|
41560
|
+
const faceBytes = [];
|
|
41509
41561
|
for (let i = 0; i < 32 && dataOff + 18 + i < recEnd; i++) {
|
|
41510
41562
|
const ch = view.getUint8(dataOff + 18 + i);
|
|
41511
41563
|
if (ch === 0) {
|
|
41512
41564
|
break;
|
|
41513
41565
|
}
|
|
41514
|
-
|
|
41566
|
+
faceBytes.push(ch);
|
|
41515
41567
|
}
|
|
41568
|
+
const family = String.fromCharCode(...decodeAnsiRecord(faceBytes, 1, { ansi: p.ansiCodePage }).codes);
|
|
41516
41569
|
const font = {
|
|
41517
41570
|
kind: "font",
|
|
41518
41571
|
// Sign kept: resolveFontPixelHeight() tells cell from character height by it.
|
|
@@ -42539,7 +42592,7 @@ function drawWithFontEngine2(p, call, codes, dx) {
|
|
|
42539
42592
|
}
|
|
42540
42593
|
function playText(p, call) {
|
|
42541
42594
|
const charSet = p.rCtx.state.fontDetails?.charSet ?? 1;
|
|
42542
|
-
const { codes, byteLengths } = decodeAnsiRecord(call.bytes, charSet);
|
|
42595
|
+
const { codes, byteLengths } = decodeAnsiRecord(call.bytes, charSet, { ansi: p.ansiCodePage, oem: p.oemCodePage });
|
|
42543
42596
|
const n = codes.length;
|
|
42544
42597
|
if (n === 0) {
|
|
42545
42598
|
return;
|
|
@@ -42671,6 +42724,8 @@ function createWmfPlayer(view, ctx, header, canvasW, canvasH, replayOptions = {}
|
|
|
42671
42724
|
};
|
|
42672
42725
|
const p = {
|
|
42673
42726
|
rCtx,
|
|
42727
|
+
ansiCodePage: replayOptions.wmfAnsiCodePage ?? replayOptions.codePages?.ansi,
|
|
42728
|
+
oemCodePage: replayOptions.codePages?.oem,
|
|
42674
42729
|
view,
|
|
42675
42730
|
kx,
|
|
42676
42731
|
ky,
|
|
@@ -43169,6 +43224,7 @@ async function replayMetafile(buffer, options2, createSurface) {
|
|
|
43169
43224
|
maxRecords: opts.maxRecords,
|
|
43170
43225
|
maxRecordsEmfPlus: opts.maxRecords,
|
|
43171
43226
|
fontFamilyMap: opts.fontFamilyMap,
|
|
43227
|
+
codePages: { ansi: opts.ansiCodePage, oem: opts.oemCodePage },
|
|
43172
43228
|
textureCache,
|
|
43173
43229
|
imageCache,
|
|
43174
43230
|
gdiAntialias: opts.gdiAntialias,
|
|
@@ -43202,6 +43258,8 @@ async function replayMetafile(buffer, options2, createSurface) {
|
|
|
43202
43258
|
surface.ctx.save();
|
|
43203
43259
|
replayWmfRecords(view, surface.ctx, header, surface.width, surface.height, {
|
|
43204
43260
|
wmfReferenceDpi: opts.wmfReferenceDpi,
|
|
43261
|
+
wmfAnsiCodePage: opts.wmfAnsiCodePage,
|
|
43262
|
+
codePages: { ansi: opts.ansiCodePage, oem: opts.oemCodePage },
|
|
43205
43263
|
maxRecords: opts.maxRecords,
|
|
43206
43264
|
fontFamilyMap: opts.fontFamilyMap,
|
|
43207
43265
|
gdiAntialias: opts.gdiAntialias,
|