@linkiez/dxf-renew 7.0.0 → 7.2.0

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 (252) hide show
  1. package/.eslintrc.json +1 -16
  2. package/.github/instructions/code-patterns.instructions.md +1 -1
  3. package/.github/instructions/exdxf.instruction.md +161 -0
  4. package/.github/instructions/tdd.instructions.md +271 -0
  5. package/.yarn/install-state.gz +0 -0
  6. package/ARCHITECTURE.md +163 -0
  7. package/CHANGELOG.md +39 -0
  8. package/CONTRIBUTING.md +16 -14
  9. package/README.md +113 -16
  10. package/{PLAN.md → ROADMAP.md} +244 -102
  11. package/dist/dxf.js +2212 -454
  12. package/docs/EZDXF_REFERENCE_SITEMAP.md +55 -0
  13. package/docs/FIXTURE_VALIDATION_EZDXF.md +62 -0
  14. package/lib/Helper.cjs +6 -2
  15. package/lib/Helper.cjs.map +3 -3
  16. package/lib/Helper.js +6 -2
  17. package/lib/Helper.js.map +2 -2
  18. package/lib/denormalise.cjs +131 -91
  19. package/lib/denormalise.cjs.map +2 -2
  20. package/lib/denormalise.js +131 -91
  21. package/lib/denormalise.js.map +2 -2
  22. package/lib/dimensionToSVG.cjs +318 -53
  23. package/lib/dimensionToSVG.cjs.map +3 -3
  24. package/lib/dimensionToSVG.js +316 -52
  25. package/lib/dimensionToSVG.js.map +2 -2
  26. package/lib/entityToPolyline.cjs +95 -0
  27. package/lib/entityToPolyline.cjs.map +3 -3
  28. package/lib/entityToPolyline.js +95 -0
  29. package/lib/entityToPolyline.js.map +2 -2
  30. package/lib/handlers/entities.cjs +111 -27
  31. package/lib/handlers/entities.cjs.map +3 -3
  32. package/lib/handlers/entities.js +111 -27
  33. package/lib/handlers/entities.js.map +3 -3
  34. package/lib/handlers/entity/dgnUnderlay.cjs +106 -0
  35. package/lib/handlers/entity/dgnUnderlay.cjs.map +7 -0
  36. package/lib/handlers/entity/dgnUnderlay.js +71 -0
  37. package/lib/handlers/entity/dgnUnderlay.js.map +7 -0
  38. package/lib/handlers/entity/dimension.cjs +24 -0
  39. package/lib/handlers/entity/dimension.cjs.map +2 -2
  40. package/lib/handlers/entity/dimension.js +24 -0
  41. package/lib/handlers/entity/dimension.js.map +2 -2
  42. package/lib/handlers/entity/dwfUnderlay.cjs +106 -0
  43. package/lib/handlers/entity/dwfUnderlay.cjs.map +7 -0
  44. package/lib/handlers/entity/dwfUnderlay.js +71 -0
  45. package/lib/handlers/entity/dwfUnderlay.js.map +7 -0
  46. package/lib/handlers/entity/image.cjs +123 -0
  47. package/lib/handlers/entity/image.cjs.map +7 -0
  48. package/lib/handlers/entity/image.js +88 -0
  49. package/lib/handlers/entity/image.js.map +7 -0
  50. package/lib/handlers/entity/leader.cjs +148 -0
  51. package/lib/handlers/entity/leader.cjs.map +7 -0
  52. package/lib/handlers/entity/leader.js +113 -0
  53. package/lib/handlers/entity/leader.js.map +7 -0
  54. package/lib/handlers/entity/mleader.cjs +69 -0
  55. package/lib/handlers/entity/mleader.cjs.map +7 -0
  56. package/lib/handlers/entity/mleader.js +34 -0
  57. package/lib/handlers/entity/mleader.js.map +7 -0
  58. package/lib/handlers/entity/mline.cjs +91 -0
  59. package/lib/handlers/entity/mline.cjs.map +7 -0
  60. package/lib/handlers/entity/mline.js +56 -0
  61. package/lib/handlers/entity/mline.js.map +7 -0
  62. package/lib/handlers/entity/oleframe.cjs +98 -0
  63. package/lib/handlers/entity/oleframe.cjs.map +7 -0
  64. package/lib/handlers/entity/oleframe.js +63 -0
  65. package/lib/handlers/entity/oleframe.js.map +7 -0
  66. package/lib/handlers/entity/pdfUnderlay.cjs +106 -0
  67. package/lib/handlers/entity/pdfUnderlay.cjs.map +7 -0
  68. package/lib/handlers/entity/pdfUnderlay.js +71 -0
  69. package/lib/handlers/entity/pdfUnderlay.js.map +7 -0
  70. package/lib/handlers/entity/ray.cjs +81 -0
  71. package/lib/handlers/entity/ray.cjs.map +7 -0
  72. package/lib/handlers/entity/ray.js +46 -0
  73. package/lib/handlers/entity/ray.js.map +7 -0
  74. package/lib/handlers/entity/region.cjs +67 -0
  75. package/lib/handlers/entity/region.cjs.map +7 -0
  76. package/lib/handlers/entity/region.js +32 -0
  77. package/lib/handlers/entity/region.js.map +7 -0
  78. package/lib/handlers/entity/shape.cjs +95 -0
  79. package/lib/handlers/entity/shape.cjs.map +7 -0
  80. package/lib/handlers/entity/shape.js +60 -0
  81. package/lib/handlers/entity/shape.js.map +7 -0
  82. package/lib/handlers/entity/table.cjs +71 -0
  83. package/lib/handlers/entity/table.cjs.map +7 -0
  84. package/lib/handlers/entity/table.js +36 -0
  85. package/lib/handlers/entity/table.js.map +7 -0
  86. package/lib/handlers/entity/tolerance.cjs +90 -0
  87. package/lib/handlers/entity/tolerance.cjs.map +7 -0
  88. package/lib/handlers/entity/tolerance.js +55 -0
  89. package/lib/handlers/entity/tolerance.js.map +7 -0
  90. package/lib/handlers/entity/trace.cjs +101 -0
  91. package/lib/handlers/entity/trace.cjs.map +7 -0
  92. package/lib/handlers/entity/trace.js +66 -0
  93. package/lib/handlers/entity/trace.js.map +7 -0
  94. package/lib/handlers/entity/wipeout.cjs +122 -0
  95. package/lib/handlers/entity/wipeout.cjs.map +7 -0
  96. package/lib/handlers/entity/wipeout.js +87 -0
  97. package/lib/handlers/entity/wipeout.js.map +7 -0
  98. package/lib/handlers/entity/xline.cjs +81 -0
  99. package/lib/handlers/entity/xline.cjs.map +7 -0
  100. package/lib/handlers/entity/xline.js +46 -0
  101. package/lib/handlers/entity/xline.js.map +7 -0
  102. package/lib/handlers/objects.cjs +299 -136
  103. package/lib/handlers/objects.cjs.map +2 -2
  104. package/lib/handlers/objects.js +299 -136
  105. package/lib/handlers/objects.js.map +2 -2
  106. package/lib/handlers/tables.cjs +96 -17
  107. package/lib/handlers/tables.cjs.map +2 -2
  108. package/lib/handlers/tables.js +96 -17
  109. package/lib/handlers/tables.js.map +2 -2
  110. package/lib/index.cjs +5 -2
  111. package/lib/index.cjs.map +3 -3
  112. package/lib/index.js +18 -16
  113. package/lib/index.js.map +3 -3
  114. package/lib/toJson.cjs +29 -0
  115. package/lib/toJson.cjs.map +7 -0
  116. package/lib/toJson.js +9 -0
  117. package/lib/toJson.js.map +7 -0
  118. package/lib/toSVG.cjs +105 -11
  119. package/lib/toSVG.cjs.map +3 -3
  120. package/lib/toSVG.js +106 -12
  121. package/lib/toSVG.js.map +2 -2
  122. package/lib/types/dimension-entity.cjs.map +1 -1
  123. package/lib/types/entity.cjs.map +1 -1
  124. package/lib/types/helper.cjs.map +1 -1
  125. package/lib/types/image-entity.cjs +17 -0
  126. package/lib/types/image-entity.cjs.map +7 -0
  127. package/lib/types/image-entity.js +1 -0
  128. package/lib/types/image-entity.js.map +7 -0
  129. package/lib/types/index.cjs +28 -0
  130. package/lib/types/index.cjs.map +2 -2
  131. package/lib/types/index.js +14 -0
  132. package/lib/types/index.js.map +2 -2
  133. package/lib/types/leader-entity.cjs +17 -0
  134. package/lib/types/leader-entity.cjs.map +7 -0
  135. package/lib/types/leader-entity.js +1 -0
  136. package/lib/types/leader-entity.js.map +7 -0
  137. package/lib/types/mleader-entity.cjs +17 -0
  138. package/lib/types/mleader-entity.cjs.map +7 -0
  139. package/lib/types/mleader-entity.js +1 -0
  140. package/lib/types/mleader-entity.js.map +7 -0
  141. package/lib/types/mline-entity.cjs +17 -0
  142. package/lib/types/mline-entity.cjs.map +7 -0
  143. package/lib/types/mline-entity.js +1 -0
  144. package/lib/types/mline-entity.js.map +7 -0
  145. package/lib/types/oleframe-entity.cjs +17 -0
  146. package/lib/types/oleframe-entity.cjs.map +7 -0
  147. package/lib/types/oleframe-entity.js +1 -0
  148. package/lib/types/oleframe-entity.js.map +7 -0
  149. package/lib/types/options.cjs.map +1 -1
  150. package/lib/types/ray-entity.cjs +17 -0
  151. package/lib/types/ray-entity.cjs.map +7 -0
  152. package/lib/types/ray-entity.js +1 -0
  153. package/lib/types/ray-entity.js.map +7 -0
  154. package/lib/types/region-entity.cjs +17 -0
  155. package/lib/types/region-entity.cjs.map +7 -0
  156. package/lib/types/region-entity.js +1 -0
  157. package/lib/types/region-entity.js.map +7 -0
  158. package/lib/types/shape-entity.cjs +17 -0
  159. package/lib/types/shape-entity.cjs.map +7 -0
  160. package/lib/types/shape-entity.js +1 -0
  161. package/lib/types/shape-entity.js.map +7 -0
  162. package/lib/types/table-entity.cjs +17 -0
  163. package/lib/types/table-entity.cjs.map +7 -0
  164. package/lib/types/table-entity.js +1 -0
  165. package/lib/types/table-entity.js.map +7 -0
  166. package/lib/types/tables.cjs.map +1 -1
  167. package/lib/types/tolerance-entity.cjs +17 -0
  168. package/lib/types/tolerance-entity.cjs.map +7 -0
  169. package/lib/types/tolerance-entity.js +1 -0
  170. package/lib/types/tolerance-entity.js.map +7 -0
  171. package/lib/types/trace-entity.cjs +17 -0
  172. package/lib/types/trace-entity.cjs.map +7 -0
  173. package/lib/types/trace-entity.js +1 -0
  174. package/lib/types/trace-entity.js.map +7 -0
  175. package/lib/types/underlay-entity.cjs +17 -0
  176. package/lib/types/underlay-entity.cjs.map +7 -0
  177. package/lib/types/underlay-entity.js +1 -0
  178. package/lib/types/underlay-entity.js.map +7 -0
  179. package/lib/types/wipeout-entity.cjs +17 -0
  180. package/lib/types/wipeout-entity.cjs.map +7 -0
  181. package/lib/types/wipeout-entity.js +1 -0
  182. package/lib/types/wipeout-entity.js.map +7 -0
  183. package/lib/types/xline-entity.cjs +17 -0
  184. package/lib/types/xline-entity.cjs.map +7 -0
  185. package/lib/types/xline-entity.js +1 -0
  186. package/lib/types/xline-entity.js.map +7 -0
  187. package/lib/util/escapeXmlText.cjs +27 -0
  188. package/lib/util/escapeXmlText.cjs.map +7 -0
  189. package/lib/util/escapeXmlText.js +7 -0
  190. package/lib/util/escapeXmlText.js.map +7 -0
  191. package/package.json +9 -18
  192. package/playwright.config.cjs +20 -0
  193. package/src/Helper.ts +8 -3
  194. package/src/denormalise.ts +182 -116
  195. package/src/dimensionToSVG.ts +466 -54
  196. package/src/entityToPolyline.ts +124 -2
  197. package/src/handlers/entities.ts +129 -34
  198. package/src/handlers/entity/dgnUnderlay.ts +94 -0
  199. package/src/handlers/entity/dimension.ts +27 -1
  200. package/src/handlers/entity/dwfUnderlay.ts +94 -0
  201. package/src/handlers/entity/image.ts +118 -0
  202. package/src/handlers/entity/leader.ts +153 -0
  203. package/src/handlers/entity/mleader.ts +46 -0
  204. package/src/handlers/entity/mline.ts +74 -0
  205. package/src/handlers/entity/oleframe.ts +62 -0
  206. package/src/handlers/entity/pdfUnderlay.ts +94 -0
  207. package/src/handlers/entity/ray.ts +52 -0
  208. package/src/handlers/entity/region.ts +42 -0
  209. package/src/handlers/entity/shape.ts +73 -0
  210. package/src/handlers/entity/table.ts +49 -0
  211. package/src/handlers/entity/tolerance.ts +75 -0
  212. package/src/handlers/entity/trace.ts +72 -0
  213. package/src/handlers/entity/wipeout.ts +114 -0
  214. package/src/handlers/entity/xline.ts +52 -0
  215. package/src/handlers/objects.ts +379 -139
  216. package/src/handlers/tables.ts +134 -21
  217. package/src/index.ts +9 -18
  218. package/src/toJson.ts +8 -0
  219. package/src/toSVG.ts +143 -10
  220. package/src/types/dimension-entity.ts +11 -0
  221. package/src/types/entity.ts +30 -0
  222. package/src/types/helper.ts +2 -1
  223. package/src/types/image-entity.ts +35 -0
  224. package/src/types/index.ts +14 -0
  225. package/src/types/leader-entity.ts +40 -0
  226. package/src/types/mleader-entity.ts +8 -0
  227. package/src/types/mline-entity.ts +12 -0
  228. package/src/types/oleframe-entity.ts +40 -0
  229. package/src/types/options.ts +48 -0
  230. package/src/types/ray-entity.ts +12 -0
  231. package/src/types/region-entity.ts +11 -0
  232. package/src/types/shape-entity.ts +19 -0
  233. package/src/types/table-entity.ts +14 -0
  234. package/src/types/tables.ts +160 -0
  235. package/src/types/tolerance-entity.ts +20 -0
  236. package/src/types/trace-entity.ts +14 -0
  237. package/src/types/underlay-entity.ts +35 -0
  238. package/src/types/wipeout-entity.ts +20 -0
  239. package/src/types/xline-entity.ts +12 -0
  240. package/src/util/escapeXmlText.ts +10 -0
  241. package/tools/browser_test_server.cjs +87 -0
  242. package/tools/ezdxf_generate_dimensions_all_types.py +246 -0
  243. package/tools/ezdxf_generate_dimensions_angular_3p.py +59 -0
  244. package/tools/ezdxf_generate_dimensions_large_scale.py +87 -0
  245. package/tools/ezdxf_regenerate_problem_fixtures.py +184 -0
  246. package/tools/ezdxf_validate_fixtures.py +165 -0
  247. package/docs/DIMENSION_SUMMARY.md +0 -248
  248. package/docs/DIMENSION_SUMMARY.pt-BR.md +0 -248
  249. package/docs/IMPLEMENTED-2D-ENTITIES.md +0 -54
  250. package/docs/IMPLEMENTED-2D-ENTITIES.pt-BR.md +0 -54
  251. package/docs/TEXT-MTEXT-DIMENSION-SUPPORT.md +0 -241
  252. package/docs/TEXT-MTEXT-DIMENSION-SUPPORT.pt-BR.md +0 -169
@@ -21,150 +21,313 @@ __export(objects_exports, {
21
21
  default: () => parseObjects
22
22
  });
23
23
  module.exports = __toCommonJS(objects_exports);
24
- function parseObjects(tuples) {
25
- let state;
26
- const objects = {
27
- layouts: []
28
- };
29
- let layout;
24
+ function groupObjectsByZero(tuples) {
25
+ const groups = [];
26
+ let current;
30
27
  for (const tuple of tuples) {
28
+ const code = tuple[0];
29
+ if (code === 0) {
30
+ if (current && current.length > 0) groups.push(current);
31
+ current = [tuple];
32
+ continue;
33
+ }
34
+ if (!current) continue;
35
+ current.push(tuple);
36
+ }
37
+ if (current && current.length > 0) groups.push(current);
38
+ return groups;
39
+ }
40
+ const LAYOUT_FLOAT_FIELDS = {
41
+ 10: "minLimitX",
42
+ 20: "minLimitY",
43
+ 11: "maxLimitX",
44
+ 21: "maxLimitY",
45
+ 12: "x",
46
+ 22: "y",
47
+ 32: "z",
48
+ 14: "minX",
49
+ 24: "minY",
50
+ 34: "minZ",
51
+ 15: "maxX",
52
+ 25: "maxY",
53
+ 35: "maxZ",
54
+ 146: "elevation",
55
+ 13: "ucsX",
56
+ 23: "ucsY",
57
+ 33: "ucsZ",
58
+ 16: "ucsXaxisX",
59
+ 26: "ucsXaxisY",
60
+ 36: "ucsXaxisZ",
61
+ 17: "ucsYaxisX",
62
+ 27: "ucsYaxisY",
63
+ 37: "ucsYaxisZ"
64
+ };
65
+ const LAYOUT_DIRECT_FIELDS = {
66
+ 1: "name",
67
+ 5: "handle",
68
+ 71: "tabOrder",
69
+ 330: "tableRecord",
70
+ 331: "lastActiveViewport",
71
+ 333: "shadePlot"
72
+ };
73
+ const LAYOUT_UCS_TYPE = {
74
+ 0: "NOT ORTHOGRAPHIC",
75
+ 1: "TOP",
76
+ 2: "BOTTOM",
77
+ 3: "FRONT",
78
+ 4: "BACK",
79
+ 5: "LEFT",
80
+ 6: "RIGHT"
81
+ };
82
+ function consumeLayoutStartTuple(current, tuple) {
83
+ if (tuple[1] === "LAYOUT") return { state: "layout", layout: {} };
84
+ return { state: "IDLE", layout: current.layout };
85
+ }
86
+ function consumeLayoutSubclassTuple(current, tuple) {
87
+ if (tuple[0] === 100 && tuple[1] === "AcDbLayout") return { state: "AcDbLayout", layout: current.layout };
88
+ return current;
89
+ }
90
+ function applyLayoutFieldTuple(layout, tuple) {
91
+ const type = tuple[0];
92
+ const value = tuple[1];
93
+ const floatKey = LAYOUT_FLOAT_FIELDS[type];
94
+ if (floatKey) {
95
+ ;
96
+ layout[floatKey] = Number.parseFloat(String(value));
97
+ return;
98
+ }
99
+ const directKey = LAYOUT_DIRECT_FIELDS[type];
100
+ if (directKey) {
101
+ ;
102
+ layout[directKey] = value;
103
+ return;
104
+ }
105
+ if (type === 70) {
106
+ layout.flag = value === 1 ? "PSLTSCALE" : "LIMCHECK";
107
+ return;
108
+ }
109
+ if (type === 76) {
110
+ const ucsType = LAYOUT_UCS_TYPE[Number(value)];
111
+ if (ucsType) layout.ucsType = ucsType;
112
+ }
113
+ }
114
+ function consumeLayoutTuple(current, tuple) {
115
+ if (tuple[0] === 0) return consumeLayoutStartTuple(current, tuple);
116
+ if (current.state === "layout") return consumeLayoutSubclassTuple(current, tuple);
117
+ if (current.state === "AcDbLayout" && current.layout) applyLayoutFieldTuple(current.layout, tuple);
118
+ return current;
119
+ }
120
+ function parseLayoutObject(group) {
121
+ let current = { state: "IDLE" };
122
+ for (const tuple of group) current = consumeLayoutTuple(current, tuple);
123
+ return current.layout;
124
+ }
125
+ function parseDictionaryObject(group) {
126
+ if (group[0]?.[1] !== "DICTIONARY") return void 0;
127
+ const dict = {
128
+ type: "DICTIONARY",
129
+ entries: {}
130
+ };
131
+ let pendingKey;
132
+ for (const tuple of group.slice(1)) {
31
133
  const type = tuple[0];
32
134
  const value = tuple[1];
33
- if (type === 0) {
34
- state = "IDLE";
135
+ if (type === 5) {
136
+ dict.handle = value;
137
+ continue;
35
138
  }
36
- if (value === "LAYOUT") {
37
- state = "layout";
38
- layout = {};
39
- objects.layouts.push(layout);
139
+ if (type === 330) {
140
+ dict.ownerHandle = value;
141
+ continue;
40
142
  }
41
- if (state === "layout" && type !== 0) {
42
- switch (type) {
43
- case 100:
44
- if (value === "AcDbLayout") state = "AcDbLayout";
45
- break;
46
- }
143
+ if (type === 3) {
144
+ pendingKey = String(value);
145
+ continue;
47
146
  }
48
- if (state === "AcDbLayout" && type !== 0 && layout) {
49
- switch (type) {
50
- case 1:
51
- layout.name = value;
52
- break;
53
- case 5:
54
- layout.handle = value;
55
- break;
56
- case 10:
57
- layout.minLimitX = Number.parseFloat(String(value));
58
- break;
59
- case 20:
60
- layout.minLimitY = Number.parseFloat(String(value));
61
- break;
62
- case 11:
63
- layout.maxLimitX = Number.parseFloat(String(value));
64
- break;
65
- case 21:
66
- layout.maxLimitY = Number.parseFloat(String(value));
67
- break;
68
- case 12:
69
- layout.x = Number.parseFloat(String(value));
70
- break;
71
- case 22:
72
- layout.y = Number.parseFloat(String(value));
73
- break;
74
- case 32:
75
- layout.z = Number.parseFloat(String(value));
76
- break;
77
- case 14:
78
- layout.minX = Number.parseFloat(String(value));
79
- break;
80
- case 24:
81
- layout.minY = Number.parseFloat(String(value));
82
- break;
83
- case 34:
84
- layout.minZ = Number.parseFloat(String(value));
85
- break;
86
- case 15:
87
- layout.maxX = Number.parseFloat(String(value));
88
- break;
89
- case 25:
90
- layout.maxY = Number.parseFloat(String(value));
91
- break;
92
- case 35:
93
- layout.maxZ = Number.parseFloat(String(value));
94
- break;
95
- case 70:
96
- layout.flag = value === 1 ? "PSLTSCALE" : "LIMCHECK";
97
- break;
98
- case 71:
99
- layout.tabOrder = value;
100
- break;
101
- case 146:
102
- layout.elevation = Number.parseFloat(String(value));
103
- break;
104
- case 13:
105
- layout.ucsX = Number.parseFloat(String(value));
106
- break;
107
- case 23:
108
- layout.ucsY = Number.parseFloat(String(value));
109
- break;
110
- case 33:
111
- layout.ucsZ = Number.parseFloat(String(value));
112
- break;
113
- case 16:
114
- layout.ucsXaxisX = Number.parseFloat(String(value));
115
- break;
116
- case 26:
117
- layout.ucsXaxisY = Number.parseFloat(String(value));
118
- break;
119
- case 36:
120
- layout.ucsXaxisZ = Number.parseFloat(String(value));
121
- break;
122
- case 17:
123
- layout.ucsYaxisX = Number.parseFloat(String(value));
124
- break;
125
- case 27:
126
- layout.ucsYaxisY = Number.parseFloat(String(value));
127
- break;
128
- case 37:
129
- layout.ucsYaxisZ = Number.parseFloat(String(value));
130
- break;
131
- case 76:
132
- switch (value) {
133
- case 0:
134
- layout.ucsType = "NOT ORTHOGRAPHIC";
135
- break;
136
- case 1:
137
- layout.ucsType = "TOP";
138
- break;
139
- case 2:
140
- layout.ucsType = "BOTTOM";
141
- break;
142
- case 3:
143
- layout.ucsType = "FRONT";
144
- break;
145
- case 4:
146
- layout.ucsType = "BACK";
147
- break;
148
- case 5:
149
- layout.ucsType = "LEFT";
150
- break;
151
- case 6:
152
- layout.ucsType = "RIGHT";
153
- break;
154
- }
155
- break;
156
- case 330:
157
- layout.tableRecord = value;
158
- break;
159
- case 331:
160
- layout.lastActiveViewport = value;
161
- break;
162
- case 333:
163
- layout.shadePlot = value;
164
- break;
165
- }
147
+ if ((type === 350 || type === 360) && pendingKey) {
148
+ dict.entries[pendingKey] = String(value);
149
+ pendingKey = void 0;
166
150
  }
167
151
  }
152
+ return dict;
153
+ }
154
+ function parseXRecordObject(group) {
155
+ if (group[0]?.[1] !== "XRECORD") return void 0;
156
+ const tuples = group.slice(1);
157
+ const xRecord = {
158
+ type: "XRECORD",
159
+ tuples
160
+ };
161
+ for (const tuple of tuples) {
162
+ const type = tuple[0];
163
+ const value = tuple[1];
164
+ if (type === 5) xRecord.handle = value;
165
+ if (type === 330) xRecord.ownerHandle = value;
166
+ }
167
+ return xRecord;
168
+ }
169
+ function parseImageDefObject(group) {
170
+ if (group[0]?.[1] !== "IMAGEDEF") return void 0;
171
+ const tuples = group.slice(1);
172
+ const imageDef = {
173
+ type: "IMAGEDEF",
174
+ tuples
175
+ };
176
+ for (const tuple of tuples) {
177
+ const type = tuple[0];
178
+ const value = tuple[1];
179
+ if (type === 5) imageDef.handle = value;
180
+ if (type === 330 && imageDef.ownerHandle === void 0) imageDef.ownerHandle = value;
181
+ if (type === 1) imageDef.fileName = String(value);
182
+ if (type === 10) imageDef.pixelSizeX = Number(value);
183
+ if (type === 20) imageDef.pixelSizeY = Number(value);
184
+ }
185
+ return imageDef;
186
+ }
187
+ function parseImageDefReactorObject(group) {
188
+ if (group[0]?.[1] !== "IMAGEDEF_REACTOR") return void 0;
189
+ const tuples = group.slice(1);
190
+ const reactor = {
191
+ type: "IMAGEDEF_REACTOR",
192
+ tuples
193
+ };
194
+ for (const tuple of tuples) {
195
+ const type = tuple[0];
196
+ const value = tuple[1];
197
+ if (type === 5) reactor.handle = value;
198
+ if (type === 330) reactor.imageHandle = value;
199
+ }
200
+ return reactor;
201
+ }
202
+ function parseDimAssocObject(group) {
203
+ if (group[0]?.[1] !== "DIMASSOC") return void 0;
204
+ const tuples = group.slice(1);
205
+ const dimAssoc = {
206
+ type: "DIMASSOC",
207
+ tuples
208
+ };
209
+ for (const tuple of tuples) {
210
+ const type = tuple[0];
211
+ const value = tuple[1];
212
+ if (type === 5) dimAssoc.handle = value;
213
+ if (type === 330) dimAssoc.ownerHandle = value;
214
+ }
215
+ return dimAssoc;
216
+ }
217
+ function parseFieldObject(group) {
218
+ if (group[0]?.[1] !== "FIELD") return void 0;
219
+ const tuples = group.slice(1);
220
+ const field = {
221
+ type: "FIELD",
222
+ tuples
223
+ };
224
+ for (const tuple of tuples) {
225
+ const type = tuple[0];
226
+ const value = tuple[1];
227
+ if (type === 5) field.handle = value;
228
+ if (type === 330) field.ownerHandle = value;
229
+ }
230
+ return field;
231
+ }
232
+ const UNDERLAY_DEFINITION_OBJECT_TYPES = /* @__PURE__ */ new Set([
233
+ "UNDERLAYDEFINITION",
234
+ "PDFDEFINITION",
235
+ "DWFDEFINITION",
236
+ "DGNDEFINITION"
237
+ ]);
238
+ function parseUnderlayDefinitionObject(group) {
239
+ const objectType = group[0]?.[1];
240
+ if (typeof objectType !== "string") return void 0;
241
+ if (!UNDERLAY_DEFINITION_OBJECT_TYPES.has(objectType)) return void 0;
242
+ const tuples = group.slice(1);
243
+ const def = {
244
+ type: objectType,
245
+ tuples
246
+ };
247
+ for (const tuple of tuples) {
248
+ const type = tuple[0];
249
+ const value = tuple[1];
250
+ if (type === 5) def.handle = value;
251
+ if (type === 330 && def.ownerHandle === void 0) def.ownerHandle = value;
252
+ if (type === 1) def.fileName = String(value);
253
+ if (type === 2) def.underlayName = String(value);
254
+ }
255
+ return def;
256
+ }
257
+ const OBJECT_GROUP_HANDLERS = {
258
+ LAYOUT: (objects, group) => {
259
+ const layout = parseLayoutObject(group);
260
+ if (layout) objects.layouts.push(layout);
261
+ },
262
+ DICTIONARY: (objects, group) => {
263
+ const dict = parseDictionaryObject(group);
264
+ const handle = dict?.handle ? String(dict.handle) : void 0;
265
+ if (dict && handle) objects.dictionaries[handle] = dict;
266
+ },
267
+ XRECORD: (objects, group) => {
268
+ const xRecord = parseXRecordObject(group);
269
+ const handle = xRecord?.handle ? String(xRecord.handle) : void 0;
270
+ if (xRecord && handle) objects.xRecords[handle] = xRecord;
271
+ },
272
+ IMAGEDEF: (objects, group) => {
273
+ const imageDef = parseImageDefObject(group);
274
+ const handle = imageDef?.handle ? String(imageDef.handle) : void 0;
275
+ if (imageDef && handle) objects.imageDefs[handle] = imageDef;
276
+ },
277
+ IMAGEDEF_REACTOR: (objects, group) => {
278
+ const reactor = parseImageDefReactorObject(group);
279
+ const handle = reactor?.handle ? String(reactor.handle) : void 0;
280
+ if (reactor && handle) objects.imageDefReactors[handle] = reactor;
281
+ },
282
+ UNDERLAYDEFINITION: (objects, group) => {
283
+ const def = parseUnderlayDefinitionObject(group);
284
+ const handle = def?.handle ? String(def.handle) : void 0;
285
+ if (def && handle) objects.underlayDefinitions[handle] = def;
286
+ },
287
+ PDFDEFINITION: (objects, group) => {
288
+ const def = parseUnderlayDefinitionObject(group);
289
+ const handle = def?.handle ? String(def.handle) : void 0;
290
+ if (def && handle) objects.underlayDefinitions[handle] = def;
291
+ },
292
+ DWFDEFINITION: (objects, group) => {
293
+ const def = parseUnderlayDefinitionObject(group);
294
+ const handle = def?.handle ? String(def.handle) : void 0;
295
+ if (def && handle) objects.underlayDefinitions[handle] = def;
296
+ },
297
+ DGNDEFINITION: (objects, group) => {
298
+ const def = parseUnderlayDefinitionObject(group);
299
+ const handle = def?.handle ? String(def.handle) : void 0;
300
+ if (def && handle) objects.underlayDefinitions[handle] = def;
301
+ },
302
+ DIMASSOC: (objects, group) => {
303
+ const dimAssoc = parseDimAssocObject(group);
304
+ const handle = dimAssoc?.handle ? String(dimAssoc.handle) : void 0;
305
+ if (dimAssoc && handle) objects.dimAssocs[handle] = dimAssoc;
306
+ },
307
+ FIELD: (objects, group) => {
308
+ const field = parseFieldObject(group);
309
+ const handle = field?.handle ? String(field.handle) : void 0;
310
+ if (field && handle) objects.fields[handle] = field;
311
+ }
312
+ };
313
+ function parseObjects(tuples) {
314
+ const objects = {
315
+ layouts: [],
316
+ dictionaries: {},
317
+ xRecords: {},
318
+ imageDefs: {},
319
+ imageDefReactors: {},
320
+ underlayDefinitions: {},
321
+ dimAssocs: {},
322
+ fields: {}
323
+ };
324
+ const groups = groupObjectsByZero(tuples);
325
+ for (const group of groups) {
326
+ const objectType = group[0]?.[1];
327
+ if (typeof objectType !== "string") continue;
328
+ const handler = OBJECT_GROUP_HANDLERS[objectType];
329
+ if (handler) handler(objects, group);
330
+ }
168
331
  return objects;
169
332
  }
170
333
  //# sourceMappingURL=objects.cjs.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/handlers/objects.ts"],
4
- "sourcesContent": ["import type { DXFTuple, LayoutInternal, ParsedObjects } from '../types'\n\nexport default function parseObjects(tuples: DXFTuple[]): ParsedObjects {\n let state: 'IDLE' | 'layout' | 'AcDbLayout' | undefined\n const objects: ParsedObjects = {\n layouts: [],\n }\n let layout: LayoutInternal | undefined\n\n for (const tuple of tuples) {\n const type = tuple[0]\n const value = tuple[1]\n if (type === 0) {\n state = 'IDLE'\n }\n if (value === 'LAYOUT') {\n state = 'layout'\n layout = {}\n objects.layouts.push(layout)\n }\n if (state === 'layout' && type !== 0) {\n // wait until AcDbLayout shows up\n switch (type) {\n case 100:\n if (value === 'AcDbLayout') state = 'AcDbLayout'\n break\n }\n }\n if (state === 'AcDbLayout' && type !== 0 && layout) {\n // save layout attributes\n switch (type) {\n case 1:\n layout.name = value\n break\n case 5:\n layout.handle = value\n break\n case 10:\n layout.minLimitX = Number.parseFloat(String(value))\n break\n case 20:\n layout.minLimitY = Number.parseFloat(String(value))\n break\n case 11:\n layout.maxLimitX = Number.parseFloat(String(value))\n break\n case 21:\n layout.maxLimitY = Number.parseFloat(String(value))\n break\n case 12:\n layout.x = Number.parseFloat(String(value))\n break\n case 22:\n layout.y = Number.parseFloat(String(value))\n break\n case 32:\n layout.z = Number.parseFloat(String(value))\n break\n case 14:\n layout.minX = Number.parseFloat(String(value))\n break\n case 24:\n layout.minY = Number.parseFloat(String(value))\n break\n case 34:\n layout.minZ = Number.parseFloat(String(value))\n break\n case 15:\n layout.maxX = Number.parseFloat(String(value))\n break\n case 25:\n layout.maxY = Number.parseFloat(String(value))\n break\n case 35:\n layout.maxZ = Number.parseFloat(String(value))\n break\n case 70:\n layout.flag = value === 1 ? 'PSLTSCALE' : 'LIMCHECK'\n break\n case 71:\n layout.tabOrder = value\n break\n case 146:\n layout.elevation = Number.parseFloat(String(value))\n break\n case 13:\n layout.ucsX = Number.parseFloat(String(value))\n break\n case 23:\n layout.ucsY = Number.parseFloat(String(value))\n break\n case 33:\n layout.ucsZ = Number.parseFloat(String(value))\n break\n case 16:\n layout.ucsXaxisX = Number.parseFloat(String(value))\n break\n case 26:\n layout.ucsXaxisY = Number.parseFloat(String(value))\n break\n case 36:\n layout.ucsXaxisZ = Number.parseFloat(String(value))\n break\n case 17:\n layout.ucsYaxisX = Number.parseFloat(String(value))\n break\n case 27:\n layout.ucsYaxisY = Number.parseFloat(String(value))\n break\n case 37:\n layout.ucsYaxisZ = Number.parseFloat(String(value))\n break\n case 76:\n switch (value) {\n case 0:\n layout.ucsType = 'NOT ORTHOGRAPHIC'\n break\n case 1:\n layout.ucsType = 'TOP'\n break\n case 2:\n layout.ucsType = 'BOTTOM'\n break\n case 3:\n layout.ucsType = 'FRONT'\n break\n case 4:\n layout.ucsType = 'BACK'\n break\n case 5:\n layout.ucsType = 'LEFT'\n break\n case 6:\n layout.ucsType = 'RIGHT'\n break\n }\n break\n case 330:\n layout.tableRecord = value\n break\n case 331:\n layout.lastActiveViewport = value\n break\n case 333:\n layout.shadePlot = value\n break\n }\n }\n }\n\n return objects\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import type {\n DictionaryObject,\n DimAssocObject,\n DXFTuple,\n FieldObject,\n ImageDefObject,\n ImageDefReactorObject,\n LayoutInternal,\n ParsedObjects,\n UnderlayDefinitionObject,\n XRecordObject,\n} from '../types'\n\ntype ObjectGroup = DXFTuple[]\n\nfunction groupObjectsByZero(tuples: DXFTuple[]): ObjectGroup[] {\n const groups: ObjectGroup[] = []\n let current: ObjectGroup | undefined\n\n for (const tuple of tuples) {\n const code = tuple[0]\n if (code === 0) {\n if (current && current.length > 0) groups.push(current)\n current = [tuple]\n continue\n }\n if (!current) continue\n current.push(tuple)\n }\n\n if (current && current.length > 0) groups.push(current)\n return groups\n}\n\nconst LAYOUT_FLOAT_FIELDS: Record<number, keyof LayoutInternal> = {\n 10: 'minLimitX',\n 20: 'minLimitY',\n 11: 'maxLimitX',\n 21: 'maxLimitY',\n 12: 'x',\n 22: 'y',\n 32: 'z',\n 14: 'minX',\n 24: 'minY',\n 34: 'minZ',\n 15: 'maxX',\n 25: 'maxY',\n 35: 'maxZ',\n 146: 'elevation',\n 13: 'ucsX',\n 23: 'ucsY',\n 33: 'ucsZ',\n 16: 'ucsXaxisX',\n 26: 'ucsXaxisY',\n 36: 'ucsXaxisZ',\n 17: 'ucsYaxisX',\n 27: 'ucsYaxisY',\n 37: 'ucsYaxisZ',\n}\n\nconst LAYOUT_DIRECT_FIELDS: Record<number, keyof LayoutInternal> = {\n 1: 'name',\n 5: 'handle',\n 71: 'tabOrder',\n 330: 'tableRecord',\n 331: 'lastActiveViewport',\n 333: 'shadePlot',\n}\n\nconst LAYOUT_UCS_TYPE: Record<number, LayoutInternal['ucsType']> = {\n 0: 'NOT ORTHOGRAPHIC',\n 1: 'TOP',\n 2: 'BOTTOM',\n 3: 'FRONT',\n 4: 'BACK',\n 5: 'LEFT',\n 6: 'RIGHT',\n}\n\ntype LayoutParseState = {\n state: 'IDLE' | 'layout' | 'AcDbLayout'\n layout?: LayoutInternal\n}\n\nfunction consumeLayoutStartTuple(current: LayoutParseState, tuple: DXFTuple): LayoutParseState {\n if (tuple[1] === 'LAYOUT') return { state: 'layout', layout: {} }\n return { state: 'IDLE', layout: current.layout }\n}\n\nfunction consumeLayoutSubclassTuple(current: LayoutParseState, tuple: DXFTuple): LayoutParseState {\n if (tuple[0] === 100 && tuple[1] === 'AcDbLayout') return { state: 'AcDbLayout', layout: current.layout }\n return current\n}\n\nfunction applyLayoutFieldTuple(layout: LayoutInternal, tuple: DXFTuple): void {\n const type = tuple[0]\n const value = tuple[1]\n\n const floatKey = LAYOUT_FLOAT_FIELDS[type]\n if (floatKey) {\n ;(layout as any)[floatKey] = Number.parseFloat(String(value))\n return\n }\n\n const directKey = LAYOUT_DIRECT_FIELDS[type]\n if (directKey) {\n ;(layout as any)[directKey] = value\n return\n }\n\n if (type === 70) {\n layout.flag = value === 1 ? 'PSLTSCALE' : 'LIMCHECK'\n return\n }\n\n if (type === 76) {\n const ucsType = LAYOUT_UCS_TYPE[Number(value)]\n if (ucsType) layout.ucsType = ucsType\n }\n}\n\nfunction consumeLayoutTuple(current: LayoutParseState, tuple: DXFTuple): LayoutParseState {\n if (tuple[0] === 0) return consumeLayoutStartTuple(current, tuple)\n\n if (current.state === 'layout') return consumeLayoutSubclassTuple(current, tuple)\n\n if (current.state === 'AcDbLayout' && current.layout) applyLayoutFieldTuple(current.layout, tuple)\n return current\n}\n\nfunction parseLayoutObject(group: ObjectGroup): LayoutInternal | undefined {\n let current: LayoutParseState = { state: 'IDLE' }\n for (const tuple of group) current = consumeLayoutTuple(current, tuple)\n return current.layout\n}\n\nfunction parseDictionaryObject(group: ObjectGroup): DictionaryObject | undefined {\n if (group[0]?.[1] !== 'DICTIONARY') return undefined\n\n const dict: DictionaryObject = {\n type: 'DICTIONARY',\n entries: {},\n }\n\n let pendingKey: string | undefined\n for (const tuple of group.slice(1)) {\n const type = tuple[0]\n const value = tuple[1]\n\n if (type === 5) {\n dict.handle = value\n continue\n }\n if (type === 330) {\n dict.ownerHandle = value\n continue\n }\n if (type === 3) {\n pendingKey = String(value)\n continue\n }\n if ((type === 350 || type === 360) && pendingKey) {\n dict.entries[pendingKey] = String(value)\n pendingKey = undefined\n }\n }\n\n return dict\n}\n\nfunction parseXRecordObject(group: ObjectGroup): XRecordObject | undefined {\n if (group[0]?.[1] !== 'XRECORD') return undefined\n\n const tuples = group.slice(1)\n\n const xRecord: XRecordObject = {\n type: 'XRECORD',\n tuples,\n }\n\n for (const tuple of tuples) {\n const type = tuple[0]\n const value = tuple[1]\n\n if (type === 5) xRecord.handle = value\n if (type === 330) xRecord.ownerHandle = value\n }\n\n return xRecord\n}\n\nfunction parseImageDefObject(group: ObjectGroup): ImageDefObject | undefined {\n if (group[0]?.[1] !== 'IMAGEDEF') return undefined\n\n const tuples = group.slice(1)\n\n const imageDef: ImageDefObject = {\n type: 'IMAGEDEF',\n tuples,\n }\n\n for (const tuple of tuples) {\n const type = tuple[0]\n const value = tuple[1]\n\n if (type === 5) imageDef.handle = value\n if (type === 330 && imageDef.ownerHandle === undefined) imageDef.ownerHandle = value\n if (type === 1) imageDef.fileName = String(value)\n if (type === 10) imageDef.pixelSizeX = Number(value)\n if (type === 20) imageDef.pixelSizeY = Number(value)\n }\n\n return imageDef\n}\n\nfunction parseImageDefReactorObject(group: ObjectGroup): ImageDefReactorObject | undefined {\n if (group[0]?.[1] !== 'IMAGEDEF_REACTOR') return undefined\n\n const tuples = group.slice(1)\n\n const reactor: ImageDefReactorObject = {\n type: 'IMAGEDEF_REACTOR',\n tuples,\n }\n\n for (const tuple of tuples) {\n const type = tuple[0]\n const value = tuple[1]\n\n if (type === 5) reactor.handle = value\n if (type === 330) reactor.imageHandle = value\n }\n\n return reactor\n}\n\nfunction parseDimAssocObject(group: ObjectGroup): DimAssocObject | undefined {\n if (group[0]?.[1] !== 'DIMASSOC') return undefined\n\n const tuples = group.slice(1)\n\n const dimAssoc: DimAssocObject = {\n type: 'DIMASSOC',\n tuples,\n }\n\n for (const tuple of tuples) {\n const type = tuple[0]\n const value = tuple[1]\n\n if (type === 5) dimAssoc.handle = value\n if (type === 330) dimAssoc.ownerHandle = value\n }\n\n return dimAssoc\n}\n\nfunction parseFieldObject(group: ObjectGroup): FieldObject | undefined {\n if (group[0]?.[1] !== 'FIELD') return undefined\n\n const tuples = group.slice(1)\n\n const field: FieldObject = {\n type: 'FIELD',\n tuples,\n }\n\n for (const tuple of tuples) {\n const type = tuple[0]\n const value = tuple[1]\n\n if (type === 5) field.handle = value\n if (type === 330) field.ownerHandle = value\n }\n\n return field\n}\n\nconst UNDERLAY_DEFINITION_OBJECT_TYPES = new Set([\n 'UNDERLAYDEFINITION',\n 'PDFDEFINITION',\n 'DWFDEFINITION',\n 'DGNDEFINITION',\n])\n\nfunction parseUnderlayDefinitionObject(group: ObjectGroup): UnderlayDefinitionObject | undefined {\n const objectType = group[0]?.[1]\n if (typeof objectType !== 'string') return undefined\n if (!UNDERLAY_DEFINITION_OBJECT_TYPES.has(objectType)) return undefined\n\n const tuples = group.slice(1)\n\n const def: UnderlayDefinitionObject = {\n type: objectType as UnderlayDefinitionObject['type'],\n tuples,\n }\n\n for (const tuple of tuples) {\n const type = tuple[0]\n const value = tuple[1]\n\n if (type === 5) def.handle = value\n if (type === 330 && def.ownerHandle === undefined) def.ownerHandle = value\n if (type === 1) def.fileName = String(value)\n if (type === 2) def.underlayName = String(value)\n }\n\n return def\n}\n\ntype ObjectGroupHandler = (objects: ParsedObjects, group: ObjectGroup) => void\n\nconst OBJECT_GROUP_HANDLERS: Record<string, ObjectGroupHandler> = {\n LAYOUT: (objects, group) => {\n const layout = parseLayoutObject(group)\n if (layout) objects.layouts.push(layout)\n },\n DICTIONARY: (objects, group) => {\n const dict = parseDictionaryObject(group)\n const handle = dict?.handle ? String(dict.handle) : undefined\n if (dict && handle) objects.dictionaries![handle] = dict\n },\n XRECORD: (objects, group) => {\n const xRecord = parseXRecordObject(group)\n const handle = xRecord?.handle ? String(xRecord.handle) : undefined\n if (xRecord && handle) objects.xRecords![handle] = xRecord\n },\n IMAGEDEF: (objects, group) => {\n const imageDef = parseImageDefObject(group)\n const handle = imageDef?.handle ? String(imageDef.handle) : undefined\n if (imageDef && handle) objects.imageDefs![handle] = imageDef\n },\n IMAGEDEF_REACTOR: (objects, group) => {\n const reactor = parseImageDefReactorObject(group)\n const handle = reactor?.handle ? String(reactor.handle) : undefined\n if (reactor && handle) objects.imageDefReactors![handle] = reactor\n },\n UNDERLAYDEFINITION: (objects, group) => {\n const def = parseUnderlayDefinitionObject(group)\n const handle = def?.handle ? String(def.handle) : undefined\n if (def && handle) objects.underlayDefinitions![handle] = def\n },\n PDFDEFINITION: (objects, group) => {\n const def = parseUnderlayDefinitionObject(group)\n const handle = def?.handle ? String(def.handle) : undefined\n if (def && handle) objects.underlayDefinitions![handle] = def\n },\n DWFDEFINITION: (objects, group) => {\n const def = parseUnderlayDefinitionObject(group)\n const handle = def?.handle ? String(def.handle) : undefined\n if (def && handle) objects.underlayDefinitions![handle] = def\n },\n DGNDEFINITION: (objects, group) => {\n const def = parseUnderlayDefinitionObject(group)\n const handle = def?.handle ? String(def.handle) : undefined\n if (def && handle) objects.underlayDefinitions![handle] = def\n },\n DIMASSOC: (objects, group) => {\n const dimAssoc = parseDimAssocObject(group)\n const handle = dimAssoc?.handle ? String(dimAssoc.handle) : undefined\n if (dimAssoc && handle) objects.dimAssocs![handle] = dimAssoc\n },\n FIELD: (objects, group) => {\n const field = parseFieldObject(group)\n const handle = field?.handle ? String(field.handle) : undefined\n if (field && handle) objects.fields![handle] = field\n },\n}\n\nexport default function parseObjects(tuples: DXFTuple[]): ParsedObjects {\n const objects: ParsedObjects = {\n layouts: [],\n dictionaries: {},\n xRecords: {},\n imageDefs: {},\n imageDefReactors: {},\n underlayDefinitions: {},\n dimAssocs: {},\n fields: {},\n }\n\n const groups = groupObjectsByZero(tuples)\n for (const group of groups) {\n const objectType = group[0]?.[1]\n if (typeof objectType !== 'string') continue\n\n const handler = OBJECT_GROUP_HANDLERS[objectType]\n if (handler) handler(objects, group)\n }\n\n return objects\n}\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }