1- let registry ;
2- let wasm_mod ;
3- let ref = { deref ( ) { } } ;
4-
5- {
6- const path = new URL ( import . meta. url . replace ( '.js' , '.wasm' ) ) ;
7- wasm_mod = new WebAssembly . Module ( await ( 'file:' === path . protocol ? Deno . readFile ( path ) : fetch ( path ) . then ( r => r . arrayBuffer ( ) ) ) ) ;
8- }
1+ import * as wasm from './font.wasm' ;
92
10- function wasm ( ) {
11- return ref . deref ( ) || ( ref = new WeakRef ( new WebAssembly . Instance ( wasm_mod ) . exports ) ) . deref ( ) ;
12- }
3+ let registry ;
134
145class mem {
15- static length ( ) { return wasm ( ) . wlen ( ) ; }
16- static alloc ( size ) { return wasm ( ) . walloc ( size ) ; }
17- static free ( ptr , size ) { return wasm ( ) . wfree ( ptr , size ) ; }
18- static u8 ( ptr , size ) { return new Uint8Array ( wasm ( ) . memory . buffer , ptr , size ) ; }
19- static u32 ( ptr , size ) { return new Uint32Array ( wasm ( ) . memory . buffer , ptr , size ) ; }
6+ static length ( ) { return wasm . wlen ( ) ; }
7+ static alloc ( size ) { return wasm . walloc ( size ) ; }
8+ static free ( ptr , size ) { return wasm . wfree ( ptr , size ) ; }
9+ static u8 ( ptr , size ) { return new Uint8Array ( wasm . memory . buffer , ptr , size ) ; }
10+ static u32 ( ptr , size ) { return new Uint32Array ( wasm . memory . buffer , ptr , size ) ; }
2011
2112 static copy_and_free ( ptr , size ) {
2213 let slice = mem . u8 ( ptr , size ) . slice ( ) ;
23- return ( wasm ( ) . wfree ( ptr , size ) , slice ) ;
14+ return ( wasm . wfree ( ptr , size ) , slice ) ;
2415 }
2516}
2617
@@ -30,71 +21,71 @@ const encode_utf8 = globalThis.Deno?.core?.encode ?? globalThis.Buffer?.from.bin
3021if ( 'FinalizationRegistry' in globalThis ) {
3122 registry = new FinalizationRegistry ( ( [ t , ptr ] ) => {
3223 if ( ! ref . deref ( ) ) return ;
33- if ( t === 0 ) wasm ( ) . font_free ( ptr ) ;
34- if ( t === 1 ) wasm ( ) . layout_free ( ptr ) ;
24+ if ( t === 0 ) wasm . font_free ( ptr ) ;
25+ if ( t === 1 ) wasm . layout_free ( ptr ) ;
3526 } ) ;
3627}
3728
3829export class Font {
3930 constructor ( scale , buffer ) {
40- this . _w = wasm ( ) ;
31+ this . _w = wasm ;
4132 this . scale = scale ;
4233 const ptr = mem . alloc ( buffer . length ) ;
4334 mem . u8 ( ptr , buffer . length ) . set ( buffer ) ;
44- this . ptr = wasm ( ) . font_new ( ptr , buffer . length , scale ) ;
35+ this . ptr = wasm . font_new ( ptr , buffer . length , scale ) ;
4536
4637 if ( ! this . ptr ) throw new Error ( 'invalid font' ) ;
4738 if ( registry ) registry . register ( this , [ 0 , this . ptr ] , this ) ;
4839 }
4940
5041 free ( ) {
51- this . ptr = wasm ( ) . font_free ( this . ptr ) ;
42+ this . ptr = wasm . font_free ( this . ptr ) ;
5243 if ( registry ) registry . unregister ( this ) ;
5344 }
5445
5546 has ( char ) {
56- return wasm ( ) . font_has ( this . ptr , String . prototype . charCodeAt . call ( char , 0 ) ) ;
47+ return wasm . font_has ( this . ptr , String . prototype . charCodeAt . call ( char , 0 ) ) ;
5748 }
5849
5950 metrics ( char , scale = this . scale ) {
60- const ptr = wasm ( ) . font_metrics ( this . ptr , String . prototype . charCodeAt . call ( char , 0 ) , scale ) ;
61- const metrics = JSON . parse ( decode_utf8 ( mem . u8 ( wasm ( ) . font_metrics_buffer ( ptr ) , mem . length ( ) ) ) ) ;
51+ const ptr = wasm . font_metrics ( this . ptr , String . prototype . charCodeAt . call ( char , 0 ) , scale ) ;
52+ const metrics = JSON . parse ( decode_utf8 ( mem . u8 ( wasm . font_metrics_buffer ( ptr ) , mem . length ( ) ) ) ) ;
6253
63- return ( wasm ( ) . font_metrics_free ( ptr ) , metrics ) ;
54+ return ( wasm . font_metrics_free ( ptr ) , metrics ) ;
6455 }
6556
6657 rasterize ( char , scale = this . scale ) {
67- const ptr = wasm ( ) . font_rasterize ( this . ptr , String . prototype . charCodeAt . call ( char , 0 ) , scale ) ;
58+ const ptr = wasm . font_rasterize ( this . ptr , String . prototype . charCodeAt . call ( char , 0 ) , scale ) ;
6859
6960 const glyph = {
70- buffer : mem . u8 ( wasm ( ) . font_rasterize_buffer ( ptr ) , mem . length ( ) ) . slice ( ) ,
71- metrics : JSON . parse ( decode_utf8 ( mem . u8 ( wasm ( ) . font_rasterize_metrics ( ptr ) , mem . length ( ) ) ) ) ,
61+ buffer : mem . u8 ( wasm . font_rasterize_buffer ( ptr ) , mem . length ( ) ) . slice ( ) ,
62+ metrics : JSON . parse ( decode_utf8 ( mem . u8 ( wasm . font_rasterize_metrics ( ptr ) , mem . length ( ) ) ) ) ,
7263 }
7364
74- return ( wasm ( ) . font_rasterize_free ( ptr ) , glyph ) ;
65+ return ( wasm . font_rasterize_free ( ptr ) , glyph ) ;
7566 }
7667}
7768
7869export class Layout {
7970 constructor ( ) {
80- this . _w = wasm ( ) ;
71+ this . _w = wasm ;
8172 if ( registry ) this . refs = [ ] ;
82- this . ptr = wasm ( ) . layout_new ( ) ;
73+ this . ptr = wasm . layout_new ( ) ;
8374 if ( registry ) registry . register ( this , [ 1 , this . ptr ] , this ) ;
8475 }
8576
8677 clear ( ) {
87- wasm ( ) . layout_clear ( this . ptr ) ;
78+ wasm . layout_clear ( this . ptr ) ;
8879 if ( registry ) this . refs . length = 0 ;
8980 }
9081
9182 lines ( ) {
92- return wasm ( ) . layout_lines ( this . ptr ) ;
83+ return wasm . layout_lines ( this . ptr ) ;
9384 }
9485
9586 free ( ) {
9687 if ( registry ) this . refs . length = 0 ;
97- this . ptr = wasm ( ) . layout_free ( this . ptr ) ;
88+ this . ptr = wasm . layout_free ( this . ptr ) ;
9889 if ( registry ) registry . unregister ( this ) ;
9990 }
10091
@@ -104,7 +95,7 @@ export class Layout {
10495 if ( registry ) this . refs . length = 0 ;
10596 const ptr = mem . alloc ( options . length ) ;
10697 mem . u8 ( ptr , options . length ) . set ( options ) ;
107- wasm ( ) . layout_reset ( this . ptr , ptr , options . length ) ;
98+ wasm . layout_reset ( this . ptr , ptr , options . length ) ;
10899 }
109100
110101 append ( font , text , init ) {
@@ -114,18 +105,18 @@ export class Layout {
114105 const ptr = mem . alloc ( text . length ) ;
115106 mem . u8 ( ptr , text . length ) . set ( text ) ;
116107 const has_color = ( 'r' in options ) || ( 'g' in options ) || ( 'b' in options ) ;
117- wasm ( ) . layout_append ( this . ptr , font . ptr , ptr , text . length , options . scale ?? font . scale , has_color , options . r , options . g , options . b ) ;
108+ wasm . layout_append ( this . ptr , font . ptr , ptr , text . length , options . scale ?? font . scale , has_color , options . r , options . g , options . b ) ;
118109 }
119110
120111 rasterize ( r , g , b ) {
121- const ptr = wasm ( ) . layout_rasterize ( this . ptr , r , g , b ) ;
112+ const ptr = wasm . layout_rasterize ( this . ptr , r , g , b ) ;
122113
123114 const framebuffer = {
124- width : wasm ( ) . layout_rasterize_width ( ptr ) ,
125- height : wasm ( ) . layout_rasterize_height ( ptr ) ,
126- buffer : mem . u8 ( wasm ( ) . layout_rasterize_buffer ( ptr ) , mem . length ( ) ) . slice ( ) ,
115+ width : wasm . layout_rasterize_width ( ptr ) ,
116+ height : wasm . layout_rasterize_height ( ptr ) ,
117+ buffer : mem . u8 ( wasm . layout_rasterize_buffer ( ptr ) , mem . length ( ) ) . slice ( ) ,
127118 }
128119
129- return ( wasm ( ) . layout_rasterize_free ( ptr ) , framebuffer ) ;
120+ return ( wasm . layout_rasterize_free ( ptr ) , framebuffer ) ;
130121 }
131122}
0 commit comments