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 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
- ![](https://habrastorage.org/webt/9s/ad/dh/9saddhacydrzr0i7rlnpmucxih4.png)
5
+ ![](https://habrastorage.org/webt/ce/wj/w5/cewjw5ghf9byepbm_iuxahke9qi.png)
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` [mol_charset_ucf_lib](https://www.npmjs.com/package/mol_charset_ucf)
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
- ![](https://habrastorage.org/webt/xy/0w/qn/xy0wqnvz9vlc2uwmcbbwm98a3v0.png)
32
+ ![](https://habrastorage.org/webt/so/yi/zn/soyiznuilrlcavnkdvrrrzkneyg.png)
33
33
 
34
34
  ## Decoding perf
35
35
  [Online](https://perf.js.hyoo.ru/#!bench=hlj49x_hdq7va)
36
36
 
37
- ![](https://habrastorage.org/webt/t5/lj/7l/t5lj7lwg97tzih7cpukqg7k6j88.png)
37
+ ![](https://habrastorage.org/webt/nd/a5/tc/nda5tcoyonivn5x3onukgpd4yew.png)
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":129,"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}}}
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 tine_limit = 128 * 98;
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 - high_last) & 0x7F) | 0x80;
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 >= 0xd800 && code < 0xe000)
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
- write_high(mode = tiny_mode);
96
+ write_mode(tiny_mode);
95
97
  }
96
98
  buf[pos++] = code;
97
99
  }
98
- else if (code < tine_limit) {
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
- write_high(mode = tiny_mode);
107
+ write_mode(tiny_mode);
106
108
  write_high(fast);
107
109
  continue;
108
110
  }
109
111
  }
110
112
  if (mode !== page)
111
- write_high(mode = page);
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
- write_high(mode = page);
120
+ write_mode(page);
119
121
  write_remap(code & 0x7F);
120
- buf[pos++] = (code >> 7) & 0x7F;
122
+ write_remap((code >> 7) & 0x7F);
121
123
  }
122
124
  else {
123
125
  if (mode !== full_mode)
124
- write_high(mode = full_mode);
126
+ write_mode(full_mode);
125
127
  write_remap(code & 0x7F);
126
- buf[pos++] = (code >> 7) & 0x7F;
127
- buf[pos++] = code >> 14;
128
+ write_remap((code >> 7) & 0x7F);
129
+ write_remap(code >> 14);
128
130
  }
129
131
  }
130
132
  if (mode !== tiny_mode)
131
- write_high(tiny_mode);
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
- let ext_last = mode;
140
- while (pos < buffer.length) {
141
+ const read_code = () => {
141
142
  let code = buffer[pos++];
142
143
  if (code > 0x80)
143
- code = ext_last = ((ext_last + code) & 0x7F) | 0x80;
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 |= buffer[pos++] << 7;
165
+ code |= read_remap() << 7;
155
166
  if (mode === full_mode)
156
- code |= buffer[pos++] << 14;
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 tine_limit = 128 * 98;
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 - high_last) & 0x7F) | 0x80;
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 >= 0xd800 && code < 0xe000)
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
- write_high(mode = tiny_mode);
96
+ write_mode(tiny_mode);
95
97
  }
96
98
  buf[pos++] = code;
97
99
  }
98
- else if (code < tine_limit) {
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
- write_high(mode = tiny_mode);
107
+ write_mode(tiny_mode);
106
108
  write_high(fast);
107
109
  continue;
108
110
  }
109
111
  }
110
112
  if (mode !== page)
111
- write_high(mode = page);
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
- write_high(mode = page);
120
+ write_mode(page);
119
121
  write_remap(code & 0x7F);
120
- buf[pos++] = (code >> 7) & 0x7F;
122
+ write_remap((code >> 7) & 0x7F);
121
123
  }
122
124
  else {
123
125
  if (mode !== full_mode)
124
- write_high(mode = full_mode);
126
+ write_mode(full_mode);
125
127
  write_remap(code & 0x7F);
126
- buf[pos++] = (code >> 7) & 0x7F;
127
- buf[pos++] = code >> 14;
128
+ write_remap((code >> 7) & 0x7F);
129
+ write_remap(code >> 14);
128
130
  }
129
131
  }
130
132
  if (mode !== tiny_mode)
131
- write_high(tiny_mode);
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
- let ext_last = mode;
140
- while (pos < buffer.length) {
141
+ const read_code = () => {
141
142
  let code = buffer[pos++];
142
143
  if (code > 0x80)
143
- code = ext_last = ((ext_last + code) & 0x7F) | 0x80;
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 |= buffer[pos++] << 7;
165
+ code |= read_remap() << 7;
155
166
  if (mode === full_mode)
156
- code |= buffer[pos++] << 14;
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 tine_limit = 128 * 98;
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 - high_last) & 0x7F) | 0x80;
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 >= 0xd800 && code < 0xe000)
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
- write_high(mode = tiny_mode);
87
+ write_mode(tiny_mode);
86
88
  }
87
89
  buf[pos++] = code;
88
90
  }
89
- else if (code < tine_limit) {
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
- write_high(mode = tiny_mode);
98
+ write_mode(tiny_mode);
97
99
  write_high(fast);
98
100
  continue;
99
101
  }
100
102
  }
101
103
  if (mode !== page)
102
- write_high(mode = page);
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
- write_high(mode = page);
111
+ write_mode(page);
110
112
  write_remap(code & 0x7F);
111
- buf[pos++] = (code >> 7) & 0x7F;
113
+ write_remap((code >> 7) & 0x7F);
112
114
  }
113
115
  else {
114
116
  if (mode !== full_mode)
115
- write_high(mode = full_mode);
117
+ write_mode(full_mode);
116
118
  write_remap(code & 0x7F);
117
- buf[pos++] = (code >> 7) & 0x7F;
118
- buf[pos++] = code >> 14;
119
+ write_remap((code >> 7) & 0x7F);
120
+ write_remap(code >> 14);
119
121
  }
120
122
  }
121
123
  if (mode !== tiny_mode)
122
- write_high(tiny_mode);
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
- let ext_last = mode;
131
- while (pos < buffer.length) {
132
+ const read_code = () => {
132
133
  let code = buffer[pos++];
133
134
  if (code > 0x80)
134
- code = ext_last = ((ext_last + code) & 0x7F) | 0x80;
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 |= buffer[pos++] << 7;
156
+ code |= read_remap() << 7;
146
157
  if (mode === full_mode)
147
- code |= buffer[pos++] << 14;
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, 0x96]);
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 with 1B modifiers"($) {
4214
+ "2B Emoji"($) {
4204
4215
  check('🏴', [0xFF, 0x74, 0x4B, 0x81]);
4205
- check('🏴‍☠', [0xFF, 0x74, 0x4B, 0xC1, 0x0D, 0x8C, 0xA9, 0x8B]);
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
- 0x8F, 0x0E, 0x63, 0xE7, 0x57, 0x44, 0x20,
4226
+ 0xF9, 0x0E, 0x63, 0xE7, 0x57, 0x44, 0x20,
4211
4227
  0xA8, 0x3C, 0xE2, 0x40, 0x2C, 0x20,
4212
- 0x95, 0x74, 0x4B, 0xC1, 0x0D, 0x8C, 0xA9, 0x0A,
4213
- 0x8B,
4228
+ 0xF7, 0x74, 0x4B, 0xC1, 0x0D, 0x8C, 0xA9, 0x0A,
4229
+ 0xB4,
4214
4230
  ]);
4215
4231
  },
4216
4232
  });