@mlightcad/cad-pdf-plugin 1.8.0-preview.3 → 1.8.0-preview.4

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 (189) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +280 -186
  3. package/dist/cad-pdf-plugin-register.js +29 -11
  4. package/dist/cad-pdf-plugin-register.umd.cjs +1 -1
  5. package/dist/cad-pdf-plugin.js +17568 -8428
  6. package/dist/cad-pdf-plugin.umd.cjs +847 -13
  7. package/lib/AcApConvertToPdfCmd.d.ts.map +1 -1
  8. package/lib/AcApConvertToPdfCmd.js +14 -3
  9. package/lib/AcApConvertToPdfCmd.js.map +1 -1
  10. package/lib/AcApImportPdfCmd.d.ts +5 -3
  11. package/lib/AcApImportPdfCmd.d.ts.map +1 -1
  12. package/lib/AcApImportPdfCmd.js +5 -3
  13. package/lib/AcApImportPdfCmd.js.map +1 -1
  14. package/lib/AcApImportPdfPromptCmd.d.ts +16 -0
  15. package/lib/AcApImportPdfPromptCmd.d.ts.map +1 -0
  16. package/lib/AcApImportPdfPromptCmd.js +89 -0
  17. package/lib/AcApImportPdfPromptCmd.js.map +1 -0
  18. package/lib/AcApPdfBlockCmd.d.ts +15 -0
  19. package/lib/AcApPdfBlockCmd.d.ts.map +1 -0
  20. package/lib/AcApPdfBlockCmd.js +75 -0
  21. package/lib/AcApPdfBlockCmd.js.map +1 -0
  22. package/lib/AcApPdfDimCmd.d.ts +20 -0
  23. package/lib/AcApPdfDimCmd.d.ts.map +1 -0
  24. package/lib/AcApPdfDimCmd.js +413 -0
  25. package/lib/AcApPdfDimCmd.js.map +1 -0
  26. package/lib/AcApPdfDimSession.d.ts +82 -0
  27. package/lib/AcApPdfDimSession.d.ts.map +1 -0
  28. package/lib/AcApPdfDimSession.js +252 -0
  29. package/lib/AcApPdfDimSession.js.map +1 -0
  30. package/lib/AcApPdfFontResolver.d.ts.map +1 -1
  31. package/lib/AcApPdfFontResolver.js +2 -5
  32. package/lib/AcApPdfFontResolver.js.map +1 -1
  33. package/lib/AcApPdfHatchCmd.d.ts +33 -0
  34. package/lib/AcApPdfHatchCmd.d.ts.map +1 -0
  35. package/lib/AcApPdfHatchCmd.js +411 -0
  36. package/lib/AcApPdfHatchCmd.js.map +1 -0
  37. package/lib/AcApPdfHatchSession.d.ts +122 -0
  38. package/lib/AcApPdfHatchSession.d.ts.map +1 -0
  39. package/lib/AcApPdfHatchSession.js +357 -0
  40. package/lib/AcApPdfHatchSession.js.map +1 -0
  41. package/lib/AcApPdfImportConvertor.d.ts +47 -5
  42. package/lib/AcApPdfImportConvertor.d.ts.map +1 -1
  43. package/lib/AcApPdfImportConvertor.js +999 -108
  44. package/lib/AcApPdfImportConvertor.js.map +1 -1
  45. package/lib/AcApPdfImportOptions.d.ts +116 -0
  46. package/lib/AcApPdfImportOptions.d.ts.map +1 -0
  47. package/lib/AcApPdfImportOptions.js +31 -0
  48. package/lib/AcApPdfImportOptions.js.map +1 -0
  49. package/lib/AcApPdfImportResources.d.ts +41 -0
  50. package/lib/AcApPdfImportResources.d.ts.map +1 -0
  51. package/lib/AcApPdfImportResources.js +52 -0
  52. package/lib/AcApPdfImportResources.js.map +1 -0
  53. package/lib/AcApPdfPlugin.d.ts +3 -3
  54. package/lib/AcApPdfPlugin.d.ts.map +1 -1
  55. package/lib/AcApPdfPlugin.js +23 -5
  56. package/lib/AcApPdfPlugin.js.map +1 -1
  57. package/lib/AcApPdfScaleCmd.d.ts +22 -0
  58. package/lib/AcApPdfScaleCmd.d.ts.map +1 -0
  59. package/lib/AcApPdfScaleCmd.js +185 -0
  60. package/lib/AcApPdfScaleCmd.js.map +1 -0
  61. package/lib/AcApPdfTextCmd.d.ts +73 -0
  62. package/lib/AcApPdfTextCmd.d.ts.map +1 -0
  63. package/lib/AcApPdfTextCmd.js +777 -0
  64. package/lib/AcApPdfTextCmd.js.map +1 -0
  65. package/lib/AcApPdfTextSession.d.ts +232 -0
  66. package/lib/AcApPdfTextSession.d.ts.map +1 -0
  67. package/lib/AcApPdfTextSession.js +826 -0
  68. package/lib/AcApPdfTextSession.js.map +1 -0
  69. package/lib/acapPdfI18n.d.ts +11 -0
  70. package/lib/acapPdfI18n.d.ts.map +1 -0
  71. package/lib/acapPdfI18n.js +57 -0
  72. package/lib/acapPdfI18n.js.map +1 -0
  73. package/lib/acapPdfPrompts.d.ts +12 -0
  74. package/lib/acapPdfPrompts.d.ts.map +1 -0
  75. package/lib/acapPdfPrompts.js +100 -0
  76. package/lib/acapPdfPrompts.js.map +1 -0
  77. package/lib/index.d.ts +28 -0
  78. package/lib/index.d.ts.map +1 -1
  79. package/lib/index.js +28 -0
  80. package/lib/index.js.map +1 -1
  81. package/lib/pdfDeprecatedMatching.d.ts +27 -0
  82. package/lib/pdfDeprecatedMatching.d.ts.map +1 -0
  83. package/lib/pdfDeprecatedMatching.js +20 -0
  84. package/lib/pdfDeprecatedMatching.js.map +1 -0
  85. package/lib/pdfDimStrokeTexts.d.ts +55 -0
  86. package/lib/pdfDimStrokeTexts.d.ts.map +1 -0
  87. package/lib/pdfDimStrokeTexts.js +274 -0
  88. package/lib/pdfDimStrokeTexts.js.map +1 -0
  89. package/lib/pdfDimensionConvert.d.ts +80 -0
  90. package/lib/pdfDimensionConvert.d.ts.map +1 -0
  91. package/lib/pdfDimensionConvert.js +566 -0
  92. package/lib/pdfDimensionConvert.js.map +1 -0
  93. package/lib/pdfEntityStrokes.d.ts +13 -0
  94. package/lib/pdfEntityStrokes.d.ts.map +1 -0
  95. package/lib/pdfEntityStrokes.js +86 -0
  96. package/lib/pdfEntityStrokes.js.map +1 -0
  97. package/lib/pdfHatchRecover.d.ts +57 -0
  98. package/lib/pdfHatchRecover.d.ts.map +1 -0
  99. package/lib/pdfHatchRecover.js +315 -0
  100. package/lib/pdfHatchRecover.js.map +1 -0
  101. package/lib/pdfImportAppend.d.ts +24 -0
  102. package/lib/pdfImportAppend.d.ts.map +1 -0
  103. package/lib/pdfImportAppend.js +35 -0
  104. package/lib/pdfImportAppend.js.map +1 -0
  105. package/lib/pdfImportEntities.d.ts +63 -0
  106. package/lib/pdfImportEntities.d.ts.map +1 -0
  107. package/lib/pdfImportEntities.js +307 -0
  108. package/lib/pdfImportEntities.js.map +1 -0
  109. package/lib/pdfImportImages.d.ts +90 -0
  110. package/lib/pdfImportImages.d.ts.map +1 -0
  111. package/lib/pdfImportImages.js +294 -0
  112. package/lib/pdfImportImages.js.map +1 -0
  113. package/lib/pdfImportShapes.d.ts +63 -0
  114. package/lib/pdfImportShapes.d.ts.map +1 -0
  115. package/lib/pdfImportShapes.js +248 -0
  116. package/lib/pdfImportShapes.js.map +1 -0
  117. package/lib/pdfVectorImport.d.ts +218 -5
  118. package/lib/pdfVectorImport.d.ts.map +1 -1
  119. package/lib/pdfVectorImport.js +566 -98
  120. package/lib/pdfVectorImport.js.map +1 -1
  121. package/lib/recognition/pdfCurveRecognition.d.ts +91 -0
  122. package/lib/recognition/pdfCurveRecognition.d.ts.map +1 -0
  123. package/lib/recognition/pdfCurveRecognition.js +506 -0
  124. package/lib/recognition/pdfCurveRecognition.js.map +1 -0
  125. package/lib/recognition/pdfDimDigitRecognition.d.ts +18 -0
  126. package/lib/recognition/pdfDimDigitRecognition.d.ts.map +1 -0
  127. package/lib/recognition/pdfDimDigitRecognition.js +520 -0
  128. package/lib/recognition/pdfDimDigitRecognition.js.map +1 -0
  129. package/lib/recognition/pdfDimensionPattern.d.ts +173 -0
  130. package/lib/recognition/pdfDimensionPattern.d.ts.map +1 -0
  131. package/lib/recognition/pdfDimensionPattern.js +1023 -0
  132. package/lib/recognition/pdfDimensionPattern.js.map +1 -0
  133. package/lib/recognition/pdfFormBlocks.d.ts +58 -0
  134. package/lib/recognition/pdfFormBlocks.d.ts.map +1 -0
  135. package/lib/recognition/pdfFormBlocks.js +260 -0
  136. package/lib/recognition/pdfFormBlocks.js.map +1 -0
  137. package/lib/recognition/pdfGlyphClustering.d.ts +81 -0
  138. package/lib/recognition/pdfGlyphClustering.d.ts.map +1 -0
  139. package/lib/recognition/pdfGlyphClustering.js +1005 -0
  140. package/lib/recognition/pdfGlyphClustering.js.map +1 -0
  141. package/lib/recognition/pdfGlyphDictionary.d.ts +49 -0
  142. package/lib/recognition/pdfGlyphDictionary.d.ts.map +1 -0
  143. package/lib/recognition/pdfGlyphDictionary.js +188 -0
  144. package/lib/recognition/pdfGlyphDictionary.js.map +1 -0
  145. package/lib/recognition/pdfHatchFaces.d.ts +84 -0
  146. package/lib/recognition/pdfHatchFaces.d.ts.map +1 -0
  147. package/lib/recognition/pdfHatchFaces.js +1285 -0
  148. package/lib/recognition/pdfHatchFaces.js.map +1 -0
  149. package/lib/recognition/pdfHatchRecognition.d.ts +222 -0
  150. package/lib/recognition/pdfHatchRecognition.d.ts.map +1 -0
  151. package/lib/recognition/pdfHatchRecognition.js +3781 -0
  152. package/lib/recognition/pdfHatchRecognition.js.map +1 -0
  153. package/lib/recognition/pdfRecGeometry.d.ts +67 -0
  154. package/lib/recognition/pdfRecGeometry.d.ts.map +1 -0
  155. package/lib/recognition/pdfRecGeometry.js +365 -0
  156. package/lib/recognition/pdfRecGeometry.js.map +1 -0
  157. package/lib/recognition/pdfTextFontKind.d.ts +16 -0
  158. package/lib/recognition/pdfTextFontKind.d.ts.map +1 -0
  159. package/lib/recognition/pdfTextFontKind.js +51 -0
  160. package/lib/recognition/pdfTextFontKind.js.map +1 -0
  161. package/lib/recognition/pdfTextMerge.d.ts +71 -0
  162. package/lib/recognition/pdfTextMerge.d.ts.map +1 -0
  163. package/lib/recognition/pdfTextMerge.js +382 -0
  164. package/lib/recognition/pdfTextMerge.js.map +1 -0
  165. package/lib/recognition/pdfTextRunMerge.d.ts +28 -0
  166. package/lib/recognition/pdfTextRunMerge.d.ts.map +1 -0
  167. package/lib/recognition/pdfTextRunMerge.js +90 -0
  168. package/lib/recognition/pdfTextRunMerge.js.map +1 -0
  169. package/lib/register.d.ts +8 -2
  170. package/lib/register.d.ts.map +1 -1
  171. package/lib/register.js +29 -4
  172. package/lib/register.js.map +1 -1
  173. package/lib/ui/AcUiPdfDimPanel.d.ts +55 -0
  174. package/lib/ui/AcUiPdfDimPanel.d.ts.map +1 -0
  175. package/lib/ui/AcUiPdfDimPanel.js +347 -0
  176. package/lib/ui/AcUiPdfDimPanel.js.map +1 -0
  177. package/lib/ui/AcUiPdfHatchPanel.d.ts +57 -0
  178. package/lib/ui/AcUiPdfHatchPanel.d.ts.map +1 -0
  179. package/lib/ui/AcUiPdfHatchPanel.js +420 -0
  180. package/lib/ui/AcUiPdfHatchPanel.js.map +1 -0
  181. package/lib/ui/AcUiPdfImportDialog.d.ts +120 -0
  182. package/lib/ui/AcUiPdfImportDialog.d.ts.map +1 -0
  183. package/lib/ui/AcUiPdfImportDialog.js +673 -0
  184. package/lib/ui/AcUiPdfImportDialog.js.map +1 -0
  185. package/lib/ui/AcUiPdfTextPanel.d.ts +95 -0
  186. package/lib/ui/AcUiPdfTextPanel.d.ts.map +1 -0
  187. package/lib/ui/AcUiPdfTextPanel.js +775 -0
  188. package/lib/ui/AcUiPdfTextPanel.js.map +1 -0
  189. package/package.json +11 -11
@@ -0,0 +1,382 @@
1
+ /**
2
+ * Merges recovered text lines (often single characters the clustering left
3
+ * apart) into one text block: groups them into paragraphs by baseline,
4
+ * orders them for reading and joins their texts.
5
+ *
6
+ * Pure geometry, like {@link clusterPdfTextStrokes}: unit-testable without
7
+ * the data model.
8
+ */
9
+ var __rest = (this && this.__rest) || function (s, e) {
10
+ var t = {};
11
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
12
+ t[p] = s[p];
13
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
14
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
15
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
16
+ t[p[i]] = s[p[i]];
17
+ }
18
+ return t;
19
+ };
20
+ var __read = (this && this.__read) || function (o, n) {
21
+ var m = typeof Symbol === "function" && o[Symbol.iterator];
22
+ if (!m) return o;
23
+ var i = m.call(o), r, ar = [], e;
24
+ try {
25
+ while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
26
+ }
27
+ catch (error) { e = { error: error }; }
28
+ finally {
29
+ try {
30
+ if (r && !r.done && (m = i["return"])) m.call(i);
31
+ }
32
+ finally { if (e) throw e.error; }
33
+ }
34
+ return ar;
35
+ };
36
+ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
37
+ if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
38
+ if (ar || !(i in from)) {
39
+ if (!ar) ar = Array.prototype.slice.call(from, 0, i);
40
+ ar[i] = from[i];
41
+ }
42
+ }
43
+ return to.concat(ar || Array.prototype.slice.call(from));
44
+ };
45
+ var __values = (this && this.__values) || function(o) {
46
+ var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
47
+ if (m) return m.call(o);
48
+ if (o && typeof o.length === "number") return {
49
+ next: function () {
50
+ if (o && i >= o.length) o = void 0;
51
+ return { value: o && o[i++], done: !o };
52
+ }
53
+ };
54
+ throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
55
+ };
56
+ /** Gap between two parts of a line (× height) that reads as a space. */
57
+ var SPACE_GAP = 0.5;
58
+ /** Baseline difference (× height) that starts a new paragraph. */
59
+ var PARAGRAPH_GAP = 0.6;
60
+ /**
61
+ * Merges lines into one block.
62
+ *
63
+ * The block direction is that of the part with the most glyphs: a single
64
+ * glyph's own direction is often a poor guess (an `I` looks vertical).
65
+ */
66
+ export function mergePdfTextLines(parts, options) {
67
+ var e_1, _a;
68
+ if (options === void 0) { options = {}; }
69
+ var angle = dominantRotation(parts.map(function (part) { return part.line; }));
70
+ var boxes = parts.map(function (part, index) { return partBox(part, index, angle); });
71
+ var height = median(boxes.map(function (box) { return box.top - box.baseline; })) || 1e-9;
72
+ // Paragraphs: parts sharing a baseline, from top to bottom.
73
+ var byBaseline = __spreadArray([], __read(boxes), false).sort(function (a, b) { return b.baseline - a.baseline; });
74
+ var groups = [];
75
+ try {
76
+ for (var byBaseline_1 = __values(byBaseline), byBaseline_1_1 = byBaseline_1.next(); !byBaseline_1_1.done; byBaseline_1_1 = byBaseline_1.next()) {
77
+ var box = byBaseline_1_1.value;
78
+ var group = groups[groups.length - 1];
79
+ if (group &&
80
+ Math.abs(median(group.map(function (item) { return item.baseline; })) - box.baseline) <=
81
+ PARAGRAPH_GAP * height) {
82
+ group.push(box);
83
+ }
84
+ else {
85
+ groups.push([box]);
86
+ }
87
+ }
88
+ }
89
+ catch (e_1_1) { e_1 = { error: e_1_1 }; }
90
+ finally {
91
+ try {
92
+ if (byBaseline_1_1 && !byBaseline_1_1.done && (_a = byBaseline_1.return)) _a.call(byBaseline_1);
93
+ }
94
+ finally { if (e_1) throw e_1.error; }
95
+ }
96
+ var paragraphs = groups.map(function (group) {
97
+ var e_2, _a;
98
+ var ordered = __spreadArray([], __read(group), false).sort(function (a, b) { return a.minU - b.minU; });
99
+ var spaces = spaceCounter(ordered, height, options.measure);
100
+ var text = '';
101
+ var previous;
102
+ try {
103
+ for (var ordered_1 = __values(ordered), ordered_1_1 = ordered_1.next(); !ordered_1_1.done; ordered_1_1 = ordered_1.next()) {
104
+ var box = ordered_1_1.value;
105
+ var piece = box.part.text.trim();
106
+ if (!piece)
107
+ continue;
108
+ if (previous && text)
109
+ text += ' '.repeat(spaces(previous, box));
110
+ text += piece;
111
+ previous = box;
112
+ }
113
+ }
114
+ catch (e_2_1) { e_2 = { error: e_2_1 }; }
115
+ finally {
116
+ try {
117
+ if (ordered_1_1 && !ordered_1_1.done && (_a = ordered_1.return)) _a.call(ordered_1);
118
+ }
119
+ finally { if (e_2) throw e_2.error; }
120
+ }
121
+ return {
122
+ parts: ordered.map(function (box) { return box.index; }),
123
+ baseline: median(group.map(function (box) { return box.baseline; })),
124
+ bottom: Math.min.apply(Math, __spreadArray([], __read(group.map(function (box) { return box.bottom; })), false)),
125
+ minU: Math.min.apply(Math, __spreadArray([], __read(group.map(function (box) { return box.minU; })), false)),
126
+ maxU: Math.max.apply(Math, __spreadArray([], __read(group.map(function (box) { return box.maxU; })), false)),
127
+ text: text,
128
+ boxes: ordered
129
+ };
130
+ });
131
+ var minU = Math.min.apply(Math, __spreadArray([], __read(paragraphs.map(function (item) { return item.minU; })), false));
132
+ var maxU = Math.max.apply(Math, __spreadArray([], __read(paragraphs.map(function (item) { return item.maxU; })), false));
133
+ var spacings = paragraphs
134
+ .slice(1)
135
+ .map(function (item, i) { return paragraphs[i].baseline - item.baseline; });
136
+ return {
137
+ line: {
138
+ strokes: parts.flatMap(function (part) { return part.line.strokes; }),
139
+ glyphs: paragraphs.flatMap(function (item) { return item.boxes.flatMap(function (box) { return box.glyphs; }); }),
140
+ rotation: angle,
141
+ position: toWorld(minU, paragraphs[0].baseline, angle),
142
+ height: height,
143
+ width: maxU - minU
144
+ },
145
+ paragraphs: paragraphs.map(function (_a) {
146
+ var _boxes = _a.boxes, rest = __rest(_a, ["boxes"]);
147
+ return rest;
148
+ }),
149
+ text: paragraphs.map(function (item) { return item.text; }).join('\n'),
150
+ lineSpacing: spacings.length > 0
151
+ ? spacings.reduce(function (sum, value) { return sum + value; }, 0) / spacings.length
152
+ : 0
153
+ };
154
+ }
155
+ /**
156
+ * Returns how many spaces go between two parts of a paragraph.
157
+ *
158
+ * With a measurer, the spaces fill the distance from the start of one part
159
+ * to the start of the next, less the advance of the first part's text, at
160
+ * the width factor that makes the parts' text span their ink (the median
161
+ * over the parts). Starts are used rather than the gap between the parts'
162
+ * boxes: a stroke the clustering put into the wrong part can widen a box,
163
+ * but hardly moves where a part begins.
164
+ *
165
+ * Without a measurer, a gap wider than half the text height is one space
166
+ * (also between CJK characters: letter-spaced titles such as "标 高"
167
+ * would otherwise lose their gaps).
168
+ */
169
+ function spaceCounter(boxes, height, measure) {
170
+ var fallback = function (previous, next) {
171
+ return next.minU - previous.maxU > SPACE_GAP * height ? 1 : 0;
172
+ };
173
+ if (!measure)
174
+ return fallback;
175
+ var advance = function (text) {
176
+ var value = measure(text, height);
177
+ return value !== undefined && Number.isFinite(value) && value > 0
178
+ ? value
179
+ : undefined;
180
+ };
181
+ var fits = boxes.flatMap(function (box) {
182
+ var text = box.part.text.trim();
183
+ var natural = text ? advance(text) : undefined;
184
+ return natural ? [(box.maxU - box.minU) / natural] : [];
185
+ });
186
+ var widthFactor = median(fits);
187
+ var space = advance(' ');
188
+ if (!(widthFactor > 0) || !space)
189
+ return fallback;
190
+ return function (previous, next) {
191
+ var natural = advance(previous.part.text.trim());
192
+ if (natural === undefined)
193
+ return fallback(previous, next);
194
+ var free = next.minU - previous.minU - natural * widthFactor;
195
+ return Math.max(0, Math.round(free / (space * widthFactor)));
196
+ };
197
+ }
198
+ /**
199
+ * Whether two lines read as one: same direction (or a single glyph), similar
200
+ * height, the same baseline and close together along it.
201
+ *
202
+ * @param maxGap - Largest gap along the baseline, × text height.
203
+ */
204
+ export function arePdfTextLinesAdjacent(a, b, maxGap) {
205
+ if (maxGap === void 0) { maxGap = 1.5; }
206
+ var angle = dominantRotation([a, b]);
207
+ if (!sameDirection(a, angle) || !sameDirection(b, angle))
208
+ return false;
209
+ var boxA = partBox({ line: a, text: '' }, 0, angle);
210
+ var boxB = partBox({ line: b, text: '' }, 1, angle);
211
+ var ha = boxA.top - boxA.baseline;
212
+ var hb = boxB.top - boxB.baseline;
213
+ var height = Math.max(ha, hb);
214
+ if (height <= 0)
215
+ return false;
216
+ // Single glyphs vary a lot in height (`-` vs `M`): only compare heights
217
+ // of real lines.
218
+ if (a.glyphs.length > 1 &&
219
+ b.glyphs.length > 1 &&
220
+ Math.min(ha, hb) < height * 0.6) {
221
+ return false;
222
+ }
223
+ if (Math.abs(boxA.baseline - boxB.baseline) > 0.3 * height)
224
+ return false;
225
+ var gap = Math.max(boxA.minU, boxB.minU) - Math.min(boxA.maxU, boxB.maxU);
226
+ return gap <= maxGap * height;
227
+ }
228
+ /** A line keeps the direction unless it is a single glyph (unreliable). */
229
+ function sameDirection(line, angle) {
230
+ if (line.glyphs.length <= 1)
231
+ return true;
232
+ var diff = Math.abs(line.rotation - angle) % Math.PI;
233
+ if (diff > Math.PI / 2)
234
+ diff = Math.PI - diff;
235
+ return diff < (5 * Math.PI) / 180;
236
+ }
237
+ /**
238
+ * Direction of a merged block: that of the line with the most glyphs when
239
+ * one has several. Single glyphs only: their own directions are guesses, so
240
+ * the candidate (0, or one of theirs) giving the flattest block wins, like
241
+ * the minimum-height box of the clustering.
242
+ */
243
+ function dominantRotation(lines) {
244
+ var e_3, _a, e_4, _b, e_5, _c;
245
+ var best = lines[0];
246
+ try {
247
+ for (var lines_1 = __values(lines), lines_1_1 = lines_1.next(); !lines_1_1.done; lines_1_1 = lines_1.next()) {
248
+ var line = lines_1_1.value;
249
+ if (line.glyphs.length > best.glyphs.length)
250
+ best = line;
251
+ }
252
+ }
253
+ catch (e_3_1) { e_3 = { error: e_3_1 }; }
254
+ finally {
255
+ try {
256
+ if (lines_1_1 && !lines_1_1.done && (_a = lines_1.return)) _a.call(lines_1);
257
+ }
258
+ finally { if (e_3) throw e_3.error; }
259
+ }
260
+ if (!best)
261
+ return 0;
262
+ if (best.glyphs.length > 1)
263
+ return best.rotation;
264
+ var points = lines.flatMap(function (line) {
265
+ return line.strokes.flatMap(function (stroke) { return stroke.points; });
266
+ });
267
+ var candidates = __spreadArray([0], __read(lines.map(function (line) { return line.rotation; })), false);
268
+ var bestAngle = 0;
269
+ var bestHeight = Infinity;
270
+ try {
271
+ for (var candidates_1 = __values(candidates), candidates_1_1 = candidates_1.next(); !candidates_1_1.done; candidates_1_1 = candidates_1.next()) {
272
+ var angle = candidates_1_1.value;
273
+ var minV = Infinity;
274
+ var maxV = -Infinity;
275
+ try {
276
+ for (var points_1 = (e_5 = void 0, __values(points)), points_1_1 = points_1.next(); !points_1_1.done; points_1_1 = points_1.next()) {
277
+ var p = points_1_1.value;
278
+ var v = toLocal(p, angle).v;
279
+ minV = Math.min(minV, v);
280
+ maxV = Math.max(maxV, v);
281
+ }
282
+ }
283
+ catch (e_5_1) { e_5 = { error: e_5_1 }; }
284
+ finally {
285
+ try {
286
+ if (points_1_1 && !points_1_1.done && (_c = points_1.return)) _c.call(points_1);
287
+ }
288
+ finally { if (e_5) throw e_5.error; }
289
+ }
290
+ // Prefer the earlier candidate (0 first) unless clearly flatter.
291
+ if (maxV - minV < bestHeight - 1e-9) {
292
+ bestHeight = maxV - minV;
293
+ bestAngle = angle;
294
+ }
295
+ }
296
+ }
297
+ catch (e_4_1) { e_4 = { error: e_4_1 }; }
298
+ finally {
299
+ try {
300
+ if (candidates_1_1 && !candidates_1_1.done && (_b = candidates_1.return)) _b.call(candidates_1);
301
+ }
302
+ finally { if (e_4) throw e_4.error; }
303
+ }
304
+ return bestAngle;
305
+ }
306
+ /** Glyph boxes, extent and baseline of a part in the block frame. */
307
+ function partBox(part, index, angle) {
308
+ var source = part.line.glyphs.length > 0
309
+ ? part.line.glyphs
310
+ : [{ strokes: part.line.strokes, minU: 0, maxU: 0, minV: 0, maxV: 0 }];
311
+ var glyphs = source.map(function (glyph) {
312
+ var e_6, _a, e_7, _b;
313
+ var minU = Infinity;
314
+ var maxU = -Infinity;
315
+ var minV = Infinity;
316
+ var maxV = -Infinity;
317
+ try {
318
+ for (var _c = __values(glyph.strokes), _d = _c.next(); !_d.done; _d = _c.next()) {
319
+ var stroke = _d.value;
320
+ try {
321
+ for (var _e = (e_7 = void 0, __values(stroke.points)), _f = _e.next(); !_f.done; _f = _e.next()) {
322
+ var p = _f.value;
323
+ var _g = toLocal(p, angle), u = _g.u, v = _g.v;
324
+ minU = Math.min(minU, u);
325
+ maxU = Math.max(maxU, u);
326
+ minV = Math.min(minV, v);
327
+ maxV = Math.max(maxV, v);
328
+ }
329
+ }
330
+ catch (e_7_1) { e_7 = { error: e_7_1 }; }
331
+ finally {
332
+ try {
333
+ if (_f && !_f.done && (_b = _e.return)) _b.call(_e);
334
+ }
335
+ finally { if (e_7) throw e_7.error; }
336
+ }
337
+ }
338
+ }
339
+ catch (e_6_1) { e_6 = { error: e_6_1 }; }
340
+ finally {
341
+ try {
342
+ if (_d && !_d.done && (_a = _c.return)) _a.call(_c);
343
+ }
344
+ finally { if (e_6) throw e_6.error; }
345
+ }
346
+ return { strokes: glyph.strokes, minU: minU, maxU: maxU, minV: minV, maxV: maxV };
347
+ });
348
+ var ordered = glyphs
349
+ .filter(function (glyph) { return Number.isFinite(glyph.minU); })
350
+ .sort(function (a, b) { return a.minU - b.minU; });
351
+ // Like the clustering: descenders hang below, most glyphs sit on the line.
352
+ var baseline = median(ordered.map(function (glyph) { return glyph.minV; }));
353
+ var tops = ordered.map(function (glyph) { return glyph.maxV; }).sort(function (a, b) { return a - b; });
354
+ return {
355
+ index: index,
356
+ part: part,
357
+ glyphs: ordered,
358
+ minU: Math.min.apply(Math, __spreadArray([], __read(ordered.map(function (glyph) { return glyph.minU; })), false)),
359
+ maxU: Math.max.apply(Math, __spreadArray([], __read(ordered.map(function (glyph) { return glyph.maxU; })), false)),
360
+ baseline: baseline,
361
+ bottom: Math.min.apply(Math, __spreadArray([], __read(ordered.map(function (glyph) { return glyph.minV; })), false)),
362
+ top: tops[Math.min(tops.length - 1, Math.floor(tops.length * 0.9))]
363
+ };
364
+ }
365
+ function median(values) {
366
+ if (values.length === 0)
367
+ return 0;
368
+ var sorted = __spreadArray([], __read(values), false).sort(function (a, b) { return a - b; });
369
+ var mid = Math.floor(sorted.length / 2);
370
+ return sorted.length % 2 ? sorted[mid] : (sorted[mid - 1] + sorted[mid]) / 2;
371
+ }
372
+ function toLocal(p, angle) {
373
+ var c = Math.cos(angle);
374
+ var s = Math.sin(angle);
375
+ return { u: p.x * c + p.y * s, v: -p.x * s + p.y * c };
376
+ }
377
+ function toWorld(u, v, angle) {
378
+ var c = Math.cos(angle);
379
+ var s = Math.sin(angle);
380
+ return { x: u * c - v * s, y: u * s + v * c };
381
+ }
382
+ //# sourceMappingURL=pdfTextMerge.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pdfTextMerge.js","sourceRoot":"","sources":["../../src/recognition/pdfTextMerge.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Joins consecutive PDF text runs that continue the same line.
3
+ *
4
+ * PDF producers often emit one line as several `showText` runs (kerning,
5
+ * font switches, per-word positioning). Importing each run as its own
6
+ * `AcDbText` leaves a line broken into fragments that are hard to edit.
7
+ */
8
+ import type { PdfImportedText } from '../pdfVectorImport';
9
+ /** Tuning for {@link mergePdfTextRuns}. */
10
+ export interface PdfTextRunMergeOptions {
11
+ /** Largest gap between runs, as a fraction of text height. Default 0.6. */
12
+ maxGap?: number;
13
+ /** Gap that becomes a space, as a fraction of text height. Default 0.2. */
14
+ spaceGap?: number;
15
+ }
16
+ /**
17
+ * Merges each run into the previous one when both sit on the same baseline
18
+ * with the same style and the gap between them is small. Only consecutive
19
+ * runs are joined, so content-stream order (normally reading order) decides.
20
+ *
21
+ * Runs without a known advance width are never merged into.
22
+ *
23
+ * @param runs - Text runs in content-stream order.
24
+ * @param options - Gap thresholds.
25
+ * @returns New runs; inputs are not modified.
26
+ */
27
+ export declare function mergePdfTextRuns(runs: readonly PdfImportedText[], options?: PdfTextRunMergeOptions): PdfImportedText[];
28
+ //# sourceMappingURL=pdfTextRunMerge.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pdfTextRunMerge.d.ts","sourceRoot":"","sources":["../../src/recognition/pdfTextRunMerge.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AAEzD,2CAA2C;AAC3C,MAAM,WAAW,sBAAsB;IACrC,2EAA2E;IAC3E,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,2EAA2E;IAC3E,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,SAAS,eAAe,EAAE,EAChC,OAAO,GAAE,sBAA2B,GACnC,eAAe,EAAE,CAgCnB"}
@@ -0,0 +1,90 @@
1
+ /**
2
+ * Joins consecutive PDF text runs that continue the same line.
3
+ *
4
+ * PDF producers often emit one line as several `showText` runs (kerning,
5
+ * font switches, per-word positioning). Importing each run as its own
6
+ * `AcDbText` leaves a line broken into fragments that are hard to edit.
7
+ */
8
+ var __assign = (this && this.__assign) || function () {
9
+ __assign = Object.assign || function(t) {
10
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
11
+ s = arguments[i];
12
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
13
+ t[p] = s[p];
14
+ }
15
+ return t;
16
+ };
17
+ return __assign.apply(this, arguments);
18
+ };
19
+ var __values = (this && this.__values) || function(o) {
20
+ var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
21
+ if (m) return m.call(o);
22
+ if (o && typeof o.length === "number") return {
23
+ next: function () {
24
+ if (o && i >= o.length) o = void 0;
25
+ return { value: o && o[i++], done: !o };
26
+ }
27
+ };
28
+ throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
29
+ };
30
+ /**
31
+ * Merges each run into the previous one when both sit on the same baseline
32
+ * with the same style and the gap between them is small. Only consecutive
33
+ * runs are joined, so content-stream order (normally reading order) decides.
34
+ *
35
+ * Runs without a known advance width are never merged into.
36
+ *
37
+ * @param runs - Text runs in content-stream order.
38
+ * @param options - Gap thresholds.
39
+ * @returns New runs; inputs are not modified.
40
+ */
41
+ export function mergePdfTextRuns(runs, options) {
42
+ var e_1, _a;
43
+ var _b, _c;
44
+ if (options === void 0) { options = {}; }
45
+ var maxGap = (_b = options.maxGap) !== null && _b !== void 0 ? _b : 0.6;
46
+ var spaceGap = (_c = options.spaceGap) !== null && _c !== void 0 ? _c : 0.2;
47
+ var out = [];
48
+ try {
49
+ for (var runs_1 = __values(runs), runs_1_1 = runs_1.next(); !runs_1_1.done; runs_1_1 = runs_1.next()) {
50
+ var run = runs_1_1.value;
51
+ var prev = out[out.length - 1];
52
+ if (prev && prev.width !== undefined && canJoin(prev, run)) {
53
+ var dirX = Math.cos(prev.rotation);
54
+ var dirY = Math.sin(prev.rotation);
55
+ var dx = run.position.x - prev.position.x;
56
+ var dy = run.position.y - prev.position.y;
57
+ var along = dx * dirX + dy * dirY;
58
+ var across = Math.abs(-dx * dirY + dy * dirX);
59
+ var gap = along - prev.width;
60
+ var h = prev.height;
61
+ if (across <= h * 0.1 && gap >= -h * 0.2 && gap <= h * maxGap) {
62
+ var needsSpace = gap > h * spaceGap && !/\s$/.test(prev.text) && !/^\s/.test(run.text);
63
+ out[out.length - 1] = __assign(__assign({}, prev), { text: prev.text + (needsSpace ? ' ' : '') + run.text, width: run.width !== undefined
64
+ ? Math.max(prev.width, along + run.width)
65
+ : undefined });
66
+ continue;
67
+ }
68
+ }
69
+ out.push(__assign({}, run));
70
+ }
71
+ }
72
+ catch (e_1_1) { e_1 = { error: e_1_1 }; }
73
+ finally {
74
+ try {
75
+ if (runs_1_1 && !runs_1_1.done && (_a = runs_1.return)) _a.call(runs_1);
76
+ }
77
+ finally { if (e_1) throw e_1.error; }
78
+ }
79
+ return out;
80
+ }
81
+ function canJoin(a, b) {
82
+ var rotationDiff = Math.abs(Math.atan2(Math.sin(a.rotation - b.rotation), Math.cos(a.rotation - b.rotation)));
83
+ return (a.layerName === b.layerName &&
84
+ a.color === b.color &&
85
+ a.fontId === b.fontId &&
86
+ Math.abs(a.height - b.height) <= Math.max(a.height, b.height) * 0.01 &&
87
+ Math.abs(a.widthFactor - b.widthFactor) <= 0.01 &&
88
+ rotationDiff <= (0.5 * Math.PI) / 180);
89
+ }
90
+ //# sourceMappingURL=pdfTextRunMerge.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pdfTextRunMerge.js","sourceRoot":"","sources":["../../src/recognition/pdfTextRunMerge.ts"],"names":[],"mappings":"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"}
package/lib/register.d.ts CHANGED
@@ -7,9 +7,15 @@ export declare const PDF_PLUGIN_NAME = "PdfPlugin";
7
7
  * - `-cpdf` — export drawing to PDF via command-line prompts
8
8
  * - `cpdf` — same as `-cpdf` when no UI dialog is registered; in cad-viewer,
9
9
  * `cpdf` opens the export dialog and loads this plugin on confirm via `-cpdf`
10
- * - `ipdf` — import vector geometry from PDF
10
+ * - `pdfimport` — import vector geometry from PDF through the Import PDF dialog
11
+ * - `-pdfimport` — same import with command-line prompts
12
+ * - `pdfscale` — calibrate imported PDF geometry from a known distance
13
+ * - `pdftext` — convert exploded PDF text strokes back into text
14
+ * - `pdfblock` — turn repeated PDF geometry back into a block
15
+ * - `pdfdim` — turn exploded PDF dimensions back into dimensions
16
+ * - `pdfhatch` — turn the loose strokes of a PDF hatch back into a hatch
11
17
  */
12
- export declare const PDF_PLUGIN_TRIGGERS: readonly ["-cpdf", "cpdf", "ipdf"];
18
+ export declare const PDF_PLUGIN_TRIGGERS: readonly ["-cpdf", "cpdf", "pdfimport", "-pdfimport", "pdfscale", "pdftext", "pdfblock", "pdfdim", "pdfhatch"];
13
19
  /**
14
20
  * Registers the PDF plugin for lazy loading.
15
21
  *
@@ -1 +1 @@
1
- {"version":3,"file":"register.d.ts","sourceRoot":"","sources":["../src/register.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAA;AAErE,8CAA8C;AAC9C,eAAO,MAAM,eAAe,cAAc,CAAA;AAE1C;;;;;;;GAOG;AACH,eAAO,MAAM,mBAAmB,oCAAqC,CAAA;AAErE;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CACnC,aAAa,EAAE,iBAAiB,EAChC,OAAO,GAAE;IAAE,aAAa,CAAC,EAAE,OAAO,CAAA;CAAO,GACxC,IAAI,CAcN"}
1
+ {"version":3,"file":"register.d.ts","sourceRoot":"","sources":["../src/register.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAA;AAErE,8CAA8C;AAC9C,eAAO,MAAM,eAAe,cAAc,CAAA;AAE1C;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,mBAAmB,gHAUtB,CAAA;AAaV;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CACnC,aAAa,EAAE,iBAAiB,EAChC,OAAO,GAAE;IAAE,aAAa,CAAC,EAAE,OAAO,CAAA;CAAO,GACxC,IAAI,CAcN"}
package/lib/register.js CHANGED
@@ -67,9 +67,35 @@ export var PDF_PLUGIN_NAME = 'PdfPlugin';
67
67
  * - `-cpdf` — export drawing to PDF via command-line prompts
68
68
  * - `cpdf` — same as `-cpdf` when no UI dialog is registered; in cad-viewer,
69
69
  * `cpdf` opens the export dialog and loads this plugin on confirm via `-cpdf`
70
- * - `ipdf` — import vector geometry from PDF
70
+ * - `pdfimport` — import vector geometry from PDF through the Import PDF dialog
71
+ * - `-pdfimport` — same import with command-line prompts
72
+ * - `pdfscale` — calibrate imported PDF geometry from a known distance
73
+ * - `pdftext` — convert exploded PDF text strokes back into text
74
+ * - `pdfblock` — turn repeated PDF geometry back into a block
75
+ * - `pdfdim` — turn exploded PDF dimensions back into dimensions
76
+ * - `pdfhatch` — turn the loose strokes of a PDF hatch back into a hatch
71
77
  */
72
- export var PDF_PLUGIN_TRIGGERS = ['-cpdf', 'cpdf', 'ipdf'];
78
+ export var PDF_PLUGIN_TRIGGERS = [
79
+ '-cpdf',
80
+ 'cpdf',
81
+ 'pdfimport',
82
+ '-pdfimport',
83
+ 'pdfscale',
84
+ 'pdftext',
85
+ 'pdfblock',
86
+ 'pdfdim',
87
+ 'pdfhatch'
88
+ ];
89
+ /** Triggers that remain when export is disabled. */
90
+ var PDF_IMPORT_TRIGGERS = [
91
+ 'pdfimport',
92
+ '-pdfimport',
93
+ 'pdfscale',
94
+ 'pdftext',
95
+ 'pdfblock',
96
+ 'pdfdim',
97
+ 'pdfhatch'
98
+ ];
73
99
  /**
74
100
  * Registers the PDF plugin for lazy loading.
75
101
  *
@@ -83,8 +109,7 @@ export function registerLazyPdfPlugin(pluginManager, options) {
83
109
  if (options === void 0) { options = {}; }
84
110
  var disableExport = options.disableExport === true;
85
111
  var triggers = disableExport
86
- ? ['ipdf']
87
- : __spreadArray([], __read(PDF_PLUGIN_TRIGGERS), false);
112
+ ? __spreadArray([], __read(PDF_IMPORT_TRIGGERS), false) : __spreadArray([], __read(PDF_PLUGIN_TRIGGERS), false);
88
113
  pluginManager.registerLazyPlugin({
89
114
  name: PDF_PLUGIN_NAME,
90
115
  triggers: __spreadArray([], __read(triggers), false),
@@ -1 +1 @@
1
- {"version":3,"file":"register.js","sourceRoot":"","sources":["../src/register.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEA,8CAA8C;AAC9C,MAAM,CAAC,IAAM,eAAe,GAAG,WAAW,CAAA;AAE1C;;;;;;;GAOG;AACH,MAAM,CAAC,IAAM,mBAAmB,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAU,CAAA;AAErE;;;;;;;GAOG;AACH,MAAM,UAAU,qBAAqB,CACnC,aAAgC,EAChC,OAAyC;IAF3C,iBAiBC;IAfC,wBAAA,EAAA,YAAyC;IAEzC,IAAM,aAAa,GAAG,OAAO,CAAC,aAAa,KAAK,IAAI,CAAA;IACpD,IAAM,QAAQ,GAAG,aAAa;QAC5B,CAAC,CAAE,CAAC,MAAM,CAAW;QACrB,CAAC,0BAAK,mBAAmB,SAAC,CAAA;IAE5B,aAAa,CAAC,kBAAkB,CAAC;QAC/B,IAAI,EAAE,eAAe;QACrB,QAAQ,2BAAM,QAAQ,SAAC;QACvB,MAAM,EAAE;;;;4BACsB,qBAAM,MAAM,CAAC,2BAA2B,CAAC,EAAA;;wBAA7D,eAAe,GAAK,CAAA,SAAyC,CAAA,gBAA9C;wBACvB,sBAAO,eAAe,CAAC,EAAE,aAAa,eAAA,EAAE,CAAC,EAAA;;;aAC1C;KACF,CAAC,CAAA;AACJ,CAAC"}
1
+ {"version":3,"file":"register.js","sourceRoot":"","sources":["../src/register.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEA,8CAA8C;AAC9C,MAAM,CAAC,IAAM,eAAe,GAAG,WAAW,CAAA;AAE1C;;;;;;;;;;;;;GAaG;AACH,MAAM,CAAC,IAAM,mBAAmB,GAAG;IACjC,OAAO;IACP,MAAM;IACN,WAAW;IACX,YAAY;IACZ,UAAU;IACV,SAAS;IACT,UAAU;IACV,QAAQ;IACR,UAAU;CACF,CAAA;AAEV,oDAAoD;AACpD,IAAM,mBAAmB,GAAG;IAC1B,WAAW;IACX,YAAY;IACZ,UAAU;IACV,SAAS;IACT,UAAU;IACV,QAAQ;IACR,UAAU;CACF,CAAA;AAEV;;;;;;;GAOG;AACH,MAAM,UAAU,qBAAqB,CACnC,aAAgC,EAChC,OAAyC;IAF3C,iBAiBC;IAfC,wBAAA,EAAA,YAAyC;IAEzC,IAAM,aAAa,GAAG,OAAO,CAAC,aAAa,KAAK,IAAI,CAAA;IACpD,IAAM,QAAQ,GAAG,aAAa;QAC5B,CAAC,0BAAK,mBAAmB,UACzB,CAAC,0BAAK,mBAAmB,SAAC,CAAA;IAE5B,aAAa,CAAC,kBAAkB,CAAC;QAC/B,IAAI,EAAE,eAAe;QACrB,QAAQ,2BAAM,QAAQ,SAAC;QACvB,MAAM,EAAE;;;;4BACsB,qBAAM,MAAM,CAAC,2BAA2B,CAAC,EAAA;;wBAA7D,eAAe,GAAK,CAAA,SAAyC,CAAA,gBAA9C;wBACvB,sBAAO,eAAe,CAAC,EAAE,aAAa,eAAA,EAAE,CAAC,EAAA;;;aAC1C;KACF,CAAC,CAAA;AACJ,CAAC"}