@mavogel/awscdk-rootmail 0.0.40 → 0.0.41
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/.jsii +9 -9
- package/lib/rootmail.js +1 -1
- package/lib/ses-receive.js +1 -1
- package/node_modules/@aws-sdk/client-cloudwatch-logs/package.json +2 -2
- package/node_modules/@aws-sdk/client-route-53/package.json +2 -2
- package/node_modules/@aws-sdk/client-s3/package.json +2 -2
- package/node_modules/@aws-sdk/client-ses/package.json +2 -2
- package/node_modules/@aws-sdk/client-ssm/package.json +2 -2
- package/node_modules/@aws-sdk/credential-provider-node/dist-cjs/index.js +2 -2
- package/node_modules/@aws-sdk/credential-provider-node/dist-es/defaultProvider.js +1 -1
- package/node_modules/@aws-sdk/credential-provider-node/package.json +1 -1
- package/node_modules/cdk-nag/.jsii +2 -2
- package/node_modules/cdk-nag/lib/ignore-suppression-conditions.js +5 -5
- package/node_modules/cdk-nag/lib/nag-logger.js +2 -2
- package/node_modules/cdk-nag/lib/nag-pack.js +1 -1
- package/node_modules/cdk-nag/lib/nag-rules.js +1 -1
- package/node_modules/cdk-nag/lib/nag-suppressions.js +1 -1
- package/node_modules/cdk-nag/lib/packs/aws-solutions.js +1 -1
- package/node_modules/cdk-nag/lib/packs/hipaa-security.js +1 -1
- package/node_modules/cdk-nag/lib/packs/nist-800-53-r4.js +1 -1
- package/node_modules/cdk-nag/lib/packs/nist-800-53-r5.js +1 -1
- package/node_modules/cdk-nag/lib/packs/pci-dss-321.js +1 -1
- package/node_modules/cdk-nag/package.json +1 -1
- package/node_modules/encoding-japanese/README.md +449 -212
- package/node_modules/encoding-japanese/encoding.js +2 -2
- package/node_modules/encoding-japanese/encoding.min.js +2 -3
- package/node_modules/encoding-japanese/package.json +7 -8
- package/node_modules/libmime/.ncurc.js +3 -1
- package/node_modules/libmime/CHANGELOG.md +7 -0
- package/node_modules/libmime/lib/get-charset-name.js +227 -0
- package/node_modules/libmime/package.json +3 -3
- package/node_modules/mailparser/.ncurc.js +8 -0
- package/node_modules/mailparser/CHANGELOG.md +7 -0
- package/node_modules/mailparser/lib/mail-parser.js +1 -1
- package/node_modules/mailparser/package.json +7 -7
- package/node_modules/mailsplit/node_modules/encoding-japanese/LICENSE +21 -0
- package/node_modules/mailsplit/node_modules/encoding-japanese/README.md +542 -0
- package/node_modules/mailsplit/node_modules/encoding-japanese/encoding.js +6077 -0
- package/node_modules/mailsplit/node_modules/encoding-japanese/encoding.min.js +8 -0
- package/node_modules/mailsplit/node_modules/encoding-japanese/package.json +70 -0
- package/node_modules/mailsplit/node_modules/encoding-japanese/src/banner.js +6 -0
- package/node_modules/mailsplit/node_modules/encoding-japanese/src/config.js +139 -0
- package/node_modules/mailsplit/node_modules/encoding-japanese/src/encoding-convert.js +1676 -0
- package/node_modules/mailsplit/node_modules/encoding-japanese/src/encoding-detect.js +502 -0
- package/node_modules/mailsplit/node_modules/encoding-japanese/src/encoding-table.js +4 -0
- package/node_modules/mailsplit/node_modules/encoding-japanese/src/index.js +593 -0
- package/node_modules/mailsplit/node_modules/encoding-japanese/src/jis-to-utf8-table.js +5 -0
- package/node_modules/mailsplit/node_modules/encoding-japanese/src/jisx0212-to-utf8-table.js +5 -0
- package/node_modules/mailsplit/node_modules/encoding-japanese/src/kana-case-table.js +41 -0
- package/node_modules/mailsplit/node_modules/encoding-japanese/src/utf8-to-jis-table.js +1493 -0
- package/node_modules/mailsplit/node_modules/encoding-japanese/src/utf8-to-jisx0212-table.js +1224 -0
- package/node_modules/mailsplit/node_modules/encoding-japanese/src/util.js +361 -0
- package/node_modules/nodemailer/CHANGELOG.md +14 -0
- package/node_modules/nodemailer/lib/mime-node/index.js +1 -1
- package/node_modules/nodemailer/lib/smtp-connection/index.js +13 -0
- package/node_modules/nodemailer/package.json +3 -3
- package/node_modules/{punycode → punycode.js}/package.json +1 -1
- package/node_modules/tlds/index.json +0 -2
- package/node_modules/tlds/package.json +1 -1
- package/package.json +8 -8
- /package/node_modules/{encoding-japanese → mailsplit/node_modules/encoding-japanese}/CHANGELOG.md +0 -0
- /package/node_modules/{encoding-japanese → mailsplit/node_modules/encoding-japanese}/encoding.min.js.map +0 -0
- /package/node_modules/{punycode → punycode.js}/LICENSE-MIT.txt +0 -0
- /package/node_modules/{punycode → punycode.js}/README.md +0 -0
- /package/node_modules/{punycode → punycode.js}/punycode.es6.js +0 -0
- /package/node_modules/{punycode → punycode.js}/punycode.js +0 -0
|
@@ -0,0 +1,593 @@
|
|
|
1
|
+
var config = require('./config');
|
|
2
|
+
var util = require('./util');
|
|
3
|
+
var EncodingDetect = require('./encoding-detect');
|
|
4
|
+
var EncodingConvert = require('./encoding-convert');
|
|
5
|
+
var KanaCaseTable = require('./kana-case-table');
|
|
6
|
+
var version = require('../package.json').version;
|
|
7
|
+
|
|
8
|
+
var hasOwnProperty = Object.prototype.hasOwnProperty;
|
|
9
|
+
|
|
10
|
+
var Encoding = {
|
|
11
|
+
version: version,
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Encoding orders
|
|
15
|
+
*/
|
|
16
|
+
orders: config.EncodingOrders,
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Detects character encoding
|
|
20
|
+
*
|
|
21
|
+
* If encodings is "AUTO", or the encoding-list as an array, or
|
|
22
|
+
* comma separated list string it will be detected automatically
|
|
23
|
+
*
|
|
24
|
+
* @param {Array.<number>|TypedArray|string} data The data being detected
|
|
25
|
+
* @param {(Object|string|Array.<string>)=} [encodings] The encoding-list of
|
|
26
|
+
* character encoding
|
|
27
|
+
* @return {string|boolean} The detected character encoding, or false
|
|
28
|
+
*/
|
|
29
|
+
detect: function(data, encodings) {
|
|
30
|
+
if (data == null || data.length === 0) {
|
|
31
|
+
return false;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
if (util.isObject(encodings) && !util.isArray(encodings)) {
|
|
35
|
+
encodings = encodings.encoding;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
if (util.isString(data)) {
|
|
39
|
+
data = util.stringToBuffer(data);
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
if (encodings == null) {
|
|
43
|
+
encodings = Encoding.orders;
|
|
44
|
+
} else {
|
|
45
|
+
if (util.isString(encodings)) {
|
|
46
|
+
encodings = encodings.toUpperCase();
|
|
47
|
+
if (encodings === 'AUTO') {
|
|
48
|
+
encodings = Encoding.orders;
|
|
49
|
+
} else if (~encodings.indexOf(',')) {
|
|
50
|
+
encodings = encodings.split(/\s*,\s*/);
|
|
51
|
+
} else {
|
|
52
|
+
encodings = [encodings];
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
var len = encodings.length;
|
|
58
|
+
var e, encoding, method;
|
|
59
|
+
for (var i = 0; i < len; i++) {
|
|
60
|
+
e = encodings[i];
|
|
61
|
+
encoding = util.canonicalizeEncodingName(e);
|
|
62
|
+
if (!encoding) {
|
|
63
|
+
continue;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
method = 'is' + encoding;
|
|
67
|
+
if (!hasOwnProperty.call(EncodingDetect, method)) {
|
|
68
|
+
throw new Error('Undefined encoding: ' + e);
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
if (EncodingDetect[method](data)) {
|
|
72
|
+
return encoding;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
return false;
|
|
77
|
+
},
|
|
78
|
+
|
|
79
|
+
/**
|
|
80
|
+
* Convert character encoding
|
|
81
|
+
*
|
|
82
|
+
* If `from` is "AUTO", or the encoding-list as an array, or
|
|
83
|
+
* comma separated list string it will be detected automatically
|
|
84
|
+
*
|
|
85
|
+
* @param {Array.<number>|TypedArray|string} data The data being converted
|
|
86
|
+
* @param {(string|Object)} to The name of encoding to
|
|
87
|
+
* @param {(string|Array.<string>)=} [from] The encoding-list of
|
|
88
|
+
* character encoding
|
|
89
|
+
* @return {Array|TypedArray|string} The converted data
|
|
90
|
+
*/
|
|
91
|
+
convert: function(data, to, from) {
|
|
92
|
+
var result, type, options;
|
|
93
|
+
|
|
94
|
+
if (!util.isObject(to)) {
|
|
95
|
+
options = {};
|
|
96
|
+
} else {
|
|
97
|
+
options = to;
|
|
98
|
+
from = options.from;
|
|
99
|
+
to = options.to;
|
|
100
|
+
|
|
101
|
+
if (options.type) {
|
|
102
|
+
type = options.type;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
if (util.isString(data)) {
|
|
107
|
+
type = type || 'string';
|
|
108
|
+
data = util.stringToBuffer(data);
|
|
109
|
+
} else if (data == null || data.length === 0) {
|
|
110
|
+
data = [];
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
var encodingFrom;
|
|
114
|
+
if (from != null && util.isString(from) &&
|
|
115
|
+
from.toUpperCase() !== 'AUTO' && !~from.indexOf(',')) {
|
|
116
|
+
encodingFrom = util.canonicalizeEncodingName(from);
|
|
117
|
+
} else {
|
|
118
|
+
encodingFrom = Encoding.detect(data);
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
var encodingTo = util.canonicalizeEncodingName(to);
|
|
122
|
+
var method = encodingFrom + 'To' + encodingTo;
|
|
123
|
+
|
|
124
|
+
if (hasOwnProperty.call(EncodingConvert, method)) {
|
|
125
|
+
result = EncodingConvert[method](data, options);
|
|
126
|
+
} else {
|
|
127
|
+
// Returns the raw data if the method is undefined
|
|
128
|
+
result = data;
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
switch (('' + type).toLowerCase()) {
|
|
132
|
+
case 'string':
|
|
133
|
+
return util.codeToString_fast(result);
|
|
134
|
+
case 'arraybuffer':
|
|
135
|
+
return util.codeToBuffer(result);
|
|
136
|
+
default: // array
|
|
137
|
+
return util.bufferToCode(result);
|
|
138
|
+
}
|
|
139
|
+
},
|
|
140
|
+
|
|
141
|
+
/**
|
|
142
|
+
* Encode a character code array to URL string like encodeURIComponent
|
|
143
|
+
*
|
|
144
|
+
* @param {Array.<number>|TypedArray} data The data being encoded
|
|
145
|
+
* @return {string} The percent encoded string
|
|
146
|
+
*/
|
|
147
|
+
urlEncode: function(data) {
|
|
148
|
+
if (util.isString(data)) {
|
|
149
|
+
data = util.stringToBuffer(data);
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
var alpha = util.stringToCode('0123456789ABCDEF');
|
|
153
|
+
var results = [];
|
|
154
|
+
var i = 0;
|
|
155
|
+
var len = data && data.length;
|
|
156
|
+
var b;
|
|
157
|
+
|
|
158
|
+
for (; i < len; i++) {
|
|
159
|
+
b = data[i];
|
|
160
|
+
|
|
161
|
+
// urlEncode is for an array of numbers in the range 0-255 (Uint8Array), but if an array
|
|
162
|
+
// of numbers greater than 255 is passed (Unicode code unit i.e. charCodeAt range),
|
|
163
|
+
// it will be tentatively encoded as UTF-8 using encodeURIComponent.
|
|
164
|
+
if (b > 0xFF) {
|
|
165
|
+
return encodeURIComponent(util.codeToString_fast(data));
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
if ((b >= 0x61 /*a*/ && b <= 0x7A /*z*/) ||
|
|
169
|
+
(b >= 0x41 /*A*/ && b <= 0x5A /*Z*/) ||
|
|
170
|
+
(b >= 0x30 /*0*/ && b <= 0x39 /*9*/) ||
|
|
171
|
+
b === 0x21 /*!*/ ||
|
|
172
|
+
(b >= 0x27 /*'*/ && b <= 0x2A /***/) ||
|
|
173
|
+
b === 0x2D /*-*/ || b === 0x2E /*.*/ ||
|
|
174
|
+
b === 0x5F /*_*/ || b === 0x7E /*~*/
|
|
175
|
+
) {
|
|
176
|
+
results[results.length] = b;
|
|
177
|
+
} else {
|
|
178
|
+
results[results.length] = 0x25; /*%*/
|
|
179
|
+
if (b < 0x10) {
|
|
180
|
+
results[results.length] = 0x30; /*0*/
|
|
181
|
+
results[results.length] = alpha[b];
|
|
182
|
+
} else {
|
|
183
|
+
results[results.length] = alpha[b >> 4 & 0xF];
|
|
184
|
+
results[results.length] = alpha[b & 0xF];
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
return util.codeToString_fast(results);
|
|
190
|
+
},
|
|
191
|
+
|
|
192
|
+
/**
|
|
193
|
+
* Decode a percent encoded string to
|
|
194
|
+
* character code array like decodeURIComponent
|
|
195
|
+
*
|
|
196
|
+
* @param {string} string The data being decoded
|
|
197
|
+
* @return {Array.<number>} The decoded array
|
|
198
|
+
*/
|
|
199
|
+
urlDecode: function(string) {
|
|
200
|
+
var results = [];
|
|
201
|
+
var i = 0;
|
|
202
|
+
var len = string && string.length;
|
|
203
|
+
var c;
|
|
204
|
+
|
|
205
|
+
while (i < len) {
|
|
206
|
+
c = string.charCodeAt(i++);
|
|
207
|
+
if (c === 0x25 /*%*/) {
|
|
208
|
+
results[results.length] = parseInt(
|
|
209
|
+
string.charAt(i++) + string.charAt(i++), 16);
|
|
210
|
+
} else {
|
|
211
|
+
results[results.length] = c;
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
return results;
|
|
216
|
+
},
|
|
217
|
+
|
|
218
|
+
/**
|
|
219
|
+
* Encode a character code array to Base64 encoded string
|
|
220
|
+
*
|
|
221
|
+
* @param {Array.<number>|TypedArray} data The data being encoded
|
|
222
|
+
* @return {string} The Base64 encoded string
|
|
223
|
+
*/
|
|
224
|
+
base64Encode: function(data) {
|
|
225
|
+
if (util.isString(data)) {
|
|
226
|
+
data = util.stringToBuffer(data);
|
|
227
|
+
}
|
|
228
|
+
return util.base64encode(data);
|
|
229
|
+
},
|
|
230
|
+
|
|
231
|
+
/**
|
|
232
|
+
* Decode a Base64 encoded string to character code array
|
|
233
|
+
*
|
|
234
|
+
* @param {string} string The data being decoded
|
|
235
|
+
* @return {Array.<number>} The decoded array
|
|
236
|
+
*/
|
|
237
|
+
base64Decode: function(string) {
|
|
238
|
+
return util.base64decode(string);
|
|
239
|
+
},
|
|
240
|
+
|
|
241
|
+
/**
|
|
242
|
+
* Joins a character code array to string
|
|
243
|
+
*
|
|
244
|
+
* @param {Array.<number>|TypedArray} data The data being joined
|
|
245
|
+
* @return {String} The joined string
|
|
246
|
+
*/
|
|
247
|
+
codeToString: util.codeToString_fast,
|
|
248
|
+
|
|
249
|
+
/**
|
|
250
|
+
* Splits string to an array of character codes
|
|
251
|
+
*
|
|
252
|
+
* @param {string} string The input string
|
|
253
|
+
* @return {Array.<number>} The character code array
|
|
254
|
+
*/
|
|
255
|
+
stringToCode: util.stringToCode,
|
|
256
|
+
|
|
257
|
+
/**
|
|
258
|
+
* 全角英数記号文字を半角英数記号文字に変換
|
|
259
|
+
*
|
|
260
|
+
* Convert the ascii symbols and alphanumeric characters to
|
|
261
|
+
* the zenkaku symbols and alphanumeric characters
|
|
262
|
+
*
|
|
263
|
+
* @example
|
|
264
|
+
* console.log(Encoding.toHankakuCase('Hello World! 12345'));
|
|
265
|
+
* // 'Hello World! 12345'
|
|
266
|
+
*
|
|
267
|
+
* @param {Array.<number>|TypedArray|string} data The input unicode data
|
|
268
|
+
* @return {Array.<number>|string} The conveted data
|
|
269
|
+
*/
|
|
270
|
+
toHankakuCase: function(data) {
|
|
271
|
+
var asString = false;
|
|
272
|
+
if (util.isString(data)) {
|
|
273
|
+
asString = true;
|
|
274
|
+
data = util.stringToBuffer(data);
|
|
275
|
+
}
|
|
276
|
+
|
|
277
|
+
var results = [];
|
|
278
|
+
var len = data && data.length;
|
|
279
|
+
var i = 0;
|
|
280
|
+
var c;
|
|
281
|
+
|
|
282
|
+
while (i < len) {
|
|
283
|
+
c = data[i++];
|
|
284
|
+
if (c >= 0xFF01 && c <= 0xFF5E) {
|
|
285
|
+
c -= 0xFEE0;
|
|
286
|
+
}
|
|
287
|
+
results[results.length] = c;
|
|
288
|
+
}
|
|
289
|
+
|
|
290
|
+
return asString ? util.codeToString_fast(results) : results;
|
|
291
|
+
},
|
|
292
|
+
|
|
293
|
+
/**
|
|
294
|
+
* 半角英数記号文字を全角英数記号文字に変換
|
|
295
|
+
*
|
|
296
|
+
* Convert to the zenkaku symbols and alphanumeric characters
|
|
297
|
+
* from the ascii symbols and alphanumeric characters
|
|
298
|
+
*
|
|
299
|
+
* @example
|
|
300
|
+
* console.log(Encoding.toZenkakuCase('Hello World! 12345'));
|
|
301
|
+
* // 'Hello World! 12345'
|
|
302
|
+
*
|
|
303
|
+
* @param {Array.<number>|TypedArray|string} data The input unicode data
|
|
304
|
+
* @return {Array.<number>|string} The conveted data
|
|
305
|
+
*/
|
|
306
|
+
toZenkakuCase: function(data) {
|
|
307
|
+
var asString = false;
|
|
308
|
+
if (util.isString(data)) {
|
|
309
|
+
asString = true;
|
|
310
|
+
data = util.stringToBuffer(data);
|
|
311
|
+
}
|
|
312
|
+
|
|
313
|
+
var results = [];
|
|
314
|
+
var len = data && data.length;
|
|
315
|
+
var i = 0;
|
|
316
|
+
var c;
|
|
317
|
+
|
|
318
|
+
while (i < len) {
|
|
319
|
+
c = data[i++];
|
|
320
|
+
if (c >= 0x21 && c <= 0x7E) {
|
|
321
|
+
c += 0xFEE0;
|
|
322
|
+
}
|
|
323
|
+
results[results.length] = c;
|
|
324
|
+
}
|
|
325
|
+
|
|
326
|
+
return asString ? util.codeToString_fast(results) : results;
|
|
327
|
+
},
|
|
328
|
+
|
|
329
|
+
/**
|
|
330
|
+
* 全角カタカナを全角ひらがなに変換
|
|
331
|
+
*
|
|
332
|
+
* Convert to the zenkaku hiragana from the zenkaku katakana
|
|
333
|
+
*
|
|
334
|
+
* @example
|
|
335
|
+
* console.log(Encoding.toHiraganaCase('ボポヴァアィイゥウェエォオ'));
|
|
336
|
+
* // 'ぼぽう゛ぁあぃいぅうぇえぉお'
|
|
337
|
+
*
|
|
338
|
+
* @param {Array.<number>|TypedArray|string} data The input unicode data
|
|
339
|
+
* @return {Array.<number>|string} The conveted data
|
|
340
|
+
*/
|
|
341
|
+
toHiraganaCase: function(data) {
|
|
342
|
+
var asString = false;
|
|
343
|
+
if (util.isString(data)) {
|
|
344
|
+
asString = true;
|
|
345
|
+
data = util.stringToBuffer(data);
|
|
346
|
+
}
|
|
347
|
+
|
|
348
|
+
var results = [];
|
|
349
|
+
var len = data && data.length;
|
|
350
|
+
var i = 0;
|
|
351
|
+
var c;
|
|
352
|
+
|
|
353
|
+
while (i < len) {
|
|
354
|
+
c = data[i++];
|
|
355
|
+
if (c >= 0x30A1 && c <= 0x30F6) {
|
|
356
|
+
c -= 0x0060;
|
|
357
|
+
// 「ワ゛」 => 「わ」 + 「゛」
|
|
358
|
+
} else if (c === 0x30F7) {
|
|
359
|
+
results[results.length] = 0x308F;
|
|
360
|
+
c = 0x309B;
|
|
361
|
+
// 「ヲ゛」 => 「を」 + 「゛」
|
|
362
|
+
} else if (c === 0x30FA) {
|
|
363
|
+
results[results.length] = 0x3092;
|
|
364
|
+
c = 0x309B;
|
|
365
|
+
}
|
|
366
|
+
results[results.length] = c;
|
|
367
|
+
}
|
|
368
|
+
|
|
369
|
+
return asString ? util.codeToString_fast(results) : results;
|
|
370
|
+
},
|
|
371
|
+
|
|
372
|
+
/**
|
|
373
|
+
* 全角ひらがなを全角カタカナに変換
|
|
374
|
+
*
|
|
375
|
+
* Convert to the zenkaku katakana from the zenkaku hiragana
|
|
376
|
+
*
|
|
377
|
+
* @example
|
|
378
|
+
* console.log(Encoding.toKatakanaCase('ぼぽう゛ぁあぃいぅうぇえぉお'));
|
|
379
|
+
* // 'ボポヴァアィイゥウェエォオ'
|
|
380
|
+
*
|
|
381
|
+
* @param {Array.<number>|TypedArray|string} data The input unicode data
|
|
382
|
+
* @return {Array.<number>|string} The conveted data
|
|
383
|
+
*/
|
|
384
|
+
toKatakanaCase: function(data) {
|
|
385
|
+
var asString = false;
|
|
386
|
+
if (util.isString(data)) {
|
|
387
|
+
asString = true;
|
|
388
|
+
data = util.stringToBuffer(data);
|
|
389
|
+
}
|
|
390
|
+
|
|
391
|
+
var results = [];
|
|
392
|
+
var len = data && data.length;
|
|
393
|
+
var i = 0;
|
|
394
|
+
var c;
|
|
395
|
+
|
|
396
|
+
while (i < len) {
|
|
397
|
+
c = data[i++];
|
|
398
|
+
if (c >= 0x3041 && c <= 0x3096) {
|
|
399
|
+
if ((c === 0x308F || // 「わ」 + 「゛」 => 「ワ゛」
|
|
400
|
+
c === 0x3092) && // 「を」 + 「゛」 => 「ヲ゛」
|
|
401
|
+
i < len && data[i] === 0x309B) {
|
|
402
|
+
c = c === 0x308F ? 0x30F7 : 0x30FA;
|
|
403
|
+
i++;
|
|
404
|
+
} else {
|
|
405
|
+
c += 0x0060;
|
|
406
|
+
}
|
|
407
|
+
}
|
|
408
|
+
results[results.length] = c;
|
|
409
|
+
}
|
|
410
|
+
|
|
411
|
+
return asString ? util.codeToString_fast(results) : results;
|
|
412
|
+
},
|
|
413
|
+
|
|
414
|
+
/**
|
|
415
|
+
* 全角カタカナを半角カタカナに変換
|
|
416
|
+
*
|
|
417
|
+
* Convert to the hankaku katakana from the zenkaku katakana
|
|
418
|
+
*
|
|
419
|
+
* @example
|
|
420
|
+
* console.log(Encoding.toHankanaCase('ボポヴァアィイゥウェエォオ'));
|
|
421
|
+
* // 'ボポヴァアィイゥウェエォオ'
|
|
422
|
+
*
|
|
423
|
+
* @param {Array.<number>|TypedArray|string} data The input unicode data
|
|
424
|
+
* @return {Array.<number>|string} The conveted data
|
|
425
|
+
*/
|
|
426
|
+
toHankanaCase: function(data) {
|
|
427
|
+
var asString = false;
|
|
428
|
+
if (util.isString(data)) {
|
|
429
|
+
asString = true;
|
|
430
|
+
data = util.stringToBuffer(data);
|
|
431
|
+
}
|
|
432
|
+
|
|
433
|
+
var results = [];
|
|
434
|
+
var len = data && data.length;
|
|
435
|
+
var i = 0;
|
|
436
|
+
var c, d, t;
|
|
437
|
+
|
|
438
|
+
while (i < len) {
|
|
439
|
+
c = data[i++];
|
|
440
|
+
|
|
441
|
+
if (c >= 0x3001 && c <= 0x30FC) {
|
|
442
|
+
t = KanaCaseTable.HANKANA_TABLE[c];
|
|
443
|
+
if (t !== void 0) {
|
|
444
|
+
results[results.length] = t;
|
|
445
|
+
continue;
|
|
446
|
+
}
|
|
447
|
+
}
|
|
448
|
+
|
|
449
|
+
// 「ヴ」, 「ワ」+「゛」, 「ヲ」+「゛」
|
|
450
|
+
if (c === 0x30F4 || c === 0x30F7 || c === 0x30FA) {
|
|
451
|
+
results[results.length] = KanaCaseTable.HANKANA_SONANTS[c];
|
|
452
|
+
results[results.length] = 0xFF9E;
|
|
453
|
+
// 「カ」 - 「ド」
|
|
454
|
+
} else if (c >= 0x30AB && c <= 0x30C9) {
|
|
455
|
+
results[results.length] = KanaCaseTable.HANKANA_TABLE[c - 1];
|
|
456
|
+
results[results.length] = 0xFF9E;
|
|
457
|
+
// 「ハ」 - 「ポ」
|
|
458
|
+
} else if (c >= 0x30CF && c <= 0x30DD) {
|
|
459
|
+
d = c % 3;
|
|
460
|
+
results[results.length] = KanaCaseTable.HANKANA_TABLE[c - d];
|
|
461
|
+
results[results.length] = KanaCaseTable.HANKANA_MARKS[d - 1];
|
|
462
|
+
} else {
|
|
463
|
+
results[results.length] = c;
|
|
464
|
+
}
|
|
465
|
+
}
|
|
466
|
+
|
|
467
|
+
return asString ? util.codeToString_fast(results) : results;
|
|
468
|
+
},
|
|
469
|
+
|
|
470
|
+
/**
|
|
471
|
+
* 半角カタカナを全角カタカナに変換 (濁音含む)
|
|
472
|
+
*
|
|
473
|
+
* Convert to the zenkaku katakana from the hankaku katakana
|
|
474
|
+
*
|
|
475
|
+
* @example
|
|
476
|
+
* console.log(Encoding.toZenkanaCase('ボポヴァアィイゥウェエォオ'));
|
|
477
|
+
* // 'ボポヴァアィイゥウェエォオ'
|
|
478
|
+
*
|
|
479
|
+
* @param {Array.<number>|TypedArray|string} data The input unicode data
|
|
480
|
+
* @return {Array.<number>|string} The conveted data
|
|
481
|
+
*/
|
|
482
|
+
toZenkanaCase: function(data) {
|
|
483
|
+
var asString = false;
|
|
484
|
+
if (util.isString(data)) {
|
|
485
|
+
asString = true;
|
|
486
|
+
data = util.stringToBuffer(data);
|
|
487
|
+
}
|
|
488
|
+
|
|
489
|
+
var results = [];
|
|
490
|
+
var len = data && data.length;
|
|
491
|
+
var i = 0;
|
|
492
|
+
var c, code, next;
|
|
493
|
+
|
|
494
|
+
for (i = 0; i < len; i++) {
|
|
495
|
+
c = data[i];
|
|
496
|
+
// Hankaku katakana
|
|
497
|
+
if (c > 0xFF60 && c < 0xFFA0) {
|
|
498
|
+
code = KanaCaseTable.ZENKANA_TABLE[c - 0xFF61];
|
|
499
|
+
if (i + 1 < len) {
|
|
500
|
+
next = data[i + 1];
|
|
501
|
+
// 「゙」 + 「ヴ」
|
|
502
|
+
if (next === 0xFF9E && c === 0xFF73) {
|
|
503
|
+
code = 0x30F4;
|
|
504
|
+
i++;
|
|
505
|
+
// 「゙」 + 「ワ゛」
|
|
506
|
+
} else if (next === 0xFF9E && c === 0xFF9C) {
|
|
507
|
+
code = 0x30F7;
|
|
508
|
+
i++;
|
|
509
|
+
// 「゙」 + 「ヲ゛」
|
|
510
|
+
} else if (next === 0xFF9E && c === 0xFF66) {
|
|
511
|
+
code = 0x30FA;
|
|
512
|
+
i++;
|
|
513
|
+
// 「゙」 + 「カ」 - 「コ」 or 「ハ」 - 「ホ」
|
|
514
|
+
} else if (next === 0xFF9E &&
|
|
515
|
+
((c > 0xFF75 && c < 0xFF85) ||
|
|
516
|
+
(c > 0xFF89 && c < 0xFF8F))) {
|
|
517
|
+
code++;
|
|
518
|
+
i++;
|
|
519
|
+
// 「゚」 + 「ハ」 - 「ホ」
|
|
520
|
+
} else if (next === 0xFF9F &&
|
|
521
|
+
(c > 0xFF89 && c < 0xFF8F)) {
|
|
522
|
+
code += 2;
|
|
523
|
+
i++;
|
|
524
|
+
}
|
|
525
|
+
}
|
|
526
|
+
c = code;
|
|
527
|
+
}
|
|
528
|
+
results[results.length] = c;
|
|
529
|
+
}
|
|
530
|
+
|
|
531
|
+
return asString ? util.codeToString_fast(results) : results;
|
|
532
|
+
},
|
|
533
|
+
|
|
534
|
+
/**
|
|
535
|
+
* 全角スペースを半角スペースに変換
|
|
536
|
+
*
|
|
537
|
+
* Convert the em space(U+3000) to the single space(U+0020)
|
|
538
|
+
*
|
|
539
|
+
* @param {Array.<number>|TypedArray|string} data The input unicode data
|
|
540
|
+
* @return {Array.<number>|string} The conveted data
|
|
541
|
+
*/
|
|
542
|
+
toHankakuSpace: function(data) {
|
|
543
|
+
if (util.isString(data)) {
|
|
544
|
+
return data.replace(/\u3000/g, ' ');
|
|
545
|
+
}
|
|
546
|
+
|
|
547
|
+
var results = [];
|
|
548
|
+
var len = data && data.length;
|
|
549
|
+
var i = 0;
|
|
550
|
+
var c;
|
|
551
|
+
|
|
552
|
+
while (i < len) {
|
|
553
|
+
c = data[i++];
|
|
554
|
+
if (c === 0x3000) {
|
|
555
|
+
c = 0x20;
|
|
556
|
+
}
|
|
557
|
+
results[results.length] = c;
|
|
558
|
+
}
|
|
559
|
+
|
|
560
|
+
return results;
|
|
561
|
+
},
|
|
562
|
+
|
|
563
|
+
/**
|
|
564
|
+
* 半角スペースを全角スペースに変換
|
|
565
|
+
*
|
|
566
|
+
* Convert the single space(U+0020) to the em space(U+3000)
|
|
567
|
+
*
|
|
568
|
+
* @param {Array.<number>|TypedArray|string} data The input unicode data
|
|
569
|
+
* @return {Array.<number>|string} The conveted data
|
|
570
|
+
*/
|
|
571
|
+
toZenkakuSpace: function(data) {
|
|
572
|
+
if (util.isString(data)) {
|
|
573
|
+
return data.replace(/\u0020/g, '\u3000');
|
|
574
|
+
}
|
|
575
|
+
|
|
576
|
+
var results = [];
|
|
577
|
+
var len = data && data.length;
|
|
578
|
+
var i = 0;
|
|
579
|
+
var c;
|
|
580
|
+
|
|
581
|
+
while (i < len) {
|
|
582
|
+
c = data[i++];
|
|
583
|
+
if (c === 0x20) {
|
|
584
|
+
c = 0x3000;
|
|
585
|
+
}
|
|
586
|
+
results[results.length] = c;
|
|
587
|
+
}
|
|
588
|
+
|
|
589
|
+
return results;
|
|
590
|
+
}
|
|
591
|
+
};
|
|
592
|
+
|
|
593
|
+
module.exports = Encoding;
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/* eslint-disable key-spacing */
|
|
2
|
+
/**
|
|
3
|
+
* Katakana table
|
|
4
|
+
*/
|
|
5
|
+
exports.HANKANA_TABLE = {
|
|
6
|
+
0x3001:0xFF64,0x3002:0xFF61,0x300C:0xFF62,0x300D:0xFF63,0x309B:0xFF9E,
|
|
7
|
+
0x309C:0xFF9F,0x30A1:0xFF67,0x30A2:0xFF71,0x30A3:0xFF68,0x30A4:0xFF72,
|
|
8
|
+
0x30A5:0xFF69,0x30A6:0xFF73,0x30A7:0xFF6A,0x30A8:0xFF74,0x30A9:0xFF6B,
|
|
9
|
+
0x30AA:0xFF75,0x30AB:0xFF76,0x30AD:0xFF77,0x30AF:0xFF78,0x30B1:0xFF79,
|
|
10
|
+
0x30B3:0xFF7A,0x30B5:0xFF7B,0x30B7:0xFF7C,0x30B9:0xFF7D,0x30BB:0xFF7E,
|
|
11
|
+
0x30BD:0xFF7F,0x30BF:0xFF80,0x30C1:0xFF81,0x30C3:0xFF6F,0x30C4:0xFF82,
|
|
12
|
+
0x30C6:0xFF83,0x30C8:0xFF84,0x30CA:0xFF85,0x30CB:0xFF86,0x30CC:0xFF87,
|
|
13
|
+
0x30CD:0xFF88,0x30CE:0xFF89,0x30CF:0xFF8A,0x30D2:0xFF8B,0x30D5:0xFF8C,
|
|
14
|
+
0x30D8:0xFF8D,0x30DB:0xFF8E,0x30DE:0xFF8F,0x30DF:0xFF90,0x30E0:0xFF91,
|
|
15
|
+
0x30E1:0xFF92,0x30E2:0xFF93,0x30E3:0xFF6C,0x30E4:0xFF94,0x30E5:0xFF6D,
|
|
16
|
+
0x30E6:0xFF95,0x30E7:0xFF6E,0x30E8:0xFF96,0x30E9:0xFF97,0x30EA:0xFF98,
|
|
17
|
+
0x30EB:0xFF99,0x30EC:0xFF9A,0x30ED:0xFF9B,0x30EF:0xFF9C,0x30F2:0xFF66,
|
|
18
|
+
0x30F3:0xFF9D,0x30FB:0xFF65,0x30FC:0xFF70
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
exports.HANKANA_SONANTS = {
|
|
22
|
+
0x30F4:0xFF73,
|
|
23
|
+
0x30F7:0xFF9C,
|
|
24
|
+
0x30FA:0xFF66
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
exports.HANKANA_MARKS = [0xFF9E, 0xFF9F];
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* Zenkaku table [U+FF61] - [U+FF9F]
|
|
31
|
+
*/
|
|
32
|
+
exports.ZENKANA_TABLE = [
|
|
33
|
+
0x3002, 0x300C, 0x300D, 0x3001, 0x30FB, 0x30F2, 0x30A1, 0x30A3,
|
|
34
|
+
0x30A5, 0x30A7, 0x30A9, 0x30E3, 0x30E5, 0x30E7, 0x30C3, 0x30FC,
|
|
35
|
+
0x30A2, 0x30A4, 0x30A6, 0x30A8, 0x30AA, 0x30AB, 0x30AD, 0x30AF,
|
|
36
|
+
0x30B1, 0x30B3, 0x30B5, 0x30B7, 0x30B9, 0x30BB, 0x30BD, 0x30BF,
|
|
37
|
+
0x30C1, 0x30C4, 0x30C6, 0x30C8, 0x30CA, 0x30CB, 0x30CC, 0x30CD,
|
|
38
|
+
0x30CE, 0x30CF, 0x30D2, 0x30D5, 0x30D8, 0x30DB, 0x30DE, 0x30DF,
|
|
39
|
+
0x30E0, 0x30E1, 0x30E2, 0x30E4, 0x30E6, 0x30E8, 0x30E9, 0x30EA,
|
|
40
|
+
0x30EB, 0x30EC, 0x30ED, 0x30EF, 0x30F3, 0x309B, 0x309C
|
|
41
|
+
];
|