dxf-parser
Version:
Parse dxf files into a readable, logical js object.
1 lines • 25.5 kB
JavaScript
!function(e,a){"object"==typeof exports&&"object"==typeof module?module.exports=a():"function"==typeof define&&define.amd?define([],a):"object"==typeof exports?exports.DxfParser=a():e.DxfParser=a()}("undefined"!=typeof self?self:this,(function(){return(()=>{var e={43:function(e,a,t){var r,n;!function(o,c){"use strict";void 0===(n="function"==typeof(r=function(){var e=function(){},a="undefined",t=typeof window!==a&&typeof window.navigator!==a&&/Trident\/|MSIE /.test(window.navigator.userAgent),r=["trace","debug","info","warn","error"];function n(e,a){var t=e[a];if("function"==typeof t.bind)return t.bind(e);try{return Function.prototype.bind.call(t,e)}catch(a){return function(){return Function.prototype.apply.apply(t,[e,arguments])}}}function o(){console.log&&(console.log.apply?console.log.apply(console,arguments):Function.prototype.apply.apply(console.log,[console,arguments])),console.trace&&console.trace()}function c(r){return"debug"===r&&(r="log"),typeof console!==a&&("trace"===r&&t?o:void 0!==console[r]?n(console,r):void 0!==console.log?n(console,"log"):e)}function s(a,t){for(var n=0;n<r.length;n++){var o=r[n];this[o]=n<a?e:this.methodFactory(o,a,t)}this.log=this.debug}function i(e,t,r){return function(){typeof console!==a&&(s.call(this,t,r),this[e].apply(this,arguments))}}function l(e,a,t){return c(e)||i.apply(this,arguments)}function u(e,t,n){var o,c=this,i="loglevel";function u(){var e;if(typeof window!==a&&i){try{e=window.localStorage[i]}catch(e){}if(typeof e===a)try{var t=window.document.cookie,r=t.indexOf(encodeURIComponent(i)+"=");-1!==r&&(e=/^([^;]+)/.exec(t.slice(r))[1])}catch(e){}return void 0===c.levels[e]&&(e=void 0),e}}"string"==typeof e?i+=":"+e:"symbol"==typeof e&&(i=void 0),c.name=e,c.levels={TRACE:0,DEBUG:1,INFO:2,WARN:3,ERROR:4,SILENT:5},c.methodFactory=n||l,c.getLevel=function(){return o},c.setLevel=function(t,n){if("string"==typeof t&&void 0!==c.levels[t.toUpperCase()]&&(t=c.levels[t.toUpperCase()]),!("number"==typeof t&&t>=0&&t<=c.levels.SILENT))throw"log.setLevel() called with invalid level: "+t;if(o=t,!1!==n&&function(e){var t=(r[e]||"silent").toUpperCase();if(typeof window!==a&&i){try{return void(window.localStorage[i]=t)}catch(e){}try{window.document.cookie=encodeURIComponent(i)+"="+t+";"}catch(e){}}}(t),s.call(c,t,e),typeof console===a&&t<c.levels.SILENT)return"No console available for logging"},c.setDefaultLevel=function(e){u()||c.setLevel(e,!1)},c.enableAll=function(e){c.setLevel(c.levels.TRACE,e)},c.disableAll=function(e){c.setLevel(c.levels.SILENT,e)};var v=u();null==v&&(v=null==t?"WARN":t),c.setLevel(v,!1)}var v=new u,d={};v.getLogger=function(e){if("symbol"!=typeof e&&"string"!=typeof e||""===e)throw new TypeError("You must supply a name when creating a logger.");var a=d[e];return a||(a=d[e]=new u(e,v.getLevel(),v.methodFactory)),a};var b=typeof window!==a?window.log:void 0;return v.noConflict=function(){return typeof window!==a&&window.log===v&&(window.log=b),v},v.getLoggers=function(){return d},v.default=v,v})?r.call(a,t,a,e):r)||(e.exports=n)}()}},a={};function t(r){var n=a[r];if(void 0!==n)return n.exports;var o=a[r]={exports:{}};return e[r].call(o.exports,o,o.exports,t),o.exports}t.n=e=>{var a=e&&e.__esModule?()=>e.default:()=>e;return t.d(a,{a}),a},t.d=(e,a)=>{for(var r in a)t.o(a,r)&&!t.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:a[r]})},t.o=(e,a)=>Object.prototype.hasOwnProperty.call(e,a);var r={};return(()=>{"use strict";function e(e){this._pointer=0,this._data=e,this._eof=!1}function a(e,a){return e<=9?a:e>=10&&e<=59?parseFloat(a):e>=60&&e<=99?parseInt(a):e>=100&&e<=109?a:e>=110&&e<=149?parseFloat(a):e>=160&&e<=179?parseInt(a):e>=210&&e<=239?parseFloat(a):e>=270&&e<=289?parseInt(a):e>=290&&e<=299?function(e){if("0"===e)return!1;if("1"===e)return!0;throw TypeError("String '"+e+"' cannot be cast to Boolean type")}(a):e>=300&&e<=369?a:e>=370&&e<=389?parseInt(a):e>=390&&e<=399?a:e>=400&&e<=409?parseInt(a):e>=410&&e<=419?a:e>=420&&e<=429?parseInt(a):e>=430&&e<=439?a:e>=440&&e<=459?parseInt(a):e>=460&&e<=469?parseFloat(a):e>=470&&e<=481||999===e||e>=1e3&&e<=1009?a:e>=1010&&e<=1059?parseFloat(a):e>=1060&&e<=1071?parseInt(a):(console.log("WARNING: Group code does not have a defined type: %j",{code:e,value:a}),a)}t.d(r,{default:()=>D}),e.prototype.next=function(){var e;if(!this.hasNext())throw this._eof?new Error("Cannot call 'next' after EOF group has been read"):new Error("Unexpected end of input: EOF group not read before end of file. Ended on code "+this._data[this._pointer]);return e={code:parseInt(this._data[this._pointer])},this._pointer++,e.value=a(e.code,this._data[this._pointer].trim()),this._pointer++,0===e.code&&"EOF"===e.value&&(this._eof=!0),this.lastReadGroup=e,e},e.prototype.peek=function(){if(!this.hasNext())throw this._eof?new Error("Cannot call 'next' after EOF group has been read"):new Error("Unexpected end of input: EOF group not read before end of file. Ended on code "+this._data[this._pointer]);var e={code:parseInt(this._data[this._pointer])};return e.value=a(e.code,this._data[this._pointer+1].trim()),e},e.prototype.rewind=function(e){e=e||1,this._pointer=this._pointer-2*e},e.prototype.hasNext=function(){return!(this._eof||this._pointer>this._data.length-2)},e.prototype.isEOF=function(){return this._eof};const n=[0,16711680,16776960,65280,65535,255,16711935,16777215,8421504,12632256,16711680,16744319,13369344,13395558,10027008,10046540,8323072,8339263,4980736,4990502,16727808,16752511,13382400,13401958,10036736,10051404,8331008,8343359,4985600,4992806,16744192,16760703,13395456,13408614,10046464,10056268,8339200,8347455,4990464,4995366,16760576,16768895,13408512,13415014,10056192,10061132,8347392,8351551,4995328,4997670,16776960,16777087,13421568,13421670,10000384,10000460,8355584,8355647,5000192,5000230,12582656,14679935,10079232,11717734,7510016,8755276,6258432,7307071,3755008,4344870,8388352,12582783,6736896,10079334,5019648,7510092,4161280,6258495,2509824,3755046,4194048,10485631,3394560,8375398,2529280,6264908,2064128,5209919,1264640,3099686,65280,8388479,52224,6736998,38912,5019724,32512,4161343,19456,2509862,65343,8388511,52275,6737023,38950,5019743,32543,4161359,19475,2509871,65407,8388543,52326,6737049,38988,5019762,32575,4161375,19494,2509881,65471,8388575,52377,6737074,39026,5019781,32607,4161391,19513,2509890,65535,8388607,52428,6737100,39064,5019800,32639,4161407,19532,2509900,49151,8380415,39372,6730444,29336,5014936,24447,4157311,14668,2507340,32767,8372223,26316,6724044,19608,5010072,16255,4153215,9804,2505036,16383,8364031,13260,6717388,9880,5005208,8063,4149119,4940,2502476,255,8355839,204,6710988,152,5000344,127,4145023,76,2500172,4129023,10452991,3342540,8349388,2490520,6245528,2031743,5193599,1245260,3089996,8323327,12550143,6684876,10053324,4980888,7490712,4128895,6242175,2490444,3745356,12517631,14647295,10027212,11691724,7471256,8735896,6226047,7290751,3735628,4335180,16711935,16744447,13369548,13395660,9961624,9981080,8323199,8339327,4980812,4990540,16711871,16744415,13369497,13395634,9961586,9981061,8323167,8339311,4980793,4990530,16711807,16744383,13369446,13395609,9961548,9981042,8323135,8339295,4980774,4990521,16711743,16744351,13369395,13395583,9961510,9981023,8323103,8339279,4980755,4990511,3355443,5987163,8684676,11382189,14079702,16777215];function o(e){var a={};e.rewind();var t=e.next(),r=t.code;if(a.x=t.value,r+=10,(t=e.next()).code!=r)throw new Error("Expected code for point value to be "+r+" but got "+t.code+".");return a.y=t.value,r+=10,(t=e.next()).code!=r?(e.rewind(),a):(a.z=t.value,a)}function c(e,a,t){switch(a.code){case 0:e.type=a.value;break;case 5:e.handle=a.value;break;case 6:e.lineType=a.value;break;case 8:e.layer=a.value;break;case 48:e.lineTypeScale=a.value;break;case 60:e.visible=0===a.value;break;case 62:e.colorIndex=a.value,e.color=(r=Math.abs(a.value),n[r]);break;case 67:e.inPaperSpace=0!==a.value;break;case 100:break;case 101:for(;0!=a.code;)a=t.next();t.rewind();break;case 330:e.ownerHandle=a.value;break;case 347:e.materialObjectHandle=a.value;break;case 370:e.lineweight=a.value;break;case 420:e.color=a.value;break;case 1e3:e.extendedData=e.extendedData||{},e.extendedData.customStrings=e.extendedData.customStrings||[],e.extendedData.customStrings.push(a.value);break;case 1001:e.extendedData=e.extendedData||{},e.extendedData.applicationName=a.value;break;default:return!1}var r;return!0}function s(){}function i(e,a){var t,r=[],n=!1,o=!1;for(t=0;t<=4;t++){for(var c={};"EOF"!==a&&0!==a.code&&!o;){switch(a.code){case 10:case 11:case 12:case 13:if(n){o=!0;continue}c.x=a.value,n=!0;break;case 20:case 21:case 22:case 23:c.y=a.value;break;case 30:case 31:case 32:case 33:c.z=a.value;break;default:return r}a=e.next()}r.push(c),n=!1,o=!1}return e.rewind(),r}function l(){}function u(){}function v(){}function d(){}function b(){}function p(){}function f(){}function k(){}function y(e,a){if(!e||e<=0)throw Error("n must be greater than 0 verticies");var t,r=[],n=!1,o=!1,c=a.lastReadGroup;for(t=0;t<e;t++){for(var s={};"EOF"!==c&&0!==c.code&&!o;){switch(c.code){case 10:if(n){o=!0;continue}s.x=c.value,n=!0;break;case 20:s.y=c.value;break;case 30:s.z=c.value;break;case 40:s.startWidth=c.value;break;case 41:s.endWidth=c.value;break;case 42:0!=c.value&&(s.bulge=c.value);break;default:return a.rewind(),n&&r.push(s),a.rewind(),r}c=a.next()}r.push(s),n=!1,o=!1}return a.rewind(),r}function x(){}function h(){}function g(){}function E(){}function w(e,a){var t={type:a.value};for(a=e.next();"EOF"!=a&&0!=a.code;)c(t,a,e),a=e.next();return t}function m(){}function F(){}function N(){}s.ForEntityName="3DFACE",s.prototype.parseEntity=function(e,a){var t={type:a.value,vertices:[]};for(a=e.next();"EOF"!==a&&0!==a.code;){switch(a.code){case 70:t.shape=1==(1&a.value),t.hasContinuousLinetypePattern=128==(128&a.value);break;case 10:t.vertices=i(e,a),a=e.lastReadGroup;break;default:c(t,a,e)}a=e.next()}return t},l.ForEntityName="ARC",l.prototype.parseEntity=function(e,a){var t;for(t={type:a.value},a=e.next();"EOF"!==a&&0!==a.code;){switch(a.code){case 10:t.center=o(e);break;case 40:t.radius=a.value;break;case 50:t.startAngle=Math.PI/180*a.value;break;case 51:t.endAngle=Math.PI/180*a.value,t.angleLength=t.endAngle-t.startAngle;break;default:c(t,a,e)}a=e.next()}return t},u.ForEntityName="ATTDEF",u.prototype.parseEntity=function(e,a){var t={type:a.value,scale:1,textStyle:"STANDARD"};for(a=e.next();"EOF"!==a&&0!==a.code;){switch(a.code){case 1:t.text=a.value;break;case 2:t.tag=a.value;break;case 3:t.prompt=a.value;break;case 7:t.textStyle=a.value;break;case 10:t.startPoint=o(e);break;case 11:t.endPoint=o(e);break;case 39:t.thickness=a.value;break;case 40:t.textHeight=a.value;break;case 41:t.scale=a.value;break;case 50:t.rotation=a.value;break;case 51:t.obliqueAngle=a.value;break;case 70:t.invisible=!!(1&a.value),t.constant=!!(2&a.value),t.verificationRequired=!!(4&a.value),t.preset=!!(8&a.value);break;case 71:t.backwards=!!(2&a.value),t.mirrored=!!(4&a.value);break;case 72:t.horizontalJustification=a.value;break;case 73:t.fieldLength=a.value;break;case 74:t.verticalJustification=a.value;break;case 100:break;case 210:t.extrusionDirectionX=a.value;break;case 220:t.extrusionDirectionY=a.value;break;case 230:t.extrusionDirectionZ=a.value;break;default:c(t,a,e)}a=e.next()}return t},v.ForEntityName="CIRCLE",v.prototype.parseEntity=function(e,a){var t,r;for(t={type:a.value},a=e.next();"EOF"!==a&&0!==a.code;){switch(a.code){case 10:t.center=o(e);break;case 40:t.radius=a.value;break;case 50:t.startAngle=Math.PI/180*a.value;break;case 51:(r=Math.PI/180*a.value)<t.startAngle?t.angleLength=r+2*Math.PI-t.startAngle:t.angleLength=r-t.startAngle,t.endAngle=r;break;default:c(t,a,e)}a=e.next()}return t},d.ForEntityName="DIMENSION",d.prototype.parseEntity=function(e,a){var t;for(t={type:a.value},a=e.next();"EOF"!==a&&0!==a.code;){switch(a.code){case 2:t.block=a.value;break;case 10:t.anchorPoint=o(e);break;case 11:t.middleOfText=o(e);break;case 12:t.insertionPoint=o(e);break;case 13:t.linearOrAngularPoint1=o(e);break;case 14:t.linearOrAngularPoint2=o(e);break;case 15:t.diameterOrRadiusPoint=o(e);break;case 16:t.arcPoint=o(e);break;case 70:t.dimensionType=a.value;break;case 71:t.attachmentPoint=a.value;break;case 42:t.actualMeasurement=a.value;break;case 1:t.text=a.value;break;case 50:t.angle=a.value;break;default:c(t,a,e)}a=e.next()}return t},b.ForEntityName="ELLIPSE",b.prototype.parseEntity=function(e,a){var t;for(t={type:a.value},a=e.next();"EOF"!==a&&0!==a.code;){switch(a.code){case 10:t.center=o(e);break;case 11:t.majorAxisEndPoint=o(e);break;case 40:t.axisRatio=a.value;break;case 41:t.startAngle=a.value;break;case 42:t.endAngle=a.value;break;case 2:t.name=a.value;break;default:c(t,a,e)}a=e.next()}return t},p.ForEntityName="INSERT",p.prototype.parseEntity=function(e,a){var t;for(t={type:a.value},a=e.next();"EOF"!==a&&0!==a.code;){switch(a.code){case 2:t.name=a.value;break;case 41:t.xScale=a.value;break;case 42:t.yScale=a.value;break;case 43:t.zScale=a.value;break;case 10:t.position=o(e);break;case 50:t.rotation=a.value;break;case 70:t.columnCount=a.value;break;case 71:t.rowCount=a.value;break;case 44:t.columnSpacing=a.value;break;case 45:t.rowSpacing=a.value;break;case 210:t.extrusionDirection=o(e);break;default:c(t,a,e)}a=e.next()}return t},f.ForEntityName="LINE",f.prototype.parseEntity=function(e,a){var t={type:a.value,vertices:[]};for(a=e.next();"EOF"!==a&&0!==a.code;){switch(a.code){case 10:t.vertices.unshift(o(e));break;case 11:t.vertices.push(o(e));break;case 210:t.extrusionDirection=o(e);break;case 100:break;default:c(t,a,e)}a=e.next()}return t},k.ForEntityName="LWPOLYLINE",k.prototype.parseEntity=function(e,a){var t={type:a.value,vertices:[]},r=0;for(a=e.next();"EOF"!==a&&0!==a.code;){switch(a.code){case 38:t.elevation=a.value;break;case 39:t.depth=a.value;break;case 70:t.shape=1==(1&a.value),t.hasContinuousLinetypePattern=128==(128&a.value);break;case 90:r=a.value;break;case 10:t.vertices=y(r,e);break;case 43:0!==a.value&&(t.width=a.value);break;case 210:t.extrusionDirectionX=a.value;break;case 220:t.extrusionDirectionY=a.value;break;case 230:t.extrusionDirectionZ=a.value;break;default:c(t,a,e)}a=e.next()}return t},x.ForEntityName="MTEXT",x.prototype.parseEntity=function(e,a){var t={type:a.value};for(a=e.next();"EOF"!==a&&0!==a.code;){switch(a.code){case 3:case 1:t.text?t.text+=a.value:t.text=a.value;break;case 10:t.position=o(e);break;case 11:t.directionVector=o(e);break;case 40:t.height=a.value;break;case 41:t.width=a.value;break;case 50:t.rotation=a.value;break;case 71:t.attachmentPoint=a.value;break;case 72:t.drawingDirection=a.value;break;default:c(t,a,e)}a=e.next()}return t},h.ForEntityName="POINT",h.prototype.parseEntity=function(e,a){var t;for(t={type:a.value},a=e.next();"EOF"!==a&&0!==a.code;){switch(a.code){case 10:t.position=o(e);break;case 39:t.thickness=a.value;break;case 210:t.extrusionDirection=o(e);break;case 100:break;default:c(t,a,e)}a=e.next()}return t},g.ForEntityName="VERTEX",g.prototype.parseEntity=function(e,a){var t={type:a.value};for(a=e.next();"EOF"!==a&&0!==a.code;){switch(a.code){case 10:t.x=a.value;break;case 20:t.y=a.value;break;case 30:t.z=a.value;break;case 40:case 41:break;case 42:0!=a.value&&(t.bulge=a.value);break;case 70:t.curveFittingVertex=0!=(1&a.value),t.curveFitTangent=0!=(2&a.value),t.splineVertex=0!=(8&a.value),t.splineControlPoint=0!=(16&a.value),t.threeDPolylineVertex=0!=(32&a.value),t.threeDPolylineMesh=0!=(64&a.value),t.polyfaceMeshVertex=0!=(128&a.value);break;case 50:break;case 71:t.faceA=a.value;break;case 72:t.faceB=a.value;break;case 73:t.faceC=a.value;break;case 74:t.faceD=a.value;break;default:c(t,a,e)}a=e.next()}return t},E.ForEntityName="POLYLINE",E.prototype.parseEntity=function(e,a){var t={type:a.value,vertices:[]};for(a=e.next();"EOF"!==a&&0!==a.code;){switch(a.code){case 10:case 20:case 30:break;case 39:t.thickness=a.value;break;case 40:case 41:break;case 70:t.shape=0!=(1&a.value),t.includesCurveFitVertices=0!=(2&a.value),t.includesSplineFitVertices=0!=(4&a.value),t.is3dPolyline=0!=(8&a.value),t.is3dPolygonMesh=0!=(16&a.value),t.is3dPolygonMeshClosed=0!=(32&a.value),t.isPolyfaceMesh=0!=(64&a.value),t.hasContinuousLinetypePattern=0!=(128&a.value);break;case 71:case 72:case 73:case 74:case 75:break;case 210:t.extrusionDirection=o(e);break;default:c(t,a,e)}a=e.next()}return t.vertices=function(e,a){for(var t=new g,r=[];!e.isEOF();)if(0===a.code)if("VERTEX"===a.value)r.push(t.parseEntity(e,a)),a=e.lastReadGroup;else if("SEQEND"===a.value){w(e,a);break}return r}(e,a),t},m.ForEntityName="SOLID",m.prototype.parseEntity=function(e,a){var t;for((t={type:a.value}).points=[],a=e.next();"EOF"!==a&&0!==a.code;){switch(a.code){case 10:t.points[0]=o(e);break;case 11:t.points[1]=o(e);break;case 12:t.points[2]=o(e);break;case 13:t.points[3]=o(e);break;case 210:t.extrusionDirection=o(e);break;default:c(t,a,e)}a=e.next()}return t},F.ForEntityName="SPLINE",F.prototype.parseEntity=function(e,a){var t;for(t={type:a.value},a=e.next();"EOF"!==a&&0!==a.code;){switch(a.code){case 10:t.controlPoints||(t.controlPoints=[]),t.controlPoints.push(o(e));break;case 11:t.fitPoints||(t.fitPoints=[]),t.fitPoints.push(o(e));break;case 12:t.startTangent=o(e);break;case 13:t.endTangent=o(e);break;case 40:t.knotValues||(t.knotValues=[]),t.knotValues.push(a.value);break;case 70:0!=(1&a.value)&&(t.closed=!0),0!=(2&a.value)&&(t.periodic=!0),0!=(4&a.value)&&(t.rational=!0),0!=(8&a.value)&&(t.planar=!0),0!=(16&a.value)&&(t.planar=!0,t.linear=!0);break;case 71:t.degreeOfSplineCurve=a.value;break;case 72:t.numberOfKnots=a.value;break;case 73:t.numberOfControlPoints=a.value;break;case 74:t.numberOfFitPoints=a.value;break;case 210:t.normalVector=o(e);break;default:c(t,a,e)}a=e.next()}return t},N.ForEntityName="TEXT",N.prototype.parseEntity=function(e,a){var t;for(t={type:a.value},a=e.next();"EOF"!==a&&0!==a.code;){switch(a.code){case 10:t.startPoint=o(e);break;case 11:t.endPoint=o(e);break;case 40:t.textHeight=a.value;break;case 41:t.xScale=a.value;break;case 50:t.rotation=a.value;break;case 1:t.text=a.value;break;case 72:t.halign=a.value;break;case 73:t.valign=a.value;break;default:c(t,a,e)}a=e.next()}return t};var P=t(43),O=t.n(P);function T(){var e;this._entityHandlers={},(e=this).registerEntityHandler(s),e.registerEntityHandler(l),e.registerEntityHandler(u),e.registerEntityHandler(v),e.registerEntityHandler(d),e.registerEntityHandler(b),e.registerEntityHandler(p),e.registerEntityHandler(f),e.registerEntityHandler(k),e.registerEntityHandler(x),e.registerEntityHandler(h),e.registerEntityHandler(E),e.registerEntityHandler(m),e.registerEntityHandler(F),e.registerEntityHandler(N)}function L(e){O().debug("unhandled group "+S(e))}function S(e){return e.code+":"+e.value}O().setLevel("error"),T.prototype.parse=function(e,a){throw new Error("read() not implemented. Use readSync()")},T.prototype.registerEntityHandler=function(e){var a=new e;this._entityHandlers[e.ForEntityName]=a},T.prototype.parseSync=function(e){return"string"==typeof e?this._parse(e):(console.error("Cannot read dxf source of type `"+typeof e),null)},T.prototype.parseStream=function(e,a){var t="",r=this;e.on("data",(function(e){t+=e})),e.on("end",(function(){try{var e=r._parse(t)}catch(e){return a(e)}a(null,e)})),e.on("error",(function(e){a(e)}))},T.prototype._parse=function(a){var t,r,o={},c=0,s=a.split(/\r\n|\r|\n/g);if(!(t=new e(s)).hasNext())throw Error("Empty file");var i=this,l=function(e,a){return r.code===e&&r.value===a},u=function(){var e=null,a=null,n={};for(r=t.next();;){if(l(0,"ENDSEC")){e&&(n[e]=a);break}9===r.code?(e&&(n[e]=a),e=r.value):10===r.code?a={x:r.value}:20===r.code?a.y=r.value:30===r.code?a.z=r.value:a=r.value,r=t.next()}return r=t.next(),n},v=function(){var e,a={};for(r=t.next();"EOF"!==r.value&&!l(0,"ENDSEC");)l(0,"BLOCK")?(O().debug("block {"),e=d(),O().debug("}"),h(e),e.name?a[e.name]=e:O().error('block with handle "'+e.handle+'" is missing a name.')):(L(r),r=t.next());return a},d=function(){var e={};for(r=t.next();"EOF"!==r.value;){switch(r.code){case 1:e.xrefPath=r.value,r=t.next();break;case 2:e.name=r.value,r=t.next();break;case 3:e.name2=r.value,r=t.next();break;case 5:e.handle=r.value,r=t.next();break;case 8:e.layer=r.value,r=t.next();break;case 10:e.position=x(),r=t.next();break;case 67:e.paperSpace=!(!r.value||1!=r.value),r=t.next();break;case 70:0!=r.value&&(e.type=r.value),r=t.next();break;case 100:r=t.next();break;case 330:e.ownerHandle=r.value,r=t.next();break;case 0:if("ENDBLK"==r.value)break;e.entities=y(!0);break;default:L(r),r=t.next()}if(l(0,"ENDBLK")){r=t.next();break}}return e},b=function(){var e={};for(r=t.next();"EOF"!==r.value&&!l(0,"ENDSEC");)l(0,"TABLE")?(r=t.next(),k[r.value]?(O().debug(r.value+" Table {"),e[k[r.value].tableName]=f(),O().debug("}")):O().debug("Unhandled Table "+r.value)):r=t.next();return r=t.next(),e};const p="ENDTAB";var f=function(){var e,a=k[r.value],n={},o=0;for(r=t.next();!l(0,p);)switch(r.code){case 5:n.handle=r.value,r=t.next();break;case 330:n.ownerHandle=r.value,r=t.next();break;case 100:"AcDbSymbolTable"===r.value||L(r),r=t.next();break;case 70:o=r.value,r=t.next();break;case 0:r.value===a.dxfSymbolName?n[a.tableRecordsProperty]=a.parseTableRecords():(L(r),r=t.next());break;default:L(r),r=t.next()}var c=n[a.tableRecordsProperty];return c&&(c.constructor===Array?e=c.length:"object"==typeof c&&(e=Object.keys(c).length),o!==e&&O().warn("Parsed "+e+" "+a.dxfSymbolName+"'s but expected "+o)),r=t.next(),n},k={VPORT:{tableRecordsProperty:"viewPorts",tableName:"viewPort",dxfSymbolName:"VPORT",parseTableRecords:function(){var e=[],a={};for(O().debug("ViewPort {"),r=t.next();!l(0,p);)switch(r.code){case 2:a.name=r.value,r=t.next();break;case 10:a.lowerLeftCorner=x(),r=t.next();break;case 11:a.upperRightCorner=x(),r=t.next();break;case 12:a.center=x(),r=t.next();break;case 13:a.snapBasePoint=x(),r=t.next();break;case 14:a.snapSpacing=x(),r=t.next();break;case 15:a.gridSpacing=x(),r=t.next();break;case 16:a.viewDirectionFromTarget=x(),r=t.next();break;case 17:a.viewTarget=x(),r=t.next();break;case 42:a.lensLength=r.value,r=t.next();break;case 43:a.frontClippingPlane=r.value,r=t.next();break;case 44:a.backClippingPlane=r.value,r=t.next();break;case 45:a.viewHeight=r.value,r=t.next();break;case 50:a.snapRotationAngle=r.value,r=t.next();break;case 51:a.viewTwistAngle=r.value,r=t.next();break;case 79:a.orthographicType=r.value,r=t.next();break;case 110:a.ucsOrigin=x(),r=t.next();break;case 111:a.ucsXAxis=x(),r=t.next();break;case 112:a.ucsYAxis=x(),r=t.next();break;case 110:a.ucsOrigin=x(),r=t.next();break;case 281:a.renderMode=r.value,r=t.next();break;case 281:a.defaultLightingType=r.value,r=t.next();break;case 292:a.defaultLightingOn=r.value,r=t.next();break;case 330:a.ownerHandle=r.value,r=t.next();break;case 63:case 421:case 431:a.ambientColor=r.value,r=t.next();break;case 0:"VPORT"===r.value&&(O().debug("}"),e.push(a),O().debug("ViewPort {"),a={},r=t.next());break;default:L(r),r=t.next()}return O().debug("}"),e.push(a),e}},LTYPE:{tableRecordsProperty:"lineTypes",tableName:"lineType",dxfSymbolName:"LTYPE",parseTableRecords:function(){var e,a,n={},o={};for(O().debug("LType {"),r=t.next();!l(0,"ENDTAB");)switch(r.code){case 2:o.name=r.value,e=r.value,r=t.next();break;case 3:o.description=r.value,r=t.next();break;case 73:(a=r.value)>0&&(o.pattern=[]),r=t.next();break;case 40:o.patternLength=r.value,r=t.next();break;case 49:o.pattern.push(r.value),r=t.next();break;case 0:O().debug("}"),a>0&&a!==o.pattern.length&&O().warn("lengths do not match on LTYPE pattern"),n[e]=o,o={},O().debug("LType {"),r=t.next();break;default:r=t.next()}return O().debug("}"),n[e]=o,n}},LAYER:{tableRecordsProperty:"layers",tableName:"layer",dxfSymbolName:"LAYER",parseTableRecords:function(){var e,a,o={},c={};for(O().debug("Layer {"),r=t.next();!l(0,"ENDTAB");)switch(r.code){case 2:c.name=r.value,e=r.value,r=t.next();break;case 62:c.visible=r.value>=0,c.colorIndex=Math.abs(r.value),c.color=(a=c.colorIndex,n[a]),r=t.next();break;case 70:c.frozen=0!=(1&r.value)||0!=(2&r.value),r=t.next();break;case 0:"LAYER"===r.value&&(O().debug("}"),o[e]=c,O().debug("Layer {"),c={},e=void 0,r=t.next());break;default:L(r),r=t.next()}return O().debug("}"),o[e]=c,o}}},y=function(e){var a=[],n=e?"ENDBLK":"ENDSEC";for(e||(r=t.next());;)if(0===r.code){if(r.value===n)break;var o,c=i._entityHandlers[r.value];if(null==c){O().warn("Unhandled entity "+r.value),r=t.next();continue}O().debug(r.value+" {"),o=c.parseEntity(t,r),r=t.lastReadGroup,O().debug("}"),h(o),a.push(o)}else r=t.next();return"ENDSEC"==n&&(r=t.next()),a},x=function(){var e={},a=r.code;if(e.x=r.value,a+=10,(r=t.next()).code!=a)throw new Error("Expected code for point value to be "+a+" but got "+r.code+".");return e.y=r.value,a+=10,(r=t.next()).code!=a?(t.rewind(),e):(e.z=r.value,e)},h=function(e){if(!e)throw new TypeError("entity cannot be undefined or null");e.handle||(e.handle=c++)};return function(){for(r=t.next();!t.isEOF();)if(0===r.code&&"SECTION"===r.value){if(2!==(r=t.next()).code){console.error("Unexpected code %s after 0:SECTION",S(r)),r=t.next();continue}"HEADER"===r.value?(O().debug("> HEADER"),o.header=u(),O().debug("<")):"BLOCKS"===r.value?(O().debug("> BLOCKS"),o.blocks=v(),O().debug("<")):"ENTITIES"===r.value?(O().debug("> ENTITIES"),o.entities=y(!1),O().debug("<")):"TABLES"===r.value?(O().debug("> TABLES"),o.tables=b(),O().debug("<")):"EOF"===r.value?O().debug("EOF"):O().warn("Skipping section '%s'",r.value)}else r=t.next()}(),o};const D=T})(),r.default})()}));