"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports["default"] = void 0; var _logger = _interopRequireDefault(require("../util/logger")); var _point = _interopRequireDefault(require("./entity/point")); var _line = _interopRequireDefault(require("./entity/line")); var _lwpolyline = _interopRequireDefault(require("./entity/lwpolyline")); var _polyline = _interopRequireDefault(require("./entity/polyline")); var _vertex = _interopRequireDefault(require("./entity/vertex")); var _circle = _interopRequireDefault(require("./entity/circle")); var _arc = _interopRequireDefault(require("./entity/arc")); var _ellipse = _interopRequireDefault(require("./entity/ellipse")); var _spline = _interopRequireDefault(require("./entity/spline")); var _solid = _interopRequireDefault(require("./entity/solid")); var _mtext = _interopRequireDefault(require("./entity/mtext")); var _insert = _interopRequireDefault(require("./entity/insert")); var _threeDFace = _interopRequireDefault(require("./entity/threeDFace")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } var handlers = [_point["default"], _line["default"], _lwpolyline["default"], _polyline["default"], _vertex["default"], _circle["default"], _arc["default"], _ellipse["default"], _spline["default"], _solid["default"], _mtext["default"], _insert["default"], _threeDFace["default"]].reduce(function (acc, mod) { acc[mod.TYPE] = mod; return acc; }, {}); var _default = function _default(tuples) { var entities = []; var entityGroups = []; var currentEntityTuples; // First group them together for easy processing tuples.forEach(function (tuple) { var type = tuple[0]; if (type === 0) { currentEntityTuples = []; entityGroups.push(currentEntityTuples); } currentEntityTuples.push(tuple); }); var currentPolyline; entityGroups.forEach(function (tuples) { var entityType = tuples[0][1]; var contentTuples = tuples.slice(1); if (handlers[entityType] !== undefined) { var e = handlers[entityType].process(contentTuples); // "POLYLINE" cannot be parsed in isolation, it is followed by // N "VERTEX" entities and ended with a "SEQEND" entity. // Essentially we convert POLYLINE to LWPOLYLINE - the extra // vertex flags are not supported if (entityType === 'POLYLINE') { currentPolyline = e; entities.push(e); } else if (entityType === 'VERTEX') { if (currentPolyline) { currentPolyline.vertices.push(e); } else { _logger["default"].error('ignoring invalid VERTEX entity'); } } else if (entityType === 'SEQEND') { currentPolyline = undefined; } else { // All other entities entities.push(e); } } else { _logger["default"].warn('unsupported type in ENTITIES section:', entityType); } }); return entities; }; exports["default"] = _default;