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/README.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
> [UCF](https://page.hyoo.ru/#!=1woher_nlk5d3) - Simple compact unicode text binarization format.
|
|
4
4
|
|
|
5
|
-

|
|
6
6
|
|
|
7
7
|
# Usage
|
|
8
8
|
|
|
@@ -13,7 +13,7 @@ text = $mol_charset_ucf_decode( bin )
|
|
|
13
13
|
|
|
14
14
|
## From NPM
|
|
15
15
|
|
|
16
|
-
`npm install` [
|
|
16
|
+
`npm install` [mol_charset_ucf](https://www.npmjs.com/package/mol_charset_ucf)
|
|
17
17
|
|
|
18
18
|
```ts
|
|
19
19
|
import {
|
|
@@ -29,9 +29,9 @@ System: Chrome 143, Win 10, i7-6600U 2.60GHz
|
|
|
29
29
|
## Encoding perf
|
|
30
30
|
[Online](https://perf.js.hyoo.ru/#!bench=yl2hcs_rfamzi)
|
|
31
31
|
|
|
32
|
-

|
|
33
33
|
|
|
34
34
|
## Decoding perf
|
|
35
35
|
[Online](https://perf.js.hyoo.ru/#!bench=hlj49x_hdq7va)
|
|
36
36
|
|
|
37
|
-

|
package/node.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/node.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/node.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/node.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/node.test.js
CHANGED
|
@@ -50,7 +50,7 @@ var $;
|
|
|
50
50
|
diacr_map[diacr_set[i]] = i | 0x80;
|
|
51
51
|
const wide_offset = 0x0E_00;
|
|
52
52
|
const wide_limit = 128 * 128 * 8 + wide_offset;
|
|
53
|
-
const
|
|
53
|
+
const tiny_limit = 128 * 98;
|
|
54
54
|
const full_mode = 0x95;
|
|
55
55
|
const wide_mode = 0x96;
|
|
56
56
|
const tiny_mode = 0x9E;
|
|
@@ -62,10 +62,8 @@ var $;
|
|
|
62
62
|
function $mol_charset_ucf_encode_to(str, buf, from = 0) {
|
|
63
63
|
let pos = from;
|
|
64
64
|
let mode = tiny_mode;
|
|
65
|
-
let high_last = mode;
|
|
66
65
|
const write_high = (code) => {
|
|
67
|
-
buf[pos++] = ((code + 128 -
|
|
68
|
-
high_last = code;
|
|
66
|
+
buf[pos++] = ((code + 128 - mode) & 0x7F) | 0x80;
|
|
69
67
|
};
|
|
70
68
|
const write_remap = (code) => {
|
|
71
69
|
const fast = ascii_map[code];
|
|
@@ -74,52 +72,56 @@ var $;
|
|
|
74
72
|
else
|
|
75
73
|
buf[pos++] = code;
|
|
76
74
|
};
|
|
75
|
+
const write_mode = (m) => {
|
|
76
|
+
write_high(m);
|
|
77
|
+
mode = m;
|
|
78
|
+
};
|
|
77
79
|
for (let i = 0; i < str.length; i++) {
|
|
78
80
|
let code = str.charCodeAt(i);
|
|
79
|
-
if (code >=
|
|
81
|
+
if (code >= 0xD8_00 && code < 0xDC_00)
|
|
80
82
|
code = ((code - 0xd800) << 10) + str.charCodeAt(++i) + 0x2400;
|
|
81
83
|
if (code < 0x80) {
|
|
82
84
|
if (mode !== tiny_mode) {
|
|
83
85
|
const fast = ascii_map[code];
|
|
84
86
|
if (!fast)
|
|
85
|
-
|
|
87
|
+
write_mode(tiny_mode);
|
|
86
88
|
}
|
|
87
89
|
buf[pos++] = code;
|
|
88
90
|
}
|
|
89
|
-
else if (code <
|
|
91
|
+
else if (code < tiny_limit) {
|
|
90
92
|
const page = (code >> 7) + tiny_mode;
|
|
91
93
|
code &= 0x7F;
|
|
92
94
|
if (page === 164) {
|
|
93
95
|
const fast = diacr_map[code];
|
|
94
96
|
if (fast) {
|
|
95
97
|
if (mode !== tiny_mode)
|
|
96
|
-
|
|
98
|
+
write_mode(tiny_mode);
|
|
97
99
|
write_high(fast);
|
|
98
100
|
continue;
|
|
99
101
|
}
|
|
100
102
|
}
|
|
101
103
|
if (mode !== page)
|
|
102
|
-
|
|
104
|
+
write_mode(page);
|
|
103
105
|
write_remap(code);
|
|
104
106
|
}
|
|
105
107
|
else if (code < wide_limit) {
|
|
106
108
|
code -= wide_offset;
|
|
107
109
|
const page = (code >> 14) + wide_mode;
|
|
108
110
|
if (mode !== page)
|
|
109
|
-
|
|
111
|
+
write_mode(page);
|
|
110
112
|
write_remap(code & 0x7F);
|
|
111
|
-
|
|
113
|
+
write_remap((code >> 7) & 0x7F);
|
|
112
114
|
}
|
|
113
115
|
else {
|
|
114
116
|
if (mode !== full_mode)
|
|
115
|
-
|
|
117
|
+
write_mode(full_mode);
|
|
116
118
|
write_remap(code & 0x7F);
|
|
117
|
-
|
|
118
|
-
|
|
119
|
+
write_remap((code >> 7) & 0x7F);
|
|
120
|
+
write_remap(code >> 14);
|
|
119
121
|
}
|
|
120
122
|
}
|
|
121
123
|
if (mode !== tiny_mode)
|
|
122
|
-
|
|
124
|
+
write_mode(tiny_mode);
|
|
123
125
|
return pos - from;
|
|
124
126
|
}
|
|
125
127
|
$.$mol_charset_ucf_encode_to = $mol_charset_ucf_encode_to;
|
|
@@ -127,11 +129,20 @@ var $;
|
|
|
127
129
|
let text = '';
|
|
128
130
|
let pos = 0;
|
|
129
131
|
let page_offset = 0;
|
|
130
|
-
|
|
131
|
-
while (pos < buffer.length) {
|
|
132
|
+
const read_code = () => {
|
|
132
133
|
let code = buffer[pos++];
|
|
133
134
|
if (code > 0x80)
|
|
134
|
-
code =
|
|
135
|
+
code = ((mode + code) & 0x7F) | 0x80;
|
|
136
|
+
return code;
|
|
137
|
+
};
|
|
138
|
+
const read_remap = () => {
|
|
139
|
+
let code = read_code();
|
|
140
|
+
if (code >= 0x80)
|
|
141
|
+
code = ascii_set[code - 0x80];
|
|
142
|
+
return code;
|
|
143
|
+
};
|
|
144
|
+
while (pos < buffer.length) {
|
|
145
|
+
let code = read_code();
|
|
135
146
|
if (code < full_mode) {
|
|
136
147
|
if (mode === tiny_mode) {
|
|
137
148
|
if (code > 0x80) {
|
|
@@ -142,9 +153,9 @@ var $;
|
|
|
142
153
|
if (code >= 0x80)
|
|
143
154
|
code = ascii_set[code - 0x80];
|
|
144
155
|
if (mode < tiny_mode)
|
|
145
|
-
code |=
|
|
156
|
+
code |= read_remap() << 7;
|
|
146
157
|
if (mode === full_mode)
|
|
147
|
-
code |=
|
|
158
|
+
code |= read_remap() << 14;
|
|
148
159
|
code += page_offset;
|
|
149
160
|
}
|
|
150
161
|
text += String.fromCodePoint(code);
|
|
@@ -4186,7 +4197,7 @@ var $;
|
|
|
4186
4197
|
check('allo\u0302', [0x61, 0x6C, 0x6C, 0x6F, 0xEA]);
|
|
4187
4198
|
},
|
|
4188
4199
|
"1B Cyrillic"($) {
|
|
4189
|
-
check('мир', [0x88, 0x3C, 0xE2, 0x40,
|
|
4200
|
+
check('мир', [0x88, 0x3C, 0xE2, 0x40, 0xF8]);
|
|
4190
4201
|
},
|
|
4191
4202
|
"1B Cyrillic with nummbers and punctuation"($) {
|
|
4192
4203
|
check('м.1', [0x88, 0x3C, 0x2E, 0x31, 0xF8]);
|
|
@@ -4200,17 +4211,22 @@ var $;
|
|
|
4200
4211
|
"1B Kana"($) {
|
|
4201
4212
|
check('しい', [0xE0, 0x57, 0x44, 0xA0]);
|
|
4202
4213
|
},
|
|
4203
|
-
"2B Emoji
|
|
4214
|
+
"2B Emoji"($) {
|
|
4204
4215
|
check('🏴', [0xFF, 0x74, 0x4B, 0x81]);
|
|
4205
|
-
|
|
4216
|
+
},
|
|
4217
|
+
"2B Emoji with 1B modifiers"($) {
|
|
4218
|
+
check('🏴☠', [0xFF, 0x74, 0x4B, 0xC1, 0x0D, 0x8C, 0xA9, 0xB4]);
|
|
4219
|
+
},
|
|
4220
|
+
"2B Emoji with 3B Tag"($) {
|
|
4221
|
+
check('🏴\u{E007F}', [0xFF, 0x74, 0x4B, 0xF8, 0x7F, 0x00, 0xF3, 0x89]);
|
|
4206
4222
|
},
|
|
4207
4223
|
"Mixed scripts"($) {
|
|
4208
4224
|
check('allô 美しい мир, 🏴☠\n', [
|
|
4209
4225
|
0x61, 0x6C, 0x6C, 0x6F, 0xEA, 0x20,
|
|
4210
|
-
|
|
4226
|
+
0xF9, 0x0E, 0x63, 0xE7, 0x57, 0x44, 0x20,
|
|
4211
4227
|
0xA8, 0x3C, 0xE2, 0x40, 0x2C, 0x20,
|
|
4212
|
-
|
|
4213
|
-
|
|
4228
|
+
0xF7, 0x74, 0x4B, 0xC1, 0x0D, 0x8C, 0xA9, 0x0A,
|
|
4229
|
+
0xB4,
|
|
4214
4230
|
]);
|
|
4215
4231
|
},
|
|
4216
4232
|
});
|