@mlightcad/mtext-parser 1.1.8 → 1.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/dist/parser.cjs.js +2 -2
- package/dist/parser.cjs.js.map +1 -1
- package/dist/parser.es.js +124 -74
- package/dist/parser.es.js.map +1 -1
- package/dist/parser.umd.js +2 -2
- package/dist/parser.umd.js.map +1 -1
- package/dist/types/parser.d.ts +22 -0
- package/package.json +1 -1
package/dist/parser.es.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
var
|
|
2
|
-
const
|
|
1
|
+
var S = /* @__PURE__ */ ((s) => (s[s.NONE = 0] = "NONE", s[s.WORD = 1] = "WORD", s[s.STACK = 2] = "STACK", s[s.SPACE = 3] = "SPACE", s[s.NBSP = 4] = "NBSP", s[s.TABULATOR = 5] = "TABULATOR", s[s.NEW_PARAGRAPH = 6] = "NEW_PARAGRAPH", s[s.NEW_COLUMN = 7] = "NEW_COLUMN", s[s.WRAP_AT_DIMLINE = 8] = "WRAP_AT_DIMLINE", s[s.PROPERTIES_CHANGED = 9] = "PROPERTIES_CHANGED", s))(S || {}), F = /* @__PURE__ */ ((s) => (s[s.BOTTOM = 0] = "BOTTOM", s[s.MIDDLE = 1] = "MIDDLE", s[s.TOP = 2] = "TOP", s))(F || {}), E = /* @__PURE__ */ ((s) => (s[s.DEFAULT = 0] = "DEFAULT", s[s.LEFT = 1] = "LEFT", s[s.RIGHT = 2] = "RIGHT", s[s.CENTER = 3] = "CENTER", s[s.JUSTIFIED = 4] = "JUSTIFIED", s[s.DISTRIBUTED = 5] = "DISTRIBUTED", s))(E || {}), R = /* @__PURE__ */ ((s) => (s[s.NONE = 0] = "NONE", s[s.UNDERLINE = 1] = "UNDERLINE", s[s.OVERLINE = 2] = "OVERLINE", s[s.STRIKE_THROUGH = 4] = "STRIKE_THROUGH", s))(R || {});
|
|
2
|
+
const v = {
|
|
3
3
|
c: "Ø",
|
|
4
4
|
d: "°",
|
|
5
5
|
p: "±"
|
|
6
|
-
},
|
|
6
|
+
}, y = {
|
|
7
7
|
l: 1,
|
|
8
8
|
r: 2,
|
|
9
9
|
c: 3,
|
|
@@ -11,28 +11,28 @@ const F = {
|
|
|
11
11
|
d: 5
|
|
12
12
|
/* DISTRIBUTED */
|
|
13
13
|
};
|
|
14
|
-
function
|
|
14
|
+
function N(s) {
|
|
15
15
|
const [t, e, r] = s;
|
|
16
16
|
return r << 16 | e << 8 | t;
|
|
17
17
|
}
|
|
18
|
-
function
|
|
18
|
+
function I(s) {
|
|
19
19
|
const t = s & 255, e = s >> 8 & 255, r = s >> 16 & 255;
|
|
20
20
|
return [t, e, r];
|
|
21
21
|
}
|
|
22
|
-
function
|
|
22
|
+
function w(s) {
|
|
23
23
|
return s.replace(/\r\n|\r|\n/g, "\\P");
|
|
24
24
|
}
|
|
25
|
-
function
|
|
25
|
+
function x(s) {
|
|
26
26
|
return s.replace(/\\P/g, "").replace(/\\~/g, "").includes("\\");
|
|
27
27
|
}
|
|
28
|
-
function
|
|
28
|
+
function P(s, t = !1) {
|
|
29
29
|
const e = /* @__PURE__ */ new Set(), r = /\\[fF](.*?)[;|]/g;
|
|
30
30
|
return [...s.matchAll(r)].forEach((a) => {
|
|
31
31
|
let l = a[1].toLowerCase();
|
|
32
32
|
t && (l = l.replace(/\.(ttf|otf|woff|shx)$/, "")), e.add(l);
|
|
33
33
|
}), e;
|
|
34
34
|
}
|
|
35
|
-
class
|
|
35
|
+
class O {
|
|
36
36
|
/**
|
|
37
37
|
* Creates a new ContextStack with an initial context.
|
|
38
38
|
* @param initial The initial MTextContext to use as the base of the stack.
|
|
@@ -92,9 +92,9 @@ class D {
|
|
|
92
92
|
* @param options - Parser options
|
|
93
93
|
*/
|
|
94
94
|
constructor(t, e, r = {}) {
|
|
95
|
-
this.continueStroke = !1, this.inStackContext = !1, this.scanner = new
|
|
96
|
-
const a = e ?? new
|
|
97
|
-
this.ctxStack = new
|
|
95
|
+
this.continueStroke = !1, this.inStackContext = !1, this.scanner = new d(t);
|
|
96
|
+
const a = e ?? new m();
|
|
97
|
+
this.ctxStack = new O(a), this.yieldPropertyCommands = r.yieldPropertyCommands ?? !1, this.resetParagraphParameters = r.resetParagraphParameters ?? !1;
|
|
98
98
|
}
|
|
99
99
|
/**
|
|
100
100
|
* Decode multi-byte character from hex code
|
|
@@ -132,7 +132,7 @@ class D {
|
|
|
132
132
|
* @returns Tuple of [TokenType.STACK, [numerator, denominator, type]]
|
|
133
133
|
*/
|
|
134
134
|
parseStacking() {
|
|
135
|
-
const t = new
|
|
135
|
+
const t = new d(this.extractExpression(!0));
|
|
136
136
|
let e = "", r = "", a = "";
|
|
137
137
|
const l = () => {
|
|
138
138
|
let c = t.peek(), n = !1;
|
|
@@ -149,11 +149,11 @@ class D {
|
|
|
149
149
|
}, u = (c) => {
|
|
150
150
|
let n = "", p = c;
|
|
151
151
|
for (; t.hasData; ) {
|
|
152
|
-
const [
|
|
153
|
-
if (!(p &&
|
|
154
|
-
if (p = !1, !
|
|
152
|
+
const [h, o] = l();
|
|
153
|
+
if (!(p && h === " ")) {
|
|
154
|
+
if (p = !1, !o && h === ";")
|
|
155
155
|
break;
|
|
156
|
-
n +=
|
|
156
|
+
n += h;
|
|
157
157
|
}
|
|
158
158
|
}
|
|
159
159
|
return n;
|
|
@@ -422,7 +422,7 @@ class D {
|
|
|
422
422
|
* @param ctx - The context to update
|
|
423
423
|
*/
|
|
424
424
|
parseParagraphProperties(t) {
|
|
425
|
-
const e = new
|
|
425
|
+
const e = new d(this.extractExpression());
|
|
426
426
|
let r = t.paragraph.indent, a = t.paragraph.left, l = t.paragraph.right, i = t.paragraph.align, u = [];
|
|
427
427
|
const c = () => {
|
|
428
428
|
const n = e.tail.match(/^[+-]?\d+(?:\.\d*)?(?:[eE][+-]?\d+)?/);
|
|
@@ -449,7 +449,7 @@ class D {
|
|
|
449
449
|
break;
|
|
450
450
|
case "q": {
|
|
451
451
|
const p = e.get();
|
|
452
|
-
for (i =
|
|
452
|
+
for (i = y[p] || 0; e.peek() === ","; )
|
|
453
453
|
e.consume(1);
|
|
454
454
|
break;
|
|
455
455
|
}
|
|
@@ -458,11 +458,11 @@ class D {
|
|
|
458
458
|
const p = e.peek();
|
|
459
459
|
if (p === "r" || p === "c") {
|
|
460
460
|
e.consume(1);
|
|
461
|
-
const
|
|
462
|
-
u.push(p +
|
|
461
|
+
const h = c();
|
|
462
|
+
u.push(p + h.toString());
|
|
463
463
|
} else {
|
|
464
|
-
const
|
|
465
|
-
isNaN(
|
|
464
|
+
const h = c();
|
|
465
|
+
isNaN(h) ? e.consume(1) : u.push(h);
|
|
466
466
|
}
|
|
467
467
|
}
|
|
468
468
|
break;
|
|
@@ -520,8 +520,8 @@ class D {
|
|
|
520
520
|
if (i)
|
|
521
521
|
return [1, i];
|
|
522
522
|
this.scanner.consume(1);
|
|
523
|
-
const
|
|
524
|
-
switch (
|
|
523
|
+
const h = this.scanner.get();
|
|
524
|
+
switch (h) {
|
|
525
525
|
case "~":
|
|
526
526
|
return [4, null];
|
|
527
527
|
case "P":
|
|
@@ -532,44 +532,64 @@ class D {
|
|
|
532
532
|
return [8, null];
|
|
533
533
|
case "S": {
|
|
534
534
|
this.inStackContext = !0;
|
|
535
|
-
const
|
|
536
|
-
return this.inStackContext = !1,
|
|
535
|
+
const o = this.parseStacking();
|
|
536
|
+
return this.inStackContext = !1, o;
|
|
537
537
|
}
|
|
538
538
|
case "m":
|
|
539
539
|
case "M":
|
|
540
540
|
if (this.scanner.peek() === "+") {
|
|
541
541
|
this.scanner.consume(1);
|
|
542
|
-
const
|
|
543
|
-
if (
|
|
542
|
+
const o = (u = this.scanner.tail.match(/^[0-9A-Fa-f]{4}/)) == null ? void 0 : u[0];
|
|
543
|
+
if (o) {
|
|
544
544
|
this.scanner.consume(4);
|
|
545
|
-
const
|
|
546
|
-
return i ? [1, i] : [1,
|
|
545
|
+
const g = this.decodeMultiByteChar(o);
|
|
546
|
+
return i ? [1, i] : [1, g];
|
|
547
547
|
}
|
|
548
548
|
this.scanner.consume(-1);
|
|
549
549
|
}
|
|
550
550
|
i += "\\M";
|
|
551
551
|
continue;
|
|
552
|
+
case "U":
|
|
553
|
+
if (this.scanner.peek() === "+") {
|
|
554
|
+
this.scanner.consume(1);
|
|
555
|
+
const o = this.scanner.tail.match(/^[0-9A-Fa-f]{4,8}/);
|
|
556
|
+
if (o) {
|
|
557
|
+
const g = o[0];
|
|
558
|
+
this.scanner.consume(g.length);
|
|
559
|
+
const _ = parseInt(g, 16);
|
|
560
|
+
let f = "";
|
|
561
|
+
try {
|
|
562
|
+
f = String.fromCodePoint(_);
|
|
563
|
+
} catch {
|
|
564
|
+
f = "▯";
|
|
565
|
+
}
|
|
566
|
+
return i ? [1, i] : [1, f];
|
|
567
|
+
}
|
|
568
|
+
this.scanner.consume(-1);
|
|
569
|
+
}
|
|
570
|
+
i += "\\U";
|
|
571
|
+
continue;
|
|
552
572
|
default:
|
|
553
|
-
if (
|
|
573
|
+
if (h)
|
|
554
574
|
try {
|
|
555
|
-
const
|
|
556
|
-
if (this.yieldPropertyCommands &&
|
|
557
|
-
return [9,
|
|
575
|
+
const o = this.parseProperties(h);
|
|
576
|
+
if (this.yieldPropertyCommands && o)
|
|
577
|
+
return [9, o];
|
|
558
578
|
continue;
|
|
559
579
|
} catch {
|
|
560
|
-
const
|
|
580
|
+
const o = this.scanner.tail.slice(
|
|
561
581
|
p,
|
|
562
582
|
this.scanner.currentIndex
|
|
563
583
|
);
|
|
564
|
-
i +=
|
|
584
|
+
i += o;
|
|
565
585
|
}
|
|
566
586
|
}
|
|
567
587
|
continue;
|
|
568
588
|
}
|
|
569
589
|
if (n === "%" && this.scanner.peek(1) === "%") {
|
|
570
|
-
const
|
|
571
|
-
if (
|
|
572
|
-
this.scanner.consume(3), i +=
|
|
590
|
+
const h = this.scanner.peek(2).toLowerCase(), o = v[h];
|
|
591
|
+
if (o) {
|
|
592
|
+
this.scanner.consume(3), i += o;
|
|
573
593
|
continue;
|
|
574
594
|
} else {
|
|
575
595
|
this.scanner.consume(3);
|
|
@@ -588,13 +608,13 @@ class D {
|
|
|
588
608
|
if (i)
|
|
589
609
|
return [1, i];
|
|
590
610
|
if (this.scanner.consume(1), this.yieldPropertyCommands) {
|
|
591
|
-
const
|
|
611
|
+
const h = this.ctxStack.current;
|
|
592
612
|
this.popCtx();
|
|
593
|
-
const
|
|
594
|
-
if (Object.keys(
|
|
613
|
+
const o = this.getPropertyChanges(h, this.ctxStack.current);
|
|
614
|
+
if (Object.keys(o).length > 0)
|
|
595
615
|
return [
|
|
596
616
|
9,
|
|
597
|
-
{ command: void 0, changes:
|
|
617
|
+
{ command: void 0, changes: o, depth: this.ctxStack.depth }
|
|
598
618
|
];
|
|
599
619
|
} else
|
|
600
620
|
this.popCtx();
|
|
@@ -602,17 +622,17 @@ class D {
|
|
|
602
622
|
}
|
|
603
623
|
}
|
|
604
624
|
if (!this.inStackContext && n === "^") {
|
|
605
|
-
const
|
|
606
|
-
if (
|
|
607
|
-
const
|
|
608
|
-
if (this.scanner.consume(2),
|
|
625
|
+
const h = this.scanner.peek(1);
|
|
626
|
+
if (h) {
|
|
627
|
+
const o = h.charCodeAt(0);
|
|
628
|
+
if (this.scanner.consume(2), o === 32)
|
|
609
629
|
i += "^";
|
|
610
630
|
else {
|
|
611
|
-
if (
|
|
631
|
+
if (o === 73)
|
|
612
632
|
return i ? [1, i] : [5, null];
|
|
613
|
-
if (
|
|
633
|
+
if (o === 74)
|
|
614
634
|
return i ? [1, i] : [6, null];
|
|
615
|
-
if (
|
|
635
|
+
if (o === 77)
|
|
616
636
|
continue;
|
|
617
637
|
i += "▯";
|
|
618
638
|
}
|
|
@@ -626,21 +646,21 @@ class D {
|
|
|
626
646
|
for (; ; ) {
|
|
627
647
|
const [i, u] = l.call(this);
|
|
628
648
|
if (i) {
|
|
629
|
-
if (yield new
|
|
649
|
+
if (yield new k(i, this.ctxStack.current.copy(), u), i === 6 && this.resetParagraphParameters) {
|
|
630
650
|
const c = this.ctxStack.current, n = a(c);
|
|
631
|
-
this.yieldPropertyCommands && Object.keys(n).length > 0 && (yield new
|
|
651
|
+
this.yieldPropertyCommands && Object.keys(n).length > 0 && (yield new k(9, c.copy(), {
|
|
632
652
|
command: void 0,
|
|
633
653
|
changes: { paragraph: n },
|
|
634
654
|
depth: this.ctxStack.depth
|
|
635
655
|
}));
|
|
636
656
|
}
|
|
637
|
-
r && (yield new
|
|
657
|
+
r && (yield new k(r, this.ctxStack.current.copy(), null), r = null);
|
|
638
658
|
} else
|
|
639
659
|
break;
|
|
640
660
|
}
|
|
641
661
|
}
|
|
642
662
|
}
|
|
643
|
-
class
|
|
663
|
+
class d {
|
|
644
664
|
/**
|
|
645
665
|
* Create a new text scanner
|
|
646
666
|
* @param text - The text to scan
|
|
@@ -740,7 +760,7 @@ class g {
|
|
|
740
760
|
return t;
|
|
741
761
|
}
|
|
742
762
|
}
|
|
743
|
-
class
|
|
763
|
+
class b {
|
|
744
764
|
// Store as 0xRRGGBB or null
|
|
745
765
|
/**
|
|
746
766
|
* Create a new MTextColor instance.
|
|
@@ -816,7 +836,7 @@ class d {
|
|
|
816
836
|
* @returns A new MTextColor instance with the same color state.
|
|
817
837
|
*/
|
|
818
838
|
copy() {
|
|
819
|
-
const t = new
|
|
839
|
+
const t = new b();
|
|
820
840
|
return t._aci = this._aci, t._rgbValue = this._rgbValue, t;
|
|
821
841
|
}
|
|
822
842
|
/**
|
|
@@ -835,9 +855,9 @@ class d {
|
|
|
835
855
|
return this._aci === t._aci && this._rgbValue === t._rgbValue;
|
|
836
856
|
}
|
|
837
857
|
}
|
|
838
|
-
class
|
|
858
|
+
class m {
|
|
839
859
|
constructor() {
|
|
840
|
-
this._stroke = 0, this.continueStroke = !1, this.color = new
|
|
860
|
+
this._stroke = 0, this.continueStroke = !1, this.color = new b(), this.align = 0, this.fontFace = { family: "", style: "Regular", weight: 400 }, this._capHeight = { value: 1, isRelative: !1 }, this._widthFactor = { value: 1, isRelative: !1 }, this._charTrackingFactor = { value: 1, isRelative: !1 }, this.oblique = 0, this.paragraph = {
|
|
841
861
|
indent: 0,
|
|
842
862
|
left: 0,
|
|
843
863
|
right: 0,
|
|
@@ -919,6 +939,36 @@ class k {
|
|
|
919
939
|
set rgb(t) {
|
|
920
940
|
this.color.rgb = t;
|
|
921
941
|
}
|
|
942
|
+
/**
|
|
943
|
+
* Gets whether the current text should be rendered in italic style.
|
|
944
|
+
* @returns {boolean} True if the font style is 'Italic', otherwise false.
|
|
945
|
+
*/
|
|
946
|
+
get italic() {
|
|
947
|
+
return this.fontFace.style === "Italic";
|
|
948
|
+
}
|
|
949
|
+
/**
|
|
950
|
+
* Sets whether the current text should be rendered in italic style.
|
|
951
|
+
* @param value - If true, sets the font style to 'Italic'; if false, sets it to 'Regular'.
|
|
952
|
+
*/
|
|
953
|
+
set italic(t) {
|
|
954
|
+
this.fontFace.style = t ? "Italic" : "Regular";
|
|
955
|
+
}
|
|
956
|
+
/**
|
|
957
|
+
* Gets whether the current text should be rendered in bold style.
|
|
958
|
+
* This is primarily used for mesh fonts and affects font selection.
|
|
959
|
+
* @returns {boolean} True if the font weight is 700 or higher, otherwise false.
|
|
960
|
+
*/
|
|
961
|
+
get bold() {
|
|
962
|
+
return (this.fontFace.weight || 400) >= 700;
|
|
963
|
+
}
|
|
964
|
+
/**
|
|
965
|
+
* Sets whether the current text should be rendered in bold style.
|
|
966
|
+
* This is primarily used for mesh fonts and affects font selection.
|
|
967
|
+
* @param value - If true, sets the font weight to 700; if false, sets it to 400.
|
|
968
|
+
*/
|
|
969
|
+
set bold(t) {
|
|
970
|
+
this.fontFace.weight = t ? 700 : 400;
|
|
971
|
+
}
|
|
922
972
|
/**
|
|
923
973
|
* Get whether text is underlined
|
|
924
974
|
*/
|
|
@@ -977,11 +1027,11 @@ class k {
|
|
|
977
1027
|
* @returns A new context with the same properties
|
|
978
1028
|
*/
|
|
979
1029
|
copy() {
|
|
980
|
-
const t = new
|
|
1030
|
+
const t = new m();
|
|
981
1031
|
return t._stroke = this._stroke, t.continueStroke = this.continueStroke, t.color = this.color.copy(), t.align = this.align, t.fontFace = { ...this.fontFace }, t._capHeight = { ...this._capHeight }, t._widthFactor = { ...this._widthFactor }, t._charTrackingFactor = { ...this._charTrackingFactor }, t.oblique = this.oblique, t.paragraph = { ...this.paragraph }, t;
|
|
982
1032
|
}
|
|
983
1033
|
}
|
|
984
|
-
class
|
|
1034
|
+
class k {
|
|
985
1035
|
/**
|
|
986
1036
|
* Create a new MText token
|
|
987
1037
|
* @param type - The token type
|
|
@@ -993,19 +1043,19 @@ class f {
|
|
|
993
1043
|
}
|
|
994
1044
|
}
|
|
995
1045
|
export {
|
|
996
|
-
|
|
997
|
-
|
|
998
|
-
|
|
999
|
-
|
|
1046
|
+
b as MTextColor,
|
|
1047
|
+
m as MTextContext,
|
|
1048
|
+
F as MTextLineAlignment,
|
|
1049
|
+
E as MTextParagraphAlignment,
|
|
1000
1050
|
D as MTextParser,
|
|
1001
|
-
|
|
1002
|
-
|
|
1003
|
-
|
|
1004
|
-
|
|
1005
|
-
|
|
1006
|
-
|
|
1007
|
-
|
|
1008
|
-
|
|
1009
|
-
|
|
1051
|
+
R as MTextStroke,
|
|
1052
|
+
k as MTextToken,
|
|
1053
|
+
d as TextScanner,
|
|
1054
|
+
S as TokenType,
|
|
1055
|
+
w as escapeDxfLineEndings,
|
|
1056
|
+
P as getFonts,
|
|
1057
|
+
x as hasInlineFormattingCodes,
|
|
1058
|
+
I as int2rgb,
|
|
1059
|
+
N as rgb2int
|
|
1010
1060
|
};
|
|
1011
1061
|
//# sourceMappingURL=parser.es.js.map
|