@linkiez/dxf-renew 5.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (447) hide show
  1. package/.eslintignore +17 -0
  2. package/.eslintrc.json +61 -0
  3. package/.gitattributes +4 -0
  4. package/.github/instructions/project-en_US.instructions.md +352 -0
  5. package/.github/workflows/release.yml +110 -0
  6. package/.husky/commit-msg +4 -0
  7. package/.husky/pre-commit +1 -0
  8. package/.prettierignore +1 -0
  9. package/.prettierrc.json +6 -0
  10. package/.releaserc.json +76 -0
  11. package/.travis.yml +6 -0
  12. package/.yarn/install-state.gz +0 -0
  13. package/.yarnrc.yml +1 -0
  14. package/CHANGELOG.md +134 -0
  15. package/CONTRIBUTING.md +271 -0
  16. package/LICENSE +21 -0
  17. package/PLAN.md +517 -0
  18. package/README.md +306 -0
  19. package/build.mjs +66 -0
  20. package/commitlint.config.js +25 -0
  21. package/dist/dxf.js +7234 -0
  22. package/docs/CODE_PATTERNS.md +182 -0
  23. package/docs/DIMENSION_SUMMARY.md +248 -0
  24. package/docs/DIMENSION_SUMMARY.pt-BR.md +248 -0
  25. package/docs/IMPLEMENTED-2D-ENTITIES.md +54 -0
  26. package/docs/IMPLEMENTED-2D-ENTITIES.pt-BR.md +54 -0
  27. package/docs/TEXT-MTEXT-DIMENSION-SUPPORT.md +241 -0
  28. package/docs/TEXT-MTEXT-DIMENSION-SUPPORT.pt-BR.md +169 -0
  29. package/docs/autocad_2012_pdf_dxf-reference_enu.md +8272 -0
  30. package/examples/dxf.html +36 -0
  31. package/examples/example.es5.js +30 -0
  32. package/examples/example.es6.js +30 -0
  33. package/examples/text-dimension-viewer.html +133 -0
  34. package/lib/Helper.cjs +89 -0
  35. package/lib/Helper.cjs.map +7 -0
  36. package/lib/Helper.js +59 -0
  37. package/lib/Helper.js.map +7 -0
  38. package/lib/applyTransforms.cjs +59 -0
  39. package/lib/applyTransforms.cjs.map +7 -0
  40. package/lib/applyTransforms.js +39 -0
  41. package/lib/applyTransforms.js.map +7 -0
  42. package/lib/cli.cjs +53 -0
  43. package/lib/cli.cjs.map +7 -0
  44. package/lib/cli.js +29 -0
  45. package/lib/cli.js.map +7 -0
  46. package/lib/config.cjs +30 -0
  47. package/lib/config.cjs.map +7 -0
  48. package/lib/config.js +10 -0
  49. package/lib/config.js.map +7 -0
  50. package/lib/constants.cjs +39 -0
  51. package/lib/constants.cjs.map +7 -0
  52. package/lib/constants.js +15 -0
  53. package/lib/constants.js.map +7 -0
  54. package/lib/denormalise.cjs +148 -0
  55. package/lib/denormalise.cjs.map +7 -0
  56. package/lib/denormalise.js +118 -0
  57. package/lib/denormalise.js.map +7 -0
  58. package/lib/dimensionToSVG.cjs +307 -0
  59. package/lib/dimensionToSVG.cjs.map +7 -0
  60. package/lib/dimensionToSVG.js +273 -0
  61. package/lib/dimensionToSVG.js.map +7 -0
  62. package/lib/entityToPolyline.cjs +248 -0
  63. package/lib/entityToPolyline.cjs.map +7 -0
  64. package/lib/entityToPolyline.js +213 -0
  65. package/lib/entityToPolyline.js.map +7 -0
  66. package/lib/getRGBForEntity.cjs +53 -0
  67. package/lib/getRGBForEntity.cjs.map +7 -0
  68. package/lib/getRGBForEntity.js +23 -0
  69. package/lib/getRGBForEntity.js.map +7 -0
  70. package/lib/groupEntitiesByLayer.cjs +34 -0
  71. package/lib/groupEntitiesByLayer.cjs.map +7 -0
  72. package/lib/groupEntitiesByLayer.js +14 -0
  73. package/lib/groupEntitiesByLayer.js.map +7 -0
  74. package/lib/handlers/blocks.cjs +93 -0
  75. package/lib/handlers/blocks.cjs.map +7 -0
  76. package/lib/handlers/blocks.js +63 -0
  77. package/lib/handlers/blocks.js.map +7 -0
  78. package/lib/handlers/entities.cjs +118 -0
  79. package/lib/handlers/entities.cjs.map +7 -0
  80. package/lib/handlers/entities.js +88 -0
  81. package/lib/handlers/entities.js.map +7 -0
  82. package/lib/handlers/entity/arc.cjs +82 -0
  83. package/lib/handlers/entity/arc.cjs.map +7 -0
  84. package/lib/handlers/entity/arc.js +47 -0
  85. package/lib/handlers/entity/arc.js.map +7 -0
  86. package/lib/handlers/entity/attdef.cjs +318 -0
  87. package/lib/handlers/entity/attdef.cjs.map +7 -0
  88. package/lib/handlers/entity/attdef.js +282 -0
  89. package/lib/handlers/entity/attdef.js.map +7 -0
  90. package/lib/handlers/entity/attrib.cjs +52 -0
  91. package/lib/handlers/entity/attrib.cjs.map +7 -0
  92. package/lib/handlers/entity/attrib.js +27 -0
  93. package/lib/handlers/entity/attrib.js.map +7 -0
  94. package/lib/handlers/entity/circle.cjs +73 -0
  95. package/lib/handlers/entity/circle.cjs.map +7 -0
  96. package/lib/handlers/entity/circle.js +38 -0
  97. package/lib/handlers/entity/circle.js.map +7 -0
  98. package/lib/handlers/entity/common.cjs +83 -0
  99. package/lib/handlers/entity/common.cjs.map +7 -0
  100. package/lib/handlers/entity/common.js +63 -0
  101. package/lib/handlers/entity/common.js.map +7 -0
  102. package/lib/handlers/entity/dimension.cjs +203 -0
  103. package/lib/handlers/entity/dimension.cjs.map +7 -0
  104. package/lib/handlers/entity/dimension.js +168 -0
  105. package/lib/handlers/entity/dimension.js.map +7 -0
  106. package/lib/handlers/entity/ellipse.cjs +88 -0
  107. package/lib/handlers/entity/ellipse.cjs.map +7 -0
  108. package/lib/handlers/entity/ellipse.js +53 -0
  109. package/lib/handlers/entity/ellipse.js.map +7 -0
  110. package/lib/handlers/entity/hatch.cjs +470 -0
  111. package/lib/handlers/entity/hatch.cjs.map +7 -0
  112. package/lib/handlers/entity/hatch.js +435 -0
  113. package/lib/handlers/entity/hatch.js.map +7 -0
  114. package/lib/handlers/entity/insert.cjs +106 -0
  115. package/lib/handlers/entity/insert.cjs.map +7 -0
  116. package/lib/handlers/entity/insert.js +71 -0
  117. package/lib/handlers/entity/insert.js.map +7 -0
  118. package/lib/handlers/entity/line.cjs +84 -0
  119. package/lib/handlers/entity/line.cjs.map +7 -0
  120. package/lib/handlers/entity/line.js +49 -0
  121. package/lib/handlers/entity/line.js.map +7 -0
  122. package/lib/handlers/entity/lwpolyline.cjs +82 -0
  123. package/lib/handlers/entity/lwpolyline.cjs.map +7 -0
  124. package/lib/handlers/entity/lwpolyline.js +47 -0
  125. package/lib/handlers/entity/lwpolyline.js.map +7 -0
  126. package/lib/handlers/entity/mtext.cjs +121 -0
  127. package/lib/handlers/entity/mtext.cjs.map +7 -0
  128. package/lib/handlers/entity/mtext.js +85 -0
  129. package/lib/handlers/entity/mtext.js.map +7 -0
  130. package/lib/handlers/entity/ole2Frame.cjs +98 -0
  131. package/lib/handlers/entity/ole2Frame.cjs.map +7 -0
  132. package/lib/handlers/entity/ole2Frame.js +63 -0
  133. package/lib/handlers/entity/ole2Frame.js.map +7 -0
  134. package/lib/handlers/entity/point.cjs +73 -0
  135. package/lib/handlers/entity/point.cjs.map +7 -0
  136. package/lib/handlers/entity/point.js +38 -0
  137. package/lib/handlers/entity/point.js.map +7 -0
  138. package/lib/handlers/entity/polyline.cjs +70 -0
  139. package/lib/handlers/entity/polyline.cjs.map +7 -0
  140. package/lib/handlers/entity/polyline.js +35 -0
  141. package/lib/handlers/entity/polyline.js.map +7 -0
  142. package/lib/handlers/entity/solid.cjs +101 -0
  143. package/lib/handlers/entity/solid.cjs.map +7 -0
  144. package/lib/handlers/entity/solid.js +66 -0
  145. package/lib/handlers/entity/solid.js.map +7 -0
  146. package/lib/handlers/entity/spline.cjs +109 -0
  147. package/lib/handlers/entity/spline.cjs.map +7 -0
  148. package/lib/handlers/entity/spline.js +74 -0
  149. package/lib/handlers/entity/spline.js.map +7 -0
  150. package/lib/handlers/entity/text.cjs +85 -0
  151. package/lib/handlers/entity/text.cjs.map +7 -0
  152. package/lib/handlers/entity/text.js +49 -0
  153. package/lib/handlers/entity/text.js.map +7 -0
  154. package/lib/handlers/entity/threeDFace.cjs +98 -0
  155. package/lib/handlers/entity/threeDFace.cjs.map +7 -0
  156. package/lib/handlers/entity/threeDFace.js +63 -0
  157. package/lib/handlers/entity/threeDFace.js.map +7 -0
  158. package/lib/handlers/entity/vertex.cjs +78 -0
  159. package/lib/handlers/entity/vertex.cjs.map +7 -0
  160. package/lib/handlers/entity/vertex.js +53 -0
  161. package/lib/handlers/entity/vertex.js.map +7 -0
  162. package/lib/handlers/entity/viewport.cjs +153 -0
  163. package/lib/handlers/entity/viewport.cjs.map +7 -0
  164. package/lib/handlers/entity/viewport.js +118 -0
  165. package/lib/handlers/entity/viewport.js.map +7 -0
  166. package/lib/handlers/header.cjs +92 -0
  167. package/lib/handlers/header.cjs.map +7 -0
  168. package/lib/handlers/header.js +72 -0
  169. package/lib/handlers/header.js.map +7 -0
  170. package/lib/handlers/objects.cjs +170 -0
  171. package/lib/handlers/objects.cjs.map +7 -0
  172. package/lib/handlers/objects.js +150 -0
  173. package/lib/handlers/objects.js.map +7 -0
  174. package/lib/handlers/tables.cjs +587 -0
  175. package/lib/handlers/tables.cjs.map +7 -0
  176. package/lib/handlers/tables.js +557 -0
  177. package/lib/handlers/tables.js.map +7 -0
  178. package/lib/index.cjs +60 -0
  179. package/lib/index.cjs.map +7 -0
  180. package/lib/index.js +19 -0
  181. package/lib/index.js.map +7 -0
  182. package/lib/parseString.cjs +118 -0
  183. package/lib/parseString.cjs.map +7 -0
  184. package/lib/parseString.js +88 -0
  185. package/lib/parseString.js.map +7 -0
  186. package/lib/toPolylines.cjs +69 -0
  187. package/lib/toPolylines.cjs.map +7 -0
  188. package/lib/toPolylines.js +39 -0
  189. package/lib/toPolylines.js.map +7 -0
  190. package/lib/toSVG.cjs +395 -0
  191. package/lib/toSVG.cjs.map +7 -0
  192. package/lib/toSVG.js +361 -0
  193. package/lib/toSVG.js.map +7 -0
  194. package/lib/types/arc-entity.cjs +17 -0
  195. package/lib/types/arc-entity.cjs.map +7 -0
  196. package/lib/types/arc-entity.js +1 -0
  197. package/lib/types/arc-entity.js.map +7 -0
  198. package/lib/types/base-entity.cjs +17 -0
  199. package/lib/types/base-entity.cjs.map +7 -0
  200. package/lib/types/base-entity.js +1 -0
  201. package/lib/types/base-entity.js.map +7 -0
  202. package/lib/types/circle-entity.cjs +17 -0
  203. package/lib/types/circle-entity.cjs.map +7 -0
  204. package/lib/types/circle-entity.js +1 -0
  205. package/lib/types/circle-entity.js.map +7 -0
  206. package/lib/types/common.cjs +17 -0
  207. package/lib/types/common.cjs.map +7 -0
  208. package/lib/types/common.js +1 -0
  209. package/lib/types/common.js.map +7 -0
  210. package/lib/types/dimension-entity.cjs +17 -0
  211. package/lib/types/dimension-entity.cjs.map +7 -0
  212. package/lib/types/dimension-entity.js +1 -0
  213. package/lib/types/dimension-entity.js.map +7 -0
  214. package/lib/types/dxf.cjs +17 -0
  215. package/lib/types/dxf.cjs.map +7 -0
  216. package/lib/types/dxf.js +1 -0
  217. package/lib/types/dxf.js.map +7 -0
  218. package/lib/types/ellipse-entity.cjs +17 -0
  219. package/lib/types/ellipse-entity.cjs.map +7 -0
  220. package/lib/types/ellipse-entity.js +1 -0
  221. package/lib/types/ellipse-entity.js.map +7 -0
  222. package/lib/types/entity.cjs +17 -0
  223. package/lib/types/entity.cjs.map +7 -0
  224. package/lib/types/entity.js +1 -0
  225. package/lib/types/entity.js.map +7 -0
  226. package/lib/types/handler-internal.cjs +17 -0
  227. package/lib/types/handler-internal.cjs.map +7 -0
  228. package/lib/types/handler-internal.js +1 -0
  229. package/lib/types/handler-internal.js.map +7 -0
  230. package/lib/types/handler.cjs +17 -0
  231. package/lib/types/handler.cjs.map +7 -0
  232. package/lib/types/handler.js +1 -0
  233. package/lib/types/handler.js.map +7 -0
  234. package/lib/types/hatch-entity.cjs +17 -0
  235. package/lib/types/hatch-entity.cjs.map +7 -0
  236. package/lib/types/hatch-entity.js +1 -0
  237. package/lib/types/hatch-entity.js.map +7 -0
  238. package/lib/types/helper.cjs +17 -0
  239. package/lib/types/helper.cjs.map +7 -0
  240. package/lib/types/helper.js +1 -0
  241. package/lib/types/helper.js.map +7 -0
  242. package/lib/types/index.cjs +77 -0
  243. package/lib/types/index.cjs.map +7 -0
  244. package/lib/types/index.js +29 -0
  245. package/lib/types/index.js.map +7 -0
  246. package/lib/types/insert-entity.cjs +17 -0
  247. package/lib/types/insert-entity.cjs.map +7 -0
  248. package/lib/types/insert-entity.js +1 -0
  249. package/lib/types/insert-entity.js.map +7 -0
  250. package/lib/types/layer-groups.cjs +17 -0
  251. package/lib/types/layer-groups.cjs.map +7 -0
  252. package/lib/types/layer-groups.js +1 -0
  253. package/lib/types/layer-groups.js.map +7 -0
  254. package/lib/types/line-entity.cjs +17 -0
  255. package/lib/types/line-entity.cjs.map +7 -0
  256. package/lib/types/line-entity.js +1 -0
  257. package/lib/types/line-entity.js.map +7 -0
  258. package/lib/types/mtext-entity.cjs +17 -0
  259. package/lib/types/mtext-entity.cjs.map +7 -0
  260. package/lib/types/mtext-entity.js +1 -0
  261. package/lib/types/mtext-entity.js.map +7 -0
  262. package/lib/types/ole2frame-entity.cjs +17 -0
  263. package/lib/types/ole2frame-entity.cjs.map +7 -0
  264. package/lib/types/ole2frame-entity.js +1 -0
  265. package/lib/types/ole2frame-entity.js.map +7 -0
  266. package/lib/types/options.cjs +17 -0
  267. package/lib/types/options.cjs.map +7 -0
  268. package/lib/types/options.js +1 -0
  269. package/lib/types/options.js.map +7 -0
  270. package/lib/types/point-entity.cjs +17 -0
  271. package/lib/types/point-entity.cjs.map +7 -0
  272. package/lib/types/point-entity.js +1 -0
  273. package/lib/types/point-entity.js.map +7 -0
  274. package/lib/types/polyline-entity.cjs +17 -0
  275. package/lib/types/polyline-entity.cjs.map +7 -0
  276. package/lib/types/polyline-entity.js +1 -0
  277. package/lib/types/polyline-entity.js.map +7 -0
  278. package/lib/types/polylines.cjs +17 -0
  279. package/lib/types/polylines.cjs.map +7 -0
  280. package/lib/types/polylines.js +1 -0
  281. package/lib/types/polylines.js.map +7 -0
  282. package/lib/types/solid-entity.cjs +17 -0
  283. package/lib/types/solid-entity.cjs.map +7 -0
  284. package/lib/types/solid-entity.js +1 -0
  285. package/lib/types/solid-entity.js.map +7 -0
  286. package/lib/types/spline-entity.cjs +17 -0
  287. package/lib/types/spline-entity.cjs.map +7 -0
  288. package/lib/types/spline-entity.js +1 -0
  289. package/lib/types/spline-entity.js.map +7 -0
  290. package/lib/types/svg.cjs +17 -0
  291. package/lib/types/svg.cjs.map +7 -0
  292. package/lib/types/svg.js +1 -0
  293. package/lib/types/svg.js.map +7 -0
  294. package/lib/types/tables.cjs +17 -0
  295. package/lib/types/tables.cjs.map +7 -0
  296. package/lib/types/tables.js +1 -0
  297. package/lib/types/tables.js.map +7 -0
  298. package/lib/types/text-entity.cjs +17 -0
  299. package/lib/types/text-entity.cjs.map +7 -0
  300. package/lib/types/text-entity.js +1 -0
  301. package/lib/types/text-entity.js.map +7 -0
  302. package/lib/types/util-types.cjs +17 -0
  303. package/lib/types/util-types.cjs.map +7 -0
  304. package/lib/types/util-types.js +1 -0
  305. package/lib/types/util-types.js.map +7 -0
  306. package/lib/types/vecks.d.cjs +2 -0
  307. package/lib/types/vecks.d.cjs.map +7 -0
  308. package/lib/types/vecks.d.js +1 -0
  309. package/lib/types/vecks.d.js.map +7 -0
  310. package/lib/types/viewport-entity.cjs +17 -0
  311. package/lib/types/viewport-entity.cjs.map +7 -0
  312. package/lib/types/viewport-entity.js +1 -0
  313. package/lib/types/viewport-entity.js.map +7 -0
  314. package/lib/types.cjs +23 -0
  315. package/lib/types.cjs.map +7 -0
  316. package/lib/types.js +2 -0
  317. package/lib/types.js.map +7 -0
  318. package/lib/util/bSpline.cjs +95 -0
  319. package/lib/util/bSpline.cjs.map +7 -0
  320. package/lib/util/bSpline.js +65 -0
  321. package/lib/util/bSpline.js.map +7 -0
  322. package/lib/util/colors.cjs +283 -0
  323. package/lib/util/colors.cjs.map +7 -0
  324. package/lib/util/colors.js +263 -0
  325. package/lib/util/colors.js.map +7 -0
  326. package/lib/util/createArcForLWPolyline.cjs +84 -0
  327. package/lib/util/createArcForLWPolyline.cjs.map +7 -0
  328. package/lib/util/createArcForLWPolyline.js +64 -0
  329. package/lib/util/createArcForLWPolyline.js.map +7 -0
  330. package/lib/util/dxfColorToRGB.cjs +115 -0
  331. package/lib/util/dxfColorToRGB.cjs.map +7 -0
  332. package/lib/util/dxfColorToRGB.js +90 -0
  333. package/lib/util/dxfColorToRGB.js.map +7 -0
  334. package/lib/util/insertKnot.cjs +77 -0
  335. package/lib/util/insertKnot.cjs.map +7 -0
  336. package/lib/util/insertKnot.js +57 -0
  337. package/lib/util/insertKnot.js.map +7 -0
  338. package/lib/util/logger.cjs +53 -0
  339. package/lib/util/logger.cjs.map +7 -0
  340. package/lib/util/logger.js +23 -0
  341. package/lib/util/logger.js.map +7 -0
  342. package/lib/util/rgbToColorAttribute.cjs +32 -0
  343. package/lib/util/rgbToColorAttribute.cjs.map +7 -0
  344. package/lib/util/rgbToColorAttribute.js +12 -0
  345. package/lib/util/rgbToColorAttribute.js.map +7 -0
  346. package/lib/util/rotate.cjs +30 -0
  347. package/lib/util/rotate.cjs.map +7 -0
  348. package/lib/util/rotate.js +10 -0
  349. package/lib/util/rotate.js.map +7 -0
  350. package/lib/util/round10.cjs +38 -0
  351. package/lib/util/round10.cjs.map +7 -0
  352. package/lib/util/round10.js +18 -0
  353. package/lib/util/round10.js.map +7 -0
  354. package/lib/util/toPiecewiseBezier.cjs +90 -0
  355. package/lib/util/toPiecewiseBezier.cjs.map +7 -0
  356. package/lib/util/toPiecewiseBezier.js +54 -0
  357. package/lib/util/toPiecewiseBezier.js.map +7 -0
  358. package/lib/util/transformBoundingBoxAndElement.cjs +80 -0
  359. package/lib/util/transformBoundingBoxAndElement.cjs.map +7 -0
  360. package/lib/util/transformBoundingBoxAndElement.js +60 -0
  361. package/lib/util/transformBoundingBoxAndElement.js.map +7 -0
  362. package/package.json +127 -0
  363. package/src/Helper.ts +71 -0
  364. package/src/applyTransforms.ts +54 -0
  365. package/src/cli.ts +41 -0
  366. package/src/config.ts +10 -0
  367. package/src/constants.ts +14 -0
  368. package/src/denormalise.ts +153 -0
  369. package/src/dimensionToSVG.ts +427 -0
  370. package/src/entityToPolyline.ts +338 -0
  371. package/src/getRGBForEntity.ts +28 -0
  372. package/src/groupEntitiesByLayer.ts +14 -0
  373. package/src/handlers/blocks.ts +65 -0
  374. package/src/handlers/entities.ts +111 -0
  375. package/src/handlers/entity/arc.ts +61 -0
  376. package/src/handlers/entity/attdef.ts +284 -0
  377. package/src/handlers/entity/attrib.ts +29 -0
  378. package/src/handlers/entity/circle.ts +47 -0
  379. package/src/handlers/entity/common.ts +79 -0
  380. package/src/handlers/entity/dimension.ts +217 -0
  381. package/src/handlers/entity/ellipse.ts +55 -0
  382. package/src/handlers/entity/hatch.ts +471 -0
  383. package/src/handlers/entity/insert.ts +73 -0
  384. package/src/handlers/entity/line.ts +56 -0
  385. package/src/handlers/entity/lwpolyline.ts +54 -0
  386. package/src/handlers/entity/mtext.ts +150 -0
  387. package/src/handlers/entity/ole2Frame.ts +64 -0
  388. package/src/handlers/entity/point.ts +47 -0
  389. package/src/handlers/entity/polyline.ts +49 -0
  390. package/src/handlers/entity/solid.ts +73 -0
  391. package/src/handlers/entity/spline.ts +103 -0
  392. package/src/handlers/entity/text.ts +83 -0
  393. package/src/handlers/entity/threeDFace.ts +69 -0
  394. package/src/handlers/entity/vertex.ts +55 -0
  395. package/src/handlers/entity/viewport.ts +119 -0
  396. package/src/handlers/header.ts +73 -0
  397. package/src/handlers/objects.ts +152 -0
  398. package/src/handlers/tables.ts +581 -0
  399. package/src/index.ts +19 -0
  400. package/src/parseString.ts +97 -0
  401. package/src/toPolylines.ts +47 -0
  402. package/src/toSVG.ts +518 -0
  403. package/src/types/README.md +91 -0
  404. package/src/types/arc-entity.ts +10 -0
  405. package/src/types/base-entity.ts +25 -0
  406. package/src/types/circle-entity.ts +8 -0
  407. package/src/types/common.ts +37 -0
  408. package/src/types/dimension-entity.ts +23 -0
  409. package/src/types/dxf.ts +64 -0
  410. package/src/types/ellipse-entity.ts +13 -0
  411. package/src/types/entity.ts +32 -0
  412. package/src/types/handler-internal.ts +51 -0
  413. package/src/types/handler.ts +10 -0
  414. package/src/types/hatch-entity.ts +127 -0
  415. package/src/types/helper.ts +12 -0
  416. package/src/types/index.ts +53 -0
  417. package/src/types/insert-entity.ts +19 -0
  418. package/src/types/layer-groups.ts +8 -0
  419. package/src/types/line-entity.ts +10 -0
  420. package/src/types/mtext-entity.ts +35 -0
  421. package/src/types/ole2frame-entity.ts +35 -0
  422. package/src/types/options.ts +17 -0
  423. package/src/types/point-entity.ts +7 -0
  424. package/src/types/polyline-entity.ts +20 -0
  425. package/src/types/polylines.ts +22 -0
  426. package/src/types/solid-entity.ts +9 -0
  427. package/src/types/spline-entity.ts +12 -0
  428. package/src/types/svg.ts +31 -0
  429. package/src/types/tables.ts +414 -0
  430. package/src/types/text-entity.ts +23 -0
  431. package/src/types/util-types.ts +27 -0
  432. package/src/types/vecks.d.ts +29 -0
  433. package/src/types/viewport-entity.ts +81 -0
  434. package/src/types.ts +5 -0
  435. package/src/util/bSpline.ts +97 -0
  436. package/src/util/colors.ts +266 -0
  437. package/src/util/createArcForLWPolyline.ts +93 -0
  438. package/src/util/diagram.png +0 -0
  439. package/src/util/dxfColorToRGB.ts +106 -0
  440. package/src/util/insertKnot.ts +69 -0
  441. package/src/util/logger.ts +23 -0
  442. package/src/util/rgbToColorAttribute.ts +14 -0
  443. package/src/util/rotate.ts +14 -0
  444. package/src/util/round10.ts +24 -0
  445. package/src/util/toPiecewiseBezier.ts +70 -0
  446. package/src/util/transformBoundingBoxAndElement.ts +74 -0
  447. package/tsconfig.json +34 -0
@@ -0,0 +1,581 @@
1
+ import type { DXFTuple, DimStyleInternal, LTypeElement, LTypeInternal, LayerInternal, StyleInternal, VPortInternal } from '../types'
2
+
3
+ import logger from '../util/logger'
4
+
5
+ const ltypeHandler = (tuples: DXFTuple[]): LTypeInternal => {
6
+ let element: LTypeElement | undefined
7
+ let offset: { x: string | number; y: string | number } | undefined
8
+ return tuples.reduce(
9
+ (layer, tuple) => {
10
+ const type = tuple[0]
11
+ const value = tuple[1]
12
+ // https://documentation.help/AutoCAD-DXF/WS1a9193826455f5ff18cb41610ec0a2e719-7a4f.htm
13
+ switch (type) {
14
+ case 2:
15
+ layer.name = value
16
+ break
17
+ case 3:
18
+ layer.description = value
19
+ break
20
+ case 70:
21
+ // Standard flag values (bit-coded values):
22
+ // 16 = If set, table entry is externally dependent on an xref
23
+ // 32 = If both this bit and bit 16 are set, the externally dependent xref has been successfully resolved
24
+ // 64 = If set, the table entry was referenced by at least one entity in the drawing the last time the drawing was edited. (This flag is for the benefit of AutoCAD commands. It can be ignored by most programs that read DXF files and need not be set by programs that write DXF files)
25
+ layer.flag = value
26
+ break
27
+ case 72:
28
+ // Alignment code (value is always 65, the ASCII code for A):
29
+ layer.alignment = value
30
+ break
31
+ case 73:
32
+ layer.elementCount = Number.parseInt(String(value))
33
+ break
34
+ case 40:
35
+ layer.patternLength = value
36
+ break
37
+ case 49:
38
+ element = { length: value }
39
+ layer.pattern.push(element)
40
+ break
41
+ case 74:
42
+ // Complex linetype element type (one per element). Default is 0 (no embedded shape/text) (bit-coded values)
43
+ // 1 = If set, code 50 specifies an absolute rotation; if not set, code 50 specifies a relative rotation
44
+ // 2 = Embedded element is a text string
45
+ // 4 = Embedded element is a shape
46
+ if (element) {
47
+ element.shape = value
48
+ }
49
+ break
50
+ case 75:
51
+ if (element) {
52
+ element.shapeNumber = value
53
+ }
54
+ break
55
+ case 340:
56
+ if (element) {
57
+ element.styleHandle = value
58
+ }
59
+ break
60
+ case 46:
61
+ if (element) {
62
+ element.scales ??= []
63
+ element.scales.push(value)
64
+ }
65
+ break
66
+ case 50:
67
+ if (element) {
68
+ element.rotation = value
69
+ }
70
+ break
71
+ case 44:
72
+ offset = { x: value, y: 0 }
73
+ if (element) {
74
+ element.offset ??= []
75
+ element.offset.push(offset)
76
+ }
77
+ break
78
+ case 45:
79
+ if (offset) {
80
+ offset.y = value
81
+ }
82
+ break
83
+ case 9:
84
+ if (element) {
85
+ element.text = value
86
+ }
87
+ break
88
+ default:
89
+ }
90
+ return layer
91
+ },
92
+ { type: 'LTYPE', pattern: [] } as LTypeInternal,
93
+ )
94
+ }
95
+
96
+ const layerHandler = (tuples: DXFTuple[]): LayerInternal => {
97
+ return tuples.reduce(
98
+ (layer, tuple) => {
99
+ const type = tuple[0]
100
+ const value = tuple[1]
101
+ // https://www.autodesk.com/techpubs/autocad/acad2000/dxf/layer_dxf_04.htm
102
+ switch (type) {
103
+ case 2:
104
+ layer.name = value
105
+ break
106
+ case 6:
107
+ layer.lineTypeName = value
108
+ break
109
+ case 62:
110
+ layer.colorNumber = value
111
+ break
112
+ case 70:
113
+ layer.flags = value
114
+ break
115
+ case 290:
116
+ layer.plot = Number.parseInt(String(value)) !== 0
117
+ break
118
+ case 370:
119
+ layer.lineWeightEnum = value
120
+ break
121
+ default:
122
+ }
123
+ return layer
124
+ },
125
+ { type: 'LAYER' } as LayerInternal,
126
+ )
127
+ }
128
+
129
+ const styleHandler = (tuples: DXFTuple[]): StyleInternal => {
130
+ return tuples.reduce(
131
+ (style, tuple) => {
132
+ const type = tuple[0]
133
+ const value = tuple[1]
134
+ switch (type) {
135
+ case 2:
136
+ style.name = value
137
+ break
138
+ case 6:
139
+ style.lineTypeName = value
140
+ break
141
+ case 40:
142
+ style.fixedTextHeight = value
143
+ break
144
+ case 41:
145
+ style.widthFactor = value
146
+ break
147
+ case 50:
148
+ style.obliqueAngle = value
149
+ break
150
+ case 71:
151
+ style.flags = value
152
+ break
153
+ case 42:
154
+ style.lastHeightUsed = value
155
+ break
156
+ case 3:
157
+ style.primaryFontFileName = value
158
+ break
159
+ case 4:
160
+ style.bigFontFileName = value
161
+ break
162
+ default:
163
+ }
164
+ return style
165
+ },
166
+ { type: 'STYLE' } as StyleInternal,
167
+ )
168
+ }
169
+
170
+ const vPortHandler = (tuples: DXFTuple[]): VPortInternal => {
171
+ return tuples.reduce(
172
+ (vport, tuple) => {
173
+ const type = tuple[0]
174
+ const value = tuple[1]
175
+ switch (type) {
176
+ case 2:
177
+ vport.name = value
178
+ break
179
+ case 5:
180
+ vport.handle = value
181
+ break
182
+ case 70:
183
+ vport.flags = value
184
+ break
185
+ case 10:
186
+ vport.lowerLeft.x = Number.parseFloat(String(value))
187
+ break
188
+ case 20:
189
+ vport.lowerLeft.y = Number.parseFloat(String(value))
190
+ break
191
+ case 11:
192
+ vport.upperRight.x = Number.parseFloat(String(value))
193
+ break
194
+ case 21:
195
+ vport.upperRight.y = Number.parseFloat(String(value))
196
+ break
197
+ case 12:
198
+ vport.center.x = Number.parseFloat(String(value))
199
+ break
200
+ case 22:
201
+ vport.center.y = Number.parseFloat(String(value))
202
+ break
203
+ case 14:
204
+ vport.snapSpacing.x = Number.parseFloat(String(value))
205
+ break
206
+ case 24:
207
+ vport.snapSpacing.y = Number.parseFloat(String(value))
208
+ break
209
+ case 15:
210
+ vport.gridSpacing.x = Number.parseFloat(String(value))
211
+ break
212
+ case 25:
213
+ vport.gridSpacing.y = Number.parseFloat(String(value))
214
+ break
215
+ case 16:
216
+ vport.direction.x = Number.parseFloat(String(value))
217
+ break
218
+ case 26:
219
+ vport.direction.y = Number.parseFloat(String(value))
220
+ break
221
+ case 36:
222
+ vport.direction.z = Number.parseFloat(String(value))
223
+ break
224
+ case 17:
225
+ vport.target.x = Number.parseFloat(String(value))
226
+ break
227
+ case 27:
228
+ vport.target.y = Number.parseFloat(String(value))
229
+ break
230
+ case 37:
231
+ vport.target.z = Number.parseFloat(String(value))
232
+ break
233
+ case 45:
234
+ vport.height = Number.parseFloat(String(value))
235
+ break
236
+ case 50:
237
+ vport.snapAngle = Number.parseFloat(String(value))
238
+ break
239
+ case 51:
240
+ vport.angle = Number.parseFloat(String(value))
241
+ break
242
+ case 110:
243
+ vport.x = Number.parseFloat(String(value))
244
+ break
245
+ case 120:
246
+ vport.y = Number.parseFloat(String(value))
247
+ break
248
+ case 130:
249
+ vport.z = Number.parseFloat(String(value))
250
+ break
251
+ case 111:
252
+ vport.xAxisX = Number.parseFloat(String(value))
253
+ break
254
+ case 121:
255
+ vport.xAxisY = Number.parseFloat(String(value))
256
+ break
257
+ case 131:
258
+ vport.xAxisZ = Number.parseFloat(String(value))
259
+ break
260
+ case 112:
261
+ vport.xAxisX = Number.parseFloat(String(value))
262
+ break
263
+ case 122:
264
+ vport.xAxisY = Number.parseFloat(String(value))
265
+ break
266
+ case 132:
267
+ vport.xAxisZ = Number.parseFloat(String(value))
268
+ break
269
+ case 146:
270
+ vport.elevation = Number.parseFloat(String(value))
271
+ break
272
+ default:
273
+ }
274
+ return vport
275
+ },
276
+ {
277
+ type: 'VPORT',
278
+ center: {},
279
+ lowerLeft: {},
280
+ upperRight: {},
281
+ snap: {},
282
+ snapSpacing: {},
283
+ gridSpacing: {},
284
+ direction: {},
285
+ target: {},
286
+ } as VPortInternal,
287
+ )
288
+ }
289
+
290
+ const dimStyleHandler = (tuples: DXFTuple[]): DimStyleInternal => {
291
+ return tuples.reduce(
292
+ (dimStyle, tuple) => {
293
+ const type = tuple[0]
294
+ const value = tuple[1]
295
+ switch (type) {
296
+ case 2:
297
+ dimStyle.name = value
298
+ break
299
+ case 70:
300
+ dimStyle.flags = value
301
+ break
302
+ case 3:
303
+ dimStyle.dimPost = value
304
+ break
305
+ case 4:
306
+ dimStyle.dimAPost = value
307
+ break
308
+ case 40:
309
+ dimStyle.dimScale = Number.parseFloat(String(value))
310
+ break
311
+ case 41:
312
+ dimStyle.dimAsz = Number.parseFloat(String(value))
313
+ break
314
+ case 42:
315
+ dimStyle.dimExo = Number.parseFloat(String(value))
316
+ break
317
+ case 43:
318
+ dimStyle.dimDli = Number.parseFloat(String(value))
319
+ break
320
+ case 44:
321
+ dimStyle.dimExe = Number.parseFloat(String(value))
322
+ break
323
+ case 45:
324
+ dimStyle.dimRnd = Number.parseFloat(String(value))
325
+ break
326
+ case 46:
327
+ dimStyle.dimDle = Number.parseFloat(String(value))
328
+ break
329
+ case 47:
330
+ dimStyle.dimTp = Number.parseFloat(String(value))
331
+ break
332
+ case 48:
333
+ dimStyle.dimTm = Number.parseFloat(String(value))
334
+ break
335
+ case 140:
336
+ dimStyle.dimTxt = Number.parseFloat(String(value))
337
+ break
338
+ case 141:
339
+ dimStyle.dimCen = Number.parseFloat(String(value))
340
+ break
341
+ case 142:
342
+ dimStyle.dimTsz = Number.parseFloat(String(value))
343
+ break
344
+ case 143:
345
+ dimStyle.dimAltf = Number.parseFloat(String(value))
346
+ break
347
+ case 144:
348
+ dimStyle.dimLfac = Number.parseFloat(String(value))
349
+ break
350
+ case 145:
351
+ dimStyle.dimTvp = Number.parseFloat(String(value))
352
+ break
353
+ case 146:
354
+ dimStyle.dimTfac = Number.parseFloat(String(value))
355
+ break
356
+ case 147:
357
+ dimStyle.dimGap = Number.parseFloat(String(value))
358
+ break
359
+ case 148:
360
+ dimStyle.dimAltRnd = Number.parseFloat(String(value))
361
+ break
362
+ case 71:
363
+ dimStyle.dimTol = Number.parseInt(String(value))
364
+ break
365
+ case 72:
366
+ dimStyle.dimLim = Number.parseInt(String(value))
367
+ break
368
+ case 73:
369
+ dimStyle.dimTih = Number.parseInt(String(value))
370
+ break
371
+ case 74:
372
+ dimStyle.dimToh = Number.parseInt(String(value))
373
+ break
374
+ case 75:
375
+ dimStyle.dimSe1 = Number.parseInt(String(value))
376
+ break
377
+ case 76:
378
+ dimStyle.dimSe2 = Number.parseInt(String(value))
379
+ break
380
+ case 77:
381
+ dimStyle.dimTad = Number.parseInt(String(value))
382
+ break
383
+ case 78:
384
+ dimStyle.dimZin = Number.parseInt(String(value))
385
+ break
386
+ case 79:
387
+ dimStyle.dimAzin = Number.parseInt(String(value))
388
+ break
389
+ case 170:
390
+ dimStyle.dimAlt = Number.parseInt(String(value))
391
+ break
392
+ case 171:
393
+ dimStyle.dimAltd = Number.parseInt(String(value))
394
+ break
395
+ case 172:
396
+ dimStyle.dimTofl = Number.parseInt(String(value))
397
+ break
398
+ case 173:
399
+ dimStyle.dimSah = Number.parseInt(String(value))
400
+ break
401
+ case 174:
402
+ dimStyle.dimTix = Number.parseInt(String(value))
403
+ break
404
+ case 175:
405
+ dimStyle.dimSoxd = Number.parseInt(String(value))
406
+ break
407
+ case 176:
408
+ dimStyle.dimClrd = Number.parseInt(String(value))
409
+ break
410
+ case 177:
411
+ dimStyle.dimClre = Number.parseInt(String(value))
412
+ break
413
+ case 178:
414
+ dimStyle.dimClrt = Number.parseInt(String(value))
415
+ break
416
+ case 179:
417
+ dimStyle.dimAdec = Number.parseInt(String(value))
418
+ break
419
+ case 270:
420
+ dimStyle.dimUnit = Number.parseInt(String(value))
421
+ break
422
+ case 271:
423
+ dimStyle.dimDec = Number.parseInt(String(value))
424
+ break
425
+ case 272:
426
+ dimStyle.dimTdec = Number.parseInt(String(value))
427
+ break
428
+ case 273:
429
+ dimStyle.dimAltu = Number.parseInt(String(value))
430
+ break
431
+ case 274:
432
+ dimStyle.dimAlttd = Number.parseInt(String(value))
433
+ break
434
+ case 275:
435
+ dimStyle.dimAunit = Number.parseInt(String(value))
436
+ break
437
+ case 276:
438
+ dimStyle.dimFrac = Number.parseInt(String(value))
439
+ break
440
+ case 277:
441
+ dimStyle.dimLunit = Number.parseInt(String(value))
442
+ break
443
+ case 278:
444
+ dimStyle.dimDsep = Number.parseInt(String(value))
445
+ break
446
+ case 279:
447
+ dimStyle.dimTmove = Number.parseInt(String(value))
448
+ break
449
+ case 280:
450
+ dimStyle.dimJust = Number.parseInt(String(value))
451
+ break
452
+ case 281:
453
+ dimStyle.dimSd1 = Number.parseInt(String(value))
454
+ break
455
+ case 282:
456
+ dimStyle.dimSd2 = Number.parseInt(String(value))
457
+ break
458
+ case 283:
459
+ dimStyle.dimTolj = Number.parseInt(String(value))
460
+ break
461
+ case 284:
462
+ dimStyle.dimTzin = Number.parseInt(String(value))
463
+ break
464
+ case 285:
465
+ dimStyle.dimAltz = Number.parseInt(String(value))
466
+ break
467
+ case 286:
468
+ dimStyle.dimAlttz = Number.parseInt(String(value))
469
+ break
470
+ case 287:
471
+ dimStyle.dimFit = Number.parseInt(String(value))
472
+ break
473
+ case 288:
474
+ dimStyle.dimUpt = Number.parseInt(String(value))
475
+ break
476
+ case 289:
477
+ dimStyle.dimAtfit = Number.parseInt(String(value))
478
+ break
479
+ case 340:
480
+ dimStyle.dimTxsty = value
481
+ break
482
+ case 341:
483
+ dimStyle.dimLdrblk = value
484
+ break
485
+ case 342:
486
+ dimStyle.dimBlk = value
487
+ break
488
+ case 343:
489
+ dimStyle.dimBlk1 = value
490
+ break
491
+ case 344:
492
+ dimStyle.dimBlk2 = value
493
+ break
494
+ case 371:
495
+ dimStyle.dimLwd = Number.parseInt(String(value))
496
+ break
497
+ case 372:
498
+ dimStyle.dimLwe = Number.parseInt(String(value))
499
+ break
500
+ default:
501
+ }
502
+ return dimStyle
503
+ },
504
+ { type: 'DIMSTYLE' } as DimStyleInternal,
505
+ )
506
+ }
507
+
508
+ const tableHandler = (
509
+ tuples: DXFTuple[],
510
+ tableType: string,
511
+ handler: (tuples: DXFTuple[]) => LTypeInternal | LayerInternal | StyleInternal | VPortInternal | DimStyleInternal,
512
+ ): Record<string, any> => {
513
+ const tableRowsTuples: DXFTuple[][] = []
514
+
515
+ let tableRowTuples: DXFTuple[] | undefined
516
+ for (const tuple of tuples) {
517
+ const type = tuple[0]
518
+ const value = tuple[1]
519
+ if ((type === 0 || type === 2) && value === tableType) {
520
+ tableRowTuples = []
521
+ tableRowsTuples.push(tableRowTuples)
522
+ } else if (tableRowTuples) {
523
+ tableRowTuples.push(tuple)
524
+ }
525
+ }
526
+
527
+ return tableRowsTuples.reduce((acc, rowTuples) => {
528
+ const tableRow = handler(rowTuples)
529
+ if (tableRow.name) {
530
+ acc[String(tableRow.name)] = tableRow
531
+ } else {
532
+ logger.warn('table row without name:', tableRow)
533
+ }
534
+ return acc
535
+ }, {} as Record<string, any>)
536
+ }
537
+
538
+ export default function parseTables(tuples: DXFTuple[]) {
539
+ const tableGroups: DXFTuple[][] = []
540
+ let tableTuples: DXFTuple[] | undefined
541
+ for (const tuple of tuples) {
542
+ const value = tuple[1]
543
+ if (value === 'TABLE') {
544
+ tableTuples = []
545
+ tableGroups.push(tableTuples)
546
+ } else if (value === 'ENDTAB') {
547
+ if (tableTuples) {
548
+ tableGroups.push(tableTuples)
549
+ }
550
+ } else if (tableTuples) {
551
+ tableTuples.push(tuple)
552
+ }
553
+ }
554
+
555
+ let stylesTuples: DXFTuple[] = []
556
+ let layersTuples: DXFTuple[] = []
557
+ let vPortTuples: DXFTuple[] = []
558
+ let ltypeTuples: DXFTuple[] = []
559
+ let dimStyleTuples: DXFTuple[] = []
560
+ for (const group of tableGroups) {
561
+ if (group[0]?.[1] === 'STYLE') {
562
+ stylesTuples = group
563
+ } else if (group[0]?.[1] === 'LTYPE') {
564
+ ltypeTuples = group
565
+ } else if (group[0]?.[1] === 'LAYER') {
566
+ layersTuples = group
567
+ } else if (group[0]?.[1] === 'VPORT') {
568
+ vPortTuples = group
569
+ } else if (group[0]?.[1] === 'DIMSTYLE') {
570
+ dimStyleTuples = group
571
+ }
572
+ }
573
+
574
+ return {
575
+ layers: tableHandler(layersTuples, 'LAYER', layerHandler),
576
+ styles: tableHandler(stylesTuples, 'STYLE', styleHandler),
577
+ vports: tableHandler(vPortTuples, 'VPORT', vPortHandler),
578
+ ltypes: tableHandler(ltypeTuples, 'LTYPE', ltypeHandler),
579
+ dimStyles: tableHandler(dimStyleTuples, 'DIMSTYLE', dimStyleHandler),
580
+ }
581
+ }
package/src/index.ts ADDED
@@ -0,0 +1,19 @@
1
+ import config from './config'
2
+ import parseString from './parseString'
3
+ import denormalise from './denormalise'
4
+ import groupEntitiesByLayer from './groupEntitiesByLayer'
5
+ import toPolylines from './toPolylines'
6
+ import toSVG from './toSVG'
7
+ import colors from './util/colors'
8
+ import Helper from './Helper'
9
+
10
+ export {
11
+ config,
12
+ parseString,
13
+ denormalise,
14
+ groupEntitiesByLayer,
15
+ toPolylines,
16
+ toSVG,
17
+ colors,
18
+ Helper,
19
+ }
@@ -0,0 +1,97 @@
1
+ import blocksHandler from './handlers/blocks'
2
+ import entitiesHandler from './handlers/entities'
3
+ import headerHandler from './handlers/header'
4
+ import objectsHandler from './handlers/objects'
5
+ import tablesHandler from './handlers/tables'
6
+ import logger from './util/logger'
7
+
8
+ import type { DXFTuple, ParsedDXF } from './types'
9
+
10
+ type Tuple = DXFTuple
11
+
12
+ // Parse the value into the native representation
13
+ const parseValue = (type: number, value: string): string | number => {
14
+ if (type >= 10 && type < 60) {
15
+ return Number.parseFloat(value)
16
+ } else if (type >= 210 && type < 240) {
17
+ return Number.parseFloat(value)
18
+ } else if (type >= 60 && type < 100) {
19
+ return Number.parseInt(value, 10)
20
+ } else {
21
+ return value
22
+ }
23
+ }
24
+
25
+ // Content lines are alternate lines of type and value
26
+ const convertToTypesAndValues = (contentLines: string[]): Tuple[] => {
27
+ let state: 'type' | 'value' = 'type'
28
+ let type = 0
29
+ const typesAndValues: Tuple[] = []
30
+ for (const line of contentLines) {
31
+ if (state === 'type') {
32
+ type = Number.parseInt(line, 10)
33
+ state = 'value'
34
+ } else {
35
+ typesAndValues.push([type, parseValue(type, line)])
36
+ state = 'type'
37
+ }
38
+ }
39
+ return typesAndValues
40
+ }
41
+
42
+ const separateSections = (tuples: Tuple[]): Tuple[][] => {
43
+ let sectionTuples: Tuple[] | undefined
44
+ return tuples.reduce((sections, tuple) => {
45
+ if (tuple[0] === 0 && tuple[1] === 'SECTION') {
46
+ sectionTuples = []
47
+ } else if (tuple[0] === 0 && tuple[1] === 'ENDSEC') {
48
+ sections.push(sectionTuples!)
49
+ sectionTuples = undefined
50
+ } else if (sectionTuples !== undefined) {
51
+ sectionTuples.push(tuple)
52
+ }
53
+ return sections
54
+ }, [] as Tuple[][])
55
+ }
56
+
57
+ // Each section start with the type tuple, then proceeds
58
+ // with the contents of the section
59
+ const reduceSection = (acc: ParsedDXF, section: Tuple[]): ParsedDXF => {
60
+ const sectionType = section[0][1]
61
+ const contentTuples = section.slice(1)
62
+ switch (sectionType) {
63
+ case 'HEADER':
64
+ acc.header = headerHandler(contentTuples)
65
+ break
66
+ case 'TABLES':
67
+ acc.tables = tablesHandler(contentTuples)
68
+ break
69
+ case 'BLOCKS':
70
+ acc.blocks = blocksHandler(contentTuples)
71
+ break
72
+ case 'ENTITIES':
73
+ acc.entities = entitiesHandler(contentTuples)
74
+ break
75
+ case 'OBJECTS':
76
+ acc.objects = objectsHandler(contentTuples)
77
+ break
78
+ default:
79
+ logger.warn(`Unsupported section: ${sectionType}`)
80
+ }
81
+ return acc
82
+ }
83
+
84
+ export default function parseString(string: string): ParsedDXF {
85
+ const lines = string.split(/\r\n|\r|\n/g)
86
+ const tuples = convertToTypesAndValues(lines)
87
+ const sections = separateSections(tuples)
88
+ const result = sections.reduce(reduceSection, {
89
+ // Start with empty defaults in the event of empty sections
90
+ header: {},
91
+ blocks: [],
92
+ entities: [],
93
+ objects: { layouts: [] },
94
+ tables: { layers: {}, styles: {}, ltypes: {} },
95
+ })
96
+ return result
97
+ }