@@ -48,6 +48,50 @@ export default async function main(init: Instantiator): Promise<IOnigBinding> {
4848 return false
4949 }
5050
51+ const UTF8Decoder = typeof TextDecoder != 'undefined' ? new TextDecoder ( 'utf8' ) : undefined
52+ function UTF8ArrayToString ( heapOrArray : Uint8Array , idx : number , maxBytesToRead = 1024 ) {
53+ const endIdx = idx + maxBytesToRead
54+ let endPtr = idx
55+ while ( heapOrArray [ endPtr ] && ! ( endPtr >= endIdx ) ) ++ endPtr
56+ if ( endPtr - idx > 16 && heapOrArray . buffer && UTF8Decoder ) {
57+ return UTF8Decoder . decode ( heapOrArray . subarray ( idx , endPtr ) )
58+ }
59+ let str = ''
60+ while ( idx < endPtr ) {
61+ let u0 = heapOrArray [ idx ++ ]
62+ if ( ! ( u0 & 128 ) ) {
63+ str += String . fromCharCode ( u0 )
64+ continue
65+ }
66+ const u1 = heapOrArray [ idx ++ ] & 63
67+ if ( ( u0 & 224 ) === 192 ) {
68+ str += String . fromCharCode ( ( ( u0 & 31 ) << 6 ) | u1 )
69+ continue
70+ }
71+ const u2 = heapOrArray [ idx ++ ] & 63
72+ if ( ( u0 & 240 ) === 224 ) {
73+ u0 = ( ( u0 & 15 ) << 12 ) | ( u1 << 6 ) | u2
74+ }
75+ else {
76+ u0 = ( ( u0 & 7 ) << 18 )
77+ | ( u1 << 12 )
78+ | ( u2 << 6 )
79+ | ( heapOrArray [ idx ++ ] & 63 )
80+ }
81+ if ( u0 < 65536 ) {
82+ str += String . fromCharCode ( u0 )
83+ }
84+ else {
85+ const ch = u0 - 65536
86+ str += String . fromCharCode ( 55296 | ( ch >> 10 ) , 56320 | ( ch & 1023 ) )
87+ }
88+ }
89+ return str
90+ }
91+ function UTF8ToString ( ptr : number , maxBytesToRead ?: number ) {
92+ return ptr ? UTF8ArrayToString ( binding . HEAPU8 , ptr , maxBytesToRead ) : ''
93+ }
94+
5195 const asmLibraryArg = {
5296 emscripten_get_now : _emscripten_get_now ,
5397 emscripten_memcpy_big : _emscripten_memcpy_big ,
@@ -64,6 +108,7 @@ export default async function main(init: Instantiator): Promise<IOnigBinding> {
64108 wasmMemory = exports . memory
65109 updateGlobalBufferAndViews ( wasmMemory . buffer )
66110 Object . assign ( binding , exports )
111+ binding . UTF8ToString = UTF8ToString
67112 }
68113
69114 await createWasm ( )
0 commit comments