@doegis/core
Version:
DOE GIS API
3 lines (1 loc) • 1.62 kB
JavaScript
import e from"../../../../request.js";import t from"../../../../core/pbf.js";class s{constructor(e){if(this._metrics=[],this._bitmaps=[],e)for(;e.next();)switch(e.tag()){case 1:{const t=e.getMessage();for(;t.next();)switch(t.tag()){case 3:{const e=t.getMessage();let s,a,r,n,i,c,g;for(;e.next();)switch(e.tag()){case 1:s=e.getUInt32();break;case 2:a=e.getBytes();break;case 3:r=e.getUInt32();break;case 4:n=e.getUInt32();break;case 5:i=e.getSInt32();break;case 6:c=e.getSInt32();break;case 7:g=e.getUInt32();break;default:e.skip()}e.release(),s&&(this._metrics[s]={width:r,height:n,left:i,top:c,advance:g},this._bitmaps[s]=a);break}default:t.skip()}t.release();break}default:e.skip()}}getMetrics(e){return this._metrics[e]}getBitmap(e){return this._bitmaps[e]}}class a{constructor(){this._ranges=[]}getRange(e){return this._ranges[e]}addRange(e,t){this._ranges[e]=t}}class r{constructor(e){this._glyphInfo={},this._baseURL=e}getRange(a,r){const n=this._getFontStack(a);if(n.getRange(r))return Promise.resolve();const i=256*r,c=i+255;if(this._baseURL){const g=this._baseURL.replace("{fontstack}",a).replace("{range}",i+"-"+c);return e(g,{responseType:"array-buffer"}).then((e=>{n.addRange(r,new s(new t(new Uint8Array(e.data),new DataView(e.data))))})).catch((()=>{n.addRange(r,new s)}))}return n.addRange(r,new s),Promise.resolve()}getGlyph(e,t){const s=this._getFontStack(e);if(!s)return;const a=Math.floor(t/256);if(a>256)return;const r=s.getRange(a);return r?{metrics:r.getMetrics(t),bitmap:r.getBitmap(t)}:void 0}_getFontStack(e){let t=this._glyphInfo[e];return t||(t=this._glyphInfo[e]=new a),t}}export{r as default};