bbcode-compiler 0.1.5 → 0.1.6

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 (51) hide show
  1. package/dist/generateHtml.d.ts +1 -1
  2. package/dist/generator/Generator.d.ts +2 -1
  3. package/dist/generator/transforms/Transform.d.ts +2 -1
  4. package/dist/generator/transforms/htmlTransforms.d.ts +2 -1
  5. package/dist/generator/utils/getTagImmediateAttrVal.d.ts +2 -1
  6. package/dist/generator/utils/getTagImmediateText.d.ts +1 -0
  7. package/dist/generator/utils/getWidthHeightAttr.d.ts +2 -1
  8. package/dist/generator/utils/isOrderedList.d.ts +2 -1
  9. package/dist/index.js +1014 -16
  10. package/dist/index.js.map +1 -1
  11. package/dist/index.umd.cjs +1018 -0
  12. package/dist/index.umd.cjs.map +1 -0
  13. package/dist/lexer/Lexer.d.ts +2 -1
  14. package/dist/lexer/Token.d.ts +1 -0
  15. package/dist/parser/AstNode.d.ts +8 -8
  16. package/dist/parser/AstNode.d.ts.map +1 -1
  17. package/dist/parser/Parser.d.ts +2 -1
  18. package/dist/parser/nodeIsType.d.ts +1 -0
  19. package/package.json +20 -19
  20. package/src/parser/AstNode.ts +73 -73
  21. package/src/parser/Parser.ts +103 -103
  22. package/dist/generateHtml.js +0 -13
  23. package/dist/generateHtml.js.map +0 -1
  24. package/dist/generator/Generator.js +0 -54
  25. package/dist/generator/Generator.js.map +0 -1
  26. package/dist/generator/transforms/Transform.js +0 -2
  27. package/dist/generator/transforms/Transform.js.map +0 -1
  28. package/dist/generator/transforms/htmlTransforms.js +0 -198
  29. package/dist/generator/transforms/htmlTransforms.js.map +0 -1
  30. package/dist/generator/utils/getTagImmediateAttrVal.js +0 -19
  31. package/dist/generator/utils/getTagImmediateAttrVal.js.map +0 -1
  32. package/dist/generator/utils/getTagImmediateText.js +0 -28
  33. package/dist/generator/utils/getTagImmediateText.js.map +0 -1
  34. package/dist/generator/utils/getWidthHeightAttr.js +0 -47
  35. package/dist/generator/utils/getWidthHeightAttr.js.map +0 -1
  36. package/dist/generator/utils/isDangerousUrl.js +0 -14
  37. package/dist/generator/utils/isDangerousUrl.js.map +0 -1
  38. package/dist/generator/utils/isOrderedList.js +0 -26
  39. package/dist/generator/utils/isOrderedList.js.map +0 -1
  40. package/dist/lexer/Lexer.js +0 -81
  41. package/dist/lexer/Lexer.js.map +0 -1
  42. package/dist/lexer/Token.js +0 -53
  43. package/dist/lexer/Token.js.map +0 -1
  44. package/dist/lexer/TokenType.js +0 -41
  45. package/dist/lexer/TokenType.js.map +0 -1
  46. package/dist/parser/AstNode.js +0 -263
  47. package/dist/parser/AstNode.js.map +0 -1
  48. package/dist/parser/Parser.js +0 -268
  49. package/dist/parser/Parser.js.map +0 -1
  50. package/dist/parser/nodeIsType.js +0 -4
  51. package/dist/parser/nodeIsType.js.map +0 -1
@@ -1,81 +0,0 @@
1
- import { symbolTable } from './TokenType.js';
2
- export class Lexer {
3
- tokenize(input) {
4
- const tokens = new Array();
5
- const re = /\n|\[\/|\[(\w+|\*)|\]|=|&|<|>|'|"/g;
6
- let offset = 0;
7
- while (true) {
8
- // Match until next symbol
9
- const match = re.exec(input);
10
- if (!match) {
11
- break;
12
- }
13
- // Everything between previous symbol and current symbol is treated as plaintext
14
- //
15
- // [...]plaintext[/...]
16
- // | |
17
- // offset match.index
18
- // (new) offset
19
- //
20
- const length = match.index - offset;
21
- if (length > 0) {
22
- tokens.push({
23
- type: 0 /* TokenType.STR */,
24
- offset,
25
- length,
26
- });
27
- }
28
- offset = match.index;
29
- // Only add BACKSLASH token if it's preceded by L_BRACKET
30
- // In the regex '[/' takes precedence over '['
31
- if (match[0] === '[/') {
32
- tokens.push({
33
- type: 2 /* TokenType.L_BRACKET */,
34
- offset,
35
- length: 1,
36
- });
37
- offset += 1;
38
- tokens.push({
39
- type: 4 /* TokenType.BACKSLASH */,
40
- offset,
41
- length: 1,
42
- });
43
- offset += 1;
44
- }
45
- else if (match[0].startsWith('[')) {
46
- tokens.push({
47
- type: 2 /* TokenType.L_BRACKET */,
48
- offset,
49
- length: 1,
50
- });
51
- offset += 1;
52
- const length = match[0].length - 1;
53
- tokens.push({
54
- type: 0 /* TokenType.STR */,
55
- offset,
56
- length,
57
- });
58
- offset += length;
59
- }
60
- else {
61
- tokens.push({
62
- type: symbolTable[match[0]] ?? 0 /* TokenType.STR */,
63
- offset,
64
- length: 1,
65
- });
66
- offset += 1;
67
- }
68
- }
69
- // Add any leftover non-symbol text
70
- const length = input.length - offset;
71
- if (length > 0) {
72
- tokens.push({
73
- type: 0 /* TokenType.STR */,
74
- offset,
75
- length,
76
- });
77
- }
78
- return tokens;
79
- }
80
- }
81
- //# sourceMappingURL=Lexer.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Lexer.js","sourceRoot":"","sources":["../../src/lexer/Lexer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAa,MAAM,gBAAgB,CAAA;AAGvD,MAAM,OAAO,KAAK;IACd,QAAQ,CAAC,KAAuB;QAC5B,MAAM,MAAM,GAAG,IAAI,KAAK,EAAS,CAAA;QAEjC,MAAM,EAAE,GAAG,oCAAoC,CAAA;QAC/C,IAAI,MAAM,GAAG,CAAC,CAAA;QAEd,OAAO,IAAI,EAAE,CAAC;YACV,0BAA0B;YAC1B,MAAM,KAAK,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;YAC5B,IAAI,CAAC,KAAK,EAAE,CAAC;gBACT,MAAK;YACT,CAAC;YAED,gFAAgF;YAChF,EAAE;YACF,wBAAwB;YACxB,mBAAmB;YACnB,6BAA6B;YAC7B,8BAA8B;YAC9B,EAAE;YACF,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,GAAG,MAAM,CAAA;YACnC,IAAI,MAAM,GAAG,CAAC,EAAE,CAAC;gBACb,MAAM,CAAC,IAAI,CAAC;oBACR,IAAI,uBAAe;oBACnB,MAAM;oBACN,MAAM;iBACT,CAAC,CAAA;YACN,CAAC;YAED,MAAM,GAAG,KAAK,CAAC,KAAK,CAAA;YAEpB,yDAAyD;YACzD,8CAA8C;YAC9C,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;gBACpB,MAAM,CAAC,IAAI,CAAC;oBACR,IAAI,6BAAqB;oBACzB,MAAM;oBACN,MAAM,EAAE,CAAC;iBACZ,CAAC,CAAA;gBACF,MAAM,IAAI,CAAC,CAAA;gBAEX,MAAM,CAAC,IAAI,CAAC;oBACR,IAAI,6BAAqB;oBACzB,MAAM;oBACN,MAAM,EAAE,CAAC;iBACZ,CAAC,CAAA;gBACF,MAAM,IAAI,CAAC,CAAA;YACf,CAAC;iBAAM,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;gBAClC,MAAM,CAAC,IAAI,CAAC;oBACR,IAAI,6BAAqB;oBACzB,MAAM;oBACN,MAAM,EAAE,CAAC;iBACZ,CAAC,CAAA;gBACF,MAAM,IAAI,CAAC,CAAA;gBAEX,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAA;gBAClC,MAAM,CAAC,IAAI,CAAC;oBACR,IAAI,uBAAe;oBACnB,MAAM;oBACN,MAAM;iBACT,CAAC,CAAA;gBACF,MAAM,IAAI,MAAM,CAAA;YACpB,CAAC;iBAAM,CAAC;gBACJ,MAAM,CAAC,IAAI,CAAC;oBACR,IAAI,EAAE,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,yBAAiB;oBAC5C,MAAM;oBACN,MAAM,EAAE,CAAC;iBACZ,CAAC,CAAA;gBACF,MAAM,IAAI,CAAC,CAAA;YACf,CAAC;QACL,CAAC;QAED,mCAAmC;QACnC,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,GAAG,MAAM,CAAA;QACpC,IAAI,MAAM,GAAG,CAAC,EAAE,CAAC;YACb,MAAM,CAAC,IAAI,CAAC;gBACR,IAAI,uBAAe;gBACnB,MAAM;gBACN,MAAM;aACT,CAAC,CAAA;QACN,CAAC;QAED,OAAO,MAAM,CAAA;IACjB,CAAC;CACJ"}
@@ -1,53 +0,0 @@
1
- export function stringifyTokens(ogText, tokens) {
2
- let s = '';
3
- for (const token of tokens) {
4
- switch (token.type) {
5
- case 0 /* TokenType.STR */: {
6
- s += ogText.substring(token.offset, token.offset + token.length);
7
- break;
8
- }
9
- case 1 /* TokenType.LINEBREAK */: {
10
- s += '\n';
11
- break;
12
- }
13
- case 2 /* TokenType.L_BRACKET */: {
14
- s += '[';
15
- break;
16
- }
17
- case 3 /* TokenType.R_BRACKET */: {
18
- s += ']';
19
- break;
20
- }
21
- case 4 /* TokenType.BACKSLASH */: {
22
- s += '/';
23
- break;
24
- }
25
- case 5 /* TokenType.EQUALS */: {
26
- s += '=';
27
- break;
28
- }
29
- case 6 /* TokenType.XSS_AMP */: {
30
- s += '&amp;';
31
- break;
32
- }
33
- case 7 /* TokenType.XSS_LT */: {
34
- s += '&lt;';
35
- break;
36
- }
37
- case 8 /* TokenType.XSS_GT */: {
38
- s += '&gt;';
39
- break;
40
- }
41
- case 9 /* TokenType.XSS_D_QUOTE */: {
42
- s += '&quot;';
43
- break;
44
- }
45
- case 10 /* TokenType.XSS_S_QUOTE */: {
46
- s += '&#x27;';
47
- break;
48
- }
49
- }
50
- }
51
- return s;
52
- }
53
- //# sourceMappingURL=Token.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Token.js","sourceRoot":"","sources":["../../src/lexer/Token.ts"],"names":[],"mappings":"AAQA,MAAM,UAAU,eAAe,CAAC,MAAc,EAAE,MAA4B;IACxE,IAAI,CAAC,GAAG,EAAE,CAAA;IAEV,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QACzB,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;YACjB,0BAAkB,CAAC,CAAC,CAAC;gBACjB,CAAC,IAAI,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,CAAA;gBAChE,MAAK;YACT,CAAC;YACD,gCAAwB,CAAC,CAAC,CAAC;gBACvB,CAAC,IAAI,IAAI,CAAA;gBACT,MAAK;YACT,CAAC;YAED,gCAAwB,CAAC,CAAC,CAAC;gBACvB,CAAC,IAAI,GAAG,CAAA;gBACR,MAAK;YACT,CAAC;YACD,gCAAwB,CAAC,CAAC,CAAC;gBACvB,CAAC,IAAI,GAAG,CAAA;gBACR,MAAK;YACT,CAAC;YACD,gCAAwB,CAAC,CAAC,CAAC;gBACvB,CAAC,IAAI,GAAG,CAAA;gBACR,MAAK;YACT,CAAC;YACD,6BAAqB,CAAC,CAAC,CAAC;gBACpB,CAAC,IAAI,GAAG,CAAA;gBACR,MAAK;YACT,CAAC;YAED,8BAAsB,CAAC,CAAC,CAAC;gBACrB,CAAC,IAAI,OAAO,CAAA;gBACZ,MAAK;YACT,CAAC;YACD,6BAAqB,CAAC,CAAC,CAAC;gBACpB,CAAC,IAAI,MAAM,CAAA;gBACX,MAAK;YACT,CAAC;YACD,6BAAqB,CAAC,CAAC,CAAC;gBACpB,CAAC,IAAI,MAAM,CAAA;gBACX,MAAK;YACT,CAAC;YACD,kCAA0B,CAAC,CAAC,CAAC;gBACzB,CAAC,IAAI,QAAQ,CAAA;gBACb,MAAK;YACT,CAAC;YACD,mCAA0B,CAAC,CAAC,CAAC;gBACzB,CAAC,IAAI,QAAQ,CAAA;gBACb,MAAK;YACT,CAAC;QACL,CAAC;IACL,CAAC;IAED,OAAO,CAAC,CAAA;AACZ,CAAC"}
@@ -1,41 +0,0 @@
1
- export function tokenTypeToString(tokenType) {
2
- switch (tokenType) {
3
- case 0 /* TokenType.STR */: return 'STR';
4
- case 1 /* TokenType.LINEBREAK */: return 'LINEBREAK';
5
- case 2 /* TokenType.L_BRACKET */: return 'L_BRACKET';
6
- case 3 /* TokenType.R_BRACKET */: return 'R_BRACKET';
7
- case 4 /* TokenType.BACKSLASH */: return 'BACKSLASH';
8
- case 5 /* TokenType.EQUALS */: return 'EQUALS';
9
- case 6 /* TokenType.XSS_AMP */: return 'XSS_AMP';
10
- case 7 /* TokenType.XSS_LT */: return 'XSS_LT';
11
- case 8 /* TokenType.XSS_GT */: return 'XSS_GT';
12
- case 9 /* TokenType.XSS_D_QUOTE */: return 'XSS_D_QUOTE';
13
- case 10 /* TokenType.XSS_S_QUOTE */: return 'XSS_S_QUOTE';
14
- }
15
- }
16
- export function isStringToken(tokenType) {
17
- switch (tokenType) {
18
- case 6 /* TokenType.XSS_AMP */:
19
- case 7 /* TokenType.XSS_LT */:
20
- case 8 /* TokenType.XSS_GT */:
21
- case 9 /* TokenType.XSS_D_QUOTE */:
22
- case 10 /* TokenType.XSS_S_QUOTE */:
23
- case 0 /* TokenType.STR */: {
24
- return true;
25
- }
26
- }
27
- return false;
28
- }
29
- export const symbolTable = {
30
- '\n': 1 /* TokenType.LINEBREAK */,
31
- '[': 2 /* TokenType.L_BRACKET */,
32
- ']': 3 /* TokenType.R_BRACKET */,
33
- '/': 4 /* TokenType.BACKSLASH */,
34
- '=': 5 /* TokenType.EQUALS */,
35
- '&': 6 /* TokenType.XSS_AMP */,
36
- '<': 7 /* TokenType.XSS_LT */,
37
- '>': 8 /* TokenType.XSS_GT */,
38
- '"': 9 /* TokenType.XSS_D_QUOTE */,
39
- "'": 10 /* TokenType.XSS_S_QUOTE */,
40
- };
41
- //# sourceMappingURL=TokenType.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"TokenType.js","sourceRoot":"","sources":["../../src/lexer/TokenType.ts"],"names":[],"mappings":"AAkBA,MAAM,UAAU,iBAAiB,CAAC,SAAoB;IAClD,QAAQ,SAAS,EAAE,CAAC;QAChB,0BAAkB,CAAC,CAAC,OAAO,KAAK,CAAA;QAChC,gCAAwB,CAAC,CAAC,OAAO,WAAW,CAAA;QAE5C,gCAAwB,CAAC,CAAC,OAAO,WAAW,CAAA;QAC5C,gCAAwB,CAAC,CAAC,OAAO,WAAW,CAAA;QAC5C,gCAAwB,CAAC,CAAC,OAAO,WAAW,CAAA;QAC5C,6BAAqB,CAAC,CAAC,OAAO,QAAQ,CAAA;QAEtC,8BAAsB,CAAC,CAAC,OAAO,SAAS,CAAA;QACxC,6BAAqB,CAAC,CAAC,OAAO,QAAQ,CAAA;QACtC,6BAAqB,CAAC,CAAC,OAAO,QAAQ,CAAA;QACtC,kCAA0B,CAAC,CAAC,OAAO,aAAa,CAAA;QAChD,mCAA0B,CAAC,CAAC,OAAO,aAAa,CAAA;IACpD,CAAC;AACL,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,SAAoB;IAC9C,QAAQ,SAAS,EAAE,CAAC;QAChB,+BAAuB;QACvB,8BAAsB;QACtB,8BAAsB;QACtB,mCAA2B;QAC3B,oCAA2B;QAC3B,0BAAkB,CAAC,CAAC,CAAC;YACjB,OAAO,IAAI,CAAA;QACf,CAAC;IACL,CAAC;IAED,OAAO,KAAK,CAAA;AAChB,CAAC;AAED,MAAM,CAAC,MAAM,WAAW,GAA0C;IAC9D,IAAI,6BAAqB;IAEzB,GAAG,6BAAqB;IACxB,GAAG,6BAAqB;IACxB,GAAG,6BAAqB;IACxB,GAAG,0BAAkB;IAErB,GAAG,2BAAmB;IACtB,GAAG,0BAAkB;IACrB,GAAG,0BAAkB;IACrB,GAAG,+BAAuB;IAC1B,GAAG,gCAAuB;CAC7B,CAAA"}
@@ -1,263 +0,0 @@
1
- /**
2
-
3
- Haven't formally verified this grammar but it should be LL(2)
4
-
5
- The root's intermediate state has StartTag/EndTag because it's easier to first parse them as independant nodes
6
- than to parse a StartTag and find the matching EndTag since we can only lookahead by 1 token
7
-
8
- Trying to lookahead by 4 tokens after each advancement to determine the end of the sub-root will greatly affect performance
9
- 1 "["
10
- 2 "/"
11
- 3 "LABEL"
12
- 4 "]"
13
-
14
- ---
15
-
16
- Root <- (Text | Linebreak | Tag)*
17
-
18
- Text <-
19
- | {XSS Characters}.
20
- | STR.
21
-
22
- Linebreak <-
23
- | LINEBREAK.
24
-
25
- Tag <- StartTag Root EndTag
26
- StartTag <- L_BRACKET Text Attr* R_BRACKET
27
- EndTag <- L_BRACKET BACKSLASH Text R_BRACKET
28
-
29
- Attr <-
30
- | STR EQUALS STR
31
- | EQUALS STR
32
- | STR
33
-
34
- */
35
- import { nodeIsType } from './nodeIsType.js';
36
- export function nodeTypeToString(nodeType) {
37
- switch (nodeType) {
38
- case 0 /* AstNodeType.RootNode */: return 'RootNode';
39
- case 1 /* AstNodeType.TextNode */: return 'TextNode';
40
- case 2 /* AstNodeType.LinebreakNode */: return 'LinebreakNode';
41
- case 3 /* AstNodeType.TagNode */: return 'TagNode';
42
- case 4 /* AstNodeType.StartTagNode */: return 'StartTagNode';
43
- case 5 /* AstNodeType.EndTagNode */: return 'EndTagNode';
44
- case 6 /* AstNodeType.AttrNode */: return 'AttrNode';
45
- }
46
- }
47
- export class AstNode {
48
- // eslint-disable-next-line no-use-before-define
49
- children;
50
- constructor(children = []) {
51
- this.children = children;
52
- }
53
- addChild(node) {
54
- this.children.push(node);
55
- }
56
- isValid() {
57
- for (const child of this.children) {
58
- if (!child.isValid()) {
59
- return false;
60
- }
61
- }
62
- return true;
63
- }
64
- toShortString() {
65
- return nodeTypeToString(this.nodeType);
66
- }
67
- // For debugging purposes only
68
- // Pretty-prints AST
69
- toString(depth = 0) {
70
- let s = ' '.repeat(depth * 2) + this.toShortString();
71
- for (const child of this.children) {
72
- s += '\n' + child.toString(depth + 1);
73
- }
74
- return s;
75
- }
76
- }
77
- // ----------------------------------------------------------------------------
78
- // Root
79
- // ----------------------------------------------------------------------------
80
- export class RootNode extends AstNode {
81
- nodeType = 0 /* AstNodeType.RootNode */;
82
- isValid() {
83
- for (const child of this.children) {
84
- if (child.nodeType !== 3 /* AstNodeType.TagNode */ &&
85
- child.nodeType !== 1 /* AstNodeType.TextNode */ &&
86
- child.nodeType !== 2 /* AstNodeType.LinebreakNode */) {
87
- return false;
88
- }
89
- }
90
- return super.isValid() && this.children.length > 0;
91
- }
92
- }
93
- // ----------------------------------------------------------------------------
94
- // Text
95
- // ----------------------------------------------------------------------------
96
- export class TextNode extends AstNode {
97
- nodeType = 1 /* AstNodeType.TextNode */;
98
- str;
99
- constructor(str) {
100
- super();
101
- this.str = str;
102
- }
103
- isValid() {
104
- return super.isValid() && this.children.length === 0;
105
- }
106
- toShortString() {
107
- return `${super.toShortString()} "${this.str}"`;
108
- }
109
- }
110
- export class LinebreakNode extends AstNode {
111
- nodeType = 2 /* AstNodeType.LinebreakNode */;
112
- toShortString() {
113
- return `${super.toShortString()} "\\n"`;
114
- }
115
- }
116
- // ----------------------------------------------------------------------------
117
- // Tag
118
- // ----------------------------------------------------------------------------
119
- export class StartTagNode extends AstNode {
120
- nodeType = 4 /* AstNodeType.StartTagNode */;
121
- tagName;
122
- ogTag;
123
- constructor(tagName, ogTag, attrNodes = []) {
124
- super(attrNodes);
125
- this.tagName = tagName.toLowerCase();
126
- this.ogTag = ogTag;
127
- }
128
- isValid() {
129
- for (const child of this.children) {
130
- if (child.nodeType !== 6 /* AstNodeType.AttrNode */) {
131
- return false;
132
- }
133
- }
134
- return super.isValid();
135
- }
136
- toShortString() {
137
- return `${super.toShortString()} ${this.ogTag}`;
138
- }
139
- }
140
- export class EndTagNode extends AstNode {
141
- nodeType = 5 /* AstNodeType.EndTagNode */;
142
- tagName;
143
- ogTag;
144
- constructor(tagName, ogTag) {
145
- super();
146
- this.tagName = tagName;
147
- this.ogTag = ogTag;
148
- }
149
- isValid() {
150
- return super.isValid() && this.children.length === 0;
151
- }
152
- toShortString() {
153
- return `${super.toShortString()} ${this.ogTag}`;
154
- }
155
- }
156
- export class TagNode extends AstNode {
157
- nodeType = 3 /* AstNodeType.TagNode */;
158
- _startTag;
159
- _endTag;
160
- constructor(startTag, endTag) {
161
- super();
162
- this._startTag = startTag;
163
- this._endTag = endTag;
164
- }
165
- get tagName() {
166
- return this._startTag.tagName;
167
- }
168
- get attributes() {
169
- return this._startTag.children;
170
- }
171
- get ogStartTag() {
172
- return this._startTag.ogTag;
173
- }
174
- get ogEndTag() {
175
- if (!this._endTag) {
176
- return '';
177
- }
178
- if (nodeIsType(this._endTag, 2 /* AstNodeType.LinebreakNode */)) {
179
- return '\n';
180
- }
181
- else {
182
- return this._endTag.ogTag;
183
- }
184
- }
185
- isValid() {
186
- if (this._endTag && nodeIsType(this._endTag, 5 /* AstNodeType.EndTagNode */) && this._startTag.tagName !== this._endTag.tagName) {
187
- return false;
188
- }
189
- if (this.children.length === 1 && this.children[0].nodeType !== 0 /* AstNodeType.RootNode */) {
190
- return false;
191
- }
192
- if (this.children.length > 2) {
193
- return false;
194
- }
195
- return super.isValid() && this._startTag.isValid() && (this._endTag?.isValid() ?? true);
196
- }
197
- toString(depth = 0) {
198
- let s = ' '.repeat(depth * 2) + this.toShortString() + ` [${this.tagName}]`;
199
- for (const attrNode of this._startTag.children) {
200
- s += '\n' + attrNode.toString(depth + 1);
201
- }
202
- for (const child of this.children) {
203
- s += '\n' + child.toString(depth + 1);
204
- }
205
- return s;
206
- }
207
- }
208
- // ----------------------------------------------------------------------------
209
- // Attr
210
- // ----------------------------------------------------------------------------
211
- export class AttrNode extends AstNode {
212
- nodeType = 6 /* AstNodeType.AttrNode */;
213
- static DEFAULT_KEY = 'default';
214
- get key() {
215
- switch (this.children.length) {
216
- case 1: {
217
- return AttrNode.DEFAULT_KEY;
218
- }
219
- case 2: {
220
- if (!nodeIsType(this.children[0], 1 /* AstNodeType.TextNode */)) {
221
- throw new Error('Invalid TextNode');
222
- }
223
- return this.children[0].str.trim();
224
- }
225
- }
226
- throw new Error('Invalid AttrNode');
227
- }
228
- get val() {
229
- switch (this.children.length) {
230
- case 1: {
231
- if (!nodeIsType(this.children[0], 1 /* AstNodeType.TextNode */)) {
232
- throw new Error('Invalid TextNode');
233
- }
234
- return this.children[0].str.trim();
235
- }
236
- case 2: {
237
- if (!nodeIsType(this.children[1], 1 /* AstNodeType.TextNode */)) {
238
- throw new Error('Invalid TextNode');
239
- }
240
- return this.children[1].str.trim();
241
- }
242
- }
243
- throw new Error('Invalid AttrNode');
244
- }
245
- isValid() {
246
- return super.isValid() && (this.children.length >= 1 && this.children.length <= 2);
247
- }
248
- toShortString() {
249
- let s = super.toShortString();
250
- switch (this.children.length) {
251
- case 1: {
252
- s += ` VAL="${this.val}"`;
253
- break;
254
- }
255
- case 2: {
256
- s += ` KEY="${this.key}" VAL="${this.val}"`;
257
- break;
258
- }
259
- }
260
- return s;
261
- }
262
- }
263
- //# sourceMappingURL=AstNode.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"AstNode.js","sourceRoot":"","sources":["../../src/parser/AstNode.ts"],"names":[],"mappings":"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"}