mol_charset_ucf 0.0.1 → 0.0.3
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 +4 -4
- package/node.deps.json +1 -1
- package/node.js +31 -20
- package/node.js.map +1 -1
- package/node.mjs +31 -20
- package/node.test.js +42 -26
- package/node.test.js.map +1 -1
- package/package.json +1 -1
- package/web.deps.json +1 -1
- package/web.js +31 -20
- package/web.js.map +1 -1
- package/web.mjs +31 -20
- package/web.test.js +11 -6
- package/web.test.js.map +1 -1
package/package.json
CHANGED
package/web.deps.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"files":["mam.ts","LICENSE","README.md","mam.jam.js","tsfmt.json","package.json","tsconfig.json","lang.lang.tree","meta.lang.tree","sandbox.config.json","mol/CNAME","mol/LICENSE","mol/readme.md","mol/mol.meta.tree","mol/CONTRIBUTING.md","mol/CODE_OF_CONDUCT.md","mol/charset/buffer/buffer.ts","mol/charset/ucf/ucf.ts","mol/charset/ucf/readme.md"],"mods":{},"deps_in":{"mol/charset":{"mol/charset/ucf":-999,"mol/charset/buffer":-999},"mol":{"mol/charset":-999},"":{"mol":-999},"mol/charset/buffer":{"mol/charset/ucf":-2}},"deps_out":{"mol/charset/ucf":{"mol/charset":-999,"mol/charset/buffer":-2},"mol/charset":{"mol":-999},"mol":{"":-999},"mol/charset/buffer":{"mol/charset":-999}},"sloc":{"ts":
|
|
1
|
+
{"files":["mam.ts","LICENSE","README.md","mam.jam.js","tsfmt.json","package.json","tsconfig.json","lang.lang.tree","meta.lang.tree","sandbox.config.json","mol/CNAME","mol/LICENSE","mol/readme.md","mol/mol.meta.tree","mol/CONTRIBUTING.md","mol/CODE_OF_CONDUCT.md","mol/charset/buffer/buffer.ts","mol/charset/ucf/ucf.ts","mol/charset/ucf/readme.md"],"mods":{},"deps_in":{"mol/charset":{"mol/charset/ucf":-999,"mol/charset/buffer":-999},"mol":{"mol/charset":-999},"":{"mol":-999},"mol/charset/buffer":{"mol/charset/ucf":-2}},"deps_out":{"mol/charset/ucf":{"mol/charset":-999,"mol/charset/buffer":-2},"mol/charset":{"mol":-999},"mol":{"":-999},"mol/charset/buffer":{"mol/charset":-999}},"sloc":{"ts":139,"LICENSE":113,"md":489,"js":9,"json":82,"tree":41,"CNAME":1},"deps":{"mol/charset/ucf":{"..":-999,"/mol/charset/ucf/encode":-1,"/mol/charset/buffer":-2,"/mol/charset/ucf/encode/to":-1,"/mol/charset/ucf/decode":-1},"mol/charset":{"..":-999},"mol":{"..":-999},"":{},"mol/charset/buffer":{"..":-999,"/mol/charset/buffer":-1}}}
|
package/web.js
CHANGED
|
@@ -59,7 +59,7 @@ var $;
|
|
|
59
59
|
diacr_map[diacr_set[i]] = i | 0x80;
|
|
60
60
|
const wide_offset = 0x0E_00;
|
|
61
61
|
const wide_limit = 128 * 128 * 8 + wide_offset;
|
|
62
|
-
const
|
|
62
|
+
const tiny_limit = 128 * 98;
|
|
63
63
|
const full_mode = 0x95;
|
|
64
64
|
const wide_mode = 0x96;
|
|
65
65
|
const tiny_mode = 0x9E;
|
|
@@ -71,10 +71,8 @@ var $;
|
|
|
71
71
|
function $mol_charset_ucf_encode_to(str, buf, from = 0) {
|
|
72
72
|
let pos = from;
|
|
73
73
|
let mode = tiny_mode;
|
|
74
|
-
let high_last = mode;
|
|
75
74
|
const write_high = (code) => {
|
|
76
|
-
buf[pos++] = ((code + 128 -
|
|
77
|
-
high_last = code;
|
|
75
|
+
buf[pos++] = ((code + 128 - mode) & 0x7F) | 0x80;
|
|
78
76
|
};
|
|
79
77
|
const write_remap = (code) => {
|
|
80
78
|
const fast = ascii_map[code];
|
|
@@ -83,52 +81,56 @@ var $;
|
|
|
83
81
|
else
|
|
84
82
|
buf[pos++] = code;
|
|
85
83
|
};
|
|
84
|
+
const write_mode = (m) => {
|
|
85
|
+
write_high(m);
|
|
86
|
+
mode = m;
|
|
87
|
+
};
|
|
86
88
|
for (let i = 0; i < str.length; i++) {
|
|
87
89
|
let code = str.charCodeAt(i);
|
|
88
|
-
if (code >=
|
|
90
|
+
if (code >= 0xD8_00 && code < 0xDC_00)
|
|
89
91
|
code = ((code - 0xd800) << 10) + str.charCodeAt(++i) + 0x2400;
|
|
90
92
|
if (code < 0x80) {
|
|
91
93
|
if (mode !== tiny_mode) {
|
|
92
94
|
const fast = ascii_map[code];
|
|
93
95
|
if (!fast)
|
|
94
|
-
|
|
96
|
+
write_mode(tiny_mode);
|
|
95
97
|
}
|
|
96
98
|
buf[pos++] = code;
|
|
97
99
|
}
|
|
98
|
-
else if (code <
|
|
100
|
+
else if (code < tiny_limit) {
|
|
99
101
|
const page = (code >> 7) + tiny_mode;
|
|
100
102
|
code &= 0x7F;
|
|
101
103
|
if (page === 164) {
|
|
102
104
|
const fast = diacr_map[code];
|
|
103
105
|
if (fast) {
|
|
104
106
|
if (mode !== tiny_mode)
|
|
105
|
-
|
|
107
|
+
write_mode(tiny_mode);
|
|
106
108
|
write_high(fast);
|
|
107
109
|
continue;
|
|
108
110
|
}
|
|
109
111
|
}
|
|
110
112
|
if (mode !== page)
|
|
111
|
-
|
|
113
|
+
write_mode(page);
|
|
112
114
|
write_remap(code);
|
|
113
115
|
}
|
|
114
116
|
else if (code < wide_limit) {
|
|
115
117
|
code -= wide_offset;
|
|
116
118
|
const page = (code >> 14) + wide_mode;
|
|
117
119
|
if (mode !== page)
|
|
118
|
-
|
|
120
|
+
write_mode(page);
|
|
119
121
|
write_remap(code & 0x7F);
|
|
120
|
-
|
|
122
|
+
write_remap((code >> 7) & 0x7F);
|
|
121
123
|
}
|
|
122
124
|
else {
|
|
123
125
|
if (mode !== full_mode)
|
|
124
|
-
|
|
126
|
+
write_mode(full_mode);
|
|
125
127
|
write_remap(code & 0x7F);
|
|
126
|
-
|
|
127
|
-
|
|
128
|
+
write_remap((code >> 7) & 0x7F);
|
|
129
|
+
write_remap(code >> 14);
|
|
128
130
|
}
|
|
129
131
|
}
|
|
130
132
|
if (mode !== tiny_mode)
|
|
131
|
-
|
|
133
|
+
write_mode(tiny_mode);
|
|
132
134
|
return pos - from;
|
|
133
135
|
}
|
|
134
136
|
$.$mol_charset_ucf_encode_to = $mol_charset_ucf_encode_to;
|
|
@@ -136,11 +138,20 @@ var $;
|
|
|
136
138
|
let text = '';
|
|
137
139
|
let pos = 0;
|
|
138
140
|
let page_offset = 0;
|
|
139
|
-
|
|
140
|
-
while (pos < buffer.length) {
|
|
141
|
+
const read_code = () => {
|
|
141
142
|
let code = buffer[pos++];
|
|
142
143
|
if (code > 0x80)
|
|
143
|
-
code =
|
|
144
|
+
code = ((mode + code) & 0x7F) | 0x80;
|
|
145
|
+
return code;
|
|
146
|
+
};
|
|
147
|
+
const read_remap = () => {
|
|
148
|
+
let code = read_code();
|
|
149
|
+
if (code >= 0x80)
|
|
150
|
+
code = ascii_set[code - 0x80];
|
|
151
|
+
return code;
|
|
152
|
+
};
|
|
153
|
+
while (pos < buffer.length) {
|
|
154
|
+
let code = read_code();
|
|
144
155
|
if (code < full_mode) {
|
|
145
156
|
if (mode === tiny_mode) {
|
|
146
157
|
if (code > 0x80) {
|
|
@@ -151,9 +162,9 @@ var $;
|
|
|
151
162
|
if (code >= 0x80)
|
|
152
163
|
code = ascii_set[code - 0x80];
|
|
153
164
|
if (mode < tiny_mode)
|
|
154
|
-
code |=
|
|
165
|
+
code |= read_remap() << 7;
|
|
155
166
|
if (mode === full_mode)
|
|
156
|
-
code |=
|
|
167
|
+
code |= read_remap() << 14;
|
|
157
168
|
code += page_offset;
|
|
158
169
|
}
|
|
159
170
|
text += String.fromCodePoint(code);
|
package/web.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["-","../../../../mam.ts","../../../../mol/charset/buffer/buffer.ts","../../../../mol/charset/ucf/ucf.ts"],"names":[],"mappings":"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","sourcesContent":[null,"Error.stackTraceLimit = 50;\n\ndeclare let _$_: { new(): {} } & typeof globalThis\ndeclare class $ extends _$_ {}\n\nnamespace $ {\n\texport type $ = typeof $$\n\texport declare class $$ extends $ {\n\t\tstatic $: $\n\t}\n\tnamespace $$ {\n\t\texport type $$ = $\n\t}\n}\n\nmodule.exports = $\n","namespace $ {\n\t\n\tlet buf = new Uint8Array( 2**12 ) // 4KB Mem Page\n\t\n\t/** Temporary buffer. Recursive usage isn't supported. */\n\texport function $mol_charset_buffer( size: number ) {\n\t\tif( buf.byteLength < size ) buf = new Uint8Array( size )\n\t\treturn buf\n\t}\n\t\n}\n","namespace $ {\n\t\n\tconst ascii_set = [ ... `0123456789.,:;()'\"- \\n` ].map( c => c.charCodeAt(0) )\n\tconst ascii_map = new Array< number >( 0x80 ).fill( 0 )\n\tfor( let i = 0; i < ascii_set.length; ++i ) ascii_map[ ascii_set[ i ] ] = i | 0x80\n\t\n\tconst diacr_set = [\n\t\t0x00, 0x01, 0x0F, 0x0B, 0x07, 0x08, 0x12, 0x13, // up\n\t\t0x02, 0x0C, 0x06, 0x11, 0x03, 0x09, 0x0A, 0x04, // up\n\t\t0x28, 0x31, 0x27, 0x26, 0x23, // down\n\t]\n\tconst diacr_map = new Array< number >( 0x80 ).fill( 0 )\n\tfor( let i = 0; i < diacr_set.length; ++i ) diacr_map[ diacr_set[ i ] ] = i | 0x80\n\t\n\tconst wide_offset = 0x0E_00\n\tconst wide_limit = 128 * 128 * 8 + wide_offset\n\tconst tine_limit = 128 * 98\n\t\n\tconst full_mode = 0x95\n\tconst wide_mode = 0x96\n\tconst tiny_mode = 0x9E\n\t\n\t/** Encode text to Unicode Compact Format. */\n\texport function $mol_charset_ucf_encode( str: string ) {\n\t\tconst buf = $mol_charset_buffer( str.length * 3 )\n\t\treturn buf.slice( 0, $mol_charset_ucf_encode_to( str, buf ) )\n\t}\t\n\t\n\texport function $mol_charset_ucf_encode_to( str: string, buf: Uint8Array< ArrayBuffer >, from = 0 ) {\n\n\t\tlet pos = from\n\t\tlet mode = tiny_mode\n\t\tlet high_last = mode\n\t\t\n\t\tconst write_high = ( code: number )=> {\n\t\t\tbuf[ pos ++ ] = ( ( code + 128 - high_last ) & 0x7F ) | 0x80\n\t\t\thigh_last = code\n\t\t}\n\t\t\n\t\tconst write_remap = ( code: number )=> {\n\t\t\tconst fast = ascii_map[ code ]\n\t\t\tif( fast ) write_high( fast )\n\t\t\telse buf[ pos ++ ] = code\n\t\t}\n\t\t\n\t\tfor( let i = 0; i < str.length; i++ ) {\n\t\t\t\n\t\t\tlet code = str.charCodeAt( i )\n\t\t\tif( code >= 0xd800 && code < 0xe000 ) code = ( ( code - 0xd800 ) << 10 ) + str.charCodeAt( ++ i ) + 0x2400\n\t\t\t\n\t\t\tif( code < 0x80 ) { // ASCII\n\t\t\t\t\n\t\t\t\tif( mode !== tiny_mode ) {\n\t\t\t\t\tconst fast = ascii_map[ code ]\n\t\t\t\t\tif( !fast ) write_high( mode = tiny_mode )\n\t\t\t\t}\n\t\t\t\tbuf[ pos ++ ] = code\n\t\t\t\t\n\t\t\t} else if( code < tine_limit ) { // Tiny\n\t\t\t\t\n\t\t\t\tconst page = ( code >> 7 ) + tiny_mode\n\t\t\t\tcode &= 0x7F\n\t\t\t\t\n\t\t\t\tif( page === 164 ) { // diacritics\n\t\t\t\t\tconst fast = diacr_map[ code ]\n\t\t\t\t\tif( fast ) {\n\t\t\t\t\t\tif( mode !== tiny_mode ) write_high( mode = tiny_mode )\n\t\t\t\t\t\twrite_high( fast )\n\t\t\t\t\t\tcontinue\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif( mode !== page ) write_high( mode = page )\n\t\t\t\twrite_remap( code )\n\t\t\t\t\n\t\t\t} else if( code < wide_limit ) { // Wide\n\t\t\t\t\n\t\t\t\tcode -= wide_offset\n\t\t\t\tconst page = ( code >> 14 ) + wide_mode\n\t\t\t\tif( mode !== page ) write_high( mode = page )\n\t\t\t\twrite_remap( code & 0x7F )\n\t\t\t\tbuf[ pos ++ ] = ( code >> 7 ) & 0x7F\n\t\t\t\t\n\t\t\t} else { // Full\n\t\t\t\t\n\t\t\t\tif( mode !== full_mode ) write_high( mode = full_mode )\n\t\t\t\t write_remap( code & 0x7F )\n\t\t\t\tbuf[ pos ++ ] = ( code >> 7 ) & 0x7F\n\t\t\t\tbuf[ pos ++ ] = code >> 14\n\t\t\t\t\n\t\t\t}\n\n\t\t}\n\t\t\n\t\tif( mode !== tiny_mode ) write_high( tiny_mode )\n\n\t\treturn pos - from\n\t}\n\t\n\t/** Decode text from Unicode Compact Format. */\n\texport function $mol_charset_ucf_decode( buffer: Uint8Array< ArrayBuffer >, mode = tiny_mode ) {\n\t\t\n\t\tlet text = ''\n\t\tlet pos = 0\n\t\tlet page_offset = 0\n\t\tlet ext_last = mode\n\t\t\n\t\twhile( pos < buffer.length ) {\n\t\t\t\n\t\t\tlet code = buffer[ pos ++ ]\n\t\t\t\n\t\t\tif( code > 0x80 ) code = ext_last = ( ( ext_last + code ) & 0x7F ) | 0x80\n\t\t\t\n\t\t\tif( code < full_mode ) { // Char Code\n\t\t\t\t\n\t\t\t\tif( mode === tiny_mode ) {\n\t\t\t\t\tif( code > 0x80 ) {\n\t\t\t\t\t\tcode = diacr_set[ code - 0x080 ] | ( 6 << 7 )\n\t\t\t\t\t}\n\t\t\t\t} else if( !ascii_map[ code ] ) {\n\t\t\t\t\tif( code >= 0x80 ) code = ascii_set[ code - 0x80 ]\n\t\t\t\t\tif( mode < tiny_mode ) code |= buffer[ pos ++ ] << 7\n\t\t\t\t\tif( mode === full_mode ) code |= buffer[ pos ++ ] << 14\n\t\t\t\t\tcode += page_offset\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\ttext += String.fromCodePoint( code )\n\t\t\t\t\n\t\t\t} else if( code >= tiny_mode ) { // Tiny Set\n\t\t\t\t\n\t\t\t\tmode = code\n\t\t\t\tpage_offset = ( mode - tiny_mode ) << 7\n\t\t\t\t\n\t\t\t} else if( code === full_mode ) { // Full Set\n\t\t\t\t\n\t\t\t\tmode = code\n\t\t\t\tpage_offset = 0\n\t\t\t\t\n\t\t\t} else { // Wide Set\n\t\t\t\t\n\t\t\t\tmode = code\n\t\t\t\tpage_offset = ( ( mode - wide_mode ) << 14 ) + wide_offset\n\t\t\t\t\n\t\t\t}\n\t\t\t\n\t\t}\n\t\t\n\t\treturn text\n\t}\n\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["-","../../../../mam.ts","../../../../mol/charset/buffer/buffer.ts","../../../../mol/charset/ucf/ucf.ts"],"names":[],"mappings":"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","sourcesContent":[null,"Error.stackTraceLimit = 50;\n\ndeclare let _$_: { new(): {} } & typeof globalThis\ndeclare class $ extends _$_ {}\n\nnamespace $ {\n\texport type $ = typeof $$\n\texport declare class $$ extends $ {\n\t\tstatic $: $\n\t}\n\tnamespace $$ {\n\t\texport type $$ = $\n\t}\n}\n\nmodule.exports = $\n","namespace $ {\n\t\n\tlet buf = new Uint8Array( 2**12 ) // 4KB Mem Page\n\t\n\t/** Temporary buffer. Recursive usage isn't supported. */\n\texport function $mol_charset_buffer( size: number ) {\n\t\tif( buf.byteLength < size ) buf = new Uint8Array( size )\n\t\treturn buf\n\t}\n\t\n}\n","namespace $ {\n\t\n\tconst ascii_set = [ ... `0123456789.,:;()'\"- \\n` ].map( c => c.charCodeAt(0) )\n\tconst ascii_map = new Array< number >( 0x80 ).fill( 0 )\n\tfor( let i = 0; i < ascii_set.length; ++i ) ascii_map[ ascii_set[ i ] ] = i | 0x80\n\t\n\tconst diacr_set = [\n\t\t0x00, 0x01, 0x0F, 0x0B, 0x07, 0x08, 0x12, 0x13, // up\n\t\t0x02, 0x0C, 0x06, 0x11, 0x03, 0x09, 0x0A, 0x04, // up\n\t\t0x28, 0x31, 0x27, 0x26, 0x23, // down\n\t]\n\tconst diacr_map = new Array< number >( 0x80 ).fill( 0 )\n\tfor( let i = 0; i < diacr_set.length; ++i ) diacr_map[ diacr_set[ i ] ] = i | 0x80\n\t\n\tconst wide_offset = 0x0E_00\n\tconst wide_limit = 128 * 128 * 8 + wide_offset\n\tconst tiny_limit = 128 * 98\n\t\n\tconst full_mode = 0x95\n\tconst wide_mode = 0x96\n\tconst tiny_mode = 0x9E\n\t\n\t/** Encode text to Unicode Compact Format. */\n\texport function $mol_charset_ucf_encode( str: string ) {\n\t\tconst buf = $mol_charset_buffer( str.length * 3 )\n\t\treturn buf.slice( 0, $mol_charset_ucf_encode_to( str, buf ) )\n\t}\t\n\t\n\texport function $mol_charset_ucf_encode_to( str: string, buf: Uint8Array< ArrayBuffer >, from = 0 ) {\n\n\t\tlet pos = from\n\t\tlet mode = tiny_mode\n\t\t\n\t\tconst write_high = ( code: number )=> {\n\t\t\tbuf[ pos ++ ] = ( ( code + 128 - mode ) & 0x7F ) | 0x80\n\t\t}\n\t\t\n\t\tconst write_remap = ( code: number )=> {\n\t\t\tconst fast = ascii_map[ code ]\n\t\t\tif( fast ) write_high( fast )\n\t\t\telse buf[ pos ++ ] = code\n\t\t}\n\t\t\n\t\tconst write_mode = ( m: number )=> {\n\t\t\twrite_high( m )\n\t\t\tmode = m\n\t\t}\n\t\t\n\t\tfor( let i = 0; i < str.length; i++ ) {\n\t\t\t\n\t\t\tlet code = str.charCodeAt( i )\n\t\t\tif( code >= 0xD8_00 && code < 0xDC_00 ) code = ( ( code - 0xd800 ) << 10 ) + str.charCodeAt( ++ i ) + 0x2400\n\t\t\t\n\t\t\tif( code < 0x80 ) { // ASCII\n\t\t\t\t\n\t\t\t\tif( mode !== tiny_mode ) {\n\t\t\t\t\tconst fast = ascii_map[ code ]\n\t\t\t\t\tif( !fast ) write_mode( tiny_mode )\n\t\t\t\t}\n\t\t\t\tbuf[ pos ++ ] = code\n\t\t\t\t\n\t\t\t} else if( code < tiny_limit ) { // Tiny\n\t\t\t\t\n\t\t\t\tconst page = ( code >> 7 ) + tiny_mode\n\t\t\t\tcode &= 0x7F\n\t\t\t\t\n\t\t\t\tif( page === 164 ) { // diacritics\n\t\t\t\t\tconst fast = diacr_map[ code ]\n\t\t\t\t\tif( fast ) {\n\t\t\t\t\t\tif( mode !== tiny_mode ) write_mode( tiny_mode )\n\t\t\t\t\t\twrite_high( fast )\n\t\t\t\t\t\tcontinue\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif( mode !== page ) write_mode( page )\n\t\t\t\twrite_remap( code )\n\t\t\t\t\n\t\t\t} else if( code < wide_limit ) { // Wide\n\t\t\t\t\n\t\t\t\tcode -= wide_offset\n\t\t\t\tconst page = ( code >> 14 ) + wide_mode\n\t\t\t\tif( mode !== page ) write_mode( page )\n\t\t\t\twrite_remap( code & 0x7F )\n\t\t\t\twrite_remap( ( code >> 7 ) & 0x7F )\n\t\t\t\t\n\t\t\t} else { // Full\n\t\t\t\t\n\t\t\t\tif( mode !== full_mode ) write_mode( full_mode )\n\t\t\t\twrite_remap( code & 0x7F )\n\t\t\t\twrite_remap( ( code >> 7 ) & 0x7F )\n\t\t\t\twrite_remap( code >> 14 )\n\t\t\t\t\n\t\t\t}\n\n\t\t}\n\t\t\n\t\tif( mode !== tiny_mode ) write_mode( tiny_mode )\n\n\t\treturn pos - from\n\t}\n\t\n\t/** Decode text from Unicode Compact Format. */\n\texport function $mol_charset_ucf_decode( buffer: Uint8Array< ArrayBuffer >, mode = tiny_mode ) {\n\t\t\n\t\tlet text = ''\n\t\tlet pos = 0\n\t\tlet page_offset = 0\n\t\t\n\t\tconst read_code = ()=> {\n\t\t\tlet code = buffer[ pos ++ ]\n\t\t\tif( code > 0x80 ) code = ( ( mode + code ) & 0x7F ) | 0x80\n\t\t\treturn code\n\t\t}\n\t\t\n\t\tconst read_remap = ()=> {\n\t\t\tlet code = read_code()\n\t\t\tif( code >= 0x80 ) code = ascii_set[ code - 0x80 ]\n\t\t\treturn code\n\t\t}\n\t\t\n\t\twhile( pos < buffer.length ) {\n\t\t\t\n\t\t\tlet code = read_code()\n\t\t\t\n\t\t\tif( code < full_mode ) { // Char Code\n\t\t\t\t\n\t\t\t\tif( mode === tiny_mode ) {\n\t\t\t\t\tif( code > 0x80 ) {\n\t\t\t\t\t\tcode = diacr_set[ code - 0x080 ] | ( 6 << 7 )\n\t\t\t\t\t}\n\t\t\t\t} else if( !ascii_map[ code ] ) {\n\t\t\t\t\tif( code >= 0x80 ) code = ascii_set[ code - 0x80 ]\n\t\t\t\t\tif( mode < tiny_mode ) code |= read_remap() << 7\n\t\t\t\t\tif( mode === full_mode ) code |= read_remap() << 14\n\t\t\t\t\tcode += page_offset\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\ttext += String.fromCodePoint( code )\n\t\t\t\t\n\t\t\t} else if( code >= tiny_mode ) { // Tiny Set\n\t\t\t\t\n\t\t\t\tmode = code\n\t\t\t\tpage_offset = ( mode - tiny_mode ) << 7\n\t\t\t\t\n\t\t\t} else if( code === full_mode ) { // Full Set\n\t\t\t\t\n\t\t\t\tmode = code\n\t\t\t\tpage_offset = 0\n\t\t\t\t\n\t\t\t} else { // Wide Set\n\t\t\t\t\n\t\t\t\tmode = code\n\t\t\t\tpage_offset = ( ( mode - wide_mode ) << 14 ) + wide_offset\n\t\t\t\t\n\t\t\t}\n\t\t\t\n\t\t}\n\t\t\n\t\treturn text\n\t}\n\n}\n"]}
|
package/web.mjs
CHANGED
|
@@ -59,7 +59,7 @@ var $;
|
|
|
59
59
|
diacr_map[diacr_set[i]] = i | 0x80;
|
|
60
60
|
const wide_offset = 0x0E_00;
|
|
61
61
|
const wide_limit = 128 * 128 * 8 + wide_offset;
|
|
62
|
-
const
|
|
62
|
+
const tiny_limit = 128 * 98;
|
|
63
63
|
const full_mode = 0x95;
|
|
64
64
|
const wide_mode = 0x96;
|
|
65
65
|
const tiny_mode = 0x9E;
|
|
@@ -71,10 +71,8 @@ var $;
|
|
|
71
71
|
function $mol_charset_ucf_encode_to(str, buf, from = 0) {
|
|
72
72
|
let pos = from;
|
|
73
73
|
let mode = tiny_mode;
|
|
74
|
-
let high_last = mode;
|
|
75
74
|
const write_high = (code) => {
|
|
76
|
-
buf[pos++] = ((code + 128 -
|
|
77
|
-
high_last = code;
|
|
75
|
+
buf[pos++] = ((code + 128 - mode) & 0x7F) | 0x80;
|
|
78
76
|
};
|
|
79
77
|
const write_remap = (code) => {
|
|
80
78
|
const fast = ascii_map[code];
|
|
@@ -83,52 +81,56 @@ var $;
|
|
|
83
81
|
else
|
|
84
82
|
buf[pos++] = code;
|
|
85
83
|
};
|
|
84
|
+
const write_mode = (m) => {
|
|
85
|
+
write_high(m);
|
|
86
|
+
mode = m;
|
|
87
|
+
};
|
|
86
88
|
for (let i = 0; i < str.length; i++) {
|
|
87
89
|
let code = str.charCodeAt(i);
|
|
88
|
-
if (code >=
|
|
90
|
+
if (code >= 0xD8_00 && code < 0xDC_00)
|
|
89
91
|
code = ((code - 0xd800) << 10) + str.charCodeAt(++i) + 0x2400;
|
|
90
92
|
if (code < 0x80) {
|
|
91
93
|
if (mode !== tiny_mode) {
|
|
92
94
|
const fast = ascii_map[code];
|
|
93
95
|
if (!fast)
|
|
94
|
-
|
|
96
|
+
write_mode(tiny_mode);
|
|
95
97
|
}
|
|
96
98
|
buf[pos++] = code;
|
|
97
99
|
}
|
|
98
|
-
else if (code <
|
|
100
|
+
else if (code < tiny_limit) {
|
|
99
101
|
const page = (code >> 7) + tiny_mode;
|
|
100
102
|
code &= 0x7F;
|
|
101
103
|
if (page === 164) {
|
|
102
104
|
const fast = diacr_map[code];
|
|
103
105
|
if (fast) {
|
|
104
106
|
if (mode !== tiny_mode)
|
|
105
|
-
|
|
107
|
+
write_mode(tiny_mode);
|
|
106
108
|
write_high(fast);
|
|
107
109
|
continue;
|
|
108
110
|
}
|
|
109
111
|
}
|
|
110
112
|
if (mode !== page)
|
|
111
|
-
|
|
113
|
+
write_mode(page);
|
|
112
114
|
write_remap(code);
|
|
113
115
|
}
|
|
114
116
|
else if (code < wide_limit) {
|
|
115
117
|
code -= wide_offset;
|
|
116
118
|
const page = (code >> 14) + wide_mode;
|
|
117
119
|
if (mode !== page)
|
|
118
|
-
|
|
120
|
+
write_mode(page);
|
|
119
121
|
write_remap(code & 0x7F);
|
|
120
|
-
|
|
122
|
+
write_remap((code >> 7) & 0x7F);
|
|
121
123
|
}
|
|
122
124
|
else {
|
|
123
125
|
if (mode !== full_mode)
|
|
124
|
-
|
|
126
|
+
write_mode(full_mode);
|
|
125
127
|
write_remap(code & 0x7F);
|
|
126
|
-
|
|
127
|
-
|
|
128
|
+
write_remap((code >> 7) & 0x7F);
|
|
129
|
+
write_remap(code >> 14);
|
|
128
130
|
}
|
|
129
131
|
}
|
|
130
132
|
if (mode !== tiny_mode)
|
|
131
|
-
|
|
133
|
+
write_mode(tiny_mode);
|
|
132
134
|
return pos - from;
|
|
133
135
|
}
|
|
134
136
|
$.$mol_charset_ucf_encode_to = $mol_charset_ucf_encode_to;
|
|
@@ -136,11 +138,20 @@ var $;
|
|
|
136
138
|
let text = '';
|
|
137
139
|
let pos = 0;
|
|
138
140
|
let page_offset = 0;
|
|
139
|
-
|
|
140
|
-
while (pos < buffer.length) {
|
|
141
|
+
const read_code = () => {
|
|
141
142
|
let code = buffer[pos++];
|
|
142
143
|
if (code > 0x80)
|
|
143
|
-
code =
|
|
144
|
+
code = ((mode + code) & 0x7F) | 0x80;
|
|
145
|
+
return code;
|
|
146
|
+
};
|
|
147
|
+
const read_remap = () => {
|
|
148
|
+
let code = read_code();
|
|
149
|
+
if (code >= 0x80)
|
|
150
|
+
code = ascii_set[code - 0x80];
|
|
151
|
+
return code;
|
|
152
|
+
};
|
|
153
|
+
while (pos < buffer.length) {
|
|
154
|
+
let code = read_code();
|
|
144
155
|
if (code < full_mode) {
|
|
145
156
|
if (mode === tiny_mode) {
|
|
146
157
|
if (code > 0x80) {
|
|
@@ -151,9 +162,9 @@ var $;
|
|
|
151
162
|
if (code >= 0x80)
|
|
152
163
|
code = ascii_set[code - 0x80];
|
|
153
164
|
if (mode < tiny_mode)
|
|
154
|
-
code |=
|
|
165
|
+
code |= read_remap() << 7;
|
|
155
166
|
if (mode === full_mode)
|
|
156
|
-
code |=
|
|
167
|
+
code |= read_remap() << 14;
|
|
157
168
|
code += page_offset;
|
|
158
169
|
}
|
|
159
170
|
text += String.fromCodePoint(code);
|
package/web.test.js
CHANGED
|
@@ -1472,7 +1472,7 @@ var $;
|
|
|
1472
1472
|
check('allo\u0302', [0x61, 0x6C, 0x6C, 0x6F, 0xEA]);
|
|
1473
1473
|
},
|
|
1474
1474
|
"1B Cyrillic"($) {
|
|
1475
|
-
check('мир', [0x88, 0x3C, 0xE2, 0x40,
|
|
1475
|
+
check('мир', [0x88, 0x3C, 0xE2, 0x40, 0xF8]);
|
|
1476
1476
|
},
|
|
1477
1477
|
"1B Cyrillic with nummbers and punctuation"($) {
|
|
1478
1478
|
check('м.1', [0x88, 0x3C, 0x2E, 0x31, 0xF8]);
|
|
@@ -1486,17 +1486,22 @@ var $;
|
|
|
1486
1486
|
"1B Kana"($) {
|
|
1487
1487
|
check('しい', [0xE0, 0x57, 0x44, 0xA0]);
|
|
1488
1488
|
},
|
|
1489
|
-
"2B Emoji
|
|
1489
|
+
"2B Emoji"($) {
|
|
1490
1490
|
check('🏴', [0xFF, 0x74, 0x4B, 0x81]);
|
|
1491
|
-
|
|
1491
|
+
},
|
|
1492
|
+
"2B Emoji with 1B modifiers"($) {
|
|
1493
|
+
check('🏴☠', [0xFF, 0x74, 0x4B, 0xC1, 0x0D, 0x8C, 0xA9, 0xB4]);
|
|
1494
|
+
},
|
|
1495
|
+
"2B Emoji with 3B Tag"($) {
|
|
1496
|
+
check('🏴\u{E007F}', [0xFF, 0x74, 0x4B, 0xF8, 0x7F, 0x00, 0xF3, 0x89]);
|
|
1492
1497
|
},
|
|
1493
1498
|
"Mixed scripts"($) {
|
|
1494
1499
|
check('allô 美しい мир, 🏴☠\n', [
|
|
1495
1500
|
0x61, 0x6C, 0x6C, 0x6F, 0xEA, 0x20,
|
|
1496
|
-
|
|
1501
|
+
0xF9, 0x0E, 0x63, 0xE7, 0x57, 0x44, 0x20,
|
|
1497
1502
|
0xA8, 0x3C, 0xE2, 0x40, 0x2C, 0x20,
|
|
1498
|
-
|
|
1499
|
-
|
|
1503
|
+
0xF7, 0x74, 0x4B, 0xC1, 0x0D, 0x8C, 0xA9, 0x0A,
|
|
1504
|
+
0xB4,
|
|
1500
1505
|
]);
|
|
1501
1506
|
},
|
|
1502
1507
|
});
|