{"version":3,"sources":["webpack://[name]/webpack/universalModuleDefinition","webpack://[name]/webpack/bootstrap","webpack://[name]/./src/emfjs/index.ts","webpack://[name]/external {\"commonjs\":\"./jquery.svg\",\"commonjs2\":\"./jquery.svg\",\"amd\":\"./jquery.svg\",\"root\":\"$\"}","webpack://[name]/external {\"commonjs\":\"./jquery.svgfilter\",\"commonjs2\":\"./jquery.svgfilter\",\"amd\":\"./jquery.svgfilter\",\"root\":\"$\"}","webpack://[name]/./src/emfjs/Renderer.ts","webpack://[name]/external {\"commonjs\":\"jquery\",\"commonjs2\":\"jquery\",\"amd\":\"jquery\",\"root\":\"$\"}","webpack://[name]/./src/emfjs/Blob.ts","webpack://[name]/./src/emfjs/Helper.ts","webpack://[name]/./src/emfjs/EMFRecords.ts","webpack://[name]/./src/emfjs/Primitives.ts","webpack://[name]/./src/emfjs/Region.ts","webpack://[name]/./src/emfjs/Style.ts","webpack://[name]/./src/emfjs/Bitmap.ts","webpack://[name]/./src/emfjs/GDIContext.ts"],"names":["root","factory","exports","module","require","define","amd","this","__WEBPACK_EXTERNAL_MODULE__1__","__WEBPACK_EXTERNAL_MODULE__2__","__WEBPACK_EXTERNAL_MODULE__4__","installedModules","__webpack_require__","moduleId","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","__webpack_exports__","_Helper__WEBPACK_IMPORTED_MODULE_3__","_Helper__WEBPACK_IMPORTED_MODULE_4__","Renderer","blob","parse","log","render","info","_this","img","jquery__WEBPACK_IMPORTED_MODULE_0__","svg","onLoad","_render","mapMode","wExt","hExt","xExt","yExt","settings","viewBox","join","preserveAspectRatio","svgContainer","attr","width","height","_img","reader","_Blob__WEBPACK_IMPORTED_MODULE_1__","readUint32","size","EMF","w","h","gdi","_GDIContext__WEBPACK_IMPORTED_MODULE_3__","setWindowExtEx","setViewportExtEx","setMapMode","hdrsize","_hdrsize","_records","_EMFRecords__WEBPACK_IMPORTED_MODULE_2__","play","_Helper__WEBPACK_IMPORTED_MODULE_0__","Blob","offset","data","pos","Uint8Array","eof","length","seek","newpos","skip","cnt","newPos","readBinary","ret","String","fromCharCode","readInt8","readUint8","readInt32","val","readUint16","readInt16","readString","readNullTermString","maxSize","byte","readFixedSizeUnicodeString","fixedSizeChars","charCode","Helper","EMFJSError","message","stack","Error","isLoggingEnabled","loggingEnabled","enabled","console","_makeUniqueId","prefix","_uniqueId","_writeUint32Val","uint8arr","_blobToBinary","len","GDI","FormatSignature","ENHMETA_SIGNATURE","EPS_SIGNATURE","BITMAPINFOHEADER_SIZE","BITMAPCOREHEADER_SIZE","RecordType","EMR_POLYBEZIER","EMR_POLYGON","EMR_POLYLINE","EMR_POLYBEZIERTO","EMR_POLYLINETO","EMR_POLYPOLYLINE","EMR_POLYPOLYGON","EMR_SETWINDOWEXTEX","EMR_SETWINDOWORGEX","EMR_SETVIEWPORTEXTEX","EMR_SETVIEWPORTORGEX","EMR_SETBRUSHORGEX","EMR_EOF","EMR_SETPIXELV","EMR_SETMAPPERFLAGS","EMR_SETMAPMODE","EMR_SETBKMODE","EMR_SETPOLYFILLMODE","EMR_SETROP2","EMR_SETSTRETCHBLTMODE","EMR_SETTEXTALIGN","EMR_SETCOLORADJUSTMENT","EMR_SETTEXTCOLOR","EMR_SETBKCOLOR","EMR_OFFSETCLIPRGN","EMR_MOVETOEX","EMR_SETMETARGN","EMR_EXCLUDECLIPRECT","EMR_INTERSECTCLIPRECT","EMR_SCALEVIEWPORTEXTEX","EMR_SCALEWINDOWEXTEX","EMR_SAVEDC","EMR_RESTOREDC","EMR_SETWORLDTRANSFORM","EMR_MODIFYWORLDTRANSFORM","EMR_SELECTOBJECT","EMR_CREATEPEN","EMR_CREATEBRUSHINDIRECT","EMR_DELETEOBJECT","EMR_ANGLEARC","EMR_ELLIPSE","EMR_RECTANGLE","EMR_ROUNDRECT","EMR_ARC","EMR_CHORD","EMR_PIE","EMR_SELECTPALETTE","EMR_CREATEPALETTE","EMR_SETPALETTEENTRIES","EMR_RESIZEPALETTE","EMR_REALIZEPALETTE","EMR_EXTFLOODFILL","EMR_LINETO","EMR_ARCTO","EMR_POLYDRAW","EMR_SETARCDIRECTION","EMR_SETMITERLIMIT","EMR_BEGINPATH","EMR_ENDPATH","EMR_CLOSEFIGURE","EMR_FILLPATH","EMR_STROKEANDFILLPATH","EMR_STROKEPATH","EMR_FLATTENPATH","EMR_WIDENPATH","EMR_SELECTCLIPPATH","EMR_ABORTPATH","EMR_COMMENT","EMR_FILLRGN","EMR_FRAMERGN","EMR_INVERTRGN","EMR_PAINTRGN","EMR_EXTSELECTCLIPRGN","EMR_BITBLT","EMR_STRETCHBLT","EMR_MASKBLT","EMR_PLGBLT","EMR_SETDIBITSTODEVICE","EMR_STRETCHDIBITS","EMR_EXTCREATEFONTINDIRECTW","EMR_EXTTEXTOUTA","EMR_EXTTEXTOUTW","EMR_POLYBEZIER16","EMR_POLYGON16","EMR_POLYLINE16","EMR_POLYBEZIERTO16","EMR_POLYLINETO16","EMR_POLYPOLYLINE16","EMR_POLYPOLYGON16","EMR_POLYDRAW16","EMR_CREATEMONOBRUSH","EMR_CREATEDIBPATTERNBRUSHPT","EMR_EXTCREATEPEN","EMR_POLYTEXTOUTA","EMR_POLYTEXTOUTW","EMR_SETICMMODE","EMR_CREATECOLORSPACE","EMR_SETCOLORSPACE","EMR_DELETECOLORSPACE","EMR_GLSRECORD","EMR_GLSBOUNDEDRECORD","EMR_PIXELFORMAT","EMR_DRAWESCAPE","EMR_EXTESCAPE","EMR_SMALLTEXTOUT","EMR_FORCEUFIMAPPING","EMR_NAMEDESCAPE","EMR_COLORCORRECTPALETTE","EMR_SETICMPROFILEA","EMR_SETICMPROFILEW","EMR_ALPHABLEND","EMR_SETLAYOUT","EMR_TRANSPARENTBLT","EMR_GRADIENTFILL","EMR_SETLINKEDUFIS","EMR_SETTEXTJUSTIFICATION","EMR_COLORMATCHTOTARGETW","EMR_CREATECOLORSPACEW","MetafileEscapes","NEWFRAME","ABORTDOC","NEXTBAND","SETCOLORTABLE","GETCOLORTABLE","FLUSHOUT","DRAFTMODE","QUERYESCSUPPORT","SETABORTPROC","STARTDOC","ENDDOC","GETPHYSPAGESIZE","GETPRINTINGOFFSET","GETSCALINGFACTOR","META_ESCAPE_ENHANCED_METAFILE","SETPENWIDTH","SETCOPYCOUNT","SETPAPERSOURCE","PASSTHROUGH","GETTECHNOLOGY","SETLINECAP","SETLINEJOIN","SETMITERLIMIT","BANDINFO","DRAWPATTERNRECT","GETVECTORPENSIZE","GETVECTORBRUSHSIZE","ENABLEDUPLEX","GETSETPAPERBINS","GETSETPRINTORIENT","ENUMPAPERBINS","SETDIBSCALING","EPSPRINTING","ENUMPAPERMETRICS","GETSETPAPERMETRICS","POSTSCRIPT_DATA","POSTSCRIPT_IGNORE","GETDEVICEUNITS","GETEXTENDEDTEXTMETRICS","GETPAIRKERNTABLE","EXTTEXTOUT","GETFACENAME","DOWNLOADFACE","METAFILE_DRIVER","QUERYDIBSUPPORT","BEGIN_PATH","CLIP_TO_PATH","END_PATH","OPEN_CHANNEL","DOWNLOADHEADER","CLOSE_CHANNEL","POSTSCRIPT_PASSTHROUGH","ENCAPSULATED_POSTSCRIPT","POSTSCRIPT_IDENTIFY","POSTSCRIPT_INJECTION","CHECKJPEGFORMAT","CHECKPNGFORMAT","GET_PS_FEATURESETTING","MXDC_ESCAPE","SPCLPASSTHROUGH2","MapMode","MM_TEXT","MM_LOMETRIC","MM_HIMETRIC","MM_LOENGLISH","MM_HIENGLISH","MM_TWIPS","MM_ISOTROPIC","MM_ANISOTROPIC","StretchMode","BLACKONWHITE","WHITEONBLACK","COLORONCOLOR","HALFTONE","MixMode","TRANSPARENT","OPAQUE","BrushStyle","BS_SOLID","BS_NULL","BS_HATCHED","BS_PATTERN","BS_INDEXED","BS_DIBPATTERN","BS_DIBPATTERNPT","BS_PATTERN8X8","BS_DIBPATTERN8X8","BS_MONOPATTERN","PenStyle","PS_COSMETIC","PS_ENDCAP_ROUND","PS_JOIN_ROUND","PS_SOLID","PS_DASH","PS_DOT","PS_DASHDOT","PS_DASHDOTDOT","PS_NULL","PS_INSIDEFRAME","PS_USERSTYLE","PS_ALTERNATE","PS_ENDCAP_SQUARE","PS_ENDCAP_FLAT","PS_JOIN_BEVEL","PS_JOIN_MITER","PS_GEOMETRIC","PolygonFillMode","ALTERNATE","WINDING","BitmapCompression","BI_RGB","BI_RLE8","BI_RLE4","BI_BITFIELDS","BI_JPEG","BI_PNG","RegionMode","RGN_AND","RGN_OR","RGN_XOR","RGN_DIFF","RGN_COPY","StockObject","WHITE_BRUSH","LTGRAY_BRUSH","GRAY_BRUSH","DKGRAY_BRUSH","BLACK_BRUSH","NULL_BRUSH","WHITE_PEN","BLACK_PEN","NULL_PEN","OEM_FIXED_FONT","ANSI_FIXED_FONT","ANSI_VAR_FONT","SYSTEM_FONT","DEVICE_DEFAULT_FONT","DEFAULT_PALETTE","SYSTEM_FIXED_FONT","DEFAULT_GUI_FONT","DC_BRUSH","DC_PEN","_Style__WEBPACK_IMPORTED_MODULE_3__","EmfHeader","headerSize","recordStart","bounds","_Primitives__WEBPACK_IMPORTED_MODULE_1__","frame","descriptionLen","descriptionOff","nPalEntries","refDevCx","refDevCy","refDevCxMm","refDevCyMm","hdrSize","prevPos","description","pixelFormatSize","pixelFormatOff","displayDevCxUm","displayDevCyUm","toString","EMFRecords","first","_header","all","curpos","type","mapMode_1","this_1","push","x_1","y_1","setWindowOrgEx","x_2","y_2","x_3","y_3","setViewportOrgEx","x_4","y_4","saveDC","saved_1","restoreDC","bkMode_1","setBkMode","bkColor_1","setBkColor","index_1","brush_1","createBrush","index_2","pen_1","createPen","index_3","offBmi","cbBmi","offBits","cbBits","pen_2","header","off","idx_1","selectObject","idx_2","deleteObject","rect_1","rectangle","rect_2","corner_1","cx","cy","x_5","y_5","lineTo","x_6","y_6","moveToEx","isSmall","bounds_1","points_1","polygon","bounds_2","polyCnt","polygonsPtCnts","polygons_1","ptCnt","ip","polyPolygon","polyfillmode_1","setPolyFillMode","isLineTo_1","bounds_3","points_2","polyline","isPolyBezierTo_1","bounds_4","points_3","polybezier","bounds_5","start","points_4","bounds_6","points_5","textAlign_1","setTextAlign","stretchMode_1","setStretchBltMode","origin_1","setBrushOrgEx","beginPath","endPath","abortPath","closeFigure","bounds_7","fillPath","bounds_8","strokePath","rgnMode_1","selectClipPath","rgnMode_2","region_1","_Region__WEBPACK_IMPORTED_MODULE_2__","selectClipRgn","offset_1","offsetClipRgn","miterLimit_1","setMiterLimit","recordName","name_1","main_loop","PointS","x","y","clone","PointL","RectL","left","top","right","bottom","empty","intersect","rectL","Math","max","min","SizeL","Obj","Region","_super","copy","rectCnt","scans","scanLine","Scan","append","_updateComplexity","complexity","__extends","scan","scanlines","scanline","subtract","rect","si","cloned","splice","last","top_1","slen","offX","offY","CreateSimpleRegion","rgn","_Primitives__WEBPACK_IMPORTED_MODULE_2__","ColorRef","g","b","toHex","slice","Font","escapement","orientation","weight","italic","underline","strikeout","charset","outprecision","clipprecision","quality","pitchAndFamily","pitch","family","dataLength","facename","JSON","stringify","Brush","style","_Helper__WEBPACK_IMPORTED_MODULE_1__","color","pattern","_Bitmap__WEBPACK_IMPORTED_MODULE_0__","dibpatternpt","hatchstyle","Pen","brush","BitmapBase","getWidth","getHeight","BitmapCoreHeader","skipsize","planes","bitcount","colors","BitmapInfoHeader","compression","sizeimage","xpelspermeter","ypelspermeter","clrused","clrimportant","BitmapInfo","usergb","_usergb","_infosize","masks","abs","infosize","DIBitmap","bitmapInfo","_reader","_offset","_location","_info","totalSize","makeBitmapFileHeader","buf","ArrayBuffer","view","base64ref","prevpos","mime","ref","btoa","Path","svgPath","_StockObjects","createSolidBrush","createSolidPen","stockObjs","objs","createStockObjects","GDIContextState","defObjects","_svggroup","_svgclipChanged","_svgtextbkfilter","mapmode","stretchmode","textalign","bkmode","textcolor","bkcolor","polyfillmode","miterlimit","wx","wy","ww","wh","vx","vy","vw","vh","nextbrx","nextbry","brx","bry","clip","ownclip","selected","defObj","GDIContext","_svg","_svgdefs","_svgPatterns","_svgClipPaths","_svgPath","pen","font","palette","region","state","statestack","objects","origin","prevstate","saved","pop","stretchMode","rw","rh","_todevY","_todevX","_todevH","_pushGroup","opts","_applyOpts","toX","toY","fromX","fromY","line","move","path","points","pts","point","fill-rule","polygons","isLineTo","firstPts","firstPt","unshift","lastPt","isPolyBezierTo","cp1","cp2","ep","curveC","rgnMode","_getClipRgn","textAlignmentMode","miterLimit","bkMode","bkColor","polyFillMode","index","idx","_storeObject","createPenEx","objIdx","checkType","obj","_getObject","_selectObject","createPath","close","selPath","fill","_deleteObject","_getSvgClipPathForRegion","_getStockObject","_getSvgDef","defs","existingId","id","sclip","clipPath","_todevW","strokeWidth","j","_getSvgPatternForBrush","spat","patternUnits","image","floor","_tologicalX","_tologicalY","_tologicalW","_tologicalH","usePen","useBrush","useFont","stroke","dotWidth","dashWidth","dotSpacing"],"mappings":"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","file":"EMFJS.bundle.min.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"./jquery.svg\"), require(\"./jquery.svgfilter\"), require(\"jquery\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"./jquery.svg\", \"./jquery.svgfilter\", \"jquery\"], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"EMFJS\"] = factory(require(\"./jquery.svg\"), require(\"./jquery.svgfilter\"), require(\"jquery\"));\n\telse\n\t\troot[\"EMFJS\"] = factory(root[\"$\"], root[\"$\"], root[\"$\"]);\n})(this, function(__WEBPACK_EXTERNAL_MODULE__1__, __WEBPACK_EXTERNAL_MODULE__2__, __WEBPACK_EXTERNAL_MODULE__4__) {\nreturn "," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 0);\n","/*\n\nThe MIT License (MIT)\n\nCopyright (c) 2016 Tom Zoehner\nCopyright (c) 2018 Thomas Bluemel\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n\n*/\n\nimport \"jquery.svg\";\nimport \"jquery.svgfilter\";\nexport { Renderer, IRendererSettings } from \"./Renderer\";\nexport { EMFJSError as Error, loggingEnabled } from \"./Helper\";\n","module.exports = __WEBPACK_EXTERNAL_MODULE__1__;","module.exports = __WEBPACK_EXTERNAL_MODULE__2__;","/*\n\nThe MIT License (MIT)\n\nCopyright (c) 2016 Tom Zoehner\nCopyright (c) 2018 Thomas Bluemel\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n\n*/\n\nimport * as $ from \"jquery\";\nimport { Blob } from \"./Blob\";\nimport { EMFRecords } from \"./EMFRecords\";\nimport { GDIContext } from \"./GDIContext\";\nimport { EMFJSError, Helper } from \"./Helper\";\n\nexport interface IRendererSettings {\n width: string;\n height: string;\n wExt: number;\n hExt: number;\n xExt: number;\n yExt: number;\n mapMode: number;\n}\n\nexport class Renderer {\n private _img: EMF;\n\n constructor(blob: ArrayBuffer) {\n this.parse(blob);\n Helper.log(\"EMFJS.Renderer instantiated\");\n }\n\n public render(info: IRendererSettings) {\n const img = ($(\"
\") as any).svg({\n onLoad: (svg: any) => {\n return this._render(svg, info.mapMode, info.wExt, info.hExt, info.xExt, info.yExt);\n },\n settings: {\n viewBox: [0, 0, info.xExt, info.yExt].join(\" \"),\n preserveAspectRatio: \"none\", // TODO: MM_ISOTROPIC vs MM_ANISOTROPIC\n },\n });\n const svgContainer = ($(img[0]) as any).svg(\"get\");\n return $(svgContainer.root()).attr(\"width\", info.width).attr(\"height\", info.height);\n }\n\n private parse(blob: ArrayBuffer) {\n this._img = null;\n\n const reader = new Blob(blob);\n\n const type = reader.readUint32();\n if (type !== 0x00000001) {\n throw new EMFJSError(\"Not an EMF file\");\n }\n const size = reader.readUint32();\n if (size % 4 !== 0) {\n throw new EMFJSError(\"Not an EMF file\");\n }\n\n this._img = new EMF(reader, size);\n\n if (this._img == null) {\n throw new EMFJSError(\"Format not recognized\");\n }\n }\n\n private _render(svg: any, mapMode: number, w: number, h: number, xExt: number, yExt: number) {\n const gdi = new GDIContext(svg);\n gdi.setWindowExtEx(w, h);\n gdi.setViewportExtEx(xExt, yExt);\n gdi.setMapMode(mapMode);\n Helper.log(\"[EMF] BEGIN RENDERING --->\");\n this._img.render(gdi);\n Helper.log(\"[EMF] <--- DONE RENDERING\");\n }\n}\n\nexport class EMF {\n private _hdrsize: number;\n private _records: EMFRecords;\n\n constructor(reader: Blob, hdrsize: number) {\n this._hdrsize = hdrsize;\n this._records = new EMFRecords(reader, this._hdrsize);\n }\n\n public render(gdi: GDIContext) {\n this._records.play(gdi);\n }\n}\n","module.exports = __WEBPACK_EXTERNAL_MODULE__4__;","/*\n\nThe MIT License (MIT)\n\nCopyright (c) 2016 Tom Zoehner\nCopyright (c) 2018 Thomas Bluemel\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n\n*/\n\nimport { EMFJSError } from \"./Helper\";\n\nexport class Blob {\n public pos: number;\n private blob: Blob | ArrayBuffer;\n private data: Uint8Array;\n\n constructor(blob: Blob | ArrayBuffer, offset?: number) {\n if (blob instanceof Blob) {\n this.blob = blob.blob;\n this.data = blob.data;\n this.pos = offset || blob.pos;\n } else {\n this.blob = blob;\n this.data = new Uint8Array(blob);\n this.pos = offset || 0;\n }\n }\n\n public eof() {\n return this.pos >= this.data.length;\n }\n\n public seek(newpos: number) {\n if (newpos < 0 || newpos > this.data.length) {\n throw new EMFJSError(\"Invalid seek position\");\n }\n this.pos = newpos;\n }\n\n public skip(cnt: number) {\n const newPos = this.pos + cnt;\n if (newPos > this.data.length) {\n throw new EMFJSError(\"Unexpected end of file\");\n }\n this.pos = newPos;\n }\n\n public readBinary(cnt: number) {\n const end = this.pos + cnt;\n if (end > this.data.length) {\n throw new EMFJSError(\"Unexpected end of file\");\n }\n let ret = \"\";\n while (cnt-- > 0) {\n ret += String.fromCharCode(this.data[this.pos++]);\n }\n return ret;\n }\n\n public readInt8() {\n if (this.pos + 1 > this.data.length) {\n throw new EMFJSError(\"Unexpected end of file\");\n }\n return this.data[this.pos++];\n }\n\n public readUint8() {\n return this.readInt8() >>> 0;\n }\n\n public readInt32() {\n if (this.pos + 4 > this.data.length) {\n throw new EMFJSError(\"Unexpected end of file\");\n }\n let val = this.data[this.pos++];\n val |= this.data[this.pos++] << 8;\n val |= this.data[this.pos++] << 16;\n val |= this.data[this.pos++] << 24;\n return val;\n }\n\n public readUint32() {\n return this.readInt32() >>> 0;\n }\n\n public readUint16() {\n if (this.pos + 2 > this.data.length) {\n throw new EMFJSError(\"Unexpected end of file\");\n }\n let val = this.data[this.pos++];\n val |= this.data[this.pos++] << 8;\n return val;\n }\n\n public readInt16() {\n let val = this.readUint16();\n if (val > 32767) {\n val -= 65536;\n }\n return val;\n }\n\n public readString(length: number) {\n if (this.pos + length > this.data.length) {\n throw new EMFJSError(\"Unexpected end of file\");\n }\n let ret = \"\";\n for (let i = 0; i < length; i++) {\n ret += String.fromCharCode(this.data[this.pos++] >>> 0);\n }\n return ret;\n }\n\n public readNullTermString(maxSize: number) {\n let ret = \"\";\n if (maxSize > 0) {\n maxSize--;\n for (let i = 0; i < maxSize; i++) {\n if (this.pos + i + 1 > this.data.length) {\n throw new EMFJSError(\"Unexpected end of file\");\n }\n const byte = this.data[this.pos + i] >>> 0;\n if (byte === 0) {\n break;\n }\n ret += String.fromCharCode(byte);\n }\n }\n return ret;\n }\n\n public readFixedSizeUnicodeString(fixedSizeChars: number) {\n let ret = \"\";\n for (let i = 0; i < fixedSizeChars; i++) {\n const charCode = this.readUint16();\n if (charCode === 0) {\n if (++i < fixedSizeChars) {\n this.skip((fixedSizeChars - i) * 2);\n }\n break;\n }\n ret += String.fromCharCode(charCode);\n }\n return ret;\n }\n}\n","/*\n\nThe MIT License (MIT)\n\nCopyright (c) 2016 Tom Zoehner\nCopyright (c) 2018 Thomas Bluemel\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n\n*/\n\n// tslint:disable-next-line:interface-name\nexport interface EMFJSError {\n name: string;\n message: string;\n stack: string;\n}\n\n// tslint:disable-next-line:variable-name\nexport const EMFJSError = function(this: EMFJSError, message: string) {\n this.name = \"EMFJSError\";\n this.message = message;\n this.stack = (new Error()).stack;\n} as any as { new (message: string): EMFJSError; };\nEMFJSError.prototype = new Error();\n\nlet isLoggingEnabled = true;\nexport function loggingEnabled(enabled: boolean) {\n isLoggingEnabled = enabled;\n}\n\nexport class Helper {\n public static GDI = {\n FormatSignature: {\n ENHMETA_SIGNATURE: 0x464D4520,\n EPS_SIGNATURE: 0x46535045,\n },\n BITMAPINFOHEADER_SIZE: 40,\n BITMAPCOREHEADER_SIZE: 12,\n RecordType: {\n EMR_POLYBEZIER: 0x00000002,\n EMR_POLYGON: 0x00000003,\n EMR_POLYLINE: 0x00000004,\n EMR_POLYBEZIERTO: 0x00000005,\n EMR_POLYLINETO: 0x00000006,\n EMR_POLYPOLYLINE: 0x00000007,\n EMR_POLYPOLYGON: 0x00000008,\n EMR_SETWINDOWEXTEX: 0x00000009,\n EMR_SETWINDOWORGEX: 0x0000000A,\n EMR_SETVIEWPORTEXTEX: 0x0000000B,\n EMR_SETVIEWPORTORGEX: 0x0000000C,\n EMR_SETBRUSHORGEX: 0x0000000D,\n EMR_EOF: 0x0000000E,\n EMR_SETPIXELV: 0x0000000F,\n EMR_SETMAPPERFLAGS: 0x00000010,\n EMR_SETMAPMODE: 0x00000011,\n EMR_SETBKMODE: 0x00000012,\n EMR_SETPOLYFILLMODE: 0x00000013,\n EMR_SETROP2: 0x00000014,\n EMR_SETSTRETCHBLTMODE: 0x00000015,\n EMR_SETTEXTALIGN: 0x00000016,\n EMR_SETCOLORADJUSTMENT: 0x00000017,\n EMR_SETTEXTCOLOR: 0x00000018,\n EMR_SETBKCOLOR: 0x00000019,\n EMR_OFFSETCLIPRGN: 0x0000001A,\n EMR_MOVETOEX: 0x0000001B,\n EMR_SETMETARGN: 0x0000001C,\n EMR_EXCLUDECLIPRECT: 0x0000001D,\n EMR_INTERSECTCLIPRECT: 0x0000001E,\n EMR_SCALEVIEWPORTEXTEX: 0x0000001F,\n EMR_SCALEWINDOWEXTEX: 0x00000020,\n EMR_SAVEDC: 0x00000021,\n EMR_RESTOREDC: 0x00000022,\n EMR_SETWORLDTRANSFORM: 0x00000023,\n EMR_MODIFYWORLDTRANSFORM: 0x00000024,\n EMR_SELECTOBJECT: 0x00000025,\n EMR_CREATEPEN: 0x00000026,\n EMR_CREATEBRUSHINDIRECT: 0x00000027,\n EMR_DELETEOBJECT: 0x00000028,\n EMR_ANGLEARC: 0x00000029,\n EMR_ELLIPSE: 0x0000002A,\n EMR_RECTANGLE: 0x0000002B,\n EMR_ROUNDRECT: 0x0000002C,\n EMR_ARC: 0x0000002D,\n EMR_CHORD: 0x0000002E,\n EMR_PIE: 0x0000002F,\n EMR_SELECTPALETTE: 0x00000030,\n EMR_CREATEPALETTE: 0x00000031,\n EMR_SETPALETTEENTRIES: 0x00000032,\n EMR_RESIZEPALETTE: 0x00000033,\n EMR_REALIZEPALETTE: 0x00000034,\n EMR_EXTFLOODFILL: 0x00000035,\n EMR_LINETO: 0x00000036,\n EMR_ARCTO: 0x00000037,\n EMR_POLYDRAW: 0x00000038,\n EMR_SETARCDIRECTION: 0x00000039,\n EMR_SETMITERLIMIT: 0x0000003A,\n EMR_BEGINPATH: 0x0000003B,\n EMR_ENDPATH: 0x0000003C,\n EMR_CLOSEFIGURE: 0x0000003D,\n EMR_FILLPATH: 0x0000003E,\n EMR_STROKEANDFILLPATH: 0x0000003F,\n EMR_STROKEPATH: 0x00000040,\n EMR_FLATTENPATH: 0x00000041,\n EMR_WIDENPATH: 0x00000042,\n EMR_SELECTCLIPPATH: 0x00000043,\n EMR_ABORTPATH: 0x00000044,\n EMR_COMMENT: 0x00000046,\n EMR_FILLRGN: 0x00000047,\n EMR_FRAMERGN: 0x00000048,\n EMR_INVERTRGN: 0x00000049,\n EMR_PAINTRGN: 0x0000004A,\n EMR_EXTSELECTCLIPRGN: 0x0000004B,\n EMR_BITBLT: 0x0000004C,\n EMR_STRETCHBLT: 0x0000004D,\n EMR_MASKBLT: 0x0000004E,\n EMR_PLGBLT: 0x0000004F,\n EMR_SETDIBITSTODEVICE: 0x00000050,\n EMR_STRETCHDIBITS: 0x00000051,\n EMR_EXTCREATEFONTINDIRECTW: 0x00000052,\n EMR_EXTTEXTOUTA: 0x00000053,\n EMR_EXTTEXTOUTW: 0x00000054,\n EMR_POLYBEZIER16: 0x00000055,\n EMR_POLYGON16: 0x00000056,\n EMR_POLYLINE16: 0x00000057,\n EMR_POLYBEZIERTO16: 0x00000058,\n EMR_POLYLINETO16: 0x00000059,\n EMR_POLYPOLYLINE16: 0x0000005A,\n EMR_POLYPOLYGON16: 0x0000005B,\n EMR_POLYDRAW16: 0x0000005C,\n EMR_CREATEMONOBRUSH: 0x0000005D,\n EMR_CREATEDIBPATTERNBRUSHPT: 0x0000005E,\n EMR_EXTCREATEPEN: 0x0000005F,\n EMR_POLYTEXTOUTA: 0x00000060,\n EMR_POLYTEXTOUTW: 0x00000061,\n EMR_SETICMMODE: 0x00000062,\n EMR_CREATECOLORSPACE: 0x00000063,\n EMR_SETCOLORSPACE: 0x00000064,\n EMR_DELETECOLORSPACE: 0x00000065,\n EMR_GLSRECORD: 0x00000066,\n EMR_GLSBOUNDEDRECORD: 0x00000067,\n EMR_PIXELFORMAT: 0x00000068,\n EMR_DRAWESCAPE: 0x00000069,\n EMR_EXTESCAPE: 0x0000006A,\n EMR_SMALLTEXTOUT: 0x0000006C,\n EMR_FORCEUFIMAPPING: 0x0000006D,\n EMR_NAMEDESCAPE: 0x0000006E,\n EMR_COLORCORRECTPALETTE: 0x0000006F,\n EMR_SETICMPROFILEA: 0x00000070,\n EMR_SETICMPROFILEW: 0x00000071,\n EMR_ALPHABLEND: 0x00000072,\n EMR_SETLAYOUT: 0x00000073,\n EMR_TRANSPARENTBLT: 0x00000074,\n EMR_GRADIENTFILL: 0x00000076,\n EMR_SETLINKEDUFIS: 0x00000077,\n EMR_SETTEXTJUSTIFICATION: 0x00000078,\n EMR_COLORMATCHTOTARGETW: 0x00000079,\n EMR_CREATECOLORSPACEW: 0x0000007A,\n },\n MetafileEscapes: {\n NEWFRAME: 0x0001,\n ABORTDOC: 0x0002,\n NEXTBAND: 0x0003,\n SETCOLORTABLE: 0x0004,\n GETCOLORTABLE: 0x0005,\n FLUSHOUT: 0x0006,\n DRAFTMODE: 0x0007,\n QUERYESCSUPPORT: 0x0008,\n SETABORTPROC: 0x0009,\n STARTDOC: 0x000a,\n ENDDOC: 0x000b,\n GETPHYSPAGESIZE: 0x000c,\n GETPRINTINGOFFSET: 0x000d,\n GETSCALINGFACTOR: 0x000e,\n META_ESCAPE_ENHANCED_METAFILE: 0x000f,\n SETPENWIDTH: 0x0010,\n SETCOPYCOUNT: 0x0011,\n SETPAPERSOURCE: 0x0012,\n PASSTHROUGH: 0x0013,\n GETTECHNOLOGY: 0x0014,\n SETLINECAP: 0x0015,\n SETLINEJOIN: 0x0016,\n SETMITERLIMIT: 0x0017,\n BANDINFO: 0x0018,\n DRAWPATTERNRECT: 0x0019,\n GETVECTORPENSIZE: 0x001a,\n GETVECTORBRUSHSIZE: 0x001b,\n ENABLEDUPLEX: 0x001c,\n GETSETPAPERBINS: 0x001d,\n GETSETPRINTORIENT: 0x001e,\n ENUMPAPERBINS: 0x001f,\n SETDIBSCALING: 0x0020,\n EPSPRINTING: 0x0021,\n ENUMPAPERMETRICS: 0x0022,\n GETSETPAPERMETRICS: 0x0023,\n POSTSCRIPT_DATA: 0x0025,\n POSTSCRIPT_IGNORE: 0x0026,\n GETDEVICEUNITS: 0x002a,\n GETEXTENDEDTEXTMETRICS: 0x0100,\n GETPAIRKERNTABLE: 0x0102,\n EXTTEXTOUT: 0x0200,\n GETFACENAME: 0x0201,\n DOWNLOADFACE: 0x0202,\n METAFILE_DRIVER: 0x0801,\n QUERYDIBSUPPORT: 0x0c01,\n BEGIN_PATH: 0x1000,\n CLIP_TO_PATH: 0x1001,\n END_PATH: 0x1002,\n OPEN_CHANNEL: 0x100e,\n DOWNLOADHEADER: 0x100f,\n CLOSE_CHANNEL: 0x1010,\n POSTSCRIPT_PASSTHROUGH: 0x1013,\n ENCAPSULATED_POSTSCRIPT: 0x1014,\n POSTSCRIPT_IDENTIFY: 0x1015,\n POSTSCRIPT_INJECTION: 0x1016,\n CHECKJPEGFORMAT: 0x1017,\n CHECKPNGFORMAT: 0x1018,\n GET_PS_FEATURESETTING: 0x1019,\n MXDC_ESCAPE: 0x101a,\n SPCLPASSTHROUGH2: 0x11d8,\n },\n MapMode: {\n MM_TEXT: 1,\n MM_LOMETRIC: 2,\n MM_HIMETRIC: 3,\n MM_LOENGLISH: 4,\n MM_HIENGLISH: 5,\n MM_TWIPS: 6,\n MM_ISOTROPIC: 7,\n MM_ANISOTROPIC: 8,\n },\n StretchMode: {\n BLACKONWHITE: 1,\n WHITEONBLACK: 2,\n COLORONCOLOR: 3,\n HALFTONE: 4,\n },\n MixMode: {\n TRANSPARENT: 1,\n OPAQUE: 2,\n },\n BrushStyle: {\n BS_SOLID: 0,\n BS_NULL: 1,\n BS_HATCHED: 2,\n BS_PATTERN: 3,\n BS_INDEXED: 4,\n BS_DIBPATTERN: 5,\n BS_DIBPATTERNPT: 6,\n BS_PATTERN8X8: 7,\n BS_DIBPATTERN8X8: 8,\n BS_MONOPATTERN: 9,\n },\n PenStyle: {\n PS_COSMETIC: 0x00000000,\n PS_ENDCAP_ROUND: 0x00000000,\n PS_JOIN_ROUND: 0x00000000,\n PS_SOLID: 0x00000000,\n PS_DASH: 0x00000001,\n PS_DOT: 0x00000002,\n PS_DASHDOT: 0x00000003,\n PS_DASHDOTDOT: 0x00000004,\n PS_NULL: 0x00000005,\n PS_INSIDEFRAME: 0x00000006,\n PS_USERSTYLE: 0x00000007,\n PS_ALTERNATE: 0x00000008,\n PS_ENDCAP_SQUARE: 0x00000100,\n PS_ENDCAP_FLAT: 0x00000200,\n PS_JOIN_BEVEL: 0x00001000,\n PS_JOIN_MITER: 0x00002000,\n PS_GEOMETRIC: 0x00010000,\n },\n PolygonFillMode: {\n ALTERNATE: 1,\n WINDING: 2,\n },\n BitmapCompression: {\n BI_RGB: 0,\n BI_RLE8: 1,\n BI_RLE4: 2,\n BI_BITFIELDS: 3,\n BI_JPEG: 4,\n BI_PNG: 5,\n },\n RegionMode: {\n RGN_AND: 1,\n RGN_OR: 2,\n RGN_XOR: 3,\n RGN_DIFF: 4,\n RGN_COPY: 5,\n },\n StockObject: {\n WHITE_BRUSH: 0x80000000,\n LTGRAY_BRUSH: 0x80000001,\n GRAY_BRUSH: 0x80000002,\n DKGRAY_BRUSH: 0x80000003,\n BLACK_BRUSH: 0x80000004,\n NULL_BRUSH: 0x80000005,\n WHITE_PEN: 0x80000006,\n BLACK_PEN: 0x80000007,\n NULL_PEN: 0x80000008,\n OEM_FIXED_FONT: 0x8000000A,\n ANSI_FIXED_FONT: 0x8000000B,\n ANSI_VAR_FONT: 0x8000000C,\n SYSTEM_FONT: 0x8000000D,\n DEVICE_DEFAULT_FONT: 0x8000000E,\n DEFAULT_PALETTE: 0x8000000F,\n SYSTEM_FIXED_FONT: 0x80000010,\n DEFAULT_GUI_FONT: 0x80000011,\n DC_BRUSH: 0x80000012,\n DC_PEN: 0x80000013,\n },\n };\n\n public static _uniqueId = 0;\n\n public static log(message: string) {\n if (isLoggingEnabled) {\n // tslint:disable-next-line:no-console\n console.log(message);\n }\n }\n\n public static _makeUniqueId(prefix: string) {\n return \"EMFJS_\" + prefix + (this._uniqueId++);\n }\n\n public static _writeUint32Val(uint8arr: Uint8Array, pos: number, val: number) {\n uint8arr[pos++] = val & 0xff;\n uint8arr[pos++] = (val >>> 8) & 0xff;\n uint8arr[pos++] = (val >>> 16) & 0xff;\n uint8arr[pos++] = (val >>> 24) & 0xff;\n }\n\n public static _blobToBinary(blob: Uint8Array) {\n let ret = \"\";\n const len = blob.length;\n for (let i = 0; i < len; i++) {\n ret += String.fromCharCode(blob[i]);\n }\n return ret;\n }\n}\n","/*\n\nThe MIT License (MIT)\n\nCopyright (c) 2016 Tom Zoehner\nCopyright (c) 2018 Thomas Bluemel\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n\n*/\n\nimport { Blob } from \"./Blob\";\nimport { GDIContext } from \"./GDIContext\";\nimport { EMFJSError, Helper } from \"./Helper\";\nimport { PointL, PointS, RectL, SizeL } from \"./Primitives\";\nimport { Region } from \"./Region\";\nimport { Brush, ColorRef, Pen } from \"./Style\";\n\nexport class EmfHeader {\n private size: number;\n private bounds: RectL;\n private frame: RectL;\n private nPalEntries: number;\n private refDevCx: number;\n private refDevCy: number;\n private refDevCxMm: number;\n private refDevCyMm: number;\n private description: string;\n private displayDevCxUm: number;\n private displayDevCyUm: number;\n\n constructor(reader: Blob, headerSize: number) {\n const recordStart = reader.pos - 8;\n\n this.size = headerSize;\n this.bounds = new RectL(reader);\n this.frame = new RectL(reader);\n if (reader.readUint32() !== Helper.GDI.FormatSignature.ENHMETA_SIGNATURE) {\n throw new EMFJSError(\"Invalid header signature\");\n }\n reader.skip(4); // version\n reader.skip(4); // bytes (size of metafile)\n reader.skip(4); // number of records\n reader.skip(2); // number of handles\n reader.skip(2); // reserved\n const descriptionLen = reader.readUint32();\n const descriptionOff = reader.readUint32();\n this.nPalEntries = reader.readUint32();\n this.refDevCx = reader.readUint32();\n this.refDevCy = reader.readUint32();\n this.refDevCxMm = reader.readUint32();\n this.refDevCyMm = reader.readUint32();\n\n let hdrSize = headerSize;\n if (descriptionLen > 0) {\n if (descriptionOff < 88) {\n throw new EMFJSError(\"Invalid header description offset\");\n }\n\n hdrSize = descriptionOff + (descriptionLen * 2);\n if (hdrSize > headerSize) {\n throw new EMFJSError(\"Invalid header description length\");\n }\n\n const prevPos = reader.pos;\n reader.seek(recordStart + descriptionOff);\n this.description = reader.readFixedSizeUnicodeString(descriptionLen);\n reader.seek(prevPos);\n } else {\n this.description = \"\";\n }\n\n if (hdrSize >= 100) {\n // We have a EmfMetafileHeaderExtension1 record\n const pixelFormatSize = reader.readUint32();\n const pixelFormatOff = reader.readUint32();\n const haveOpenGl = reader.readUint32();\n if (haveOpenGl !== 0) {\n throw new EMFJSError(\"OpenGL records are not yet supported\");\n }\n\n if (pixelFormatOff !== 0) {\n if (pixelFormatOff < 100 || pixelFormatOff < hdrSize) {\n throw new EMFJSError(\"Invalid pixel format offset\");\n }\n\n hdrSize = pixelFormatOff + pixelFormatSize;\n if (hdrSize > headerSize) {\n throw new EMFJSError(\"Invalid pixel format size\");\n }\n\n // TODO: read pixel format blob\n }\n\n if (hdrSize >= 108) {\n // We have a EmfMetafileHeaderExtension2 record\n this.displayDevCxUm = reader.readUint32(); // in micrometers\n this.displayDevCyUm = reader.readUint32(); // in micrometers\n }\n }\n }\n\n public toString() {\n return \"{bounds: \" + this.bounds.toString() + \", frame: \" + this.frame.toString()\n + \", description: \" + this.description + \"}\";\n }\n}\n\nexport class EMFRecords {\n private _records: Array<(gdi: GDIContext) => void>;\n private _header: EmfHeader;\n\n constructor(reader: Blob, first: number) {\n this._records = [];\n\n this._header = new EmfHeader(reader, first);\n\n let all = false;\n let curpos = first;\n main_loop: while (!all) {\n reader.seek(curpos);\n const type = reader.readUint32();\n const size = reader.readUint32();\n if (size < 8) {\n throw new EMFJSError(\"Invalid record size\");\n }\n switch (type) {\n case Helper.GDI.RecordType.EMR_EOF:\n all = true;\n break main_loop;\n case Helper.GDI.RecordType.EMR_SETMAPMODE: {\n const mapMode = reader.readInt32();\n this._records.push((gdi) => {\n gdi.setMapMode(mapMode);\n });\n break;\n }\n case Helper.GDI.RecordType.EMR_SETWINDOWORGEX: {\n const x = reader.readInt32();\n const y = reader.readInt32();\n this._records.push((gdi) => {\n gdi.setWindowOrgEx(x, y);\n });\n break;\n }\n case Helper.GDI.RecordType.EMR_SETWINDOWEXTEX: {\n const x = reader.readUint32();\n const y = reader.readUint32();\n this._records.push((gdi) => {\n gdi.setWindowExtEx(x, y);\n });\n break;\n }\n case Helper.GDI.RecordType.EMR_SETVIEWPORTORGEX: {\n const x = reader.readInt32();\n const y = reader.readInt32();\n this._records.push((gdi) => {\n gdi.setViewportOrgEx(x, y);\n });\n break;\n }\n case Helper.GDI.RecordType.EMR_SETVIEWPORTEXTEX: {\n const x = reader.readUint32();\n const y = reader.readUint32();\n this._records.push((gdi) => {\n gdi.setViewportExtEx(x, y);\n });\n break;\n }\n case Helper.GDI.RecordType.EMR_SAVEDC: {\n this._records.push((gdi) => {\n gdi.saveDC();\n });\n break;\n }\n case Helper.GDI.RecordType.EMR_RESTOREDC: {\n const saved = reader.readInt32();\n this._records.push((gdi) => {\n gdi.restoreDC(saved);\n });\n break;\n }\n case Helper.GDI.RecordType.EMR_SETBKMODE: {\n const bkMode = reader.readUint32();\n this._records.push((gdi) => {\n gdi.setBkMode(bkMode);\n });\n break;\n }\n case Helper.GDI.RecordType.EMR_SETBKCOLOR: {\n const bkColor = new ColorRef(reader);\n this._records.push((gdi) => {\n gdi.setBkColor(bkColor);\n });\n break;\n }\n case Helper.GDI.RecordType.EMR_CREATEBRUSHINDIRECT: {\n const index = reader.readUint32();\n const brush = new Brush(reader);\n this._records.push((gdi) => {\n gdi.createBrush(index, brush);\n });\n break;\n }\n case Helper.GDI.RecordType.EMR_CREATEPEN: {\n const index = reader.readUint32();\n const pen = new Pen(reader, null);\n this._records.push((gdi) => {\n gdi.createPen(index, pen);\n });\n break;\n }\n case Helper.GDI.RecordType.EMR_EXTCREATEPEN: {\n const index = reader.readUint32();\n const offBmi = reader.readUint32();\n const cbBmi = reader.readUint32();\n const offBits = reader.readUint32();\n const cbBits = reader.readUint32();\n const pen = new Pen(reader, {\n header: {\n off: offBmi,\n size: cbBmi,\n },\n data: {\n off: offBits,\n size: cbBits,\n },\n });\n this._records.push((gdi) => {\n gdi.createPen(index, pen);\n });\n break;\n }\n case Helper.GDI.RecordType.EMR_SELECTOBJECT: {\n const idx = reader.readUint32();\n this._records.push((gdi) => {\n gdi.selectObject(idx, null);\n });\n break;\n }\n case Helper.GDI.RecordType.EMR_DELETEOBJECT: {\n const idx = reader.readUint32();\n this._records.push((gdi) => {\n gdi.deleteObject(idx);\n });\n break;\n }\n case Helper.GDI.RecordType.EMR_RECTANGLE: {\n const rect = new RectL(reader);\n this._records.push((gdi) => {\n gdi.rectangle(rect, 0, 0);\n });\n break;\n }\n case Helper.GDI.RecordType.EMR_ROUNDRECT: {\n const rect = new RectL(reader);\n const corner = new SizeL(reader);\n this._records.push((gdi) => {\n gdi.rectangle(rect, corner.cx, corner.cy);\n });\n break;\n }\n case Helper.GDI.RecordType.EMR_LINETO: {\n const x = reader.readInt32();\n const y = reader.readInt32();\n this._records.push((gdi) => {\n gdi.lineTo(x, y);\n });\n break;\n }\n case Helper.GDI.RecordType.EMR_MOVETOEX: {\n const x = reader.readInt32();\n const y = reader.readInt32();\n this._records.push((gdi) => {\n gdi.moveToEx(x, y);\n });\n break;\n }\n case Helper.GDI.RecordType.EMR_POLYGON:\n case Helper.GDI.RecordType.EMR_POLYGON16: {\n const isSmall = (type === Helper.GDI.RecordType.EMR_POLYGON16);\n const bounds = new RectL(reader);\n let cnt = reader.readUint32();\n const points: PointS[] | PointL[] = [];\n while (cnt > 0) {\n points.push(isSmall ? new PointS(reader) : new PointL(reader));\n cnt--;\n }\n this._records.push((gdi) => {\n gdi.polygon(points, bounds, true);\n });\n break;\n }\n case Helper.GDI.RecordType.EMR_POLYPOLYGON:\n case Helper.GDI.RecordType.EMR_POLYPOLYGON16: {\n const isSmall = (type === Helper.GDI.RecordType.EMR_POLYPOLYGON16);\n const bounds = new RectL(reader);\n const polyCnt = reader.readUint32();\n reader.skip(4); // count\n const polygonsPtCnts = [];\n for (let i = 0; i < polyCnt; i++) {\n polygonsPtCnts.push(reader.readUint32());\n }\n\n const polygons: PointS[][] | PointL[][] = [];\n for (let i = 0; i < polyCnt; i++) {\n const ptCnt = polygonsPtCnts[i];\n\n const p = [];\n for (let ip = 0; ip < ptCnt; ip++) {\n p.push(isSmall ? new PointS(reader) : new PointL(reader));\n }\n polygons.push(p);\n }\n this._records.push((gdi) => {\n gdi.polyPolygon(polygons, bounds);\n });\n break;\n }\n case Helper.GDI.RecordType.EMR_SETPOLYFILLMODE: {\n const polyfillmode = reader.readUint32();\n this._records.push((gdi) => {\n gdi.setPolyFillMode(polyfillmode);\n });\n break;\n }\n case Helper.GDI.RecordType.EMR_POLYLINE16:\n case Helper.GDI.RecordType.EMR_POLYLINETO16: {\n const isLineTo = (type === Helper.GDI.RecordType.EMR_POLYLINETO16);\n const bounds = new RectL(reader);\n let cnt = reader.readUint32();\n const points: PointS[] = [];\n while (cnt > 0) {\n points.push(new PointS(reader));\n cnt--;\n }\n this._records.push((gdi) => {\n gdi.polyline(isLineTo, points, bounds);\n });\n break;\n }\n case Helper.GDI.RecordType.EMR_POLYBEZIER:\n case Helper.GDI.RecordType.EMR_POLYBEZIERTO: {\n const isPolyBezierTo = (type === Helper.GDI.RecordType.EMR_POLYBEZIERTO);\n const bounds = new RectL(reader);\n let cnt = reader.readUint32();\n const points: PointL[] = [];\n while (cnt > 0) {\n points.push(new PointL(reader));\n cnt--;\n }\n this._records.push((gdi) => {\n gdi.polybezier(isPolyBezierTo, points, bounds);\n });\n break;\n }\n case Helper.GDI.RecordType.EMR_POLYBEZIER16: {\n const bounds = new RectL(reader);\n const start = new PointL(reader);\n let cnt = reader.readUint32();\n const points = [start];\n while (cnt > 0) {\n points.push(new PointS(reader));\n cnt--;\n }\n this._records.push((gdi) => {\n gdi.polybezier(false, points, bounds);\n });\n break;\n }\n case Helper.GDI.RecordType.EMR_POLYBEZIERTO16: {\n const bounds = new RectL(reader);\n let cnt = reader.readUint32();\n const points: PointS[] = [];\n while (cnt > 0) {\n points.push(new PointS(reader));\n cnt--;\n }\n this._records.push((gdi) => {\n gdi.polybezier(true, points, bounds);\n });\n break;\n }\n case Helper.GDI.RecordType.EMR_SETTEXTALIGN: {\n const textAlign = reader.readUint32();\n this._records.push((gdi) => {\n gdi.setTextAlign(textAlign);\n });\n break;\n }\n case Helper.GDI.RecordType.EMR_SETSTRETCHBLTMODE: {\n const stretchMode = reader.readUint32();\n this._records.push((gdi) => {\n gdi.setStretchBltMode(stretchMode);\n });\n break;\n }\n case Helper.GDI.RecordType.EMR_SETBRUSHORGEX: {\n const origin = new PointL(reader);\n this._records.push((gdi) => {\n gdi.setBrushOrgEx(origin);\n });\n break;\n }\n case Helper.GDI.RecordType.EMR_BEGINPATH: {\n this._records.push((gdi) => {\n gdi.beginPath();\n });\n break;\n }\n case Helper.GDI.RecordType.EMR_ENDPATH: {\n this._records.push((gdi) => {\n gdi.endPath();\n });\n break;\n }\n case Helper.GDI.RecordType.EMR_ABORTPATH: {\n this._records.push((gdi) => {\n gdi.abortPath();\n });\n break;\n }\n case Helper.GDI.RecordType.EMR_CLOSEFIGURE: {\n this._records.push((gdi) => {\n gdi.closeFigure();\n });\n break;\n }\n case Helper.GDI.RecordType.EMR_FILLPATH: {\n const bounds = new RectL(reader);\n this._records.push((gdi) => {\n gdi.fillPath(bounds);\n });\n break;\n }\n case Helper.GDI.RecordType.EMR_STROKEPATH: {\n const bounds = new RectL(reader);\n this._records.push((gdi) => {\n gdi.strokePath(bounds);\n });\n break;\n }\n case Helper.GDI.RecordType.EMR_SELECTCLIPPATH: {\n const rgnMode = reader.readUint32();\n this._records.push((gdi) => {\n gdi.selectClipPath(rgnMode);\n });\n break;\n }\n case Helper.GDI.RecordType.EMR_EXTSELECTCLIPRGN: {\n reader.skip(4);\n const rgnMode = reader.readUint32();\n const region = rgnMode !== Helper.GDI.RegionMode.RGN_COPY ? new Region(reader) : null;\n this._records.push((gdi) => {\n gdi.selectClipRgn(rgnMode, region);\n });\n break;\n }\n case Helper.GDI.RecordType.EMR_OFFSETCLIPRGN: {\n const offset = new PointL(reader);\n this._records.push((gdi) => {\n gdi.offsetClipRgn(offset);\n });\n break;\n }\n case Helper.GDI.RecordType.EMR_SETMITERLIMIT: {\n const miterLimit = reader.readUint32();\n this._records.push((gdi) => {\n gdi.setMiterLimit(miterLimit);\n });\n break;\n }\n case Helper.GDI.RecordType.EMR_POLYLINE:\n case Helper.GDI.RecordType.EMR_POLYLINETO:\n case Helper.GDI.RecordType.EMR_POLYPOLYLINE:\n case Helper.GDI.RecordType.EMR_SETPIXELV:\n case Helper.GDI.RecordType.EMR_SETMAPPERFLAGS:\n case Helper.GDI.RecordType.EMR_SETROP2:\n case Helper.GDI.RecordType.EMR_SETCOLORADJUSTMENT:\n case Helper.GDI.RecordType.EMR_SETTEXTCOLOR:\n case Helper.GDI.RecordType.EMR_SETMETARGN:\n case Helper.GDI.RecordType.EMR_EXCLUDECLIPRECT:\n case Helper.GDI.RecordType.EMR_INTERSECTCLIPRECT:\n case Helper.GDI.RecordType.EMR_SCALEVIEWPORTEXTEX:\n case Helper.GDI.RecordType.EMR_SCALEWINDOWEXTEX:\n case Helper.GDI.RecordType.EMR_SETWORLDTRANSFORM:\n case Helper.GDI.RecordType.EMR_MODIFYWORLDTRANSFORM:\n case Helper.GDI.RecordType.EMR_ANGLEARC:\n case Helper.GDI.RecordType.EMR_ELLIPSE:\n case Helper.GDI.RecordType.EMR_ARC:\n case Helper.GDI.RecordType.EMR_CHORD:\n case Helper.GDI.RecordType.EMR_PIE:\n case Helper.GDI.RecordType.EMR_SELECTPALETTE:\n case Helper.GDI.RecordType.EMR_CREATEPALETTE:\n case Helper.GDI.RecordType.EMR_SETPALETTEENTRIES:\n case Helper.GDI.RecordType.EMR_RESIZEPALETTE:\n case Helper.GDI.RecordType.EMR_REALIZEPALETTE:\n case Helper.GDI.RecordType.EMR_EXTFLOODFILL:\n case Helper.GDI.RecordType.EMR_ARCTO:\n case Helper.GDI.RecordType.EMR_POLYDRAW:\n case Helper.GDI.RecordType.EMR_SETARCDIRECTION:\n case Helper.GDI.RecordType.EMR_STROKEANDFILLPATH:\n case Helper.GDI.RecordType.EMR_FLATTENPATH:\n case Helper.GDI.RecordType.EMR_WIDENPATH:\n case Helper.GDI.RecordType.EMR_COMMENT:\n case Helper.GDI.RecordType.EMR_FILLRGN:\n case Helper.GDI.RecordType.EMR_FRAMERGN:\n case Helper.GDI.RecordType.EMR_INVERTRGN:\n case Helper.GDI.RecordType.EMR_PAINTRGN:\n case Helper.GDI.RecordType.EMR_BITBLT:\n case Helper.GDI.RecordType.EMR_STRETCHBLT:\n case Helper.GDI.RecordType.EMR_MASKBLT:\n case Helper.GDI.RecordType.EMR_PLGBLT:\n case Helper.GDI.RecordType.EMR_SETDIBITSTODEVICE:\n case Helper.GDI.RecordType.EMR_STRETCHDIBITS:\n case Helper.GDI.RecordType.EMR_EXTCREATEFONTINDIRECTW:\n case Helper.GDI.RecordType.EMR_EXTTEXTOUTA:\n case Helper.GDI.RecordType.EMR_EXTTEXTOUTW:\n case Helper.GDI.RecordType.EMR_POLYPOLYLINE16:\n case Helper.GDI.RecordType.EMR_POLYDRAW16:\n case Helper.GDI.RecordType.EMR_CREATEMONOBRUSH:\n case Helper.GDI.RecordType.EMR_CREATEDIBPATTERNBRUSHPT:\n case Helper.GDI.RecordType.EMR_POLYTEXTOUTA:\n case Helper.GDI.RecordType.EMR_POLYTEXTOUTW:\n case Helper.GDI.RecordType.EMR_SETICMMODE:\n case Helper.GDI.RecordType.EMR_CREATECOLORSPACE:\n case Helper.GDI.RecordType.EMR_SETCOLORSPACE:\n case Helper.GDI.RecordType.EMR_DELETECOLORSPACE:\n case Helper.GDI.RecordType.EMR_GLSRECORD:\n case Helper.GDI.RecordType.EMR_GLSBOUNDEDRECORD:\n case Helper.GDI.RecordType.EMR_PIXELFORMAT:\n case Helper.GDI.RecordType.EMR_DRAWESCAPE:\n case Helper.GDI.RecordType.EMR_EXTESCAPE:\n case Helper.GDI.RecordType.EMR_SMALLTEXTOUT:\n case Helper.GDI.RecordType.EMR_FORCEUFIMAPPING:\n case Helper.GDI.RecordType.EMR_NAMEDESCAPE:\n case Helper.GDI.RecordType.EMR_COLORCORRECTPALETTE:\n case Helper.GDI.RecordType.EMR_SETICMPROFILEA:\n case Helper.GDI.RecordType.EMR_SETICMPROFILEW:\n case Helper.GDI.RecordType.EMR_ALPHABLEND:\n case Helper.GDI.RecordType.EMR_SETLAYOUT:\n case Helper.GDI.RecordType.EMR_TRANSPARENTBLT:\n case Helper.GDI.RecordType.EMR_GRADIENTFILL:\n case Helper.GDI.RecordType.EMR_SETLINKEDUFIS:\n case Helper.GDI.RecordType.EMR_SETTEXTJUSTIFICATION:\n case Helper.GDI.RecordType.EMR_COLORMATCHTOTARGETW:\n case Helper.GDI.RecordType.EMR_CREATECOLORSPACEW:\n default: {\n let recordName = \"UNKNOWN\";\n for (const name in Helper.GDI.RecordType) {\n const recordTypes: any = Helper.GDI.RecordType;\n if (recordTypes[name] === type) {\n recordName = name;\n break;\n }\n }\n Helper.log(\"[EMF] \" + recordName + \" record (0x\" + type.toString(16) + \") at offset 0x\"\n + curpos.toString(16) + \" with \" + size + \" bytes\");\n break;\n }\n }\n\n curpos += size;\n }\n\n if (!all) {\n throw new EMFJSError(\"Could not read all records\");\n }\n }\n\n public play(gdi: GDIContext) {\n const len = this._records.length;\n for (let i = 0; i < len; i++) {\n this._records[i](gdi);\n }\n }\n}\n","/*\n\nThe MIT License (MIT)\n\nCopyright (c) 2016 Tom Zoehner\nCopyright (c) 2018 Thomas Bluemel\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n\n*/\n\nimport { Blob } from \"./Blob\";\nimport { EMFJSError } from \"./Helper\";\n\nexport class PointS {\n public x: number;\n public y: number;\n\n constructor(reader: Blob, x?: number, y?: number) {\n if (reader != null) {\n this.x = reader.readInt16();\n this.y = reader.readInt16();\n } else {\n this.x = x;\n this.y = y;\n }\n }\n\n public clone() {\n return new PointS(null, this.x, this.y);\n }\n\n public toString() {\n return \"{x: \" + this.x + \", y: \" + this.y + \"}\";\n }\n}\n\nexport class PointL {\n public x: number;\n public y: number;\n\n constructor(reader: Blob, x?: number, y?: number) {\n if (reader != null) {\n this.x = reader.readInt32();\n this.y = reader.readInt32();\n } else {\n this.x = x;\n this.y = y;\n }\n }\n\n public clone() {\n return new PointL(null, this.x, this.y);\n }\n\n public toString() {\n return \"{x: \" + this.x + \", y: \" + this.y + \"}\";\n }\n}\n\nexport class RectL {\n public left: number;\n public top: number;\n public right: number;\n public bottom: number;\n\n constructor(reader: Blob, left?: number, top?: number, right?: number, bottom?: number) {\n if (reader != null) {\n this.left = reader.readInt32();\n this.top = reader.readInt32();\n this.right = reader.readInt32();\n this.bottom = reader.readInt32();\n } else {\n this.bottom = bottom;\n this.right = right;\n this.top = top;\n this.left = left;\n }\n }\n\n public clone() {\n return new RectL(null, this.left, this.top, this.right, this.bottom);\n }\n\n public toString() {\n return \"{left: \" + this.left + \", top: \" + this.top + \", right: \" + this.right\n + \", bottom: \" + this.bottom + \"}\";\n }\n\n public empty() {\n return this.left >= this.right || this.top >= this.bottom;\n }\n\n public intersect(rectL: RectL) {\n if (this.empty() || rectL.empty()) {\n return null;\n }\n if (this.left >= rectL.right || this.top >= rectL.bottom ||\n this.right <= rectL.left || this.bottom <= rectL.top) {\n return null;\n }\n return new RectL(null, Math.max(this.left, rectL.left), Math.max(this.top, rectL.top),\n Math.min(this.right, rectL.right), Math.min(this.bottom, rectL.bottom));\n }\n}\n\nexport class SizeL {\n public cx: number;\n public cy: number;\n\n constructor(reader: Blob, cx?: number, cy?: number) {\n if (reader != null) {\n this.cx = reader.readUint32();\n this.cy = reader.readUint32();\n } else {\n this.cx = cx;\n this.cy = cy;\n }\n }\n\n public clone() {\n return new SizeL(null, this.cx, this.cy);\n }\n\n public toString() {\n return \"{cx: \" + this.cx + \", cy: \" + this.cy + \"}\";\n }\n}\n\nexport class Obj {\n public type: string;\n\n constructor(type: string) {\n this.type = type;\n }\n\n public clone(): Obj {\n throw new EMFJSError(\"clone not implemented\");\n }\n\n public toString() {\n throw new EMFJSError(\"toString not implemented\");\n }\n}\n","/*\n\nThe MIT License (MIT)\n\nCopyright (c) 2016 Tom Zoehner\nCopyright (c) 2018 Thomas Bluemel\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n\n*/\n\nimport { Blob } from \"./Blob\";\nimport { EMFJSError, Helper } from \"./Helper\";\nimport { Obj, RectL } from \"./Primitives\";\n\nexport class Region extends Obj {\n public bounds: RectL;\n public scans: Scan[];\n public complexity: number;\n\n constructor(reader: Blob, copy?: Region) {\n super(\"region\");\n if (reader != null) {\n const hdrSize = reader.readUint32();\n if (hdrSize !== 32) {\n throw new EMFJSError(\"Invalid region header\");\n }\n reader.skip(4);\n const rectCnt = reader.readUint32();\n const rgnSize = reader.readUint32();\n if (rectCnt * 16 !== rgnSize) {\n throw new EMFJSError(\"Invalid region data\");\n }\n\n this.bounds = new RectL(reader);\n this.scans = [];\n let scanLine;\n for (let i = 0; i < rectCnt; i++) {\n const r = new RectL(reader);\n if (scanLine == null || scanLine.top !== r.top || scanLine.bottom !== r.bottom) {\n scanLine = new Scan(r);\n this.scans.push(scanLine);\n } else {\n scanLine.append(r);\n }\n }\n this._updateComplexity();\n } else if (copy != null) {\n this.bounds = copy.bounds != null ? copy.bounds.clone() : null;\n if (copy.scans != null) {\n this.scans = [];\n for (let i = 0; i < copy.scans.length; i++) {\n this.scans.push(copy.scans[i].clone());\n }\n } else {\n this.scans = null;\n }\n this.complexity = copy.complexity;\n } else {\n this.bounds = null;\n this.scans = null;\n this.complexity = 0;\n }\n }\n\n public clone() {\n return new Region(null, this);\n }\n\n public toString() {\n const _complexity = [\"null\", \"simple\", \"complex\"];\n return \"{complexity: \" + _complexity[this.complexity]\n + \" bounds: \" + (this.bounds != null ? this.bounds.toString() : \"[none]\")\n + \" #scans: \" + (this.scans != null ? this.scans.length : \"[none]\") + \"}\";\n }\n\n public _updateComplexity() {\n if (this.bounds == null) {\n this.complexity = 0;\n this.scans = null;\n } else if (this.bounds.empty()) {\n this.complexity = 0;\n this.scans = null;\n this.bounds = null;\n } else if (this.scans == null) {\n this.complexity = 1;\n } else {\n this.complexity = 2;\n if (this.scans.length === 1) {\n const scan = this.scans[0];\n if (scan.top === this.bounds.top && scan.bottom === this.bounds.bottom && scan.scanlines.length === 1) {\n const scanline = scan.scanlines[0];\n if (scanline.left === this.bounds.left && scanline.right === this.bounds.right) {\n this.scans = null;\n this.complexity = 1;\n }\n }\n }\n }\n }\n\n public subtract(rect: RectL) {\n Helper.log(\"[emf] Region \" + this.toString() + \" subtract \" + rect.toString());\n\n if (this.bounds != null) {\n const isect = this.bounds.intersect(rect);\n if (isect != null) { // Only need to do anything if there is any chance of an overlap\n if (this.scans == null) {\n // We currently have a simple region and there is some kind of an overlap.\n // We need to create scanlines now. Simplest method is to fake one scan line\n // that equals the simple region and re-use the same logic as for complex regions\n this.scans = [];\n this.scans.push(new Scan(new RectL(null, this.bounds.left, this.bounds.top,\n this.bounds.right, this.bounds.bottom)));\n this.complexity = 2;\n }\n\n // We (now) have a complex region. First we skip any scans that are entirely above rect.top\n // The first scan that falls partially below rect.top needs to be split into two scans.\n let si = 0;\n while (si < this.scans.length) {\n const scan = this.scans[si];\n if (scan.bottom >= rect.top) {\n // We need to clone this scan into two so that we can subtract from the second one\n const cloned = scan.clone();\n scan.bottom = rect.top - 1;\n cloned.top = rect.top;\n if (scan.top >= scan.bottom) {\n this.scans[si] = cloned;\n } else {\n Helper.log(\"[emf] Region split top scan \" + si + \" for substraction\");\n this.scans.splice(++si, 0, cloned);\n }\n break;\n }\n si++;\n }\n\n // Now find the first one that falls at least partially below rect.bottom, which needs to be\n // split if it is only partially below rect.bottom\n const first = si;\n while (si < this.scans.length) {\n const scan = this.scans[si];\n if (scan.top > rect.bottom) {\n break;\n }\n if (scan.bottom > rect.bottom) {\n // We need to clone this scan into two so that we can subtract from the first one\n const cloned = scan.clone();\n scan.bottom = rect.bottom;\n cloned.top = rect.bottom + 1;\n if (scan.top >= scan.bottom) {\n this.scans[si] = cloned;\n } else {\n Helper.log(\"[emf] Region split bottom scan \" + si + \" for substraction\");\n this.scans.splice(++si, 0, cloned);\n }\n break;\n }\n si++;\n }\n\n // Now perform a subtraction on each scan in between rect.top and rect.bottom. Because we\n // cloned scans that partially overlapped rect.top and rect.bottom, we don't have to\n // account for this anymore.\n if (first < this.scans.length) {\n let last = si;\n si = first;\n while (si < last) {\n const scan = this.scans[si];\n if (!scan.subtract(rect.left, rect.right)) {\n Helper.log(\"[emf] Region remove now empty scan \" + si + \" due to subtraction\");\n this.scans.splice(si, 1);\n last--;\n continue;\n }\n\n si++;\n }\n }\n\n // Update bounds\n if (this.scans != null) {\n let left;\n let top;\n let right;\n let bottom;\n const len = this.scans.length;\n for (let i = 0; i < len; i++) {\n const scan = this.scans[i];\n if (i === 0) {\n top = scan.top;\n }\n if (i === len - 1) {\n bottom = scan.bottom;\n }\n\n const slen = scan.scanlines.length;\n if (slen > 0) {\n let scanline = scan.scanlines[0];\n if (left == null || scanline.left < left) {\n left = scanline.left;\n }\n scanline = scan.scanlines[slen - 1];\n if (right == null || scanline.right > right) {\n right = scanline.right;\n }\n }\n }\n\n if (left != null && top != null && right != null && bottom != null) {\n this.bounds = new RectL(null, left, top, right, bottom);\n this._updateComplexity();\n } else {\n // This has to be a null region now\n this.bounds = null;\n this.scans = null;\n this.complexity = 0;\n }\n } else {\n this._updateComplexity();\n }\n }\n }\n\n Helper.log(\"[emf] Region subtraction -> \" + this.toString());\n }\n\n public intersect(rect: RectL) {\n Helper.log(\"[emf] Region \" + this.toString() + \" intersect with \" + rect.toString());\n if (this.bounds != null) {\n this.bounds = this.bounds.intersect(rect);\n if (this.bounds != null) {\n if (this.scans != null) {\n let si = 0;\n // Remove any scans that are entirely above the new bounds.top\n while (si < this.scans.length) {\n const scan = this.scans[si];\n if (scan.bottom < this.bounds.top) {\n si++;\n } else {\n break;\n }\n }\n if (si > 0) {\n Helper.log(\"[emf] Region remove \" + si + \" scans from top\");\n this.scans.splice(0, si);\n\n // Adjust the first scan's top to match the new bounds.top\n if (this.scans.length > 0) {\n this.scans[0].top = this.bounds.top;\n }\n }\n\n // Get rid of anything that falls outside the new bounds.left/bounds.right\n si = 0;\n while (si < this.scans.length) {\n const scan = this.scans[si];\n if (scan.top > this.bounds.bottom) {\n // Remove this and all remaining scans that fall entirely below the new bounds.bottom\n Helper.log(\"[emf] Region remove \" + (this.scans.length - si) + \" scans from bottom\");\n this.scans.splice(si, this.scans.length - si);\n break;\n }\n if (!scan.intersect(this.bounds.left, this.bounds.right)) {\n // Remove now empty scan\n Helper.log(\"[emf] Region remove now empty scan \" + si + \" due to intersection\");\n this.scans.splice(si, 1);\n continue;\n }\n si++;\n }\n\n // If there are any scans left, adjust the last one's bottom to the new bounds.bottom\n if (this.scans.length > 0) {\n this.scans[this.scans.length - 1].bottom = this.bounds.bottom;\n }\n\n this._updateComplexity();\n }\n } else {\n this.scans = null;\n this.complexity = 0;\n }\n }\n Helper.log(\"[emf] Region intersection -> \" + this.toString());\n }\n\n public offset(offX: number, offY: number) {\n if (this.bounds != null) {\n this.bounds.left += offX;\n this.bounds.top += offY;\n this.bounds.right += offX;\n this.bounds.bottom += offY;\n }\n\n if (this.scans != null) {\n const slen = this.scans.length;\n for (let si = 0; si < slen; si++) {\n const scan = this.scans[si];\n scan.top += offY;\n scan.bottom += offY;\n\n const len = scan.scanlines.length;\n for (let i = 0; i < len; i++) {\n const scanline = scan.scanlines[i];\n scanline.left += offX;\n scanline.right += offX;\n }\n }\n }\n }\n}\n\nexport function CreateSimpleRegion(left: number, top: number, right: number, bottom: number) {\n const rgn = new Region(null, null);\n rgn.bounds = new RectL(null, left, top, right, bottom);\n rgn._updateComplexity();\n return rgn;\n}\n\nexport class Scan {\n public top: number;\n public bottom: number;\n public scanlines: Array<{left: number, right: number}>;\n\n constructor(r: RectL, copy?: Scan) {\n if (r != null) {\n this.top = r.top;\n this.bottom = r.bottom;\n this.scanlines = [{left: r.left, right: r.right}];\n } else if (copy != null) {\n this.top = copy.top;\n this.bottom = copy.bottom;\n this.scanlines = [];\n for (let i = 0; i < copy.scanlines.length; i++) {\n const scanline = copy.scanlines[i];\n this.scanlines.push({left: scanline.left, right: scanline.right});\n }\n }\n }\n\n public clone() {\n return new Scan(null, this);\n }\n\n public append(r: RectL) {\n this.scanlines.push({left: r.left, right: r.right});\n }\n\n public subtract(left: number, right: number) {\n let i;\n\n // Keep everything on the left side\n i = 0;\n while (i < this.scanlines.length) {\n const scanline = this.scanlines[i];\n if (scanline.left <= left) {\n if (scanline.right >= left) {\n scanline.right = left - 1;\n if (scanline.left >= scanline.right) {\n this.scanlines.splice(i, 1);\n continue;\n }\n }\n i++;\n } else {\n break;\n }\n }\n\n // Find the first one that may exceed to the right side\n const first = i;\n let cnt = 0;\n while (i < this.scanlines.length) {\n const scanline = this.scanlines[i];\n if (scanline.right > right) {\n scanline.left = right;\n cnt = i - first;\n if (scanline.left >= scanline.right) {\n cnt++;\n }\n break;\n }\n i++;\n }\n\n // Delete everything we're subtracting\n if (cnt > 0 && first < this.scanlines.length) {\n this.scanlines.splice(first, cnt);\n }\n\n return this.scanlines.length > 0;\n }\n\n public intersect(left: number, right: number) {\n // Get rid of anything that falls entirely outside to the left\n for (let i = 0; i < this.scanlines.length; i++) {\n const scanline = this.scanlines[i];\n if (scanline.left >= left || scanline.right >= left) {\n if (i > 0) {\n this.scanlines.splice(0, i);\n }\n break;\n }\n }\n\n if (this.scanlines.length > 0) {\n // Adjust the first to match the left, if needed\n let scanline = this.scanlines[0];\n if (scanline.left < left) {\n scanline.left = left;\n }\n\n // Get rid of anything that falls entirely outside to the right\n for (let i = 0; i < this.scanlines.length; i++) {\n scanline = this.scanlines[i];\n if (scanline.left > right) {\n this.scanlines.splice(i, this.scanlines.length - i);\n break;\n }\n }\n\n if (this.scanlines.length > 0) {\n // Adjust the last to match the right, if needed\n scanline = this.scanlines[this.scanlines.length - 1];\n if (scanline.right > right) {\n scanline.right = right;\n }\n }\n }\n return this.scanlines.length > 0;\n }\n}\n","/*\n\nThe MIT License (MIT)\n\nCopyright (c) 2016 Tom Zoehner\nCopyright (c) 2018 Thomas Bluemel\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n\n*/\n\nimport { DIBitmap } from \"./Bitmap\";\nimport { Blob } from \"./Blob\";\nimport { Helper } from \"./Helper\";\nimport { Obj, PointL } from \"./Primitives\";\n\nexport class ColorRef {\n public r: number;\n public g: number;\n public b: number;\n\n constructor(reader: Blob, r?: number, g?: number, b?: number) {\n if (reader != null) {\n this.r = reader.readUint8();\n this.g = reader.readUint8();\n this.b = reader.readUint8();\n reader.skip(1);\n } else {\n this.r = r;\n this.g = g;\n this.b = b;\n }\n }\n\n public clone() {\n return new ColorRef(null, this.r, this.g, this.b);\n }\n\n public toHex() {\n const rgb = (this.r << 16) | (this.g << 8) | this.b;\n return (0x1000000 + rgb).toString(16).slice(1);\n }\n\n public toString() {\n return \"{r: \" + this.r + \", g: \" + this.g + \", b: \" + this.b + \"}\";\n }\n}\n\nexport class Font extends Obj {\n public height: number;\n public width: number;\n public escapement: number;\n public orientation: number;\n public weight: number;\n public italic: number;\n public underline: number;\n public strikeout: number;\n public charset: number;\n public outprecision: number;\n public clipprecision: number;\n public quality: number;\n public pitch: number;\n public family: number;\n public facename: string;\n\n constructor(reader: Blob, copy: Font | number) {\n super(\"font\");\n if (reader != null) {\n this.height = reader.readInt32();\n this.width = reader.readInt32();\n this.escapement = reader.readInt32();\n this.orientation = reader.readInt32();\n this.weight = reader.readInt32();\n this.italic = reader.readUint8();\n this.underline = reader.readUint8();\n this.strikeout = reader.readUint8();\n this.charset = reader.readUint8();\n this.outprecision = reader.readUint8();\n this.clipprecision = reader.readUint8();\n this.quality = reader.readUint8();\n const pitchAndFamily = reader.readUint8();\n this.pitch = pitchAndFamily & 0xf; // TODO: double check\n this.family = (pitchAndFamily >> 6) & 0x3; // TODO: double check\n\n const dataLength = copy as number;\n const start = reader.pos;\n this.facename = reader.readFixedSizeUnicodeString(Math.min(dataLength - (reader.pos - start), 32));\n } else if (copy != null) {\n copy = copy as Font;\n this.height = copy.height;\n this.width = copy.width;\n this.escapement = copy.escapement;\n this.orientation = copy.orientation;\n this.weight = copy.weight;\n this.italic = copy.italic;\n this.underline = copy.underline;\n this.strikeout = copy.strikeout;\n this.charset = copy.charset;\n this.outprecision = copy.outprecision;\n this.clipprecision = copy.clipprecision;\n this.quality = copy.quality;\n this.pitch = copy.pitch;\n this.family = copy.family;\n this.facename = copy.facename;\n } else {\n // TODO: Values for a default font?\n this.height = -80;\n this.width = 0;\n this.escapement = 0;\n this.orientation = 0;\n this.weight = 400;\n this.italic = 0;\n this.underline = 0;\n this.strikeout = 0;\n this.charset = 0;\n this.outprecision = 0;\n this.clipprecision = 0;\n this.quality = 0;\n this.pitch = 0;\n this.family = 0;\n this.facename = \"Helvetica\";\n }\n }\n\n public clone() {\n return new Font(null, this);\n }\n\n public toString() {\n return JSON.stringify(this);\n }\n}\n\nexport class Brush extends Obj {\n public style: number;\n public color: ColorRef;\n public pattern: DIBitmap;\n public dibpatternpt: DIBitmap;\n public hatchstyle: number;\n\n constructor(reader: Blob, copy?: {style?: number, color?: ColorRef, pattern?: DIBitmap,\n dibpatternpt?: DIBitmap, hatchstyle?: number}) {\n super(\"brush\");\n if (reader != null) {\n const start = reader.pos;\n\n this.style = reader.readUint32();\n switch (this.style) {\n case Helper.GDI.BrushStyle.BS_SOLID:\n this.color = new ColorRef(reader);\n break;\n case Helper.GDI.BrushStyle.BS_PATTERN:\n this.pattern = new DIBitmap(reader);\n break;\n case Helper.GDI.BrushStyle.BS_DIBPATTERNPT:\n this.dibpatternpt = new DIBitmap(reader);\n break;\n case Helper.GDI.BrushStyle.BS_HATCHED:\n this.color = new ColorRef(reader);\n this.hatchstyle = reader.readUint32();\n break;\n }\n\n reader.seek(start + 12);\n } else {\n this.style = copy.style;\n switch (this.style) {\n case Helper.GDI.BrushStyle.BS_SOLID:\n this.color = copy.color.clone();\n break;\n case Helper.GDI.BrushStyle.BS_PATTERN:\n this.pattern = copy.pattern;\n break;\n case Helper.GDI.BrushStyle.BS_DIBPATTERNPT:\n this.dibpatternpt = copy.dibpatternpt;\n break;\n case Helper.GDI.BrushStyle.BS_HATCHED:\n this.color = copy.color.clone();\n this.hatchstyle = copy.hatchstyle;\n break;\n }\n }\n }\n\n public clone() {\n return new Brush(null, this);\n }\n\n public toString() {\n let ret = \"{style: \" + this.style;\n switch (this.style) {\n case Helper.GDI.BrushStyle.BS_SOLID:\n ret += \", color: \" + this.color.toString();\n break;\n case Helper.GDI.BrushStyle.BS_HATCHED:\n ret += \", color: \" + this.color.toString() + \", hatchstyle: \" + this.hatchstyle;\n break;\n }\n return ret + \"}\";\n }\n}\n\nexport class Pen extends Obj {\n public style: number | {header: {off: number, size: number}, data: {off: number, size: number}};\n public width: number;\n public brush: Brush;\n public color: ColorRef;\n\n constructor(reader: Blob, style?: number | {header: {off: number, size: number}, data: {off: number, size: number}},\n width?: number, color?: ColorRef, brush?: Brush) {\n super(\"pen\");\n if (reader != null) {\n if (style != null) {\n // LogPenEx\n const bitmapInfo = style;\n\n this.style = reader.readUint32() & 0xFF;\n this.width = reader.readUint32();\n this.brush = new Brush(reader);\n this.color = this.brush.color != null ? this.brush.color.clone() : new ColorRef(null, 0, 0, 0);\n // TODO: NumStyleEntries, StyleEntry\n } else {\n // LogPen\n this.style = reader.readUint32() & 0xFF;\n this.width = (new PointL(reader)).x;\n this.color = new ColorRef(reader);\n }\n } else {\n this.style = style;\n this.width = width;\n if (color != null) {\n this.color = color;\n }\n if (brush != null) {\n this.brush = brush;\n }\n }\n }\n\n public clone() {\n return new Pen(null, this.style, this.width, this.color != null ? this.color.clone() : null,\n this.brush != null ? this.brush.clone() : null);\n }\n\n public toString() {\n return \"{style: \" + this.style + \", width: \" + this.width\n + \", color: \" + (this.color != null ? this.color.toString() : \"none\") + \"}\";\n }\n}\n","/*\n\nThe MIT License (MIT)\n\nCopyright (c) 2016 Tom Zoehner\nCopyright (c) 2018 Thomas Bluemel\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n\n*/\n\nimport { Blob } from \"./Blob\";\nimport { EMFJSError, Helper } from \"./Helper\";\n\nexport class BitmapBase {\n public getWidth() {\n throw new EMFJSError(\"getWidth not implemented\");\n }\n\n public getHeight() {\n throw new EMFJSError(\"getHeight not implemented\");\n }\n}\nexport class BitmapCoreHeader {\n public width: number;\n public height: number;\n public planes: number;\n public bitcount: number;\n\n constructor(reader: Blob, skipsize: boolean) {\n if (skipsize) {\n reader.skip(4);\n }\n this.width = reader.readUint16();\n this.height = reader.readUint16();\n this.planes = reader.readUint16();\n this.bitcount = reader.readUint16();\n }\n\n public colors() {\n return this.bitcount <= 8 ? 1 << this.bitcount : 0;\n }\n}\n\nexport class BitmapInfoHeader {\n public width: number;\n public height: number;\n public planes: number;\n public bitcount: number;\n public compression: number;\n public sizeimage: number;\n public xpelspermeter: number;\n public ypelspermeter: number;\n public clrused: number;\n public clrimportant: number;\n\n constructor(reader: Blob, skipsize: boolean) {\n if (skipsize) {\n reader.skip(4);\n }\n this.width = reader.readInt32();\n this.height = reader.readInt32();\n this.planes = reader.readUint16();\n this.bitcount = reader.readUint16();\n this.compression = reader.readUint32();\n this.sizeimage = reader.readUint32();\n this.xpelspermeter = reader.readInt32();\n this.ypelspermeter = reader.readInt32();\n this.clrused = reader.readUint32();\n this.clrimportant = reader.readUint32();\n }\n\n public colors() {\n if (this.clrused !== 0) {\n return this.clrused < 256 ? this.clrused : 256;\n } else {\n return this.bitcount > 8 ? 0 : 1 << this.bitcount;\n }\n }\n}\n\nexport class BitmapInfo extends BitmapBase {\n private _usergb: boolean;\n private _infosize: number;\n private _header: BitmapCoreHeader | BitmapInfoHeader;\n\n constructor(reader: Blob, usergb: boolean) {\n super();\n this._usergb = usergb;\n const hdrsize = reader.readUint32();\n this._infosize = hdrsize;\n if (hdrsize === Helper.GDI.BITMAPCOREHEADER_SIZE) {\n this._header = new BitmapCoreHeader(reader, false);\n this._infosize += this._header.colors() * (usergb ? 3 : 2);\n } else {\n this._header = new BitmapInfoHeader(reader, false);\n const masks = (this._header as BitmapInfoHeader).compression\n === Helper.GDI.BitmapCompression.BI_BITFIELDS ? 3 : 0;\n if (hdrsize <= Helper.GDI.BITMAPINFOHEADER_SIZE + (masks * 4)) {\n this._infosize = Helper.GDI.BITMAPINFOHEADER_SIZE + (masks * 4);\n }\n this._infosize += this._header.colors() * (usergb ? 4 : 2);\n }\n }\n\n public getWidth() {\n return this._header.width;\n }\n\n public getHeight() {\n return Math.abs(this._header.height);\n }\n\n public infosize() {\n return this._infosize;\n }\n\n public header() {\n return this._header;\n }\n}\n\nexport class DIBitmap extends BitmapBase {\n private _reader: Blob;\n private _offset: number;\n private _location: any;\n private _info: BitmapInfo;\n\n constructor(reader: Blob, bitmapInfo?: any) {\n super();\n this._reader = reader;\n this._offset = reader.pos;\n this._location = bitmapInfo;\n this._info = new BitmapInfo(reader, true);\n }\n\n public getWidth() {\n return this._info.getWidth();\n }\n\n public getHeight() {\n return this._info.getHeight();\n }\n\n public totalSize() {\n return this._location.header.size + this._location.data.size;\n }\n\n public makeBitmapFileHeader() {\n const buf = new ArrayBuffer(14);\n const view = new Uint8Array(buf);\n view[0] = 0x42;\n view[1] = 0x4d;\n Helper._writeUint32Val(view, 2, this.totalSize() + 14);\n Helper._writeUint32Val(view, 10, this._info.infosize() + 14);\n return Helper._blobToBinary(view);\n }\n\n public base64ref() {\n const prevpos = this._reader.pos;\n this._reader.seek(this._offset);\n let mime = \"image/bmp\";\n const header = this._info.header();\n let data;\n if (header instanceof BitmapInfoHeader && header.compression != null) {\n switch (header.compression) {\n case Helper.GDI.BitmapCompression.BI_JPEG:\n mime = \"data:image/jpeg\";\n break;\n case Helper.GDI.BitmapCompression.BI_PNG:\n mime = \"data:image/png\";\n break;\n default:\n data = this.makeBitmapFileHeader();\n break;\n }\n } else {\n data = this.makeBitmapFileHeader();\n }\n\n this._reader.seek(this._location.header.offset);\n if (data != null) {\n data += this._reader.readBinary(this._location.header.size);\n } else {\n data = this._reader.readBinary(this._location.header.size);\n }\n\n this._reader.seek(this._location.data.offset);\n data += this._reader.readBinary(this._location.data.size);\n\n const ref = \"data:\" + mime + \";base64,\" + btoa(data);\n this._reader.seek(prevpos);\n return ref;\n }\n}\n","/*\n\nThe MIT License (MIT)\n\nCopyright (c) 2016 Tom Zoehner\nCopyright (c) 2018 Thomas Bluemel\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n\n*/\n\nimport { EMFJSError, Helper } from \"./Helper\";\nimport { Obj, PointL, PointS, RectL } from \"./Primitives\";\nimport { CreateSimpleRegion, Region } from \"./Region\";\nimport { Brush, ColorRef, Font, Pen } from \"./Style\";\n\nexport interface ISelectedStyle {\n brush?: Brush;\n pen?: Pen;\n font?: Font;\n region?: Region;\n path?: Path;\n [key: string]: Obj;\n}\n\nexport class Path extends Obj {\n public svgPath: any;\n\n constructor(svgPath: any, copy?: Path) {\n super(\"path\");\n if (svgPath != null) {\n this.svgPath = svgPath;\n } else {\n this.svgPath = copy.svgPath;\n }\n }\n\n public clone() {\n return new Path(null, this.svgPath);\n }\n\n public toString() {\n return \"{[path]}\";\n }\n}\n\nfunction createStockObjects(): {[key: string]: Obj} {\n // Create global stock objects\n const createSolidBrush = (r: number, g: number, b: number) => {\n return new Brush(null, {\n style: Helper.GDI.BrushStyle.BS_SOLID,\n color: new ColorRef(null, r, g, b),\n });\n };\n const createSolidPen = (r: number, g: number, b: number) => {\n return new Pen(null, Helper.GDI.PenStyle.PS_SOLID, 1, new ColorRef(null, r, g, b), null);\n };\n const stockObjs: {[key: string]: Obj} = {\n WHITE_BRUSH: createSolidBrush(255, 255, 255),\n LTGRAY_BRUSH: createSolidBrush(212, 208, 200),\n GRAY_BRUSH: createSolidBrush(128, 128, 128),\n DKGRAY_BRUSH: createSolidBrush(64, 64, 64),\n BLACK_BRUSH: createSolidBrush(0, 0, 0),\n NULL_BRUSH: new Brush(null, {\n style: Helper.GDI.BrushStyle.BS_NULL,\n }),\n WHITE_PEN: createSolidPen(255, 255, 255),\n BLACK_PEN: createSolidPen(0, 0, 0),\n NULL_PEN: new Pen(null, Helper.GDI.PenStyle.PS_NULL, 0, null, null),\n OEM_FIXED_FONT: null, // TODO\n ANSI_FIXED_FONT: null, // TODO\n ANSI_VAR_FONT: null, // TODO\n SYSTEM_FONT: null, // TODO\n DEVICE_DEFAULT_FONT: null, // TODO\n DEFAULT_PALETTE: null, // TODO\n SYSTEM_FIXED_FONT: null, // TODO\n DEFAULT_GUI_FONT: null, // TODO\n };\n\n const objs: {[key: string]: Obj} = {};\n for (const t in stockObjs) {\n const stockObjects: {[key: string]: number} = Helper.GDI.StockObject as {[key: string]: number};\n const idx = stockObjects[t] - 0x80000000;\n objs[idx.toString()] = stockObjs[t];\n }\n return objs;\n}\n\nexport const _StockObjects = createStockObjects();\n\nexport class GDIContextState {\n public _svggroup: any;\n public _svgclipChanged: boolean;\n public _svgtextbkfilter: any;\n public mapmode: number;\n public stretchmode: number;\n public textalign: number;\n public bkmode: number;\n public textcolor: ColorRef;\n public bkcolor: ColorRef;\n public polyfillmode: number;\n public miterlimit: number;\n public wx: number;\n public wy: number;\n public ww: number;\n public wh: number;\n public vx: number;\n public vy: number;\n public vw: number;\n public vh: number;\n public x: number;\n public y: number;\n public nextbrx: number;\n public nextbry: number;\n public brx: number;\n public bry: number;\n public clip: Region;\n public ownclip: boolean;\n public selected: ISelectedStyle;\n\n constructor(copy: GDIContextState, defObjects?: ISelectedStyle) {\n if (copy != null) {\n this._svggroup = copy._svggroup;\n this._svgclipChanged = copy._svgclipChanged;\n this._svgtextbkfilter = copy._svgtextbkfilter;\n this.mapmode = copy.mapmode;\n this.stretchmode = copy.stretchmode;\n this.textalign = copy.textalign;\n this.bkmode = copy.bkmode;\n this.textcolor = copy.textcolor.clone();\n this.bkcolor = copy.bkcolor.clone();\n this.polyfillmode = copy.polyfillmode;\n this.miterlimit = copy.miterlimit;\n this.wx = copy.wx;\n this.wy = copy.wy;\n this.ww = copy.ww;\n this.wh = copy.wh;\n this.vx = copy.vx;\n this.vy = copy.vy;\n this.vw = copy.vw;\n this.vh = copy.vh;\n this.x = copy.x;\n this.y = copy.y;\n this.nextbrx = copy.nextbrx;\n this.nextbry = copy.nextbry;\n this.brx = copy.brx;\n this.bry = copy.bry;\n\n this.clip = copy.clip;\n this.ownclip = false;\n\n this.selected = {};\n for (const type in copy.selected) {\n this.selected[type] = copy.selected[type];\n }\n } else {\n this._svggroup = null;\n this._svgclipChanged = false;\n this._svgtextbkfilter = null;\n this.mapmode = Helper.GDI.MapMode.MM_ANISOTROPIC;\n this.stretchmode = Helper.GDI.StretchMode.COLORONCOLOR;\n this.textalign = 0; // TA_LEFT | TA_TOP | TA_NOUPDATECP\n this.bkmode = Helper.GDI.MixMode.OPAQUE;\n this.textcolor = new ColorRef(null, 0, 0, 0);\n this.bkcolor = new ColorRef(null, 255, 255, 255);\n this.polyfillmode = Helper.GDI.PolygonFillMode.ALTERNATE;\n this.miterlimit = 10;\n this.wx = 0;\n this.wy = 0;\n this.ww = 0;\n this.wh = 0;\n this.vx = 0;\n this.vy = 0;\n this.vw = 0;\n this.vh = 0;\n this.x = 0;\n this.y = 0;\n this.nextbrx = 0;\n this.nextbry = 0;\n this.brx = 0;\n this.bry = 0;\n\n this.clip = null;\n this.ownclip = false;\n\n this.selected = {};\n for (const type in defObjects) {\n const defObj = defObjects[type];\n this.selected[type] = defObj != null ? defObj.clone() : null;\n }\n }\n }\n}\n\nexport class GDIContext {\n private _svg: any;\n private _svgdefs: any;\n private _svgPatterns: {[key: string]: Brush};\n private _svgClipPaths: {[key: string]: Region};\n private _svgPath: any;\n private defObjects: ISelectedStyle;\n private state: GDIContextState;\n private statestack: GDIContextState[];\n private objects: {[key: string]: Obj};\n\n constructor(svg: any) {\n this._svg = svg;\n this._svgdefs = null;\n this._svgPatterns = {};\n this._svgClipPaths = {};\n this._svgPath = null;\n\n this.defObjects = {\n brush: new Brush(null, {\n style: Helper.GDI.BrushStyle.BS_SOLID,\n color: new ColorRef(null, 0, 0, 0),\n }),\n pen: new Pen(null, Helper.GDI.PenStyle.PS_SOLID, 1, new ColorRef(null, 0, 0, 0), null),\n font: new Font(null, null),\n palette: null,\n region: null,\n };\n\n this.state = new GDIContextState(null, this.defObjects);\n this.statestack = [this.state];\n this.objects = {};\n }\n\n public setMapMode(mode: number) {\n Helper.log(\"[gdi] setMapMode: mode=\" + mode);\n this.state.mapmode = mode;\n this.state._svggroup = null;\n }\n\n public setWindowOrgEx(x: number, y: number) {\n Helper.log(\"[gdi] setWindowOrgEx: x=\" + x + \" y=\" + y);\n this.state.wx = x;\n this.state.wy = y;\n this.state._svggroup = null;\n }\n\n public setWindowExtEx(x: number, y: number) {\n Helper.log(\"[gdi] setWindowExtEx: x=\" + x + \" y=\" + y);\n this.state.ww = x;\n this.state.wh = y;\n this.state._svggroup = null;\n }\n\n public setViewportOrgEx(x: number, y: number) {\n Helper.log(\"[gdi] setViewportOrgEx: x=\" + x + \" y=\" + y);\n this.state.vx = x;\n this.state.vy = y;\n this.state._svggroup = null;\n }\n\n public setViewportExtEx(x: number, y: number) {\n Helper.log(\"[gdi] setViewportExtEx: x=\" + x + \" y=\" + y);\n this.state.vw = x;\n this.state.vh = y;\n this.state._svggroup = null;\n }\n\n public setBrushOrgEx(origin: PointL) {\n Helper.log(\"[gdi] setBrushOrgEx: x=\" + origin.x + \" y=\" + origin.y);\n this.state.nextbrx = origin.x;\n this.state.nextbry = origin.y;\n }\n\n public saveDC() {\n Helper.log(\"[gdi] saveDC\");\n const prevstate = this.state;\n this.state = new GDIContextState(this.state);\n this.statestack.push(prevstate);\n this.state._svggroup = null;\n }\n\n public restoreDC(saved: number) {\n Helper.log(\"[gdi] restoreDC: saved=\" + saved);\n if (this.statestack.length > 1) {\n if (saved === -1) {\n this.state = this.statestack.pop();\n } else if (saved < -1) {\n throw new EMFJSError(\"restoreDC: relative restore not implemented\");\n } else if (saved > 1) {\n throw new EMFJSError(\"restoreDC: absolute restore not implemented\");\n }\n } else {\n throw new EMFJSError(\"No saved contexts\");\n }\n\n this.state._svggroup = null;\n }\n\n public setStretchBltMode(stretchMode: number) {\n Helper.log(\"[gdi] setStretchBltMode: stretchMode=\" + stretchMode);\n }\n\n public rectangle(rect: RectL, rw: number, rh: number) {\n Helper.log(\"[gdi] rectangle: rect=\" + rect.toString() + \" with pen \" + this.state.selected.pen.toString()\n + \" and brush \" + this.state.selected.brush.toString());\n const bottom = this._todevY(rect.bottom);\n const right = this._todevX(rect.right);\n const top = this._todevY(rect.top);\n const left = this._todevX(rect.left);\n rw = this._todevH(rw);\n rh = this._todevH(rh);\n Helper.log(\"[gdi] rectangle: TRANSLATED: bottom=\" + bottom + \" right=\" + right + \" top=\" + top\n + \" left=\" + left + \" rh=\" + rh + \" rw=\" + rw);\n this._pushGroup();\n\n const opts = this._applyOpts(null, true, true, false);\n this._svg.rect(this.state._svggroup, left, top, right - left, bottom - top, rw / 2, rh / 2, opts);\n }\n\n public lineTo(x: number, y: number) {\n Helper.log(\"[gdi] lineTo: x=\" + x + \" y=\" + y + \" with pen \" + this.state.selected.pen.toString());\n const toX = this._todevX(x);\n const toY = this._todevY(y);\n const fromX = this._todevX(this.state.x);\n const fromY = this._todevY(this.state.y);\n\n // Update position\n this.state.x = x;\n this.state.y = y;\n\n Helper.log(\"[gdi] lineTo: TRANSLATED: toX=\" + toX + \" toY=\" + toY + \" fromX=\" + fromX + \" fromY=\" + fromY);\n this._pushGroup();\n\n const opts = this._applyOpts(null, true, false, false);\n this._svg.line(this.state._svggroup, fromX, fromY, toX, toY, opts);\n }\n\n public moveToEx(x: number, y: number) {\n Helper.log(\"[gdi] moveToEx: x=\" + x + \" y=\" + y);\n this.state.x = x;\n this.state.y = y;\n if (this._svgPath != null) {\n this._svgPath.move(this.state.x, this.state.y);\n Helper.log(\"[gdi] new path: \" + this._svgPath.path());\n }\n }\n\n public polygon(points: PointS[] | PointL[], bounds: RectL, first: boolean) {\n Helper.log(\"[gdi] polygon: points=\" + points + \" with pen \" + this.state.selected.pen.toString()\n + \" and brush \" + this.state.selected.brush.toString());\n const pts = [];\n for (let i = 0; i < points.length; i++) {\n const point = points[i];\n pts.push([this._todevX(point.x), this._todevY(point.y)]);\n }\n if (first) {\n this._pushGroup();\n }\n const opts = {\n \"fill-rule\": this.state.polyfillmode === Helper.GDI.PolygonFillMode.ALTERNATE ? \"evenodd\" : \"nonzero\",\n };\n this._applyOpts(opts, true, true, false);\n this._svg.polygon(this.state._svggroup, pts, opts);\n }\n\n public polyPolygon(polygons: PointS[][] | PointL[][], bounds: RectL) {\n Helper.log(\"[gdi] polyPolygon: polygons.length=\" + polygons.length\n + \" with pen \" + this.state.selected.pen.toString() + \" and brush \" + this.state.selected.brush.toString());\n\n const cnt = polygons.length;\n for (let i = 0; i < cnt; i++) {\n this.polygon(polygons[i], bounds, i === 0);\n }\n }\n\n public polyline(isLineTo: boolean, points: PointS[], bounds: RectL) {\n Helper.log(\"[gdi] polyline: isLineTo=\" + isLineTo.toString() + \", points=\" + points\n + \", bounds=\" + bounds.toString() + \" with pen \" + this.state.selected.pen.toString());\n const pts = [];\n for (let i = 0; i < points.length; i++) {\n const point = points[i];\n pts.push([this._todevX(point.x), this._todevY(point.y)]);\n }\n\n if (this._svgPath != null) {\n if (!isLineTo || pts.length === 0) {\n this._svgPath.move(this._todevX(this.state.x), this._todevY(this.state.y));\n } else {\n const firstPts = pts[0];\n this._svgPath.move(firstPts[0], firstPts[1]);\n }\n this._svgPath.line(pts);\n Helper.log(\"[gdi] new path: \" + this._svgPath.path());\n } else {\n this._pushGroup();\n const opts = this._applyOpts(null, true, false, false);\n if (isLineTo && points.length > 0) {\n const firstPt = points[0];\n if (firstPt.x !== this.state.x || firstPt.y !== this.state.y) {\n pts.unshift([this._todevX(this.state.x), this._todevY(this.state.y)]);\n }\n }\n this._svg.polyline(this.state._svggroup, pts, opts);\n }\n\n if (points.length > 0) {\n const lastPt = points[points.length - 1];\n this.state.x = lastPt.x;\n this.state.y = lastPt.y;\n }\n }\n\n public polybezier(isPolyBezierTo: boolean, points: PointS[], bounds: RectL) {\n Helper.log(\"[gdi] polybezier: isPolyBezierTo=\" + isPolyBezierTo.toString() + \", points=\" + points\n + \", bounds=\" + bounds.toString() + \" with pen \" + this.state.selected.pen.toString());\n const pts = [];\n for (let i = 0; i < points.length; i++) {\n const point = points[i];\n pts.push({ x: this._todevX(point.x), y: this._todevY(point.y)});\n }\n\n if (this._svgPath != null) {\n if (isPolyBezierTo && pts.length > 0) {\n const firstPts = pts[0];\n this._svgPath.move(firstPts.x, firstPts.y);\n } else {\n this._svgPath.move(this._todevX(this.state.x), this._todevY(this.state.y));\n }\n\n if (pts.length < (isPolyBezierTo ? 3 : 4)) {\n throw new EMFJSError(\"Not enough points to draw bezier\");\n }\n\n for (let i = isPolyBezierTo ? 1 : 0; i + 3 <= pts.length; i += 3) {\n const cp1 = pts[i];\n const cp2 = pts[i + 1];\n const ep = pts[i + 2];\n this._svgPath.curveC(cp1.x, cp1.y, cp2.x, cp2.y, ep.x, ep.y);\n }\n\n Helper.log(\"[gdi] new path: \" + this._svgPath.path());\n } else {\n throw new EMFJSError(\"polybezier not implemented (not a path)\");\n }\n\n if (points.length > 0) {\n const lastPt = points[points.length - 1];\n this.state.x = lastPt.x;\n this.state.y = lastPt.y;\n }\n }\n\n public selectClipPath(rgnMode: number) {\n Helper.log(\"[gdi] selectClipPath: rgnMode=0x\" + rgnMode.toString(16));\n }\n\n public selectClipRgn(rgnMode: number, region: Region) {\n Helper.log(\"[gdi] selectClipRgn: rgnMode=0x\" + rgnMode.toString(16));\n if (rgnMode === Helper.GDI.RegionMode.RGN_COPY) {\n this.state.selected.region = region;\n this.state.clip = null;\n this.state.ownclip = false;\n } else {\n if (region == null) {\n throw new EMFJSError(\"No clip region to select\");\n }\n\n throw new EMFJSError(\"Not implemented: rgnMode=0x\" + rgnMode.toString(16));\n }\n this.state._svgclipChanged = true;\n }\n\n public offsetClipRgn(offset: PointL) {\n Helper.log(\"[gdi] offsetClipRgn: offset=\" + offset.toString());\n this._getClipRgn().offset(offset.x, offset.y);\n }\n\n public setTextAlign(textAlignmentMode: number) {\n Helper.log(\"[gdi] setTextAlign: textAlignmentMode=0x\" + textAlignmentMode.toString(16));\n this.state.textalign = textAlignmentMode;\n }\n\n public setMiterLimit(miterLimit: number) {\n Helper.log(\"[gdi] setMiterLimit: miterLimit=\" + miterLimit);\n this.state.miterlimit = miterLimit;\n }\n\n public setBkMode(bkMode: number) {\n Helper.log(\"[gdi] setBkMode: bkMode=0x\" + bkMode.toString(16));\n this.state.bkmode = bkMode;\n }\n\n public setBkColor(bkColor: ColorRef) {\n Helper.log(\"[gdi] setBkColor: bkColor=\" + bkColor.toString());\n this.state.bkcolor = bkColor;\n this.state._svgtextbkfilter = null;\n }\n\n public setPolyFillMode(polyFillMode: number) {\n Helper.log(\"[gdi] setPolyFillMode: polyFillMode=\" + polyFillMode);\n this.state.polyfillmode = polyFillMode;\n }\n\n public createBrush(index: number, brush: Brush) {\n const idx = this._storeObject(brush, index);\n Helper.log(\"[gdi] createBrush: brush=\" + brush.toString() + \" with handle \" + idx);\n }\n\n public createPen(index: number, pen: Pen) {\n const idx = this._storeObject(pen, index);\n Helper.log(\"[gdi] createPen: pen=\" + pen.toString() + \" width handle \" + idx);\n }\n\n public createPenEx(index: number, pen: Pen) {\n const idx = this._storeObject(pen, index);\n Helper.log(\"[gdi] createPenEx: pen=\" + pen.toString() + \" width handle \" + idx);\n }\n\n public selectObject(objIdx: number, checkType: string) {\n const obj = this._getObject(objIdx);\n if (obj != null && (checkType == null || obj.type === checkType)) {\n this._selectObject(obj);\n Helper.log(\"[gdi] selectObject: objIdx=\" + objIdx\n + (obj ? \" selected \" + obj.type + \": \" + obj.toString() : \"[invalid index]\"));\n } else {\n Helper.log(\"[gdi] selectObject: objIdx=\" + objIdx\n + (obj ? \" invalid object type: \" + obj.type : \"[invalid index]\"));\n }\n }\n\n public abortPath() {\n Helper.log(\"[gdi] abortPath\");\n if (this._svgPath != null) {\n this._svgPath = null;\n }\n }\n\n public beginPath() {\n Helper.log(\"[gdi] beginPath\");\n\n if (this._svgPath != null) {\n this._svgPath = null;\n }\n\n this._svgPath = this._svg.createPath();\n }\n\n public closeFigure() {\n Helper.log(\"[gdi] closeFigure\");\n if (this._svgPath == null) {\n throw new EMFJSError(\"No path bracket: cannot close figure\");\n }\n\n this._svgPath.close();\n }\n\n public fillPath(bounds: RectL) {\n Helper.log(\"[gdi] fillPath\");\n if (this.state.selected.path == null) {\n throw new EMFJSError(\"No path selected\");\n }\n\n const selPath = this.state.selected.path;\n const opts = this._applyOpts(null, true, true, false);\n this._svg.path(this.state._svggroup, selPath.svgPath, opts);\n\n this._pushGroup();\n this.state.selected.path = null;\n }\n\n public strokePath(bounds: RectL) {\n Helper.log(\"[gdi] strokePath\");\n if (this.state.selected.path == null) {\n throw new EMFJSError(\"No path selected\");\n }\n\n const selPath = this.state.selected.path;\n const opts = this._applyOpts({fill: \"none\"}, true, false, false);\n this._svg.path(this.state._svggroup, selPath.svgPath, opts);\n\n this._pushGroup();\n this.state.selected.path = null;\n }\n\n public endPath() {\n Helper.log(\"[gdi] endPath\");\n if (this._svgPath == null) {\n throw new EMFJSError(\"No path bracket: cannot end path\");\n }\n\n this._pushGroup();\n this._selectObject(new Path(this._svgPath));\n this._svgPath = null;\n }\n\n public deleteObject(objIdx: number) {\n const ret = this._deleteObject(objIdx);\n Helper.log(\"[gdi] deleteObject: objIdx=\" + objIdx + (ret ? \" deleted object\" : \"[invalid index]\"));\n }\n\n private _pushGroup() {\n if (this.state._svggroup == null || this.state._svgclipChanged) {\n this.state._svgclipChanged = false;\n this.state._svgtextbkfilter = null;\n\n const settings: any = {\n viewBox: [this.state.vx, this.state.vy, this.state.vw, this.state.vh].join(\" \"),\n preserveAspectRatio: \"none\",\n };\n if (this.state.clip != null) {\n Helper.log(\"[gdi] new svg x=\" + this.state.vx + \" y=\" + this.state.vy + \" width=\" + this.state.vw\n + \" height=\" + this.state.vh + \" with clipping\");\n settings[\"clip-path\"] = \"url(#\" + this._getSvgClipPathForRegion(this.state.clip) + \")\";\n } else {\n Helper.log(\"[gdi] new svg x=\" + this.state.vx + \" y=\" + this.state.vy + \" width=\" + this.state.vw\n + \" height=\" + this.state.vh + \" without clipping\");\n }\n this.state._svggroup = this._svg.svg(this.state._svggroup,\n this.state.vx, this.state.vy, this.state.vw, this.state.vh, settings);\n }\n }\n\n private _getStockObject(idx: number) {\n if (idx >= 0x80000000 && idx <= 0x80000011) {\n return _StockObjects[(idx - 0x80000000).toString()];\n } else if (idx === Helper.GDI.StockObject.DC_BRUSH) {\n return this.state.selected.brush;\n } else if (idx === Helper.GDI.StockObject.DC_PEN) {\n return this.state.selected.pen;\n }\n return null;\n }\n\n private _storeObject(obj: Obj, idx: number) {\n if (!idx) {\n idx = 0;\n while (this.objects[idx.toString()] != null && idx <= 65535) {\n idx++;\n }\n if (idx > 65535) {\n Helper.log(\"[gdi] Too many objects!\");\n return -1;\n }\n }\n\n this.objects[idx.toString()] = obj;\n return idx;\n }\n\n private _getObject(objIdx: number) {\n let obj = this.objects[objIdx.toString()];\n if (obj == null) {\n obj = this._getStockObject(objIdx);\n if (obj == null) {\n Helper.log(\"[gdi] No object with handle \" + objIdx);\n }\n }\n return obj;\n }\n\n private _getSvgDef() {\n if (this._svgdefs == null) {\n this._svgdefs = this._svg.defs();\n }\n return this._svgdefs;\n }\n\n private _getSvgClipPathForRegion(region: Region) {\n for (const existingId in this._svgClipPaths) {\n const rgn = this._svgClipPaths[existingId];\n if (rgn === region) {\n return existingId;\n }\n }\n\n const id = Helper._makeUniqueId(\"c\");\n const sclip = this._svg.clipPath(this._getSvgDef(), id, \"userSpaceOnUse\");\n switch (region.complexity) {\n case 1:\n this._svg.rect(sclip,\n this._todevX(region.bounds.left),\n this._todevY(region.bounds.top),\n this._todevW(region.bounds.right - region.bounds.left),\n this._todevH(region.bounds.bottom - region.bounds.top),\n { fill: \"black\", strokeWidth: 0 });\n break;\n case 2:\n for (let i = 0; i < region.scans.length; i++) {\n const scan = region.scans[i];\n for (let j = 0; j < scan.scanlines.length; j++) {\n const scanline = scan.scanlines[j];\n this._svg.rect(sclip, this._todevX(scanline.left), this._todevY(scan.top),\n this._todevW(scanline.right - scanline.left), this._todevH(scan.bottom - scan.top),\n { fill: \"black\", strokeWidth: 0 });\n }\n }\n break;\n }\n this._svgClipPaths[id] = region;\n return id;\n }\n\n private _getSvgPatternForBrush(brush: Brush) {\n for (const existingId in this._svgPatterns) {\n const pat = this._svgPatterns[existingId];\n if (pat === brush) {\n return existingId;\n }\n }\n\n let width;\n let height;\n let img;\n switch (brush.style) {\n case Helper.GDI.BrushStyle.BS_PATTERN:\n width = brush.pattern.getWidth();\n height = brush.pattern.getHeight();\n break;\n case Helper.GDI.BrushStyle.BS_DIBPATTERNPT:\n width = brush.dibpatternpt.getWidth();\n height = brush.dibpatternpt.getHeight();\n img = brush.dibpatternpt.base64ref();\n break;\n default:\n throw new EMFJSError(\"Invalid brush style\");\n }\n\n const id = Helper._makeUniqueId(\"p\");\n const spat = this._svg.pattern(this._getSvgDef(), id, this.state.brx, this.state.bry, width, height,\n {patternUnits: \"userSpaceOnUse\"});\n this._svg.image(spat, 0, 0, width, height, img);\n this._svgPatterns[id] = brush;\n return id;\n }\n\n private _selectObject(obj: Obj) {\n this.state.selected[obj.type] = obj;\n switch (obj.type) {\n case \"region\":\n this.state._svgclipChanged = true;\n break;\n case \"brush\":\n this.state.brx = this.state.nextbrx;\n this.state.bry = this.state.nextbry;\n break;\n }\n }\n\n private _deleteObject(objIdx: number) {\n const obj = this.objects[objIdx.toString()];\n if (obj != null) {\n for (let i = 0; i < this.statestack.length; i++) {\n const state = this.statestack[i];\n if (state.selected[obj.type] === obj) {\n state.selected[obj.type] = this.defObjects[obj.type].clone();\n }\n }\n delete this.objects[objIdx.toString()];\n return true;\n }\n\n Helper.log(\"[gdi] Cannot delete object with invalid handle \" + objIdx);\n return false;\n }\n\n private _getClipRgn() {\n if (this.state.clip != null) {\n if (!this.state.ownclip) {\n this.state.clip = this.state.clip.clone();\n }\n } else {\n if (this.state.selected.region != null) {\n this.state.clip = this.state.selected.region.clone();\n } else {\n this.state.clip = CreateSimpleRegion(this.state.wx, this.state.wy, this.state.wx + this.state.ww,\n this.state.wy + this.state.wh);\n }\n }\n this.state.ownclip = true;\n return this.state.clip;\n }\n\n private _todevX(val: number) {\n // http://wvware.sourceforge.net/caolan/mapmode.html\n // logical -> device\n return Math.floor((val - this.state.wx) * (this.state.vw / this.state.ww)) + this.state.vx;\n }\n\n private _todevY(val: number) {\n // http://wvware.sourceforge.net/caolan/mapmode.html\n // logical -> device\n return Math.floor((val - this.state.wy) * (this.state.vh / this.state.wh)) + this.state.vy;\n }\n\n private _todevW(val: number) {\n // http://wvware.sourceforge.net/caolan/mapmode.html\n // logical -> device\n return Math.floor(val * (this.state.vw / this.state.ww)) + this.state.vx;\n }\n\n private _todevH(val: number) {\n // http://wvware.sourceforge.net/caolan/mapmode.html\n // logical -> device\n return Math.floor(val * (this.state.vh / this.state.wh)) + this.state.vy;\n }\n\n private _tologicalX(val: number) {\n // http://wvware.sourceforge.net/caolan/mapmode.html\n // logical -> device\n return Math.floor((val - this.state.vx) / (this.state.vw / this.state.ww)) + this.state.wx;\n }\n\n private _tologicalY(val: number) {\n // http://wvware.sourceforge.net/caolan/mapmode.html\n // logical -> device\n return Math.floor((val - this.state.vy) / (this.state.vh / this.state.wh)) + this.state.wy;\n }\n\n private _tologicalW(val: number) {\n // http://wvware.sourceforge.net/caolan/mapmode.html\n // logical -> device\n return Math.floor(val / (this.state.vw / this.state.ww)) + this.state.wx;\n }\n\n private _tologicalH(val: number) {\n // http://wvware.sourceforge.net/caolan/mapmode.html\n // logical -> device\n return Math.floor(val / (this.state.vh / this.state.wh)) + this.state.wy;\n }\n\n private _applyOpts(opts: any, usePen: boolean, useBrush: boolean, useFont: boolean) {\n if (opts == null) {\n opts = {};\n }\n if (usePen) {\n const pen = this.state.selected.pen;\n if (pen.style !== Helper.GDI.PenStyle.PS_NULL) {\n opts.stroke = \"#\" + pen.color.toHex(); // TODO: pen style\n opts.strokeWidth = pen.width;\n\n opts[\"stroke-miterlimit\"] = this.state.miterlimit;\n\n let dotWidth;\n opts[\"stroke-linecap\"] = \"round\";\n dotWidth = 1;\n\n opts[\"stroke-linejoin\"] = \"round\";\n\n const dashWidth = opts.strokeWidth * 4;\n const dotSpacing = opts.strokeWidth * 2;\n switch (pen.style) {\n case Helper.GDI.PenStyle.PS_DASH:\n opts[\"stroke-dasharray\"] = [dashWidth, dotSpacing].toString();\n break;\n case Helper.GDI.PenStyle.PS_DOT:\n opts[\"stroke-dasharray\"] = [dotWidth, dotSpacing].toString();\n break;\n case Helper.GDI.PenStyle.PS_DASHDOT:\n opts[\"stroke-dasharray\"] = [dashWidth, dotSpacing, dotWidth, dotSpacing].toString();\n break;\n case Helper.GDI.PenStyle.PS_DASHDOTDOT:\n opts[\"stroke-dasharray\"] =\n [dashWidth, dotSpacing, dotWidth, dotSpacing, dotWidth, dotSpacing].toString();\n break;\n }\n }\n }\n if (useBrush) {\n const brush = this.state.selected.brush;\n switch (brush.style) {\n case Helper.GDI.BrushStyle.BS_SOLID:\n opts.fill = \"#\" + brush.color.toHex();\n break;\n case Helper.GDI.BrushStyle.BS_PATTERN:\n case Helper.GDI.BrushStyle.BS_DIBPATTERNPT:\n opts.fill = \"url(#\" + this._getSvgPatternForBrush(brush) + \")\";\n break;\n case Helper.GDI.BrushStyle.BS_NULL:\n opts.fill = \"none\";\n break;\n default:\n Helper.log(\"[gdi] unsupported brush style: \" + brush.style);\n opts.fill = \"none\";\n break;\n }\n }\n if (useFont) {\n const font = this.state.selected.font;\n opts[\"font-family\"] = font.facename;\n opts[\"font-size\"] = Math.abs(font.height);\n opts.fill = \"#\" + this.state.textcolor.toHex();\n }\n return opts;\n }\n}\n"],"sourceRoot":""}