mol_charset_ucf 0.0.1 → 0.0.2
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 +22 -17
- package/node.js.map +1 -1
- package/node.mjs +22 -17
- package/node.test.js +28 -23
- package/node.test.js.map +1 -1
- package/package.json +1 -1
- package/web.deps.json +1 -1
- package/web.js +22 -17
- package/web.js.map +1 -1
- package/web.mjs +22 -17
- package/web.test.js +6 -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":134,"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
|
@@ -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,6 +81,10 @@ 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
90
|
if (code >= 0xd800 && code < 0xe000)
|
|
@@ -91,7 +93,7 @@ var $;
|
|
|
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
|
}
|
|
@@ -102,33 +104,33 @@ var $;
|
|
|
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,14 @@ 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_remap = () => {
|
|
141
142
|
let code = buffer[pos++];
|
|
142
143
|
if (code > 0x80)
|
|
143
|
-
code =
|
|
144
|
+
code = ((mode + code) & 0x7F) | 0x80;
|
|
145
|
+
return code;
|
|
146
|
+
};
|
|
147
|
+
while (pos < buffer.length) {
|
|
148
|
+
let code = read_remap();
|
|
144
149
|
if (code < full_mode) {
|
|
145
150
|
if (mode === tiny_mode) {
|
|
146
151
|
if (code > 0x80) {
|
|
@@ -151,9 +156,9 @@ var $;
|
|
|
151
156
|
if (code >= 0x80)
|
|
152
157
|
code = ascii_set[code - 0x80];
|
|
153
158
|
if (mode < tiny_mode)
|
|
154
|
-
code |=
|
|
159
|
+
code |= read_remap() << 7;
|
|
155
160
|
if (mode === full_mode)
|
|
156
|
-
code |=
|
|
161
|
+
code |= read_remap() << 14;
|
|
157
162
|
code += page_offset;
|
|
158
163
|
}
|
|
159
164
|
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 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\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 >= 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_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_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_remap = ()=> {\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\twhile( pos < buffer.length ) {\n\t\t\t\n\t\t\tlet code = read_remap()\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
|
@@ -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,6 +81,10 @@ 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
90
|
if (code >= 0xd800 && code < 0xe000)
|
|
@@ -91,7 +93,7 @@ var $;
|
|
|
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
|
}
|
|
@@ -102,33 +104,33 @@ var $;
|
|
|
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,14 @@ 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_remap = () => {
|
|
141
142
|
let code = buffer[pos++];
|
|
142
143
|
if (code > 0x80)
|
|
143
|
-
code =
|
|
144
|
+
code = ((mode + code) & 0x7F) | 0x80;
|
|
145
|
+
return code;
|
|
146
|
+
};
|
|
147
|
+
while (pos < buffer.length) {
|
|
148
|
+
let code = read_remap();
|
|
144
149
|
if (code < full_mode) {
|
|
145
150
|
if (mode === tiny_mode) {
|
|
146
151
|
if (code > 0x80) {
|
|
@@ -151,9 +156,9 @@ var $;
|
|
|
151
156
|
if (code >= 0x80)
|
|
152
157
|
code = ascii_set[code - 0x80];
|
|
153
158
|
if (mode < tiny_mode)
|
|
154
|
-
code |=
|
|
159
|
+
code |= read_remap() << 7;
|
|
155
160
|
if (mode === full_mode)
|
|
156
|
-
code |=
|
|
161
|
+
code |= read_remap() << 14;
|
|
157
162
|
code += page_offset;
|
|
158
163
|
}
|
|
159
164
|
text += String.fromCodePoint(code);
|
package/node.test.js
CHANGED
|
@@ -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,6 +72,10 @@ 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
81
|
if (code >= 0xd800 && code < 0xe000)
|
|
@@ -82,7 +84,7 @@ var $;
|
|
|
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
|
}
|
|
@@ -93,33 +95,33 @@ var $;
|
|
|
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,14 @@ 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_remap = () => {
|
|
132
133
|
let code = buffer[pos++];
|
|
133
134
|
if (code > 0x80)
|
|
134
|
-
code =
|
|
135
|
+
code = ((mode + code) & 0x7F) | 0x80;
|
|
136
|
+
return code;
|
|
137
|
+
};
|
|
138
|
+
while (pos < buffer.length) {
|
|
139
|
+
let code = read_remap();
|
|
135
140
|
if (code < full_mode) {
|
|
136
141
|
if (mode === tiny_mode) {
|
|
137
142
|
if (code > 0x80) {
|
|
@@ -142,9 +147,9 @@ var $;
|
|
|
142
147
|
if (code >= 0x80)
|
|
143
148
|
code = ascii_set[code - 0x80];
|
|
144
149
|
if (mode < tiny_mode)
|
|
145
|
-
code |=
|
|
150
|
+
code |= read_remap() << 7;
|
|
146
151
|
if (mode === full_mode)
|
|
147
|
-
code |=
|
|
152
|
+
code |= read_remap() << 14;
|
|
148
153
|
code += page_offset;
|
|
149
154
|
}
|
|
150
155
|
text += String.fromCodePoint(code);
|
|
@@ -4175,8 +4180,8 @@ var $;
|
|
|
4175
4180
|
function check(text, bytes) {
|
|
4176
4181
|
const ideal = new Uint8Array(bytes);
|
|
4177
4182
|
const actual = $mol_charset_ucf_encode(text);
|
|
4178
|
-
$mol_assert_equal($mol_charset_ucf_decode(actual), text);
|
|
4179
4183
|
$mol_assert_equal(actual, ideal);
|
|
4184
|
+
$mol_assert_equal($mol_charset_ucf_decode(actual), text);
|
|
4180
4185
|
}
|
|
4181
4186
|
$mol_test({
|
|
4182
4187
|
"Full ASCII compatible"($) {
|
|
@@ -4186,7 +4191,7 @@ var $;
|
|
|
4186
4191
|
check('allo\u0302', [0x61, 0x6C, 0x6C, 0x6F, 0xEA]);
|
|
4187
4192
|
},
|
|
4188
4193
|
"1B Cyrillic"($) {
|
|
4189
|
-
check('мир', [0x88, 0x3C, 0xE2, 0x40,
|
|
4194
|
+
check('мир', [0x88, 0x3C, 0xE2, 0x40, 0xF8]);
|
|
4190
4195
|
},
|
|
4191
4196
|
"1B Cyrillic with nummbers and punctuation"($) {
|
|
4192
4197
|
check('м.1', [0x88, 0x3C, 0x2E, 0x31, 0xF8]);
|
|
@@ -4202,15 +4207,15 @@ var $;
|
|
|
4202
4207
|
},
|
|
4203
4208
|
"2B Emoji with 1B modifiers"($) {
|
|
4204
4209
|
check('🏴', [0xFF, 0x74, 0x4B, 0x81]);
|
|
4205
|
-
check('🏴☠', [0xFF, 0x74, 0x4B, 0xC1, 0x0D, 0x8C, 0xA9,
|
|
4210
|
+
check('🏴☠', [0xFF, 0x74, 0x4B, 0xC1, 0x0D, 0x8C, 0xA9, 0xB4]);
|
|
4206
4211
|
},
|
|
4207
4212
|
"Mixed scripts"($) {
|
|
4208
4213
|
check('allô 美しい мир, 🏴☠\n', [
|
|
4209
4214
|
0x61, 0x6C, 0x6C, 0x6F, 0xEA, 0x20,
|
|
4210
|
-
|
|
4215
|
+
0xF9, 0x0E, 0x63, 0xE7, 0x57, 0x44, 0x20,
|
|
4211
4216
|
0xA8, 0x3C, 0xE2, 0x40, 0x2C, 0x20,
|
|
4212
|
-
|
|
4213
|
-
|
|
4217
|
+
0xF7, 0x74, 0x4B, 0xC1, 0x0D, 0x8C, 0xA9, 0x0A,
|
|
4218
|
+
0xB4,
|
|
4214
4219
|
]);
|
|
4215
4220
|
},
|
|
4216
4221
|
});
|