{"version":3,"sources":["webpack://[name]/webpack/universalModuleDefinition","webpack://[name]/webpack/bootstrap","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]/external {\"commonjs\":\"jquery\",\"commonjs2\":\"jquery\",\"amd\":\"jquery\",\"root\":\"$\"}","webpack://[name]/./src/wmfjs/index.ts","webpack://[name]/./src/wmfjs/Renderer.ts","webpack://[name]/./src/wmfjs/Blob.ts","webpack://[name]/./src/wmfjs/Helper.ts","webpack://[name]/./src/wmfjs/GDIContext.ts","webpack://[name]/./src/wmfjs/Primitives.ts","webpack://[name]/./src/wmfjs/Region.ts","webpack://[name]/./src/wmfjs/Style.ts","webpack://[name]/./src/wmfjs/Bitmap.ts","webpack://[name]/./src/wmfjs/WMFRecords.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__","_WMFRecords__WEBPACK_IMPORTED_MODULE_4__","Renderer","blob","parse","log","render","info","_this","img","jquery__WEBPACK_IMPORTED_MODULE_0__","svg","onLoad","_render","mapMode","xExt","yExt","settings","viewBox","join","preserveAspectRatio","svgContainer","attr","width","height","_img","type","size","placable","headerstart","reader","_Blob__WEBPACK_IMPORTED_MODULE_1__","readUint32","WMFPlacable","pos","readUint16","GDI","MetafileType","MEMORYMETAFILE","DISKMETAFILE","METAHEADER_SIZE","version","MetafileVersion","METAVERSION100","METAVERSION300","WMF","gdi","_GDIContext__WEBPACK_IMPORTED_MODULE_2__","setViewportExt","setMapMode","WMFRect16","left","readInt16","top","right","bottom","toString","skip","boundingBox","unitsPerInch","hdrsize","_version","_hdrsize","_placable","_records","play","_Helper__WEBPACK_IMPORTED_MODULE_0__","Blob","offset","data","Uint8Array","eof","length","seek","newpos","cnt","newPos","readBinary","ret","String","fromCharCode","readInt8","readUint8","readInt32","val","readString","readNullTermString","maxSize","byte","Helper","WMFJSError","message","stack","Error","isLoggingEnabled","loggingEnabled","enabled","console","_makeUniqueId","prefix","_uniqueId","_writeUint32Val","uint8arr","_blobToBinary","len","BITMAPINFOHEADER_SIZE","BITMAPCOREHEADER_SIZE","RecordType","META_EOF","META_REALIZEPALETTE","META_SETPALENTRIES","META_SETBKMODE","META_SETMAPMODE","META_SETROP2","META_SETRELABS","META_SETPOLYFILLMODE","META_SETSTRETCHBLTMODE","META_SETTEXTCHAREXTRA","META_RESTOREDC","META_RESIZEPALETTE","META_DIBCREATEPATTERNBRUSH","META_SETLAYOUT","META_SETBKCOLOR","META_SETTEXTCOLOR","META_OFFSETVIEWPORTORG","META_LINETO","META_MOVETO","META_OFFSETCLIPRGN","META_FILLREGION","META_SETMAPPERFLAGS","META_SELECTPALETTE","META_POLYGON","META_POLYLINE","META_SETTEXTJUSTIFICATION","META_SETWINDOWORG","META_SETWINDOWEXT","META_SETVIEWPORTORG","META_SETVIEWPORTEXT","META_OFFSETWINDOWORG","META_SCALEWINDOWEXT","META_SCALEVIEWPORTEXT","META_EXCLUDECLIPRECT","META_INTERSECTCLIPRECT","META_ELLIPSE","META_FLOODFILL","META_FRAMEREGION","META_ANIMATEPALETTE","META_TEXTOUT","META_POLYPOLYGON","META_EXTFLOODFILL","META_RECTANGLE","META_SETPIXEL","META_ROUNDRECT","META_PATBLT","META_SAVEDC","META_PIE","META_STRETCHBLT","META_ESCAPE","META_INVERTREGION","META_PAINTREGION","META_SELECTCLIPREGION","META_SELECTOBJECT","META_SETTEXTALIGN","META_ARC","META_CHORD","META_BITBLT","META_EXTTEXTOUT","META_SETDIBTODEV","META_DIBBITBLT","META_DIBSTRETCHBLT","META_STRETCHDIB","META_DELETEOBJECT","META_CREATEPALETTE","META_CREATEPATTERNBRUSH","META_CREATEPENINDIRECT","META_CREATEFONTINDIRECT","META_CREATEBRUSHINDIRECT","META_CREATEREGION","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","TextAlignmentMode","TA_UPDATECP","TA_RIGHT","TA_CENTER","TA_BOTTOM","TA_BASELINE","TA_RTLREADING","MixMode","TRANSPARENT","OPAQUE","VerticalTextAlignmentMode","VTA_BOTTOM","VTA_CENTER","VTA_LEFT","VTA_BASELINE","BrushStyle","BS_SOLID","BS_NULL","BS_HATCHED","BS_PATTERN","BS_INDEXED","BS_DIBPATTERN","BS_DIBPATTERNPT","BS_PATTERN8X8","BS_DIBPATTERN8X8","BS_MONOPATTERN","PenStyle","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","PolyFillMode","ALTERNATE","WINDING","ColorUsage","DIB_RGB_COLORS","DIB_PAL_COLORS","DIB_PAL_INDICES","PaletteEntryFlag","PC_RESERVED","PC_EXPLICIT","PC_NOCOLLAPSE","BitmapCompression","BI_RGB","BI_RLE8","BI_RLE4","BI_BITFIELDS","BI_JPEG","BI_PNG","_Style__WEBPACK_IMPORTED_MODULE_4__","GDIContextState","copy","defObjects","_svggroup","_svgclipChanged","_svgtextbkfilter","mapmode","stretchmode","textalign","bkmode","textcolor","clone","bkcolor","polyfillmode","wx","wy","ww","wh","vx","vy","vw","vh","x","y","clip","ownclip","selected","_Helper__WEBPACK_IMPORTED_MODULE_1__","defObj","GDIContext","_svg","_svgdefs","_svgPatterns","_svgClipPaths","brush","pen","_Primitives__WEBPACK_IMPORTED_MODULE_2__","font","palette","region","state","statestack","objects","setWindowOrg","setWindowExt","offsetWindowOrg","offX","offY","setViewportOrg","offsetViewportOrg","saveDC","prevstate","push","restoreDC","saved","pop","escape","func","count","setStretchBltMode","stretchMode","stretchDib","srcX","srcY","srcW","srcH","dstX","dstY","dstW","dstH","rasterOp","colorUsage","dib","_todevX","_todevY","_todevW","_todevH","_pushGroup","image","base64ref","stretchDibBits","rectangle","rect","rw","rh","opts","_applyOpts","textOut","text","escapement","transform","style","filterId","filter","_getSvgDef","filters","flood","toHex","composite","extTextOut","fwOpts","dx","lineTo","toX","toY","fromX","fromY","line","moveTo","polygon","points","first","pts","point","fill-rule","polyPolygon","polygons","polyline","fill","ellipse","width2","height2","excludeClipRect","_getClipRgn","subtract","intersectClipRect","intersect","offsetClipRgn","setTextAlign","textAlignmentMode","setBkMode","bkMode","setTextColor","textColor","setBkColor","bkColor","setPolyFillMode","polyFillMode","createBrush","idx","_storeObject","createFont","createPen","createPalette","createRegion","createPatternBrush","patternBrush","selectObject","objIdx","checkType","obj","_getObject","_selectObject","deleteObject","_deleteObject","_getSvgClipPathForRegion","defs","existingId","id","sclip","clipPath","complexity","bounds","strokeWidth","scans","scan","j","scanlines","scanline","_getSvgPatternForBrush","pattern","getWidth","getHeight","dibpatternpt","spat","patternUnits","_Region__WEBPACK_IMPORTED_MODULE_3__","Math","floor","_tologicalX","_tologicalY","_tologicalW","_tologicalH","usePen","useBrush","useFont","stroke","color","dotWidth","linecap","dashWidth","dotSpacing","facename","abs","PointS","Rect","empty","max","min","Obj","_Primitives__WEBPACK_IMPORTED_MODULE_1__","Region","_super","scanCnt","top_1","Scan","_updateComplexity","__extends","si","cloned","splice","last","top_2","slen","CreateSimpleRegion","rgn","ColorRef","g","b","slice","Font","orientation","weight","italic","underline","strikeout","charset","outprecision","clipprecision","quality","pitchAndFamily","pitch","family","dataLength","start","JSON","stringify","Brush","forceDibPattern","_Bitmap__WEBPACK_IMPORTED_MODULE_0__","colorusage","hatchstyle","Pen","PaletteEntry","flag","Palette","entries","BitmapBase","BitmapCoreHeader","skipsize","planes","bitcount","colors","BitmapInfoHeader","compression","sizeimage","xpelspermeter","ypelspermeter","clrused","clrimportant","BitmapInfo","usergb","_reader","_offset","_usergb","_infosize","_header","masks","infosize","header","DIBitmap","_size","_info","prevpos","mime","makeBitmapFileHeader","ref","btoa","buf","ArrayBuffer","view","Bitmap16","widthBytes","bitsPixel","bitsOffset","bitsSize","PatternBitmap16","_Style__WEBPACK_IMPORTED_MODULE_5__","WMFRecords","all","curpos","_Helper__WEBPACK_IMPORTED_MODULE_2__","mapMode_1","this_1","y_1","x_1","y_2","x_2","offY_1","offX_1","y_3","x_3","y_4","x_4","offY_2","offX_2","saved_1","stretchMode_1","rasterOp_1","srcH_1","srcW_1","srcY_1","srcX_1","destH_1","destW_1","destY_1","destX_1","datalength","dib_1","rasterOp_2","colorUsage_1","srcH_2","srcW_2","srcY_2","srcX_2","destH_2","destW_2","destY_2","destX_2","dib_2","func_1","count_1","offset_1","blob_1","textAlign_1","bkMode_1","textColor_1","bkColor_1","brush_1","brush_2","pen_1","font_1","idx_1","idx_2","idx_3","idx_4","rect_1","_Primitives__WEBPACK_IMPORTED_MODULE_3__","rh_1","rw_1","rect_2","y_5","x_5","y_6","x_6","text_1","y_7","x_7","y_8","x_8","fwOpts_1","hasRect","hasDx","rect_3","text_2","dx_1","rect_4","rect_5","points_1","polyfillmode_1","polygonsPtCnts","polygons_1","ptCnt","ip","points_2","rect_6","palette_1","region_1","_Region__WEBPACK_IMPORTED_MODULE_4__","patternBitmap","brush_3","offY_3","offX_3","recordName","name_1","main_loop"],"mappings":"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","file":"WMFJS.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[\"WMFJS\"] = factory(require(\"./jquery.svg\"), require(\"./jquery.svgfilter\"), require(\"jquery\"));\n\telse\n\t\troot[\"WMFJS\"] = 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 = 36);\n","module.exports = __WEBPACK_EXTERNAL_MODULE__1__;","module.exports = __WEBPACK_EXTERNAL_MODULE__2__;","module.exports = __WEBPACK_EXTERNAL_MODULE__4__;","/*\n\nThe MIT License (MIT)\n\nCopyright (c) 2015 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 { WMFJSError as Error, loggingEnabled } from \"./Helper\";\n","/*\n\nThe MIT License (MIT)\n\nCopyright (c) 2015 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 { GDIContext } from \"./GDIContext\";\nimport { Helper, WMFJSError } from \"./Helper\";\nimport { WMFRecords } from \"./WMFRecords\";\n\nexport interface IRendererSettings {\n width: string;\n height: string;\n xExt: number;\n yExt: number;\n mapMode: number;\n}\n\nexport class Renderer {\n private _img: WMF;\n\n constructor(blob: ArrayBuffer) {\n this.parse(blob);\n Helper.log(\"WMFJS.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.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 let type;\n let size;\n let placable;\n let headerstart;\n const key = reader.readUint32();\n if (key === 0x9ac6cdd7) {\n placable = new WMFPlacable(reader);\n headerstart = reader.pos;\n type = reader.readUint16();\n size = reader.readUint16();\n } else {\n headerstart = 0;\n type = key & 0xffff;\n size = (key >>> 16) & 0xffff;\n }\n switch (type) {\n case Helper.GDI.MetafileType.MEMORYMETAFILE:\n case Helper.GDI.MetafileType.DISKMETAFILE:\n if (size === Helper.GDI.METAHEADER_SIZE / 2) {\n const version = reader.readUint16();\n switch (version) {\n case Helper.GDI.MetafileVersion.METAVERSION100:\n case Helper.GDI.MetafileVersion.METAVERSION300:\n this._img = new WMF(reader, placable, version, headerstart + (size * 2));\n break;\n }\n }\n break;\n }\n\n if (this._img == null) {\n throw new WMFJSError(\"Format not recognized\");\n }\n }\n\n private _render(svg: any, mapMode: number, xExt: number, yExt: number) {\n // See https://www-user.tu-chemnitz.de/~ygu/petzold/ch18b.htm\n const gdi = new GDIContext(svg);\n gdi.setViewportExt(xExt, yExt);\n gdi.setMapMode(mapMode);\n Helper.log(\"[WMF] BEGIN RENDERING --->\");\n this._img.render(gdi);\n Helper.log(\"[WMF] <--- DONE RENDERING\");\n }\n}\n\nexport class WMFRect16 {\n private left: number;\n private top: number;\n private right: number;\n private bottom: number;\n\n constructor(reader: Blob) {\n this.left = reader.readInt16();\n this.top = reader.readInt16();\n this.right = reader.readInt16();\n this.bottom = reader.readInt16();\n }\n\n public toString() {\n return \"{left: \" + this.left + \", top: \" + this.top + \", right: \" + this.right\n + \", bottom: \" + this.bottom + \"}\";\n }\n}\n\nexport class WMFPlacable {\n private boundingBox: WMFRect16;\n private unitsPerInch: number;\n\n constructor(reader: Blob) {\n reader.skip(2);\n this.boundingBox = new WMFRect16(reader);\n this.unitsPerInch = reader.readInt16();\n reader.skip(4);\n reader.skip(2); // TODO: checksum\n Helper.log(\"Got bounding box \" + this.boundingBox + \" and \" + this.unitsPerInch + \" units/inch\");\n }\n}\n\nexport class WMF {\n private _version: number;\n private _hdrsize: number;\n private _placable: WMFPlacable;\n private _records: WMFRecords;\n\n constructor(reader: Blob, placable: WMFPlacable, version: number, hdrsize: number) {\n this._version = version;\n this._hdrsize = hdrsize;\n this._placable = placable;\n this._records = new WMFRecords(reader, this._hdrsize);\n }\n\n public render(gdi: GDIContext) {\n this._records.play(gdi);\n }\n}\n","/*\n\nThe MIT License (MIT)\n\nCopyright (c) 2015 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 { WMFJSError } 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 WMFJSError(\"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 WMFJSError(\"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 WMFJSError(\"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 WMFJSError(\"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 WMFJSError(\"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 WMFJSError(\"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 WMFJSError(\"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 WMFJSError(\"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","/*\n\nThe MIT License (MIT)\n\nCopyright (c) 2015 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 WMFJSError {\n name: string;\n message: string;\n stack: string;\n}\n\n// tslint:disable-next-line:variable-name\nexport const WMFJSError = function(this: WMFJSError, message: string) {\n this.name = \"WMFJSError\";\n this.message = message;\n this.stack = (new Error()).stack;\n} as any as { new (message: string): WMFJSError; };\nWMFJSError.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 METAHEADER_SIZE: 18,\n BITMAPINFOHEADER_SIZE: 40,\n BITMAPCOREHEADER_SIZE: 12,\n MetafileType: {\n MEMORYMETAFILE: 1,\n DISKMETAFILE: 2,\n },\n MetafileVersion: {\n METAVERSION100: 0x100,\n METAVERSION300: 0x300,\n },\n RecordType: {\n META_EOF: 0x0000,\n META_REALIZEPALETTE: 0x0035,\n META_SETPALENTRIES: 0x0037,\n META_SETBKMODE: 0x0102,\n META_SETMAPMODE: 0x0103,\n META_SETROP2: 0x0104,\n META_SETRELABS: 0x0105,\n META_SETPOLYFILLMODE: 0x0106,\n META_SETSTRETCHBLTMODE: 0x0107,\n META_SETTEXTCHAREXTRA: 0x0108,\n META_RESTOREDC: 0x0127,\n META_RESIZEPALETTE: 0x0139,\n META_DIBCREATEPATTERNBRUSH: 0x0142,\n META_SETLAYOUT: 0x0149,\n META_SETBKCOLOR: 0x0201,\n META_SETTEXTCOLOR: 0x0209,\n META_OFFSETVIEWPORTORG: 0x0211,\n META_LINETO: 0x0213,\n META_MOVETO: 0x0214,\n META_OFFSETCLIPRGN: 0x0220,\n META_FILLREGION: 0x0228,\n META_SETMAPPERFLAGS: 0x0231,\n META_SELECTPALETTE: 0x0234,\n META_POLYGON: 0x0324,\n META_POLYLINE: 0x0325,\n META_SETTEXTJUSTIFICATION: 0x020a,\n META_SETWINDOWORG: 0x020b,\n META_SETWINDOWEXT: 0x020c,\n META_SETVIEWPORTORG: 0x020d,\n META_SETVIEWPORTEXT: 0x020e,\n META_OFFSETWINDOWORG: 0x020f,\n META_SCALEWINDOWEXT: 0x0410,\n META_SCALEVIEWPORTEXT: 0x0412,\n META_EXCLUDECLIPRECT: 0x0415,\n META_INTERSECTCLIPRECT: 0x0416,\n META_ELLIPSE: 0x0418,\n META_FLOODFILL: 0x0419,\n META_FRAMEREGION: 0x0429,\n META_ANIMATEPALETTE: 0x0436,\n META_TEXTOUT: 0x0521,\n META_POLYPOLYGON: 0x0538,\n META_EXTFLOODFILL: 0x0548,\n META_RECTANGLE: 0x041b,\n META_SETPIXEL: 0x041f,\n META_ROUNDRECT: 0x061c,\n META_PATBLT: 0x061d,\n META_SAVEDC: 0x001e,\n META_PIE: 0x081a,\n META_STRETCHBLT: 0x0b23,\n META_ESCAPE: 0x0626,\n META_INVERTREGION: 0x012a,\n META_PAINTREGION: 0x012b,\n META_SELECTCLIPREGION: 0x012c,\n META_SELECTOBJECT: 0x012d,\n META_SETTEXTALIGN: 0x012e,\n META_ARC: 0x0817,\n META_CHORD: 0x0830,\n META_BITBLT: 0x0922,\n META_EXTTEXTOUT: 0x0a32,\n META_SETDIBTODEV: 0x0d33,\n META_DIBBITBLT: 0x0940,\n META_DIBSTRETCHBLT: 0x0b41,\n META_STRETCHDIB: 0x0f43,\n META_DELETEOBJECT: 0x01f0,\n META_CREATEPALETTE: 0x00f7,\n META_CREATEPATTERNBRUSH: 0x01f9,\n META_CREATEPENINDIRECT: 0x02fa,\n META_CREATEFONTINDIRECT: 0x02fb,\n META_CREATEBRUSHINDIRECT: 0x02fc,\n META_CREATEREGION: 0x06ff,\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 TextAlignmentMode: {\n TA_UPDATECP: 1,\n TA_RIGHT: 2,\n TA_CENTER: 6,\n TA_BOTTOM: 8,\n TA_BASELINE: 24,\n TA_RTLREADING: 256,\n },\n MixMode: {\n TRANSPARENT: 1,\n OPAQUE: 2,\n },\n VerticalTextAlignmentMode: {\n VTA_BOTTOM: 2,\n VTA_CENTER: 6,\n VTA_LEFT: 8,\n VTA_BASELINE: 24,\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_SOLID: 0,\n PS_DASH: 1,\n PS_DOT: 2,\n PS_DASHDOT: 3,\n PS_DASHDOTDOT: 4,\n PS_NULL: 5,\n PS_INSIDEFRAME: 6,\n PS_USERSTYLE: 7,\n PS_ALTERNATE: 8,\n PS_ENDCAP_SQUARE: 256,\n PS_ENDCAP_FLAT: 512,\n PS_JOIN_BEVEL: 4096,\n PS_JOIN_MITER: 8192,\n },\n PolyFillMode: {\n ALTERNATE: 1,\n WINDING: 2,\n },\n ColorUsage: {\n DIB_RGB_COLORS: 0,\n DIB_PAL_COLORS: 1,\n DIB_PAL_INDICES: 2,\n },\n PaletteEntryFlag: {\n PC_RESERVED: 1,\n PC_EXPLICIT: 2,\n PC_NOCOLLAPSE: 4,\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 };\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 \"wmfjs_\" + 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) 2015 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 { DIBitmap } from \"./Bitmap\";\nimport { Blob } from \"./Blob\";\nimport { Helper, WMFJSError } from \"./Helper\";\nimport { Obj, PointS, Rect } from \"./Primitives\";\nimport { CreateSimpleRegion, Region } from \"./Region\";\nimport { Brush, ColorRef, Font, Palette, Pen } from \"./Style\";\n\nexport interface ISelectedStyle {\n brush?: Brush;\n pen?: Pen;\n font?: Font;\n palette?: Palette;\n region?: Region;\n [key: string]: Obj;\n}\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 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 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.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\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.PolyFillMode.ALTERNATE;\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\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 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\n this.defObjects = {\n brush: new Brush(null, null),\n pen: new Pen(null, Helper.GDI.PenStyle.PS_SOLID, new PointS(null, 1, 1), new ColorRef(null, 0, 0, 0), 0, 0),\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 setWindowOrg(x: number, y: number) {\n Helper.log(\"[gdi] setWindowOrg: x=\" + x + \" y=\" + y);\n this.state.wx = x;\n this.state.wy = y;\n this.state._svggroup = null;\n }\n\n public setWindowExt(x: number, y: number) {\n Helper.log(\"[gdi] setWindowExt: x=\" + x + \" y=\" + y);\n this.state.ww = x;\n this.state.wh = y;\n this.state._svggroup = null;\n }\n\n public offsetWindowOrg(offX: number, offY: number) {\n Helper.log(\"[gdi] offsetWindowOrg: offX=\" + offX + \" offY=\" + offY);\n this.state.wx += offX;\n this.state.wy += offY;\n this.state._svggroup = null;\n }\n\n public setViewportOrg(x: number, y: number) {\n Helper.log(\"[gdi] setViewportOrg: x=\" + x + \" y=\" + y);\n this.state.vx = x;\n this.state.vy = y;\n this.state._svggroup = null;\n }\n\n public setViewportExt(x: number, y: number) {\n Helper.log(\"[gdi] setViewportExt: x=\" + x + \" y=\" + y);\n this.state.vw = x;\n this.state.vh = y;\n this.state._svggroup = null;\n }\n\n public offsetViewportOrg(offX: number, offY: number) {\n Helper.log(\"[gdi] offsetViewportOrg: offX=\" + offX + \" offY=\" + offY);\n this.state.vx += offX;\n this.state.vy += offY;\n this.state._svggroup = null;\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 WMFJSError(\"restoreDC: relative restore not implemented\");\n } else if (saved > 1) {\n throw new WMFJSError(\"restoreDC: absolute restore not implemented\");\n }\n } else {\n throw new WMFJSError(\"No saved contexts\");\n }\n\n this.state._svggroup = null;\n }\n\n public escape(func: number, blob: Blob, offset: number, count: number) {\n Helper.log(\"[gdi] escape: func=\" + func + \" offset=\" + offset + \" count=\" + count);\n }\n\n public setStretchBltMode(stretchMode: number) {\n Helper.log(\"[gdi] setStretchBltMode: stretchMode=\" + stretchMode);\n }\n\n public stretchDib(srcX: number, srcY: number, srcW: number, srcH: number,\n dstX: number, dstY: number, dstW: number, dstH: number,\n rasterOp: number, colorUsage: number, dib: DIBitmap) {\n Helper.log(\"[gdi] stretchDib: srcX=\" + srcX + \" srcY=\" + srcY + \" srcW=\" + srcW + \" srcH=\" + srcH\n + \" dstX=\" + dstX + \" dstY=\" + dstY + \" dstW=\" + dstW + \" dstH=\" + dstH\n + \" rasterOp=0x\" + rasterOp.toString(16));\n srcX = this._todevX(srcX);\n srcY = this._todevY(srcY);\n srcW = this._todevW(srcW);\n srcH = this._todevH(srcH);\n dstX = this._todevX(dstX);\n dstY = this._todevY(dstY);\n dstW = this._todevW(dstW);\n dstH = this._todevH(dstH);\n Helper.log(\"[gdi] stretchDib: TRANSLATED: srcX=\" + srcX + \" srcY=\" + srcY + \" srcW=\" + srcW + \" srcH=\" + srcH\n + \" dstX=\" + dstX + \" dstY=\" + dstY + \" dstW=\" + dstW + \" dstH=\" + dstH\n + \" rasterOp=0x\" + rasterOp.toString(16) + \" colorUsage=0x\" + colorUsage.toString(16));\n this._pushGroup();\n this._svg.image(this.state._svggroup, dstX, dstY, dstW, dstH, dib.base64ref());\n }\n\n public stretchDibBits(srcX: number, srcY: number, srcW: number, srcH: number,\n dstX: number, dstY: number, dstW: number, dstH: number,\n rasterOp: number, dib: DIBitmap) {\n Helper.log(\"[gdi] stretchDibBits: srcX=\" + srcX + \" srcY=\" + srcY + \" srcW=\" + srcW + \" srcH=\" + srcH\n + \" dstX=\" + dstX + \" dstY=\" + dstY + \" dstW=\" + dstW + \" dstH=\" + dstH\n + \" rasterOp=0x\" + rasterOp.toString(16));\n srcX = this._todevX(srcX);\n srcY = this._todevY(srcY);\n srcW = this._todevW(srcW);\n srcH = this._todevH(srcH);\n dstX = this._todevX(dstX);\n dstY = this._todevY(dstY);\n dstW = this._todevW(dstW);\n dstH = this._todevH(dstH);\n Helper.log(\"[gdi] stretchDibBits: TRANSLATED:\"\n + \" srcX=\" + srcX + \" srcY=\" + srcY + \" srcW=\" + srcW + \" srcH=\" + srcH\n + \" dstX=\" + dstX + \" dstY=\" + dstY + \" dstW=\" + dstW + \" dstH=\" + dstH\n + \" rasterOp=0x\" + rasterOp.toString(16));\n this._pushGroup();\n this._svg.image(this.state._svggroup, dstX, dstY, dstW, dstH, dib.base64ref());\n }\n\n public rectangle(rect: Rect, 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 textOut(x: number, y: number, text: string) {\n Helper.log(\"[gdi] textOut: x=\" + x + \" y=\" + y + \" text=\" + text\n + \" with font \" + this.state.selected.font.toString());\n x = this._todevX(x);\n y = this._todevY(y);\n Helper.log(\"[gdi] textOut: TRANSLATED: x=\" + x + \" y=\" + y);\n this._pushGroup();\n\n const opts = this._applyOpts(null, false, false, true);\n if (this.state.selected.font.escapement !== 0) {\n opts.transform = \"rotate(\" + [(-this.state.selected.font.escapement / 10), x, y] + \")\";\n opts.style = \"dominant-baseline: middle; text-anchor: start;\";\n }\n if (this.state.bkmode === Helper.GDI.MixMode.OPAQUE) {\n if (this.state._svgtextbkfilter == null) {\n const filterId = Helper._makeUniqueId(\"f\");\n const filter = this._svg.filter(this._getSvgDef(), filterId, 0, 0, 1, 1);\n this._svg.filters.flood(filter, null, \"#\" + this.state.bkcolor.toHex(), 1.0);\n this._svg.filters.composite(filter, null, null, \"SourceGraphic\");\n this.state._svgtextbkfilter = filter;\n }\n\n opts.filter = \"url(#\" + $(this.state._svgtextbkfilter).attr(\"id\") + \")\";\n }\n this._svg.text(this.state._svggroup, x, y, text, opts);\n }\n\n public extTextOut(x: number, y: number, text: string, fwOpts: number, rect: Rect, dx: number[]) {\n Helper.log(\"[gdi] extTextOut: x=\" + x + \" y=\" + y + \" text=\" + text\n + \" with font \" + this.state.selected.font.toString());\n x = this._todevX(x);\n y = this._todevY(y);\n Helper.log(\"[gdi] extTextOut: TRANSLATED: x=\" + x + \" y=\" + y);\n this._pushGroup();\n\n const opts = this._applyOpts(null, false, false, true);\n if (this.state.selected.font.escapement !== 0) {\n opts.transform = \"rotate(\" + [(-this.state.selected.font.escapement / 10), x, y] + \")\";\n opts.style = \"dominant-baseline: middle; text-anchor: start;\";\n }\n if (this.state.bkmode === Helper.GDI.MixMode.OPAQUE) {\n if (this.state._svgtextbkfilter == null) {\n const filterId = Helper._makeUniqueId(\"f\");\n const filter = this._svg.filter(this._getSvgDef(), filterId, 0, 0, 1, 1);\n this._svg.filters.flood(filter, null, \"#\" + this.state.bkcolor.toHex(), 1.0);\n this._svg.filters.composite(filter, null, null, \"SourceGraphic\");\n this.state._svgtextbkfilter = filter;\n }\n\n opts.filter = \"url(#\" + $(this.state._svgtextbkfilter).attr(\"id\") + \")\";\n }\n this._svg.text(this.state._svggroup, x, y, text, 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 moveTo(x: number, y: number) {\n Helper.log(\"[gdi] moveTo: x=\" + x + \" y=\" + y);\n this.state.x = x;\n this.state.y = y;\n }\n\n public polygon(points: PointS[], 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 Helper.log(\"[gdi] polygon: TRANSLATED: pts=\" + pts);\n if (first) {\n this._pushGroup();\n }\n const opts = {\n \"fill-rule\": this.state.polyfillmode === Helper.GDI.PolyFillMode.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[][]) {\n Helper.log(\"[gdi] polyPolygon: polygons.length=\" + polygons.length\n + \" with pen \" + this.state.selected.pen.toString()\n + \" 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], i === 0);\n }\n }\n\n public polyline(points: PointS[]) {\n Helper.log(\"[gdi] polyline: points=\" + points + \" 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 Helper.log(\"[gdi] polyline: TRANSLATED: pts=\" + pts);\n this._pushGroup();\n const opts = this._applyOpts({fill: \"none\"}, true, false, false);\n this._svg.polyline(this.state._svggroup, pts, opts);\n }\n\n public ellipse(rect: Rect) {\n Helper.log(\"[gdi] ellipse: 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 Helper.log(\"[gdi] ellipse: TRANSLATED: bottom=\" + bottom + \" right=\" + right + \" top=\" + top + \" left=\" + left);\n this._pushGroup();\n const width2 = (right - left) / 2;\n const height2 = (bottom - top) / 2;\n const opts = this._applyOpts(null, true, true, false);\n this._svg.ellipse(this.state._svggroup, left + width2, top + height2, width2, height2, opts);\n }\n\n public excludeClipRect(rect: Rect) {\n Helper.log(\"[gdi] excludeClipRect: rect=\" + rect.toString());\n this._getClipRgn().subtract(rect);\n }\n\n public intersectClipRect(rect: Rect) {\n Helper.log(\"[gdi] intersectClipRect: rect=\" + rect.toString());\n this._getClipRgn().intersect(rect);\n }\n\n public offsetClipRgn(offX: number, offY: number) {\n Helper.log(\"[gdi] offsetClipRgn: offX=\" + offX + \" offY=\" + offY);\n this._getClipRgn().offset(offX, offY);\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 setBkMode(bkMode: number) {\n Helper.log(\"[gdi] setBkMode: bkMode=0x\" + bkMode.toString(16));\n this.state.bkmode = bkMode;\n }\n\n public setTextColor(textColor: ColorRef) {\n Helper.log(\"[gdi] setTextColor: textColor=\" + textColor.toString());\n this.state.textcolor = textColor;\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(brush: Brush) {\n const idx = this._storeObject(brush);\n Helper.log(\"[gdi] createBrush: brush=\" + brush.toString() + \" with handle \" + idx);\n }\n\n public createFont(font: Font) {\n const idx = this._storeObject(font);\n Helper.log(\"[gdi] createFont: font=\" + font.toString() + \" with handle \" + idx);\n }\n\n public createPen(pen: Pen) {\n const idx = this._storeObject(pen);\n Helper.log(\"[gdi] createPen: pen=\" + pen.toString() + \" width handle \" + idx);\n }\n\n public createPalette(palette: Palette) {\n const idx = this._storeObject(palette);\n Helper.log(\"[gdi] createPalette: palette=\" + palette.toString() + \" width handle \" + idx);\n }\n\n public createRegion(region: Region) {\n const idx = this._storeObject(region);\n Helper.log(\"[gdi] createRegion: region=\" + region.toString() + \" width handle \" + idx);\n }\n\n public createPatternBrush(patternBrush: Brush) {\n const idx = this._storeObject(patternBrush);\n Helper.log(\"[gdi] createRegion: region=\" + patternBrush.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 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\n + \" width=\" + this.state.vw + \" 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\n + \" width=\" + this.state.vw + \" 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 _storeObject(obj: Obj) {\n let i = 0;\n while (this.objects[i.toString()] != null && i <= 65535) {\n i++;\n }\n if (i > 65535) {\n Helper.log(\"[gdi] Too many objects!\");\n return -1;\n }\n\n this.objects[i.toString()] = obj;\n return i;\n }\n\n private _getObject(objIdx: number) {\n const obj = this.objects[objIdx.toString()];\n if (obj == null) {\n Helper.log(\"[gdi] No object with handle \" + objIdx);\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, this._todevX(region.bounds.left), 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 WMFJSError(\"Invalid brush style\");\n }\n\n const id = Helper._makeUniqueId(\"p\");\n const spat = this._svg.pattern(this._getSvgDef(), id, 0, 0, width, height, {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 if (obj.type === \"region\") {\n this.state._svgclipChanged = true;\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 = this._todevW(pen.width.x); // TODO: is .y ever used?\n\n let dotWidth;\n if ((pen.linecap & Helper.GDI.PenStyle.PS_ENDCAP_SQUARE) !== 0) {\n opts[\"stroke-linecap\"] = \"square\";\n dotWidth = 1;\n } else if ((pen.linecap & Helper.GDI.PenStyle.PS_ENDCAP_FLAT) !== 0) {\n opts[\"stroke-linecap\"] = \"butt\";\n dotWidth = opts.strokeWidth;\n } else {\n opts[\"stroke-linecap\"] = \"round\";\n dotWidth = 1;\n }\n\n if ((pen.join & Helper.GDI.PenStyle.PS_JOIN_BEVEL) !== 0) {\n opts[\"stroke-linejoin\"] = \"bevel\";\n } else if ((pen.join & Helper.GDI.PenStyle.PS_JOIN_MITER) !== 0) {\n opts[\"stroke-linejoin\"] = \"miter\";\n } else {\n opts[\"stroke-linejoin\"] = \"round\";\n }\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\"] = this._todevH(Math.abs(font.height));\n opts.fill = \"#\" + this.state.textcolor.toHex();\n }\n return opts;\n }\n}\n","/*\n\nThe MIT License (MIT)\n\nCopyright (c) 2015 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 { WMFJSError } 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 Rect {\n public bottom: number;\n public right: number;\n public top: number;\n public left: number;\n\n constructor(reader: Blob, left?: number, top?: number, right?: number, bottom?: number) {\n if (reader != null) {\n this.bottom = reader.readInt16();\n this.right = reader.readInt16();\n this.top = reader.readInt16();\n this.left = reader.readInt16();\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 Rect(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(rect: Rect) {\n if (this.empty() || rect.empty()) {\n return null;\n }\n if (this.left >= rect.right || this.top >= rect.bottom ||\n this.right <= rect.left || this.bottom <= rect.top) {\n return null;\n }\n return new Rect(null, Math.max(this.left, rect.left), Math.max(this.top, rect.top),\n Math.min(this.right, rect.right), Math.min(this.bottom, rect.bottom));\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 WMFJSError(\"clone not implemented\");\n }\n\n public toString() {\n throw new WMFJSError(\"toString not implemented\");\n }\n}\n","/*\n\nThe MIT License (MIT)\n\nCopyright (c) 2015 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 { Helper, WMFJSError } from \"./Helper\";\nimport { Obj, Rect } from \"./Primitives\";\n\nexport class Region extends Obj {\n public bounds: Rect;\n public scans: Scan[];\n public complexity: number;\n\n constructor(reader: Blob, copy?: Region) {\n super(\"region\");\n if (reader != null) {\n reader.skip(2);\n if (reader.readInt16() !== 6) {\n throw new WMFJSError(\"Invalid region identifier\");\n }\n reader.skip(2);\n const rgnSize = reader.readInt16();\n const scanCnt = reader.readInt16();\n reader.skip(2);\n // note, Rect in reverse, can't use Rect(reader) directly\n const left = reader.readInt16();\n const top = reader.readInt16();\n const right = reader.readInt16();\n const bottom = reader.readInt16();\n this.bounds = new Rect(null, left, top, right, bottom);\n this.scans = [];\n for (let i = 0; i < scanCnt; i++) {\n this.scans.push(new Scan(reader));\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: Rect) {\n Helper.log(\"[wmf] 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(null, null, this.bounds.top, this.bounds.bottom,\n [{left: this.bounds.left, right: this.bounds.right}]));\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(\"[wmf] 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(\"[wmf] 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(\"[wmf] 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 Rect(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(\"[wmf] Region subtraction -> \" + this.toString());\n }\n\n public intersect(rect: Rect) {\n Helper.log(\"[wmf] 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(\"[wmf] 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(\"[wmf] 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(\"[wmf] 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(\"[wmf] 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 Rect(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(reader: Blob, copy?: Scan, top?: number, bottom?: number,\n scanlines?: Array<{left: number, right: number}>) {\n if (reader != null) {\n const cnt = reader.readUint16();\n this.top = reader.readUint16();\n this.bottom = reader.readUint16();\n this.scanlines = [];\n for (let i = 0; i < cnt; i++) {\n const left = reader.readUint16();\n const right = reader.readUint16();\n this.scanlines.push({left, right});\n }\n reader.skip(2);\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 } else {\n this.top = top;\n this.bottom = bottom;\n this.scanlines = scanlines;\n }\n }\n\n public clone() {\n return new Scan(null, this);\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 public toString() {\n return \"{ #scanlines: \" + this.scanlines.length + \"}\";\n }\n}\n","/*\n\nThe MIT License (MIT)\n\nCopyright (c) 2015 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 { Bitmap16, DIBitmap, PatternBitmap16 } from \"./Bitmap\";\nimport { Blob } from \"./Blob\";\nimport { Helper } from \"./Helper\";\nimport { Obj, PointS } 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.readInt16();\n this.width = reader.readInt16();\n this.escapement = reader.readInt16();\n this.orientation = reader.readInt16();\n this.weight = reader.readInt16();\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.readNullTermString(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: Bitmap16;\n public colorusage: number;\n public dibpatternpt: DIBitmap;\n public hatchstyle: number;\n\n constructor(reader: Blob, copy: Brush | number, forceDibPattern?: boolean | PatternBitmap16) {\n super(\"brush\");\n if (reader != null) {\n const dataLength = copy as number;\n const start = reader.pos;\n\n if (forceDibPattern === true || forceDibPattern === false) {\n this.style = reader.readUint16();\n if (forceDibPattern && this.style !== Helper.GDI.BrushStyle.BS_PATTERN) {\n this.style = Helper.GDI.BrushStyle.BS_DIBPATTERNPT;\n }\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 reader.skip(forceDibPattern ? 2 : 6);\n this.pattern = new Bitmap16(reader, dataLength - (reader.pos - start));\n break;\n case Helper.GDI.BrushStyle.BS_DIBPATTERNPT:\n this.colorusage = forceDibPattern ? reader.readUint16() : reader.readUint32();\n if (!forceDibPattern) {\n reader.skip(2);\n }\n this.dibpatternpt = new DIBitmap(reader, dataLength - (reader.pos - start));\n break;\n case Helper.GDI.BrushStyle.BS_HATCHED:\n this.color = new ColorRef(reader);\n this.hatchstyle = reader.readUint16();\n break;\n }\n } else if (forceDibPattern instanceof PatternBitmap16) {\n this.style = Helper.GDI.BrushStyle.BS_PATTERN;\n this.pattern = forceDibPattern;\n }\n } else if (copy != null) {\n copy = copy as Brush;\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.clone();\n break;\n case Helper.GDI.BrushStyle.BS_DIBPATTERNPT:\n this.colorusage = copy.colorusage;\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_DIBPATTERNPT:\n ret += \", colorusage: \" + this.colorusage;\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;\n public width: PointS;\n public color: ColorRef;\n public linecap: number;\n public join: number;\n\n constructor(reader: Blob, style?: number, width?: PointS, color?: ColorRef, linecap?: number, join?: number) {\n super(\"pen\");\n if (reader != null) {\n style = reader.readUint16();\n this.style = style & 0xFF;\n this.width = new PointS(reader);\n this.color = new ColorRef(reader);\n this.linecap = (style & (Helper.GDI.PenStyle.PS_ENDCAP_SQUARE | Helper.GDI.PenStyle.PS_ENDCAP_FLAT));\n this.join = (style & (Helper.GDI.PenStyle.PS_JOIN_BEVEL | Helper.GDI.PenStyle.PS_JOIN_MITER));\n } else {\n this.style = style;\n this.width = width;\n this.color = color;\n this.linecap = linecap;\n this.join = join;\n }\n }\n\n public clone() {\n return new Pen(null, this.style, this.width.clone(), this.color.clone(), this.linecap, this.join);\n }\n\n public toString() {\n return \"{style: \" + this.style + \", width: \" + this.width.toString() + \", color: \" + this.color.toString()\n + \", linecap: \" + this.linecap + \", join: \" + this.join + \"}\";\n }\n}\n\nexport class PaletteEntry {\n public flag: number;\n public b: number;\n public g: number;\n public r: number;\n\n constructor(reader: Blob, copy?: PaletteEntry) {\n if (reader != null) {\n this.flag = reader.readUint8();\n this.b = reader.readUint8();\n this.g = reader.readUint8();\n this.r = reader.readUint8();\n } else {\n this.flag = copy.flag;\n this.b = copy.b;\n this.g = copy.g;\n this.r = copy.r;\n }\n }\n\n public clone() {\n return new PaletteEntry(null, this);\n }\n}\n\nexport class Palette extends Obj {\n public start: number;\n public entries: PaletteEntry[];\n\n constructor(reader: Blob, copy?: Palette) {\n super(\"palette\");\n if (reader != null) {\n this.start = reader.readUint16();\n const cnt = reader.readUint16();\n this.entries = [];\n while (cnt > 0) {\n this.entries.push(new PaletteEntry(reader));\n }\n } else {\n this.start = copy.start;\n this.entries = [];\n const len = copy.entries.length;\n for (let i = 0; i < len; i++) {\n this.entries.push(copy.entries[i]);\n }\n }\n }\n\n public clone() {\n return new Palette(null, this);\n }\n\n public toString() {\n return \"{ #entries: \" + this.entries.length + \"}\"; // TODO\n }\n}\n","/*\n\nThe MIT License (MIT)\n\nCopyright (c) 2015 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 { Helper, WMFJSError } from \"./Helper\";\n\nexport class BitmapBase {\n public getWidth() {\n throw new WMFJSError(\"getWidth not implemented\");\n }\n\n public getHeight() {\n throw new WMFJSError(\"getHeight not implemented\");\n }\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 _reader: Blob;\n private _offset: number;\n private _usergb: boolean;\n private _infosize: number;\n private _header: BitmapCoreHeader | BitmapInfoHeader;\n\n constructor(reader: Blob, usergb: boolean) {\n super();\n this._reader = reader;\n this._offset = reader.pos;\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 =\n (this._header as BitmapInfoHeader).compression === 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 _size: number;\n private _info: BitmapInfo;\n\n constructor(reader: Blob, size: number) {\n super();\n this._reader = reader;\n this._offset = reader.pos;\n this._size = size;\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 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 if (data != null) {\n data += this._reader.readBinary(this._size);\n } else {\n data = this._reader.readBinary(this._size);\n }\n\n const ref = \"data:\" + mime + \";base64,\" + btoa(data);\n this._reader.seek(prevpos);\n return ref;\n }\n\n private 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._size + 14);\n Helper._writeUint32Val(view, 10, this._info.infosize() + 14);\n return Helper._blobToBinary(view);\n }\n}\n\nexport class Bitmap16 extends BitmapBase {\n public type: number;\n public width: number;\n public height: number;\n public widthBytes: number;\n public planes: number;\n public bitsPixel: number;\n public bitsOffset: number;\n public bitsSize: number;\n private _reader: Blob;\n private _offset: number;\n private _size: number;\n\n constructor(reader: Blob, size: number | Bitmap16) {\n super();\n if (reader != null) {\n size = size as number;\n this._reader = reader;\n this._offset = reader.pos;\n this._size = size;\n this.type = reader.readInt16();\n this.width = reader.readInt16();\n this.height = reader.readInt16();\n this.widthBytes = reader.readInt16();\n this.planes = reader.readUint8();\n this.bitsPixel = reader.readUint8();\n this.bitsOffset = reader.pos;\n this.bitsSize = (((this.width * this.bitsPixel + 15) >> 4) << 1) * this.height;\n if (this.bitsSize > size - 10) {\n throw new WMFJSError(\"Bitmap should have \" + this.bitsSize + \" bytes, but has \" + (size - 10));\n }\n } else {\n const copy = size as Bitmap16;\n this._reader = copy._reader;\n this._offset = copy._offset;\n this._size = copy._size;\n this.type = copy.type;\n this.width = copy.width;\n this.height = copy.height;\n this.widthBytes = copy.widthBytes;\n this.planes = copy.planes;\n this.bitsPixel = copy.bitsPixel;\n this.bitsOffset = copy.bitsOffset;\n this.bitsSize = copy.bitsSize;\n }\n }\n\n public getWidth() {\n return this.width;\n }\n\n public getHeight() {\n return this.height;\n }\n\n public clone() {\n return new Bitmap16(null, this);\n }\n}\n\nexport class PatternBitmap16 extends Bitmap16 {\n constructor(reader: Blob, size: number | Bitmap16) {\n super(reader, size);\n if (reader != null) {\n this.bitsOffset += 22; // skip bits (4 bytes) + reserved (18 bytes)\n }\n }\n\n public clone(): PatternBitmap16 {\n return new PatternBitmap16(null, this);\n }\n}\n","/*\n\nThe MIT License (MIT)\n\nCopyright (c) 2015 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, PatternBitmap16 } from \"./Bitmap\";\nimport { Blob } from \"./Blob\";\nimport { GDIContext } from \"./GDIContext\";\nimport { Helper, WMFJSError } from \"./Helper\";\nimport { PointS, Rect } from \"./Primitives\";\nimport { Region } from \"./Region\";\nimport { Brush, ColorRef, Font, Palette, Pen } from \"./Style\";\n\nexport class WMFRecords {\n private _records: Array<(gdi: GDIContext) => void>;\n\n constructor(reader: Blob, first: number) {\n this._records = [];\n\n let all = false;\n let curpos = first;\n main_loop: while (!all) {\n reader.seek(curpos);\n const size = reader.readUint32();\n if (size < 3) {\n throw new WMFJSError(\"Invalid record size\");\n }\n const type = reader.readUint16();\n switch (type) {\n case Helper.GDI.RecordType.META_EOF:\n all = true;\n break main_loop;\n case Helper.GDI.RecordType.META_SETMAPMODE: {\n const mapMode = reader.readUint16();\n this._records.push((gdi) => {\n gdi.setMapMode(mapMode);\n });\n break;\n }\n case Helper.GDI.RecordType.META_SETWINDOWORG: {\n const y = reader.readInt16();\n const x = reader.readInt16();\n this._records.push((gdi) => {\n gdi.setWindowOrg(x, y);\n });\n break;\n }\n case Helper.GDI.RecordType.META_SETWINDOWEXT: {\n const y = reader.readInt16();\n const x = reader.readInt16();\n this._records.push((gdi) => {\n gdi.setWindowExt(x, y);\n });\n break;\n }\n case Helper.GDI.RecordType.META_OFFSETWINDOWORG: {\n const offY = reader.readInt16();\n const offX = reader.readInt16();\n this._records.push((gdi) => {\n gdi.offsetWindowOrg(offX, offY);\n });\n break;\n }\n case Helper.GDI.RecordType.META_SETVIEWPORTORG: {\n const y = reader.readInt16();\n const x = reader.readInt16();\n this._records.push((gdi) => {\n gdi.setViewportOrg(x, y);\n });\n break;\n }\n case Helper.GDI.RecordType.META_SETVIEWPORTEXT: {\n const y = reader.readInt16();\n const x = reader.readInt16();\n this._records.push((gdi) => {\n gdi.setViewportExt(x, y);\n });\n break;\n }\n case Helper.GDI.RecordType.META_OFFSETVIEWPORTORG: {\n const offY = reader.readInt16();\n const offX = reader.readInt16();\n this._records.push((gdi) => {\n gdi.offsetViewportOrg(offX, offY);\n });\n break;\n }\n case Helper.GDI.RecordType.META_SAVEDC: {\n this._records.push((gdi) => {\n gdi.saveDC();\n });\n break;\n }\n case Helper.GDI.RecordType.META_RESTOREDC: {\n const saved = reader.readInt16();\n this._records.push((gdi) => {\n gdi.restoreDC(saved);\n });\n break;\n }\n case Helper.GDI.RecordType.META_SETSTRETCHBLTMODE: {\n const stretchMode = reader.readUint16();\n this._records.push((gdi) => {\n gdi.setStretchBltMode(stretchMode);\n });\n break;\n }\n case Helper.GDI.RecordType.META_DIBSTRETCHBLT: {\n const haveSrcDib = ((type >> 8) + 3 !== size);\n const rasterOp = reader.readUint16() | (reader.readUint16() << 16);\n const srcH = reader.readInt16();\n const srcW = reader.readInt16();\n const srcY = reader.readInt16();\n const srcX = reader.readInt16();\n const destH = reader.readInt16();\n const destW = reader.readInt16();\n const destY = reader.readInt16();\n const destX = reader.readInt16();\n const datalength = size * 2 - (reader.pos - curpos);\n const dib = new DIBitmap(reader, datalength);\n this._records.push((gdi) => {\n gdi.stretchDibBits(srcX, srcY, srcW, srcH, destX, destY, destW, destH, rasterOp, dib);\n });\n break;\n }\n case Helper.GDI.RecordType.META_STRETCHDIB: {\n const rasterOp = reader.readUint16() | (reader.readUint16() << 16);\n const colorUsage = reader.readInt16();\n const srcH = reader.readInt16();\n const srcW = reader.readInt16();\n const srcY = reader.readInt16();\n const srcX = reader.readInt16();\n const destH = reader.readInt16();\n const destW = reader.readInt16();\n const destY = reader.readInt16();\n const destX = reader.readInt16();\n const datalength = size * 2 - (reader.pos - curpos);\n const dib = new DIBitmap(reader, datalength);\n this._records.push((gdi) => {\n gdi.stretchDib(srcX, srcY, srcW, srcH, destX, destY, destW, destH, rasterOp, colorUsage, dib);\n });\n break;\n }\n case Helper.GDI.RecordType.META_ESCAPE: {\n const func = reader.readUint16();\n const count = reader.readUint16();\n const offset = reader.pos;\n const blob = new Blob(reader, offset);\n this._records.push((gdi) => {\n gdi.escape(func, blob, offset, count);\n });\n break;\n }\n case Helper.GDI.RecordType.META_SETTEXTALIGN: {\n const textAlign = reader.readUint16();\n this._records.push((gdi) => {\n gdi.setTextAlign(textAlign);\n });\n break;\n }\n case Helper.GDI.RecordType.META_SETBKMODE: {\n const bkMode = reader.readUint16();\n this._records.push((gdi) => {\n gdi.setBkMode(bkMode);\n });\n break;\n }\n case Helper.GDI.RecordType.META_SETTEXTCOLOR: {\n const textColor = new ColorRef(reader);\n this._records.push((gdi) => {\n gdi.setTextColor(textColor);\n });\n break;\n }\n case Helper.GDI.RecordType.META_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.META_CREATEBRUSHINDIRECT: {\n const datalength = size * 2 - (reader.pos - curpos);\n const brush = new Brush(reader, datalength, false);\n this._records.push((gdi) => {\n gdi.createBrush(brush);\n });\n break;\n }\n case Helper.GDI.RecordType.META_DIBCREATEPATTERNBRUSH: {\n const datalength = size * 2 - (reader.pos - curpos);\n const brush = new Brush(reader, datalength, true);\n this._records.push((gdi) => {\n gdi.createBrush(brush);\n });\n break;\n }\n case Helper.GDI.RecordType.META_CREATEPENINDIRECT: {\n const pen = new Pen(reader);\n this._records.push((gdi) => {\n gdi.createPen(pen);\n });\n break;\n }\n case Helper.GDI.RecordType.META_CREATEFONTINDIRECT: {\n const datalength = size * 2 - (reader.pos - curpos);\n const font = new Font(reader, datalength);\n this._records.push((gdi) => {\n gdi.createFont(font);\n });\n break;\n }\n case Helper.GDI.RecordType.META_SELECTOBJECT: {\n const idx = reader.readUint16();\n this._records.push((gdi) => {\n gdi.selectObject(idx, null);\n });\n break;\n }\n case Helper.GDI.RecordType.META_SELECTPALETTE: {\n const idx = reader.readUint16();\n this._records.push((gdi) => {\n gdi.selectObject(idx, \"palette\");\n });\n break;\n }\n case Helper.GDI.RecordType.META_SELECTCLIPREGION: {\n const idx = reader.readUint16();\n this._records.push((gdi) => {\n gdi.selectObject(idx, \"region\");\n });\n break;\n }\n case Helper.GDI.RecordType.META_DELETEOBJECT: {\n const idx = reader.readUint16();\n this._records.push((gdi) => {\n gdi.deleteObject(idx);\n });\n break;\n }\n case Helper.GDI.RecordType.META_RECTANGLE: {\n const rect = new Rect(reader);\n this._records.push((gdi) => {\n gdi.rectangle(rect, 0, 0);\n });\n break;\n }\n case Helper.GDI.RecordType.META_ROUNDRECT: {\n const rh = reader.readInt16();\n const rw = reader.readInt16();\n const rect = new Rect(reader);\n this._records.push((gdi) => {\n gdi.rectangle(rect, rw, rh);\n });\n break;\n }\n case Helper.GDI.RecordType.META_LINETO: {\n const y = reader.readInt16();\n const x = reader.readInt16();\n this._records.push((gdi) => {\n gdi.lineTo(x, y);\n });\n break;\n }\n case Helper.GDI.RecordType.META_MOVETO: {\n const y = reader.readInt16();\n const x = reader.readInt16();\n this._records.push((gdi) => {\n gdi.moveTo(x, y);\n });\n break;\n }\n case Helper.GDI.RecordType.META_TEXTOUT: {\n const len = reader.readInt16();\n if (len > 0) {\n const text = reader.readString(len);\n reader.skip(len % 2);\n const y = reader.readInt16();\n const x = reader.readInt16();\n this._records.push((gdi) => {\n gdi.textOut(x, y, text);\n });\n }\n break;\n }\n case Helper.GDI.RecordType.META_EXTTEXTOUT: {\n const y = reader.readInt16();\n const x = reader.readInt16();\n const len = reader.readInt16();\n const fwOpts = reader.readUint16();\n\n let hasRect = null;\n let hasDx = null;\n if (size * 2 === 14 + len + len % 2) {\n hasRect = false;\n hasDx = false;\n }\n if (size * 2 === 14 + 8 + len + len % 2) {\n hasRect = true;\n hasDx = false;\n }\n if (size * 2 === 14 + len + len % 2 + len * 2) {\n hasRect = false;\n hasDx = true;\n }\n if (size * 2 === 14 + 8 + len + len % 2 + len * 2) {\n hasRect = true;\n hasDx = true;\n }\n\n const rect = hasRect ? new Rect(reader) : null;\n if (len > 0) {\n const text = reader.readString(len);\n reader.skip(len % 2);\n\n const dx: number[] = [];\n if (hasDx) {\n for (let i = 0; i < text.length; i++) {\n dx.push(reader.readInt16());\n }\n }\n\n this._records.push((gdi) => {\n gdi.extTextOut(x, y, text, fwOpts, rect, dx);\n });\n }\n break;\n }\n case Helper.GDI.RecordType.META_EXCLUDECLIPRECT: {\n const rect = new Rect(reader);\n this._records.push((gdi) => {\n gdi.excludeClipRect(rect);\n });\n break;\n }\n case Helper.GDI.RecordType.META_INTERSECTCLIPRECT: {\n const rect = new Rect(reader);\n this._records.push((gdi) => {\n gdi.intersectClipRect(rect);\n });\n break;\n }\n case Helper.GDI.RecordType.META_POLYGON: {\n let cnt = reader.readInt16();\n const points: PointS[] = [];\n while (cnt > 0) {\n points.push(new PointS(reader));\n cnt--;\n }\n this._records.push((gdi) => {\n gdi.polygon(points, true);\n });\n break;\n }\n case Helper.GDI.RecordType.META_SETPOLYFILLMODE: {\n const polyfillmode = reader.readUint16();\n this._records.push((gdi) => {\n gdi.setPolyFillMode(polyfillmode);\n });\n break;\n }\n case Helper.GDI.RecordType.META_POLYPOLYGON: {\n const cnt = reader.readUint16();\n const polygonsPtCnts = [];\n for (let i = 0; i < cnt; i++) {\n polygonsPtCnts.push(reader.readUint16());\n }\n\n const polygons: PointS[][] = [];\n for (let i = 0; i < cnt; i++) {\n const ptCnt = polygonsPtCnts[i];\n\n const p = [];\n for (let ip = 0; ip < ptCnt; ip++) {\n p.push(new PointS(reader));\n }\n polygons.push(p);\n }\n this._records.push((gdi) => {\n gdi.polyPolygon(polygons);\n });\n break;\n }\n case Helper.GDI.RecordType.META_POLYLINE: {\n let cnt = reader.readInt16();\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(points);\n });\n break;\n }\n case Helper.GDI.RecordType.META_ELLIPSE: {\n const rect = new Rect(reader);\n this._records.push((gdi) => {\n gdi.ellipse(rect);\n });\n break;\n }\n case Helper.GDI.RecordType.META_CREATEPALETTE: {\n const palette = new Palette(reader);\n this._records.push((gdi) => {\n gdi.createPalette(palette);\n });\n break;\n }\n case Helper.GDI.RecordType.META_CREATEREGION: {\n const region = new Region(reader);\n this._records.push((gdi) => {\n gdi.createRegion(region);\n });\n break;\n }\n case Helper.GDI.RecordType.META_CREATEPATTERNBRUSH: {\n const datalength = size * 2 - (reader.pos - curpos);\n const patternBitmap = new PatternBitmap16(reader, datalength);\n const brush = new Brush(reader, datalength, patternBitmap);\n this._records.push((gdi) => {\n gdi.createPatternBrush(brush);\n });\n break;\n }\n case Helper.GDI.RecordType.META_OFFSETCLIPRGN: {\n const offY = reader.readInt16();\n const offX = reader.readInt16();\n this._records.push((gdi) => {\n gdi.offsetClipRgn(offX, offY);\n });\n break;\n }\n case Helper.GDI.RecordType.META_REALIZEPALETTE:\n case Helper.GDI.RecordType.META_SETPALENTRIES:\n case Helper.GDI.RecordType.META_SETROP2:\n case Helper.GDI.RecordType.META_SETRELABS:\n case Helper.GDI.RecordType.META_SETTEXTCHAREXTRA:\n case Helper.GDI.RecordType.META_RESIZEPALETTE:\n case Helper.GDI.RecordType.META_SETLAYOUT:\n case Helper.GDI.RecordType.META_FILLREGION:\n case Helper.GDI.RecordType.META_SETMAPPERFLAGS:\n case Helper.GDI.RecordType.META_SETTEXTJUSTIFICATION:\n case Helper.GDI.RecordType.META_SCALEWINDOWEXT:\n case Helper.GDI.RecordType.META_SCALEVIEWPORTEXT:\n case Helper.GDI.RecordType.META_FLOODFILL:\n case Helper.GDI.RecordType.META_FRAMEREGION:\n case Helper.GDI.RecordType.META_ANIMATEPALETTE:\n case Helper.GDI.RecordType.META_EXTFLOODFILL:\n case Helper.GDI.RecordType.META_SETPIXEL:\n case Helper.GDI.RecordType.META_PATBLT:\n case Helper.GDI.RecordType.META_PIE:\n case Helper.GDI.RecordType.META_STRETCHBLT:\n case Helper.GDI.RecordType.META_INVERTREGION:\n case Helper.GDI.RecordType.META_PAINTREGION:\n case Helper.GDI.RecordType.META_ARC:\n case Helper.GDI.RecordType.META_CHORD:\n case Helper.GDI.RecordType.META_BITBLT:\n case Helper.GDI.RecordType.META_SETDIBTODEV:\n case Helper.GDI.RecordType.META_DIBBITBLT:\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(\"[WMF] \" + recordName + \" record (0x\" + type.toString(16) + \") at offset 0x\"\n + curpos.toString(16) + \" with \" + (size * 2) + \" bytes\");\n break;\n }\n }\n\n curpos += size * 2;\n }\n\n if (!all) {\n throw new WMFJSError(\"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"],"sourceRoot":""}