@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.
- package/.eslintrc.json +1 -16
- package/.github/instructions/code-patterns.instructions.md +1 -1
- package/.github/instructions/exdxf.instruction.md +161 -0
- package/.github/instructions/tdd.instructions.md +271 -0
- package/.yarn/install-state.gz +0 -0
- package/ARCHITECTURE.md +163 -0
- package/CHANGELOG.md +39 -0
- package/CONTRIBUTING.md +16 -14
- package/README.md +113 -16
- package/{PLAN.md → ROADMAP.md} +244 -102
- package/dist/dxf.js +2212 -454
- package/docs/EZDXF_REFERENCE_SITEMAP.md +55 -0
- package/docs/FIXTURE_VALIDATION_EZDXF.md +62 -0
- package/lib/Helper.cjs +6 -2
- package/lib/Helper.cjs.map +3 -3
- package/lib/Helper.js +6 -2
- package/lib/Helper.js.map +2 -2
- package/lib/denormalise.cjs +131 -91
- package/lib/denormalise.cjs.map +2 -2
- package/lib/denormalise.js +131 -91
- package/lib/denormalise.js.map +2 -2
- package/lib/dimensionToSVG.cjs +318 -53
- package/lib/dimensionToSVG.cjs.map +3 -3
- package/lib/dimensionToSVG.js +316 -52
- package/lib/dimensionToSVG.js.map +2 -2
- package/lib/entityToPolyline.cjs +95 -0
- package/lib/entityToPolyline.cjs.map +3 -3
- package/lib/entityToPolyline.js +95 -0
- package/lib/entityToPolyline.js.map +2 -2
- package/lib/handlers/entities.cjs +111 -27
- package/lib/handlers/entities.cjs.map +3 -3
- package/lib/handlers/entities.js +111 -27
- package/lib/handlers/entities.js.map +3 -3
- package/lib/handlers/entity/dgnUnderlay.cjs +106 -0
- package/lib/handlers/entity/dgnUnderlay.cjs.map +7 -0
- package/lib/handlers/entity/dgnUnderlay.js +71 -0
- package/lib/handlers/entity/dgnUnderlay.js.map +7 -0
- package/lib/handlers/entity/dimension.cjs +24 -0
- package/lib/handlers/entity/dimension.cjs.map +2 -2
- package/lib/handlers/entity/dimension.js +24 -0
- package/lib/handlers/entity/dimension.js.map +2 -2
- package/lib/handlers/entity/dwfUnderlay.cjs +106 -0
- package/lib/handlers/entity/dwfUnderlay.cjs.map +7 -0
- package/lib/handlers/entity/dwfUnderlay.js +71 -0
- package/lib/handlers/entity/dwfUnderlay.js.map +7 -0
- package/lib/handlers/entity/image.cjs +123 -0
- package/lib/handlers/entity/image.cjs.map +7 -0
- package/lib/handlers/entity/image.js +88 -0
- package/lib/handlers/entity/image.js.map +7 -0
- package/lib/handlers/entity/leader.cjs +148 -0
- package/lib/handlers/entity/leader.cjs.map +7 -0
- package/lib/handlers/entity/leader.js +113 -0
- package/lib/handlers/entity/leader.js.map +7 -0
- package/lib/handlers/entity/mleader.cjs +69 -0
- package/lib/handlers/entity/mleader.cjs.map +7 -0
- package/lib/handlers/entity/mleader.js +34 -0
- package/lib/handlers/entity/mleader.js.map +7 -0
- package/lib/handlers/entity/mline.cjs +91 -0
- package/lib/handlers/entity/mline.cjs.map +7 -0
- package/lib/handlers/entity/mline.js +56 -0
- package/lib/handlers/entity/mline.js.map +7 -0
- package/lib/handlers/entity/oleframe.cjs +98 -0
- package/lib/handlers/entity/oleframe.cjs.map +7 -0
- package/lib/handlers/entity/oleframe.js +63 -0
- package/lib/handlers/entity/oleframe.js.map +7 -0
- package/lib/handlers/entity/pdfUnderlay.cjs +106 -0
- package/lib/handlers/entity/pdfUnderlay.cjs.map +7 -0
- package/lib/handlers/entity/pdfUnderlay.js +71 -0
- package/lib/handlers/entity/pdfUnderlay.js.map +7 -0
- package/lib/handlers/entity/ray.cjs +81 -0
- package/lib/handlers/entity/ray.cjs.map +7 -0
- package/lib/handlers/entity/ray.js +46 -0
- package/lib/handlers/entity/ray.js.map +7 -0
- package/lib/handlers/entity/region.cjs +67 -0
- package/lib/handlers/entity/region.cjs.map +7 -0
- package/lib/handlers/entity/region.js +32 -0
- package/lib/handlers/entity/region.js.map +7 -0
- package/lib/handlers/entity/shape.cjs +95 -0
- package/lib/handlers/entity/shape.cjs.map +7 -0
- package/lib/handlers/entity/shape.js +60 -0
- package/lib/handlers/entity/shape.js.map +7 -0
- package/lib/handlers/entity/table.cjs +71 -0
- package/lib/handlers/entity/table.cjs.map +7 -0
- package/lib/handlers/entity/table.js +36 -0
- package/lib/handlers/entity/table.js.map +7 -0
- package/lib/handlers/entity/tolerance.cjs +90 -0
- package/lib/handlers/entity/tolerance.cjs.map +7 -0
- package/lib/handlers/entity/tolerance.js +55 -0
- package/lib/handlers/entity/tolerance.js.map +7 -0
- package/lib/handlers/entity/trace.cjs +101 -0
- package/lib/handlers/entity/trace.cjs.map +7 -0
- package/lib/handlers/entity/trace.js +66 -0
- package/lib/handlers/entity/trace.js.map +7 -0
- package/lib/handlers/entity/wipeout.cjs +122 -0
- package/lib/handlers/entity/wipeout.cjs.map +7 -0
- package/lib/handlers/entity/wipeout.js +87 -0
- package/lib/handlers/entity/wipeout.js.map +7 -0
- package/lib/handlers/entity/xline.cjs +81 -0
- package/lib/handlers/entity/xline.cjs.map +7 -0
- package/lib/handlers/entity/xline.js +46 -0
- package/lib/handlers/entity/xline.js.map +7 -0
- package/lib/handlers/objects.cjs +299 -136
- package/lib/handlers/objects.cjs.map +2 -2
- package/lib/handlers/objects.js +299 -136
- package/lib/handlers/objects.js.map +2 -2
- package/lib/handlers/tables.cjs +96 -17
- package/lib/handlers/tables.cjs.map +2 -2
- package/lib/handlers/tables.js +96 -17
- package/lib/handlers/tables.js.map +2 -2
- package/lib/index.cjs +5 -2
- package/lib/index.cjs.map +3 -3
- package/lib/index.js +18 -16
- package/lib/index.js.map +3 -3
- package/lib/toJson.cjs +29 -0
- package/lib/toJson.cjs.map +7 -0
- package/lib/toJson.js +9 -0
- package/lib/toJson.js.map +7 -0
- package/lib/toSVG.cjs +105 -11
- package/lib/toSVG.cjs.map +3 -3
- package/lib/toSVG.js +106 -12
- package/lib/toSVG.js.map +2 -2
- package/lib/types/dimension-entity.cjs.map +1 -1
- package/lib/types/entity.cjs.map +1 -1
- package/lib/types/helper.cjs.map +1 -1
- package/lib/types/image-entity.cjs +17 -0
- package/lib/types/image-entity.cjs.map +7 -0
- package/lib/types/image-entity.js +1 -0
- package/lib/types/image-entity.js.map +7 -0
- package/lib/types/index.cjs +28 -0
- package/lib/types/index.cjs.map +2 -2
- package/lib/types/index.js +14 -0
- package/lib/types/index.js.map +2 -2
- package/lib/types/leader-entity.cjs +17 -0
- package/lib/types/leader-entity.cjs.map +7 -0
- package/lib/types/leader-entity.js +1 -0
- package/lib/types/leader-entity.js.map +7 -0
- package/lib/types/mleader-entity.cjs +17 -0
- package/lib/types/mleader-entity.cjs.map +7 -0
- package/lib/types/mleader-entity.js +1 -0
- package/lib/types/mleader-entity.js.map +7 -0
- package/lib/types/mline-entity.cjs +17 -0
- package/lib/types/mline-entity.cjs.map +7 -0
- package/lib/types/mline-entity.js +1 -0
- package/lib/types/mline-entity.js.map +7 -0
- package/lib/types/oleframe-entity.cjs +17 -0
- package/lib/types/oleframe-entity.cjs.map +7 -0
- package/lib/types/oleframe-entity.js +1 -0
- package/lib/types/oleframe-entity.js.map +7 -0
- package/lib/types/options.cjs.map +1 -1
- package/lib/types/ray-entity.cjs +17 -0
- package/lib/types/ray-entity.cjs.map +7 -0
- package/lib/types/ray-entity.js +1 -0
- package/lib/types/ray-entity.js.map +7 -0
- package/lib/types/region-entity.cjs +17 -0
- package/lib/types/region-entity.cjs.map +7 -0
- package/lib/types/region-entity.js +1 -0
- package/lib/types/region-entity.js.map +7 -0
- package/lib/types/shape-entity.cjs +17 -0
- package/lib/types/shape-entity.cjs.map +7 -0
- package/lib/types/shape-entity.js +1 -0
- package/lib/types/shape-entity.js.map +7 -0
- package/lib/types/table-entity.cjs +17 -0
- package/lib/types/table-entity.cjs.map +7 -0
- package/lib/types/table-entity.js +1 -0
- package/lib/types/table-entity.js.map +7 -0
- package/lib/types/tables.cjs.map +1 -1
- package/lib/types/tolerance-entity.cjs +17 -0
- package/lib/types/tolerance-entity.cjs.map +7 -0
- package/lib/types/tolerance-entity.js +1 -0
- package/lib/types/tolerance-entity.js.map +7 -0
- package/lib/types/trace-entity.cjs +17 -0
- package/lib/types/trace-entity.cjs.map +7 -0
- package/lib/types/trace-entity.js +1 -0
- package/lib/types/trace-entity.js.map +7 -0
- package/lib/types/underlay-entity.cjs +17 -0
- package/lib/types/underlay-entity.cjs.map +7 -0
- package/lib/types/underlay-entity.js +1 -0
- package/lib/types/underlay-entity.js.map +7 -0
- package/lib/types/wipeout-entity.cjs +17 -0
- package/lib/types/wipeout-entity.cjs.map +7 -0
- package/lib/types/wipeout-entity.js +1 -0
- package/lib/types/wipeout-entity.js.map +7 -0
- package/lib/types/xline-entity.cjs +17 -0
- package/lib/types/xline-entity.cjs.map +7 -0
- package/lib/types/xline-entity.js +1 -0
- package/lib/types/xline-entity.js.map +7 -0
- package/lib/util/escapeXmlText.cjs +27 -0
- package/lib/util/escapeXmlText.cjs.map +7 -0
- package/lib/util/escapeXmlText.js +7 -0
- package/lib/util/escapeXmlText.js.map +7 -0
- package/package.json +9 -18
- package/playwright.config.cjs +20 -0
- package/src/Helper.ts +8 -3
- package/src/denormalise.ts +182 -116
- package/src/dimensionToSVG.ts +466 -54
- package/src/entityToPolyline.ts +124 -2
- package/src/handlers/entities.ts +129 -34
- package/src/handlers/entity/dgnUnderlay.ts +94 -0
- package/src/handlers/entity/dimension.ts +27 -1
- package/src/handlers/entity/dwfUnderlay.ts +94 -0
- package/src/handlers/entity/image.ts +118 -0
- package/src/handlers/entity/leader.ts +153 -0
- package/src/handlers/entity/mleader.ts +46 -0
- package/src/handlers/entity/mline.ts +74 -0
- package/src/handlers/entity/oleframe.ts +62 -0
- package/src/handlers/entity/pdfUnderlay.ts +94 -0
- package/src/handlers/entity/ray.ts +52 -0
- package/src/handlers/entity/region.ts +42 -0
- package/src/handlers/entity/shape.ts +73 -0
- package/src/handlers/entity/table.ts +49 -0
- package/src/handlers/entity/tolerance.ts +75 -0
- package/src/handlers/entity/trace.ts +72 -0
- package/src/handlers/entity/wipeout.ts +114 -0
- package/src/handlers/entity/xline.ts +52 -0
- package/src/handlers/objects.ts +379 -139
- package/src/handlers/tables.ts +134 -21
- package/src/index.ts +9 -18
- package/src/toJson.ts +8 -0
- package/src/toSVG.ts +143 -10
- package/src/types/dimension-entity.ts +11 -0
- package/src/types/entity.ts +30 -0
- package/src/types/helper.ts +2 -1
- package/src/types/image-entity.ts +35 -0
- package/src/types/index.ts +14 -0
- package/src/types/leader-entity.ts +40 -0
- package/src/types/mleader-entity.ts +8 -0
- package/src/types/mline-entity.ts +12 -0
- package/src/types/oleframe-entity.ts +40 -0
- package/src/types/options.ts +48 -0
- package/src/types/ray-entity.ts +12 -0
- package/src/types/region-entity.ts +11 -0
- package/src/types/shape-entity.ts +19 -0
- package/src/types/table-entity.ts +14 -0
- package/src/types/tables.ts +160 -0
- package/src/types/tolerance-entity.ts +20 -0
- package/src/types/trace-entity.ts +14 -0
- package/src/types/underlay-entity.ts +35 -0
- package/src/types/wipeout-entity.ts +20 -0
- package/src/types/xline-entity.ts +12 -0
- package/src/util/escapeXmlText.ts +10 -0
- package/tools/browser_test_server.cjs +87 -0
- package/tools/ezdxf_generate_dimensions_all_types.py +246 -0
- package/tools/ezdxf_generate_dimensions_angular_3p.py +59 -0
- package/tools/ezdxf_generate_dimensions_large_scale.py +87 -0
- package/tools/ezdxf_regenerate_problem_fixtures.py +184 -0
- package/tools/ezdxf_validate_fixtures.py +165 -0
- package/docs/DIMENSION_SUMMARY.md +0 -248
- package/docs/DIMENSION_SUMMARY.pt-BR.md +0 -248
- package/docs/IMPLEMENTED-2D-ENTITIES.md +0 -54
- package/docs/IMPLEMENTED-2D-ENTITIES.pt-BR.md +0 -54
- package/docs/TEXT-MTEXT-DIMENSION-SUPPORT.md +0 -241
- package/docs/TEXT-MTEXT-DIMENSION-SUPPORT.pt-BR.md +0 -169
package/lib/handlers/objects.js
CHANGED
|
@@ -1,147 +1,310 @@
|
|
|
1
|
-
function
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
layouts: []
|
|
5
|
-
};
|
|
6
|
-
let layout;
|
|
1
|
+
function groupObjectsByZero(tuples) {
|
|
2
|
+
const groups = [];
|
|
3
|
+
let current;
|
|
7
4
|
for (const tuple of tuples) {
|
|
5
|
+
const code = tuple[0];
|
|
6
|
+
if (code === 0) {
|
|
7
|
+
if (current && current.length > 0) groups.push(current);
|
|
8
|
+
current = [tuple];
|
|
9
|
+
continue;
|
|
10
|
+
}
|
|
11
|
+
if (!current) continue;
|
|
12
|
+
current.push(tuple);
|
|
13
|
+
}
|
|
14
|
+
if (current && current.length > 0) groups.push(current);
|
|
15
|
+
return groups;
|
|
16
|
+
}
|
|
17
|
+
const LAYOUT_FLOAT_FIELDS = {
|
|
18
|
+
10: "minLimitX",
|
|
19
|
+
20: "minLimitY",
|
|
20
|
+
11: "maxLimitX",
|
|
21
|
+
21: "maxLimitY",
|
|
22
|
+
12: "x",
|
|
23
|
+
22: "y",
|
|
24
|
+
32: "z",
|
|
25
|
+
14: "minX",
|
|
26
|
+
24: "minY",
|
|
27
|
+
34: "minZ",
|
|
28
|
+
15: "maxX",
|
|
29
|
+
25: "maxY",
|
|
30
|
+
35: "maxZ",
|
|
31
|
+
146: "elevation",
|
|
32
|
+
13: "ucsX",
|
|
33
|
+
23: "ucsY",
|
|
34
|
+
33: "ucsZ",
|
|
35
|
+
16: "ucsXaxisX",
|
|
36
|
+
26: "ucsXaxisY",
|
|
37
|
+
36: "ucsXaxisZ",
|
|
38
|
+
17: "ucsYaxisX",
|
|
39
|
+
27: "ucsYaxisY",
|
|
40
|
+
37: "ucsYaxisZ"
|
|
41
|
+
};
|
|
42
|
+
const LAYOUT_DIRECT_FIELDS = {
|
|
43
|
+
1: "name",
|
|
44
|
+
5: "handle",
|
|
45
|
+
71: "tabOrder",
|
|
46
|
+
330: "tableRecord",
|
|
47
|
+
331: "lastActiveViewport",
|
|
48
|
+
333: "shadePlot"
|
|
49
|
+
};
|
|
50
|
+
const LAYOUT_UCS_TYPE = {
|
|
51
|
+
0: "NOT ORTHOGRAPHIC",
|
|
52
|
+
1: "TOP",
|
|
53
|
+
2: "BOTTOM",
|
|
54
|
+
3: "FRONT",
|
|
55
|
+
4: "BACK",
|
|
56
|
+
5: "LEFT",
|
|
57
|
+
6: "RIGHT"
|
|
58
|
+
};
|
|
59
|
+
function consumeLayoutStartTuple(current, tuple) {
|
|
60
|
+
if (tuple[1] === "LAYOUT") return { state: "layout", layout: {} };
|
|
61
|
+
return { state: "IDLE", layout: current.layout };
|
|
62
|
+
}
|
|
63
|
+
function consumeLayoutSubclassTuple(current, tuple) {
|
|
64
|
+
if (tuple[0] === 100 && tuple[1] === "AcDbLayout") return { state: "AcDbLayout", layout: current.layout };
|
|
65
|
+
return current;
|
|
66
|
+
}
|
|
67
|
+
function applyLayoutFieldTuple(layout, tuple) {
|
|
68
|
+
const type = tuple[0];
|
|
69
|
+
const value = tuple[1];
|
|
70
|
+
const floatKey = LAYOUT_FLOAT_FIELDS[type];
|
|
71
|
+
if (floatKey) {
|
|
72
|
+
;
|
|
73
|
+
layout[floatKey] = Number.parseFloat(String(value));
|
|
74
|
+
return;
|
|
75
|
+
}
|
|
76
|
+
const directKey = LAYOUT_DIRECT_FIELDS[type];
|
|
77
|
+
if (directKey) {
|
|
78
|
+
;
|
|
79
|
+
layout[directKey] = value;
|
|
80
|
+
return;
|
|
81
|
+
}
|
|
82
|
+
if (type === 70) {
|
|
83
|
+
layout.flag = value === 1 ? "PSLTSCALE" : "LIMCHECK";
|
|
84
|
+
return;
|
|
85
|
+
}
|
|
86
|
+
if (type === 76) {
|
|
87
|
+
const ucsType = LAYOUT_UCS_TYPE[Number(value)];
|
|
88
|
+
if (ucsType) layout.ucsType = ucsType;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
function consumeLayoutTuple(current, tuple) {
|
|
92
|
+
if (tuple[0] === 0) return consumeLayoutStartTuple(current, tuple);
|
|
93
|
+
if (current.state === "layout") return consumeLayoutSubclassTuple(current, tuple);
|
|
94
|
+
if (current.state === "AcDbLayout" && current.layout) applyLayoutFieldTuple(current.layout, tuple);
|
|
95
|
+
return current;
|
|
96
|
+
}
|
|
97
|
+
function parseLayoutObject(group) {
|
|
98
|
+
let current = { state: "IDLE" };
|
|
99
|
+
for (const tuple of group) current = consumeLayoutTuple(current, tuple);
|
|
100
|
+
return current.layout;
|
|
101
|
+
}
|
|
102
|
+
function parseDictionaryObject(group) {
|
|
103
|
+
if (group[0]?.[1] !== "DICTIONARY") return void 0;
|
|
104
|
+
const dict = {
|
|
105
|
+
type: "DICTIONARY",
|
|
106
|
+
entries: {}
|
|
107
|
+
};
|
|
108
|
+
let pendingKey;
|
|
109
|
+
for (const tuple of group.slice(1)) {
|
|
8
110
|
const type = tuple[0];
|
|
9
111
|
const value = tuple[1];
|
|
10
|
-
if (type ===
|
|
11
|
-
|
|
112
|
+
if (type === 5) {
|
|
113
|
+
dict.handle = value;
|
|
114
|
+
continue;
|
|
12
115
|
}
|
|
13
|
-
if (
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
objects.layouts.push(layout);
|
|
116
|
+
if (type === 330) {
|
|
117
|
+
dict.ownerHandle = value;
|
|
118
|
+
continue;
|
|
17
119
|
}
|
|
18
|
-
if (
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
if (value === "AcDbLayout") state = "AcDbLayout";
|
|
22
|
-
break;
|
|
23
|
-
}
|
|
120
|
+
if (type === 3) {
|
|
121
|
+
pendingKey = String(value);
|
|
122
|
+
continue;
|
|
24
123
|
}
|
|
25
|
-
if (
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
layout.name = value;
|
|
29
|
-
break;
|
|
30
|
-
case 5:
|
|
31
|
-
layout.handle = value;
|
|
32
|
-
break;
|
|
33
|
-
case 10:
|
|
34
|
-
layout.minLimitX = Number.parseFloat(String(value));
|
|
35
|
-
break;
|
|
36
|
-
case 20:
|
|
37
|
-
layout.minLimitY = Number.parseFloat(String(value));
|
|
38
|
-
break;
|
|
39
|
-
case 11:
|
|
40
|
-
layout.maxLimitX = Number.parseFloat(String(value));
|
|
41
|
-
break;
|
|
42
|
-
case 21:
|
|
43
|
-
layout.maxLimitY = Number.parseFloat(String(value));
|
|
44
|
-
break;
|
|
45
|
-
case 12:
|
|
46
|
-
layout.x = Number.parseFloat(String(value));
|
|
47
|
-
break;
|
|
48
|
-
case 22:
|
|
49
|
-
layout.y = Number.parseFloat(String(value));
|
|
50
|
-
break;
|
|
51
|
-
case 32:
|
|
52
|
-
layout.z = Number.parseFloat(String(value));
|
|
53
|
-
break;
|
|
54
|
-
case 14:
|
|
55
|
-
layout.minX = Number.parseFloat(String(value));
|
|
56
|
-
break;
|
|
57
|
-
case 24:
|
|
58
|
-
layout.minY = Number.parseFloat(String(value));
|
|
59
|
-
break;
|
|
60
|
-
case 34:
|
|
61
|
-
layout.minZ = Number.parseFloat(String(value));
|
|
62
|
-
break;
|
|
63
|
-
case 15:
|
|
64
|
-
layout.maxX = Number.parseFloat(String(value));
|
|
65
|
-
break;
|
|
66
|
-
case 25:
|
|
67
|
-
layout.maxY = Number.parseFloat(String(value));
|
|
68
|
-
break;
|
|
69
|
-
case 35:
|
|
70
|
-
layout.maxZ = Number.parseFloat(String(value));
|
|
71
|
-
break;
|
|
72
|
-
case 70:
|
|
73
|
-
layout.flag = value === 1 ? "PSLTSCALE" : "LIMCHECK";
|
|
74
|
-
break;
|
|
75
|
-
case 71:
|
|
76
|
-
layout.tabOrder = value;
|
|
77
|
-
break;
|
|
78
|
-
case 146:
|
|
79
|
-
layout.elevation = Number.parseFloat(String(value));
|
|
80
|
-
break;
|
|
81
|
-
case 13:
|
|
82
|
-
layout.ucsX = Number.parseFloat(String(value));
|
|
83
|
-
break;
|
|
84
|
-
case 23:
|
|
85
|
-
layout.ucsY = Number.parseFloat(String(value));
|
|
86
|
-
break;
|
|
87
|
-
case 33:
|
|
88
|
-
layout.ucsZ = Number.parseFloat(String(value));
|
|
89
|
-
break;
|
|
90
|
-
case 16:
|
|
91
|
-
layout.ucsXaxisX = Number.parseFloat(String(value));
|
|
92
|
-
break;
|
|
93
|
-
case 26:
|
|
94
|
-
layout.ucsXaxisY = Number.parseFloat(String(value));
|
|
95
|
-
break;
|
|
96
|
-
case 36:
|
|
97
|
-
layout.ucsXaxisZ = Number.parseFloat(String(value));
|
|
98
|
-
break;
|
|
99
|
-
case 17:
|
|
100
|
-
layout.ucsYaxisX = Number.parseFloat(String(value));
|
|
101
|
-
break;
|
|
102
|
-
case 27:
|
|
103
|
-
layout.ucsYaxisY = Number.parseFloat(String(value));
|
|
104
|
-
break;
|
|
105
|
-
case 37:
|
|
106
|
-
layout.ucsYaxisZ = Number.parseFloat(String(value));
|
|
107
|
-
break;
|
|
108
|
-
case 76:
|
|
109
|
-
switch (value) {
|
|
110
|
-
case 0:
|
|
111
|
-
layout.ucsType = "NOT ORTHOGRAPHIC";
|
|
112
|
-
break;
|
|
113
|
-
case 1:
|
|
114
|
-
layout.ucsType = "TOP";
|
|
115
|
-
break;
|
|
116
|
-
case 2:
|
|
117
|
-
layout.ucsType = "BOTTOM";
|
|
118
|
-
break;
|
|
119
|
-
case 3:
|
|
120
|
-
layout.ucsType = "FRONT";
|
|
121
|
-
break;
|
|
122
|
-
case 4:
|
|
123
|
-
layout.ucsType = "BACK";
|
|
124
|
-
break;
|
|
125
|
-
case 5:
|
|
126
|
-
layout.ucsType = "LEFT";
|
|
127
|
-
break;
|
|
128
|
-
case 6:
|
|
129
|
-
layout.ucsType = "RIGHT";
|
|
130
|
-
break;
|
|
131
|
-
}
|
|
132
|
-
break;
|
|
133
|
-
case 330:
|
|
134
|
-
layout.tableRecord = value;
|
|
135
|
-
break;
|
|
136
|
-
case 331:
|
|
137
|
-
layout.lastActiveViewport = value;
|
|
138
|
-
break;
|
|
139
|
-
case 333:
|
|
140
|
-
layout.shadePlot = value;
|
|
141
|
-
break;
|
|
142
|
-
}
|
|
124
|
+
if ((type === 350 || type === 360) && pendingKey) {
|
|
125
|
+
dict.entries[pendingKey] = String(value);
|
|
126
|
+
pendingKey = void 0;
|
|
143
127
|
}
|
|
144
128
|
}
|
|
129
|
+
return dict;
|
|
130
|
+
}
|
|
131
|
+
function parseXRecordObject(group) {
|
|
132
|
+
if (group[0]?.[1] !== "XRECORD") return void 0;
|
|
133
|
+
const tuples = group.slice(1);
|
|
134
|
+
const xRecord = {
|
|
135
|
+
type: "XRECORD",
|
|
136
|
+
tuples
|
|
137
|
+
};
|
|
138
|
+
for (const tuple of tuples) {
|
|
139
|
+
const type = tuple[0];
|
|
140
|
+
const value = tuple[1];
|
|
141
|
+
if (type === 5) xRecord.handle = value;
|
|
142
|
+
if (type === 330) xRecord.ownerHandle = value;
|
|
143
|
+
}
|
|
144
|
+
return xRecord;
|
|
145
|
+
}
|
|
146
|
+
function parseImageDefObject(group) {
|
|
147
|
+
if (group[0]?.[1] !== "IMAGEDEF") return void 0;
|
|
148
|
+
const tuples = group.slice(1);
|
|
149
|
+
const imageDef = {
|
|
150
|
+
type: "IMAGEDEF",
|
|
151
|
+
tuples
|
|
152
|
+
};
|
|
153
|
+
for (const tuple of tuples) {
|
|
154
|
+
const type = tuple[0];
|
|
155
|
+
const value = tuple[1];
|
|
156
|
+
if (type === 5) imageDef.handle = value;
|
|
157
|
+
if (type === 330 && imageDef.ownerHandle === void 0) imageDef.ownerHandle = value;
|
|
158
|
+
if (type === 1) imageDef.fileName = String(value);
|
|
159
|
+
if (type === 10) imageDef.pixelSizeX = Number(value);
|
|
160
|
+
if (type === 20) imageDef.pixelSizeY = Number(value);
|
|
161
|
+
}
|
|
162
|
+
return imageDef;
|
|
163
|
+
}
|
|
164
|
+
function parseImageDefReactorObject(group) {
|
|
165
|
+
if (group[0]?.[1] !== "IMAGEDEF_REACTOR") return void 0;
|
|
166
|
+
const tuples = group.slice(1);
|
|
167
|
+
const reactor = {
|
|
168
|
+
type: "IMAGEDEF_REACTOR",
|
|
169
|
+
tuples
|
|
170
|
+
};
|
|
171
|
+
for (const tuple of tuples) {
|
|
172
|
+
const type = tuple[0];
|
|
173
|
+
const value = tuple[1];
|
|
174
|
+
if (type === 5) reactor.handle = value;
|
|
175
|
+
if (type === 330) reactor.imageHandle = value;
|
|
176
|
+
}
|
|
177
|
+
return reactor;
|
|
178
|
+
}
|
|
179
|
+
function parseDimAssocObject(group) {
|
|
180
|
+
if (group[0]?.[1] !== "DIMASSOC") return void 0;
|
|
181
|
+
const tuples = group.slice(1);
|
|
182
|
+
const dimAssoc = {
|
|
183
|
+
type: "DIMASSOC",
|
|
184
|
+
tuples
|
|
185
|
+
};
|
|
186
|
+
for (const tuple of tuples) {
|
|
187
|
+
const type = tuple[0];
|
|
188
|
+
const value = tuple[1];
|
|
189
|
+
if (type === 5) dimAssoc.handle = value;
|
|
190
|
+
if (type === 330) dimAssoc.ownerHandle = value;
|
|
191
|
+
}
|
|
192
|
+
return dimAssoc;
|
|
193
|
+
}
|
|
194
|
+
function parseFieldObject(group) {
|
|
195
|
+
if (group[0]?.[1] !== "FIELD") return void 0;
|
|
196
|
+
const tuples = group.slice(1);
|
|
197
|
+
const field = {
|
|
198
|
+
type: "FIELD",
|
|
199
|
+
tuples
|
|
200
|
+
};
|
|
201
|
+
for (const tuple of tuples) {
|
|
202
|
+
const type = tuple[0];
|
|
203
|
+
const value = tuple[1];
|
|
204
|
+
if (type === 5) field.handle = value;
|
|
205
|
+
if (type === 330) field.ownerHandle = value;
|
|
206
|
+
}
|
|
207
|
+
return field;
|
|
208
|
+
}
|
|
209
|
+
const UNDERLAY_DEFINITION_OBJECT_TYPES = /* @__PURE__ */ new Set([
|
|
210
|
+
"UNDERLAYDEFINITION",
|
|
211
|
+
"PDFDEFINITION",
|
|
212
|
+
"DWFDEFINITION",
|
|
213
|
+
"DGNDEFINITION"
|
|
214
|
+
]);
|
|
215
|
+
function parseUnderlayDefinitionObject(group) {
|
|
216
|
+
const objectType = group[0]?.[1];
|
|
217
|
+
if (typeof objectType !== "string") return void 0;
|
|
218
|
+
if (!UNDERLAY_DEFINITION_OBJECT_TYPES.has(objectType)) return void 0;
|
|
219
|
+
const tuples = group.slice(1);
|
|
220
|
+
const def = {
|
|
221
|
+
type: objectType,
|
|
222
|
+
tuples
|
|
223
|
+
};
|
|
224
|
+
for (const tuple of tuples) {
|
|
225
|
+
const type = tuple[0];
|
|
226
|
+
const value = tuple[1];
|
|
227
|
+
if (type === 5) def.handle = value;
|
|
228
|
+
if (type === 330 && def.ownerHandle === void 0) def.ownerHandle = value;
|
|
229
|
+
if (type === 1) def.fileName = String(value);
|
|
230
|
+
if (type === 2) def.underlayName = String(value);
|
|
231
|
+
}
|
|
232
|
+
return def;
|
|
233
|
+
}
|
|
234
|
+
const OBJECT_GROUP_HANDLERS = {
|
|
235
|
+
LAYOUT: (objects, group) => {
|
|
236
|
+
const layout = parseLayoutObject(group);
|
|
237
|
+
if (layout) objects.layouts.push(layout);
|
|
238
|
+
},
|
|
239
|
+
DICTIONARY: (objects, group) => {
|
|
240
|
+
const dict = parseDictionaryObject(group);
|
|
241
|
+
const handle = dict?.handle ? String(dict.handle) : void 0;
|
|
242
|
+
if (dict && handle) objects.dictionaries[handle] = dict;
|
|
243
|
+
},
|
|
244
|
+
XRECORD: (objects, group) => {
|
|
245
|
+
const xRecord = parseXRecordObject(group);
|
|
246
|
+
const handle = xRecord?.handle ? String(xRecord.handle) : void 0;
|
|
247
|
+
if (xRecord && handle) objects.xRecords[handle] = xRecord;
|
|
248
|
+
},
|
|
249
|
+
IMAGEDEF: (objects, group) => {
|
|
250
|
+
const imageDef = parseImageDefObject(group);
|
|
251
|
+
const handle = imageDef?.handle ? String(imageDef.handle) : void 0;
|
|
252
|
+
if (imageDef && handle) objects.imageDefs[handle] = imageDef;
|
|
253
|
+
},
|
|
254
|
+
IMAGEDEF_REACTOR: (objects, group) => {
|
|
255
|
+
const reactor = parseImageDefReactorObject(group);
|
|
256
|
+
const handle = reactor?.handle ? String(reactor.handle) : void 0;
|
|
257
|
+
if (reactor && handle) objects.imageDefReactors[handle] = reactor;
|
|
258
|
+
},
|
|
259
|
+
UNDERLAYDEFINITION: (objects, group) => {
|
|
260
|
+
const def = parseUnderlayDefinitionObject(group);
|
|
261
|
+
const handle = def?.handle ? String(def.handle) : void 0;
|
|
262
|
+
if (def && handle) objects.underlayDefinitions[handle] = def;
|
|
263
|
+
},
|
|
264
|
+
PDFDEFINITION: (objects, group) => {
|
|
265
|
+
const def = parseUnderlayDefinitionObject(group);
|
|
266
|
+
const handle = def?.handle ? String(def.handle) : void 0;
|
|
267
|
+
if (def && handle) objects.underlayDefinitions[handle] = def;
|
|
268
|
+
},
|
|
269
|
+
DWFDEFINITION: (objects, group) => {
|
|
270
|
+
const def = parseUnderlayDefinitionObject(group);
|
|
271
|
+
const handle = def?.handle ? String(def.handle) : void 0;
|
|
272
|
+
if (def && handle) objects.underlayDefinitions[handle] = def;
|
|
273
|
+
},
|
|
274
|
+
DGNDEFINITION: (objects, group) => {
|
|
275
|
+
const def = parseUnderlayDefinitionObject(group);
|
|
276
|
+
const handle = def?.handle ? String(def.handle) : void 0;
|
|
277
|
+
if (def && handle) objects.underlayDefinitions[handle] = def;
|
|
278
|
+
},
|
|
279
|
+
DIMASSOC: (objects, group) => {
|
|
280
|
+
const dimAssoc = parseDimAssocObject(group);
|
|
281
|
+
const handle = dimAssoc?.handle ? String(dimAssoc.handle) : void 0;
|
|
282
|
+
if (dimAssoc && handle) objects.dimAssocs[handle] = dimAssoc;
|
|
283
|
+
},
|
|
284
|
+
FIELD: (objects, group) => {
|
|
285
|
+
const field = parseFieldObject(group);
|
|
286
|
+
const handle = field?.handle ? String(field.handle) : void 0;
|
|
287
|
+
if (field && handle) objects.fields[handle] = field;
|
|
288
|
+
}
|
|
289
|
+
};
|
|
290
|
+
function parseObjects(tuples) {
|
|
291
|
+
const objects = {
|
|
292
|
+
layouts: [],
|
|
293
|
+
dictionaries: {},
|
|
294
|
+
xRecords: {},
|
|
295
|
+
imageDefs: {},
|
|
296
|
+
imageDefReactors: {},
|
|
297
|
+
underlayDefinitions: {},
|
|
298
|
+
dimAssocs: {},
|
|
299
|
+
fields: {}
|
|
300
|
+
};
|
|
301
|
+
const groups = groupObjectsByZero(tuples);
|
|
302
|
+
for (const group of groups) {
|
|
303
|
+
const objectType = group[0]?.[1];
|
|
304
|
+
if (typeof objectType !== "string") continue;
|
|
305
|
+
const handler = OBJECT_GROUP_HANDLERS[objectType];
|
|
306
|
+
if (handler) handler(objects, group);
|
|
307
|
+
}
|
|
145
308
|
return objects;
|
|
146
309
|
}
|
|
147
310
|
export {
|
|
@@ -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": "
|
|
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": "AAeA,SAAS,mBAAmB,QAAmC;AAC7D,QAAM,SAAwB,CAAC;AAC/B,MAAI;AAEJ,aAAW,SAAS,QAAQ;AAC1B,UAAM,OAAO,MAAM,CAAC;AACpB,QAAI,SAAS,GAAG;AACd,UAAI,WAAW,QAAQ,SAAS,EAAG,QAAO,KAAK,OAAO;AACtD,gBAAU,CAAC,KAAK;AAChB;AAAA,IACF;AACA,QAAI,CAAC,QAAS;AACd,YAAQ,KAAK,KAAK;AAAA,EACpB;AAEA,MAAI,WAAW,QAAQ,SAAS,EAAG,QAAO,KAAK,OAAO;AACtD,SAAO;AACT;AAEA,MAAM,sBAA4D;AAAA,EAChE,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,KAAK;AAAA,EACL,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AACN;AAEA,MAAM,uBAA6D;AAAA,EACjE,GAAG;AAAA,EACH,GAAG;AAAA,EACH,IAAI;AAAA,EACJ,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AACP;AAEA,MAAM,kBAA6D;AAAA,EACjE,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AACL;AAOA,SAAS,wBAAwB,SAA2B,OAAmC;AAC7F,MAAI,MAAM,CAAC,MAAM,SAAU,QAAO,EAAE,OAAO,UAAU,QAAQ,CAAC,EAAE;AAChE,SAAO,EAAE,OAAO,QAAQ,QAAQ,QAAQ,OAAO;AACjD;AAEA,SAAS,2BAA2B,SAA2B,OAAmC;AAChG,MAAI,MAAM,CAAC,MAAM,OAAO,MAAM,CAAC,MAAM,aAAc,QAAO,EAAE,OAAO,cAAc,QAAQ,QAAQ,OAAO;AACxG,SAAO;AACT;AAEA,SAAS,sBAAsB,QAAwB,OAAuB;AAC5E,QAAM,OAAO,MAAM,CAAC;AACpB,QAAM,QAAQ,MAAM,CAAC;AAErB,QAAM,WAAW,oBAAoB,IAAI;AACzC,MAAI,UAAU;AACZ;AAAC,IAAC,OAAe,QAAQ,IAAI,OAAO,WAAW,OAAO,KAAK,CAAC;AAC5D;AAAA,EACF;AAEA,QAAM,YAAY,qBAAqB,IAAI;AAC3C,MAAI,WAAW;AACb;AAAC,IAAC,OAAe,SAAS,IAAI;AAC9B;AAAA,EACF;AAEA,MAAI,SAAS,IAAI;AACf,WAAO,OAAO,UAAU,IAAI,cAAc;AAC1C;AAAA,EACF;AAEA,MAAI,SAAS,IAAI;AACf,UAAM,UAAU,gBAAgB,OAAO,KAAK,CAAC;AAC7C,QAAI,QAAS,QAAO,UAAU;AAAA,EAChC;AACF;AAEA,SAAS,mBAAmB,SAA2B,OAAmC;AACxF,MAAI,MAAM,CAAC,MAAM,EAAG,QAAO,wBAAwB,SAAS,KAAK;AAEjE,MAAI,QAAQ,UAAU,SAAU,QAAO,2BAA2B,SAAS,KAAK;AAEhF,MAAI,QAAQ,UAAU,gBAAgB,QAAQ,OAAQ,uBAAsB,QAAQ,QAAQ,KAAK;AACjG,SAAO;AACT;AAEA,SAAS,kBAAkB,OAAgD;AACzE,MAAI,UAA4B,EAAE,OAAO,OAAO;AAChD,aAAW,SAAS,MAAO,WAAU,mBAAmB,SAAS,KAAK;AACtE,SAAO,QAAQ;AACjB;AAEA,SAAS,sBAAsB,OAAkD;AAC/E,MAAI,MAAM,CAAC,IAAI,CAAC,MAAM,aAAc,QAAO;AAE3C,QAAM,OAAyB;AAAA,IAC7B,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,EACZ;AAEA,MAAI;AACJ,aAAW,SAAS,MAAM,MAAM,CAAC,GAAG;AAClC,UAAM,OAAO,MAAM,CAAC;AACpB,UAAM,QAAQ,MAAM,CAAC;AAErB,QAAI,SAAS,GAAG;AACd,WAAK,SAAS;AACd;AAAA,IACF;AACA,QAAI,SAAS,KAAK;AAChB,WAAK,cAAc;AACnB;AAAA,IACF;AACA,QAAI,SAAS,GAAG;AACd,mBAAa,OAAO,KAAK;AACzB;AAAA,IACF;AACA,SAAK,SAAS,OAAO,SAAS,QAAQ,YAAY;AAChD,WAAK,QAAQ,UAAU,IAAI,OAAO,KAAK;AACvC,mBAAa;AAAA,IACf;AAAA,EACF;AAEA,SAAO;AACT;AAEA,SAAS,mBAAmB,OAA+C;AACzE,MAAI,MAAM,CAAC,IAAI,CAAC,MAAM,UAAW,QAAO;AAExC,QAAM,SAAS,MAAM,MAAM,CAAC;AAE5B,QAAM,UAAyB;AAAA,IAC7B,MAAM;AAAA,IACN;AAAA,EACF;AAEA,aAAW,SAAS,QAAQ;AAC1B,UAAM,OAAO,MAAM,CAAC;AACpB,UAAM,QAAQ,MAAM,CAAC;AAErB,QAAI,SAAS,EAAG,SAAQ,SAAS;AACjC,QAAI,SAAS,IAAK,SAAQ,cAAc;AAAA,EAC1C;AAEA,SAAO;AACT;AAEA,SAAS,oBAAoB,OAAgD;AAC3E,MAAI,MAAM,CAAC,IAAI,CAAC,MAAM,WAAY,QAAO;AAEzC,QAAM,SAAS,MAAM,MAAM,CAAC;AAE5B,QAAM,WAA2B;AAAA,IAC/B,MAAM;AAAA,IACN;AAAA,EACF;AAEA,aAAW,SAAS,QAAQ;AAC1B,UAAM,OAAO,MAAM,CAAC;AACpB,UAAM,QAAQ,MAAM,CAAC;AAErB,QAAI,SAAS,EAAG,UAAS,SAAS;AAClC,QAAI,SAAS,OAAO,SAAS,gBAAgB,OAAW,UAAS,cAAc;AAC/E,QAAI,SAAS,EAAG,UAAS,WAAW,OAAO,KAAK;AAChD,QAAI,SAAS,GAAI,UAAS,aAAa,OAAO,KAAK;AACnD,QAAI,SAAS,GAAI,UAAS,aAAa,OAAO,KAAK;AAAA,EACrD;AAEA,SAAO;AACT;AAEA,SAAS,2BAA2B,OAAuD;AACzF,MAAI,MAAM,CAAC,IAAI,CAAC,MAAM,mBAAoB,QAAO;AAEjD,QAAM,SAAS,MAAM,MAAM,CAAC;AAE5B,QAAM,UAAiC;AAAA,IACrC,MAAM;AAAA,IACN;AAAA,EACF;AAEA,aAAW,SAAS,QAAQ;AAC1B,UAAM,OAAO,MAAM,CAAC;AACpB,UAAM,QAAQ,MAAM,CAAC;AAErB,QAAI,SAAS,EAAG,SAAQ,SAAS;AACjC,QAAI,SAAS,IAAK,SAAQ,cAAc;AAAA,EAC1C;AAEA,SAAO;AACT;AAEA,SAAS,oBAAoB,OAAgD;AAC3E,MAAI,MAAM,CAAC,IAAI,CAAC,MAAM,WAAY,QAAO;AAEzC,QAAM,SAAS,MAAM,MAAM,CAAC;AAE5B,QAAM,WAA2B;AAAA,IAC/B,MAAM;AAAA,IACN;AAAA,EACF;AAEA,aAAW,SAAS,QAAQ;AAC1B,UAAM,OAAO,MAAM,CAAC;AACpB,UAAM,QAAQ,MAAM,CAAC;AAErB,QAAI,SAAS,EAAG,UAAS,SAAS;AAClC,QAAI,SAAS,IAAK,UAAS,cAAc;AAAA,EAC3C;AAEA,SAAO;AACT;AAEA,SAAS,iBAAiB,OAA6C;AACrE,MAAI,MAAM,CAAC,IAAI,CAAC,MAAM,QAAS,QAAO;AAEtC,QAAM,SAAS,MAAM,MAAM,CAAC;AAE5B,QAAM,QAAqB;AAAA,IACzB,MAAM;AAAA,IACN;AAAA,EACF;AAEA,aAAW,SAAS,QAAQ;AAC1B,UAAM,OAAO,MAAM,CAAC;AACpB,UAAM,QAAQ,MAAM,CAAC;AAErB,QAAI,SAAS,EAAG,OAAM,SAAS;AAC/B,QAAI,SAAS,IAAK,OAAM,cAAc;AAAA,EACxC;AAEA,SAAO;AACT;AAEA,MAAM,mCAAmC,oBAAI,IAAI;AAAA,EAC/C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AAED,SAAS,8BAA8B,OAA0D;AAC/F,QAAM,aAAa,MAAM,CAAC,IAAI,CAAC;AAC/B,MAAI,OAAO,eAAe,SAAU,QAAO;AAC3C,MAAI,CAAC,iCAAiC,IAAI,UAAU,EAAG,QAAO;AAE9D,QAAM,SAAS,MAAM,MAAM,CAAC;AAE5B,QAAM,MAAgC;AAAA,IACpC,MAAM;AAAA,IACN;AAAA,EACF;AAEA,aAAW,SAAS,QAAQ;AAC1B,UAAM,OAAO,MAAM,CAAC;AACpB,UAAM,QAAQ,MAAM,CAAC;AAErB,QAAI,SAAS,EAAG,KAAI,SAAS;AAC7B,QAAI,SAAS,OAAO,IAAI,gBAAgB,OAAW,KAAI,cAAc;AACrE,QAAI,SAAS,EAAG,KAAI,WAAW,OAAO,KAAK;AAC3C,QAAI,SAAS,EAAG,KAAI,eAAe,OAAO,KAAK;AAAA,EACjD;AAEA,SAAO;AACT;AAIA,MAAM,wBAA4D;AAAA,EAChE,QAAQ,CAAC,SAAS,UAAU;AAC1B,UAAM,SAAS,kBAAkB,KAAK;AACtC,QAAI,OAAQ,SAAQ,QAAQ,KAAK,MAAM;AAAA,EACzC;AAAA,EACA,YAAY,CAAC,SAAS,UAAU;AAC9B,UAAM,OAAO,sBAAsB,KAAK;AACxC,UAAM,SAAS,MAAM,SAAS,OAAO,KAAK,MAAM,IAAI;AACpD,QAAI,QAAQ,OAAQ,SAAQ,aAAc,MAAM,IAAI;AAAA,EACtD;AAAA,EACA,SAAS,CAAC,SAAS,UAAU;AAC3B,UAAM,UAAU,mBAAmB,KAAK;AACxC,UAAM,SAAS,SAAS,SAAS,OAAO,QAAQ,MAAM,IAAI;AAC1D,QAAI,WAAW,OAAQ,SAAQ,SAAU,MAAM,IAAI;AAAA,EACrD;AAAA,EACA,UAAU,CAAC,SAAS,UAAU;AAC5B,UAAM,WAAW,oBAAoB,KAAK;AAC1C,UAAM,SAAS,UAAU,SAAS,OAAO,SAAS,MAAM,IAAI;AAC5D,QAAI,YAAY,OAAQ,SAAQ,UAAW,MAAM,IAAI;AAAA,EACvD;AAAA,EACA,kBAAkB,CAAC,SAAS,UAAU;AACpC,UAAM,UAAU,2BAA2B,KAAK;AAChD,UAAM,SAAS,SAAS,SAAS,OAAO,QAAQ,MAAM,IAAI;AAC1D,QAAI,WAAW,OAAQ,SAAQ,iBAAkB,MAAM,IAAI;AAAA,EAC7D;AAAA,EACA,oBAAoB,CAAC,SAAS,UAAU;AACtC,UAAM,MAAM,8BAA8B,KAAK;AAC/C,UAAM,SAAS,KAAK,SAAS,OAAO,IAAI,MAAM,IAAI;AAClD,QAAI,OAAO,OAAQ,SAAQ,oBAAqB,MAAM,IAAI;AAAA,EAC5D;AAAA,EACA,eAAe,CAAC,SAAS,UAAU;AACjC,UAAM,MAAM,8BAA8B,KAAK;AAC/C,UAAM,SAAS,KAAK,SAAS,OAAO,IAAI,MAAM,IAAI;AAClD,QAAI,OAAO,OAAQ,SAAQ,oBAAqB,MAAM,IAAI;AAAA,EAC5D;AAAA,EACA,eAAe,CAAC,SAAS,UAAU;AACjC,UAAM,MAAM,8BAA8B,KAAK;AAC/C,UAAM,SAAS,KAAK,SAAS,OAAO,IAAI,MAAM,IAAI;AAClD,QAAI,OAAO,OAAQ,SAAQ,oBAAqB,MAAM,IAAI;AAAA,EAC5D;AAAA,EACA,eAAe,CAAC,SAAS,UAAU;AACjC,UAAM,MAAM,8BAA8B,KAAK;AAC/C,UAAM,SAAS,KAAK,SAAS,OAAO,IAAI,MAAM,IAAI;AAClD,QAAI,OAAO,OAAQ,SAAQ,oBAAqB,MAAM,IAAI;AAAA,EAC5D;AAAA,EACA,UAAU,CAAC,SAAS,UAAU;AAC5B,UAAM,WAAW,oBAAoB,KAAK;AAC1C,UAAM,SAAS,UAAU,SAAS,OAAO,SAAS,MAAM,IAAI;AAC5D,QAAI,YAAY,OAAQ,SAAQ,UAAW,MAAM,IAAI;AAAA,EACvD;AAAA,EACA,OAAO,CAAC,SAAS,UAAU;AACzB,UAAM,QAAQ,iBAAiB,KAAK;AACpC,UAAM,SAAS,OAAO,SAAS,OAAO,MAAM,MAAM,IAAI;AACtD,QAAI,SAAS,OAAQ,SAAQ,OAAQ,MAAM,IAAI;AAAA,EACjD;AACF;AAEe,SAAR,aAA8B,QAAmC;AACtE,QAAM,UAAyB;AAAA,IAC7B,SAAS,CAAC;AAAA,IACV,cAAc,CAAC;AAAA,IACf,UAAU,CAAC;AAAA,IACX,WAAW,CAAC;AAAA,IACZ,kBAAkB,CAAC;AAAA,IACnB,qBAAqB,CAAC;AAAA,IACtB,WAAW,CAAC;AAAA,IACZ,QAAQ,CAAC;AAAA,EACX;AAEA,QAAM,SAAS,mBAAmB,MAAM;AACxC,aAAW,SAAS,QAAQ;AAC1B,UAAM,aAAa,MAAM,CAAC,IAAI,CAAC;AAC/B,QAAI,OAAO,eAAe,SAAU;AAEpC,UAAM,UAAU,sBAAsB,UAAU;AAChD,QAAI,QAAS,SAAQ,SAAS,KAAK;AAAA,EACrC;AAEA,SAAO;AACT;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
package/lib/handlers/tables.cjs
CHANGED
|
@@ -189,6 +189,7 @@ const vPortHandler = (tuples) => {
|
|
|
189
189
|
const type = tuple[0];
|
|
190
190
|
const value = tuple[1];
|
|
191
191
|
switch (type) {
|
|
192
|
+
// NOSONAR
|
|
192
193
|
case 2:
|
|
193
194
|
vport.name = value;
|
|
194
195
|
break;
|
|
@@ -302,12 +303,89 @@ const vPortHandler = (tuples) => {
|
|
|
302
303
|
}
|
|
303
304
|
);
|
|
304
305
|
};
|
|
306
|
+
const appIdHandler = (tuples) => {
|
|
307
|
+
return tuples.reduce(
|
|
308
|
+
(appId, tuple) => {
|
|
309
|
+
const type = tuple[0];
|
|
310
|
+
const value = tuple[1];
|
|
311
|
+
switch (type) {
|
|
312
|
+
case 2:
|
|
313
|
+
appId.name = value;
|
|
314
|
+
break;
|
|
315
|
+
case 70:
|
|
316
|
+
appId.flags = value;
|
|
317
|
+
break;
|
|
318
|
+
default:
|
|
319
|
+
}
|
|
320
|
+
return appId;
|
|
321
|
+
},
|
|
322
|
+
{ type: "APPID" }
|
|
323
|
+
);
|
|
324
|
+
};
|
|
325
|
+
const blockRecordHandler = (tuples) => {
|
|
326
|
+
return tuples.reduce(
|
|
327
|
+
(blockRecord, tuple) => {
|
|
328
|
+
const type = tuple[0];
|
|
329
|
+
const value = tuple[1];
|
|
330
|
+
switch (type) {
|
|
331
|
+
case 2:
|
|
332
|
+
blockRecord.name = value;
|
|
333
|
+
break;
|
|
334
|
+
case 70:
|
|
335
|
+
blockRecord.flags = value;
|
|
336
|
+
break;
|
|
337
|
+
default:
|
|
338
|
+
}
|
|
339
|
+
return blockRecord;
|
|
340
|
+
},
|
|
341
|
+
{ type: "BLOCK_RECORD" }
|
|
342
|
+
);
|
|
343
|
+
};
|
|
344
|
+
const ucsHandler = (tuples) => {
|
|
345
|
+
return tuples.reduce(
|
|
346
|
+
(ucs, tuple) => {
|
|
347
|
+
const type = tuple[0];
|
|
348
|
+
const value = tuple[1];
|
|
349
|
+
switch (type) {
|
|
350
|
+
case 2:
|
|
351
|
+
ucs.name = value;
|
|
352
|
+
break;
|
|
353
|
+
case 70:
|
|
354
|
+
ucs.flags = value;
|
|
355
|
+
break;
|
|
356
|
+
default:
|
|
357
|
+
}
|
|
358
|
+
return ucs;
|
|
359
|
+
},
|
|
360
|
+
{ type: "UCS" }
|
|
361
|
+
);
|
|
362
|
+
};
|
|
363
|
+
const viewHandler = (tuples) => {
|
|
364
|
+
return tuples.reduce(
|
|
365
|
+
(view, tuple) => {
|
|
366
|
+
const type = tuple[0];
|
|
367
|
+
const value = tuple[1];
|
|
368
|
+
switch (type) {
|
|
369
|
+
case 2:
|
|
370
|
+
view.name = value;
|
|
371
|
+
break;
|
|
372
|
+
case 70:
|
|
373
|
+
view.flags = value;
|
|
374
|
+
break;
|
|
375
|
+
default:
|
|
376
|
+
}
|
|
377
|
+
return view;
|
|
378
|
+
},
|
|
379
|
+
{ type: "VIEW" }
|
|
380
|
+
);
|
|
381
|
+
};
|
|
305
382
|
const dimStyleHandler = (tuples) => {
|
|
306
383
|
return tuples.reduce(
|
|
307
384
|
(dimStyle, tuple) => {
|
|
308
385
|
const type = tuple[0];
|
|
309
386
|
const value = tuple[1];
|
|
310
387
|
switch (type) {
|
|
388
|
+
// NOSONAR
|
|
311
389
|
case 2:
|
|
312
390
|
dimStyle.name = value;
|
|
313
391
|
break;
|
|
@@ -558,30 +636,31 @@ function parseTables(tuples) {
|
|
|
558
636
|
tableTuples.push(tuple);
|
|
559
637
|
}
|
|
560
638
|
}
|
|
561
|
-
|
|
562
|
-
let layersTuples = [];
|
|
563
|
-
let vPortTuples = [];
|
|
564
|
-
let ltypeTuples = [];
|
|
565
|
-
let dimStyleTuples = [];
|
|
639
|
+
const groupsByName = {};
|
|
566
640
|
for (const group of tableGroups) {
|
|
567
|
-
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
ltypeTuples = group;
|
|
571
|
-
} else if (group[0]?.[1] === "LAYER") {
|
|
572
|
-
layersTuples = group;
|
|
573
|
-
} else if (group[0]?.[1] === "VPORT") {
|
|
574
|
-
vPortTuples = group;
|
|
575
|
-
} else if (group[0]?.[1] === "DIMSTYLE") {
|
|
576
|
-
dimStyleTuples = group;
|
|
577
|
-
}
|
|
641
|
+
const name = String(group[0]?.[1] ?? "");
|
|
642
|
+
if (!name) continue;
|
|
643
|
+
groupsByName[name] = group;
|
|
578
644
|
}
|
|
645
|
+
const stylesTuples = groupsByName.STYLE ?? [];
|
|
646
|
+
const layersTuples = groupsByName.LAYER ?? [];
|
|
647
|
+
const vPortTuples = groupsByName.VPORT ?? [];
|
|
648
|
+
const ltypeTuples = groupsByName.LTYPE ?? [];
|
|
649
|
+
const dimStyleTuples = groupsByName.DIMSTYLE ?? [];
|
|
650
|
+
const appIdTuples = groupsByName.APPID ?? [];
|
|
651
|
+
const blockRecordTuples = groupsByName.BLOCK_RECORD ?? [];
|
|
652
|
+
const ucsTuples = groupsByName.UCS ?? [];
|
|
653
|
+
const viewTuples = groupsByName.VIEW ?? [];
|
|
579
654
|
return {
|
|
580
655
|
layers: tableHandler(layersTuples, "LAYER", layerHandler),
|
|
581
656
|
styles: tableHandler(stylesTuples, "STYLE", styleHandler),
|
|
582
657
|
vports: tableHandler(vPortTuples, "VPORT", vPortHandler),
|
|
583
658
|
ltypes: tableHandler(ltypeTuples, "LTYPE", ltypeHandler),
|
|
584
|
-
dimStyles: tableHandler(dimStyleTuples, "DIMSTYLE", dimStyleHandler)
|
|
659
|
+
dimStyles: tableHandler(dimStyleTuples, "DIMSTYLE", dimStyleHandler),
|
|
660
|
+
appids: tableHandler(appIdTuples, "APPID", appIdHandler),
|
|
661
|
+
blockRecords: tableHandler(blockRecordTuples, "BLOCK_RECORD", blockRecordHandler),
|
|
662
|
+
ucs: tableHandler(ucsTuples, "UCS", ucsHandler),
|
|
663
|
+
views: tableHandler(viewTuples, "VIEW", viewHandler)
|
|
585
664
|
};
|
|
586
665
|
}
|
|
587
666
|
//# sourceMappingURL=tables.cjs.map
|