three-text 0.4.5 → 0.4.7
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 +15 -9
- package/dist/index.cjs +30 -5
- package/dist/index.d.ts +1 -0
- package/dist/index.js +30 -5
- package/dist/index.min.cjs +396 -394
- package/dist/index.min.js +394 -392
- package/dist/index.umd.js +30 -5
- package/dist/index.umd.min.js +544 -542
- package/dist/p5/index.cjs +3 -0
- package/dist/p5/index.js +3 -0
- package/dist/three/index.cjs +1 -0
- package/dist/three/index.d.ts +1 -0
- package/dist/three/index.js +1 -0
- package/dist/three/react.cjs +1 -0
- package/dist/three/react.d.ts +2 -0
- package/dist/three/react.js +1 -0
- package/dist/types/core/Text.d.ts +1 -0
- package/dist/types/core/font/WoffConverter.d.ts +4 -0
- package/dist/types/three/index.d.ts +1 -0
- package/dist/types/three/react.d.ts +1 -0
- package/package.json +4 -2
package/dist/index.min.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
* three-text v0.4.
|
|
2
|
+
* three-text v0.4.7
|
|
3
3
|
* Copyright (C) 2025 Countertype LLC
|
|
4
4
|
*
|
|
5
5
|
* This program is free software: you can redistribute it and/or modify
|
|
@@ -21,11 +21,11 @@ return M.set(t,n??null),n}function e(t){const e=t.getUint16(4),i=new Map
|
|
|
21
21
|
for(let n=0;e>n;n++){const e=12+16*n
|
|
22
22
|
if(e+16>t.byteLength)break
|
|
23
23
|
const s=t.getUint32(e),r=t.getUint32(e+4),o=t.getUint32(e+8),a=t.getUint32(e+12)
|
|
24
|
-
i.set(s,{tag:s,t:r,offset:o,length:a})}return i}async function i(t,e){if(!
|
|
25
|
-
if(!e&&!
|
|
24
|
+
i.set(s,{tag:s,t:r,offset:o,length:a})}return i}async function i(t,e){if(!J.test(t))throw Error(`Invalid hyphenation language code "${t}". Expected e.g. "en-us".`)
|
|
25
|
+
if(!e&&!K.has(t))throw Error(`Unsupported hyphenation language "${t}". Use a built-in language (e.g. "en-us") or register patterns via Text.registerPattern("${t}", pattern).`)
|
|
26
26
|
try{if(e)return(await import(`${e}${t}.js`)).default
|
|
27
27
|
if("string"==typeof import.meta?.url){const e=new URL(".",import.meta.url).href,i=new URL(`./patterns/${t}.js`,e).href
|
|
28
|
-
return(await import(i)).default}return(await import(`./patterns/${t}.js`)).default}catch(e){throw Error(`Failed to load hyphenation patterns for ${t}. Consider using static imports: import pattern from 'three-text/patterns/${t}'; Text.registerPattern('${t}', pattern);`)}}function n(t,e,i,n){return`${t}_${e}_${Math.round(1e3*i)/1e3}_${n}`}function s(){return new
|
|
28
|
+
return(await import(i)).default}return(await import(`./patterns/${t}.js`)).default}catch(e){throw Error(`Failed to load hyphenation patterns for ${t}. Consider using static imports: import pattern from 'three-text/patterns/${t}'; Text.registerPattern('${t}', pattern);`)}}function n(t,e,i,n){return`${t}_${e}_${Math.round(1e3*i)/1e3}_${n}`}function s(){return new Z}function r(t){return t&&t.i&&{}.hasOwnProperty.call(t,"default")?t.default:t}function o(t){if(t.i)return t
|
|
29
29
|
var e=t.default
|
|
30
30
|
if("function"==typeof e){var i=function t(){return this instanceof t?Reflect.construct(e,arguments,this.constructor):e.apply(this,arguments)}
|
|
31
31
|
i.prototype=e.prototype}else i={}
|
|
@@ -66,7 +66,7 @@ try{return await e()}finally{this.end(t)}}}
|
|
|
66
66
|
const l=800,u=100,f=0,d=1/3
|
|
67
67
|
var y,p;(t=>{t[t.BOX=0]="BOX",t[t.GLUE=1]="GLUE",t[t.PENALTY=2]="PENALTY",t[t.DISCRETIONARY=3]="DISCRETIONARY"})(y||(y={})),(t=>{t[t.VERY_LOOSE=0]="VERY_LOOSE",t[t.LOOSE=1]="LOOSE",t[t.DECENT=2]="DECENT",t[t.TIGHT=3]="TIGHT"})(p||(p={}))
|
|
68
68
|
class w{constructor(){this.F=new Map,this.L=[]}getKey(t,e){return t<<2|e}G(t){const e=this.getKey(t.position,t.O),i=this.F.get(e)
|
|
69
|
-
return i?i.k>t.k&&(i.k=t.k,i.D=t.D,i.
|
|
69
|
+
return i?i.k>t.k&&(i.k=t.k,i.D=t.D,i.N=t.N,i.line=t.line,i.U=t.U,i.$=t.$,i.P=t.P,!0):(t.active=!0,t.W=this.L.length,this.L.push(t),this.F.set(e,t),!0)}R(t){if(!t.active)return
|
|
70
70
|
t.active=!1
|
|
71
71
|
const e=t.W,i=this.L.length-1
|
|
72
72
|
if(e!==i){const t=this.L[i]
|
|
@@ -124,7 +124,7 @@ if(c&&e>c){const e=Array.from(t)
|
|
|
124
124
|
for(let t=0;e.length>t;t++)l.push({type:y.BOX,width:i(e[t]),text:e[t],Z:d+t}),e.length-1>t&&l.push({type:y.PENALTY,width:0,tt:5e3,Z:d+t+1})}else l.push({type:y.BOX,width:e,text:t,Z:d})}}else{const e=i(t)
|
|
125
125
|
if(c&&e>c){const e=Array.from(t)
|
|
126
126
|
for(let t=0;e.length>t;t++)l.push({type:y.BOX,width:i(e[t]),text:e[t],Z:d+t}),e.length-1>t&&l.push({type:y.PENALTY,width:0,tt:5e3,Z:d+t+1})}else l.push({type:y.BOX,width:e,text:t,Z:d})}d+=t.length}f+=t.length}}return l}static lineBreak(t,e,i,n,s){const r=new w
|
|
127
|
-
r.G({position:0,line:0,O:p.DECENT,k:0,D:null,
|
|
127
|
+
r.G({position:0,line:0,O:p.DECENT,k:0,D:null,N:!1,active:!0,W:0,U:0,$:0,P:0})
|
|
128
128
|
let o=0,a=0,h=0
|
|
129
129
|
for(let c=0;t.length>c;c++){const l=t[c]
|
|
130
130
|
if(!(l.type===y.PENALTY&&1e4>l.tt||l.type===y.DISCRETIONARY||l.type===y.GLUE&&c>0&&t[c-1].type===y.BOX)){l.type===y.BOX?o+=l.width:l.type===y.GLUE?(o+=l.width,a+=l.stretch,h+=l.X):l.type===y.DISCRETIONARY&&(o+=l.width)
|
|
@@ -132,7 +132,7 @@ continue}let u=0,f=!1;(l.type===y.PENALTY||l.type===y.DISCRETIONARY)&&(u=l.tt,f=
|
|
|
132
132
|
let d=0
|
|
133
133
|
l.type===y.DISCRETIONARY&&(d=l.ut)
|
|
134
134
|
const p=[null,null,null,null],w=[1/0,1/0,1/0,1/0],g=[],v=r.j()
|
|
135
|
-
for(let t=0;v.length>t;t++){const r=v[t],l=a-r
|
|
135
|
+
for(let t=0;v.length>t;t++){const r=v[t],l=a-r.$,y=h-r.P,m=e-(o-r.U+d)
|
|
136
136
|
let x
|
|
137
137
|
if(m>0){const t=l+n
|
|
138
138
|
x=t>0?m/t:1/0}else x=0>m?y>0?m/y:-1/0:0
|
|
@@ -140,34 +140,34 @@ const b=this.H(m,m>0?l+n:y)
|
|
|
140
140
|
if(-1>x){g.push(r)
|
|
141
141
|
continue}if(u!==T&&b>i)continue
|
|
142
142
|
let S=s.wt+b
|
|
143
|
-
1e4>Math.abs(S)?S*=S:S=1e8,u>0?S+=u*u:u>T&&(S-=u*u),f&&r.
|
|
143
|
+
1e4>Math.abs(S)?S*=S:S=1e8,u>0?S+=u*u:u>T&&(S-=u*u),f&&r.N&&(S+=s.gt)
|
|
144
144
|
const _=this.V(x)
|
|
145
145
|
Math.abs(_-r.O)>1&&(S+=s.vt)
|
|
146
146
|
const E=r.k+S
|
|
147
|
-
w[_]>E&&(w[_]=E,p[_]={position:c,line:r.line+1,O:_,k:E,D:r,
|
|
147
|
+
w[_]>E&&(w[_]=E,p[_]={position:c,line:r.line+1,O:_,k:E,D:r,N:f,active:!0,W:-1,U:o,$:a,P:h})}for(const t of g)r.R(t)
|
|
148
148
|
for(let t=0;4>t;t++)p[t]&&r.G(p[t])
|
|
149
149
|
if(0===r.size()&&u!==T)return null
|
|
150
150
|
l.type===y.BOX?o+=l.width:l.type===y.GLUE?(o+=l.width,a+=l.stretch,h+=l.X):l.type===y.DISCRETIONARY&&(o+=l.width)}let c=null,l=1/0
|
|
151
151
|
for(const t of r.j())l>t.k&&(l=t.k,c=t)
|
|
152
152
|
return c}static xt(t){if(!t.text||0===t.text.length)return[]
|
|
153
|
-
const{text:e,width:i,align:n="left",direction:s="ltr",bt:r=!1,language:o="en-us",St:a=!0,measureText:h,_t:d,Et:y,Tt:p,letterSpacing:w=0,At:T=l,Mt:A=u,It:M=f,Ft:I,Lt:F=_,Gt:L=E,Ot:G=b,Ct:O=S,kt:C=g,
|
|
153
|
+
const{text:e,width:i,align:n="left",direction:s="ltr",bt:r=!1,language:o="en-us",St:a=!0,measureText:h,_t:d,Et:y,Tt:p,letterSpacing:w=0,At:T=l,Mt:A=u,It:M=f,Ft:I,Lt:F=_,Gt:L=E,Ot:G=b,Ct:O=S,kt:C=g,Dt:k=v,Bt:D=m,Nt:B=x}=t
|
|
154
154
|
if(a&&e.includes("\n")){const i=e.split("\n"),n=[]
|
|
155
155
|
let s=0
|
|
156
|
-
for(const e of i){if(0===e.length)n.push({text:"",$t:s,
|
|
156
|
+
for(const e of i){if(0===e.length)n.push({text:"",Ut:s,$t:s,Pt:0,Wt:!0,naturalWidth:0,zt:!1})
|
|
157
157
|
else{const i=this.xt({...t,text:e,St:!1})
|
|
158
|
-
i.forEach(t=>{t
|
|
159
|
-
!
|
|
160
|
-
let
|
|
161
|
-
void 0!==I&&i&&(
|
|
162
|
-
const
|
|
158
|
+
i.forEach(t=>{t.Ut+=s,t.$t+=s}),n.push(...i)}s+=e.length+1}return n}let N=r
|
|
159
|
+
!N||y&&y[o]||(c.warn(`Hyphenation patterns for ${o} not available`),N=!1)
|
|
160
|
+
let U=M
|
|
161
|
+
void 0!==I&&i&&(U=i*I)
|
|
162
|
+
const $={wt:G,vt:O,gt:D,Rt:B,yt:C,ft:k,jt:n,Tt:p,Ht:p?w*p:0}
|
|
163
163
|
if(!i||i===1/0){const t=h(e)
|
|
164
|
-
return[{text:e,$t:
|
|
165
|
-
if(!
|
|
166
|
-
for(let e=0;t>e&&!
|
|
167
|
-
|
|
168
|
-
let r=
|
|
164
|
+
return[{text:e,Ut:0,$t:e.length-1,Pt:0,Wt:!0,naturalWidth:t,zt:!1}]}let P=this.J(e,h,d,!1,o,y,F,L,$,i),W=this.lineBreak(P,i,A,0,$)
|
|
165
|
+
if(!W&&N&&(P=this.J(e,h,d,!0,o,y,F,L,$,i),W=this.lineBreak(P,i,T,0,$)),!W){const t=5
|
|
166
|
+
for(let e=0;t>e&&!W;e++){const t=U+e*i*.1
|
|
167
|
+
W=this.lineBreak(P,i,T,t,$),W||(W=this.lineBreak(P,i,1e4,t,$))}}if(W){const t=[]
|
|
168
|
+
let r=W
|
|
169
169
|
for(;r&&r.position>0;)t.unshift(r.position),r=r.D
|
|
170
|
-
return this.Vt(e,P,t,i,n,s
|
|
170
|
+
return this.Vt(e,P,t,i,n,s,$)}return[{text:e,Ut:0,$t:e.length-1,Pt:0,qt:0,Wt:!0,naturalWidth:h(e),zt:!1}]}static Vt(t,e,i,n,s,r,o){if(0===i.length)return[{text:t,Ut:0,$t:t.length-1,Pt:0}]
|
|
171
171
|
const a=[]
|
|
172
172
|
let h=0
|
|
173
173
|
for(let t=0;i.length>t;t++){const c=i[t],l=!(e.length-1>i[i.length-1]+1)&&t===i.length-1,u=[]
|
|
@@ -185,12 +185,12 @@ let b=0,S=0,_=s
|
|
|
185
185
|
if("justify"===s&&l&&(_="rtl"===r?"right":"left"),"center"===_)b=(n-p)/2
|
|
186
186
|
else if("right"===_)b=n-p
|
|
187
187
|
else if("justify"===_&&!l){const t=n-p
|
|
188
|
-
t>0&&w>0?S=t/w:0>t&&g>0&&(S=t/g)}a.push({text:x,$t:
|
|
188
|
+
t>0&&w>0?S=t/w:0>t&&g>0&&(S=t/g)}a.push({text:x,Ut:f,$t:d,Pt:b,qt:S,Wt:!1,naturalWidth:p,zt:m}),h=c+1}if(e.length-1>h){const t=[]
|
|
189
189
|
let i=-1,c=-1,l=0
|
|
190
190
|
for(let n=h;e.length-1>n;n++){const s=e[n]
|
|
191
191
|
s.type!==y.PENALTY&&(void 0!==s.Z&&((-1===i||i>s.Z)&&(i=s.Z),s.Z>c&&(c=s.Z)),s.text&&t.push(s.text),l+=s.width)}o?.Ht&&0!==l&&(l-=o.Ht)
|
|
192
192
|
let u=0,f=s
|
|
193
|
-
"justify"===s&&(f="rtl"===r?"right":"left"),"center"===f?u=(n-l)/2:"right"===f&&(u=n-l),a.push({text:t.join(""),$t:
|
|
193
|
+
"justify"===s&&(f="rtl"===r?"right":"left"),"center"===f?u=(n-l)/2:"right"===f&&(u=n-l),a.push({text:t.join(""),Ut:i,$t:c,Pt:u,qt:0,Wt:!0,naturalWidth:l,zt:!1}),a.length>1&&(a[a.length-2].Wt=!1),a[a.length-1].Wt=!0}else a.length>0&&(a[a.length-1].Wt=!0)
|
|
194
194
|
return a}}const M=new WeakMap
|
|
195
195
|
class I{static _t(e,i,n=0){const s=Array.from(i)
|
|
196
196
|
if(0===s.length)return[]
|
|
@@ -212,28 +212,28 @@ const r=t(e.Kt)
|
|
|
212
212
|
e.hb.shape(e.font,s,r)
|
|
213
213
|
const o=s.json(e.font),a=n*e.upem
|
|
214
214
|
let h=0
|
|
215
|
-
return o.forEach(t=>{h+=t.ax,0!==a&&(h+=a)}),s.destroy(),h}}class F{constructor(t){this.Xt=t}Zt(t){const{text:e,width:i,align:n,direction:s,bt:r,language:o,St:a,At:h,Mt:c,It:l,Ft:u,Et:f,Lt:d,Gt:y,Ot:p,Ct:w,kt:g,
|
|
215
|
+
return o.forEach(t=>{h+=t.ax,0!==a&&(h+=a)}),s.destroy(),h}}class F{constructor(t){this.Xt=t}Zt(t){const{text:e,width:i,align:n,direction:s,bt:r,language:o,St:a,At:h,Mt:c,It:l,Ft:u,Et:f,Lt:d,Gt:y,Ot:p,Ct:w,kt:g,Dt:v,Bt:m,letterSpacing:x}=t
|
|
216
216
|
let b
|
|
217
|
-
if(i)b=A.xt({text:e,width:i,align:n,direction:s,bt:r,language:o,St:a,At:h,Mt:c,It:l,Ft:u,Et:f,Lt:d,Gt:y,Ot:p,Ct:w,kt:g,
|
|
217
|
+
if(i)b=A.xt({text:e,width:i,align:n,direction:s,bt:r,language:o,St:a,At:h,Mt:c,It:l,Ft:u,Et:f,Lt:d,Gt:y,Ot:p,Ct:w,kt:g,Dt:v,Bt:m,Tt:this.Xt.upem,letterSpacing:x,measureText:t=>I.measureTextWidth(this.Xt,t,x),_t:t=>I._t(this.Xt,t,x)})
|
|
218
218
|
else{const t=e.split("\n")
|
|
219
219
|
b=[]
|
|
220
220
|
let i=0
|
|
221
|
-
for(const e of t)b.push({text:e,$t:
|
|
221
|
+
for(const e of t)b.push({text:e,Ut:i,$t:0===e.length?i:i+e.length-1,Pt:0}),i+=e.length+1}return{lines:b}}te(t,e){const{offset:i,ee:n}=this.ie(e)
|
|
222
222
|
if(0!==i)for(let e=0;t.length>e;e+=3)t[e]+=i
|
|
223
223
|
return{offset:i,ee:n}}ie(t){const{width:e,align:i,planeBounds:n}=t
|
|
224
224
|
let s=0
|
|
225
225
|
const r={min:{...n.min},max:{...n.max}}
|
|
226
|
-
return!e||"center"!==i&&"right"!==i||(s="center"===i?(e-(n.max.x-n.min.x))/2-n.min.x:e-n.max.x),0!==s&&(r.min.x+=s,r.max.x+=s),{offset:s,ee:r}}}const L=65536,G=1330926671,O=2001684038,C=
|
|
227
|
-
class
|
|
226
|
+
return!e||"center"!==i&&"right"!==i||(s="center"===i?(e-(n.max.x-n.min.x))/2-n.min.x:e-n.max.x),0!==s&&(r.min.x+=s,r.max.x+=s),{offset:s,ee:r}}}const L=65536,G=1330926671,O=2001684038,C=2001684018,k=1751474532,D=1751672161,B=1330851634,N=1719034226,U=1398030676,$=1851878757,P=1128678944,W=1128678962,z=1196643650,R=1196445523,j=new TextDecoder("utf-16be")
|
|
227
|
+
class H{static ne(t){if(!t||12>t.byteLength)throw Error("Invalid font buffer: too small to be a valid font file")
|
|
228
228
|
const i=new DataView(t),n=i.getUint32(0)
|
|
229
|
-
if(![L,G].includes(n))throw Error("Invalid font format. Expected TTF/OTF
|
|
230
|
-
const s=e(i),r=s.has(
|
|
229
|
+
if(![L,G].includes(n))throw Error("Invalid font format. Expected TTF/OTF/WOFF/WOFF2, got signature: 0x"+n.toString(16))
|
|
230
|
+
const s=e(i),r=s.has(P)||s.has(W),o=s.get(k)?.offset??0,a=s.get(D)?.offset??0,h=s.get(B)?.offset??0,c=s.get(N)?.offset??0,l=s.get(U)?.offset??0,u=s.get($)?.offset??0,f=o?i.getUint16(o+18):1e3
|
|
231
231
|
let d=null
|
|
232
232
|
a&&(d={se:i.getInt16(a+4),re:i.getInt16(a+6),oe:i.getInt16(a+8)})
|
|
233
233
|
let y=null
|
|
234
234
|
h&&(y={ae:i.getInt16(h+68),he:i.getInt16(h+70),ce:i.getInt16(h+72),le:i.getUint16(h+74),ue:i.getUint16(h+76)})
|
|
235
235
|
let p=null
|
|
236
|
-
return c&&l&&u&&(p=this.fe(i,l,u)),{de:r,Tt:f,ye:d?.se||null,pe:d?.re||null,we:d?.oe||null,ae:y?.ae||null,he:y?.he||null,ce:y?.ce||null,le:y?.le||null,ue:y?.ue||null,ge:p}}static ve(t){const i=new DataView(t),n=e(i),s=n.get(z)?.offset??0,r=n.get(
|
|
236
|
+
return c&&l&&u&&(p=this.fe(i,l,u)),{de:r,Tt:f,ye:d?.se||null,pe:d?.re||null,we:d?.oe||null,ae:y?.ae||null,he:y?.he||null,ce:y?.ce||null,le:y?.le||null,ue:y?.ue||null,ge:p}}static ve(t){const i=new DataView(t),n=e(i),s=n.get(z)?.offset??0,r=n.get(R)?.offset??0,o=n.get($)?.offset??0,a=new Set,h={}
|
|
237
237
|
try{if(s){const t=this.me(i,s,o)
|
|
238
238
|
t.features.forEach(t=>a.add(t)),Object.assign(h,t.names)}if(r){const t=this.me(i,r,o)
|
|
239
239
|
t.features.forEach(t=>a.add(t)),Object.assign(h,t.names)}}catch(t){return}const c=Array.from(a).sort()
|
|
@@ -254,14 +254,14 @@ if(0===o||3===o&&1===a){let t=""
|
|
|
254
254
|
for(let e=0;f.length>e;e+=2)t+=String.fromCharCode(f[e]<<8|f[e+1])
|
|
255
255
|
return t}return new TextDecoder("ascii").decode(f)}return null}catch(t){return null}}static be(t){if(!t||12>t.byteLength)throw Error("Invalid font buffer: too small to be a valid font file")
|
|
256
256
|
const i=new DataView(t),n=i.getUint32(0)
|
|
257
|
-
if(![L,G].includes(n))throw Error("Invalid font format. Expected TTF/OTF
|
|
257
|
+
if(![L,G].includes(n))throw Error("Invalid font format. Expected TTF/OTF/WOFF/WOFF2, got signature: 0x"+n.toString(16))
|
|
258
258
|
const s=e(i),r=s.get($)?.offset??0,o=r?this.Se(i,r):null
|
|
259
259
|
return{u:this._e(i,s,o),features:this.Ee(i,s,o)}}static Se(t,e){const i=new Map,n=t.getUint16(e+2),s=t.getUint16(e+4)
|
|
260
260
|
for(let r=0;n>r;r++){const n=e+6+12*r,o=t.getUint16(n),a=t.getUint16(n+2),h=t.getUint16(n+4),c=t.getUint16(n+6),l=t.getUint16(n+8),u=t.getUint16(n+10);(0===o||3===o&&1033===h)&&(i.has(c)||i.set(c,{offset:e+s+u,length:l,Te:o,Ae:a}))}return i}static Me(t,e,i){if(!e)return null
|
|
261
261
|
const n=e.get(i)
|
|
262
262
|
if(!n)return null
|
|
263
263
|
try{const e=new Uint8Array(t.buffer,n.offset,n.length)
|
|
264
|
-
return 0===n.Te||3===n.Te&&1===n.Ae?
|
|
264
|
+
return 0===n.Te||3===n.Te&&1===n.Ae?j.decode(e):new TextDecoder("ascii").decode(e)}catch{return null}}static _e(t,e,i){const n=e.has(P)||e.has(W),s=e.get(k)?.offset??0,r=e.get(D)?.offset??0,o=e.get(B)?.offset??0,a=e.get(N)?.offset??0,h=e.get(U)?.offset??0,c=s?t.getUint16(s+18):1e3
|
|
265
265
|
let l=null
|
|
266
266
|
r&&(l={se:t.getInt16(r+4),re:t.getInt16(r+6),oe:t.getInt16(r+8)})
|
|
267
267
|
let u=null
|
|
@@ -270,7 +270,7 @@ let f=null
|
|
|
270
270
|
return a&&h&&i&&(f=this.Ie(t,h,i)),{de:n,Tt:c,ye:l?.se||null,pe:l?.re||null,we:l?.oe||null,ae:u?.ae||null,he:u?.he||null,ce:u?.ce||null,le:u?.le||null,ue:u?.ue||null,ge:f}}static Ie(t,e,i){try{if(1>t.getUint16(e))return null
|
|
271
271
|
const n=t.getUint16(e+4),s=t.getUint16(e+6),r=t.getUint32(e+8),o={}
|
|
272
272
|
for(let a=0;s>a;a++){const s=e+r+a*n,h=String.fromCharCode(t.getUint8(s),t.getUint8(s+1),t.getUint8(s+2),t.getUint8(s+3)),c=t.getUint16(s+4),l=this.Me(t,i,c)
|
|
273
|
-
l&&(o[h]=l)}return Object.keys(o).length>0?o:null}catch{return null}}static Ee(t,e,i){const n=e.get(z)?.offset??0,s=e.get(
|
|
273
|
+
l&&(o[h]=l)}return Object.keys(o).length>0?o:null}catch{return null}}static Ee(t,e,i){const n=e.get(z)?.offset??0,s=e.get(R)?.offset??0,r=new Set,o={}
|
|
274
274
|
try{n&&this.Fe(t,n,i,r,o),s&&this.Fe(t,s,i,r,o)}catch{return}if(0!==r.size)return{tags:Array.from(r).sort((t,e)=>t-e).map(this.Le),names:Object.keys(o).length>0?o:{}}}static Fe(t,e,i,n,s){const r=e+t.getUint16(e+6),o=t.getUint16(r)
|
|
275
275
|
for(let e=0;o>e;e++){const o=r+2+6*e,a=t.getUint32(o)
|
|
276
276
|
n.add(a)
|
|
@@ -284,10 +284,11 @@ if(0===f)continue
|
|
|
284
284
|
const d=u+f
|
|
285
285
|
if(0!==t.getUint16(d))continue
|
|
286
286
|
const y=t.getUint16(d+2),p=this.Me(t,i,y)
|
|
287
|
-
p&&(s[String.fromCharCode(a>>24&255,a>>16&255,a>>8&255,255&a)]=p)}}static Le(t){return String.fromCharCode(t>>24&255,t>>16&255,t>>8&255,255&t)}static Ge(t){return null!==t.ae&&null!==t.he?{se:t.ae,re:t.he,oe:0}:null!==t.ye&&null!==t.pe?{se:t.ye,re:t.pe,oe:0}:null!==t.le&&null!==t.ue?{se:t.le,re:-t.ue,oe:0}:{se:Math.round(.8*t.Tt),re:-Math.round(.2*t.Tt),oe:0}}static Oe(t){const e=
|
|
288
|
-
return{se:e.se,re:e.re,oe:e.oe,Tt:t.Tt,Ce:e.se-e.re}}}
|
|
287
|
+
p&&(s[String.fromCharCode(a>>24&255,a>>16&255,a>>8&255,255&a)]=p)}}static Le(t){return String.fromCharCode(t>>24&255,t>>16&255,t>>8&255,255&t)}static Ge(t){return null!==t.ae&&null!==t.he?{se:t.ae,re:t.he,oe:0}:null!==t.ye&&null!==t.pe?{se:t.ye,re:t.pe,oe:0}:null!==t.le&&null!==t.ue?{se:t.le,re:-t.ue,oe:0}:{se:Math.round(.8*t.Tt),re:-Math.round(.2*t.Tt),oe:0}}static Oe(t){const e=H.Ge(t)
|
|
288
|
+
return{se:e.se,re:e.re,oe:e.oe,Tt:t.Tt,Ce:e.se-e.re}}}let V=null
|
|
289
|
+
class q{static ke(t){if(4>t.byteLength)return"ttf/otf"
|
|
289
290
|
const e=new DataView(t).getUint32(0)
|
|
290
|
-
return e===O?"woff":
|
|
291
|
+
return e===O?"woff":e===C?"woff2":"ttf/otf"}static async De(t){const e=new DataView(t),i=new Uint8Array(t)
|
|
291
292
|
if(e.getUint32(0)!==O)throw Error("Not a valid WOFF font")
|
|
292
293
|
const n=e.getUint32(4),s=e.getUint16(12),r=e.getUint32(16)
|
|
293
294
|
if("undefined"==typeof DecompressionStream)throw Error("WOFF fonts require DecompressionStream API (Chrome 80+, Firefox 113+, Safari 16.4+). Please use TTF/OTF fonts or upgrade your browser.")
|
|
@@ -298,35 +299,36 @@ a.setUint16(6,h),a.setUint16(8,Math.floor(Math.log2(s))),a.setUint16(10,16*s-h)
|
|
|
298
299
|
let c=12+16*s
|
|
299
300
|
const l=[]
|
|
300
301
|
for(let t=0;s>t;t++){const i=44+20*t
|
|
301
|
-
l.push({tag:e.getUint32(i),offset:e.getUint32(i+4),length:e.getUint32(i+8),
|
|
302
|
-
const u=await Promise.all(l.map(async t=>{if(t.length===t.
|
|
303
|
-
const e=i.subarray(t.offset,t.offset+t.length),n=await
|
|
304
|
-
if(n.byteLength!==t.
|
|
302
|
+
l.push({tag:e.getUint32(i),offset:e.getUint32(i+4),length:e.getUint32(i+8),Be:e.getUint32(i+12),t:e.getUint32(i+16)})}l.sort((t,e)=>t.tag-e.tag)
|
|
303
|
+
const u=await Promise.all(l.map(async t=>{if(t.length===t.Be)return i.subarray(t.offset,t.offset+t.length)
|
|
304
|
+
const e=i.subarray(t.offset,t.offset+t.length),n=await q.Ne(e)
|
|
305
|
+
if(n.byteLength!==t.Be)throw Error(`Decompression failed: expected ${t.Be} bytes, got ${n.byteLength}`)
|
|
305
306
|
return new Uint8Array(n)}))
|
|
306
307
|
for(let t=0;s>t;t++){const e=l[t],i=12+16*t
|
|
307
|
-
a.setUint32(i,e.tag),a.setUint32(i+4,e.t),a.setUint32(i+8,c),a.setUint32(i+12,e.
|
|
308
|
-
|
|
309
|
-
const
|
|
310
|
-
|
|
311
|
-
|
|
308
|
+
a.setUint32(i,e.tag),a.setUint32(i+4,e.t),a.setUint32(i+8,c),a.setUint32(i+12,e.Be),o.set(u[t],c),c+=e.Be,c+=(4-e.Be%4)%4}return o.buffer.slice(0,c)}static async Ue(t){if(new DataView(t).getUint32(0)!==C)throw Error("Not a valid WOFF2 font")
|
|
309
|
+
if(!V)throw Error("WOFF2 fonts require enabling the decoder. Add to your code:\n import { decode } from 'woff2-decode';\n Text.enableWoff2(decode);")
|
|
310
|
+
return(await V(t)).buffer}static async Ne(t){const e=new ReadableStream({start(e){e.enqueue(t),e.close()}}).pipeThrough(new DecompressionStream("deflate"))
|
|
311
|
+
return new Response(e).arrayBuffer()}}class Y{constructor(t){this.$e=t}async Pe(t,e){if(!t||12>t.byteLength)throw Error("Invalid font buffer: too small to be a valid font file")
|
|
312
|
+
const i=q.ke(t)
|
|
313
|
+
"woff"===i?t=await q.De(t):"woff2"===i&&(t=await q.Ue(t))
|
|
312
314
|
const n=new DataView(t).getUint32(0)
|
|
313
|
-
if(![L,G].includes(n))throw Error("Invalid font format. Expected TTF/OTF
|
|
315
|
+
if(![L,G].includes(n))throw Error("Invalid font format. Expected TTF/OTF/WOFF/WOFF2, got signature: 0x"+n.toString(16))
|
|
314
316
|
const{hb:s,module:r}=await this.$e()
|
|
315
|
-
try{const i=s.
|
|
316
|
-
e&&o.
|
|
317
|
-
const a=n.
|
|
317
|
+
try{const i=s.We(new Uint8Array(t)),n=s.ze(i,0),o=s.Re(n)
|
|
318
|
+
e&&o.je(e)
|
|
319
|
+
const a=n.He(),h=Object.keys(a).length>0,{u:c,features:l}=H.be(t)
|
|
318
320
|
let u
|
|
319
321
|
if(h&&a){u={}
|
|
320
|
-
for(const[t,e]of Object.entries(a))u[t]={...e,name:c.ge?.[t]||null}}return{hb:s,fontBlob:i,face:n,font:o,module:r,upem:c.Tt,u:c,
|
|
321
|
-
class
|
|
322
|
-
return t>0&&this.
|
|
323
|
-
return Math.sqrt(e*e+i*i)}
|
|
324
|
-
return e*e+i*i}equals(t){return this.x===t.x&&this.y===t.y}angle(){return Math.atan2(this.y,this.x)}}class
|
|
325
|
-
return t>0&&this.
|
|
326
|
-
return this.x=this.y*t.z-this.z*t.y,this.y=e,this.z=i,this}
|
|
327
|
-
return Math.sqrt(e*e+i*i+n*n)}
|
|
328
|
-
return e*e+i*i+n*n}equals(t){return this.x===t.x&&this.y===t.y&&this.z===t.z}}class
|
|
329
|
-
var
|
|
322
|
+
for(const[t,e]of Object.entries(a))u[t]={...e,name:c.ge?.[t]||null}}return{hb:s,fontBlob:i,face:n,font:o,module:r,upem:c.Tt,u:c,Ve:e,qe:h,Ye:u,Je:l?.tags,Ke:l?.names,Qe:t}}catch(t){throw c.error("Failed to load font:",t),t}}static Xe(t){try{t.font&&"function"==typeof t.font.destroy&&t.font.destroy(),t.face&&"function"==typeof t.face.destroy&&t.face.destroy(),t.fontBlob&&"function"==typeof t.fontBlob.destroy&&t.fontBlob.destroy()}catch(t){c.error("Error destroying font resources:",t)}}}const J=/^[a-z]{2,3}(?:-[a-z0-9]{2,16})*$/i,K=new Set(["af","as","be","bg","bn","ca","cs","cy","da","de-1996","el-monoton","el-polyton","en-gb","en-us","eo","es","et","eu","fi","fr","fur","ga","gl","gu","hi","hr","hsb","hu","hy","ia","id","is","it","ka","kmr","kn","la","lt","lv","mk","ml","mn-cyrl","mr","mul-ethi","nb","nl","nn","oc","or","pa","pl","pms","pt","rm","ro","ru","sa","sh-cyrl","sh-latn","sk","sl","sq","sr-cyrl","sv","ta","te","th","tk","tr","uk","zh-latn-pinyin"])
|
|
323
|
+
class Q{constructor(t=0,e=0){this.x=t,this.y=e}set(t,e){return this.x=t,this.y=e,this}clone(){return new Q(this.x,this.y)}Ze(t){return this.x=t.x,this.y=t.y,this}add(t){return this.x+=t.x,this.y+=t.y,this}sub(t){return this.x-=t.x,this.y-=t.y,this}multiply(t){return this.x*=t,this.y*=t,this}ti(t){return this.x/=t,this.y/=t,this}length(){return Math.sqrt(this.x*this.x+this.y*this.y)}ei(){return this.x*this.x+this.y*this.y}normalize(){const t=this.length()
|
|
324
|
+
return t>0&&this.ti(t),this}ii(t){return this.x*t.x+this.y*t.y}ni(t){const e=this.x-t.x,i=this.y-t.y
|
|
325
|
+
return Math.sqrt(e*e+i*i)}si(t){const e=this.x-t.x,i=this.y-t.y
|
|
326
|
+
return e*e+i*i}equals(t){return this.x===t.x&&this.y===t.y}angle(){return Math.atan2(this.y,this.x)}}class X{constructor(t=0,e=0,i=0){this.x=t,this.y=e,this.z=i}set(t,e,i){return this.x=t,this.y=e,this.z=i,this}clone(){return new X(this.x,this.y,this.z)}Ze(t){return this.x=t.x,this.y=t.y,this.z=t.z,this}add(t){return this.x+=t.x,this.y+=t.y,this.z+=t.z,this}sub(t){return this.x-=t.x,this.y-=t.y,this.z-=t.z,this}multiply(t){return this.x*=t,this.y*=t,this.z*=t,this}ti(t){return this.x/=t,this.y/=t,this.z/=t,this}length(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z)}ei(){return this.x*this.x+this.y*this.y+this.z*this.z}normalize(){const t=this.length()
|
|
327
|
+
return t>0&&this.ti(t),this}ii(t){return this.x*t.x+this.y*t.y+this.z*t.z}ri(t){const e=this.z*t.x-this.x*t.z,i=this.x*t.y-this.y*t.x
|
|
328
|
+
return this.x=this.y*t.z-this.z*t.y,this.y=e,this.z=i,this}ni(t){const e=this.x-t.x,i=this.y-t.y,n=this.z-t.z
|
|
329
|
+
return Math.sqrt(e*e+i*i+n*n)}si(t){const e=this.x-t.x,i=this.y-t.y,n=this.z-t.z
|
|
330
|
+
return e*e+i*i+n*n}equals(t){return this.x===t.x&&this.y===t.y&&this.z===t.z}}class Z{constructor(){this.cache=new Map}get(t){return this.cache.get(t)}has(t){return this.cache.has(t)}set(t,e){this.cache.set(t,e)}delete(t){return this.cache.delete(t)}clear(){this.cache.clear()}get size(){return this.cache.size}keys(){return Array.from(this.cache.keys())}getStats(){return{size:this.cache.size}}}const tt=new Z,et=new Z,it=new Z,nt=new Z
|
|
331
|
+
var st="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},rt={exports:{}}
|
|
330
332
|
!(function(t){function e(t,e){return t.b===e.b&&t.a===e.a}function i(t,e){return e.b>t.b||t.b===e.b&&e.a>=t.a}function n(t,e,i){var n=e.b-t.b,s=i.b-e.b
|
|
331
333
|
return n+s>0?s>n?e.a-t.a+n/(n+s)*(t.a-i.a):e.a-i.a+s/(n+s)*(i.a-t.a):0}function s(t,e,i){var n=e.b-t.b,s=i.b-e.b
|
|
332
334
|
return n+s>0?(e.a-i.a)*n+(e.a-t.a)*s:0}function r(t,e){return e.a>t.a||t.a===e.a&&e.b>=t.b}function o(t,e,i){var n=e.a-t.a,s=i.a-e.a
|
|
@@ -336,22 +338,22 @@ return v(e,t.c),v(e.b,t.c),m(e,t.a),e}function f(t,e){var i=!1,n=!1
|
|
|
336
338
|
t!==e&&(e.a!==t.a&&(n=!0,b(e.a,t.a)),e.d!==t.d&&(i=!0,S(e.d,t.d)),g(e,t),n||(v(e,t.a),t.a.c=t),i||(m(e,t.d),t.d.a=t))}function d(t){var e=t.b,i=!1
|
|
337
339
|
t.d!==t.b.d&&(i=!0,S(t.d,t.b.d)),t.c===t?b(t.a,null):(t.b.d.a=K(t),t.a.c=t.c,g(t,K(t)),i||m(t,t.d)),e.c===e?(b(e.a,null),S(e.d,null)):(t.d.a=K(e),e.a.c=e.c,g(e,K(e))),x(t)}function y(t){var e=w(t),i=e.b
|
|
338
340
|
return g(e,t.e),e.a=t.b.a,v(i,e.a),e.d=i.d=t.d,e=e.b,g(t.b,K(t.b)),g(t.b,e),t.b.a=e.a,e.b.a.c=e.b,e.b.d=t.b.d,e.f=t.f,e.b.f=t.b.f,e}function p(t,e){var i=!1,n=w(t),s=n.b
|
|
339
|
-
return e.d!==t.d&&(i=!0,S(e.d,t.d)),g(n,t.e),g(s,e),n.a=t.b.a,s.a=e.a,n.d=s.d=t.d,t.d.a=s,i||m(n,t.d),n}function w(t){var e=new J,i=new J,n=t.b.
|
|
340
|
-
return i.
|
|
341
|
+
return e.d!==t.d&&(i=!0,S(e.d,t.d)),g(n,t.e),g(s,e),n.a=t.b.a,s.a=e.a,n.d=s.d=t.d,t.d.a=s,i||m(n,t.d),n}function w(t){var e=new J,i=new J,n=t.b.oi
|
|
342
|
+
return i.oi=n,n.b.oi=e,e.oi=t,t.b.oi=i,e.b=i,e.c=e,e.e=i,i.b=e,i.c=i,i.e=e}function g(t,e){var i=t.c,n=e.c
|
|
341
343
|
i.b.e=e,n.b.e=t,t.c=n,e.c=i}function v(t,e){var i=e.f,n=new X(e,i)
|
|
342
344
|
i.e=n,e.f=n,i=n.c=t
|
|
343
345
|
do{i.a=n,i=i.c}while(i!==t)}function m(t,e){var i=e.d,n=new Y(e,i)
|
|
344
346
|
i.b=n,e.d=n,n.a=t,n.c=e.c,i=t
|
|
345
|
-
do{i.d=n,i=i.e}while(i!==t)}function x(t){var e=t.
|
|
346
|
-
e.b.
|
|
347
|
+
do{i.d=n,i=i.e}while(i!==t)}function x(t){var e=t.oi
|
|
348
|
+
e.b.oi=t=t.b.oi,t.b.oi=e}function b(t,e){var i=t.c,n=i
|
|
347
349
|
do{n.a=e,n=n.c}while(n!==i);(n=t.e).f=i=t.f,i.e=n}function S(t,e){var i=t.a,n=i
|
|
348
350
|
do{n.d=e,n=n.e}while(n!==i);(n=t.b).d=i=t.d,i.b=n}function _(t){var e=0
|
|
349
|
-
return Math.abs(t[1])>Math.abs(t[0])&&(e=1),Math.abs(t[2])>Math.abs(t[e])&&(e=2),e}function E(t,e){t.f+=e.f,t.b.f+=e.b.f}function T(t,e,r){return r=r.a,(e=e.a).b.a===(t=t.a)?r.b.a===t?i(e.a,r.a)?0>=s(r.b.a,e.a,r.a):s(e.b.a,r.a,e.a)>=0:0>=s(r.b.a,t,r.a):r.b.a===t?s(e.b.a,t,e.a)>=0:(e=n(e.b.a,t,e.a))>=(t=n(r.b.a,t,r.a))}function A(t){t.a.
|
|
351
|
+
return Math.abs(t[1])>Math.abs(t[0])&&(e=1),Math.abs(t[2])>Math.abs(t[e])&&(e=2),e}function E(t,e){t.f+=e.f,t.b.f+=e.b.f}function T(t,e,r){return r=r.a,(e=e.a).b.a===(t=t.a)?r.b.a===t?i(e.a,r.a)?0>=s(r.b.a,e.a,r.a):s(e.b.a,r.a,e.a)>=0:0>=s(r.b.a,t,r.a):r.b.a===t?s(e.b.a,t,e.a)>=0:(e=n(e.b.a,t,e.a))>=(t=n(r.b.a,t,r.a))}function A(t){t.a.ai=null
|
|
350
352
|
var e=t.e
|
|
351
|
-
e.a.c=e.c,e.c.a=e.a,t.e=null}function M(t,e){d(t.a),t.c=!1,t.a=e,e.
|
|
353
|
+
e.a.c=e.c,e.c.a=e.a,t.e=null}function M(t,e){d(t.a),t.c=!1,t.a=e,e.ai=t}function I(t){var e=t.a.a
|
|
352
354
|
do{t=ut(t)}while(t.a.a===e)
|
|
353
355
|
return t.c&&(M(t,e=p(lt(t).a.b,t.a.e)),t=ut(t)),t}function F(t,e,i){var n=new ct
|
|
354
|
-
return n.a=i,n.e=R(t.f,e.e,n),i.
|
|
356
|
+
return n.a=i,n.e=R(t.f,e.e,n),i.ai=n}function L(t,e){switch(t.s){case 100130:return!!(1&e)
|
|
355
357
|
case 100131:return 0!==e
|
|
356
358
|
case 100132:return e>0
|
|
357
359
|
case 100133:return 0>e
|
|
@@ -361,53 +363,53 @@ var n=lt(t),s=n.a
|
|
|
361
363
|
if(s.a!==e.a){if(!n.c){G(t)
|
|
362
364
|
break}M(n,s=p(e.c.b,s.b))}e.c!==s&&(f(K(s),s),f(e,s)),G(t),e=n.a,t=n}return e}function C(t,e,i,n,s,r){var o=!0
|
|
363
365
|
do{F(t,e,i.b),i=i.c}while(i!==n)
|
|
364
|
-
for(null===s&&(s=lt(e).a.b.c);(i=(n=lt(e)).a.b).a===s.a;)i.c!==s&&(f(K(i),i),f(K(s),i)),n.f=e.f-i.f,n.d=L(t,n.f),e.b=!0,!o&&
|
|
365
|
-
e.b=!0,r
|
|
366
|
-
e.d=null,e.d=t.
|
|
367
|
-
n[0]=e.a.d,n[1]=i.a.d,k(t,e.a,n,[.5,.5,0,0],!1),f(e,i)}function
|
|
368
|
-
n[s]=.5*o/(r+o),n[a]=.5*r/(r+o),t.g[0]+=n[s]*e.g[0]+n[a]*i.g[0],t.g[1]+=n[s]*e.g[1]+n[a]*i.g[1],t.g[2]+=n[s]*e.g[2]+n[a]*i.g[2]}function
|
|
366
|
+
for(null===s&&(s=lt(e).a.b.c);(i=(n=lt(e)).a.b).a===s.a;)i.c!==s&&(f(K(i),i),f(K(s),i)),n.f=e.f-i.f,n.d=L(t,n.f),e.b=!0,!o&&N(t,e)&&(E(i,s),A(e),d(s)),o=!1,e=n,s=i
|
|
367
|
+
e.b=!0,r&&$(t,e)}function k(t,e,i,n,s){var r=[e.g[0],e.g[1],e.g[2]]
|
|
368
|
+
e.d=null,e.d=t.hi&&t.hi(r,i,n,t.c)||null,null===e.d&&(s?t.n||(q(t,100156),t.n=!0):e.d=i[0])}function D(t,e,i){var n=[null,null,null,null]
|
|
369
|
+
n[0]=e.a.d,n[1]=i.a.d,k(t,e.a,n,[.5,.5,0,0],!1),f(e,i)}function B(t,e,i,n,s){var r=Math.abs(e.b-t.b)+Math.abs(e.a-t.a),o=Math.abs(i.b-t.b)+Math.abs(i.a-t.a),a=s+1
|
|
370
|
+
n[s]=.5*o/(r+o),n[a]=.5*r/(r+o),t.g[0]+=n[s]*e.g[0]+n[a]*i.g[0],t.g[1]+=n[s]*e.g[1]+n[a]*i.g[1],t.g[2]+=n[s]*e.g[2]+n[a]*i.g[2]}function N(t,n){var r=lt(n),o=n.a,a=r.a
|
|
369
371
|
if(i(o.a,a.a)){if(s(a.b.a,o.a,a.a)>0)return!1
|
|
370
372
|
if(e(o.a,a.a)){if(o.a!==a.a){r=t.e
|
|
371
|
-
var h=o.a.
|
|
373
|
+
var h=o.a.oi
|
|
372
374
|
if(0>h)for(r.c[-(h+1)]=null;r.a>0&&null===r.c[r.d[r.a-1]];)--r.a
|
|
373
375
|
else{var c=(r=r.b).d,l=r.e,u=r.c,d=u[h]
|
|
374
|
-
c[d]=c[r.a],u[c[d]]=d,d<=--r.a&&(d>1?i(l[c[d>>1]],l[c[d]])?at(r,d):ht(r,d):at(r,d)),l[h]=null,u[h]=r.b,r.b=h}
|
|
375
|
-
ut(n).b=n.b=!0,y(o.b),f(K(a),o)}return!0}function
|
|
376
|
+
c[d]=c[r.a],u[c[d]]=d,d<=--r.a&&(d>1?i(l[c[d>>1]],l[c[d]])?at(r,d):ht(r,d):at(r,d)),l[h]=null,u[h]=r.b,r.b=h}D(t,K(a),o)}}else y(a.b),f(o,K(a)),n.b=r.b=!0}else{if(0>s(o.b.a,a.a,o.a))return!1
|
|
377
|
+
ut(n).b=n.b=!0,y(o.b),f(K(a),o)}return!0}function U(t,h){var c=lt(h),u=h.a,d=c.a,p=u.a,w=d.a,g=u.b.a,v=d.b.a,m=new X
|
|
376
378
|
if(s(g,t.a,p),s(v,t.a,w),p===w||Math.min(p.a,g.a)>Math.max(w.a,v.a))return!1
|
|
377
379
|
if(i(p,w)){if(s(v,p,w)>0)return!1}else if(0>s(g,w,p))return!1
|
|
378
380
|
var x,b,S=g,_=p,E=v,T=w
|
|
379
|
-
if(i(S,_)||(x=S,S=_,_=x),i(E,T)||(x=E,E=T,T=x),i(S,E)||(x=S,S=E,E=x,x=_,_=T,T=x),i(E,_)?i(_,T)?(0>(x=n(S,E,_))+(b=n(E,_,T))&&(x=-x,b=-b),m.b=l(x,E.b,b,_.b)):(0>(x=s(S,E,_))+(b=-s(S,T,_))&&(x=-x,b=-b),m.b=l(x,E.b,b,T.b)):m.b=(E.b+_.b)/2,r(S,_)||(x=S,S=_,_=x),r(E,T)||(x=E,E=T,T=x),r(S,E)||(x=S,S=E,E=x,x=_,_=T,T=x),r(E,_)?r(_,T)?(0>(x=o(S,E,_))+(b=o(E,_,T))&&(x=-x,b=-b),m.a=l(x,E.a,b,_.a)):(0>(x=a(S,E,_))+(b=-a(S,T,_))&&(x=-x,b=-b),m.a=l(x,E.a,b,T.a)):m.a=(E.a+_.a)/2,i(m,t.a)&&(m.b=t.a.b,m.a=t.a.a),S=i(p,w)?p:w,i(S,m)&&(m.b=S.b,m.a=S.a),e(m,p)||e(m,w))return
|
|
381
|
+
if(i(S,_)||(x=S,S=_,_=x),i(E,T)||(x=E,E=T,T=x),i(S,E)||(x=S,S=E,E=x,x=_,_=T,T=x),i(E,_)?i(_,T)?(0>(x=n(S,E,_))+(b=n(E,_,T))&&(x=-x,b=-b),m.b=l(x,E.b,b,_.b)):(0>(x=s(S,E,_))+(b=-s(S,T,_))&&(x=-x,b=-b),m.b=l(x,E.b,b,T.b)):m.b=(E.b+_.b)/2,r(S,_)||(x=S,S=_,_=x),r(E,T)||(x=E,E=T,T=x),r(S,E)||(x=S,S=E,E=x,x=_,_=T,T=x),r(E,_)?r(_,T)?(0>(x=o(S,E,_))+(b=o(E,_,T))&&(x=-x,b=-b),m.a=l(x,E.a,b,_.a)):(0>(x=a(S,E,_))+(b=-a(S,T,_))&&(x=-x,b=-b),m.a=l(x,E.a,b,T.a)):m.a=(E.a+_.a)/2,i(m,t.a)&&(m.b=t.a.b,m.a=t.a.a),S=i(p,w)?p:w,i(S,m)&&(m.b=S.b,m.a=S.a),e(m,p)||e(m,w))return N(t,h),!1
|
|
380
382
|
if(!e(g,t.a)&&s(g,t.a,m)>=0||!e(v,t.a)&&0>=s(v,t.a,m)){if(v===t.a)return y(u.b),f(d.b,u),u=lt(h=I(h)).a,O(t,lt(h),c),C(t,h,K(u),u,u,!0),!0
|
|
381
383
|
if(g===t.a){y(d.b),f(u.e,K(d)),w=(p=c=h).a.b.a
|
|
382
384
|
do{p=ut(p)}while(p.a.b.a===w)
|
|
383
|
-
return p=lt(h=p).a.b.c,c.a=K(d),C(t,h,(d=O(t,c,null)).c,u.b.c,p,!0),!0}return s(g,t.a,m)>=0&&(ut(h).b=h.b=!0,y(u.b),u.a.b=t.a.b,u.a.a=t.a.a),0>=s(v,t.a,m)&&(h.b=c.b=!0,y(d.b),d.a.b=t.a.b,d.a.a=t.a.a),!1}return y(u.b),y(d.b),f(K(d),u),u.a.b=m.b,u.a.a=m.a,u.a.
|
|
385
|
+
return p=lt(h=p).a.b.c,c.a=K(d),C(t,h,(d=O(t,c,null)).c,u.b.c,p,!0),!0}return s(g,t.a,m)>=0&&(ut(h).b=h.b=!0,y(u.b),u.a.b=t.a.b,u.a.a=t.a.a),0>=s(v,t.a,m)&&(h.b=c.b=!0,y(d.b),d.a.b=t.a.b,d.a.a=t.a.a),!1}return y(u.b),y(d.b),f(K(d),u),u.a.b=m.b,u.a.a=m.a,u.a.oi=tt(t.e,u.a),d=[0,0,0,0],m=[p.d,g.d,w.d,v.d],(u=u.a).g[0]=u.g[1]=u.g[2]=0,B(u,p,g,d,0),B(u,w,v,d,2),k(t,u,m,d,!0),ut(h).b=h.b=c.b=!0,!1}function $(t,e){for(var n=lt(e);;){for(;n.b;)e=n,n=lt(n)
|
|
384
386
|
if(!e.b&&(n=e,null===(e=ut(e))||!e.b))break
|
|
385
387
|
e.b=!1
|
|
386
388
|
var r,o=e.a,a=n.a
|
|
387
389
|
if(r=o.b.a!==a.b.a)t:{var h=lt(r=e),c=r.a,l=h.a,u=void 0
|
|
388
390
|
if(i(c.b.a,l.b.a)){if(0>s(c.b.a,l.b.a,c.a)){r=!1
|
|
389
391
|
break t}ut(r).b=r.b=!0,u=y(c),f(l.b,u),u.d.c=r.d}else{if(s(l.b.a,c.b.a,l.a)>0){r=!1
|
|
390
|
-
break t}r.b=h.b=!0,u=y(l),f(c.e,l.b),u.b.d.c=r.d}r=!0}if(r&&(n.c?(A(n),d(a),a=(n=lt(e)).a):e.c&&(A(e),d(o),o=(e=ut(n)).a)),o.a!==a.a)if(o.b.a===a.b.a||e.c||n.c||o.b.a!==t.a&&a.b.a!==t.a)
|
|
391
|
-
else if(
|
|
392
|
+
break t}r.b=h.b=!0,u=y(l),f(c.e,l.b),u.b.d.c=r.d}r=!0}if(r&&(n.c?(A(n),d(a),a=(n=lt(e)).a):e.c&&(A(e),d(o),o=(e=ut(n)).a)),o.a!==a.a)if(o.b.a===a.b.a||e.c||n.c||o.b.a!==t.a&&a.b.a!==t.a)N(t,e)
|
|
393
|
+
else if(U(t,e))break
|
|
392
394
|
o.a===a.a&&o.b.a===a.b.a&&(E(a,o),A(e),d(o),e=ut(n))}}function P(t,n){t.a=n
|
|
393
|
-
for(var r=n.c;null===r.
|
|
395
|
+
for(var r=n.c;null===r.ai;)if((r=r.c)===n.c){r=t
|
|
394
396
|
var o=n;(u=new ct).a=o.c.b
|
|
395
397
|
var a=(l=r.f).a
|
|
396
398
|
do{a=a.a}while(null!==a.b&&!l.c(l.b,u,a.b))
|
|
397
399
|
if(a=(c=lt(l=a.b)).a,0===s((u=l.a).b.a,o,u.a))e((u=l.a).a,o)||e(u.b.a,o)||(y(u.b),l.c&&(d(u.c),l.c=!1),f(o.c,u),P(r,o))
|
|
398
400
|
else{var h=i(a.b.a,u.b.a)?l:c,c=void 0
|
|
399
|
-
l.d||h.c?(c=h===l?p(o.c.b,u.e):p(a.b.c.b,o.c).b,h.c?M(h,c):(u=r,(l=F(r,l,c)).f=ut(l).f+l.a.f,l.d=L(u,l.f)),P(r,o)):C(r,l,o.c,o.c,null,!0)}return}if(l=(u=lt(r=I(r.
|
|
400
|
-
n.a.b=dt,n.a.a=e,n.b.a.b=-dt,n.b.a.a=e,t.a=n.b.a,i.a=n,i.f=0,i.d=!1,i.c=!1,i.
|
|
401
|
-
return t=new j(i,e.a,e),e.a.c=t,e.a=t}function j(t,e,i){this.b=t||null,this.a=e||this,this.c=i||this}function H(){this.d=yt,this.
|
|
401
|
+
l.d||h.c?(c=h===l?p(o.c.b,u.e):p(a.b.c.b,o.c).b,h.c?M(h,c):(u=r,(l=F(r,l,c)).f=ut(l).f+l.a.f,l.d=L(u,l.f)),P(r,o)):C(r,l,o.c,o.c,null,!0)}return}if(l=(u=lt(r=I(r.ai))).a,(u=O(t,u,null)).c===l){var l,u=(l=u).c,w=(a=lt(r),!1);(c=r.a).b.a!==(h=a.a).b.a&&U(t,r),e(c.a,t.a)&&(f(K(u),c),u=lt(r=I(r)).a,O(t,lt(r),a),w=!0),e(h.a,t.a)&&(f(l,K(h)),l=O(t,a,null),w=!0),w?C(t,r,l.c,u,u,!0):(o=i(h.a,c.a)?K(h):c,C(t,r,o=p(l.c.b,o),o.c,o.c,!1),o.b.ai.c=!0,$(t,r))}else C(t,r,u.c,l,l,!0)}function W(t,e){var i=new ct,n=u(t.b)
|
|
402
|
+
n.a.b=dt,n.a.a=e,n.b.a.b=-dt,n.b.a.a=e,t.a=n.b.a,i.a=n,i.f=0,i.d=!1,i.c=!1,i.oi=!0,i.b=!1,n=R(n=t.f,n.a,i),i.e=n}function z(t){this.a=new j,this.b=t,this.c=T}function R(t,e,i){do{e=e.c}while(null!==e.b&&!t.c(t.b,e.b,i))
|
|
403
|
+
return t=new j(i,e.a,e),e.a.c=t,e.a=t}function j(t,e,i){this.b=t||null,this.a=e||this,this.c=i||this}function H(){this.d=yt,this.ci=this.b=this.li=null,this.ui=[0,0,0],this.s=100130,this.n=!1,this.hi=this.a=this.e=this.f=null,this.fi=!1,this.c=this.r=this.ai=this.di=this.yi=this.oi=null}function V(t,e){if(t.d!==e)for(;t.d!==e;)if(e>t.d)switch(t.d){case yt:q(t,100151),t.pi(null)
|
|
402
404
|
break
|
|
403
|
-
case 1:q(t,100152),t.
|
|
405
|
+
case 1:q(t,100152),t.wi()}else switch(t.d){case 2:q(t,100154),t.gi()
|
|
404
406
|
break
|
|
405
|
-
case 1:q(t,100153),t.w()}}function q(t,e){t.
|
|
406
|
-
return 2*s>n.f&&(n.f*=2,n.c=
|
|
407
|
+
case 1:q(t,100153),t.w()}}function q(t,e){t.ci&&t.ci(e,t.c)}function Y(t,e){this.b=t||this,this.d=e||this,this.a=null,this.c=!1}function J(){this.oi=this,this.ai=this.d=this.a=this.e=this.c=this.b=null,this.f=0}function K(t){return t.b.e}function Q(){this.c=new X,this.a=new Y,this.b=new J,this.d=new J,this.b.b=this.d,this.d.b=this.b}function X(t,e){this.e=t||this,this.f=e||this,this.d=this.c=null,this.g=[0,0,0],this.oi=this.a=this.b=0}function Z(){this.c=[],this.d=null,this.a=0,this.e=!1,this.b=new it}function tt(t,e){if(t.e){var i,n=t.b,s=++n.a
|
|
408
|
+
return 2*s>n.f&&(n.f*=2,n.c=nt(n.c,n.f+1)),0===n.b?i=s:(i=n.b,n.b=n.c[n.b]),n.e[i]=e,n.c[i]=s,n.d[s]=i,n.oi&&ht(n,s),i}return n=t.a++,t.c[n]=e,-(n+1)}function et(t){if(0===t.a)return ot(t.b)
|
|
407
409
|
var e=t.c[t.d[t.a-1]]
|
|
408
410
|
if(0!==t.b.a&&i(rt(t.b),e))return ot(t.b)
|
|
409
411
|
do{--t.a}while(t.a>0&&null===t.c[t.d[t.a-1]])
|
|
410
|
-
return e}function
|
|
412
|
+
return e}function it(){this.d=nt([0],33),this.e=[null,null],this.c=[0,0],this.a=0,this.f=32,this.b=0,this.oi=!1,this.d[1]=1}function nt(t,e){for(var i=Array(e),n=0;t.length>n;n++)i[n]=t[n]
|
|
411
413
|
for(;e>n;n++)i[n]=0
|
|
412
414
|
return i}function rt(t){return t.e[t.d[1]]}function ot(t){var e=t.d,i=t.e,n=t.c,s=e[1],r=i[s]
|
|
413
415
|
return t.a>0&&(e[1]=e[t.a],n[e[1]]=1,i[s]=null,n[s]=t.b,t.b=s,--t.a>0&&at(t,1)),r}function at(t,e){for(var n=t.d,s=t.e,r=t.c,o=e,a=n[o];;){var h=o<<1
|
|
@@ -416,110 +418,110 @@ var c=n[h]
|
|
|
416
418
|
if(h>t.a||i(s[a],s[c])){n[o]=a,r[a]=o
|
|
417
419
|
break}n[o]=c,r[c]=o,o=h}}function ht(t,e){for(var n=t.d,s=t.e,r=t.c,o=e,a=n[o];;){var h=o>>1,c=n[h]
|
|
418
420
|
if(0===h||i(s[c],s[a])){n[o]=a,r[a]=o
|
|
419
|
-
break}n[o]=c,r[c]=o,o=h}}function ct(){this.e=this.a=null,this.f=0,this.c=this.b=this.
|
|
421
|
+
break}n[o]=c,r[c]=o,o=h}}function ct(){this.e=this.a=null,this.f=0,this.c=this.b=this.oi=this.d=!1}function lt(t){return t.e.c.b}function ut(t){return t.e.a.b}var ft,dt=4e150,yt=0;(ft=H.prototype).x=function(){V(this,yt)},ft.B=function(t,e){switch(t){case 100142:return
|
|
420
422
|
case 100140:switch(e){case 100130:case 100131:case 100132:case 100133:case 100134:return void(this.s=e)}break
|
|
421
|
-
case 100141:return void(this.
|
|
423
|
+
case 100141:return void(this.fi=!!e)
|
|
422
424
|
default:return void q(this,100900)}q(this,100901)},ft.y=function(t){switch(t){case 100142:return 0
|
|
423
425
|
case 100140:return this.s
|
|
424
|
-
case 100141:return this.
|
|
425
|
-
default:q(this,100900)}return!1},ft.A=function(t,e,i){this.
|
|
426
|
-
switch(t){case 100100:case 100106:this.
|
|
426
|
+
case 100141:return this.fi
|
|
427
|
+
default:q(this,100900)}return!1},ft.A=function(t,e,i){this.ui[0]=t,this.ui[1]=e,this.ui[2]=i},ft.z=function(t,e){var i=e||null
|
|
428
|
+
switch(t){case 100100:case 100106:this.oi=i
|
|
427
429
|
break
|
|
428
|
-
case 100104:case 100110:this.
|
|
430
|
+
case 100104:case 100110:this.yi=i
|
|
429
431
|
break
|
|
430
|
-
case 100101:case 100107:this.
|
|
432
|
+
case 100101:case 100107:this.di=i
|
|
431
433
|
break
|
|
432
|
-
case 100102:case 100108:this.
|
|
434
|
+
case 100102:case 100108:this.ai=i
|
|
433
435
|
break
|
|
434
|
-
case 100103:case 100109:this.
|
|
436
|
+
case 100103:case 100109:this.ci=i
|
|
435
437
|
break
|
|
436
|
-
case 100105:case 100111:this.
|
|
438
|
+
case 100105:case 100111:this.hi=i
|
|
437
439
|
break
|
|
438
440
|
case 100112:this.r=i
|
|
439
441
|
break
|
|
440
442
|
default:q(this,100900)}},ft.C=function(t,e){var i=!1,n=[0,0,0]
|
|
441
443
|
V(this,2)
|
|
442
|
-
for(var s=0;3>s;++s){var r=t[s];-1e150>r&&(r=-1e150,i=!0),r>1e150&&(r=1e150,i=!0),n[s]=r}i&&q(this,100155),null===(i=this.
|
|
443
|
-
var t=!1,n=[u=this.
|
|
444
|
+
for(var s=0;3>s;++s){var r=t[s];-1e150>r&&(r=-1e150,i=!0),r>1e150&&(r=1e150,i=!0),n[s]=r}i&&q(this,100155),null===(i=this.li)?f(i=u(this.b),i.b):(y(i),i=i.e),i.a.d=e,i.a.g[0]=n[0],i.a.g[1]=n[1],i.a.g[2]=n[2],i.f=1,i.b.f=-1,this.li=i},ft.pi=function(t){V(this,yt),this.d=1,this.b=new Q,this.c=t},ft.wi=function(){V(this,1),this.d=2,this.li=null},ft.gi=function(){V(this,2),this.d=1},ft.w=function(){V(this,1),this.d=yt
|
|
445
|
+
var t=!1,n=[u=this.ui[0],r=this.ui[1],a=this.ui[2]]
|
|
444
446
|
if(0===u&&0===r&&0===a){for(var r=[-2e150,-2e150,-2e150],o=[2e150,2e150,2e150],a=[],l=[],u=(t=this.b.c).e;u!==t;u=u.e)for(var f=0;3>f;++f){var y=u.g[f]
|
|
445
447
|
o[f]>y&&(o[f]=y,l[f]=u),y>r[f]&&(r[f]=y,a[f]=u)}if(u=0,r[1]-o[1]>r[0]-o[0]&&(u=1),r[2]-o[2]>r[u]-o[u]&&(u=2),r[u]>o[u]){for(r=0,o=l[u],l=[0,0,0],o=[o.g[0]-(a=a[u]).g[0],o.g[1]-a.g[1],o.g[2]-a.g[2]],f=[0,0,0],u=t.e;u!==t;u=u.e)f[0]=u.g[0]-a.g[0],f[1]=u.g[1]-a.g[1],f[2]=u.g[2]-a.g[2],l[0]=o[1]*f[2]-o[2]*f[1],l[1]=o[2]*f[0]-o[0]*f[2],l[2]=o[0]*f[1]-o[1]*f[0],(y=l[0]*l[0]+l[1]*l[1]+l[2]*l[2])>r&&(r=y,n[0]=l[0],n[1]=l[1],n[2]=l[2])
|
|
446
448
|
0>=r&&(n[0]=n[1]=n[2]=0,n[_(o)]=1)}else n[0]=0,n[1]=0,n[2]=1
|
|
447
449
|
t=!0}for(r=((l=_(n))+1)%3,a=(l+2)%3,l=n[l]>0?1:-1,n=(u=this.b.c).e;n!==u;n=n.e)n.b=n.g[r],n.a=l*n.g[a]
|
|
448
450
|
if(t){for(n=0,u=(t=this.b.a).b;u!==t;u=u.b)if((r=u.a).f>0)do{n+=(r.a.b-r.b.a.b)*(r.a.a+r.b.a.a),r=r.e}while(r!==u.a)
|
|
449
|
-
if(0>n)for(t=(n=this.b.c).e;t!==n;t=t.e)t.a=-t.a}for(this.n=!1,u=(n=this.b.b).
|
|
450
|
-
for(this.e=n=new Z,u=(t=this.b.c).e;u!==t;u=u.e)u.
|
|
451
|
+
if(0>n)for(t=(n=this.b.c).e;t!==n;t=t.e)t.a=-t.a}for(this.n=!1,u=(n=this.b.b).oi;u!==n;u=t)t=u.oi,r=u.e,e(u.a,u.b.a)&&u.e.e!==u&&(D(this,r,u),d(u),r=(u=r).e),r.e===u&&(r!==u&&(r!==t&&r!==t.b||(t=t.oi),d(r)),u!==t&&u!==t.b||(t=t.oi),d(u))
|
|
452
|
+
for(this.e=n=new Z,u=(t=this.b.c).e;u!==t;u=u.e)u.oi=tt(n,u)
|
|
451
453
|
for((t=>{t.d=[]
|
|
452
454
|
for(var e=0;t.a>e;e++)t.d[e]=e
|
|
453
455
|
t.d.sort((t=>(e,n)=>i(t[e],t[n])?1:-1)(t.c)),t.e=!0,(t=>{for(var e=t.a;e>=1;--e)at(t,e)
|
|
454
|
-
t.
|
|
456
|
+
t.oi=!0})(t.b)})(n),this.f=new z(this),W(this,-dt),W(this,dt);null!==(n=et(this.e));){for(;;){t:if(u=this.e,0===u.a)t=rt(u.b)
|
|
455
457
|
else if(t=u.c[u.d[u.a-1]],0!==u.b.a&&(u=rt(u.b),i(u,t))){t=u
|
|
456
458
|
break t}if(null===t||!e(t,n))break
|
|
457
|
-
t=et(this.e),
|
|
459
|
+
t=et(this.e),D(this,n.c,t.c)}P(this,n)}for(this.a=this.f.a.a.b.a.a,n=0;null!==(t=this.f.a.a.b);)t.oi||++n,A(t)
|
|
458
460
|
for(this.f=null,(n=this.e).b=null,n.d=null,this.e=n.c=null,u=(n=this.b).a.b;u!==n.a;u=t)t=u.b,(u=u.a).e.e===u&&(E(u.c,u),d(u))
|
|
459
|
-
if(!this.n){if(n=this.b,this.
|
|
461
|
+
if(!this.n){if(n=this.b,this.fi)for(u=n.b.oi;u!==n.b;u=t)t=u.oi,u.b.d.c!==u.d.c?u.f=u.d.c?1:-1:d(u)
|
|
460
462
|
else for(u=n.a.b;u!==n.a;u=t)if(t=u.b,u.c){for(u=u.a;i(u.b.a,u.a);u=u.c.b);for(;i(u.a,u.b.a);u=u.e);for(r=u.c.b,a=void 0;u.e!==r;)if(i(u.b.a,r.a)){for(;r.e!==u&&(h(r.e)||0>=s(r.a,r.b.a,r.e.b.a));)r=(a=p(r.e,r)).b
|
|
461
463
|
r=r.c.b}else{for(;r.e!==u&&(c(u.c.b)||s(u.b.a,u.a,u.c.b.a)>=0);)u=(a=p(u,u.c.b)).b
|
|
462
|
-
u=u.e}for(;r.e.e!==u;)r=(a=p(r.e,r)).b}if(this.
|
|
463
|
-
do{this.
|
|
464
|
-
this.
|
|
465
|
-
do{t&&r!==(o=l.b.d.c?0:1)&&(r=o,this.
|
|
464
|
+
u=u.e}for(;r.e.e!==u;)r=(a=p(r.e,r)).b}if(this.oi||this.ai||this.di||this.yi)if(this.fi){for(t=(n=this.b).a.b;t!==n.a;t=t.b)if(t.c){this.oi&&this.oi(2,this.c),u=t.a
|
|
465
|
+
do{this.di&&this.di(u.a.d,this.c),u=u.e}while(u!==t.a)
|
|
466
|
+
this.ai&&this.ai(this.c)}}else{for(t=!!this.yi,u=!1,r=-1,a=(n=this.b).a.d;a!==n.a;a=a.d)if(a.c){u||(this.oi&&this.oi(4,this.c),u=!0),l=a.a
|
|
467
|
+
do{t&&r!==(o=l.b.d.c?0:1)&&(r=o,this.yi&&this.yi(!!r,this.c)),this.di&&this.di(l.a.d,this.c),l=l.e}while(l!==a.a)}u&&this.ai&&this.ai(this.c)}if(this.r){for(u=(n=this.b).a.b;u!==n.a;u=t)if(t=u.b,!u.c){a=(r=u.a).e,l=void 0
|
|
466
468
|
do{a=(l=a).e,l.d=null,null===l.b.d&&(l.c===l?b(l.a,null):(l.a.c=l.c,g(l,K(l))),(o=l.b).c===o?b(o.a,null):(o.a.c=o.c,g(o,K(o))),x(l))}while(l!==r)
|
|
467
|
-
r=u.d,(u=u.b).d=r,r.b=u}return this.r(this.b),void(this.c=this.b=null)}}this.b=this.c=null},
|
|
468
|
-
var
|
|
469
|
-
class
|
|
469
|
+
r=u.d,(u=u.b).d=r,r.b=u}return this.r(this.b),void(this.c=this.b=null)}}this.b=this.c=null},st.mi={GluTesselator:H,xi:{GLU_TESS_WINDING_ODD:100130,GLU_TESS_WINDING_NONZERO:100131,GLU_TESS_WINDING_POSITIVE:100132,GLU_TESS_WINDING_NEGATIVE:100133,GLU_TESS_WINDING_ABS_GEQ_TWO:100134},primitiveType:{GL_LINE_LOOP:2,GL_TRIANGLES:4,GL_TRIANGLE_STRIP:5,GL_TRIANGLE_FAN:6},bi:{GLU_TESS_MISSING_BEGIN_POLYGON:100151,GLU_TESS_MISSING_END_POLYGON:100153,GLU_TESS_MISSING_BEGIN_CONTOUR:100152,GLU_TESS_MISSING_END_CONTOUR:100154,GLU_TESS_COORD_TOO_LARGE:100155,GLU_TESS_NEED_COMBINE_CALLBACK:100156},Si:{GLU_TESS_MESH:100112,GLU_TESS_TOLERANCE:100142,GLU_TESS_WINDING_RULE:100140,GLU_TESS_BOUNDARY_ONLY:100141,GLU_INVALID_ENUM:100900,GLU_INVALID_VALUE:100901,GLU_TESS_BEGIN:100100,GLU_TESS_VERTEX:100101,GLU_TESS_END:100102,GLU_TESS_ERROR:100103,GLU_TESS_EDGE_FLAG:100104,GLU_TESS_COMBINE:100105,GLU_TESS_BEGIN_DATA:100106,GLU_TESS_VERTEX_DATA:100107,GLU_TESS_END_DATA:100108,GLU_TESS_ERROR_DATA:100109,GLU_TESS_EDGE_FLAG_DATA:100110,GLU_TESS_COMBINE_DATA:100111}},H.prototype._i=H.prototype.x,H.prototype.Ei=H.prototype.B,H.prototype.Ti=H.prototype.y,H.prototype.Ai=H.prototype.A,H.prototype.Mi=H.prototype.z,H.prototype.Ii=H.prototype.C,H.prototype.Fi=H.prototype.pi,H.prototype.Li=H.prototype.wi,H.prototype.Gi=H.prototype.gi,H.prototype.Oi=H.prototype.w,t.exports=st.mi})(rt)
|
|
470
|
+
var ot=rt.exports
|
|
471
|
+
class at{process(t,e=!0,i=!1,n=!0){if(0===t.length)return{Ci:{vertices:[],indices:[]},ki:[]}
|
|
470
472
|
const s=t.filter(t=>t.points.length>=3)
|
|
471
|
-
return 0===s.length?{
|
|
473
|
+
return 0===s.length?{Ci:{vertices:[],indices:[]},ki:[]}:this.Di(s,e,i,n)}Bi(t,e=!0,i=!1,n=!0){return 0===t.length?{Ci:{vertices:[],indices:[]},ki:[]}:this.Ni(t,e,i,n)}Di(t,e,i,n){const s=!i&&!e
|
|
472
474
|
let r,o
|
|
473
475
|
s?(o=this.Ui(t,!0),(e||n)&&(r=this.Ui(t))):(r=this.Ui(t),o=r)
|
|
474
476
|
let a=n?s?o:r??this.Ui(t):[]
|
|
475
477
|
if(e){const t=this.$i(r,"boundary")
|
|
476
|
-
if(!t)return c.warn("libtess returned empty result from boundary pass"),{
|
|
477
|
-
o=this.
|
|
478
|
-
return h?{
|
|
478
|
+
if(!t)return c.warn("libtess returned empty result from boundary pass"),{Ci:{vertices:[],indices:[]},ki:[]}
|
|
479
|
+
o=this.Pi(t),n&&(a=o)}const h=this.$i(o,"triangles")
|
|
480
|
+
return h?{Ci:{vertices:h.vertices,indices:h.indices||[]},ki:a,Wi:e}:(c.warn(e?"libtess returned empty result from triangulation pass":"libtess returned empty result from single-pass triangulation"),{Ci:{vertices:[],indices:[]},ki:a})}Ni(t,e,i,n){const s=!i&&!e
|
|
479
481
|
let r,o
|
|
480
482
|
s?(o=this.zi(t),(e||n)&&(r=t)):(r=t,o=t)
|
|
481
483
|
let a=n?s?o:r??t:[]
|
|
482
484
|
if(e){const t=this.$i(r,"boundary")
|
|
483
|
-
if(!t)return c.warn("libtess returned empty result from boundary pass"),{
|
|
484
|
-
o=this.
|
|
485
|
-
return h?{
|
|
485
|
+
if(!t)return c.warn("libtess returned empty result from boundary pass"),{Ci:{vertices:[],indices:[]},ki:[]}
|
|
486
|
+
o=this.Pi(t),n&&(a=o)}const h=this.$i(o,"triangles")
|
|
487
|
+
return h?{Ci:{vertices:h.vertices,indices:h.indices||[]},ki:a,Wi:e}:(c.warn(e?"libtess returned empty result from triangulation pass":"libtess returned empty result from single-pass triangulation"),{Ci:{vertices:[],indices:[]},ki:a})}Ui(t,e=!1){const i=Array(t.length)
|
|
486
488
|
for(let n=0;t.length>n;n++){const s=t[n].points,r=s.length,o=r>1&&s[0].x===s[r-1].x&&s[0].y===s[r-1].y?r-1:r,a=Array(2*(o+1))
|
|
487
489
|
let h=0
|
|
488
490
|
if(e)for(let t=o-1;t>=0;t--){const e=s[t]
|
|
489
491
|
a[h++]=e.x,a[h++]=e.y}else for(let t=0;o>t;t++){const e=s[t]
|
|
490
492
|
a[h++]=e.x,a[h++]=e.y}2>h||(a[h++]=a[0],a[h++]=a[1]),i[n]=a}return i}zi(t){const e=Array(t.length)
|
|
491
|
-
for(let i=0;t.length>i;i++)e[i]=this.
|
|
492
|
-
return e}
|
|
493
|
+
for(let i=0;t.length>i;i++)e[i]=this.Ri(t[i])
|
|
494
|
+
return e}Ri(t){const e=t.length
|
|
493
495
|
if(0===e)return[]
|
|
494
496
|
const i=4>e||t[0]!==t[e-2]||t[1]!==t[e-1]?e:e-2
|
|
495
497
|
if(0===i)return[]
|
|
496
498
|
const n=Array(i+2)
|
|
497
499
|
let s=0
|
|
498
500
|
for(let e=i-2;e>=0;e-=2)n[s++]=t[e],n[s++]=t[e+1]
|
|
499
|
-
return 2>s||(n[s++]=n[0],n[s++]=n[1]),n}$i(t,e){const i=new
|
|
500
|
-
i.
|
|
501
|
+
return 2>s||(n[s++]=n[0],n[s++]=n[1]),n}$i(t,e){const i=new ot.GluTesselator
|
|
502
|
+
i.Ei(ot.Si.GLU_TESS_WINDING_RULE,ot.xi.GLU_TESS_WINDING_NONZERO)
|
|
501
503
|
const n=[],s=[],r=[]
|
|
502
504
|
let o=[]
|
|
503
|
-
"boundary"===e&&i.
|
|
504
|
-
return n.push(t[0],t[1]),e}),i.
|
|
505
|
-
for(const e of t){i.
|
|
505
|
+
"boundary"===e&&i.Ei(ot.Si.GLU_TESS_BOUNDARY_ONLY,!0),"triangles"===e?i.Mi(ot.Si.GLU_TESS_VERTEX_DATA,t=>{s.push(t)}):(i.Mi(ot.Si.GLU_TESS_BEGIN,()=>{o=[]}),i.Mi(ot.Si.GLU_TESS_VERTEX_DATA,t=>{o.push(t)}),i.Mi(ot.Si.GLU_TESS_END,()=>{o.length>0&&r.push(o)})),i.Mi(ot.Si.GLU_TESS_COMBINE,t=>{const e=n.length/2
|
|
506
|
+
return n.push(t[0],t[1]),e}),i.Mi(ot.Si.GLU_TESS_ERROR,t=>{c.warn("libtess error: "+t)}),i.Ai(0,0,1),i.Fi(null)
|
|
507
|
+
for(const e of t){i.Li()
|
|
506
508
|
for(let t=0;e.length>t;t+=2){const s=n.length/2
|
|
507
|
-
n.push(e[t],e[t+1]),i.
|
|
509
|
+
n.push(e[t],e[t+1]),i.Ii([e[t],e[t+1],0],s)}i.Gi()}return i.Oi(),0===n.length?null:"triangles"===e?{vertices:n,indices:s}:{vertices:n,ji:r}}Pi(t){if(!t.ji)return[]
|
|
508
510
|
const e=[]
|
|
509
|
-
for(const i of t.
|
|
511
|
+
for(const i of t.ji){const n=[]
|
|
510
512
|
for(const e of i){const i=2*e
|
|
511
|
-
n.push(t.vertices[i],t.vertices[i+1])}n.length>2&&(n[0]===n[n.length-2]&&n[1]===n[n.length-1]||n.push(n[0],n[1])),e.push(n)}return e}
|
|
513
|
+
n.push(t.vertices[i],t.vertices[i+1])}n.length>2&&(n[0]===n[n.length-2]&&n[1]===n[n.length-1]||n.push(n[0],n[1])),e.push(n)}return e}Hi(t){if(0===t.length)return!1
|
|
512
514
|
if(1===t.length)return!1
|
|
513
515
|
let e=null
|
|
514
|
-
for(const i of t){const t=0>this.
|
|
516
|
+
for(const i of t){const t=0>this.Vi(i)?-1:1
|
|
515
517
|
if(null===e)e=t
|
|
516
|
-
else if(t!==e)return!0}return!1}
|
|
518
|
+
else if(t!==e)return!0}return!1}Vi(t){let e=0
|
|
517
519
|
const i=t.length
|
|
518
520
|
if(6>i)return 0
|
|
519
521
|
for(let n=0;i>n;n+=2)e+=t[n]*t[(n+3)%i]-t[(n+2)%i]*t[n+1]
|
|
520
|
-
return e/2}}class
|
|
522
|
+
return e/2}}class ht{constructor(){}qi(t,e=0,i){const n=t.Ci.vertices,s=t.Ci.indices,r=t.ki,o=n.length,a=o/2
|
|
521
523
|
let h=[],c=0,l=!1
|
|
522
|
-
if(0!==e)if(!0===t.
|
|
524
|
+
if(0!==e)if(!0===t.Wi&&r.length>0){l=!0
|
|
523
525
|
for(const t of r){const e=t.length>>1
|
|
524
526
|
2>e||(c+=e-1)}}else{const t=new Map,e=s.length
|
|
525
527
|
for(let i=0;e>i;i+=3){const e=s[i],n=s[i+1],r=s[i+2]
|
|
@@ -551,229 +553,229 @@ if(p>1e-10){const t=1/Math.sqrt(p)
|
|
|
551
553
|
g=u*t,v=-l*t}const b=3*m
|
|
552
554
|
f[b]=r,f[b+1]=o,f[b+2]=0,f[b+3]=a,f[b+4]=c,f[b+5]=0,f[b+6]=r,f[b+7]=o,f[b+8]=w,f[b+9]=a,f[b+10]=c,f[b+11]=w,d[b]=g,d[b+1]=v,d[b+2]=0,d[b+3]=g,d[b+4]=v,d[b+5]=0,d[b+6]=g,d[b+7]=v,d[b+8]=0,d[b+9]=g,d[b+10]=v,d[b+11]=0
|
|
553
555
|
const S=m
|
|
554
|
-
y[x]=S,y[x+1]=S+1,y[x+2]=S+2,y[x+3]=S+1,y[x+4]=S+3,y[x+5]=S+2,x+=6,m+=4}return{vertices:f,normals:d,indices:y}}}class
|
|
555
|
-
return 0===i?[]:1===i?[[0]]:this.
|
|
556
|
+
y[x]=S,y[x+1]=S+1,y[x+2]=S+2,y[x+3]=S+1,y[x+4]=S+3,y[x+5]=S+2,x+=6,m+=4}return{vertices:f,normals:d,indices:y}}}class ct{constructor(){}Yi(t,e){const i=t.length
|
|
557
|
+
return 0===i?[]:1===i?[[0]]:this.Ji(t,e)}Ji(t,e){function i(t){return h[t]===t?t:h[t]=i(h[t])}function n(t,e){const n=i(t),s=i(e)
|
|
556
558
|
n!==s&&(c[s]>c[n]?h[n]=s:c[n]>c[s]?h[s]=n:(h[s]=n,c[n]++))}const s=t.length,r=Array(s),o=Array(2*s)
|
|
557
559
|
let a=0
|
|
558
|
-
for(let i=0;s>i;i++)r[i]=this.
|
|
560
|
+
for(let i=0;s>i;i++)r[i]=this.Ki(t[i],e[i]),o[a++]=[r[i].Qi,0,i],o[a++]=[r[i].Xi,1,i]
|
|
559
561
|
o.sort((t,e)=>t[0]-e[0]||t[1]-e[1])
|
|
560
562
|
const h=Array.from({length:s},(t,e)=>e),c=Array(s).fill(0),l=new Set
|
|
561
563
|
for(const[,t,e]of o)if(0===t){const t=r[e]
|
|
562
564
|
for(const i of l){const s=r[i]
|
|
563
|
-
s.
|
|
565
|
+
s.Zi+.001>t.tn&&t.Zi>s.tn-.001&&n(e,i)}l.add(e)}else l.delete(e)
|
|
564
566
|
const u=new Map
|
|
565
567
|
for(let t=0;s>t;t++){const e=i(t)
|
|
566
568
|
let n=u.get(e)
|
|
567
|
-
n||(n=[],u.set(e,n)),n.push(t)}return Array.from(u.values())}
|
|
568
|
-
if(void 0!==e)return this.
|
|
569
|
-
const i=this.
|
|
570
|
-
this.
|
|
569
|
+
n||(n=[],u.set(e,n)),n.push(t)}return Array.from(u.values())}Ki(t,e){return{Qi:t.bounds.min.x+e.x,tn:t.bounds.min.y+e.y,Xi:t.bounds.max.x+e.x,Zi:t.bounds.max.y+e.y}}}class lt{constructor(t){this.en=[],this.nn=new Map,this.compare=t}G(t){const e=this.nn.get(t)
|
|
570
|
+
if(void 0!==e)return this.sn(e),void this.rn(e)
|
|
571
|
+
const i=this.en.length
|
|
572
|
+
this.en.push(t),this.nn.set(t,i),this.sn(i)}an(){const t=this.en.length
|
|
571
573
|
if(!t)return
|
|
572
|
-
if(1===t){const t=this.
|
|
573
|
-
return this.
|
|
574
|
-
return this.
|
|
575
|
-
void 0!==e?(this.
|
|
576
|
-
this.
|
|
577
|
-
for(;t>0;){const i=t-1>>1,n=this.
|
|
574
|
+
if(1===t){const t=this.en.pop()
|
|
575
|
+
return this.nn.clear(),t}const e=this.en[0],i=this.en.pop()
|
|
576
|
+
return this.en[0]=i,this.nn.delete(e),this.nn.set(i,0),this.rn(0),e}update(t){const e=this.nn.get(t)
|
|
577
|
+
void 0!==e?(this.sn(e),this.rn(e)):this.G(t)}hn(){return!this.en.length}cn(t,e){const i=this.en[t],n=this.en[e]
|
|
578
|
+
this.en[t]=n,this.en[e]=i,this.nn.set(i,e),this.nn.set(n,t)}sn(t){const e=this.en[t]
|
|
579
|
+
for(;t>0;){const i=t-1>>1,n=this.en[i]
|
|
578
580
|
if(this.compare(e,n)>=0)break
|
|
579
|
-
this.
|
|
581
|
+
this.en[t]=n,this.nn.set(n,t),t=i}this.en[t]=e,this.nn.set(e,t)}rn(t){const e=this.en[t],i=this.en.length,n=i>>1
|
|
580
582
|
for(;n>t;){const n=1+(t<<1),s=n+1
|
|
581
583
|
let r=t,o=e
|
|
582
|
-
const a=this.
|
|
583
|
-
if(0>this.compare(a,o)&&(r=n,o=a),i>s){const t=this.
|
|
584
|
+
const a=this.en[n]
|
|
585
|
+
if(0>this.compare(a,o)&&(r=n,o=a),i>s){const t=this.en[s]
|
|
584
586
|
0>this.compare(t,o)&&(r=s,o=t)}if(r===t)break
|
|
585
|
-
this.
|
|
586
|
-
class
|
|
587
|
+
this.en[t]=o,this.nn.set(o,t),t=r}this.en[t]=e,this.nn.set(e,t)}}const ut={enabled:!0,areaThreshold:1}
|
|
588
|
+
class ft{constructor(t){this.stats={pointsRemovedByVisvalingam:0,originalPointCount:0},this.config=t}ln(t){this.config=t}un(t){if(2>=t.points.length)return t
|
|
587
589
|
if(!this.config.enabled)return t
|
|
588
590
|
this.stats.originalPointCount+=t.points.length
|
|
589
591
|
const e=t.points
|
|
590
592
|
if(5>e.length)return t
|
|
591
593
|
let i=e
|
|
592
|
-
return i=this.
|
|
593
|
-
const i=t.length,n=t.map((t,e)=>({index:e,
|
|
594
|
-
for(let t=0;n.length>t;t++)n[t].
|
|
595
|
-
const s=new
|
|
594
|
+
return i=this.fn(i,this.config.areaThreshold),3>i.length?t:{...t,points:i}}fn(t,e){if(3>=t.length)return t
|
|
595
|
+
const i=t.length,n=t.map((t,e)=>({index:e,dn:1/0,yn:null,next:null}))
|
|
596
|
+
for(let t=0;n.length>t;t++)n[t].yn=n[t-1]||null,n[t].next=n[t+1]||null
|
|
597
|
+
const s=new lt((t,e)=>t.dn-e.dn)
|
|
596
598
|
for(let e=1;n.length-1>e;e++){const i=n[e]
|
|
597
|
-
i.
|
|
598
|
-
for(;!s.
|
|
599
|
-
if(!i||i.
|
|
600
|
-
i.
|
|
599
|
+
i.dn=this.pn(t[i.yn.index],t[i.index],t[i.next.index]),s.G(i)}let r=i
|
|
600
|
+
for(;!s.hn()&&r>3;){const i=s.an()
|
|
601
|
+
if(!i||i.dn>e)break
|
|
602
|
+
i.yn&&(i.yn.next=i.next),i.next&&(i.next.yn=i.yn),r--,i.yn&&i.yn.yn&&(i.yn.dn=this.pn(t[i.yn.yn.index],t[i.yn.index],t[i.next.index]),s.update(i.yn)),i.next&&i.next.next&&(i.next.dn=this.pn(t[i.yn.index],t[i.next.index],t[i.next.next.index]),s.update(i.next))}const o=[]
|
|
601
603
|
let a=n[0]
|
|
602
604
|
for(;a;)o.push(t[a.index]),a=a.next
|
|
603
|
-
return this.stats.pointsRemovedByVisvalingam+=i-o.length,o}
|
|
604
|
-
class
|
|
605
|
+
return this.stats.pointsRemovedByVisvalingam+=i-o.length,o}pn(t,e,i){return Math.abs((t.x*(e.y-i.y)+e.x*(i.y-t.y)+i.x*(t.y-e.y))/2)}getStats(){return{...this.stats}}wn(){this.stats={pointsRemovedByVisvalingam:0,originalPointCount:0}}}const dt={distanceTolerance:.5,angleTolerance:.2},yt=1e-6
|
|
606
|
+
class pt{constructor(t){this.curveSteps=null,this.gn={...dt,...t}}vn(t){this.gn={...dt,...t}}mn(t){if(null==t)return void(this.curveSteps=null)
|
|
605
607
|
if(!Number.isFinite(t))return void(this.curveSteps=null)
|
|
606
608
|
const e=Math.round(t)
|
|
607
|
-
this.curveSteps=1>e?null:e}
|
|
609
|
+
this.curveSteps=1>e?null:e}xn(t,e,i){if(null!==this.curveSteps)return this.bn(t,e,i,this.curveSteps)
|
|
608
610
|
const n=[]
|
|
609
|
-
return this.
|
|
611
|
+
return this.Sn(t.x,t.y,e.x,e.y,i.x,i.y,n),this._n(i.x,i.y,n),n}En(t,e,i,n){if(null!==this.curveSteps)return this.Tn(t,e,i,n,this.curveSteps)
|
|
610
612
|
const s=[]
|
|
611
|
-
return this.
|
|
612
|
-
for(let r=1;n>=r;r++){const o=r/n,a=this.
|
|
613
|
-
this.
|
|
614
|
-
for(let o=1;s>=o;o++){const a=o/s,h=this.
|
|
615
|
-
this.
|
|
616
|
-
const h=(t+i)/2,c=(e+n)/2,l=(i+s)/2,u=(n+r)/2,f=(h+l)/2,d=(c+u)/2,y=s-t,p=r-e,w=Math.abs((i-s)*p-(n-r)*y),g=this.
|
|
617
|
-
if(w>
|
|
618
|
-
if(0>=a)return void this.
|
|
613
|
+
return this.An(t.x,t.y,e.x,e.y,i.x,i.y,n.x,n.y,s),this._n(n.x,n.y,s),s}Mn(t,e,i){return t+(e-t)*i}bn(t,e,i,n){const s=[]
|
|
614
|
+
for(let r=1;n>=r;r++){const o=r/n,a=this.Mn(t.x,e.x,o),h=this.Mn(t.y,e.y,o),c=this.Mn(e.x,i.x,o),l=this.Mn(e.y,i.y,o),u=this.Mn(a,c,o),f=this.Mn(h,l,o)
|
|
615
|
+
this._n(u,f,s)}return s}Tn(t,e,i,n,s){const r=[]
|
|
616
|
+
for(let o=1;s>=o;o++){const a=o/s,h=this.Mn(t.x,e.x,a),c=this.Mn(t.y,e.y,a),l=this.Mn(e.x,i.x,a),u=this.Mn(e.y,i.y,a),f=this.Mn(i.x,n.x,a),d=this.Mn(i.y,n.y,a),y=this.Mn(h,l,a),p=this.Mn(c,u,a),w=this.Mn(l,f,a),g=this.Mn(u,d,a),v=this.Mn(y,w,a),m=this.Mn(p,g,a)
|
|
617
|
+
this._n(v,m,r)}return r}Sn(t,e,i,n,s,r,o,a=0){if(a>16)return
|
|
618
|
+
const h=(t+i)/2,c=(e+n)/2,l=(i+s)/2,u=(n+r)/2,f=(h+l)/2,d=(c+u)/2,y=s-t,p=r-e,w=Math.abs((i-s)*p-(n-r)*y),g=this.gn.distanceTolerance??.5,v=g*g
|
|
619
|
+
if(w>yt){if(v*(y*y+p*p)>=w*w){const a=this.gn.angleTolerance??.2
|
|
620
|
+
if(0>=a)return void this._n(i,n,o)
|
|
619
621
|
{const h=i-t,c=n-e,l=s-i,u=r-n
|
|
620
|
-
if(a>Math.abs(Math.atan2(h*u-c*l,h*l+c*u)))return void this.
|
|
621
|
-
if(0===s){if(v>=(i-t)*(i-t)+(n-e)*(n-e))return void this.
|
|
622
|
-
if(r>0&&1>r&&v*s>=w*w)return void this.
|
|
623
|
-
const l=(t+i)/2,u=(e+n)/2,f=(i+s)/2,d=(n+r)/2,y=(s+o)/2,p=(r+a)/2,w=(l+f)/2,g=(u+d)/2,v=(f+y)/2,m=(d+p)/2,x=(w+v)/2,b=(g+m)/2,S=o-t,_=a-e,E=Math.abs((i-o)*_-(n-a)*S),T=Math.abs((s-o)*_-(r-a)*S),A=this.
|
|
622
|
+
if(a>Math.abs(Math.atan2(h*u-c*l,h*l+c*u)))return void this._n(i,n,o)}}}else{const s=y*y+p*p
|
|
623
|
+
if(0===s){if(v>=(i-t)*(i-t)+(n-e)*(n-e))return void this._n(i,n,o)}else{const r=((i-t)*y+(n-e)*p)/s
|
|
624
|
+
if(r>0&&1>r&&v*s>=w*w)return void this._n(i,n,o)}}this.Sn(t,e,h,c,f,d,o,a+1),this.Sn(f,d,l,u,s,r,o,a+1)}An(t,e,i,n,s,r,o,a,h,c=0){if(c>16)return
|
|
625
|
+
const l=(t+i)/2,u=(e+n)/2,f=(i+s)/2,d=(n+r)/2,y=(s+o)/2,p=(r+a)/2,w=(l+f)/2,g=(u+d)/2,v=(f+y)/2,m=(d+p)/2,x=(w+v)/2,b=(g+m)/2,S=o-t,_=a-e,E=Math.abs((i-o)*_-(n-a)*S),T=Math.abs((s-o)*_-(r-a)*S),A=this.gn.distanceTolerance??.5,M=A*A
|
|
624
626
|
let I=0
|
|
625
|
-
switch(E>
|
|
626
|
-
if(0===c){if(M>=(i-t)*(i-t)+(n-e)*(n-e)&&M>=(s-t)*(s-t)+(r-e)*(r-e))return this.
|
|
627
|
-
if(o>0&&1>o&&a>0&&1>a&&M*c>=(E+T)*(E+T))return this.
|
|
628
|
-
case 1:if(M*(S*S+_*_)>=T*T){const t=this.
|
|
629
|
-
if(0>=t)return this.
|
|
627
|
+
switch(E>yt&&(I|=1),T>yt&&(I|=2),I){case 0:const c=S*S+_*_
|
|
628
|
+
if(0===c){if(M>=(i-t)*(i-t)+(n-e)*(n-e)&&M>=(s-t)*(s-t)+(r-e)*(r-e))return this._n(i,n,h),void this._n(s,r,h)}else{const o=((i-t)*S+(n-e)*_)/c,a=((s-t)*S+(r-e)*_)/c
|
|
629
|
+
if(o>0&&1>o&&a>0&&1>a&&M*c>=(E+T)*(E+T))return this._n(i,n,h),void this._n(s,r,h)}break
|
|
630
|
+
case 1:if(M*(S*S+_*_)>=T*T){const t=this.gn.angleTolerance??.2
|
|
631
|
+
if(0>=t)return this._n(i,n,h),void this._n(s,r,h)
|
|
630
632
|
{const e=s-i,c=r-n,l=o-s,u=a-r
|
|
631
|
-
if(t>Math.abs(Math.atan2(e*u-c*l,e*l+c*u)))return this.
|
|
632
|
-
case 2:if(M*(S*S+_*_)>=E*E){const o=this.
|
|
633
|
-
if(0>=o)return this.
|
|
633
|
+
if(t>Math.abs(Math.atan2(e*u-c*l,e*l+c*u)))return this._n(i,n,h),void this._n(s,r,h)}}break
|
|
634
|
+
case 2:if(M*(S*S+_*_)>=E*E){const o=this.gn.angleTolerance??.2
|
|
635
|
+
if(0>=o)return this._n(i,n,h),void this._n(s,r,h)
|
|
634
636
|
{const a=i-t,c=n-e,l=s-i,u=r-n
|
|
635
|
-
if(o>Math.abs(Math.atan2(a*u-c*l,a*l+c*u)))return this.
|
|
636
|
-
case 3:if(M*(S*S+_*_)>=(E+T)*(E+T)){const c=this.
|
|
637
|
-
if(0>=c)return this.
|
|
637
|
+
if(o>Math.abs(Math.atan2(a*u-c*l,a*l+c*u)))return this._n(i,n,h),void this._n(s,r,h)}}break
|
|
638
|
+
case 3:if(M*(S*S+_*_)>=(E+T)*(E+T)){const c=this.gn.angleTolerance??.2
|
|
639
|
+
if(0>=c)return this._n(i,n,h),void this._n(s,r,h)
|
|
638
640
|
{const l=i-t,u=n-e,f=s-i,d=r-n,y=o-s,p=a-r
|
|
639
|
-
if(c>Math.abs(Math.atan2(l*d-u*f,l*f+u*d))+Math.abs(Math.atan2(f*p-d*y,f*y+d*p)))return this.
|
|
641
|
+
if(c>Math.abs(Math.atan2(l*d-u*f,l*f+u*d))+Math.abs(Math.atan2(f*p-d*y,f*y+d*p)))return this._n(i,n,h),void this._n(s,r,h)}}}this.An(t,e,l,u,w,g,x,b,h,c+1),this.An(x,b,v,m,y,p,o,a,h,c+1)}_n(t,e,i){const n=new Q(t,e)
|
|
640
642
|
if(0===i.length)return void i.push(n)
|
|
641
643
|
const s=i[i.length-1],r=n.x-s.x,o=n.y-s.y
|
|
642
|
-
r*r+o*o>1e-12&&i.push(n)}}class
|
|
643
|
-
const i=new
|
|
644
|
-
this.
|
|
645
|
-
const s=this.
|
|
646
|
-
if(
|
|
647
|
-
const a=this.Un.
|
|
644
|
+
r*r+o*o>1e-12&&i.push(n)}}class wt{constructor(t,e){this.In=0,this.Fn=0,this.Ln=[],this.Gn=null,this.On=null,this.Cn={min:new Q(1/0,1/0),max:new Q(-1/0,-1/0)},this.kn=[],this.Dn=[],this.Bn=[],this.Nn=new Q(0,0),this.Un=new pt(t),this.$n=new ft({...ut,...e})}setPosition(t,e){this.Nn.set(t,e)}Pn(t,e){this.Nn.x+=t,this.Nn.y+=e}Wn(t,e){this.Ln.length>0&&this.zn(),this.In=t,this.Fn=e,this.Ln=[],this.Cn.min.set(1/0,1/0),this.Cn.max.set(-1/0,-1/0),this.Dn.push(this.Nn.clone())}zn(){this.Gn&&this.Rn(),this.Ln.length>0&&(this.kn.push({jn:this.In,Hn:this.Ln,bounds:{min:{x:this.Cn.min.x,y:this.Cn.min.y},max:{x:this.Cn.max.x,y:this.Cn.max.y}}}),this.Bn.push(this.Fn)),this.Ln=[]}Vn(t,e){this.Gn&&this.Rn(),this.On=new Q(t,e),this.qn(this.On),this.Gn={points:[this.On],glyphIndex:this.In}}Yn(t,e){if(!this.Gn||!this.On)return
|
|
645
|
+
const i=new Q(t,e)
|
|
646
|
+
this.qn(i),this.Gn.points.push(i),this.On=i}Jn(t,e,i,n){if(!this.Gn||!this.On)return
|
|
647
|
+
const s=this.On,r=new Q(t,e),o=new Q(i,n)
|
|
648
|
+
if(yt>Math.abs((r.x-o.x)*(o.y-s.y)-(r.y-o.y)*(o.x-s.x)))return void this.Yn(i,n)
|
|
649
|
+
const a=this.Un.xn(s,r,o)
|
|
648
650
|
for(let t=0;a.length>t;t++){const e=a[t]
|
|
649
|
-
this.
|
|
650
|
-
const o=this.
|
|
651
|
-
if(
|
|
652
|
-
const f=this.Un.
|
|
651
|
+
this.qn(e),this.Gn.points.push(e)}this.On=o}Kn(t,e,i,n,s,r){if(!this.Gn||!this.On)return
|
|
652
|
+
const o=this.On,a=new Q(t,e),h=new Q(i,n),c=new Q(s,r),l=c.x-o.x,u=c.y-o.y
|
|
653
|
+
if(yt>Math.abs((a.x-c.x)*u-(a.y-c.y)*l)&&yt>Math.abs((h.x-c.x)*u-(h.y-c.y)*l))return void this.Yn(s,r)
|
|
654
|
+
const f=this.Un.En(o,a,h,c)
|
|
653
655
|
for(let t=0;f.length>t;t++){const e=f[t]
|
|
654
|
-
this.
|
|
655
|
-
const t=this.
|
|
656
|
-
this.
|
|
657
|
-
this.
|
|
658
|
-
if(this.
|
|
656
|
+
this.qn(e),this.Gn.points.push(e)}this.On=c}Qn(){if(!this.Gn||!this.On)return
|
|
657
|
+
const t=this.Gn.points[0]
|
|
658
|
+
this.On.equals(t)||this.Gn.points.push(t),this.Rn()}Rn(){if(this.Gn){const t=this.$n.un(this.Gn)
|
|
659
|
+
this.Ln.push(t),this.Gn=null,this.On=null}}qn(t){this.Cn.min.x=Math.min(this.Cn.min.x,t.x),this.Cn.min.y=Math.min(this.Cn.min.y,t.y),this.Cn.max.x=Math.max(this.Cn.max.x,t.x),this.Cn.max.y=Math.max(this.Cn.max.y,t.y)}Xn(){return this.Ln.length>0&&this.zn(),this.kn}Zn(){return this.Dn}ts(){return this.Bn}reset(){this.kn=[],this.Dn=[],this.Bn=[],this.Ln=[],this.Gn=null,this.On=null,this.In=0,this.Fn=0,this.Nn.set(0,0),this.Cn={min:new Q(1/0,1/0),max:new Q(-1/0,-1/0)}}vn(t){this.Un.vn(t)}mn(t){this.Un.mn(t)}es(t){this.$n.ln({...ut,...t})}ns(){return this.$n.getStats()}}class gt{constructor(){this.ss=null,this.rs=null,this.hs=null,this.cs=null,this.ls=null,this.us=0,this.position={x:0,y:0}}setPosition(t,e){this.position.x=t,this.position.y=e,this.fs&&this.fs.setPosition(t,e)}Pn(t,e){this.position.x+=t,this.position.y+=e,this.fs&&this.fs.Pn(t,e)}ds(t){this.fs=t}ys(t,e){if(!t||!t.module||!t.hb)throw Error("Invalid font object")
|
|
660
|
+
if(this.fs=e,this.us)return
|
|
659
661
|
const i=t.module
|
|
660
|
-
this.
|
|
661
|
-
return this.
|
|
662
|
+
this.ss=i.ps((t,e,i,n,s)=>{this.fs?.Vn(n,s)},"viiiffi"),this.rs=i.ps((t,e,i,n,s)=>{this.fs?.Yn(n,s)},"viiiffi"),this.hs=i.ps((t,e,i,n,s,r,o)=>{this.fs?.Jn(n,s,r,o)},"viiiffffi"),this.cs=i.ps((t,e,i,n,s,r,o,a,h)=>{this.fs?.Kn(n,s,r,o,a,h)},"viiiffffffi"),this.ls=i.ps(()=>{this.fs?.Qn()},"viiii"),this.us=i.exports.ws(),i.exports.gs(this.us,this.ss,0,0),i.exports.vs(this.us,this.rs,0,0),i.exports.xs(this.us,this.hs,0,0),i.exports.bs(this.us,this.cs,0,0),i.exports.Ss(this.us,this.ls,0,0)}_s(){if(!this.us)throw Error("Draw functions not initialized")
|
|
663
|
+
return this.us}destroy(t){if(!t||!t.module||!t.hb)return
|
|
662
664
|
const e=t.module
|
|
663
|
-
try{this.
|
|
664
|
-
class
|
|
665
|
+
try{this.us&&(e.exports.Es(this.us),this.us=0),null!==this.ss&&(e.Ts(this.ss),this.ss=null),null!==this.rs&&(e.Ts(this.rs),this.rs=null),null!==this.hs&&(e.Ts(this.hs),this.hs=null),null!==this.cs&&(e.Ts(this.cs),this.cs=null),null!==this.ls&&(e.Ts(this.ls),this.ls=null)}catch(t){c.warn("Error destroying draw callbacks:",t)}this.fs=void 0}}const vt=new WeakMap
|
|
666
|
+
class mt{constructor(t,e){this.As="default",this.Ms="default",this.Is=new Set,this.Fs=[],this.Ls=[],this.Gs=[],this.cache=t,this.Xt=e,this.tessellator=new at,this.Os=new ht,this.Cs=new ct,this.fs=new wt,this.ks=(()=>{const t=this.Xt.module,e=vt.get(t)
|
|
665
667
|
if(e)return e
|
|
666
|
-
const i=new
|
|
667
|
-
return
|
|
668
|
+
const i=new gt
|
|
669
|
+
return vt.set(t,i),i})(),this.ks.ys(this.Xt,this.fs),this.Ds=et,this.Bs=it,this.Ns=nt}ns(){return this.fs.ns()}vn(t){this.gn=t,this.fs.vn(t),this.Us()}mn(t){if(null==t)this.curveSteps=void 0
|
|
668
670
|
else if(Number.isFinite(t)){const e=Math.round(t)
|
|
669
671
|
this.curveSteps=1>e?void 0:e}else this.curveSteps=void 0
|
|
670
|
-
this.
|
|
671
|
-
const t=this.
|
|
672
|
+
this.fs.mn(this.curveSteps),this.Us()}es(t){this.$s=t,this.fs.es(t),this.Us()}Ps(t){this.As=t,this.Us()}Us(){this.Ms=`${this.As}__${this.Ws()}`}Ws(){return[(()=>{if(void 0!==this.curveSteps)return"cf:steps:"+this.curveSteps
|
|
673
|
+
const t=this.gn?.distanceTolerance??.5,e=this.gn?.angleTolerance??.2
|
|
672
674
|
return`cf:${t.toFixed(4)},${e.toFixed(4)}`})(),`opt:${this.$s?.enabled??1?1:0},${(this.$s?.areaThreshold??1).toFixed(4)}`].join("|")}zs(t,e,i,s,r,o=!1,a){if(h){let e=0
|
|
673
|
-
for(let i=0;t.length>i;i++)e+=t[i].length}const c=this.
|
|
675
|
+
for(let i=0;t.length>i;i++)e+=t[i].length}const c=this.Gs
|
|
674
676
|
c.length=0
|
|
675
677
|
let l=0,u=0,f=0,d=0,y=0
|
|
676
678
|
const p=(t,e,i,n)=>{const s=y
|
|
677
679
|
let r=c[l]
|
|
678
|
-
return r?(r.data=t,r.px=e,r.
|
|
680
|
+
return r?(r.data=t,r.px=e,r.Rs=i,r.js=n,r.Hs=s):(r={data:t,px:e,Rs:i,js:n,Hs:s},c[l]=r),l++,u+=t.vertices.length,f+=t.normals.length,d+=t.indices.length,y+=t.vertices.length/3,s},w=[],g={min:{x:1/0,y:1/0,z:0},max:{x:-1/0,y:-1/0,z:e}}
|
|
679
681
|
for(let r=0;t.length>r;r++){const h=t[r]
|
|
680
682
|
for(const t of h){const r=t.position.x,h=t.position.y,c=t.position.z,l=[]
|
|
681
|
-
for(const e of t.glyphs)l.push(this.
|
|
683
|
+
for(const e of t.glyphs)l.push(this.Vs(e.g))
|
|
682
684
|
let u
|
|
683
|
-
if(t.glyphs.length>1){const e=`${this.
|
|
685
|
+
if(t.glyphs.length>1){const e=`${this.Ms}_${t.text}`,i=this.Ns.get(e)
|
|
684
686
|
let n=!1
|
|
685
|
-
if(i&&i.
|
|
686
|
-
for(let e=0;t.glyphs.length>e;e++){const s=t.glyphs[e],r=i.
|
|
687
|
-
if(i.
|
|
687
|
+
if(i&&i.qs.length===t.glyphs.length){n=!0
|
|
688
|
+
for(let e=0;t.glyphs.length>e;e++){const s=t.glyphs[e],r=i.Ys[e]
|
|
689
|
+
if(i.qs[e]!==s.g||r.x!==(s.x??0)||r.y!==(s.y??0)){n=!1
|
|
688
690
|
break}}}if(n&&i)u=i.groups
|
|
689
691
|
else{const i=t.glyphs.length
|
|
690
|
-
if(i>this.
|
|
691
|
-
this.
|
|
692
|
-
for(let e=0;i>e;e++){const i=t.glyphs[e],n=this.
|
|
693
|
-
n.x=i.x??0,n.y=i.y??0,n.z=0}u=this.
|
|
692
|
+
if(i>this.Fs.length)for(let t=this.Fs.length;i>t;t++)this.Fs.push(new X(0,0,0))
|
|
693
|
+
this.Fs.length=i
|
|
694
|
+
for(let e=0;i>e;e++){const i=t.glyphs[e],n=this.Fs[e]
|
|
695
|
+
n.x=i.x??0,n.y=i.y??0,n.z=0}u=this.Cs.Yi(l,this.Fs),this.Ns.set(e,{qs:t.glyphs.map(t=>t.g),Ys:t.glyphs.map(t=>({x:t.x??0,y:t.y??0})),groups:u})}}else u=[[0]]
|
|
694
696
|
const f=o
|
|
695
697
|
let d=u
|
|
696
698
|
if(a&&a.size>0){d=[]
|
|
697
699
|
for(const e of u)if(e.length>1){const i=[],n=[]
|
|
698
|
-
for(const s of e)a.has(t.glyphs[s].
|
|
699
|
-
i.length>0&&d.push(i),n.length>0&&d.push(n)}else d.push(e)}for(const o of d)if(o.length>1&&!f){const n=o.map(e=>t.glyphs[e]),a=this.
|
|
700
|
+
for(const s of e)a.has(t.glyphs[s].Js)?i.push(s):n.push(s)
|
|
701
|
+
i.length>0&&d.push(i),n.length>0&&d.push(n)}else d.push(e)}for(const o of d)if(o.length>1&&!f){const n=o.map(e=>t.glyphs[e]),a=this.Ks(n,e,i)
|
|
700
702
|
let u=this.Bs.get(a)
|
|
701
|
-
if(!u){const i=this.
|
|
703
|
+
if(!u){const i=this.Ls
|
|
702
704
|
let r=0
|
|
703
705
|
const h=n[0].x??0,c=n[0].y??0
|
|
704
706
|
for(let e=0;o.length>e;e++){const n=o[e],s=l[n],a=t.glyphs[n],u=(a.x??0)-h,f=(a.y??0)-c
|
|
705
|
-
for(const t of s.
|
|
707
|
+
for(const t of s.Hn){const e=t.points,n=e.length
|
|
706
708
|
if(3>n)continue
|
|
707
709
|
const s=n>1&&e[0].x===e[n-1].x&&e[0].y===e[n-1].y?n-1:n,o=2*(s+1)
|
|
708
710
|
let a=i[r]
|
|
709
711
|
!a||o>a.length?(a=Array(o),i[r]=a):a.length=o
|
|
710
712
|
let h=0
|
|
711
713
|
for(let t=0;s>t;t++){const i=e[t]
|
|
712
|
-
a[h++]=i.x+u,a[h++]=i.y+f}2>h||(a[h++]=a[0],a[h++]=a[1]),r++}}i.length=r,u=this.
|
|
713
|
-
for(let i=0;o.length>i;i++){const n=o[i],s=t.glyphs[n],a=this.
|
|
714
|
-
w.push(a),this.
|
|
715
|
-
if(0===u.
|
|
714
|
+
a[h++]=i.x+u,a[h++]=i.y+f}2>h||(a[h++]=a[0],a[h++]=a[1]),r++}}i.length=r,u=this.Qs(i,e,s),this.Bs.set(a,u)}const f=n[0],d=p(u,r+(f.x??0),h+(f.y??0),c),y=u.vertices.length/3
|
|
715
|
+
for(let i=0;o.length>i;i++){const n=o[i],s=t.glyphs[n],a=this.Xs(s,d,y,r+(s.x??0),h+(s.y??0),c,l[n],e)
|
|
716
|
+
w.push(a),this.Zs(a.bounds,g)}}else for(const a of o){const o=t.glyphs[a],u=l[a],f=r+(o.x??0),d=h+(o.y??0),y=c
|
|
717
|
+
if(0===u.Hn.length){const t=this.Xs(o,0,0,f,d,y,u,e)
|
|
716
718
|
w.push(t)
|
|
717
|
-
continue}const v=n(this.
|
|
719
|
+
continue}const v=n(this.Ms,o.g,e,i)
|
|
718
720
|
let m=this.cache.get(v)
|
|
719
|
-
m?m.
|
|
720
|
-
const x=p(m,f,d,y),b=this.
|
|
721
|
-
w.push(b),this.
|
|
721
|
+
m?m.tr++:(m=this.er(u,e,i,s),this.cache.set(v,m))
|
|
722
|
+
const x=p(m,f,d,y),b=this.Xs(o,x,m.vertices.length/3,f,d,y,u,e)
|
|
723
|
+
w.push(b),this.Zs(b.bounds,g)}}}c.length=l
|
|
722
724
|
const v=new Float32Array(u),m=new Float32Array(f),x=new Uint32Array(d)
|
|
723
725
|
let b=0,S=0,_=0
|
|
724
|
-
for(let t=0;c.length>t;t++){const e=c[t],i=e.data.vertices,n=e.data.normals,s=e.data.indices,o=e.px*r,a=e.
|
|
726
|
+
for(let t=0;c.length>t;t++){const e=c[t],i=e.data.vertices,n=e.data.normals,s=e.data.indices,o=e.px*r,a=e.Rs*r,h=e.js*r,l=i.length
|
|
725
727
|
let u=b
|
|
726
728
|
for(let t=0;l>t;t+=3)v[u]=i[t]*r+o,v[u+1]=i[t+1]*r+a,v[u+2]=i[t+2]*r+h,u+=3
|
|
727
729
|
b=u,m.set(n,S),S+=n.length
|
|
728
|
-
const f=e.
|
|
730
|
+
const f=e.Hs,d=s.length
|
|
729
731
|
let y=_
|
|
730
732
|
for(let t=0;d>t;t++)x[y++]=s[t]+f
|
|
731
733
|
_=y}g.min.x*=r,g.min.y*=r,g.min.z*=r,g.max.x*=r,g.max.y*=r,g.max.z*=r
|
|
732
734
|
for(let t=0;w.length>t;t++)w[t].bounds.min.x*=r,w[t].bounds.min.y*=r,w[t].bounds.min.z*=r,w[t].bounds.max.x*=r,w[t].bounds.max.y*=r,w[t].bounds.max.z*=r
|
|
733
|
-
return{vertices:v,normals:m,indices:x,
|
|
735
|
+
return{vertices:v,normals:m,indices:x,ir:w,planeBounds:g}}Ks(t,e,i){if(0===t.length)return""
|
|
734
736
|
const n=t[0].x??0,s=t[0].y??0,r=t.map(t=>`${t.g}:${(t.x??0)-n},${(t.y??0)-s}`).join("|")
|
|
735
|
-
return`${this.
|
|
736
|
-
const e=`${this.
|
|
737
|
+
return`${this.Ms}_${r}_${Math.round(1e3*e)/1e3}_${i}`}Xs(t,e,i,n,s,r,o,a){return{nr:t.Js,sr:t.sr,Hs:e,rr:i,bounds:{min:{x:o.bounds.min.x+n,y:o.bounds.min.y+s,z:r},max:{x:o.bounds.max.x+n,y:o.bounds.max.y+s,z:r+a}}}}Vs(t){if(this.Is.has(t))return{jn:t,Hn:[],bounds:{min:{x:0,y:0},max:{x:0,y:0}}}
|
|
738
|
+
const e=`${this.Ms}_${t}`,i=this.Ds.get(e)
|
|
737
739
|
if(i)return i
|
|
738
|
-
this.
|
|
739
|
-
const n=this.
|
|
740
|
-
return 0===n.
|
|
741
|
-
return this.
|
|
740
|
+
this.ks.ds(this.fs),this.fs.reset(),this.fs.Wn(t,0),this.Xt.module.exports.ar(this.Xt.font.hr,t,this.ks._s(),0),this.fs.zn()
|
|
741
|
+
const n=this.fs.Xn()[0]||{jn:t,Hn:[],bounds:{min:{x:0,y:0},max:{x:0,y:0}}}
|
|
742
|
+
return 0===n.Hn.length&&this.Is.add(t),this.Ds.set(e,n),n}Qs(t,e,i){const n=this.tessellator.Bi(t,!0,i,0!==e)
|
|
743
|
+
return this.cr(n,e)}cr(t,e){const i=this.Os.qi(t,e,this.Xt.upem),n=i.vertices
|
|
742
744
|
let s=1/0,r=1/0,o=1/0,a=-1/0,h=-1/0,c=-1/0
|
|
743
745
|
for(let t=0;n.length>t;t+=3){const e=n[t],i=n[t+1],l=n[t+2]
|
|
744
|
-
s>e&&(s=e),e>a&&(a=e),r>i&&(r=i),i>h&&(h=i),o>l&&(o=l),l>c&&(c=l)}const l=new
|
|
745
|
-
return{geometry:t,vertices:i.vertices,normals:i.normals,indices:i.indices,bounds:{min:l,max:u},
|
|
746
|
-
return this.
|
|
747
|
-
i.x>s.x&&(i.x=s.x),i.y>s.y&&(i.y=s.y),i.z>s.z&&(i.z=s.z),r.x>n.x&&(n.x=r.x),r.y>n.y&&(n.y=r.y),r.z>n.z&&(n.z=r.z)}
|
|
748
|
-
return t.forEach((t,o)=>{const a=this.
|
|
749
|
-
r.push(a)}),r}finally{}}
|
|
750
|
-
"rtl"===o&&a.
|
|
746
|
+
s>e&&(s=e),e>a&&(a=e),r>i&&(r=i),i>h&&(h=i),o>l&&(o=l),l>c&&(c=l)}const l=new X(s,r,o),u=new X(a,h,c)
|
|
747
|
+
return{geometry:t,vertices:i.vertices,normals:i.normals,indices:i.indices,bounds:{min:l,max:u},tr:1}}er(t,e,i,n){const s=this.tessellator.process(t.Hn,i,n,0!==e)
|
|
748
|
+
return this.cr(s,e)}Zs(t,e){const i=e.min,n=e.max,s=t.min,r=t.max
|
|
749
|
+
i.x>s.x&&(i.x=s.x),i.y>s.y&&(i.y=s.y),i.z>s.z&&(i.z=s.z),r.x>n.x&&(n.x=r.x),r.y>n.y&&(n.y=r.y),r.z>n.z&&(n.z=r.z)}lr(){return this.cache.getStats()}clearCache(){this.cache.clear(),this.Bs.clear(),this.Ns.clear(),this.Ds.clear()}}class xt{constructor(t,e){this.ur=new Map,this.Xt=t,this.dr=e}yr(t,e,i,n,s,r,o){try{const r=[]
|
|
750
|
+
return t.forEach((t,o)=>{const a=this.pr(t,o,e,i,n,s)
|
|
751
|
+
r.push(a)}),r}finally{}}pr(e,i,n,s,r,o){const a=this.Xt.hb.createBuffer()
|
|
752
|
+
"rtl"===o&&a.wr("rtl"),a.Yt(e.text),a.Jt()
|
|
751
753
|
const h=t(this.Xt.Kt)
|
|
752
754
|
this.Xt.hb.shape(this.Xt.font,a,h)
|
|
753
755
|
const c=a.json(this.Xt.font)
|
|
754
756
|
a.destroy()
|
|
755
757
|
const l=[]
|
|
756
758
|
let u=[],f=[],d=0,y=0,p=e.Pt,w=-i*n
|
|
757
|
-
const g=s*this.Xt.upem,v=this.
|
|
759
|
+
const g=s*this.Xt.upem,v=this.gr(e,r,s),m=this.vr(e,r),x=e.text,b=x.length,S=c.length
|
|
758
760
|
let _
|
|
759
761
|
for(let t=0;S>t;t++){const n=c[t],s=n.Qt,r=x[s],o=r.charCodeAt(0),a=32===o||9===o||10===o||13===o
|
|
760
|
-
n.
|
|
762
|
+
n.Js=e.zt&&s===b-1&&"-"===r?e.$t:e.Ut+s,n.sr=i,a&&u.length>0&&(l.push({text:f.join(""),glyphs:u,position:new X(d,y,0)}),u=[],f=[])
|
|
761
763
|
const h=p+n.dx,E=w+n.dy
|
|
762
764
|
if(a||(0===u.length&&(d=h,y=E),n.x=h-d,n.y=E-y,u.push(n),f.push(r)),p+=n.ax,w+=n.ay,0!==g&&S-1>t&&(p+=g),a&&(p+=v),0!==m&&S-1>t&&!a){const e=x[c[t+1].Qt],i=void 0!==_?_:A.et(r)
|
|
763
765
|
if(_=!!e&&A.et(e),i&&_){let t=!0
|
|
764
|
-
A.it(e)&&(t=!1),A.nt(r)&&(t=!1),A.st(r)&&A.st(e)&&(t=!1),t&&(p+=m)}}else _=void 0}return u.length>0&&l.push({text:f.join(""),glyphs:u,position:new
|
|
765
|
-
if(void 0!==t.qt&&"justify"===e&&!t.
|
|
766
|
-
void 0===e&&(e=I.measureTextWidth(this.Xt," ",i),this.
|
|
767
|
-
return t.qt>0||0>t.qt?.04*t.qt*this.Xt.upem:0}clearCache(){this.
|
|
766
|
+
A.it(e)&&(t=!1),A.nt(r)&&(t=!1),A.st(r)&&A.st(e)&&(t=!1),t&&(p+=m)}}else _=void 0}return u.length>0&&l.push({text:f.join(""),glyphs:u,position:new X(d,y,0)}),l}gr(t,e,i){let n=0
|
|
767
|
+
if(void 0!==t.qt&&"justify"===e&&!t.Wt){let e=this.ur.get(i)
|
|
768
|
+
void 0===e&&(e=I.measureTextWidth(this.Xt," ",i),this.ur.set(i,e)),t.qt>0?n=t.qt*e*.5:0>t.qt&&(n=t.qt*e*d)}return n}vr(t,e){if(void 0===t.qt||"justify"!==e||t.Wt)return 0
|
|
769
|
+
return t.qt>0||0>t.qt?.04*t.qt*this.Xt.upem:0}clearCache(){this.dr.clearCache()}lr(){return this.dr.lr()}}var bt={exports:{}},St=o(Object.freeze({__proto__:null,default:{},h(...t){const e="undefined"!=typeof globalThis?globalThis.require:void 0
|
|
768
770
|
if("function"==typeof e)return e("fs").h(...t)
|
|
769
771
|
throw Error("fs not available in this environment")}}))
|
|
770
772
|
!(function(t){var e,i=(e="undefined"!=typeof document?document.currentScript?.src:void 0,async function(t={}){function i(){var t=g.buffer
|
|
771
|
-
s.HEAP8=new Int8Array(t),s.HEAPU8=v=new Uint8Array(t),s.HEAP32=new Int32Array(t),s.HEAPU32=new Uint32Array(t),s.HEAPF32=new Float32Array(t),new BigInt64Array(t),new BigUint64Array(t)}function n(t){s.
|
|
773
|
+
s.HEAP8=new Int8Array(t),s.HEAPU8=v=new Uint8Array(t),s.HEAP32=new Int32Array(t),s.HEAPU32=new Uint32Array(t),s.HEAPF32=new Float32Array(t),new BigInt64Array(t),new BigUint64Array(t)}function n(t){s.mr?.(t),x(t="Aborted("+t+")"),b=!0,t+=". Build with -sASSERTIONS for more info."
|
|
772
774
|
var e=new WebAssembly.RuntimeError(t)
|
|
773
775
|
throw w?.(e),e}var s=t,r="object"==typeof window,o="undefined"!=typeof WorkerGlobalScope,a="object"==typeof process&&process.versions?.node&&"renderer"!=process.type,h=(t,e)=>{throw e}
|
|
774
776
|
"undefined"!=typeof __filename?e=__filename:o&&(e=self.location.href)
|
|
775
777
|
var c,l,u=""
|
|
776
|
-
if(a){var f=
|
|
778
|
+
if(a){var f=St
|
|
777
779
|
u="undefined"!=typeof __dirname?__dirname+"/":"",l=t=>(t=S(t)?new URL(t):t,f.h(t)),c=async(t,e=!0)=>(t=S(t)?new URL(t):t,f.h(t,e?void 0:"utf8")),process.argv.length>1&&process.argv[1].replace(/\\/g,"/"),process.argv.slice(2),h=(t,e)=>{throw process.exitCode=t,e}}else if(r||o){try{u=new URL(".",e).href}catch{}o&&(l=t=>{var e=new XMLHttpRequest
|
|
778
780
|
return e.open("GET",t,!1),e.responseType="arraybuffer",e.send(null),new Uint8Array(e.response)}),c=async t=>{if(S(t))return new Promise((e,i)=>{var n=new XMLHttpRequest
|
|
779
781
|
n.open("GET",t,!0),n.responseType="arraybuffer",n.onload=()=>{200==n.status||0==n.status&&n.response?e(n.response):i(n.status)},n.onerror=i,n.send(null)})
|
|
@@ -782,197 +784,197 @@ if(e.ok)return e.arrayBuffer()
|
|
|
782
784
|
throw Error(e.status+" : "+e.url)}}console.log.bind(console)
|
|
783
785
|
var d,y,p,w,g,v,m,x=console.error.bind(console),b=!1,S=t=>t.startsWith("file://"),_=!1,E=0,T=null
|
|
784
786
|
class A{name="ExitStatus"
|
|
785
|
-
constructor(t){this.message=`Program terminated with exit(${t})`,this.status=t}}var M,I,F,L=t=>{for(;t.length>0;)t.shift()(s)},G=[],O=t=>G.push(t),C=[],k=t=>C.push(t),
|
|
786
|
-
h(1,t)}
|
|
787
|
+
constructor(t){this.message=`Program terminated with exit(${t})`,this.status=t}}var M,I,F,L=t=>{for(;t.length>0;)t.shift()(s)},G=[],O=t=>G.push(t),C=[],k=t=>C.push(t),D=!0,B=0,N={},U=t=>{if(t instanceof A||"unwind"==t)return y
|
|
788
|
+
h(1,t)},$=()=>D||B>0,P=t=>{y=t,$()||(s.br?.(t),b=!0),h(t,new A(t))},W=(t,e)=>Math.ceil(t/e)*e,z=t=>{var e=(t-g.buffer.byteLength+65535)/65536|0
|
|
787
789
|
try{return g.grow(e),i(),1}catch(t){}},R=t=>{const e=t.length
|
|
788
|
-
return[e%128|128,e>>7,...t]},j={
|
|
789
|
-
s.
|
|
790
|
+
return[e%128|128,e>>7,...t]},j={ai:127,ci:127,ui:126,f:125,d:124,e:111},H=t=>R(Array.from(t,t=>j[t])),V=t=>M.get(t),q=[],Y=(t,e)=>M.set(t,e)
|
|
791
|
+
s.Sr&&(D=s.Sr),s._r&&(x=s._r),s.Er&&(d=s.Er),s.Tr=g,s.Ar=K,s.ps=(t,e)=>{var i=(t=>(I||(I=new WeakMap,((t,e)=>{if(I)for(var i=0;0+e>i;i++){var n=V(i)
|
|
790
792
|
n&&I.set(n,i)}})(0,M.length)),I.get(t)||0))(t)
|
|
791
793
|
if(i)return i
|
|
792
794
|
var n=q.length?q.pop():M.grow(1)
|
|
793
795
|
try{Y(n,t)}catch(i){if(!(i instanceof TypeError))throw i
|
|
794
796
|
var s=((t,e)=>{var i=Uint8Array.of(0,97,115,109,1,0,0,0,1,...R([1,96,...H(e.slice(1)),...H("v"===e[0]?"":e[0])]),2,7,1,1,101,1,102,0,0,7,5,1,1,102,0,0),n=new WebAssembly.Module(i)
|
|
795
797
|
return new WebAssembly.Instance(n,{e:{f:t}}).exports.f})(t,e)
|
|
796
|
-
Y(n,s)}return I.set(t,n),n},s.
|
|
797
|
-
var J={
|
|
798
|
-
var i=setTimeout(()=>{delete
|
|
799
|
-
return
|
|
798
|
+
Y(n,s)}return I.set(t,n),n},s.Ts=t=>{I.delete(V(t)),Y(t,null),q.push(t)}
|
|
799
|
+
var J={Mr:()=>n(""),Ir(){D=!1,B=0},Fr(t,e){if(N[t]&&(clearTimeout(N[t].id),delete N[t]),!e)return 0
|
|
800
|
+
var i=setTimeout(()=>{delete N[t],(t=>{if(!b)try{t(),(()=>{if(!$())try{y=t=y,P(t)}catch(t){U(t)}var t})()}catch(t){U(t)}})(()=>F(t,performance.now()))},e)
|
|
801
|
+
return N[t]={id:i,Lr:e},0},Gr(t){var e=v.length,i=2147483648
|
|
800
802
|
if((t>>>=0)>i)return!1
|
|
801
|
-
for(var n=1;4>=n;n*=2){var s=e*(1+.2/n),r=Math.min(i,
|
|
802
|
-
if(
|
|
803
|
-
T=null,t()}})(),K}E++,s.
|
|
804
|
-
var e,r={l:J,
|
|
805
|
-
return s.
|
|
803
|
+
for(var n=1;4>=n;n*=2){var s=e*(1+.2/n),r=Math.min(i,W(Math.max(t,s=Math.min(s,t+100663296)),65536))
|
|
804
|
+
if(z(r))return!0}return!1},Or:P},K=await(async()=>{function t(t){return s.Ar=K=t.exports,s.Tr=g=K.memory,i(),M=K.Cr,(t=>{s.kr=t.Dr,s.Br=t.Nr,s.Ur=t.$r,s.Pr=t.Wr,s.zr=t.Rr,s.jr=t.Hr,s.Vr=t.qr,s.Yr=t.Jr,s.Kr=t.Qr,s.Xr=t.Zr,s.eo=t.io,s.no=t.so,s.ro=t.oo,s.ao=t.ho,s.co=t.lo,s.uo=t.fo,s.do=t.yo,s.po=t.wo,s.vo=t.mo,s.xo=t.bo,s.So=t._o,s.Eo=t.To,s.Ao=t.Mo,s.Io=t.Fo,s.Lo=t.Go,s.Oo=t.Co,s.ko=t.Do,s.Bo=t.No,s.Uo=t.gs,s.$o=t.vs,s.Po=t.xs,s.Wo=t.bs,s.zo=t.Ss,s.Ro=t.ws,s.jo=t.Es,s.Ho=t.Vo,s.qo=t.Yo,s.Jo=t.Ko,s.Qo=t.Xo,s.Zo=t.ta,s.ea=t.ar,s.ia=t.na,s.sa=t.ra,s.oa=t.aa,s.ha=t.ca,s.la=t.ua,s.fa=t.da,s.ya=t.pa,s.wa=t.ga,s.va=t.ma,s.xa=t.ba,s.Sa=t._a,F=t.Ea})(K),(()=>{if(E--,s.Ta?.(E),0==E&&T){var t=T
|
|
805
|
+
T=null,t()}})(),K}E++,s.Ta?.(E)
|
|
806
|
+
var e,r={l:J,Aa:J}
|
|
807
|
+
return s.Ma?new Promise(e=>{s.Ma(r,i=>{e(t(i))})}):(m??=(e="hb.wasm",s.Ia?s.Ia(e,u):u+e),t((await(async function(t,e,i){if(!t&&!S(e)&&!a)try{var s=fetch(e,{credentials:"same-origin"})
|
|
806
808
|
return await WebAssembly.instantiateStreaming(s,i)}catch(t){x("wasm streaming compile failed: "+t),x("falling back to ArrayBuffer instantiation")}return(async(t,e)=>{try{var i=await(async t=>{if(!d)try{var e=await c(t)
|
|
807
809
|
return new Uint8Array(e)}catch{}return(t=>{if(t==m&&d)return new Uint8Array(d)
|
|
808
810
|
if(l)return l(t)
|
|
809
811
|
throw"both async and sync fetching of the wasm failed"})(t)})(t)
|
|
810
|
-
return await WebAssembly.instantiate(i,e)}catch(t){x("failed to asynchronously prepare wasm: "+t),n(t)}})(e,i)})(d,m,r)).
|
|
811
|
-
return(()=>{if(s.
|
|
812
|
-
L(G)})())}E>0?T=t:((()=>{if(s.
|
|
812
|
+
return await WebAssembly.instantiate(i,e)}catch(t){x("failed to asynchronously prepare wasm: "+t),n(t)}})(e,i)})(d,m,r)).Fa))})()
|
|
813
|
+
return(()=>{if(s.La)for("function"==typeof s.La&&(s.La=[s.La]);s.La.length>0;)s.La.shift()()})(),(function t(){function e(){s.Ga=!0,b||(_=!0,K.Oa(),p?.(s),s.Ca?.(),(()=>{if(s.ka)for("function"==typeof s.ka&&(s.ka=[s.ka]);s.ka.length;)O(s.ka.shift())
|
|
814
|
+
L(G)})())}E>0?T=t:((()=>{if(s.Da)for("function"==typeof s.Da&&(s.Da=[s.Da]);s.Da.length;)k(s.Da.shift())
|
|
813
815
|
L(C)})(),E>0?T=t:s.setStatus?(s.setStatus("Running..."),setTimeout(()=>{setTimeout(()=>s.setStatus(""),1),e()},1)):e())})(),_?s:new Promise((t,e)=>{p=t,w=e})})
|
|
814
|
-
t.exports=i,t.exports.default=i})(
|
|
815
|
-
var
|
|
816
|
-
try{
|
|
816
|
+
t.exports=i,t.exports.default=i})(bt)
|
|
817
|
+
var _t=r(bt.exports),Et={exports:{}}
|
|
818
|
+
try{Et.exports=t=>{function e(t){return(255&t.charCodeAt(0))<<24|(255&t.charCodeAt(1))<<16|(255&t.charCodeAt(2))<<8|255&t.charCodeAt(3)}function i(e){var i=s.Do(e.length+1)
|
|
817
819
|
for(let n=0;e.length>n;++n){const s=e.charCodeAt(n)
|
|
818
820
|
if(s>127)throw Error("Expected ASCII text")
|
|
819
|
-
t.HEAPU8[i+n]=s}return t.HEAPU8[i+e.length]=0,{
|
|
820
|
-
n&&(n=n.split(","),r=s.
|
|
821
|
-
s.
|
|
822
|
-
let o=t.
|
|
823
|
-
var h=o(t=>{s.
|
|
824
|
-
return{
|
|
821
|
+
t.HEAPU8[i+n]=s}return t.HEAPU8[i+e.length]=0,{hr:i,length:e.length,No(){s.No(i)}}}function n(t,e,n){var r=0,o=0
|
|
822
|
+
n&&(n=n.split(","),r=s.Do(16*n.length),n.forEach(t=>{var e=i(t)
|
|
823
|
+
s.Co(e.hr,-1,r+16*o)&&o++,e.No()})),s._a(t.hr,e.hr,r,o),r&&s.No(r)}var s=t.Ar,r=new TextDecoder("utf8")
|
|
824
|
+
let o=t.ps,a=t.Ts
|
|
825
|
+
var h=o(t=>{s.No(t)},"vi"),c=e("JSON"),l="",u=s.Do(256)
|
|
826
|
+
return{We(e){var i=s.Do(e.byteLength)
|
|
825
827
|
t.HEAPU8.set(new Uint8Array(e),i)
|
|
826
|
-
var n=s.
|
|
827
|
-
return{
|
|
828
|
-
const o=s.
|
|
829
|
-
return{
|
|
830
|
-
if(o){var a=s.
|
|
831
|
-
return t.HEAPU8.subarray(a,a+o)}},
|
|
832
|
-
t.HEAPU32[i/4]=64,s.
|
|
828
|
+
var n=s.Dr(i,e.byteLength,2,i,h)
|
|
829
|
+
return{hr:n,destroy(){s.Nr(n)}}},ze(i,n){var r=s.Vo(i.hr,n)
|
|
830
|
+
const o=s.Xo(r)
|
|
831
|
+
return{hr:r,upem:o,Ba(i){var n=s.Ko(r,e(i)),o=s.$r(n)
|
|
832
|
+
if(o){var a=s.Wr(n,null)
|
|
833
|
+
return t.HEAPU8.subarray(a,a+o)}},He(){var e=s.Do(2048),i=s.Do(4)
|
|
834
|
+
t.HEAPU32[i/4]=64,s.ga(r,0,i,e)
|
|
833
835
|
var n={}
|
|
834
836
|
return Array.from({length:t.HEAPU32[i/4]}).forEach((i,s)=>{var r
|
|
835
|
-
n[(r=t.HEAPU32[e/4+8*s+1],""+String.fromCharCode(r>>24&255)+String.fromCharCode(r>>16&255)+String.fromCharCode(r>>8&255)+String.fromCharCode(255&r))]={min:t.HEAPF32[e/4+8*s+4],default:t.HEAPF32[e/4+8*s+5],max:t.HEAPF32[e/4+8*s+6]}}),s.
|
|
836
|
-
s.
|
|
837
|
-
var i=(e=>{const i=s.
|
|
838
|
-
return t.HEAPU32.set(o,r),s.
|
|
839
|
-
return s.
|
|
840
|
-
return{
|
|
837
|
+
n[(r=t.HEAPU32[e/4+8*s+1],""+String.fromCharCode(r>>24&255)+String.fromCharCode(r>>16&255)+String.fromCharCode(r>>8&255)+String.fromCharCode(255&r))]={min:t.HEAPF32[e/4+8*s+4],default:t.HEAPF32[e/4+8*s+5],max:t.HEAPF32[e/4+8*s+6]}}),s.No(i),s.No(e),n},Na(){var e=s.da()
|
|
838
|
+
s.ta(r,e)
|
|
839
|
+
var i=(e=>{const i=s.ma(e),n=s.Do(i<<2),r=n>>2,o=t.HEAPU32.subarray(r,r+i)
|
|
840
|
+
return t.HEAPU32.set(o,r),s.ba(e,-1,n,i),o})(e)
|
|
841
|
+
return s.pa(e),i},destroy(){s.Yo(r)}}},Re(i){function n(t){return c||(f=o((t,e,i,n,s)=>{l+=`M${n},${s}`},"viiiffi"),d=o((t,e,i,n,s)=>{l+=`L${n},${s}`},"viiiffi"),y=o((t,e,i,n,s,r,o,a,h)=>{l+=`C${n},${s} ${r},${o} ${a},${h}`},"viiiffffffi"),p=o((t,e,i,n,s,r,o)=>{l+=`Q${n},${s} ${r},${o}`},"viiiffffi"),w=o(()=>{l+="Z"},"viiii"),c=s.ws(),s.gs(c,f,0,0),s.vs(c,d,0,0),s.bs(c,y,0,0),s.xs(c,p,0,0),s.Ss(c,w,0,0)),l="",s.ar(h,t,c,0),l}var h=s.ra(i.hr),c=null,f=null,d=null,y=null,p=null,w=null
|
|
842
|
+
return{hr:h,Ua(e){s.na(h,e,u,256)
|
|
841
843
|
var i=t.HEAPU8.subarray(u,u+256)
|
|
842
|
-
return r.decode(i.slice(0,i.indexOf(0)))},$a:n,
|
|
843
|
-
return{type:e[0],values:e.slice(1).filter(t=>t.length).map(t=>+t)}}),setScale(t,e){s.
|
|
844
|
-
n.forEach((i,n)=>{t.HEAPU32[r/4+2*n+0]=e(i[0]),t.HEAPF32[r/4+2*n+1]=i[1]}),s.
|
|
845
|
-
return{
|
|
844
|
+
return r.decode(i.slice(0,i.indexOf(0)))},$a:n,Pa:t=>n(t).replace(/([MLQCZ])/g,"|$1 ").split("|").filter(t=>t.length).map(t=>{var e=t.split(/[ ,]/g)
|
|
845
|
+
return{type:e[0],values:e.slice(1).filter(t=>t.length).map(t=>+t)}}),setScale(t,e){s.ua(h,t,e)},je(i){var n=Object.entries(i),r=s.Do(8*n.length)
|
|
846
|
+
n.forEach((i,n)=>{t.HEAPU32[r/4+2*n+0]=e(i[0]),t.HEAPF32[r/4+2*n+1]=i[1]}),s.aa(h,r,n.length),s.No(r)},destroy(){s.ca(h),c&&(s.Es(c),c=null,a(f),a(d),a(y),a(p),a(w))}}},createBuffer(){var e=s.Hr()
|
|
847
|
+
return{hr:e,Yt(i){const n=(e=>{const i=s.Do(2*e.length),n=new Uint16Array(t.Tr.buffer,i,e.length)
|
|
846
848
|
for(let t=0;n.length>t;++t)n[t]=e.charCodeAt(t)
|
|
847
|
-
return{
|
|
848
|
-
s.
|
|
849
|
-
t.forEach(t=>{i|=(t=>"BOT"==t?1:"EOT"==t?2:"PRESERVE_DEFAULT_IGNORABLES"==t?4:"REMOVE_DEFAULT_IGNORABLES"==t?8:"DO_NOT_INSERT_DOTTED_CIRCLE"==t?16:"PRODUCE_UNSAFE_TO_CONCAT"==t?64:0)(t)}),s.
|
|
850
|
-
s.
|
|
851
|
-
s.
|
|
852
|
-
return n},destroy(){s.
|
|
853
|
-
return o.startsWith("start table GSUB")?d=1:o.startsWith("start table GPOS")&&(d=2),d!=u&&(y=!1),0!=u&&d==u&&o.startsWith("end lookup "+l)&&(y=!0),y?0:(s.
|
|
854
|
-
return s.
|
|
855
|
-
s.
|
|
856
|
-
var i={
|
|
857
|
-
return s.
|
|
858
|
-
return r.decode(t.HEAPU8.subarray(e,t.HEAPU8.indexOf(0,e)))}}}}catch(t){}var
|
|
859
|
-
let
|
|
860
|
-
const
|
|
861
|
-
if(
|
|
862
|
-
else{if(!
|
|
863
|
-
e.
|
|
864
|
-
t({hb:
|
|
865
|
-
class
|
|
866
|
-
e.push(t),this.
|
|
867
|
-
return t.
|
|
849
|
+
return{hr:i,length:n.length,No(){s.No(i)}}})(i)
|
|
850
|
+
s.bo(e,n.hr,n.length,0,n.length),n.No()},Jt:()=>s.wo(e),wr(t){s.Qr(e,{Wa:4,za:5,Ra:6,ja:7}[t]||0)},Ha(t){var i=0
|
|
851
|
+
t.forEach(t=>{i|=(t=>"BOT"==t?1:"EOT"==t?2:"PRESERVE_DEFAULT_IGNORABLES"==t?4:"REMOVE_DEFAULT_IGNORABLES"==t?8:"DO_NOT_INSERT_DOTTED_CIRCLE"==t?16:"PRODUCE_UNSAFE_TO_CONCAT"==t?64:0)(t)}),s.so(e,i)},Va(t){var n=i(t)
|
|
852
|
+
s.io(e,s.To(n.hr,-1)),n.No()},qa(t){var n=i(t)
|
|
853
|
+
s.Zr(e,s.Mo(n.hr,-1)),n.No()},Ya(t){s.oo(e,t)},json(){for(var i=s.ho(e),n=[],r=s.lo(e,0),o=r/4,a=s.fo(e,0)/4,h=t.HEAPU32.subarray(o,o+5*i),c=t.HEAP32.subarray(a,a+5*i),l=0;i>l;++l)n.push({g:h[5*l+0],Qt:h[5*l+2],ax:c[5*l+0],ay:c[5*l+1],dx:c[5*l+2],dy:c[5*l+3],flags:s.yo(r+20*l)})
|
|
854
|
+
return n},destroy(){s.qr(e)}}},shape:n,Ja(e,i,h,l,u){var f=[],d=0,y=!1,p=1048576,w=s.Do(p),g=o((e,i,n)=>{var o=r.decode(t.HEAPU8.subarray(n,t.HEAPU8.indexOf(0,n)))
|
|
855
|
+
return o.startsWith("start table GSUB")?d=1:o.startsWith("start table GPOS")&&(d=2),d!=u&&(y=!1),0!=u&&d==u&&o.startsWith("end lookup "+l)&&(y=!0),y?0:(s.Rr(e,0,s.ho(e),w,p,0,i,c,4),f.push({fi:o,wi:JSON.parse(r.decode(t.HEAPU8.subarray(w,t.HEAPU8.indexOf(0,w)))),glyphs:2==s.Jr(e)}),1)},"iiiii")
|
|
856
|
+
return s._o(i.hr,g,0,0),n(e,i,h),s.No(w),a(g),f},version(){var e=s.Do(12)
|
|
857
|
+
s.Fo(e,e+4,e+8)
|
|
858
|
+
var i={Ka:t.HEAPU32[e/4],Qa:t.HEAPU32[(e+4)/4],Xa:t.HEAPU32[(e+8)/4]}
|
|
859
|
+
return s.No(e),i},Za(){var e=s.Go()
|
|
860
|
+
return r.decode(t.HEAPU8.subarray(e,t.HEAPU8.indexOf(0,e)))}}}}catch(t){}var Tt=r(Et.exports)
|
|
861
|
+
let At=null,Mt=null,It=null
|
|
862
|
+
const Ft={th(t){Mt=t,It=null,At=null},eh(t){It=t,Mt=null,At=null},ih:async()=>At||(At=new Promise(async(t,e)=>{try{const e={}
|
|
863
|
+
if(It)e.Er=It
|
|
864
|
+
else{if(!Mt)throw Error("HarfBuzz WASM path or buffer must be set before initialization.")
|
|
865
|
+
e.Er=await a(Mt)}const i=await _t(e)
|
|
866
|
+
t({hb:Tt(i),module:{ps:i.ps,exports:i.Ar,Ts:i.Ts}})}catch(t){e(Error("Failed to initialize HarfBuzz: "+t))}}),At)}
|
|
867
|
+
class Lt{constructor(t,e){this.text=t,this.nh=new Map,e.forEach(t=>{const e=this.nh.get(t.nr)||[]
|
|
868
|
+
e.push(t),this.nh.set(t.nr,e)})}sh(t){const e=[]
|
|
869
|
+
return t.rh&&e.push(...this.oh(t.rh)),t.ah&&e.push(...this.hh(t.ah)),e}oh(t){const e=[]
|
|
868
870
|
for(const i of t){let t=0
|
|
869
|
-
for(;-1!==(t=this.text.indexOf(i,t));)e.push(this.createTextRange(t,t+i.length,i)),t+=i.length}return e}
|
|
871
|
+
for(;-1!==(t=this.text.indexOf(i,t));)e.push(this.createTextRange(t,t+i.length,i)),t+=i.length}return e}hh(t){return t.map(t=>{const e=this.text.slice(t.start,t.end)
|
|
870
872
|
return this.createTextRange(t.start,t.end,e)})}createTextRange(t,e,i){const n=[],s=new Map
|
|
871
|
-
for(let i=t;e>i;i++){const t=this.
|
|
873
|
+
for(let i=t;e>i;i++){const t=this.nh.get(i)
|
|
872
874
|
if(t)for(const e of t){n.push(e)
|
|
873
|
-
const t=s.get(e.
|
|
874
|
-
t.push(e),s.set(e.
|
|
875
|
+
const t=s.get(e.sr)||[]
|
|
876
|
+
t.push(e),s.set(e.sr,t)}}return{start:t,end:e,uh:i,bounds:Array.from(s.values()).map(t=>this.fh(t)),glyphs:n,dh:Array.from(s.keys()).sort((t,e)=>t-e)}}fh(t){if(0===t.length)return{min:{x:0,y:0,z:0},max:{x:0,y:0,z:0}}
|
|
875
877
|
let e=1/0,i=1/0,n=1/0,s=-1/0,r=-1/0,o=-1/0
|
|
876
878
|
for(const a of t)e>a.bounds.min.x&&(e=a.bounds.min.x),i>a.bounds.min.y&&(i=a.bounds.min.y),n>a.bounds.min.z&&(n=a.bounds.min.z),a.bounds.max.x>s&&(s=a.bounds.max.x),a.bounds.max.y>r&&(r=a.bounds.max.y),a.bounds.max.z>o&&(o=a.bounds.max.z)
|
|
877
|
-
return{min:{x:e,y:i,z:n},max:{x:s,y:r,z:o}}}}const
|
|
878
|
-
class
|
|
879
|
+
return{min:{x:e,y:i,z:n},max:{x:s,y:r,z:o}}}}const Gt=72
|
|
880
|
+
class Ot{static{this.yh=new Map}static{this.ph=null}static{this.wh=new Map}static{this.gh=0}static{this.mh=1/0}static{this.xh=0}static bh(t){(t=>{V=t})(t)}static Sh(t){const e=Object.keys(t).sort()
|
|
879
881
|
let i=""
|
|
880
882
|
for(let n=0;e.length>n;n++)n>0&&(i+=","),i+=e[n]+":"+t[e[n]]
|
|
881
|
-
return i}constructor(){this.
|
|
882
|
-
|
|
883
|
-
const e=await
|
|
884
|
-
i.
|
|
885
|
-
const n=await i.
|
|
883
|
+
return i}constructor(){this._h="",Ot.ph||(Ot.ph=Ft.ih()),this.Eh=new Y(()=>Ot.ph)}static Th(t){Ft.th(t),Ot.ph=null}static Ah(t){Ft.eh(t),Ot.ph=null}static init(){return Ot.ph||(Ot.ph=Ft.ih()),Ot.ph}static async create(t){if(!t.font)throw Error("Font is required. Specify options.font as a URL string or ArrayBuffer.")
|
|
884
|
+
Ot.ph||(Ot.ph=Ft.ih())
|
|
885
|
+
const e=await Ot.Mh(t),i=new Ot
|
|
886
|
+
i.Ih(e)
|
|
887
|
+
const n=await i.Fh(t),s=async e=>{const n={...t}
|
|
886
888
|
for(const t in e){const i=e[t]
|
|
887
|
-
void 0!==i&&(n[t]=i)}if(void 0!==e.font||void 0!==e.
|
|
888
|
-
i.
|
|
889
|
-
return{...n,getLoadedFont(){return i.getLoadedFont()},getCacheSize(){return i.getCacheSize()},clearCache(){return i.clearCache()},measureTextWidth(t,e){return i.measureTextWidth(t,e)},update:s}}static async
|
|
890
|
-
t.
|
|
891
|
-
let i=
|
|
892
|
-
return i||(i=await
|
|
893
|
-
await s.
|
|
889
|
+
void 0!==i&&(n[t]=i)}if(void 0!==e.font||void 0!==e.Ve||void 0!==e.Kt){const t=await Ot.Mh(n)
|
|
890
|
+
i.Ih(t),i.Lh()}return t=n,{...await i.Fh(t),getLoadedFont(){return i.getLoadedFont()},getCacheSize(){return i.getCacheSize()},clearCache(){return i.clearCache()},measureTextWidth(t,e){return i.measureTextWidth(t,e)},update:s}}
|
|
891
|
+
return{...n,getLoadedFont(){return i.getLoadedFont()},getCacheSize(){return i.getCacheSize()},clearCache(){return i.clearCache()},measureTextWidth(t,e){return i.measureTextWidth(t,e)},update:s}}static async Mh(t){let e="string"==typeof t.font?t.font:"buffer-"+Ot.Gh(t.font)
|
|
892
|
+
t.Ve&&(e+="_var_"+Ot.Sh(t.Ve)),t.Kt&&(e+="_feat_"+Ot.Sh(t.Kt))
|
|
893
|
+
let i=Ot.wh.get(e)
|
|
894
|
+
return i||(i=await Ot.Oh(e,t.font,t.Ve,t.Kt)),i}static async Oh(t,e,i,n){const s=new Ot
|
|
895
|
+
await s.Pe(e,i,n)
|
|
894
896
|
const r=s.getLoadedFont()
|
|
895
|
-
return
|
|
896
|
-
e&&(
|
|
897
|
+
return Ot.wh.set(t,r),Ot.Ch(r),Ot.kh(),r}static Ch(t){Ot.gh+=t.Qe?.byteLength??0}static Dh(t){const e=Ot.wh.get(t)
|
|
898
|
+
e&&(Ot.gh-=e.Qe?.byteLength??0,0>Ot.gh&&(Ot.gh=0))}static kh(){if(Ot.mh!==1/0)for(;Ot.gh>Ot.mh&&Ot.wh.size>0;){const t=Ot.wh.keys().next().value
|
|
897
899
|
if(void 0===t)break
|
|
898
|
-
|
|
900
|
+
Ot.Dh(t),Ot.wh.delete(t)}}static Gh(t){if(t){const e=new Uint8Array(t)
|
|
899
901
|
let i=2166136261
|
|
900
902
|
const n=Math.min(32,e.length),s=Math.floor(e.length/n)
|
|
901
903
|
for(let t=0;n>t;t++)i^=e[t*s],i=Math.imul(i,16777619)
|
|
902
|
-
return i^=e.length,i=Math.imul(i,16777619),(i>>>0).toString(36)}return"c"+ ++
|
|
903
|
-
const e=
|
|
904
|
-
this.
|
|
904
|
+
return i^=e.length,i=Math.imul(i,16777619),(i>>>0).toString(36)}return"c"+ ++Ot.xh}Ih(t){this.Xt=t
|
|
905
|
+
const e=Ot.Gh(t.Qe)
|
|
906
|
+
this._h="font_"+e,t.Ve&&(this._h+="_var_"+Ot.Sh(t.Ve)),t.Kt&&(this._h+="_feat_"+Ot.Sh(t.Kt))}async Pe(t,e,i){Ot.ph||(Ot.ph=Ft.ih()),await Ot.ph
|
|
905
907
|
const n="string"==typeof t?await a(t):t
|
|
906
|
-
try{this.Xt&&this.destroy(),this.Xt=await this.
|
|
907
|
-
const t=
|
|
908
|
-
this.
|
|
909
|
-
const e=await this.
|
|
910
|
-
this.
|
|
908
|
+
try{this.Xt&&this.destroy(),this.Xt=await this.Eh.Pe(n,e),i&&(this.Xt.Kt=i)
|
|
909
|
+
const t=Ot.Gh(n)
|
|
910
|
+
this._h="font_"+t,e&&(this._h+="_var_"+Ot.Sh(e)),i&&(this._h+="_feat_"+Ot.Sh(i))}catch(t){throw c.error("Failed to load font:",t),t}}async Fh(t){try{if(!this.Xt)throw Error("Font not loaded. Use Text.create() with a font option.")
|
|
911
|
+
const e=await this.Bh(t)
|
|
912
|
+
this.Nh(e),this.Uh(t=e),this.dr||(this.dr=new mt(tt,this.Xt),this.dr.Ps(this._h))
|
|
911
913
|
const i=null!=t.curveSteps&&t.curveSteps>0
|
|
912
|
-
this.
|
|
913
|
-
const n=this
|
|
914
|
+
this.dr.mn(t.curveSteps),this.dr.vn(i?void 0:t.curveFidelity),this.dr.es(t.geometryOptimization),this.Xt.font.setScale(this.Xt.upem,this.Xt.upem),this.$h||(this.$h=new xt(this.Xt,this.dr))
|
|
915
|
+
const n=this.Ph(t),s=t.Wh??this.Xt.qe??!1,r=this.$h.yr(n.lines,n.zh,n.letterSpacing,n.align,n.direction,t.color,t.text)
|
|
914
916
|
let o,a
|
|
915
|
-
if(t.color&&"object"==typeof t.color&&!Array.isArray(t.color)&&(t.color.
|
|
916
|
-
for(const e of Object.keys(t.color.
|
|
917
|
+
if(t.color&&"object"==typeof t.color&&!Array.isArray(t.color)&&(t.color.rh||t.color.ah)){if(o=new Set,t.color.rh){a=[]
|
|
918
|
+
for(const e of Object.keys(t.color.rh)){let i=0
|
|
917
919
|
for(;-1!==(i=t.text.indexOf(e,i));){a.push({pattern:e,start:i,end:i+e.length})
|
|
918
920
|
for(let t=i;i+e.length>t;t++)o.add(t)
|
|
919
|
-
i+=e.length}}}if(t.color.
|
|
920
|
-
if(t.perGlyphAttributes){const t=this.
|
|
921
|
-
c.glyphAttributes=t}return c}finally{}}async
|
|
922
|
-
if(!t.layout?.Et?.[e])try{if(!
|
|
923
|
-
|
|
924
|
-
const e=t.
|
|
925
|
-
if(t.text.length>e)throw Error(`Text exceeds ${e} character limit`)}
|
|
926
|
-
const{text:e,size:i=
|
|
921
|
+
i+=e.length}}}if(t.color.ah)for(const e of t.color.ah)for(let t=e.start;e.end>t;t++)o.add(t)}const h=this.dr.zs(r,n.depth,s,this.Xt.u.de,n.Rh,t.perGlyphAttributes??!1,o),c=this.jh(h.vertices,h.normals,h.indices,h.ir,h.planeBounds,t,t.text,a)
|
|
922
|
+
if(t.perGlyphAttributes){const t=this.Hh(c.vertices.length/3,c.glyphs)
|
|
923
|
+
c.glyphAttributes=t}return c}finally{}}async Bh(t){if(!1!==t.layout?.bt&&t.layout?.width){const e=t.layout?.language||"en-us"
|
|
924
|
+
if(!t.layout?.Et?.[e])try{if(!Ot.yh.has(e)){const n=await i(e,t.layout?.Vh)
|
|
925
|
+
Ot.yh.set(e,n)}return{...t,layout:{...t.layout,Et:{...t.layout?.Et,[e]:Ot.yh.get(e)}}}}catch(i){return c.warn(`Failed to load patterns for ${e}: ${i}`),{...t,layout:{...t.layout,bt:!1}}}}return t}Nh(t){if(!t.text)throw Error("Text content is required")
|
|
926
|
+
const e=t.qh??1e5
|
|
927
|
+
if(t.text.length>e)throw Error(`Text exceeds ${e} character limit`)}Uh(t){t.Ve&&this.Xt&&Ot.Sh(t.Ve)!==Ot.Sh(this.Xt.Ve||{})&&(this.Xt.font.je(t.Ve),this.Xt.Ve=t.Ve)}Ph(t){if(!this.Xt)throw Error("Font not loaded. Use Text.create() with a font option")
|
|
928
|
+
const{text:e,size:i=Gt,depth:n=0,lineHeight:s=1,letterSpacing:r=0,layout:o={}}=t,{width:a,direction:h="ltr",align:c=("rtl"===h?"right":"left"),St:d=!0,bt:y=!0,language:p="en-us",At:w=l,Mt:g=u,It:v=f,Ft:m,Et:x,Lt:b,Gt:S,Ot:_,Ct:E,kt:T,Dt:A,Bt:M}=o,I=this.Xt.upem/i
|
|
927
929
|
let L
|
|
928
930
|
void 0!==a&&(L=a*I)
|
|
929
931
|
const G=n*I,O=G>0?Math.max(G,25e-6*this.Xt.upem):0
|
|
930
|
-
this.
|
|
931
|
-
const C=this.
|
|
932
|
-
return{lines:C.lines,
|
|
932
|
+
this.Yh||(this.Yh=new F(this.Xt))
|
|
933
|
+
const C=this.Yh.Zt({text:e,width:L,align:c,direction:h,bt:y,language:p,St:d,At:w,Mt:g,It:v,Ft:m,Et:x,Lt:b,Gt:S,Ot:_,Ct:E,kt:T,Dt:A,Bt:M,letterSpacing:r}),k=H.Ge(this.Xt.u)
|
|
934
|
+
return{lines:C.lines,zh:(k.se-k.re)*s,letterSpacing:r,align:c,direction:h,depth:O,size:i,Rh:1/I}}Jh(t,e,i,n,s){const r=t.length/3,o=new Float32Array(3*r),a=[]
|
|
933
935
|
if(Array.isArray(i)){for(let t=0;r>t;t++){const e=3*t
|
|
934
|
-
o[e]=i[0],o[e+1]=i[1],o[e+2]=i[2]}a.push({start:0,end:n.length,
|
|
936
|
+
o[e]=i[0],o[e+1]=i[1],o[e+2]=i[2]}a.push({start:0,end:n.length,uh:n,color:i,bounds:[],glyphs:e,dh:[...new Set(e.map(t=>t.sr))]})}else{const t=i.default||[1,1,1]
|
|
935
937
|
for(let e=0;o.length>e;e+=3)o[e]=t[0],o[e+1]=t[1],o[e+2]=t[2]
|
|
936
938
|
let r
|
|
937
|
-
if(i.
|
|
938
|
-
for(const t of e){const e=r.get(t.
|
|
939
|
-
e?e.push(t):r.set(t.
|
|
939
|
+
if(i.rh&&s||i.ah){r=new Map
|
|
940
|
+
for(const t of e){const e=r.get(t.nr)
|
|
941
|
+
e?e.push(t):r.set(t.nr,[t])}}if(i.rh&&s&&r)for(const t of s){const e=i.rh[t.pattern]
|
|
940
942
|
if(!e)continue
|
|
941
943
|
const n=[],s=new Map
|
|
942
944
|
for(let i=t.start;t.end>i;i++){const t=r.get(i)
|
|
943
945
|
if(t)for(const i of t){n.push(i)
|
|
944
|
-
const t=s.get(i.
|
|
945
|
-
t?t.push(i):s.set(i.
|
|
946
|
-
for(let t=0;i.
|
|
947
|
-
n>=0&&o.length>n&&(o[n]=e[0],o[n+1]=e[1],o[n+2]=e[2])}}}const h=Array.from(s.values()).map(t=>this.
|
|
948
|
-
a.push({start:t.start,end:t.end,
|
|
946
|
+
const t=s.get(i.sr)
|
|
947
|
+
t?t.push(i):s.set(i.sr,[i])
|
|
948
|
+
for(let t=0;i.rr>t;t++){const n=3*(i.Hs+t)
|
|
949
|
+
n>=0&&o.length>n&&(o[n]=e[0],o[n+1]=e[1],o[n+2]=e[2])}}}const h=Array.from(s.values()).map(t=>this.Kh(t))
|
|
950
|
+
a.push({start:t.start,end:t.end,uh:t.pattern,color:e,bounds:h,glyphs:n,dh:Array.from(s.keys()).sort((t,e)=>t-e)})}if(i.ah&&r)for(const t of i.ah){const e=[],i=new Map
|
|
949
951
|
for(let n=t.start;t.end>n;n++){const s=r.get(n)
|
|
950
952
|
if(s)for(const n of s){e.push(n)
|
|
951
|
-
const s=i.get(n.
|
|
952
|
-
s?s.push(n):i.set(n.
|
|
953
|
-
for(let e=0;n.
|
|
954
|
-
i>=0&&o.length>i&&(o[i]=t.color[0],o[i+1]=t.color[1],o[i+2]=t.color[2])}}}const s=Array.from(i.values()).map(t=>this.
|
|
955
|
-
a.push({start:t.start,end:t.end,
|
|
953
|
+
const s=i.get(n.sr)
|
|
954
|
+
s?s.push(n):i.set(n.sr,[n])
|
|
955
|
+
for(let e=0;n.rr>e;e++){const i=3*(n.Hs+e)
|
|
956
|
+
i>=0&&o.length>i&&(o[i]=t.color[0],o[i+1]=t.color[1],o[i+2]=t.color[2])}}}const s=Array.from(i.values()).map(t=>this.Kh(t))
|
|
957
|
+
a.push({start:t.start,end:t.end,uh:n.slice(t.start,t.end),color:t.color,bounds:s,glyphs:e,dh:Array.from(i.keys()).sort((t,e)=>t-e)})}}return{colors:o,Qh:a}}Kh(t){if(0===t.length)return{min:{x:0,y:0,z:0},max:{x:0,y:0,z:0}}
|
|
956
958
|
let e=1/0,i=1/0,n=1/0,s=-1/0,r=-1/0,o=-1/0
|
|
957
959
|
for(const a of t)e>a.bounds.min.x&&(e=a.bounds.min.x),i>a.bounds.min.y&&(i=a.bounds.min.y),n>a.bounds.min.z&&(n=a.bounds.min.z),a.bounds.max.x>s&&(s=a.bounds.max.x),a.bounds.max.y>r&&(r=a.bounds.max.y),a.bounds.max.z>o&&(o=a.bounds.max.z)
|
|
958
|
-
return{min:{x:e,y:i,z:n},max:{x:s,y:r,z:o}}}
|
|
959
|
-
this.
|
|
960
|
-
const u=this.
|
|
960
|
+
return{min:{x:e,y:i,z:n},max:{x:s,y:r,z:o}}}jh(t,e,i,n,s,r,o,a){const{layout:h={}}=r,{width:c,align:l=("rtl"===h.direction?"right":"left")}=h
|
|
961
|
+
this.Yh||(this.Yh=new F(this.Xt))
|
|
962
|
+
const u=this.Yh.ie({width:c,align:l,planeBounds:s}),f=u.offset
|
|
961
963
|
if(s.min.x=u.ee.min.x,s.max.x=u.ee.max.x,0!==f){for(let e=0;t.length>e;e+=3)t[e]+=f
|
|
962
964
|
for(let t=0;n.length>t;t++)n[t].bounds.min.x+=f,n[t].bounds.max.x+=f}let d,y
|
|
963
|
-
if(r.color){const e=this.
|
|
964
|
-
d=e.colors,y=e.
|
|
965
|
+
if(r.color){const e=this.Jh(t,n,r.color,r.text,a)
|
|
966
|
+
d=e.colors,y=e.Qh}const p=this.dr.ns()
|
|
965
967
|
return{vertices:t,normals:e,indices:i,colors:d,glyphs:n,planeBounds:s,stats:{trianglesGenerated:i.length/3,verticesGenerated:t.length/3,pointsRemovedByVisvalingam:p.pointsRemovedByVisvalingam,originalPointCount:p.originalPointCount},query:(()=>{let t=null
|
|
966
968
|
return e=>{if(!o)throw Error("Original text not available for querying")
|
|
967
|
-
return t||(t=new
|
|
968
|
-
return
|
|
969
|
-
|
|
970
|
-
return I.measureTextWidth(this.Xt,t,e)}getCacheSize(){return this.
|
|
969
|
+
return t||(t=new Lt(o,n)),t.sh(e)}})(),Qh:y,glyphAttributes:void 0}}Oe(){if(!this.Xt)throw Error("Font not loaded. Call loadFont() first")
|
|
970
|
+
return H.Oe(this.Xt.u)}static async Xh(t,e){await Promise.all(t.map(async t=>{if(!Ot.yh.has(t))try{const n=await i(t,e)
|
|
971
|
+
Ot.yh.set(t,n)}catch(e){c.warn(`Failed to pre-load patterns for ${t}: ${e}`)}}))}static Zh(t,e){Ot.yh.set(t,e)}static tc(t){Ot.mh=t===1/0?1/0:1048576*Math.max(1,Math.floor(t)),Ot.kh()}getLoadedFont(){return this.Xt}measureTextWidth(t,e=0){if(!this.Xt)throw Error("Font not loaded. Call loadFont() first")
|
|
972
|
+
return I.measureTextWidth(this.Xt,t,e)}getCacheSize(){return this.dr?this.dr.lr().size:0}clearCache(){this.dr&&this.dr.clearCache()}Hh(t,e){const i=new Float32Array(3*t),n=new Float32Array(t),s=new Float32Array(t),r=new Float32Array(t),o=new Float32Array(t)
|
|
971
973
|
let a=1/0,h=-1/0
|
|
972
974
|
for(let t=0;e.length>t;t++){const i=(e[t].bounds.min.x+e[t].bounds.max.x)/2
|
|
973
975
|
a>i&&(a=i),i>h&&(h=i)}const c=h-a
|
|
974
|
-
for(let h=0;e.length>h;h++){const l=e[h],u=(l.bounds.min.x+l.bounds.max.x)/2,f=(l.bounds.min.y+l.bounds.max.y)/2,d=(l.bounds.min.z+l.bounds.max.z)/2,y=l.bounds.min.y,p=c>0?(u-a)/c:0,w=l.
|
|
975
|
-
if(g>w){n.fill(h,w,g),s.fill(l.
|
|
976
|
-
for(let t=3*w;3*g>t;t+=3)i[t]=u,i[t+1]=f,i[t+2]=d}}return{glyphCenter:i,glyphIndex:n,glyphLineIndex:s,glyphProgress:r,glyphBaselineY:o}}
|
|
976
|
+
for(let h=0;e.length>h;h++){const l=e[h],u=(l.bounds.min.x+l.bounds.max.x)/2,f=(l.bounds.min.y+l.bounds.max.y)/2,d=(l.bounds.min.z+l.bounds.max.z)/2,y=l.bounds.min.y,p=c>0?(u-a)/c:0,w=l.Hs,g=Math.min(w+l.rr,t)
|
|
977
|
+
if(g>w){n.fill(h,w,g),s.fill(l.sr,w,g),r.fill(p,w,g),o.fill(y,w,g)
|
|
978
|
+
for(let t=3*w;3*g>t;t+=3)i[t]=u,i[t+1]=f,i[t+2]=d}}return{glyphCenter:i,glyphIndex:n,glyphLineIndex:s,glyphProgress:r,glyphBaselineY:o}}Lh(){this.dr=void 0,this.$h=void 0,this.Yh=void 0}destroy(){if(!this.Xt)return
|
|
977
979
|
const t=this.Xt
|
|
978
|
-
try{
|
|
980
|
+
try{Y.Xe(t)}catch(t){c.warn("Error destroying HarfBuzz objects:",t)}finally{this.Xt=void 0,this.Yh=void 0,this.$h=void 0}}}export{dt as DEFAULT_CURVE_FIDELITY,H as FontMetadataExtractor,Ot as Text,s as createGlyphCache,tt as globalGlyphCache}
|