(function(global,factory){typeof exports==="object"&&typeof module!=="undefined"?factory(exports):typeof define==="function"&&define.amd?define(["exports"],factory):factory(global.opentype=global.opentype||{})})(this,function(exports){"use strict";var TINF_OK=0;var TINF_DATA_ERROR=-3;function Tree(){this.table=new Uint16Array(16);this.trans=new Uint16Array(288)}function Data(source,dest){this.source=source;this.sourceIndex=0;this.tag=0;this.bitcount=0;this.dest=dest;this.destLen=0;this.ltree=new Tree;this.dtree=new Tree}var sltree=new Tree;var sdtree=new Tree;var length_bits=new Uint8Array(30);var length_base=new Uint16Array(30);var dist_bits=new Uint8Array(30);var dist_base=new Uint16Array(30);var clcidx=new Uint8Array([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]);var code_tree=new Tree;var lengths=new Uint8Array(288+32);function tinf_build_bits_base(bits,base,delta,first){var i,sum;for(i=0;i>>=1;return bit}function tinf_read_bits(d,num,base){if(!num){return base}while(d.bitcount<24){d.tag|=d.source[d.sourceIndex++]<>>16-num;d.tag>>>=num;d.bitcount-=num;return val+base}function tinf_decode_symbol(d,t){while(d.bitcount<24){d.tag|=d.source[d.sourceIndex++]<>>=1;++len;sum+=t.table[len];cur-=t.table[len]}while(cur>=0);d.tag=tag;d.bitcount-=len;return t.trans[sum+cur]}function tinf_decode_trees(d,lt,dt){var hlit,hdist,hclen;var i,num,length;hlit=tinf_read_bits(d,5,257);hdist=tinf_read_bits(d,5,1);hclen=tinf_read_bits(d,4,4);for(i=0;i<19;++i){lengths[i]=0}for(i=0;i8){d.sourceIndex--;d.bitcount-=8}length=d.source[d.sourceIndex+1];length=256*length+d.source[d.sourceIndex];invlength=d.source[d.sourceIndex+3];invlength=256*invlength+d.source[d.sourceIndex+2];if(length!==(~invlength&65535)){return TINF_DATA_ERROR}d.sourceIndex+=4;for(i=length;i;--i){d.dest[d.destLen++]=d.source[d.sourceIndex++]}d.bitcount=0;return TINF_OK}function tinf_uncompress(source,dest){var d=new Data(source,dest);var bfinal,btype,res;do{bfinal=tinf_getbit(d);btype=tinf_read_bits(d,2,0);switch(btype){case 0:res=tinf_inflate_uncompressed_block(d);break;case 1:res=tinf_inflate_block_data(d,sltree,sdtree);break;case 2:tinf_decode_trees(d,d.ltree,d.dtree);res=tinf_inflate_block_data(d,d.ltree,d.dtree);break;default:res=TINF_DATA_ERROR}if(res!==TINF_OK){throw new Error("Data error")}}while(!bfinal);if(d.destLenthis.x2){this.x2=x}}if(typeof y==="number"){if(isNaN(this.y1)||isNaN(this.y2)){this.y1=y;this.y2=y}if(ythis.y2){this.y2=y}}};BoundingBox.prototype.addX=function(x){this.addPoint(x,null)};BoundingBox.prototype.addY=function(y){this.addPoint(null,y)};BoundingBox.prototype.addBezier=function(x0,y0,x1,y1,x2,y2,x,y){var this$1=this;var p0=[x0,y0];var p1=[x1,y1];var p2=[x2,y2];var p3=[x,y];this.addPoint(x0,y0);this.addPoint(x,y);for(var i=0;i<=1;i++){var b=6*p0[i]-12*p1[i]+6*p2[i];var a=-3*p0[i]+9*p1[i]-9*p2[i]+3*p3[i];var c=3*p1[i]-3*p0[i];if(a===0){if(b===0){continue}var t=-c/b;if(0=0&&i>0){s+=" "}s+=floatToString(v)}return s}var d="";for(var i=0;i=0&&v<=255,"Byte value should be between 0 and 255.");return[v]};sizeOf.BYTE=constant(1);encode.CHAR=function(v){return[v.charCodeAt(0)]};sizeOf.CHAR=constant(1);encode.CHARARRAY=function(v){var b=[];for(var i=0;i>8&255,v&255]};sizeOf.USHORT=constant(2);encode.SHORT=function(v){if(v>=LIMIT16){v=-(2*LIMIT16-v)}return[v>>8&255,v&255]};sizeOf.SHORT=constant(2);encode.UINT24=function(v){return[v>>16&255,v>>8&255,v&255]};sizeOf.UINT24=constant(3);encode.ULONG=function(v){return[v>>24&255,v>>16&255,v>>8&255,v&255]};sizeOf.ULONG=constant(4);encode.LONG=function(v){if(v>=LIMIT32){v=-(2*LIMIT32-v)}return[v>>24&255,v>>16&255,v>>8&255,v&255]};sizeOf.LONG=constant(4);encode.FIXED=encode.ULONG;sizeOf.FIXED=sizeOf.ULONG;encode.FWORD=encode.SHORT;sizeOf.FWORD=sizeOf.SHORT;encode.UFWORD=encode.USHORT;sizeOf.UFWORD=sizeOf.USHORT;encode.LONGDATETIME=function(v){return[0,0,0,0,v>>24&255,v>>16&255,v>>8&255,v&255]};sizeOf.LONGDATETIME=constant(8);encode.TAG=function(v){check.argument(v.length===4,"Tag should be exactly 4 ASCII characters.");return[v.charCodeAt(0),v.charCodeAt(1),v.charCodeAt(2),v.charCodeAt(3)]};sizeOf.TAG=constant(4);encode.Card8=encode.BYTE;sizeOf.Card8=sizeOf.BYTE;encode.Card16=encode.USHORT;sizeOf.Card16=sizeOf.USHORT;encode.OffSize=encode.BYTE;sizeOf.OffSize=sizeOf.BYTE;encode.SID=encode.USHORT;sizeOf.SID=sizeOf.USHORT;encode.NUMBER=function(v){if(v>=-107&&v<=107){return[v+139]}else if(v>=108&&v<=1131){v=v-108;return[(v>>8)+247,v&255]}else if(v>=-1131&&v<=-108){v=-v-108;return[(v>>8)+251,v&255]}else if(v>=-32768&&v<=32767){return encode.NUMBER16(v)}else{return encode.NUMBER32(v)}};sizeOf.NUMBER=function(v){return encode.NUMBER(v).length};encode.NUMBER16=function(v){return[28,v>>8&255,v&255]};sizeOf.NUMBER16=constant(3);encode.NUMBER32=function(v){return[29,v>>24&255,v>>16&255,v>>8&255,v&255]};sizeOf.NUMBER32=constant(5);encode.REAL=function(v){var value=v.toString();var m=/\.(\d*?)(?:9{5,20}|0{5,20})\d{0,2}(?:e(.+)|$)/.exec(value);if(m){var epsilon=parseFloat("1e"+((m[2]?+m[2]:0)+m[1].length));value=(Math.round(v*epsilon)/epsilon).toString()}var nibbles="";for(var i=0,ii=value.length;i>8&255;b[b.length]=codepoint&255}return b};sizeOf.UTF16=function(v){return v.length*2};var eightBitMacEncodings={"x-mac-croatian":"ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®Š™´¨≠ŽØ∞±≤≥∆µ∂∑∏š∫ªºΩžø"+"¿¡¬√ƒ≈Ć«Č… ÀÃÕŒœĐ—“”‘’÷◊©⁄€‹›Æ»–·‚„‰ÂćÁčÈÍÎÏÌÓÔđÒÚÛÙıˆ˜¯πË˚¸Êæˇ","x-mac-cyrillic":"АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ†°Ґ£§•¶І®©™Ђђ≠Ѓѓ∞±≤≥іµґЈЄєЇїЉљЊњ"+"јЅ¬√ƒ≈∆«»… ЋћЌќѕ–—“”‘’÷„ЎўЏџ№Ёёяабвгдежзийклмнопрстуфхцчшщъыьэю","x-mac-gaelic":"ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ÆØḂ±≤≥ḃĊċḊḋḞḟĠġṀæø"+"ṁṖṗɼƒſṠ«»… ÀÃÕŒœ–—“”‘’ṡẛÿŸṪ€‹›Ŷŷṫ·Ỳỳ⁊ÂÊÁËÈÍÎÏÌÓÔ♣ÒÚÛÙıÝýŴŵẄẅẀẁẂẃ","x-mac-greek":"Ĺ²É³ÖÜ΅àâä΄¨çéèê룙î‰ôö¦€ùûü†ΓΔΘΛΞΠß®©ΣΪ§≠°·Α±≤≥¥ΒΕΖΗΙΚΜΦΫΨΩ"+"άΝ¬ΟΡ≈Τ«»… ΥΧΆΈœ–―“”‘’÷ΉΊΌΎέήίόΏύαβψδεφγηιξκλμνοπώρστθωςχυζϊϋΐΰ­","x-mac-icelandic":"ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûüÝ°¢£§•¶ß®©™´¨≠ÆØ∞±≤≥¥µ∂∑∏π∫ªºΩæø"+"¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸ⁄€ÐðÞþý·‚„‰ÂÊÁËÈÍÎÏÌÓÔÒÚÛÙıˆ˜¯˘˙˚¸˝˛ˇ","x-mac-inuit":"ᐃᐄᐅᐆᐊᐋᐱᐲᐳᐴᐸᐹᑉᑎᑏᑐᑑᑕᑖᑦᑭᑮᑯᑰᑲᑳᒃᒋᒌᒍᒎᒐᒑ°ᒡᒥᒦ•¶ᒧ®©™ᒨᒪᒫᒻᓂᓃᓄᓅᓇᓈᓐᓯᓰᓱᓲᓴᓵᔅᓕᓖᓗ"+"ᓘᓚᓛᓪᔨᔩᔪᔫᔭ… ᔮᔾᕕᕖᕗ–—“”‘’ᕘᕙᕚᕝᕆᕇᕈᕉᕋᕌᕐᕿᖀᖁᖂᖃᖄᖅᖏᖐᖑᖒᖓᖔᖕᙱᙲᙳᙴᙵᙶᖖᖠᖡᖢᖣᖤᖥᖦᕼŁł","x-mac-ce":"ÄĀāÉĄÖÜáąČäčĆć鏟ĎíďĒēĖóėôöõúĚěü†°Ę£§•¶ß®©™ę¨≠ģĮįĪ≤≥īĶ∂∑łĻļĽľĹĺŅ"+"ņѬ√ńŇ∆«»… ňŐÕőŌ–—“”‘’÷◊ōŔŕŘ‹›řŖŗŠ‚„šŚśÁŤťÍŽžŪÓÔūŮÚůŰűŲųÝýķŻŁżĢˇ",macintosh:"ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ÆØ∞±≤≥¥µ∂∑∏π∫ªºΩæø"+"¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸ⁄€‹›fifl‡·‚„‰ÂÊÁËÈÍÎÏÌÓÔÒÚÛÙıˆ˜¯˘˙˚¸˝˛ˇ","x-mac-romanian":"ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ĂȘ∞±≤≥¥µ∂∑∏π∫ªºΩăș"+"¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸ⁄€‹›Țț‡·‚„‰ÂÊÁËÈÍÎÏÌÓÔÒÚÛÙıˆ˜¯˘˙˚¸˝˛ˇ","x-mac-turkish":"ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ÆØ∞±≤≥¥µ∂∑∏π∫ªºΩæø"+"¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸĞğİıŞş‡·‚„‰ÂÊÁËÈÍÎÏÌÓÔÒÚÛÙˆ˜¯˘˙˚¸˝˛ˇ"};decode.MACSTRING=function(dataView,offset,dataLength,encoding){var table=eightBitMacEncodings[encoding];if(table===undefined){return undefined}var result="";for(var i=0;i=128){c=table[c];if(c===undefined){return undefined}}result[i]=c}return result};sizeOf.MACSTRING=function(str,encoding){var b=encode.MACSTRING(str,encoding);if(b!==undefined){return b.length}else{return 0}};function isByteEncodable(value){return value>=-128&&value<=127}function encodeVarDeltaRunAsZeroes(deltas,pos,result){var runLength=0;var numDeltas=deltas.length;while(pos>8&255,val+256&255)}return pos}encode.VARDELTAS=function(deltas){var pos=0;var result=[];while(pos=-128&&value<=127){pos=encodeVarDeltaRunAsBytes(deltas,pos,result)}else{pos=encodeVarDeltaRunAsWords(deltas,pos,result)}}return result};encode.INDEX=function(l){var offset=1;var offsets=[offset];var data=[];for(var i=0;i>8;d[o+1]=offset&255;d=d.concat(subtables[i$1])}return d};sizeOf.TABLE=function(table){var numBytes=0;var length=table.fields.length;for(var i=0;i0){return new Parser(this.data,this.offset+structOffset).parseStruct(description)}return undefined};Parser.prototype.parseListOfLists=function(itemCallback){var this$1=this;var offsets=this.parseOffset16List();var count=offsets.length;var relativeOffset=this.relativeOffset;var list=new Array(count);for(var i=0;i>1;p.skip("uShort",3);cmap.glyphIndexMap={};var endCountParser=new parse.Parser(data,start+offset+14);var startCountParser=new parse.Parser(data,start+offset+16+segCount*2);var idDeltaParser=new parse.Parser(data,start+offset+16+segCount*4);var idRangeOffsetParser=new parse.Parser(data,start+offset+16+segCount*6);var glyphIndexOffset=start+offset+16+segCount*8;for(var i=0;i=0;i-=1){var platformId=parse.getUShort(data,start+4+i*8);var encodingId=parse.getUShort(data,start+4+i*8+2);if(platformId===3&&(encodingId===0||encodingId===1||encodingId===10)){offset=parse.getULong(data,start+4+i*8+4);break}}if(offset===-1){throw new Error("No valid cmap sub-tables found.")}var p=new parse.Parser(data,start+offset);cmap.format=p.parseUShort();if(cmap.format===12){parseCmapTableFormat12(cmap,p)}else if(cmap.format===4){parseCmapTableFormat4(cmap,p,data,start,offset)}else{throw new Error("Only format 4 and 12 cmap tables are supported (found format "+cmap.format+").")}return cmap}function addSegment(t,code,glyphIndex){t.segments.push({end:code,start:code,delta:-(code-glyphIndex),offset:0})}function addTerminatorSegment(t){t.segments.push({end:65535,start:65535,delta:1,offset:0})}function makeCmapTable(glyphs){var t=new table.Table("cmap",[{name:"version",type:"USHORT",value:0},{name:"numTables",type:"USHORT",value:1},{name:"platformID",type:"USHORT",value:3},{name:"encodingID",type:"USHORT",value:1},{name:"offset",type:"ULONG",value:12},{name:"format",type:"USHORT",value:4},{name:"length",type:"USHORT",value:0},{name:"language",type:"USHORT",value:0},{name:"segCountX2",type:"USHORT",value:0},{name:"searchRange",type:"USHORT",value:0},{name:"entrySelector",type:"USHORT",value:0},{name:"rangeShift",type:"USHORT",value:0}]);t.segments=[];for(var i=0;i0){v=p.parseByte();if((flag&sameBitMask)===0){v=-v}v=previousValue+v}else{if((flag&sameBitMask)>0){v=previousValue}else{v=previousValue+p.parseShort()}}return v}function parseGlyph(glyph,data,start){var p=new parse.Parser(data,start);glyph.numberOfContours=p.parseShort();glyph._xMin=p.parseShort();glyph._yMin=p.parseShort();glyph._xMax=p.parseShort();glyph._yMax=p.parseShort();var flags;var flag;if(glyph.numberOfContours>0){var endPointIndices=glyph.endPointIndices=[];for(var i=0;i0){var repeatCount=p.parseByte();for(var j=0;j0){var points=[];var point;if(numberOfCoordinates>0){for(var i$3=0;i$3=0;points.push(point)}var px=0;for(var i$4=0;i$40){if((flags&2)>0){component.dx=p.parseShort();component.dy=p.parseShort()}else{component.matchedPoints=[p.parseUShort(),p.parseUShort()]}}else{if((flags&2)>0){component.dx=p.parseChar();component.dy=p.parseChar()}else{component.matchedPoints=[p.parseByte(),p.parseByte()]}}if((flags&8)>0){component.xScale=component.yScale=p.parseF2Dot14()}else if((flags&64)>0){component.xScale=p.parseF2Dot14();component.yScale=p.parseF2Dot14()}else if((flags&128)>0){component.xScale=p.parseF2Dot14();component.scale01=p.parseF2Dot14();component.scale10=p.parseF2Dot14();component.yScale=p.parseF2Dot14()}glyph.components.push(component);moreComponents=!!(flags&32)}if(flags&256){glyph.instructionLength=p.parseUShort();glyph.instructions=[];for(var i$6=0;i$6glyph.points.length-1||component.matchedPoints[1]>componentGlyph.points.length-1){throw Error("Matched points out of range in "+glyph.name)}var firstPt=glyph.points[component.matchedPoints[0]];var secondPt=componentGlyph.points[component.matchedPoints[1]];var transform={xScale:component.xScale,scale01:component.scale01,scale10:component.scale10,yScale:component.yScale,dx:0,dy:0};secondPt=transformPoints([secondPt],transform)[0];transform.dx=firstPt.x-secondPt.x;transform.dy=firstPt.y-secondPt.y;transformedPoints=transformPoints(componentGlyph.points,transform)}glyph.points=glyph.points.concat(transformedPoints)}}}return getPath(glyph.points)}function parseGlyfTable(data,start,loca,font){var glyphs=new glyphset.GlyphSet(font);for(var i=0;i>4;var n2=b&15;if(n1===eof){break}s+=lookup[n1];if(n2===eof){break}s+=lookup[n2]}return parseFloat(s)}function parseOperand(parser,b0){var b1;var b2;var b3;var b4;if(b0===28){b1=parser.parseByte();b2=parser.parseByte();return b1<<8|b2}if(b0===29){b1=parser.parseByte();b2=parser.parseByte();b3=parser.parseByte();b4=parser.parseByte();return b1<<24|b2<<16|b3<<8|b4}if(b0===30){return parseFloatOperand(parser)}if(b0>=32&&b0<=246){return b0-139}if(b0>=247&&b0<=250){b1=parser.parseByte();return(b0-247)*256+b1+108}if(b0>=251&&b0<=254){b1=parser.parseByte();return-(b0-251)*256-b1-108}throw new Error("Invalid b0 "+b0)}function entriesToObject(entries){var o={};for(var i=0;i>1;stack.length=0;haveWidth=true}function parse$$1(code){var b1;var b2;var b3;var b4;var codeIndex;var subrCode;var jpx;var jpy;var c3x;var c3y;var c4x;var c4y;var i=0;while(i1&&!haveWidth){width=stack.shift()+nominalWidthX;haveWidth=true}y+=stack.pop();newContour(x,y);break;case 5:while(stack.length>0){x+=stack.shift();y+=stack.shift();p.lineTo(x,y)}break;case 6:while(stack.length>0){x+=stack.shift();p.lineTo(x,y);if(stack.length===0){break}y+=stack.shift();p.lineTo(x,y)}break;case 7:while(stack.length>0){y+=stack.shift();p.lineTo(x,y);if(stack.length===0){break}x+=stack.shift();p.lineTo(x,y)}break;case 8:while(stack.length>0){c1x=x+stack.shift();c1y=y+stack.shift();c2x=c1x+stack.shift();c2y=c1y+stack.shift();x=c2x+stack.shift();y=c2y+stack.shift();p.curveTo(c1x,c1y,c2x,c2y,x,y)}break;case 10:codeIndex=stack.pop()+subrsBias;subrCode=subrs[codeIndex];if(subrCode){parse$$1(subrCode)}break;case 11:return;case 12:v=code[i];i+=1;switch(v){case 35:c1x=x+stack.shift();c1y=y+stack.shift();c2x=c1x+stack.shift();c2y=c1y+stack.shift();jpx=c2x+stack.shift();jpy=c2y+stack.shift();c3x=jpx+stack.shift();c3y=jpy+stack.shift();c4x=c3x+stack.shift();c4y=c3y+stack.shift();x=c4x+stack.shift();y=c4y+stack.shift();stack.shift();p.curveTo(c1x,c1y,c2x,c2y,jpx,jpy);p.curveTo(c3x,c3y,c4x,c4y,x,y);break;case 34:c1x=x+stack.shift();c1y=y;c2x=c1x+stack.shift();c2y=c1y+stack.shift();jpx=c2x+stack.shift();jpy=c2y;c3x=jpx+stack.shift();c3y=c2y;c4x=c3x+stack.shift();c4y=y;x=c4x+stack.shift();p.curveTo(c1x,c1y,c2x,c2y,jpx,jpy);p.curveTo(c3x,c3y,c4x,c4y,x,y);break;case 36:c1x=x+stack.shift();c1y=y+stack.shift();c2x=c1x+stack.shift();c2y=c1y+stack.shift();jpx=c2x+stack.shift();jpy=c2y;c3x=jpx+stack.shift();c3y=c2y;c4x=c3x+stack.shift();c4y=c3y+stack.shift();x=c4x+stack.shift();p.curveTo(c1x,c1y,c2x,c2y,jpx,jpy);p.curveTo(c3x,c3y,c4x,c4y,x,y);break;case 37:c1x=x+stack.shift();c1y=y+stack.shift();c2x=c1x+stack.shift();c2y=c1y+stack.shift();jpx=c2x+stack.shift();jpy=c2y+stack.shift();c3x=jpx+stack.shift();c3y=jpy+stack.shift();c4x=c3x+stack.shift();c4y=c3y+stack.shift();if(Math.abs(c4x-x)>Math.abs(c4y-y)){x=c4x+stack.shift()}else{y=c4y+stack.shift()}p.curveTo(c1x,c1y,c2x,c2y,jpx,jpy);p.curveTo(c3x,c3y,c4x,c4y,x,y);break;default:console.log("Glyph "+glyph.index+": unknown operator "+1200+v);stack.length=0}break;case 14:if(stack.length>0&&!haveWidth){width=stack.shift()+nominalWidthX;haveWidth=true}if(open){p.closePath();open=false}break;case 18:parseStems();break;case 19:case 20:parseStems();i+=nStems+7>>3;break;case 21:if(stack.length>2&&!haveWidth){width=stack.shift()+nominalWidthX;haveWidth=true}y+=stack.pop();x+=stack.pop();newContour(x,y);break;case 22:if(stack.length>1&&!haveWidth){width=stack.shift()+nominalWidthX;haveWidth=true}x+=stack.pop();newContour(x,y);break;case 23:parseStems();break;case 24:while(stack.length>2){c1x=x+stack.shift();c1y=y+stack.shift();c2x=c1x+stack.shift();c2y=c1y+stack.shift();x=c2x+stack.shift();y=c2y+stack.shift();p.curveTo(c1x,c1y,c2x,c2y,x,y)}x+=stack.shift();y+=stack.shift();p.lineTo(x,y);break;case 25:while(stack.length>6){x+=stack.shift();y+=stack.shift();p.lineTo(x,y)}c1x=x+stack.shift();c1y=y+stack.shift();c2x=c1x+stack.shift();c2y=c1y+stack.shift();x=c2x+stack.shift();y=c2y+stack.shift();p.curveTo(c1x,c1y,c2x,c2y,x,y);break;case 26:if(stack.length%2){x+=stack.shift()}while(stack.length>0){c1x=x;c1y=y+stack.shift();c2x=c1x+stack.shift();c2y=c1y+stack.shift();x=c2x;y=c2y+stack.shift();p.curveTo(c1x,c1y,c2x,c2y,x,y)}break;case 27:if(stack.length%2){y+=stack.shift()}while(stack.length>0){c1x=x+stack.shift();c1y=y;c2x=c1x+stack.shift();c2y=c1y+stack.shift();x=c2x+stack.shift();y=c2y;p.curveTo(c1x,c1y,c2x,c2y,x,y)}break;case 28:b1=code[i];b2=code[i+1];stack.push((b1<<24|b2<<16)>>16);i+=2;break;case 29:codeIndex=stack.pop()+font.gsubrsBias;subrCode=font.gsubrs[codeIndex];if(subrCode){parse$$1(subrCode)}break;case 30:while(stack.length>0){c1x=x;c1y=y+stack.shift();c2x=c1x+stack.shift();c2y=c1y+stack.shift();x=c2x+stack.shift();y=c2y+(stack.length===1?stack.shift():0);p.curveTo(c1x,c1y,c2x,c2y,x,y);if(stack.length===0){break}c1x=x+stack.shift();c1y=y;c2x=c1x+stack.shift();c2y=c1y+stack.shift();y=c2y+stack.shift();x=c2x+(stack.length===1?stack.shift():0);p.curveTo(c1x,c1y,c2x,c2y,x,y)}break;case 31:while(stack.length>0){c1x=x+stack.shift();c1y=y;c2x=c1x+stack.shift();c2y=c1y+stack.shift();y=c2y+stack.shift();x=c2x+(stack.length===1?stack.shift():0);p.curveTo(c1x,c1y,c2x,c2y,x,y);if(stack.length===0){break}c1x=x;c1y=y+stack.shift();c2x=c1x+stack.shift();c2y=c1y+stack.shift();x=c2x+stack.shift();y=c2y+(stack.length===1?stack.shift():0);p.curveTo(c1x,c1y,c2x,c2y,x,y)}break;default:if(v<32){console.log("Glyph "+glyph.index+": unknown operator "+v)}else if(v<247){stack.push(v-139)}else if(v<251){b1=code[i];i+=1;stack.push((v-247)*256+b1+108)}else if(v<255){b1=code[i];i+=1;stack.push(-(v-251)*256-b1-108)}else{b1=code[i];b2=code[i+1];b3=code[i+2];b4=code[i+3];i+=4;stack.push((b1<<24|b2<<16|b3<<8|b4)/65536)}}}}parse$$1(code);glyph.advanceWidth=width;return p}function parseCFFFDSelect(data,start,nGlyphs,fdArrayCount){var fdSelect=[];var fdIndex;var parser=new parse.Parser(data,start);var format=parser.parseCard8();if(format===0){for(var iGid=0;iGid=fdArrayCount){throw new Error("CFF table CID Font FDSelect has bad FD index value "+fdIndex+" (FD count "+fdArrayCount+")")}fdSelect.push(fdIndex)}}else if(format===3){var nRanges=parser.parseCard16();var first=parser.parseCard16();if(first!==0){throw new Error("CFF Table CID Font FDSelect format 3 range has bad initial GID "+first)}var next;for(var iRange=0;iRange=fdArrayCount){throw new Error("CFF table CID Font FDSelect has bad FD index value "+fdIndex+" (FD count "+fdArrayCount+")")}if(next>nGlyphs){throw new Error("CFF Table CID Font FDSelect format 3 range has bad GID "+next)}for(;first=0){sid=i}i=strings.indexOf(s);if(i>=0){sid=i+cffStandardStrings.length}else{sid=cffStandardStrings.length+strings.length;strings.push(s)}return sid}function makeHeader(){return new table.Record("Header",[{name:"major",type:"Card8",value:1},{name:"minor",type:"Card8",value:0},{name:"hdrSize",type:"Card8",value:4},{name:"major",type:"Card8",value:1}])}function makeNameIndex(fontNames){var t=new table.Record("Name INDEX",[{name:"names",type:"INDEX",value:[]}]);t.names=[];for(var i=0;i=range.begin&&unicode=1){os2.ulCodePageRange1=p.parseULong();os2.ulCodePageRange2=p.parseULong()}if(os2.version>=2){os2.sxHeight=p.parseShort();os2.sCapHeight=p.parseShort();os2.usDefaultChar=p.parseUShort();os2.usBreakChar=p.parseUShort();os2.usMaxContent=p.parseUShort()}return os2}function makeOS2Table(options){return new table.Table("OS/2",[{name:"version",type:"USHORT",value:3},{name:"xAvgCharWidth",type:"SHORT",value:0},{name:"usWeightClass",type:"USHORT",value:0},{name:"usWidthClass",type:"USHORT",value:0},{name:"fsType",type:"USHORT",value:0},{name:"ySubscriptXSize",type:"SHORT",value:650},{name:"ySubscriptYSize",type:"SHORT",value:699},{name:"ySubscriptXOffset",type:"SHORT",value:0},{name:"ySubscriptYOffset",type:"SHORT",value:140},{name:"ySuperscriptXSize",type:"SHORT",value:650},{name:"ySuperscriptYSize",type:"SHORT",value:699},{name:"ySuperscriptXOffset",type:"SHORT",value:0},{name:"ySuperscriptYOffset",type:"SHORT",value:479},{name:"yStrikeoutSize",type:"SHORT",value:49},{name:"yStrikeoutPosition",type:"SHORT",value:258},{name:"sFamilyClass",type:"SHORT",value:0},{name:"bFamilyType",type:"BYTE",value:0},{name:"bSerifStyle",type:"BYTE",value:0},{name:"bWeight",type:"BYTE",value:0},{name:"bProportion",type:"BYTE",value:0},{name:"bContrast",type:"BYTE",value:0},{name:"bStrokeVariation",type:"BYTE",value:0},{name:"bArmStyle",type:"BYTE",value:0},{name:"bLetterform",type:"BYTE",value:0},{name:"bMidline",type:"BYTE",value:0},{name:"bXHeight",type:"BYTE",value:0},{name:"ulUnicodeRange1",type:"ULONG",value:0},{name:"ulUnicodeRange2",type:"ULONG",value:0},{name:"ulUnicodeRange3",type:"ULONG",value:0},{name:"ulUnicodeRange4",type:"ULONG",value:0},{name:"achVendID",type:"CHARARRAY",value:"XXXX"},{name:"fsSelection",type:"USHORT",value:0},{name:"usFirstCharIndex",type:"USHORT",value:0},{name:"usLastCharIndex",type:"USHORT",value:0},{name:"sTypoAscender",type:"SHORT",value:0},{name:"sTypoDescender",type:"SHORT",value:0},{name:"sTypoLineGap",type:"SHORT",value:0},{name:"usWinAscent",type:"USHORT",value:0},{name:"usWinDescent",type:"USHORT",value:0},{name:"ulCodePageRange1",type:"ULONG",value:0},{name:"ulCodePageRange2",type:"ULONG",value:0},{name:"sxHeight",type:"SHORT",value:0},{name:"sCapHeight",type:"SHORT",value:0},{name:"usDefaultChar",type:"USHORT",value:0},{name:"usBreakChar",type:"USHORT",value:0},{name:"usMaxContext",type:"USHORT",value:0}],options)}var os2={parse:parseOS2Table,make:makeOS2Table,unicodeRanges:unicodeRanges,getUnicodeRange:getUnicodeRange};function parsePostTable(data,start){var post={};var p=new parse.Parser(data,start);post.version=p.parseVersion();post.italicAngle=p.parseFixed();post.underlinePosition=p.parseShort();post.underlineThickness=p.parseShort();post.isFixedPitch=p.parseULong();post.minMemType42=p.parseULong();post.maxMemType42=p.parseULong();post.minMemType1=p.parseULong();post.maxMemType1=p.parseULong();switch(post.version){case 1:post.names=standardNames.slice();break;case 2:post.numberOfGlyphs=p.parseUShort();post.glyphNameIndex=new Array(post.numberOfGlyphs);for(var i=0;i=standardNames.length){var nameLength=p.parseChar();post.names.push(p.parseString(nameLength))}}break;case 2.5:post.numberOfGlyphs=p.parseUShort();post.offset=new Array(post.numberOfGlyphs);for(var i$2=0;i$2r2.value.tag){return 1}else{return-1}});sfnt.fields=sfnt.fields.concat(recordFields);sfnt.fields=sfnt.fields.concat(tableFields);return sfnt}function metricsForChar(font,chars,notFoundMetrics){for(var i=0;i0){var glyph=font.glyphs.get(glyphIndex);return glyph.getMetrics()}}return notFoundMetrics}function average(vs){var sum=0;for(var i=0;iunicode||firstCharIndex===undefined){if(unicode>0){firstCharIndex=unicode}}if(lastCharIndex 123 are reserved for internal usage")}if(glyph.name===".notdef"){continue}var metrics=glyph.getMetrics();xMins.push(metrics.xMin);yMins.push(metrics.yMin);xMaxs.push(metrics.xMax);yMaxs.push(metrics.yMax);leftSideBearings.push(metrics.leftSideBearing);rightSideBearings.push(metrics.rightSideBearing);advanceWidths.push(glyph.advanceWidth)}var globals={xMin:Math.min.apply(null,xMins),yMin:Math.min.apply(null,yMins),xMax:Math.max.apply(null,xMaxs),yMax:Math.max.apply(null,yMaxs),advanceWidthMax:Math.max.apply(null,advanceWidths),advanceWidthAvg:average(advanceWidths),minLeftSideBearing:Math.min.apply(null,leftSideBearings),maxLeftSideBearing:Math.max.apply(null,leftSideBearings),minRightSideBearing:Math.min.apply(null,rightSideBearings)};globals.ascender=font.ascender;globals.descender=font.descender;var headTable=head.make({flags:3,unitsPerEm:font.unitsPerEm,xMin:globals.xMin,yMin:globals.yMin,xMax:globals.xMax,yMax:globals.yMax,lowestRecPPEM:3,createdTimestamp:font.createdTimestamp});var hheaTable=hhea.make({ascender:globals.ascender,descender:globals.descender,advanceWidthMax:globals.advanceWidthMax,minLeftSideBearing:globals.minLeftSideBearing,minRightSideBearing:globals.minRightSideBearing,xMaxExtent:globals.maxLeftSideBearing+(globals.xMax-globals.xMin),numberOfHMetrics:font.glyphs.length});var maxpTable=maxp.make(font.glyphs.length);var os2Table=os2.make({xAvgCharWidth:Math.round(globals.advanceWidthAvg),usWeightClass:font.tables.os2.usWeightClass,usWidthClass:font.tables.os2.usWidthClass,usFirstCharIndex:firstCharIndex,usLastCharIndex:lastCharIndex,ulUnicodeRange1:ulUnicodeRange1,ulUnicodeRange2:ulUnicodeRange2,ulUnicodeRange3:ulUnicodeRange3,ulUnicodeRange4:ulUnicodeRange4,fsSelection:font.tables.os2.fsSelection,sTypoAscender:globals.ascender,sTypoDescender:globals.descender,sTypoLineGap:0,usWinAscent:globals.yMax,usWinDescent:Math.abs(globals.yMin),ulCodePageRange1:1,sxHeight:metricsForChar(font,"xyvw",{yMax:Math.round(globals.ascender/2)}).yMax,sCapHeight:metricsForChar(font,"HIKLEFJMNTZBDPRAGOQSUVWXY",globals).yMax,usDefaultChar:font.hasChar(" ")?32:0,usBreakChar:font.hasChar(" ")?32:0});var hmtxTable=hmtx.make(font.glyphs);var cmapTable=cmap.make(font.glyphs);var englishFamilyName=font.getEnglishName("fontFamily");var englishStyleName=font.getEnglishName("fontSubfamily");var englishFullName=englishFamilyName+" "+englishStyleName;var postScriptName=font.getEnglishName("postScriptName");if(!postScriptName){postScriptName=englishFamilyName.replace(/\s/g,"")+"-"+englishStyleName}var names={};for(var n in font.names){names[n]=font.names[n]}if(!names.uniqueID){names.uniqueID={en:font.getEnglishName("manufacturer")+":"+englishFullName}}if(!names.postScriptName){names.postScriptName={en:postScriptName}}if(!names.preferredFamily){names.preferredFamily=font.names.fontFamily}if(!names.preferredSubfamily){names.preferredSubfamily=font.names.fontSubfamily}var languageTags=[];var nameTable=_name.make(names,languageTags);var ltagTable=languageTags.length>0?ltag.make(languageTags):undefined;var postTable=post.make();var cffTable=cff.make(font.glyphs,{version:font.getEnglishName("version"),fullName:englishFullName,familyName:englishFamilyName,weightName:englishStyleName,postScriptName:postScriptName,unitsPerEm:font.unitsPerEm,fontBBox:[0,globals.yMin,globals.ascender,globals.advanceWidthMax]});var metaTable=font.metas&&Object.keys(font.metas).length>0?meta.make(font.metas):undefined;var tables=[headTable,hheaTable,maxpTable,os2Table,nameTable,cmapTable,postTable,cffTable,hmtxTable];if(ltagTable){tables.push(ltagTable)}if(font.tables.gsub){tables.push(gsub.make(font.tables.gsub))}if(metaTable){tables.push(metaTable)}var sfntTable=makeSfntTable(tables);var bytes=sfntTable.encode();var checkSum=computeCheckSum(bytes);var tableFields=sfntTable.fields;var checkSumAdjusted=false;for(var i$1=0;i$1>>1;var val=arr[imid].tag;if(val===tag){return imid}else if(val>>1;var val=arr[imid];if(val===value){return imid}else if(val=0){return scripts[pos].script}else if(create){var scr={tag:script,script:{defaultLangSys:{reserved:0,reqFeatureIndex:65535,featureIndexes:[]},langSysRecords:[]}};scripts.splice(-1-pos,0,scr);return scr.script}}},getLangSysTable:function(script,language,create){var scriptTable=this.getScriptTable(script,create);if(scriptTable){if(!language||language==="dflt"||language==="DFLT"){return scriptTable.defaultLangSys}var pos=searchTag(scriptTable.langSysRecords,language);if(pos>=0){return scriptTable.langSysRecords[pos].langSys}else if(create){var langSysRecord={tag:language,langSys:{reserved:0,reqFeatureIndex:65535,featureIndexes:[]}};scriptTable.langSysRecords.splice(-1-pos,0,langSysRecord);return langSysRecord.langSys}}},getFeatureTable:function(script,language,feature,create){var langSysTable=this.getLangSysTable(script,language,create);if(langSysTable){var featureRecord;var featIndexes=langSysTable.featureIndexes;var allFeatures=this.font.tables[this.tableName].features;for(var i=0;i=allFeatures[index-1].tag,"Features must be added in alphabetical order.");featureRecord={tag:feature,feature:{params:0,lookupListIndexes:[]}};allFeatures.push(featureRecord);featIndexes.push(index);return featureRecord.feature}}},getLookupTables:function(script,language,feature,lookupType,create){var featureTable=this.getFeatureTable(script,language,feature,create);var tables=[];if(featureTable){var lookupTable;var lookupListIndexes=featureTable.lookupListIndexes;var allLookups=this.font.tables[this.tableName].lookups;for(var i=0;i=0){var ligatureSet=subtable.ligatureSets[pos];for(var i=0;i0&&v<0){return phase}if(sign<0&&v>0){return-phase}return v*sign};var xUnitVector={x:1,y:0,axis:"x",distance:function(p1,p2,o1,o2){return(o1?p1.xo:p1.x)-(o2?p2.xo:p2.x)},interpolate:function(p,rp1,rp2,pv){var do1;var do2;var doa1;var doa2;var dm1;var dm2;var dt;if(!pv||pv===this){do1=p.xo-rp1.xo;do2=p.xo-rp2.xo;dm1=rp1.x-rp1.xo;dm2=rp2.x-rp2.xo;doa1=Math.abs(do1);doa2=Math.abs(do2);dt=doa1+doa2;if(dt===0){p.x=p.xo+(dm1+dm2)/2;return}p.x=p.xo+(dm1*doa2+dm2*doa1)/dt;return}do1=pv.distance(p,rp1,true,true);do2=pv.distance(p,rp2,true,true);dm1=pv.distance(rp1,rp1,false,true);dm2=pv.distance(rp2,rp2,false,true);doa1=Math.abs(do1);doa2=Math.abs(do2);dt=doa1+doa2;if(dt===0){xUnitVector.setRelative(p,p,(dm1+dm2)/2,pv,true);return}xUnitVector.setRelative(p,p,(dm1*doa2+dm2*doa1)/dt,pv,true)},normalSlope:Number.NEGATIVE_INFINITY,setRelative:function(p,rp,d,pv,org){if(!pv||pv===this){p.x=(org?rp.xo:rp.x)+d;return}var rpx=org?rp.xo:rp.x;var rpy=org?rp.yo:rp.y;var rpdx=rpx+d*pv.x;var rpdy=rpy+d*pv.y;p.x=rpdx+(p.y-rpdy)/pv.normalSlope},slope:0,touch:function(p){p.xTouched=true},touched:function(p){return p.xTouched},untouch:function(p){p.xTouched=false}};var yUnitVector={x:0,y:1,axis:"y",distance:function(p1,p2,o1,o2){return(o1?p1.yo:p1.y)-(o2?p2.yo:p2.y)},interpolate:function(p,rp1,rp2,pv){var do1;var do2;var doa1;var doa2;var dm1;var dm2;var dt;if(!pv||pv===this){do1=p.yo-rp1.yo;do2=p.yo-rp2.yo;dm1=rp1.y-rp1.yo;dm2=rp2.y-rp2.yo;doa1=Math.abs(do1);doa2=Math.abs(do2);dt=doa1+doa2;if(dt===0){p.y=p.yo+(dm1+dm2)/2;return}p.y=p.yo+(dm1*doa2+dm2*doa1)/dt;return}do1=pv.distance(p,rp1,true,true);do2=pv.distance(p,rp2,true,true);dm1=pv.distance(rp1,rp1,false,true);dm2=pv.distance(rp2,rp2,false,true);doa1=Math.abs(do1);doa2=Math.abs(do2);dt=doa1+doa2;if(dt===0){yUnitVector.setRelative(p,p,(dm1+dm2)/2,pv,true);return}yUnitVector.setRelative(p,p,(dm1*doa2+dm2*doa1)/dt,pv,true)},normalSlope:0,setRelative:function(p,rp,d,pv,org){if(!pv||pv===this){p.y=(org?rp.yo:rp.y)+d;return}var rpx=org?rp.xo:rp.x;var rpy=org?rp.yo:rp.y;var rpdx=rpx+d*pv.x;var rpdy=rpy+d*pv.y;p.y=rpdy+pv.normalSlope*(p.x-rpdx)},slope:Number.POSITIVE_INFINITY,touch:function(p){p.yTouched=true},touched:function(p){return p.yTouched},untouch:function(p){p.yTouched=false}};Object.freeze(xUnitVector);Object.freeze(yUnitVector);function UnitVector(x,y){this.x=x;this.y=y;this.axis=undefined;this.slope=y/x;this.normalSlope=-x/y;Object.freeze(this)}UnitVector.prototype.distance=function(p1,p2,o1,o2){return this.x*xUnitVector.distance(p1,p2,o1,o2)+this.y*yUnitVector.distance(p1,p2,o1,o2)};UnitVector.prototype.interpolate=function(p,rp1,rp2,pv){var dm1;var dm2;var do1;var do2;var doa1;var doa2;var dt;do1=pv.distance(p,rp1,true,true);do2=pv.distance(p,rp2,true,true);dm1=pv.distance(rp1,rp1,false,true);dm2=pv.distance(rp2,rp2,false,true);doa1=Math.abs(do1);doa2=Math.abs(do2);dt=doa1+doa2;if(dt===0){this.setRelative(p,p,(dm1+dm2)/2,pv,true);return}this.setRelative(p,p,(dm1*doa2+dm2*doa1)/dt,pv,true)};UnitVector.prototype.setRelative=function(p,rp,d,pv,org){pv=pv||this;var rpx=org?rp.xo:rp.x;var rpy=org?rp.yo:rp.y;var rpdx=rpx+d*pv.x;var rpdy=rpy+d*pv.y;var pvns=pv.normalSlope;var fvs=this.slope;var px=p.x;var py=p.y;p.x=(fvs*px-pvns*rpdx+rpdy-py)/(fvs-pvns);p.y=fvs*(p.x-px)+py};UnitVector.prototype.touch=function(p){p.xTouched=true;p.yTouched=true};function getUnitVector(x,y){var d=Math.sqrt(x*x+y*y);x/=d;y/=d;if(x===1&&y===0){return xUnitVector}else if(x===0&&y===1){return yUnitVector}else{return new UnitVector(x,y)}}function HPoint(x,y,lastPointOfContour,onCurve){this.x=this.xo=Math.round(x*64)/64;this.y=this.yo=Math.round(y*64)/64;this.lastPointOfContour=lastPointOfContour;this.onCurve=onCurve;this.prevPointOnContour=undefined;this.nextPointOnContour=undefined;this.xTouched=false;this.yTouched=false;Object.preventExtensions(this)}HPoint.prototype.nextTouched=function(v){var p=this.nextPointOnContour;while(!v.touched(p)&&p!==this){p=p.nextPointOnContour}return p};HPoint.prototype.prevTouched=function(v){var p=this.prevPointOnContour;while(!v.touched(p)&&p!==this){p=p.prevPointOnContour}return p};var HPZero=Object.freeze(new HPoint(0,0));var defaultState={cvCutIn:17/16,deltaBase:9,deltaShift:.125,loop:1,minDis:1,autoFlip:true};function State(env,prog){this.env=env;this.stack=[];this.prog=prog;switch(env){case"glyf":this.zp0=this.zp1=this.zp2=1;this.rp0=this.rp1=this.rp2=0;case"prep":this.fv=this.pv=this.dpv=xUnitVector;this.round=roundToGrid}}Hinting.prototype.exec=function(glyph,ppem){if(typeof ppem!=="number"){throw new Error("Point size is not a number!")}if(this._errorState>2){return}var font=this.font;var prepState=this._prepState;if(!prepState||prepState.ppem!==ppem){var fpgmState=this._fpgmState;if(!fpgmState){State.prototype=defaultState;fpgmState=this._fpgmState=new State("fpgm",font.tables.fpgm);fpgmState.funcs=[];fpgmState.font=font;if(exports.DEBUG){console.log("---EXEC FPGM---");fpgmState.step=-1}try{exec(fpgmState)}catch(e){console.log("Hinting error in FPGM:"+e);this._errorState=3;return}}State.prototype=fpgmState;prepState=this._prepState=new State("prep",font.tables.prep);prepState.ppem=ppem;var oCvt=font.tables.cvt;if(oCvt){var cvt=prepState.cvt=new Array(oCvt.length);var scale=ppem/font.unitsPerEm;for(var c=0;c1){return}try{return execGlyph(glyph,prepState)}catch(e){if(this._errorState<1){console.log("Hinting error:"+e);console.log("Note: further hinting errors are silenced")}this._errorState=1;return undefined}};execGlyph=function(glyph,prepState){var xScale=prepState.ppem/prepState.font.unitsPerEm;var yScale=xScale;var components=glyph.components;var contours;var gZone;var state;State.prototype=prepState;if(!components){state=new State("glyf",glyph.instructions);if(exports.DEBUG){console.log("---EXEC GLYPH---");state.step=-1}execComponent(glyph,state,xScale,yScale);gZone=state.gZone}else{var font=prepState.font;gZone=[];contours=[];for(var i=0;i=176&&ins<=183){ip+=ins-176+1}else if(ins>=184&&ins<=191){ip+=(ins-184+1)*2}else if(handleElse&&nesting===1&&ins===27){break}}while(nesting>0);state.ip=ip}function SVTCA(v,state){if(exports.DEBUG){console.log(state.step,"SVTCA["+v.axis+"]")}state.fv=state.pv=state.dpv=v}function SPVTCA(v,state){if(exports.DEBUG){console.log(state.step,"SPVTCA["+v.axis+"]")}state.pv=state.dpv=v}function SFVTCA(v,state){if(exports.DEBUG){console.log(state.step,"SFVTCA["+v.axis+"]")}state.fv=v}function SPVTL(a,state){var stack=state.stack;var p2i=stack.pop();var p1i=stack.pop();var p2=state.z2[p2i];var p1=state.z1[p1i];if(exports.DEBUG){console.log("SPVTL["+a+"]",p2i,p1i)}var dx;var dy;if(!a){dx=p1.x-p2.x;dy=p1.y-p2.y}else{dx=p2.y-p1.y;dy=p1.x-p2.x}state.pv=state.dpv=getUnitVector(dx,dy)}function SFVTL(a,state){var stack=state.stack;var p2i=stack.pop();var p1i=stack.pop();var p2=state.z2[p2i];var p1=state.z1[p1i];if(exports.DEBUG){console.log("SFVTL["+a+"]",p2i,p1i)}var dx;var dy;if(!a){dx=p1.x-p2.x;dy=p1.y-p2.y}else{dx=p2.y-p1.y;dy=p1.x-p2.x}state.fv=getUnitVector(dx,dy)}function SPVFS(state){var stack=state.stack;var y=stack.pop();var x=stack.pop();if(exports.DEBUG){console.log(state.step,"SPVFS[]",y,x)}state.pv=state.dpv=getUnitVector(x,y)}function SFVFS(state){var stack=state.stack;var y=stack.pop();var x=stack.pop();if(exports.DEBUG){console.log(state.step,"SPVFS[]",y,x)}state.fv=getUnitVector(x,y)}function GPV(state){var stack=state.stack;var pv=state.pv;if(exports.DEBUG){console.log(state.step,"GPV[]")}stack.push(pv.x*16384);stack.push(pv.y*16384)}function GFV(state){var stack=state.stack;var fv=state.fv;if(exports.DEBUG){console.log(state.step,"GFV[]")}stack.push(fv.x*16384);stack.push(fv.y*16384)}function SFVTPV(state){state.fv=state.pv;if(exports.DEBUG){console.log(state.step,"SFVTPV[]")}}function ISECT(state){var stack=state.stack;var pa0i=stack.pop();var pa1i=stack.pop();var pb0i=stack.pop();var pb1i=stack.pop();var pi=stack.pop();var z0=state.z0;var z1=state.z1;var pa0=z0[pa0i];var pa1=z0[pa1i];var pb0=z1[pb0i];var pb1=z1[pb1i];var p=state.z2[pi];if(exports.DEBUG){console.log("ISECT[], ",pa0i,pa1i,pb0i,pb1i,pi)}var x1=pa0.x;var y1=pa0.y;var x2=pa1.x;var y2=pa1.y;var x3=pb0.x;var y3=pb0.y;var x4=pb1.x;var y4=pb1.y;var div=(x1-x2)*(y3-y4)-(y1-y2)*(x3-x4);var f1=x1*y2-y1*x2;var f2=x3*y4-y3*x4;p.x=(f1*(x3-x4)-f2*(x1-x2))/div;p.y=(f1*(y3-y4)-f2*(y1-y2))/div}function SRP0(state){state.rp0=state.stack.pop();if(exports.DEBUG){console.log(state.step,"SRP0[]",state.rp0)}}function SRP1(state){state.rp1=state.stack.pop();if(exports.DEBUG){console.log(state.step,"SRP1[]",state.rp1)}}function SRP2(state){state.rp2=state.stack.pop();if(exports.DEBUG){console.log(state.step,"SRP2[]",state.rp2)}}function SZP0(state){var n=state.stack.pop();if(exports.DEBUG){console.log(state.step,"SZP0[]",n)}state.zp0=n;switch(n){case 0:if(!state.tZone){initTZone(state)}state.z0=state.tZone;break;case 1:state.z0=state.gZone;break;default:throw new Error("Invalid zone pointer")}}function SZP1(state){var n=state.stack.pop();if(exports.DEBUG){console.log(state.step,"SZP1[]",n)}state.zp1=n;switch(n){case 0:if(!state.tZone){initTZone(state)}state.z1=state.tZone;break;case 1:state.z1=state.gZone;break;default:throw new Error("Invalid zone pointer")}}function SZP2(state){var n=state.stack.pop();if(exports.DEBUG){console.log(state.step,"SZP2[]",n)}state.zp2=n;switch(n){case 0:if(!state.tZone){initTZone(state)}state.z2=state.tZone;break;case 1:state.z2=state.gZone;break;default:throw new Error("Invalid zone pointer")}}function SZPS(state){var n=state.stack.pop();if(exports.DEBUG){console.log(state.step,"SZPS[]",n)}state.zp0=state.zp1=state.zp2=n;switch(n){case 0:if(!state.tZone){initTZone(state)}state.z0=state.z1=state.z2=state.tZone;break;case 1:state.z0=state.z1=state.z2=state.gZone;break;default:throw new Error("Invalid zone pointer")}}function SLOOP(state){state.loop=state.stack.pop();if(exports.DEBUG){console.log(state.step,"SLOOP[]",state.loop)}}function RTG(state){if(exports.DEBUG){console.log(state.step,"RTG[]")}state.round=roundToGrid}function RTHG(state){if(exports.DEBUG){console.log(state.step,"RTHG[]")}state.round=roundToHalfGrid}function SMD(state){var d=state.stack.pop();if(exports.DEBUG){console.log(state.step,"SMD[]",d)}state.minDis=d/64}function ELSE(state){if(exports.DEBUG){console.log(state.step,"ELSE[]")}skip(state,false)}function JMPR(state){var o=state.stack.pop();if(exports.DEBUG){console.log(state.step,"JMPR[]",o)}state.ip+=o-1}function SCVTCI(state){var n=state.stack.pop();if(exports.DEBUG){console.log(state.step,"SCVTCI[]",n)}state.cvCutIn=n/64}function DUP(state){var stack=state.stack;if(exports.DEBUG){console.log(state.step,"DUP[]")}stack.push(stack[stack.length-1])}function POP(state){if(exports.DEBUG){console.log(state.step,"POP[]")}state.stack.pop()}function CLEAR(state){if(exports.DEBUG){console.log(state.step,"CLEAR[]")}state.stack.length=0}function SWAP(state){var stack=state.stack;var a=stack.pop();var b=stack.pop();if(exports.DEBUG){console.log(state.step,"SWAP[]")}stack.push(a);stack.push(b)}function DEPTH(state){var stack=state.stack;if(exports.DEBUG){console.log(state.step,"DEPTH[]")}stack.push(stack.length)}function LOOPCALL(state){var stack=state.stack;var fn=stack.pop();var c=stack.pop();if(exports.DEBUG){console.log(state.step,"LOOPCALL[]",fn,c)}var cip=state.ip;var cprog=state.prog;state.prog=state.funcs[fn];for(var i=0;i1?"loop "+(state.loop-loop)+": ":"")+"SHP["+(a?"rp1":"rp2")+"]",pi)}}state.loop=1}function SHC(a,state){var stack=state.stack;var rpi=a?state.rp1:state.rp2;var rp=(a?state.z0:state.z1)[rpi];var fv=state.fv;var pv=state.pv;var ci=stack.pop();var sp=state.z2[state.contours[ci]];var p=sp;if(exports.DEBUG){console.log(state.step,"SHC["+a+"]",ci)}var d=pv.distance(rp,rp,false,true);do{if(p!==rp){fv.setRelative(p,p,d,pv)}p=p.nextPointOnContour}while(p!==sp)}function SHZ(a,state){var stack=state.stack;var rpi=a?state.rp1:state.rp2;var rp=(a?state.z0:state.z1)[rpi];var fv=state.fv;var pv=state.pv;var e=stack.pop();if(exports.DEBUG){console.log(state.step,"SHZ["+a+"]",e)}var z;switch(e){case 0:z=state.tZone;break;case 1:z=state.gZone;break;default:throw new Error("Invalid zone")}var p;var d=pv.distance(rp,rp,false,true);var pLen=z.length-2;for(var i=0;i1?"loop "+(state.loop-loop)+": ":"")+"SHPIX[]",pi,d)}fv.setRelative(p,p,d);fv.touch(p)}state.loop=1}function IP(state){var stack=state.stack;var rp1i=state.rp1;var rp2i=state.rp2;var loop=state.loop;var rp1=state.z0[rp1i];var rp2=state.z1[rp2i];var fv=state.fv;var pv=state.dpv;var z2=state.z2;while(loop--){var pi=stack.pop();var p=z2[pi];if(exports.DEBUG){console.log(state.step,(state.loop>1?"loop "+(state.loop-loop)+": ":"")+"IP[]",pi,rp1i,"<->",rp2i)}fv.interpolate(p,rp1,rp2,pv);fv.touch(p)}state.loop=1}function MSIRP(a,state){var stack=state.stack;var d=stack.pop()/64;var pi=stack.pop();var p=state.z1[pi];var rp0=state.z0[state.rp0];var fv=state.fv;var pv=state.pv;fv.setRelative(p,rp0,d,pv);fv.touch(p);if(exports.DEBUG){console.log(state.step,"MSIRP["+a+"]",d,pi)}state.rp1=state.rp0;state.rp2=pi;if(a){state.rp0=pi}}function ALIGNRP(state){var stack=state.stack;var rp0i=state.rp0;var rp0=state.z0[rp0i];var loop=state.loop;var fv=state.fv;var pv=state.pv;var z1=state.z1;while(loop--){var pi=stack.pop();var p=z1[pi];if(exports.DEBUG){console.log(state.step,(state.loop>1?"loop "+(state.loop-loop)+": ":"")+"ALIGNRP[]",pi)}fv.setRelative(p,rp0,0,pv);fv.touch(p)}state.loop=1}function RTDG(state){if(exports.DEBUG){console.log(state.step,"RTDG[]")}state.round=roundToDoubleGrid}function MIAP(round,state){var stack=state.stack;var n=stack.pop();var pi=stack.pop();var p=state.z0[pi];var fv=state.fv;var pv=state.pv;var cv=state.cvt[n];if(round){cv=state.round(cv)}if(exports.DEBUG){console.log(state.step,"MIAP["+round+"]",n,"(",cv,")",pi)}fv.setRelative(p,HPZero,cv,pv);if(state.zp0===0){p.xo=p.x;p.yo=p.y}fv.touch(p);state.rp0=state.rp1=pi}function NPUSHB(state){var prog=state.prog;var ip=state.ip;var stack=state.stack;var n=prog[++ip];if(exports.DEBUG){console.log(state.step,"NPUSHB[]",n)}for(var i=0;i",d)}state.stack.push(Math.round(d*64))}function MPPEM(state){if(exports.DEBUG){console.log(state.step,"MPPEM[]")}state.stack.push(state.ppem)}function FLIPON(state){if(exports.DEBUG){console.log(state.step,"FLIPON[]")}state.autoFlip=true}function LT(state){var stack=state.stack;var e2=stack.pop();var e1=stack.pop();if(exports.DEBUG){console.log(state.step,"LT[]",e2,e1)}stack.push(e1e2?1:0)}function GTEQ(state){var stack=state.stack;var e2=stack.pop();var e1=stack.pop();if(exports.DEBUG){console.log(state.step,"GTEQ[]",e2,e1)}stack.push(e1>=e2?1:0)}function EQ(state){var stack=state.stack;var e2=stack.pop();var e1=stack.pop();if(exports.DEBUG){console.log(state.step,"EQ[]",e2,e1)}stack.push(e2===e1?1:0)}function NEQ(state){var stack=state.stack;var e2=stack.pop();var e1=stack.pop();if(exports.DEBUG){console.log(state.step,"NEQ[]",e2,e1)}stack.push(e2!==e1?1:0)}function ODD(state){var stack=state.stack;var n=stack.pop();if(exports.DEBUG){console.log(state.step,"ODD[]",n)}stack.push(Math.trunc(n)%2?1:0)}function EVEN(state){var stack=state.stack;var n=stack.pop();if(exports.DEBUG){console.log(state.step,"EVEN[]",n)}stack.push(Math.trunc(n)%2?0:1)}function IF(state){var test=state.stack.pop();var ins;if(exports.DEBUG){console.log(state.step,"IF[]",test)}if(!test){skip(state,true);if(exports.DEBUG){console.log(state.step,ins===27?"ELSE[]":"EIF[]")}}}function EIF(state){if(exports.DEBUG){console.log(state.step,"EIF[]")}}function AND(state){var stack=state.stack;var e2=stack.pop();var e1=stack.pop();if(exports.DEBUG){console.log(state.step,"AND[]",e2,e1)}stack.push(e2&&e1?1:0)}function OR(state){var stack=state.stack;var e2=stack.pop();var e1=stack.pop();if(exports.DEBUG){console.log(state.step,"OR[]",e2,e1)}stack.push(e2||e1?1:0)}function NOT(state){var stack=state.stack;var e=stack.pop();if(exports.DEBUG){console.log(state.step,"NOT[]",e)}stack.push(e?0:1)}function DELTAP123(b,state){var stack=state.stack;var n=stack.pop();var fv=state.fv;var pv=state.pv;var ppem=state.ppem;var base=state.deltaBase+(b-1)*16;var ds=state.deltaShift;var z0=state.z0;if(exports.DEBUG){console.log(state.step,"DELTAP["+b+"]",n,stack)}for(var i=0;i>4);if(appem!==ppem){continue}var mag=(arg&15)-8;if(mag>=0){mag++}if(exports.DEBUG){console.log(state.step,"DELTAPFIX",pi,"by",mag*ds)}var p=z0[pi];fv.setRelative(p,p,mag*ds,pv)}}function SDB(state){var stack=state.stack;var n=stack.pop();if(exports.DEBUG){console.log(state.step,"SDB[]",n)}state.deltaBase=n}function SDS(state){var stack=state.stack;var n=stack.pop();if(exports.DEBUG){console.log(state.step,"SDS[]",n)}state.deltaShift=Math.pow(.5,n)}function ADD(state){var stack=state.stack;var n2=stack.pop();var n1=stack.pop();if(exports.DEBUG){console.log(state.step,"ADD[]",n2,n1)}stack.push(n1+n2)}function SUB(state){var stack=state.stack;var n2=stack.pop();var n1=stack.pop();if(exports.DEBUG){console.log(state.step,"SUB[]",n2,n1)}stack.push(n1-n2)}function DIV(state){var stack=state.stack;var n2=stack.pop();var n1=stack.pop();if(exports.DEBUG){console.log(state.step,"DIV[]",n2,n1)}stack.push(n1*64/n2)}function MUL(state){var stack=state.stack;var n2=stack.pop();var n1=stack.pop();if(exports.DEBUG){console.log(state.step,"MUL[]",n2,n1)}stack.push(n1*n2/64)}function ABS(state){var stack=state.stack;var n=stack.pop();if(exports.DEBUG){console.log(state.step,"ABS[]",n)}stack.push(Math.abs(n))}function NEG(state){var stack=state.stack;var n=stack.pop();if(exports.DEBUG){console.log(state.step,"NEG[]",n)}stack.push(-n)}function FLOOR(state){var stack=state.stack;var n=stack.pop();if(exports.DEBUG){console.log(state.step,"FLOOR[]",n)}stack.push(Math.floor(n/64)*64)}function CEILING(state){var stack=state.stack;var n=stack.pop();if(exports.DEBUG){console.log(state.step,"CEILING[]",n)}stack.push(Math.ceil(n/64)*64)}function ROUND(dt,state){var stack=state.stack;var n=stack.pop();if(exports.DEBUG){console.log(state.step,"ROUND[]")}stack.push(state.round(n/64)*64)}function WCVTF(state){var stack=state.stack;var v=stack.pop();var l=stack.pop();if(exports.DEBUG){console.log(state.step,"WCVTF[]",v,l)}state.cvt[l]=v*state.ppem/state.font.unitsPerEm}function DELTAC123(b,state){var stack=state.stack;var n=stack.pop();var ppem=state.ppem;var base=state.deltaBase+(b-1)*16;var ds=state.deltaShift;if(exports.DEBUG){console.log(state.step,"DELTAC["+b+"]",n,stack)}for(var i=0;i>4);if(appem!==ppem){continue}var mag=(arg&15)-8;if(mag>=0){mag++}var delta=mag*ds;if(exports.DEBUG){console.log(state.step,"DELTACFIX",c,"by",delta)}state.cvt[c]+=delta}}function SROUND(state){var n=state.stack.pop();if(exports.DEBUG){console.log(state.step,"SROUND[]",n)}state.round=roundSuper;var period;switch(n&192){case 0:period=.5;break;case 64:period=1;break;case 128:period=2;break;default:throw new Error("invalid SROUND value")}state.srPeriod=period;switch(n&48){case 0:state.srPhase=0;break;case 16:state.srPhase=.25*period;break;case 32:state.srPhase=.5*period;break;case 48:state.srPhase=.75*period;break;default:throw new Error("invalid SROUND value")}n&=15;if(n===0){state.srThreshold=0}else{state.srThreshold=(n/8-.5)*period}}function S45ROUND(state){var n=state.stack.pop();if(exports.DEBUG){console.log(state.step,"S45ROUND[]",n)}state.round=roundSuper;var period;switch(n&192){case 0:period=Math.sqrt(2)/2;break;case 64:period=Math.sqrt(2);break;case 128:period=2*Math.sqrt(2);break;default:throw new Error("invalid S45ROUND value")}state.srPeriod=period;switch(n&48){case 0:state.srPhase=0;break;case 16:state.srPhase=.25*period;break;case 32:state.srPhase=.5*period;break;case 48:state.srPhase=.75*period;break;default:throw new Error("invalid S45ROUND value")}n&=15;if(n===0){state.srThreshold=0}else{state.srThreshold=(n/8-.5)*period}}function ROFF(state){if(exports.DEBUG){console.log(state.step,"ROFF[]")}state.round=roundOff}function RUTG(state){if(exports.DEBUG){console.log(state.step,"RUTG[]")}state.round=roundUpToGrid}function RDTG(state){if(exports.DEBUG){console.log(state.step,"RDTG[]")}state.round=roundDownToGrid}function SCANCTRL(state){var n=state.stack.pop();if(exports.DEBUG){console.log(state.step,"SCANCTRL[]",n)}}function SDPVTL(a,state){var stack=state.stack;var p2i=stack.pop();var p1i=stack.pop();var p2=state.z2[p2i];var p1=state.z1[p1i];if(exports.DEBUG){console.log("SDPVTL["+a+"]",p2i,p1i)}var dx;var dy;if(!a){dx=p1.x-p2.x;dy=p1.y-p2.y}else{dx=p2.y-p1.y;dy=p1.x-p2.x}state.dpv=getUnitVector(dx,dy)}function GETINFO(state){var stack=state.stack;var sel=stack.pop();var r=0;if(exports.DEBUG){console.log(state.step,"GETINFO[]",sel)}if(sel&1){r=35}if(sel&32){r|=4096}stack.push(r)}function ROLL(state){var stack=state.stack;var a=stack.pop();var b=stack.pop();var c=stack.pop();if(exports.DEBUG){console.log(state.step,"ROLL[]")}stack.push(b);stack.push(a);stack.push(c)}function MAX(state){var stack=state.stack;var e2=stack.pop();var e1=stack.pop();if(exports.DEBUG){console.log(state.step,"MAX[]",e2,e1)}stack.push(Math.max(e1,e2))}function MIN(state){var stack=state.stack;var e2=stack.pop();var e1=stack.pop();if(exports.DEBUG){console.log(state.step,"MIN[]",e2,e1)}stack.push(Math.min(e1,e2))}function SCANTYPE(state){var n=state.stack.pop();if(exports.DEBUG){console.log(state.step,"SCANTYPE[]",n)}}function INSTCTRL(state){var s=state.stack.pop();var v=state.stack.pop();if(exports.DEBUG){console.log(state.step,"INSTCTRL[]",s,v)}switch(s){case 1:state.inhibitGridFit=!!v;return;case 2:state.ignoreCvt=!!v;return;default:throw new Error("invalid INSTCTRL[] selector")}}function PUSHB(n,state){var stack=state.stack;var prog=state.prog;var ip=state.ip;if(exports.DEBUG){console.log(state.step,"PUSHB["+n+"]")}for(var i=0;i=0?1:-1;d=Math.abs(d);if(indirect){cv=state.cvt[cvte];if(ro&&Math.abs(d-cv)":"_")+(ro?"R":"_")+(dt===0?"Gr":dt===1?"Bl":dt===2?"Wh":"")+"]",indirect?cvte+"("+state.cvt[cvte]+","+cv+")":"",pi,"(d =",od,"->",sign*d,")")}state.rp1=state.rp0;state.rp2=pi;if(setRp0){state.rp0=pi}}instructionTable=[SVTCA.bind(undefined,yUnitVector),SVTCA.bind(undefined,xUnitVector),SPVTCA.bind(undefined,yUnitVector),SPVTCA.bind(undefined,xUnitVector),SFVTCA.bind(undefined,yUnitVector),SFVTCA.bind(undefined,xUnitVector),SPVTL.bind(undefined,0),SPVTL.bind(undefined,1),SFVTL.bind(undefined,0),SFVTL.bind(undefined,1),SPVFS,SFVFS,GPV,GFV,SFVTPV,ISECT,SRP0,SRP1,SRP2,SZP0,SZP1,SZP2,SZPS,SLOOP,RTG,RTHG,SMD,ELSE,JMPR,SCVTCI,undefined,undefined,DUP,POP,CLEAR,SWAP,DEPTH,CINDEX,MINDEX,undefined,undefined,undefined,LOOPCALL,CALL,FDEF,undefined,MDAP.bind(undefined,0),MDAP.bind(undefined,1),IUP.bind(undefined,yUnitVector),IUP.bind(undefined,xUnitVector),SHP.bind(undefined,0),SHP.bind(undefined,1),SHC.bind(undefined,0),SHC.bind(undefined,1),SHZ.bind(undefined,0),SHZ.bind(undefined,1),SHPIX,IP,MSIRP.bind(undefined,0),MSIRP.bind(undefined,1),ALIGNRP,RTDG,MIAP.bind(undefined,0),MIAP.bind(undefined,1),NPUSHB,NPUSHW,WS,RS,WCVTP,RCVT,GC.bind(undefined,0),GC.bind(undefined,1),undefined,MD.bind(undefined,0),MD.bind(undefined,1),MPPEM,undefined,FLIPON,undefined,undefined,LT,LTEQ,GT,GTEQ,EQ,NEQ,ODD,EVEN,IF,EIF,AND,OR,NOT,DELTAP123.bind(undefined,1),SDB,SDS,ADD,SUB,DIV,MUL,ABS,NEG,FLOOR,CEILING,ROUND.bind(undefined,0),ROUND.bind(undefined,1),ROUND.bind(undefined,2),ROUND.bind(undefined,3),undefined,undefined,undefined,undefined,WCVTF,DELTAP123.bind(undefined,2),DELTAP123.bind(undefined,3),DELTAC123.bind(undefined,1),DELTAC123.bind(undefined,2),DELTAC123.bind(undefined,3),SROUND,S45ROUND,undefined,undefined,ROFF,undefined,RUTG,RDTG,POP,POP,undefined,undefined,undefined,undefined,undefined,SCANCTRL,SDPVTL.bind(undefined,0),SDPVTL.bind(undefined,1),GETINFO,undefined,ROLL,MAX,MIN,SCANTYPE,INSTCTRL,undefined,undefined,undefined,undefined,undefined,undefined,undefined,undefined,undefined,undefined,undefined,undefined,undefined,undefined,undefined,undefined,undefined,undefined,undefined,undefined,undefined,undefined,undefined,undefined,undefined,undefined,undefined,undefined,undefined,undefined,undefined,undefined,undefined,PUSHB.bind(undefined,1),PUSHB.bind(undefined,2),PUSHB.bind(undefined,3),PUSHB.bind(undefined,4),PUSHB.bind(undefined,5),PUSHB.bind(undefined,6),PUSHB.bind(undefined,7),PUSHB.bind(undefined,8),PUSHW.bind(undefined,1),PUSHW.bind(undefined,2),PUSHW.bind(undefined,3),PUSHW.bind(undefined,4),PUSHW.bind(undefined,5),PUSHW.bind(undefined,6),PUSHW.bind(undefined,7),PUSHW.bind(undefined,8),MDRP_MIRP.bind(undefined,0,0,0,0,0),MDRP_MIRP.bind(undefined,0,0,0,0,1),MDRP_MIRP.bind(undefined,0,0,0,0,2),MDRP_MIRP.bind(undefined,0,0,0,0,3),MDRP_MIRP.bind(undefined,0,0,0,1,0),MDRP_MIRP.bind(undefined,0,0,0,1,1),MDRP_MIRP.bind(undefined,0,0,0,1,2),MDRP_MIRP.bind(undefined,0,0,0,1,3),MDRP_MIRP.bind(undefined,0,0,1,0,0),MDRP_MIRP.bind(undefined,0,0,1,0,1),MDRP_MIRP.bind(undefined,0,0,1,0,2),MDRP_MIRP.bind(undefined,0,0,1,0,3),MDRP_MIRP.bind(undefined,0,0,1,1,0),MDRP_MIRP.bind(undefined,0,0,1,1,1),MDRP_MIRP.bind(undefined,0,0,1,1,2),MDRP_MIRP.bind(undefined,0,0,1,1,3),MDRP_MIRP.bind(undefined,0,1,0,0,0),MDRP_MIRP.bind(undefined,0,1,0,0,1),MDRP_MIRP.bind(undefined,0,1,0,0,2),MDRP_MIRP.bind(undefined,0,1,0,0,3),MDRP_MIRP.bind(undefined,0,1,0,1,0),MDRP_MIRP.bind(undefined,0,1,0,1,1),MDRP_MIRP.bind(undefined,0,1,0,1,2),MDRP_MIRP.bind(undefined,0,1,0,1,3),MDRP_MIRP.bind(undefined,0,1,1,0,0),MDRP_MIRP.bind(undefined,0,1,1,0,1),MDRP_MIRP.bind(undefined,0,1,1,0,2),MDRP_MIRP.bind(undefined,0,1,1,0,3),MDRP_MIRP.bind(undefined,0,1,1,1,0),MDRP_MIRP.bind(undefined,0,1,1,1,1),MDRP_MIRP.bind(undefined,0,1,1,1,2),MDRP_MIRP.bind(undefined,0,1,1,1,3),MDRP_MIRP.bind(undefined,1,0,0,0,0),MDRP_MIRP.bind(undefined,1,0,0,0,1),MDRP_MIRP.bind(undefined,1,0,0,0,2),MDRP_MIRP.bind(undefined,1,0,0,0,3),MDRP_MIRP.bind(undefined,1,0,0,1,0),MDRP_MIRP.bind(undefined,1,0,0,1,1),MDRP_MIRP.bind(undefined,1,0,0,1,2),MDRP_MIRP.bind(undefined,1,0,0,1,3),MDRP_MIRP.bind(undefined,1,0,1,0,0),MDRP_MIRP.bind(undefined,1,0,1,0,1),MDRP_MIRP.bind(undefined,1,0,1,0,2),MDRP_MIRP.bind(undefined,1,0,1,0,3),MDRP_MIRP.bind(undefined,1,0,1,1,0),MDRP_MIRP.bind(undefined,1,0,1,1,1),MDRP_MIRP.bind(undefined,1,0,1,1,2),MDRP_MIRP.bind(undefined,1,0,1,1,3),MDRP_MIRP.bind(undefined,1,1,0,0,0),MDRP_MIRP.bind(undefined,1,1,0,0,1),MDRP_MIRP.bind(undefined,1,1,0,0,2),MDRP_MIRP.bind(undefined,1,1,0,0,3),MDRP_MIRP.bind(undefined,1,1,0,1,0),MDRP_MIRP.bind(undefined,1,1,0,1,1),MDRP_MIRP.bind(undefined,1,1,0,1,2),MDRP_MIRP.bind(undefined,1,1,0,1,3),MDRP_MIRP.bind(undefined,1,1,1,0,0),MDRP_MIRP.bind(undefined,1,1,1,0,1),MDRP_MIRP.bind(undefined,1,1,1,0,2),MDRP_MIRP.bind(undefined,1,1,1,0,3),MDRP_MIRP.bind(undefined,1,1,1,1,0),MDRP_MIRP.bind(undefined,1,1,1,1,1),MDRP_MIRP.bind(undefined,1,1,1,1,2),MDRP_MIRP.bind(undefined,1,1,1,1,3)];function Font(options){options=options||{};if(!options.empty){checkArgument(options.familyName,"When creating a new Font object, familyName is required.");checkArgument(options.styleName,"When creating a new Font object, styleName is required.");checkArgument(options.unitsPerEm,"When creating a new Font object, unitsPerEm is required.");checkArgument(options.ascender,"When creating a new Font object, ascender is required.");checkArgument(options.descender,"When creating a new Font object, descender is required.");checkArgument(options.descender<0,"Descender should be negative (e.g. -512).");this.names={fontFamily:{en:options.familyName||" "},fontSubfamily:{en:options.styleName||" "},fullName:{en:options.fullName||options.familyName+" "+options.styleName},postScriptName:{en:options.postScriptName||options.familyName+options.styleName},designer:{en:options.designer||" "},designerURL:{en:options.designerURL||" "},manufacturer:{en:options.manufacturer||" "},manufacturerURL:{en:options.manufacturerURL||" "},license:{en:options.license||" "},licenseURL:{en:options.licenseURL||" "},version:{en:options.version||"Version 0.1"},description:{en:options.description||" "},copyright:{en:options.copyright||" "},trademark:{en:options.trademark||" "}};this.unitsPerEm=options.unitsPerEm||1e3;this.ascender=options.ascender;this.descender=options.descender;this.createdTimestamp=options.createdTimestamp;this.tables={os2:{usWeightClass:options.weightClass||this.usWeightClasses.MEDIUM,usWidthClass:options.widthClass||this.usWidthClasses.MEDIUM,fsSelection:options.fsSelection||this.fsSelectionValues.REGULAR}}}this.supported=true;this.glyphs=new glyphset.GlyphSet(this,options.glyphs||[]);this.encoding=new DefaultEncoding(this);this.substitution=new Substitution(this);this.tables=this.tables||{};Object.defineProperty(this,"hinting",{get:function(){if(this._hinting){return this._hinting}if(this.outlinesFormat==="truetype"){return this._hinting=new Hinting(this)}}})}Font.prototype.hasChar=function(c){return this.encoding.charToGlyphIndex(c)!==null};Font.prototype.charToGlyphIndex=function(s){return this.encoding.charToGlyphIndex(s)};Font.prototype.charToGlyph=function(c){var glyphIndex=this.charToGlyphIndex(c);var glyph=this.glyphs.get(glyphIndex);if(!glyph){glyph=this.glyphs.get(0)}return glyph};Font.prototype.stringToGlyphs=function(s,options){var this$1=this;options=options||this.defaultRenderOptions;var indexes=[];for(var i=0;i0,"No English "+name+" specified.")}assertNamePresent("fontFamily");assertNamePresent("weightName");assertNamePresent("manufacturer");assertNamePresent("copyright");assertNamePresent("version");assert(this.unitsPerEm>0,"No unitsPerEm specified.")};Font.prototype.toTables=function(){return sfnt.fontToTable(this)};Font.prototype.toBuffer=function(){console.warn("Font.toBuffer is deprecated. Use Font.toArrayBuffer instead.");return this.toArrayBuffer()};Font.prototype.toArrayBuffer=function(){var sfntTable=this.toTables();var bytes=sfntTable.encode();var buffer=new ArrayBuffer(bytes.length);var intArray=new Uint8Array(buffer);for(var i=0;i>1;if(glyphID1){console.warn("Only the first kern subtable is supported.")}p.skip("uLong");var coverage=p.parseUShort();var subtableVersion=coverage&255;p.skip("uShort");if(subtableVersion===0){var nPairs=p.parseUShort();p.skip("uShort",3);for(var i=0;i