@mavogel/awscdk-rootmail 0.0.218 → 0.0.220

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (99) hide show
  1. package/.jsii +4 -4
  2. package/lib/rootmail.js +1 -1
  3. package/lib/ses-receive.js +1 -1
  4. package/node_modules/cdk-nag/.jsii +2 -2
  5. package/node_modules/cdk-nag/lib/ignore-suppression-conditions.js +5 -5
  6. package/node_modules/cdk-nag/lib/nag-logger.js +2 -2
  7. package/node_modules/cdk-nag/lib/nag-pack.js +1 -1
  8. package/node_modules/cdk-nag/lib/nag-rules.js +1 -1
  9. package/node_modules/cdk-nag/lib/nag-suppressions.js +1 -1
  10. package/node_modules/cdk-nag/lib/packs/aws-solutions.js +1 -1
  11. package/node_modules/cdk-nag/lib/packs/hipaa-security.js +1 -1
  12. package/node_modules/cdk-nag/lib/packs/nist-800-53-r4.js +1 -1
  13. package/node_modules/cdk-nag/lib/packs/nist-800-53-r5.js +1 -1
  14. package/node_modules/cdk-nag/lib/packs/pci-dss-321.js +1 -1
  15. package/node_modules/cdk-nag/package.json +1 -1
  16. package/node_modules/encoding-japanese/README.md +65 -13
  17. package/node_modules/encoding-japanese/encoding.js +7 -2
  18. package/node_modules/encoding-japanese/encoding.min.js +2 -2
  19. package/node_modules/encoding-japanese/package.json +2 -2
  20. package/node_modules/encoding-japanese/src/encoding-convert.js +5 -0
  21. package/node_modules/libbase64/.prettierrc.js +4 -1
  22. package/node_modules/libbase64/lib/libbase64.js +2 -1
  23. package/node_modules/libbase64/package.json +9 -8
  24. package/node_modules/libmime/CHANGELOG.md +7 -0
  25. package/node_modules/libmime/package.json +5 -5
  26. package/node_modules/libqp/CHANGELOG.md +15 -0
  27. package/node_modules/libqp/lib/libqp.js +13 -21
  28. package/node_modules/libqp/package.json +7 -6
  29. package/node_modules/libqp/test/libqp-test.js +161 -0
  30. package/node_modules/mailparser/CHANGELOG.md +7 -0
  31. package/node_modules/mailparser/package.json +8 -8
  32. package/node_modules/mailsplit/LICENSE.MIT +6 -1
  33. package/node_modules/mailsplit/README.md +2 -0
  34. package/node_modules/mailsplit/lib/headers.js +5 -1
  35. package/node_modules/mailsplit/package.json +10 -9
  36. package/node_modules/nodemailer/.ncurc.js +4 -1
  37. package/node_modules/nodemailer/CHANGELOG.md +25 -0
  38. package/node_modules/nodemailer/lib/addressparser/index.js +22 -8
  39. package/node_modules/nodemailer/lib/mime-funcs/mime-types.js +2 -0
  40. package/node_modules/nodemailer/lib/nodemailer.js +13 -6
  41. package/node_modules/nodemailer/lib/smtp-connection/index.js +9 -0
  42. package/node_modules/nodemailer/lib/well-known/services.json +14 -3
  43. package/node_modules/nodemailer/package.json +5 -5
  44. package/node_modules/tlds/index.json +0 -3
  45. package/node_modules/tlds/package.json +1 -1
  46. package/package.json +4 -4
  47. package/node_modules/libmime/node_modules/libbase64/.eslintrc +0 -11
  48. package/node_modules/libmime/node_modules/libbase64/.prettierrc.js +0 -8
  49. package/node_modules/libmime/node_modules/libbase64/LICENSE +0 -19
  50. package/node_modules/libmime/node_modules/libbase64/README.md +0 -113
  51. package/node_modules/libmime/node_modules/libbase64/lib/libbase64.js +0 -253
  52. package/node_modules/libmime/node_modules/libbase64/package.json +0 -35
  53. package/node_modules/libmime/node_modules/libqp/.eslintrc +0 -15
  54. package/node_modules/libmime/node_modules/libqp/.prettierrc.js +0 -8
  55. package/node_modules/libmime/node_modules/libqp/CHANGELOG.md +0 -8
  56. package/node_modules/libmime/node_modules/libqp/LICENSE +0 -19
  57. package/node_modules/libmime/node_modules/libqp/README.md +0 -119
  58. package/node_modules/libmime/node_modules/libqp/lib/libqp.js +0 -320
  59. package/node_modules/libmime/node_modules/libqp/package.json +0 -28
  60. package/node_modules/libmime/node_modules/libqp/test/libqp-test.js +0 -41
  61. package/node_modules/mailsplit/node_modules/encoding-japanese/LICENSE +0 -21
  62. package/node_modules/mailsplit/node_modules/encoding-japanese/README.md +0 -542
  63. package/node_modules/mailsplit/node_modules/encoding-japanese/encoding.js +0 -6077
  64. package/node_modules/mailsplit/node_modules/encoding-japanese/encoding.min.js +0 -8
  65. package/node_modules/mailsplit/node_modules/encoding-japanese/encoding.min.js.map +0 -1
  66. package/node_modules/mailsplit/node_modules/encoding-japanese/package.json +0 -70
  67. package/node_modules/mailsplit/node_modules/encoding-japanese/src/banner.js +0 -6
  68. package/node_modules/mailsplit/node_modules/encoding-japanese/src/config.js +0 -139
  69. package/node_modules/mailsplit/node_modules/encoding-japanese/src/encoding-convert.js +0 -1676
  70. package/node_modules/mailsplit/node_modules/encoding-japanese/src/encoding-detect.js +0 -502
  71. package/node_modules/mailsplit/node_modules/encoding-japanese/src/encoding-table.js +0 -4
  72. package/node_modules/mailsplit/node_modules/encoding-japanese/src/index.js +0 -593
  73. package/node_modules/mailsplit/node_modules/encoding-japanese/src/jis-to-utf8-table.js +0 -5
  74. package/node_modules/mailsplit/node_modules/encoding-japanese/src/jisx0212-to-utf8-table.js +0 -5
  75. package/node_modules/mailsplit/node_modules/encoding-japanese/src/kana-case-table.js +0 -41
  76. package/node_modules/mailsplit/node_modules/encoding-japanese/src/utf8-to-jis-table.js +0 -1493
  77. package/node_modules/mailsplit/node_modules/encoding-japanese/src/utf8-to-jisx0212-table.js +0 -1224
  78. package/node_modules/mailsplit/node_modules/encoding-japanese/src/util.js +0 -361
  79. package/node_modules/mailsplit/node_modules/libmime/.eslintrc +0 -7
  80. package/node_modules/mailsplit/node_modules/libmime/.gitattributes +0 -1
  81. package/node_modules/mailsplit/node_modules/libmime/.github/FUNDING.yml +0 -4
  82. package/node_modules/mailsplit/node_modules/libmime/.github/workflows/test.yml +0 -21
  83. package/node_modules/mailsplit/node_modules/libmime/.prettierrc.js +0 -8
  84. package/node_modules/mailsplit/node_modules/libmime/CHANGELOG.md +0 -110
  85. package/node_modules/mailsplit/node_modules/libmime/LICENSE +0 -19
  86. package/node_modules/mailsplit/node_modules/libmime/README.md +0 -207
  87. package/node_modules/mailsplit/node_modules/libmime/lib/charset.js +0 -117
  88. package/node_modules/mailsplit/node_modules/libmime/lib/charsets.js +0 -212
  89. package/node_modules/mailsplit/node_modules/libmime/lib/libmime.js +0 -903
  90. package/node_modules/mailsplit/node_modules/libmime/lib/mimetypes.js +0 -2049
  91. package/node_modules/mailsplit/node_modules/libmime/package.json +0 -37
  92. /package/node_modules/{libmime/node_modules/libbase64 → libbase64}/.github/FUNDING.yml +0 -0
  93. /package/node_modules/{libmime/node_modules/libbase64 → libbase64}/.github/workflows/release.yaml +0 -0
  94. /package/node_modules/{libmime/node_modules/libbase64 → libbase64}/.github/workflows/test.yml +0 -0
  95. /package/node_modules/{libmime/node_modules/libbase64 → libbase64}/.ncurc.js +0 -0
  96. /package/node_modules/{libmime/node_modules/libbase64 → libbase64}/CHANGELOG.md +0 -0
  97. /package/node_modules/{libmime/node_modules/libqp → libqp}/.github/FUNDING.yml +0 -0
  98. /package/node_modules/{libmime/node_modules/libqp → libqp}/.github/workflows/release.yaml +0 -0
  99. /package/node_modules/{libmime/node_modules/libqp → libqp}/.github/workflows/test.yml +0 -0
@@ -1,1676 +0,0 @@
1
- var config = require('./config');
2
- var util = require('./util');
3
- var EncodingDetect = require('./encoding-detect');
4
- var EncodingTable = require('./encoding-table');
5
-
6
- /**
7
- * JIS to SJIS
8
- */
9
- function JISToSJIS(data) {
10
- var results = [];
11
- var index = 0;
12
- var i = 0;
13
- var len = data && data.length;
14
- var b1, b2;
15
-
16
- for (; i < len; i++) {
17
- // escape sequence
18
- while (data[i] === 0x1B) {
19
- if ((data[i + 1] === 0x24 && data[i + 2] === 0x42) ||
20
- (data[i + 1] === 0x24 && data[i + 2] === 0x40)) {
21
- index = 1;
22
- } else if ((data[i + 1] === 0x28 && data[i + 2] === 0x49)) {
23
- index = 2;
24
- } else if (data[i + 1] === 0x24 && data[i + 2] === 0x28 &&
25
- data[i + 3] === 0x44) {
26
- index = 3;
27
- i++;
28
- } else {
29
- index = 0;
30
- }
31
-
32
- i += 3;
33
- if (data[i] === void 0) {
34
- return results;
35
- }
36
- }
37
-
38
- if (index === 1) {
39
- b1 = data[i];
40
- b2 = data[++i];
41
- if (b1 & 0x01) {
42
- b1 >>= 1;
43
- if (b1 < 0x2F) {
44
- b1 += 0x71;
45
- } else {
46
- b1 -= 0x4F;
47
- }
48
- if (b2 > 0x5F) {
49
- b2 += 0x20;
50
- } else {
51
- b2 += 0x1F;
52
- }
53
- } else {
54
- b1 >>= 1;
55
- if (b1 <= 0x2F) {
56
- b1 += 0x70;
57
- } else {
58
- b1 -= 0x50;
59
- }
60
- b2 += 0x7E;
61
- }
62
- results[results.length] = b1 & 0xFF;
63
- results[results.length] = b2 & 0xFF;
64
- } else if (index === 2) {
65
- results[results.length] = data[i] + 0x80 & 0xFF;
66
- } else if (index === 3) {
67
- // Shift_JIS cannot convert JIS X 0212:1990.
68
- results[results.length] = config.FALLBACK_CHARACTER;
69
- } else {
70
- results[results.length] = data[i] & 0xFF;
71
- }
72
- }
73
-
74
- return results;
75
- }
76
- exports.JISToSJIS = JISToSJIS;
77
-
78
- /**
79
- * JIS to EUCJP
80
- */
81
- function JISToEUCJP(data) {
82
- var results = [];
83
- var index = 0;
84
- var len = data && data.length;
85
- var i = 0;
86
-
87
- for (; i < len; i++) {
88
-
89
- // escape sequence
90
- while (data[i] === 0x1B) {
91
- if ((data[i + 1] === 0x24 && data[i + 2] === 0x42) ||
92
- (data[i + 1] === 0x24 && data[i + 2] === 0x40)) {
93
- index = 1;
94
- } else if ((data[i + 1] === 0x28 && data[i + 2] === 0x49)) {
95
- index = 2;
96
- } else if (data[i + 1] === 0x24 && data[i + 2] === 0x28 &&
97
- data[i + 3] === 0x44) {
98
- index = 3;
99
- i++;
100
- } else {
101
- index = 0;
102
- }
103
-
104
- i += 3;
105
- if (data[i] === void 0) {
106
- return results;
107
- }
108
- }
109
-
110
- if (index === 1) {
111
- results[results.length] = data[i] + 0x80 & 0xFF;
112
- results[results.length] = data[++i] + 0x80 & 0xFF;
113
- } else if (index === 2) {
114
- results[results.length] = 0x8E;
115
- results[results.length] = data[i] + 0x80 & 0xFF;
116
- } else if (index === 3) {
117
- results[results.length] = 0x8F;
118
- results[results.length] = data[i] + 0x80 & 0xFF;
119
- results[results.length] = data[++i] + 0x80 & 0xFF;
120
- } else {
121
- results[results.length] = data[i] & 0xFF;
122
- }
123
- }
124
-
125
- return results;
126
- }
127
- exports.JISToEUCJP = JISToEUCJP;
128
-
129
- /**
130
- * SJIS to JIS
131
- */
132
- function SJISToJIS(data) {
133
- var results = [];
134
- var index = 0;
135
- var len = data && data.length;
136
- var i = 0;
137
- var b1, b2;
138
-
139
- var esc = [
140
- 0x1B, 0x28, 0x42,
141
- 0x1B, 0x24, 0x42,
142
- 0x1B, 0x28, 0x49
143
- ];
144
-
145
- for (; i < len; i++) {
146
- b1 = data[i];
147
- if (b1 >= 0xA1 && b1 <= 0xDF) {
148
- if (index !== 2) {
149
- index = 2;
150
- results[results.length] = esc[6];
151
- results[results.length] = esc[7];
152
- results[results.length] = esc[8];
153
- }
154
- results[results.length] = b1 - 0x80 & 0xFF;
155
- } else if (b1 >= 0x80) {
156
- if (index !== 1) {
157
- index = 1;
158
- results[results.length] = esc[3];
159
- results[results.length] = esc[4];
160
- results[results.length] = esc[5];
161
- }
162
-
163
- b1 <<= 1;
164
- b2 = data[++i];
165
- if (b2 < 0x9F) {
166
- if (b1 < 0x13F) {
167
- b1 -= 0xE1;
168
- } else {
169
- b1 -= 0x61;
170
- }
171
- if (b2 > 0x7E) {
172
- b2 -= 0x20;
173
- } else {
174
- b2 -= 0x1F;
175
- }
176
- } else {
177
- if (b1 < 0x13F) {
178
- b1 -= 0xE0;
179
- } else {
180
- b1 -= 0x60;
181
- }
182
- b2 -= 0x7E;
183
- }
184
- results[results.length] = b1 & 0xFF;
185
- results[results.length] = b2 & 0xFF;
186
- } else {
187
- if (index !== 0) {
188
- index = 0;
189
- results[results.length] = esc[0];
190
- results[results.length] = esc[1];
191
- results[results.length] = esc[2];
192
- }
193
- results[results.length] = b1 & 0xFF;
194
- }
195
- }
196
-
197
- if (index !== 0) {
198
- results[results.length] = esc[0];
199
- results[results.length] = esc[1];
200
- results[results.length] = esc[2];
201
- }
202
-
203
- return results;
204
- }
205
- exports.SJISToJIS = SJISToJIS;
206
-
207
- /**
208
- * SJIS to EUCJP
209
- */
210
- function SJISToEUCJP(data) {
211
- var results = [];
212
- var len = data && data.length;
213
- var i = 0;
214
- var b1, b2;
215
-
216
- for (; i < len; i++) {
217
- b1 = data[i];
218
- if (b1 >= 0xA1 && b1 <= 0xDF) {
219
- results[results.length] = 0x8E;
220
- results[results.length] = b1;
221
- } else if (b1 >= 0x81) {
222
- b2 = data[++i];
223
- b1 <<= 1;
224
- if (b2 < 0x9F) {
225
- if (b1 < 0x13F) {
226
- b1 -= 0x61;
227
- } else {
228
- b1 -= 0xE1;
229
- }
230
-
231
- if (b2 > 0x7E) {
232
- b2 += 0x60;
233
- } else {
234
- b2 += 0x61;
235
- }
236
- } else {
237
- if (b1 < 0x13F) {
238
- b1 -= 0x60;
239
- } else {
240
- b1 -= 0xE0;
241
- }
242
- b2 += 0x02;
243
- }
244
- results[results.length] = b1 & 0xFF;
245
- results[results.length] = b2 & 0xFF;
246
- } else {
247
- results[results.length] = b1 & 0xFF;
248
- }
249
- }
250
-
251
- return results;
252
- }
253
- exports.SJISToEUCJP = SJISToEUCJP;
254
-
255
- /**
256
- * EUCJP to JIS
257
- */
258
- function EUCJPToJIS(data) {
259
- var results = [];
260
- var index = 0;
261
- var len = data && data.length;
262
- var i = 0;
263
- var b;
264
-
265
- // escape sequence
266
- var esc = [
267
- 0x1B, 0x28, 0x42,
268
- 0x1B, 0x24, 0x42,
269
- 0x1B, 0x28, 0x49,
270
- 0x1B, 0x24, 0x28, 0x44
271
- ];
272
-
273
- for (; i < len; i++) {
274
- b = data[i];
275
- if (b === 0x8E) {
276
- if (index !== 2) {
277
- index = 2;
278
- results[results.length] = esc[6];
279
- results[results.length] = esc[7];
280
- results[results.length] = esc[8];
281
- }
282
- results[results.length] = data[++i] - 0x80 & 0xFF;
283
- } else if (b === 0x8F) {
284
- if (index !== 3) {
285
- index = 3;
286
- results[results.length] = esc[9];
287
- results[results.length] = esc[10];
288
- results[results.length] = esc[11];
289
- results[results.length] = esc[12];
290
- }
291
- results[results.length] = data[++i] - 0x80 & 0xFF;
292
- results[results.length] = data[++i] - 0x80 & 0xFF;
293
- } else if (b > 0x8E) {
294
- if (index !== 1) {
295
- index = 1;
296
- results[results.length] = esc[3];
297
- results[results.length] = esc[4];
298
- results[results.length] = esc[5];
299
- }
300
- results[results.length] = b - 0x80 & 0xFF;
301
- results[results.length] = data[++i] - 0x80 & 0xFF;
302
- } else {
303
- if (index !== 0) {
304
- index = 0;
305
- results[results.length] = esc[0];
306
- results[results.length] = esc[1];
307
- results[results.length] = esc[2];
308
- }
309
- results[results.length] = b & 0xFF;
310
- }
311
- }
312
-
313
- if (index !== 0) {
314
- results[results.length] = esc[0];
315
- results[results.length] = esc[1];
316
- results[results.length] = esc[2];
317
- }
318
-
319
- return results;
320
- }
321
- exports.EUCJPToJIS = EUCJPToJIS;
322
-
323
- /**
324
- * EUCJP to SJIS
325
- */
326
- function EUCJPToSJIS(data) {
327
- var results = [];
328
- var len = data && data.length;
329
- var i = 0;
330
- var b1, b2;
331
-
332
- for (; i < len; i++) {
333
- b1 = data[i];
334
- if (b1 === 0x8F) {
335
- results[results.length] = config.FALLBACK_CHARACTER;
336
- i += 2;
337
- } else if (b1 > 0x8E) {
338
- b2 = data[++i];
339
- if (b1 & 0x01) {
340
- b1 >>= 1;
341
- if (b1 < 0x6F) {
342
- b1 += 0x31;
343
- } else {
344
- b1 += 0x71;
345
- }
346
-
347
- if (b2 > 0xDF) {
348
- b2 -= 0x60;
349
- } else {
350
- b2 -= 0x61;
351
- }
352
- } else {
353
- b1 >>= 1;
354
- if (b1 <= 0x6F) {
355
- b1 += 0x30;
356
- } else {
357
- b1 += 0x70;
358
- }
359
- b2 -= 0x02;
360
- }
361
- results[results.length] = b1 & 0xFF;
362
- results[results.length] = b2 & 0xFF;
363
- } else if (b1 === 0x8E) {
364
- results[results.length] = data[++i] & 0xFF;
365
- } else {
366
- results[results.length] = b1 & 0xFF;
367
- }
368
- }
369
-
370
- return results;
371
- }
372
- exports.EUCJPToSJIS = EUCJPToSJIS;
373
-
374
- /**
375
- * SJIS To UTF-8
376
- */
377
- function SJISToUTF8(data) {
378
- config.init_JIS_TO_UTF8_TABLE();
379
-
380
- var results = [];
381
- var i = 0;
382
- var len = data && data.length;
383
- var b, b1, b2, u2, u3, jis, utf8;
384
-
385
- for (; i < len; i++) {
386
- b = data[i];
387
- if (b >= 0xA1 && b <= 0xDF) {
388
- b2 = b - 0x40;
389
- u2 = 0xBC | ((b2 >> 6) & 0x03);
390
- u3 = 0x80 | (b2 & 0x3F);
391
-
392
- results[results.length] = 0xEF;
393
- results[results.length] = u2 & 0xFF;
394
- results[results.length] = u3 & 0xFF;
395
- } else if (b >= 0x80) {
396
- b1 = b << 1;
397
- b2 = data[++i];
398
-
399
- if (b2 < 0x9F) {
400
- if (b1 < 0x13F) {
401
- b1 -= 0xE1;
402
- } else {
403
- b1 -= 0x61;
404
- }
405
-
406
- if (b2 > 0x7E) {
407
- b2 -= 0x20;
408
- } else {
409
- b2 -= 0x1F;
410
- }
411
- } else {
412
- if (b1 < 0x13F) {
413
- b1 -= 0xE0;
414
- } else {
415
- b1 -= 0x60;
416
- }
417
- b2 -= 0x7E;
418
- }
419
-
420
- b1 &= 0xFF;
421
- jis = (b1 << 8) + b2;
422
-
423
- utf8 = EncodingTable.JIS_TO_UTF8_TABLE[jis];
424
- if (utf8 === void 0) {
425
- results[results.length] = config.FALLBACK_CHARACTER;
426
- } else {
427
- if (utf8 < 0xFFFF) {
428
- results[results.length] = utf8 >> 8 & 0xFF;
429
- results[results.length] = utf8 & 0xFF;
430
- } else {
431
- results[results.length] = utf8 >> 16 & 0xFF;
432
- results[results.length] = utf8 >> 8 & 0xFF;
433
- results[results.length] = utf8 & 0xFF;
434
- }
435
- }
436
- } else {
437
- results[results.length] = data[i] & 0xFF;
438
- }
439
- }
440
-
441
- return results;
442
- }
443
- exports.SJISToUTF8 = SJISToUTF8;
444
-
445
- /**
446
- * EUC-JP to UTF-8
447
- */
448
- function EUCJPToUTF8(data) {
449
- config.init_JIS_TO_UTF8_TABLE();
450
-
451
- var results = [];
452
- var i = 0;
453
- var len = data && data.length;
454
- var b, b2, u2, u3, j2, j3, jis, utf8;
455
-
456
- for (; i < len; i++) {
457
- b = data[i];
458
- if (b === 0x8E) {
459
- b2 = data[++i] - 0x40;
460
- u2 = 0xBC | ((b2 >> 6) & 0x03);
461
- u3 = 0x80 | (b2 & 0x3F);
462
-
463
- results[results.length] = 0xEF;
464
- results[results.length] = u2 & 0xFF;
465
- results[results.length] = u3 & 0xFF;
466
- } else if (b === 0x8F) {
467
- j2 = data[++i] - 0x80;
468
- j3 = data[++i] - 0x80;
469
- jis = (j2 << 8) + j3;
470
-
471
- utf8 = EncodingTable.JISX0212_TO_UTF8_TABLE[jis];
472
- if (utf8 === void 0) {
473
- results[results.length] = config.FALLBACK_CHARACTER;
474
- } else {
475
- if (utf8 < 0xFFFF) {
476
- results[results.length] = utf8 >> 8 & 0xFF;
477
- results[results.length] = utf8 & 0xFF;
478
- } else {
479
- results[results.length] = utf8 >> 16 & 0xFF;
480
- results[results.length] = utf8 >> 8 & 0xFF;
481
- results[results.length] = utf8 & 0xFF;
482
- }
483
- }
484
- } else if (b >= 0x80) {
485
- jis = ((b - 0x80) << 8) + (data[++i] - 0x80);
486
-
487
- utf8 = EncodingTable.JIS_TO_UTF8_TABLE[jis];
488
- if (utf8 === void 0) {
489
- results[results.length] = config.FALLBACK_CHARACTER;
490
- } else {
491
- if (utf8 < 0xFFFF) {
492
- results[results.length] = utf8 >> 8 & 0xFF;
493
- results[results.length] = utf8 & 0xFF;
494
- } else {
495
- results[results.length] = utf8 >> 16 & 0xFF;
496
- results[results.length] = utf8 >> 8 & 0xFF;
497
- results[results.length] = utf8 & 0xFF;
498
- }
499
- }
500
- } else {
501
- results[results.length] = data[i] & 0xFF;
502
- }
503
- }
504
-
505
- return results;
506
- }
507
- exports.EUCJPToUTF8 = EUCJPToUTF8;
508
-
509
- /**
510
- * JIS to UTF-8
511
- */
512
- function JISToUTF8(data) {
513
- config.init_JIS_TO_UTF8_TABLE();
514
-
515
- var results = [];
516
- var index = 0;
517
- var i = 0;
518
- var len = data && data.length;
519
- var b2, u2, u3, jis, utf8;
520
-
521
- for (; i < len; i++) {
522
- while (data[i] === 0x1B) {
523
- if ((data[i + 1] === 0x24 && data[i + 2] === 0x42) ||
524
- (data[i + 1] === 0x24 && data[i + 2] === 0x40)) {
525
- index = 1;
526
- } else if (data[i + 1] === 0x28 && data[i + 2] === 0x49) {
527
- index = 2;
528
- } else if (data[i + 1] === 0x24 && data[i + 2] === 0x28 &&
529
- data[i + 3] === 0x44) {
530
- index = 3;
531
- i++;
532
- } else {
533
- index = 0;
534
- }
535
-
536
- i += 3;
537
- if (data[i] === void 0) {
538
- return results;
539
- }
540
- }
541
-
542
- if (index === 1) {
543
- jis = (data[i] << 8) + data[++i];
544
-
545
- utf8 = EncodingTable.JIS_TO_UTF8_TABLE[jis];
546
- if (utf8 === void 0) {
547
- results[results.length] = config.FALLBACK_CHARACTER;
548
- } else {
549
- if (utf8 < 0xFFFF) {
550
- results[results.length] = utf8 >> 8 & 0xFF;
551
- results[results.length] = utf8 & 0xFF;
552
- } else {
553
- results[results.length] = utf8 >> 16 & 0xFF;
554
- results[results.length] = utf8 >> 8 & 0xFF;
555
- results[results.length] = utf8 & 0xFF;
556
- }
557
- }
558
- } else if (index === 2) {
559
- b2 = data[i] + 0x40;
560
- u2 = 0xBC | ((b2 >> 6) & 0x03);
561
- u3 = 0x80 | (b2 & 0x3F);
562
-
563
- results[results.length] = 0xEF;
564
- results[results.length] = u2 & 0xFF;
565
- results[results.length] = u3 & 0xFF;
566
- } else if (index === 3) {
567
- jis = (data[i] << 8) + data[++i];
568
-
569
- utf8 = EncodingTable.JISX0212_TO_UTF8_TABLE[jis];
570
- if (utf8 === void 0) {
571
- results[results.length] = config.FALLBACK_CHARACTER;
572
- } else {
573
- if (utf8 < 0xFFFF) {
574
- results[results.length] = utf8 >> 8 & 0xFF;
575
- results[results.length] = utf8 & 0xFF;
576
- } else {
577
- results[results.length] = utf8 >> 16 & 0xFF;
578
- results[results.length] = utf8 >> 8 & 0xFF;
579
- results[results.length] = utf8 & 0xFF;
580
- }
581
- }
582
- } else {
583
- results[results.length] = data[i] & 0xFF;
584
- }
585
- }
586
-
587
- return results;
588
- }
589
- exports.JISToUTF8 = JISToUTF8;
590
-
591
- /**
592
- * UTF-8 to SJIS
593
- */
594
- function UTF8ToSJIS(data, options) {
595
- var results = [];
596
- var i = 0;
597
- var len = data && data.length;
598
- var b, b1, b2, bytes, utf8, jis;
599
- var fallbackOption = options && options.fallback;
600
-
601
- for (; i < len; i++) {
602
- b = data[i];
603
-
604
- if (b >= 0x80) {
605
- if (b <= 0xDF) {
606
- // 2 bytes
607
- bytes = [b, data[i + 1]];
608
- utf8 = (b << 8) + data[++i];
609
- } else if (b <= 0xEF) {
610
- // 3 bytes
611
- bytes = [b, data[i + 1], data[i + 2]];
612
- utf8 = (b << 16) +
613
- (data[++i] << 8) +
614
- (data[++i] & 0xFF);
615
- } else {
616
- // 4 bytes
617
- bytes = [b, data[i + 1], data[i + 2], data[i + 3]];
618
- utf8 = (b << 24) +
619
- (data[++i] << 16) +
620
- (data[++i] << 8) +
621
- (data[++i] & 0xFF);
622
- }
623
-
624
- jis = EncodingTable.UTF8_TO_JIS_TABLE[utf8];
625
- if (jis == null) {
626
- if (fallbackOption) {
627
- handleFallback(results, bytes, fallbackOption);
628
- } else {
629
- results[results.length] = config.FALLBACK_CHARACTER;
630
- }
631
- } else {
632
- if (jis < 0xFF) {
633
- results[results.length] = jis + 0x80;
634
- } else {
635
- if (jis > 0x10000) {
636
- jis -= 0x10000;
637
- }
638
-
639
- b1 = jis >> 8;
640
- b2 = jis & 0xFF;
641
- if (b1 & 0x01) {
642
- b1 >>= 1;
643
- if (b1 < 0x2F) {
644
- b1 += 0x71;
645
- } else {
646
- b1 -= 0x4F;
647
- }
648
-
649
- if (b2 > 0x5F) {
650
- b2 += 0x20;
651
- } else {
652
- b2 += 0x1F;
653
- }
654
- } else {
655
- b1 >>= 1;
656
- if (b1 <= 0x2F) {
657
- b1 += 0x70;
658
- } else {
659
- b1 -= 0x50;
660
- }
661
- b2 += 0x7E;
662
- }
663
- results[results.length] = b1 & 0xFF;
664
- results[results.length] = b2 & 0xFF;
665
- }
666
- }
667
- } else {
668
- results[results.length] = data[i] & 0xFF;
669
- }
670
- }
671
-
672
- return results;
673
- }
674
- exports.UTF8ToSJIS = UTF8ToSJIS;
675
-
676
- /**
677
- * UTF-8 to EUC-JP
678
- */
679
- function UTF8ToEUCJP(data, options) {
680
- var results = [];
681
- var i = 0;
682
- var len = data && data.length;
683
- var b, bytes, utf8, jis;
684
- var fallbackOption = options && options.fallback;
685
-
686
- for (; i < len; i++) {
687
- b = data[i];
688
- if (b >= 0x80) {
689
- if (b <= 0xDF) {
690
- // 2 bytes
691
- bytes = [b, data[i + 1]];
692
- utf8 = (b << 8) + data[++i];
693
- } else if (b <= 0xEF) {
694
- // 3 bytes
695
- bytes = [b, data[i + 1], data[i + 2]];
696
- utf8 = (b << 16) +
697
- (data[++i] << 8) +
698
- (data[++i] & 0xFF);
699
- } else {
700
- // 4 bytes
701
- bytes = [b, data[i + 1], data[i + 2], data[i + 3]];
702
- utf8 = (b << 24) +
703
- (data[++i] << 16) +
704
- (data[++i] << 8) +
705
- (data[++i] & 0xFF);
706
- }
707
-
708
- jis = EncodingTable.UTF8_TO_JIS_TABLE[utf8];
709
- if (jis == null) {
710
- jis = EncodingTable.UTF8_TO_JISX0212_TABLE[utf8];
711
- if (jis == null) {
712
- if (fallbackOption) {
713
- handleFallback(results, bytes, fallbackOption);
714
- } else {
715
- results[results.length] = config.FALLBACK_CHARACTER;
716
- }
717
- } else {
718
- results[results.length] = 0x8F;
719
- results[results.length] = (jis >> 8) - 0x80 & 0xFF;
720
- results[results.length] = (jis & 0xFF) - 0x80 & 0xFF;
721
- }
722
- } else {
723
- if (jis > 0x10000) {
724
- jis -= 0x10000;
725
- }
726
- if (jis < 0xFF) {
727
- results[results.length] = 0x8E;
728
- results[results.length] = jis - 0x80 & 0xFF;
729
- } else {
730
- results[results.length] = (jis >> 8) - 0x80 & 0xFF;
731
- results[results.length] = (jis & 0xFF) - 0x80 & 0xFF;
732
- }
733
- }
734
- } else {
735
- results[results.length] = data[i] & 0xFF;
736
- }
737
- }
738
-
739
- return results;
740
- }
741
- exports.UTF8ToEUCJP = UTF8ToEUCJP;
742
-
743
- /**
744
- * UTF-8 to JIS
745
- */
746
- function UTF8ToJIS(data, options) {
747
- var results = [];
748
- var index = 0;
749
- var len = data && data.length;
750
- var i = 0;
751
- var b, bytes, utf8, jis;
752
- var fallbackOption = options && options.fallback;
753
-
754
- var esc = [
755
- 0x1B, 0x28, 0x42,
756
- 0x1B, 0x24, 0x42,
757
- 0x1B, 0x28, 0x49,
758
- 0x1B, 0x24, 0x28, 0x44
759
- ];
760
-
761
- for (; i < len; i++) {
762
- b = data[i];
763
- if (b < 0x80) {
764
- if (index !== 0) {
765
- index = 0;
766
- results[results.length] = esc[0];
767
- results[results.length] = esc[1];
768
- results[results.length] = esc[2];
769
- }
770
- results[results.length] = b & 0xFF;
771
- } else {
772
- if (b <= 0xDF) {
773
- // 2 bytes
774
- bytes = [b, data[i + 1]];
775
- utf8 = (b << 8) + data[++i];
776
- } else if (b <= 0xEF) {
777
- // 3 bytes
778
- bytes = [b, data[i + 1], data[i + 2]];
779
- utf8 = (b << 16) +
780
- (data[++i] << 8) +
781
- (data[++i] & 0xFF);
782
- } else {
783
- // 4 bytes
784
- bytes = [b, data[i + 1], data[i + 2], data[i + 3]];
785
- utf8 = (b << 24) +
786
- (data[++i] << 16) +
787
- (data[++i] << 8) +
788
- (data[++i] & 0xFF);
789
- }
790
-
791
- jis = EncodingTable.UTF8_TO_JIS_TABLE[utf8];
792
- if (jis == null) {
793
- jis = EncodingTable.UTF8_TO_JISX0212_TABLE[utf8];
794
- if (jis == null) {
795
- if (index !== 0) {
796
- index = 0;
797
- results[results.length] = esc[0];
798
- results[results.length] = esc[1];
799
- results[results.length] = esc[2];
800
- }
801
-
802
- if (fallbackOption) {
803
- handleFallback(results, bytes, fallbackOption);
804
- } else {
805
- results[results.length] = config.FALLBACK_CHARACTER;
806
- }
807
- } else {
808
- // JIS X 0212:1990
809
- if (index !== 3) {
810
- index = 3;
811
- results[results.length] = esc[9];
812
- results[results.length] = esc[10];
813
- results[results.length] = esc[11];
814
- results[results.length] = esc[12];
815
- }
816
- results[results.length] = jis >> 8 & 0xFF;
817
- results[results.length] = jis & 0xFF;
818
- }
819
- } else {
820
- if (jis > 0x10000) {
821
- jis -= 0x10000;
822
- }
823
- if (jis < 0xFF) {
824
- // Halfwidth Katakana
825
- if (index !== 2) {
826
- index = 2;
827
- results[results.length] = esc[6];
828
- results[results.length] = esc[7];
829
- results[results.length] = esc[8];
830
- }
831
- results[results.length] = jis & 0xFF;
832
- } else {
833
- if (index !== 1) {
834
- index = 1;
835
- results[results.length] = esc[3];
836
- results[results.length] = esc[4];
837
- results[results.length] = esc[5];
838
- }
839
- results[results.length] = jis >> 8 & 0xFF;
840
- results[results.length] = jis & 0xFF;
841
- }
842
- }
843
- }
844
- }
845
-
846
- if (index !== 0) {
847
- results[results.length] = esc[0];
848
- results[results.length] = esc[1];
849
- results[results.length] = esc[2];
850
- }
851
-
852
- return results;
853
- }
854
- exports.UTF8ToJIS = UTF8ToJIS;
855
-
856
- /**
857
- * UTF-16 (JavaScript Unicode array) to UTF-8
858
- */
859
- function UNICODEToUTF8(data) {
860
- var results = [];
861
- var i = 0;
862
- var len = data && data.length;
863
- var c, second;
864
-
865
- for (; i < len; i++) {
866
- c = data[i];
867
-
868
- // high surrogate
869
- if (c >= 0xD800 && c <= 0xDBFF && i + 1 < len) {
870
- second = data[i + 1];
871
- // low surrogate
872
- if (second >= 0xDC00 && second <= 0xDFFF) {
873
- c = (c - 0xD800) * 0x400 + second - 0xDC00 + 0x10000;
874
- i++;
875
- }
876
- }
877
-
878
- if (c < 0x80) {
879
- results[results.length] = c;
880
- } else if (c < 0x800) {
881
- results[results.length] = 0xC0 | ((c >> 6) & 0x1F);
882
- results[results.length] = 0x80 | (c & 0x3F);
883
- } else if (c < 0x10000) {
884
- results[results.length] = 0xE0 | ((c >> 12) & 0xF);
885
- results[results.length] = 0x80 | ((c >> 6) & 0x3F);
886
- results[results.length] = 0x80 | (c & 0x3F);
887
- } else if (c < 0x200000) {
888
- results[results.length] = 0xF0 | ((c >> 18) & 0xF);
889
- results[results.length] = 0x80 | ((c >> 12) & 0x3F);
890
- results[results.length] = 0x80 | ((c >> 6) & 0x3F);
891
- results[results.length] = 0x80 | (c & 0x3F);
892
- }
893
- }
894
-
895
- return results;
896
- }
897
- exports.UNICODEToUTF8 = UNICODEToUTF8;
898
-
899
- /**
900
- * UTF-8 to UTF-16 (JavaScript Unicode array)
901
- */
902
- function UTF8ToUNICODE(data, options) {
903
- var results = [];
904
- var i = 0;
905
- var len = data && data.length;
906
- var n, c, c2, c3, c4, code;
907
- // For internal usage only
908
- var ignoreSurrogatePair = options && options.ignoreSurrogatePair;
909
-
910
- while (i < len) {
911
- c = data[i++];
912
- n = c >> 4;
913
- if (n >= 0 && n <= 7) {
914
- // 0xxx xxxx
915
- code = c;
916
- } else if (n === 12 || n === 13) {
917
- // 110x xxxx
918
- // 10xx xxxx
919
- c2 = data[i++];
920
- code = ((c & 0x1F) << 6) | (c2 & 0x3F);
921
- } else if (n === 14) {
922
- // 1110 xxxx
923
- // 10xx xxxx
924
- // 10xx xxxx
925
- c2 = data[i++];
926
- c3 = data[i++];
927
- code = ((c & 0x0F) << 12) |
928
- ((c2 & 0x3F) << 6) |
929
- (c3 & 0x3F);
930
- } else if (n === 15) {
931
- // 1111 0xxx
932
- // 10xx xxxx
933
- // 10xx xxxx
934
- // 10xx xxxx
935
- c2 = data[i++];
936
- c3 = data[i++];
937
- c4 = data[i++];
938
- code = ((c & 0x7) << 18) |
939
- ((c2 & 0x3F) << 12) |
940
- ((c3 & 0x3F) << 6) |
941
- (c4 & 0x3F);
942
- }
943
-
944
- if (code <= 0xFFFF || ignoreSurrogatePair) {
945
- results[results.length] = code;
946
- } else {
947
- // Split in surrogate halves
948
- code -= 0x10000;
949
- results[results.length] = (code >> 10) + 0xD800; // High surrogate
950
- results[results.length] = (code % 0x400) + 0xDC00; // Low surrogate
951
- }
952
- }
953
-
954
- return results;
955
- }
956
- exports.UTF8ToUNICODE = UTF8ToUNICODE;
957
-
958
- /**
959
- * UTF-16 (JavaScript Unicode array) to UTF-16
960
- *
961
- * UTF-16BE (big-endian)
962
- * Note: this function does not prepend the BOM by default.
963
- *
964
- * RFC 2781 4.3 Interpreting text labelled as UTF-16
965
- * If the first two octets of the text is not 0xFE followed by
966
- * 0xFF, and is not 0xFF followed by 0xFE, then the text SHOULD be
967
- * interpreted as being big-endian.
968
- *
969
- * @link https://www.ietf.org/rfc/rfc2781.txt
970
- * UTF-16, an encoding of ISO 10646
971
- */
972
- function UNICODEToUTF16(data, options) {
973
- var results;
974
-
975
- if (options && options.bom) {
976
- var optBom = options.bom;
977
- if (!util.isString(optBom)) {
978
- optBom = 'BE';
979
- }
980
-
981
- var bom, utf16;
982
- if (optBom.charAt(0).toUpperCase() === 'B') {
983
- // Big-endian
984
- bom = [0xFE, 0xFF];
985
- utf16 = UNICODEToUTF16BE(data);
986
- } else {
987
- // Little-endian
988
- bom = [0xFF, 0xFE];
989
- utf16 = UNICODEToUTF16LE(data);
990
- }
991
-
992
- results = [];
993
- results[0] = bom[0];
994
- results[1] = bom[1];
995
-
996
- for (var i = 0, len = utf16.length; i < len; i++) {
997
- results[results.length] = utf16[i];
998
- }
999
- } else {
1000
- // Should be interpreted as being big-endian when text has no BOM
1001
- results = UNICODEToUTF16BE(data);
1002
- }
1003
-
1004
- return results;
1005
- }
1006
- exports.UNICODEToUTF16 = UNICODEToUTF16;
1007
-
1008
- /**
1009
- * UTF-16 (JavaScript Unicode array) to UTF-16BE
1010
- *
1011
- * @link https://www.ietf.org/rfc/rfc2781.txt
1012
- * UTF-16, an encoding of ISO 10646
1013
- */
1014
- function UNICODEToUTF16BE(data) {
1015
- var results = [];
1016
- var i = 0;
1017
- var len = data && data.length;
1018
- var c;
1019
-
1020
- while (i < len) {
1021
- c = data[i++];
1022
- if (c <= 0xFF) {
1023
- results[results.length] = 0;
1024
- results[results.length] = c;
1025
- } else if (c <= 0xFFFF) {
1026
- results[results.length] = c >> 8 & 0xFF;
1027
- results[results.length] = c & 0xFF;
1028
- }
1029
- }
1030
-
1031
- return results;
1032
- }
1033
- exports.UNICODEToUTF16BE = UNICODEToUTF16BE;
1034
-
1035
- /**
1036
- * UTF-16 (JavaScript Unicode array) to UTF-16LE
1037
- *
1038
- * @link https://www.ietf.org/rfc/rfc2781.txt
1039
- * UTF-16, an encoding of ISO 10646
1040
- */
1041
- function UNICODEToUTF16LE(data) {
1042
- var results = [];
1043
- var i = 0;
1044
- var len = data && data.length;
1045
- var c;
1046
-
1047
- while (i < len) {
1048
- c = data[i++];
1049
- if (c <= 0xFF) {
1050
- results[results.length] = c;
1051
- results[results.length] = 0;
1052
- } else if (c <= 0xFFFF) {
1053
- results[results.length] = c & 0xFF;
1054
- results[results.length] = c >> 8 & 0xFF;
1055
- }
1056
- }
1057
-
1058
- return results;
1059
- }
1060
- exports.UNICODEToUTF16LE = UNICODEToUTF16LE;
1061
-
1062
- /**
1063
- * UTF-16BE to UTF-16 (JavaScript Unicode array)
1064
- *
1065
- * @link https://www.ietf.org/rfc/rfc2781.txt
1066
- * UTF-16, an encoding of ISO 10646
1067
- */
1068
- function UTF16BEToUNICODE(data) {
1069
- var results = [];
1070
- var i = 0;
1071
- var len = data && data.length;
1072
- var c1, c2;
1073
-
1074
- if (len >= 2 &&
1075
- ((data[0] === 0xFE && data[1] === 0xFF) ||
1076
- (data[0] === 0xFF && data[1] === 0xFE))
1077
- ) {
1078
- i = 2;
1079
- }
1080
-
1081
- while (i < len) {
1082
- c1 = data[i++];
1083
- c2 = data[i++];
1084
- if (c1 === 0) {
1085
- results[results.length] = c2;
1086
- } else {
1087
- results[results.length] = ((c1 & 0xFF) << 8) | (c2 & 0xFF);
1088
- }
1089
- }
1090
-
1091
- return results;
1092
- }
1093
- exports.UTF16BEToUNICODE = UTF16BEToUNICODE;
1094
-
1095
- /**
1096
- * UTF-16LE to UTF-16 (JavaScript Unicode array)
1097
- *
1098
- * @link https://www.ietf.org/rfc/rfc2781.txt
1099
- * UTF-16, an encoding of ISO 10646
1100
- */
1101
- function UTF16LEToUNICODE(data) {
1102
- var results = [];
1103
- var i = 0;
1104
- var len = data && data.length;
1105
- var c1, c2;
1106
-
1107
- if (len >= 2 &&
1108
- ((data[0] === 0xFE && data[1] === 0xFF) ||
1109
- (data[0] === 0xFF && data[1] === 0xFE))
1110
- ) {
1111
- i = 2;
1112
- }
1113
-
1114
- while (i < len) {
1115
- c1 = data[i++];
1116
- c2 = data[i++];
1117
- if (c2 === 0) {
1118
- results[results.length] = c1;
1119
- } else {
1120
- results[results.length] = ((c2 & 0xFF) << 8) | (c1 & 0xFF);
1121
- }
1122
- }
1123
-
1124
- return results;
1125
- }
1126
- exports.UTF16LEToUNICODE = UTF16LEToUNICODE;
1127
-
1128
- /**
1129
- * UTF-16 to UTF-16 (JavaScript Unicode array)
1130
- *
1131
- * @link https://www.ietf.org/rfc/rfc2781.txt
1132
- * UTF-16, an encoding of ISO 10646
1133
- */
1134
- function UTF16ToUNICODE(data) {
1135
- var results = [];
1136
- var i = 0;
1137
- var len = data && data.length;
1138
- var isLE = false;
1139
- var first = true;
1140
- var c1, c2;
1141
-
1142
- while (i < len) {
1143
- c1 = data[i++];
1144
- c2 = data[i++];
1145
-
1146
- if (first && i === 2) {
1147
- first = false;
1148
- if (c1 === 0xFE && c2 === 0xFF) {
1149
- isLE = false;
1150
- } else if (c1 === 0xFF && c2 === 0xFE) {
1151
- // Little-endian
1152
- isLE = true;
1153
- } else {
1154
- isLE = EncodingDetect.isUTF16LE(data);
1155
- i = 0;
1156
- }
1157
- continue;
1158
- }
1159
-
1160
- if (isLE) {
1161
- if (c2 === 0) {
1162
- results[results.length] = c1;
1163
- } else {
1164
- results[results.length] = ((c2 & 0xFF) << 8) | (c1 & 0xFF);
1165
- }
1166
- } else {
1167
- if (c1 === 0) {
1168
- results[results.length] = c2;
1169
- } else {
1170
- results[results.length] = ((c1 & 0xFF) << 8) | (c2 & 0xFF);
1171
- }
1172
- }
1173
- }
1174
-
1175
- return results;
1176
- }
1177
- exports.UTF16ToUNICODE = UTF16ToUNICODE;
1178
-
1179
- /**
1180
- * UTF-16 to UTF-16BE
1181
- */
1182
- function UTF16ToUTF16BE(data) {
1183
- var results = [];
1184
- var i = 0;
1185
- var len = data && data.length;
1186
- var isLE = false;
1187
- var first = true;
1188
- var c1, c2;
1189
-
1190
- while (i < len) {
1191
- c1 = data[i++];
1192
- c2 = data[i++];
1193
-
1194
- if (first && i === 2) {
1195
- first = false;
1196
- if (c1 === 0xFE && c2 === 0xFF) {
1197
- isLE = false;
1198
- } else if (c1 === 0xFF && c2 === 0xFE) {
1199
- // Little-endian
1200
- isLE = true;
1201
- } else {
1202
- isLE = EncodingDetect.isUTF16LE(data);
1203
- i = 0;
1204
- }
1205
- continue;
1206
- }
1207
-
1208
- if (isLE) {
1209
- results[results.length] = c2;
1210
- results[results.length] = c1;
1211
- } else {
1212
- results[results.length] = c1;
1213
- results[results.length] = c2;
1214
- }
1215
- }
1216
-
1217
- return results;
1218
- }
1219
- exports.UTF16ToUTF16BE = UTF16ToUTF16BE;
1220
-
1221
- /**
1222
- * UTF-16BE to UTF-16
1223
- */
1224
- function UTF16BEToUTF16(data, options) {
1225
- var isLE = false;
1226
- var bom;
1227
-
1228
- if (options && options.bom) {
1229
- var optBom = options.bom;
1230
- if (!util.isString(optBom)) {
1231
- optBom = 'BE';
1232
- }
1233
-
1234
- if (optBom.charAt(0).toUpperCase() === 'B') {
1235
- // Big-endian
1236
- bom = [0xFE, 0xFF];
1237
- } else {
1238
- // Little-endian
1239
- bom = [0xFF, 0xFE];
1240
- isLE = true;
1241
- }
1242
- }
1243
-
1244
- var results = [];
1245
- var len = data && data.length;
1246
- var i = 0;
1247
-
1248
- if (len >= 2 &&
1249
- ((data[0] === 0xFE && data[1] === 0xFF) ||
1250
- (data[0] === 0xFF && data[1] === 0xFE))
1251
- ) {
1252
- i = 2;
1253
- }
1254
-
1255
- if (bom) {
1256
- results[0] = bom[0];
1257
- results[1] = bom[1];
1258
- }
1259
-
1260
- var c1, c2;
1261
- while (i < len) {
1262
- c1 = data[i++];
1263
- c2 = data[i++];
1264
-
1265
- if (isLE) {
1266
- results[results.length] = c2;
1267
- results[results.length] = c1;
1268
- } else {
1269
- results[results.length] = c1;
1270
- results[results.length] = c2;
1271
- }
1272
- }
1273
-
1274
- return results;
1275
- }
1276
- exports.UTF16BEToUTF16 = UTF16BEToUTF16;
1277
-
1278
- /**
1279
- * UTF-16 to UTF-16LE
1280
- */
1281
- function UTF16ToUTF16LE(data) {
1282
- var results = [];
1283
- var i = 0;
1284
- var len = data && data.length;
1285
- var isLE = false;
1286
- var first = true;
1287
- var c1, c2;
1288
-
1289
- while (i < len) {
1290
- c1 = data[i++];
1291
- c2 = data[i++];
1292
-
1293
- if (first && i === 2) {
1294
- first = false;
1295
- if (c1 === 0xFE && c2 === 0xFF) {
1296
- isLE = false;
1297
- } else if (c1 === 0xFF && c2 === 0xFE) {
1298
- // Little-endian
1299
- isLE = true;
1300
- } else {
1301
- isLE = EncodingDetect.isUTF16LE(data);
1302
- i = 0;
1303
- }
1304
- continue;
1305
- }
1306
-
1307
- if (isLE) {
1308
- results[results.length] = c1;
1309
- results[results.length] = c2;
1310
- } else {
1311
- results[results.length] = c2;
1312
- results[results.length] = c1;
1313
- }
1314
- }
1315
-
1316
- return results;
1317
- }
1318
- exports.UTF16ToUTF16LE = UTF16ToUTF16LE;
1319
-
1320
- /**
1321
- * UTF-16LE to UTF-16
1322
- */
1323
- function UTF16LEToUTF16(data, options) {
1324
- var isLE = false;
1325
- var bom;
1326
-
1327
- if (options && options.bom) {
1328
- var optBom = options.bom;
1329
- if (!util.isString(optBom)) {
1330
- optBom = 'BE';
1331
- }
1332
-
1333
- if (optBom.charAt(0).toUpperCase() === 'B') {
1334
- // Big-endian
1335
- bom = [0xFE, 0xFF];
1336
- } else {
1337
- // Little-endian
1338
- bom = [0xFF, 0xFE];
1339
- isLE = true;
1340
- }
1341
- }
1342
-
1343
- var results = [];
1344
- var len = data && data.length;
1345
- var i = 0;
1346
-
1347
- if (len >= 2 &&
1348
- ((data[0] === 0xFE && data[1] === 0xFF) ||
1349
- (data[0] === 0xFF && data[1] === 0xFE))
1350
- ) {
1351
- i = 2;
1352
- }
1353
-
1354
- if (bom) {
1355
- results[0] = bom[0];
1356
- results[1] = bom[1];
1357
- }
1358
-
1359
- var c1, c2;
1360
- while (i < len) {
1361
- c1 = data[i++];
1362
- c2 = data[i++];
1363
-
1364
- if (isLE) {
1365
- results[results.length] = c1;
1366
- results[results.length] = c2;
1367
- } else {
1368
- results[results.length] = c2;
1369
- results[results.length] = c1;
1370
- }
1371
- }
1372
-
1373
- return results;
1374
- }
1375
- exports.UTF16LEToUTF16 = UTF16LEToUTF16;
1376
-
1377
- /**
1378
- * UTF-16BE to UTF-16LE
1379
- */
1380
- function UTF16BEToUTF16LE(data) {
1381
- var results = [];
1382
- var i = 0;
1383
- var len = data && data.length;
1384
- var c1, c2;
1385
-
1386
- if (len >= 2 &&
1387
- ((data[0] === 0xFE && data[1] === 0xFF) ||
1388
- (data[0] === 0xFF && data[1] === 0xFE))
1389
- ) {
1390
- i = 2;
1391
- }
1392
-
1393
- while (i < len) {
1394
- c1 = data[i++];
1395
- c2 = data[i++];
1396
- results[results.length] = c2;
1397
- results[results.length] = c1;
1398
- }
1399
-
1400
- return results;
1401
- }
1402
- exports.UTF16BEToUTF16LE = UTF16BEToUTF16LE;
1403
-
1404
- /**
1405
- * UTF-16LE to UTF-16BE
1406
- */
1407
- function UTF16LEToUTF16BE(data) {
1408
- return UTF16BEToUTF16LE(data);
1409
- }
1410
- exports.UTF16LEToUTF16BE = UTF16LEToUTF16BE;
1411
-
1412
- /**
1413
- * UTF-16 (JavaScript Unicode array) to JIS
1414
- */
1415
- function UNICODEToJIS(data, options) {
1416
- return UTF8ToJIS(UNICODEToUTF8(data), options);
1417
- }
1418
- exports.UNICODEToJIS = UNICODEToJIS;
1419
-
1420
- /**
1421
- * JIS to UTF-16 (JavaScript Unicode array)
1422
- */
1423
- function JISToUNICODE(data) {
1424
- return UTF8ToUNICODE(JISToUTF8(data));
1425
- }
1426
- exports.JISToUNICODE = JISToUNICODE;
1427
-
1428
- /**
1429
- * UTF-16 (JavaScript Unicode array) to EUCJP
1430
- */
1431
- function UNICODEToEUCJP(data, options) {
1432
- return UTF8ToEUCJP(UNICODEToUTF8(data), options);
1433
- }
1434
- exports.UNICODEToEUCJP = UNICODEToEUCJP;
1435
-
1436
- /**
1437
- * EUCJP to UTF-16 (JavaScript Unicode array)
1438
- */
1439
- function EUCJPToUNICODE(data) {
1440
- return UTF8ToUNICODE(EUCJPToUTF8(data));
1441
- }
1442
- exports.EUCJPToUNICODE = EUCJPToUNICODE;
1443
-
1444
- /**
1445
- * UTF-16 (JavaScript Unicode array) to SJIS
1446
- */
1447
- function UNICODEToSJIS(data, options) {
1448
- return UTF8ToSJIS(UNICODEToUTF8(data), options);
1449
- }
1450
- exports.UNICODEToSJIS = UNICODEToSJIS;
1451
-
1452
- /**
1453
- * SJIS to UTF-16 (JavaScript Unicode array)
1454
- */
1455
- function SJISToUNICODE(data) {
1456
- return UTF8ToUNICODE(SJISToUTF8(data));
1457
- }
1458
- exports.SJISToUNICODE = SJISToUNICODE;
1459
-
1460
- /**
1461
- * UTF-8 to UTF-16
1462
- */
1463
- function UTF8ToUTF16(data, options) {
1464
- return UNICODEToUTF16(UTF8ToUNICODE(data), options);
1465
- }
1466
- exports.UTF8ToUTF16 = UTF8ToUTF16;
1467
-
1468
- /**
1469
- * UTF-16 to UTF-8
1470
- */
1471
- function UTF16ToUTF8(data) {
1472
- return UNICODEToUTF8(UTF16ToUNICODE(data));
1473
- }
1474
- exports.UTF16ToUTF8 = UTF16ToUTF8;
1475
-
1476
- /**
1477
- * UTF-8 to UTF-16BE
1478
- */
1479
- function UTF8ToUTF16BE(data) {
1480
- return UNICODEToUTF16BE(UTF8ToUNICODE(data));
1481
- }
1482
- exports.UTF8ToUTF16BE = UTF8ToUTF16BE;
1483
-
1484
- /**
1485
- * UTF-16BE to UTF-8
1486
- */
1487
- function UTF16BEToUTF8(data) {
1488
- return UNICODEToUTF8(UTF16BEToUNICODE(data));
1489
- }
1490
- exports.UTF16BEToUTF8 = UTF16BEToUTF8;
1491
-
1492
- /**
1493
- * UTF-8 to UTF-16LE
1494
- */
1495
- function UTF8ToUTF16LE(data) {
1496
- return UNICODEToUTF16LE(UTF8ToUNICODE(data));
1497
- }
1498
- exports.UTF8ToUTF16LE = UTF8ToUTF16LE;
1499
-
1500
- /**
1501
- * UTF-16LE to UTF-8
1502
- */
1503
- function UTF16LEToUTF8(data) {
1504
- return UNICODEToUTF8(UTF16LEToUNICODE(data));
1505
- }
1506
- exports.UTF16LEToUTF8 = UTF16LEToUTF8;
1507
-
1508
- /**
1509
- * JIS to UTF-16
1510
- */
1511
- function JISToUTF16(data, options) {
1512
- return UTF8ToUTF16(JISToUTF8(data), options);
1513
- }
1514
- exports.JISToUTF16 = JISToUTF16;
1515
-
1516
- /**
1517
- * UTF-16 to JIS
1518
- */
1519
- function UTF16ToJIS(data, options) {
1520
- return UTF8ToJIS(UTF16ToUTF8(data), options);
1521
- }
1522
- exports.UTF16ToJIS = UTF16ToJIS;
1523
-
1524
- /**
1525
- * JIS to UTF-16BE
1526
- */
1527
- function JISToUTF16BE(data) {
1528
- return UTF8ToUTF16BE(JISToUTF8(data));
1529
- }
1530
- exports.JISToUTF16BE = JISToUTF16BE;
1531
-
1532
- /**
1533
- * UTF-16BE to JIS
1534
- */
1535
- function UTF16BEToJIS(data, options) {
1536
- return UTF8ToJIS(UTF16BEToUTF8(data), options);
1537
- }
1538
- exports.UTF16BEToJIS = UTF16BEToJIS;
1539
-
1540
- /**
1541
- * JIS to UTF-16LE
1542
- */
1543
- function JISToUTF16LE(data) {
1544
- return UTF8ToUTF16LE(JISToUTF8(data));
1545
- }
1546
- exports.JISToUTF16LE = JISToUTF16LE;
1547
-
1548
- /**
1549
- * UTF-16LE to JIS
1550
- */
1551
- function UTF16LEToJIS(data, options) {
1552
- return UTF8ToJIS(UTF16LEToUTF8(data), options);
1553
- }
1554
- exports.UTF16LEToJIS = UTF16LEToJIS;
1555
-
1556
- /**
1557
- * EUC-JP to UTF-16
1558
- */
1559
- function EUCJPToUTF16(data, options) {
1560
- return UTF8ToUTF16(EUCJPToUTF8(data), options);
1561
- }
1562
- exports.EUCJPToUTF16 = EUCJPToUTF16;
1563
-
1564
- /**
1565
- * UTF-16 to EUC-JP
1566
- */
1567
- function UTF16ToEUCJP(data, options) {
1568
- return UTF8ToEUCJP(UTF16ToUTF8(data), options);
1569
- }
1570
- exports.UTF16ToEUCJP = UTF16ToEUCJP;
1571
-
1572
- /**
1573
- * EUC-JP to UTF-16BE
1574
- */
1575
- function EUCJPToUTF16BE(data) {
1576
- return UTF8ToUTF16BE(EUCJPToUTF8(data));
1577
- }
1578
- exports.EUCJPToUTF16BE = EUCJPToUTF16BE;
1579
-
1580
- /**
1581
- * UTF-16BE to EUC-JP
1582
- */
1583
- function UTF16BEToEUCJP(data, options) {
1584
- return UTF8ToEUCJP(UTF16BEToUTF8(data), options);
1585
- }
1586
- exports.UTF16BEToEUCJP = UTF16BEToEUCJP;
1587
-
1588
- /**
1589
- * EUC-JP to UTF-16LE
1590
- */
1591
- function EUCJPToUTF16LE(data) {
1592
- return UTF8ToUTF16LE(EUCJPToUTF8(data));
1593
- }
1594
- exports.EUCJPToUTF16LE = EUCJPToUTF16LE;
1595
-
1596
- /**
1597
- * UTF-16LE to EUC-JP
1598
- */
1599
- function UTF16LEToEUCJP(data, options) {
1600
- return UTF8ToEUCJP(UTF16LEToUTF8(data), options);
1601
- }
1602
- exports.UTF16LEToEUCJP = UTF16LEToEUCJP;
1603
-
1604
- /**
1605
- * SJIS to UTF-16
1606
- */
1607
- function SJISToUTF16(data, options) {
1608
- return UTF8ToUTF16(SJISToUTF8(data), options);
1609
- }
1610
- exports.SJISToUTF16 = SJISToUTF16;
1611
-
1612
- /**
1613
- * UTF-16 to SJIS
1614
- */
1615
- function UTF16ToSJIS(data, options) {
1616
- return UTF8ToSJIS(UTF16ToUTF8(data), options);
1617
- }
1618
- exports.UTF16ToSJIS = UTF16ToSJIS;
1619
-
1620
- /**
1621
- * SJIS to UTF-16BE
1622
- */
1623
- function SJISToUTF16BE(data) {
1624
- return UTF8ToUTF16BE(SJISToUTF8(data));
1625
- }
1626
- exports.SJISToUTF16BE = SJISToUTF16BE;
1627
-
1628
- /**
1629
- * UTF-16BE to SJIS
1630
- */
1631
- function UTF16BEToSJIS(data, options) {
1632
- return UTF8ToSJIS(UTF16BEToUTF8(data), options);
1633
- }
1634
- exports.UTF16BEToSJIS = UTF16BEToSJIS;
1635
-
1636
- /**
1637
- * SJIS to UTF-16LE
1638
- */
1639
- function SJISToUTF16LE(data) {
1640
- return UTF8ToUTF16LE(SJISToUTF8(data));
1641
- }
1642
- exports.SJISToUTF16LE = SJISToUTF16LE;
1643
-
1644
- /**
1645
- * UTF-16LE to SJIS
1646
- */
1647
- function UTF16LEToSJIS(data, options) {
1648
- return UTF8ToSJIS(UTF16LEToUTF8(data), options);
1649
- }
1650
- exports.UTF16LEToSJIS = UTF16LEToSJIS;
1651
-
1652
- /**
1653
- * Fallback handler when a character can't be represented
1654
- */
1655
- function handleFallback(results, bytes, fallbackOption) {
1656
- switch (fallbackOption) {
1657
- case 'html-entity':
1658
- case 'html-entity-hex':
1659
- var unicode = UTF8ToUNICODE(bytes, { ignoreSurrogatePair: true })[0];
1660
- if (unicode) {
1661
- results[results.length] = 0x26; // &
1662
- results[results.length] = 0x23; // #
1663
-
1664
- var radix = fallbackOption.slice(-3) === 'hex' ? 16 : 10;
1665
- if (radix === 16) {
1666
- results[results.length] = 0x78; // x
1667
- }
1668
-
1669
- var entity = unicode.toString(radix);
1670
- for (var i = 0, len = entity.length; i < len; i++) {
1671
- results[results.length] = entity.charCodeAt(i);
1672
- }
1673
- results[results.length] = 0x3B; // ;
1674
- }
1675
- }
1676
- }