bbcode-compiler 0.1.4 → 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 (52) 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/Parser.d.ts.map +1 -1
  19. package/dist/parser/nodeIsType.d.ts +1 -0
  20. package/package.json +23 -22
  21. package/src/parser/AstNode.ts +73 -73
  22. package/src/parser/Parser.ts +113 -110
  23. package/dist/generateHtml.js +0 -13
  24. package/dist/generateHtml.js.map +0 -1
  25. package/dist/generator/Generator.js +0 -54
  26. package/dist/generator/Generator.js.map +0 -1
  27. package/dist/generator/transforms/Transform.js +0 -2
  28. package/dist/generator/transforms/Transform.js.map +0 -1
  29. package/dist/generator/transforms/htmlTransforms.js +0 -198
  30. package/dist/generator/transforms/htmlTransforms.js.map +0 -1
  31. package/dist/generator/utils/getTagImmediateAttrVal.js +0 -19
  32. package/dist/generator/utils/getTagImmediateAttrVal.js.map +0 -1
  33. package/dist/generator/utils/getTagImmediateText.js +0 -28
  34. package/dist/generator/utils/getTagImmediateText.js.map +0 -1
  35. package/dist/generator/utils/getWidthHeightAttr.js +0 -47
  36. package/dist/generator/utils/getWidthHeightAttr.js.map +0 -1
  37. package/dist/generator/utils/isDangerousUrl.js +0 -14
  38. package/dist/generator/utils/isDangerousUrl.js.map +0 -1
  39. package/dist/generator/utils/isOrderedList.js +0 -26
  40. package/dist/generator/utils/isOrderedList.js.map +0 -1
  41. package/dist/lexer/Lexer.js +0 -81
  42. package/dist/lexer/Lexer.js.map +0 -1
  43. package/dist/lexer/Token.js +0 -53
  44. package/dist/lexer/Token.js.map +0 -1
  45. package/dist/lexer/TokenType.js +0 -41
  46. package/dist/lexer/TokenType.js.map +0 -1
  47. package/dist/parser/AstNode.js +0 -263
  48. package/dist/parser/AstNode.js.map +0 -1
  49. package/dist/parser/Parser.js +0 -265
  50. package/dist/parser/Parser.js.map +0 -1
  51. package/dist/parser/nodeIsType.js +0 -4
  52. package/dist/parser/nodeIsType.js.map +0 -1
@@ -1,26 +0,0 @@
1
- /**
2
- * Determines if the StartTag has an attribute of "1" to indicate that it's an ordered list
3
- *
4
- * [list=1]
5
- *
6
- * TagNode [list]
7
- * AttrNode VAL="1"
8
- * TextNode "1"
9
- * RootNode
10
- * TagNode [*]
11
- * RootNode
12
- * TextNode "Entry 1"
13
- * TagNode [*]
14
- * RootNode
15
- * TextNode "Entry 2"
16
- */
17
- export function isOrderedList(node) {
18
- for (const child of node.attributes) {
19
- const val = child.val;
20
- if (val === '1') {
21
- return true;
22
- }
23
- }
24
- return false;
25
- }
26
- //# sourceMappingURL=isOrderedList.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"isOrderedList.js","sourceRoot":"","sources":["../../../src/generator/utils/isOrderedList.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,aAAa,CAAC,IAAa;IACvC,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,UAAU,EAAE;QACjC,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,CAAA;QACrB,IAAI,GAAG,KAAK,GAAG,EAAE;YACb,OAAO,IAAI,CAAA;SACd;KACJ;IAED,OAAO,KAAK,CAAA;AAChB,CAAC"}
@@ -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;YACT,0BAA0B;YAC1B,MAAM,KAAK,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;YAC5B,IAAI,CAAC,KAAK,EAAE;gBACR,MAAK;aACR;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;gBACZ,MAAM,CAAC,IAAI,CAAC;oBACR,IAAI,uBAAe;oBACnB,MAAM;oBACN,MAAM;iBACT,CAAC,CAAA;aACL;YAED,MAAM,GAAG,KAAK,CAAC,KAAK,CAAA;YAEpB,yDAAyD;YACzD,8CAA8C;YAC9C,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE;gBACnB,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;aACd;iBAAM,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE;gBACjC,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;aACnB;iBAAM;gBACH,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;aACd;SACJ;QAED,mCAAmC;QACnC,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,GAAG,MAAM,CAAA;QACpC,IAAI,MAAM,GAAG,CAAC,EAAE;YACZ,MAAM,CAAC,IAAI,CAAC;gBACR,IAAI,uBAAe;gBACnB,MAAM;gBACN,MAAM;aACT,CAAC,CAAA;SACL;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;QACxB,QAAQ,KAAK,CAAC,IAAI,EAAE;YAChB,0BAAkB,CAAC,CAAC;gBAChB,CAAC,IAAI,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,CAAA;gBAChE,MAAK;aACR;YACD,gCAAwB,CAAC,CAAC;gBACtB,CAAC,IAAI,IAAI,CAAA;gBACT,MAAK;aACR;YAED,gCAAwB,CAAC,CAAC;gBACtB,CAAC,IAAI,GAAG,CAAA;gBACR,MAAK;aACR;YACD,gCAAwB,CAAC,CAAC;gBACtB,CAAC,IAAI,GAAG,CAAA;gBACR,MAAK;aACR;YACD,gCAAwB,CAAC,CAAC;gBACtB,CAAC,IAAI,GAAG,CAAA;gBACR,MAAK;aACR;YACD,6BAAqB,CAAC,CAAC;gBACnB,CAAC,IAAI,GAAG,CAAA;gBACR,MAAK;aACR;YAED,8BAAsB,CAAC,CAAC;gBACpB,CAAC,IAAI,OAAO,CAAA;gBACZ,MAAK;aACR;YACD,6BAAqB,CAAC,CAAC;gBACnB,CAAC,IAAI,MAAM,CAAA;gBACX,MAAK;aACR;YACD,6BAAqB,CAAC,CAAC;gBACnB,CAAC,IAAI,MAAM,CAAA;gBACX,MAAK;aACR;YACD,kCAA0B,CAAC,CAAC;gBACxB,CAAC,IAAI,QAAQ,CAAA;gBACb,MAAK;aACR;YACD,mCAA0B,CAAC,CAAC;gBACxB,CAAC,IAAI,QAAQ,CAAA;gBACb,MAAK;aACR;SACJ;KACJ;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;QACf,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;KACnD;AACL,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,SAAoB;IAC9C,QAAQ,SAAS,EAAE;QACf,+BAAuB;QACvB,8BAAsB;QACtB,8BAAsB;QACtB,mCAA2B;QAC3B,oCAA2B;QAC3B,0BAAkB,CAAC,CAAC;YAChB,OAAO,IAAI,CAAA;SACd;KACJ;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":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAiCE;AAEF,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAgB5C,MAAM,UAAU,gBAAgB,CAAC,QAAqB;IAClD,QAAQ,QAAQ,EAAE;QACd,iCAAyB,CAAC,CAAC,OAAO,UAAU,CAAA;QAC5C,iCAAyB,CAAC,CAAC,OAAO,UAAU,CAAA;QAC5C,sCAA8B,CAAC,CAAC,OAAO,eAAe,CAAA;QACtD,gCAAwB,CAAC,CAAC,OAAO,SAAS,CAAA;QAC1C,qCAA6B,CAAC,CAAC,OAAO,cAAc,CAAA;QACpD,mCAA2B,CAAC,CAAC,OAAO,YAAY,CAAA;QAChD,iCAAyB,CAAC,CAAC,OAAO,UAAU,CAAA;KAC/C;AACL,CAAC;AAED,MAAM,OAAgB,OAAO;IAGzB,gDAAgD;IACvC,QAAQ,CAAgB;IAEjC,YAAY,WAA2B,EAAE;QACrC,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAA;IAC5B,CAAC;IAED,QAAQ,CAAC,IAAa;QAClB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IAC5B,CAAC;IAED,OAAO;QACH,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,QAAQ,EAAE;YAC/B,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE;gBAClB,OAAO,KAAK,CAAA;aACf;SACJ;QAED,OAAO,IAAI,CAAA;IACf,CAAC;IAED,aAAa;QACT,OAAO,gBAAgB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;IAC1C,CAAC;IAED,8BAA8B;IAC9B,oBAAoB;IACpB,QAAQ,CAAC,KAAK,GAAG,CAAC;QACd,IAAI,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,aAAa,EAAE,CAAA;QAEpD,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,QAAQ,EAAE;YAC/B,CAAC,IAAI,IAAI,GAAG,KAAK,CAAC,QAAQ,CAAC,KAAK,GAAG,CAAC,CAAC,CAAA;SACxC;QAED,OAAO,CAAC,CAAA;IACZ,CAAC;CACJ;AAED,+EAA+E;AAC/E,OAAO;AACP,+EAA+E;AAE/E,MAAM,OAAO,QAAS,SAAQ,OAAO;IACxB,QAAQ,gCAAuB;IAE/B,OAAO;QACZ,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,QAAQ,EAAE;YAC/B,IAAI,KAAK,CAAC,QAAQ,gCAAwB;gBACtC,KAAK,CAAC,QAAQ,iCAAyB;gBACvC,KAAK,CAAC,QAAQ,sCAA8B,EAAE;gBAC9C,OAAO,KAAK,CAAA;aACf;SACJ;QAED,OAAO,KAAK,CAAC,OAAO,EAAE,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAA;IACtD,CAAC;CACJ;AAED,+EAA+E;AAC/E,OAAO;AACP,+EAA+E;AAE/E,MAAM,OAAO,QAAS,SAAQ,OAAO;IACxB,QAAQ,gCAAuB;IAC/B,GAAG,CAAQ;IAEpB,YAAY,GAAW;QACnB,KAAK,EAAE,CAAA;QACP,IAAI,CAAC,GAAG,GAAG,GAAG,CAAA;IAClB,CAAC;IAEQ,OAAO;QACZ,OAAO,KAAK,CAAC,OAAO,EAAE,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,CAAA;IACxD,CAAC;IAEQ,aAAa;QAClB,OAAO,GAAG,KAAK,CAAC,aAAa,EAAE,KAAK,IAAI,CAAC,GAAG,GAAG,CAAA;IACnD,CAAC;CACJ;AAED,MAAM,OAAO,aAAc,SAAQ,OAAO;IAC7B,QAAQ,qCAA4B;IAEpC,aAAa;QAClB,OAAO,GAAG,KAAK,CAAC,aAAa,EAAE,QAAQ,CAAA;IAC3C,CAAC;CACJ;AAED,+EAA+E;AAC/E,MAAM;AACN,+EAA+E;AAE/E,MAAM,OAAO,YAAa,SAAQ,OAAO;IAC5B,QAAQ,oCAA2B;IACnC,OAAO,CAAQ;IACf,KAAK,CAAQ;IAEtB,YAAY,OAAe,EAAE,KAAa,EAAE,YAA6B,EAAE;QACvE,KAAK,CAAC,SAAS,CAAC,CAAA;QAChB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,WAAW,EAAE,CAAA;QACpC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAA;IACtB,CAAC;IAEQ,OAAO;QACZ,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,QAAQ,EAAE;YAC/B,IAAI,KAAK,CAAC,QAAQ,iCAAyB,EAAE;gBACzC,OAAO,KAAK,CAAA;aACf;SACJ;QAED,OAAO,KAAK,CAAC,OAAO,EAAE,CAAA;IAC1B,CAAC;IAEQ,aAAa;QAClB,OAAO,GAAG,KAAK,CAAC,aAAa,EAAE,IAAI,IAAI,CAAC,KAAK,EAAE,CAAA;IACnD,CAAC;CACJ;AAED,MAAM,OAAO,UAAW,SAAQ,OAAO;IAC1B,QAAQ,kCAAyB;IACjC,OAAO,CAAQ;IACf,KAAK,CAAQ;IAEtB,YAAY,OAAe,EAAE,KAAa;QACtC,KAAK,EAAE,CAAA;QACP,IAAI,CAAC,OAAO,GAAG,OAAO,CAAA;QACtB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAA;IACtB,CAAC;IAEQ,OAAO;QACZ,OAAO,KAAK,CAAC,OAAO,EAAE,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,CAAA;IACxD,CAAC;IAEQ,aAAa;QAClB,OAAO,GAAG,KAAK,CAAC,aAAa,EAAE,IAAI,IAAI,CAAC,KAAK,EAAE,CAAA;IACnD,CAAC;CACJ;AAED,MAAM,OAAO,OAAQ,SAAQ,OAAO;IACvB,QAAQ,+BAAsB;IACtB,SAAS,CAAc;IACvB,OAAO,CAA6B;IAErD,YAAY,QAAsB,EAAE,MAAmC;QACnE,KAAK,EAAE,CAAA;QACP,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAA;QACzB,IAAI,CAAC,OAAO,GAAG,MAAM,CAAA;IACzB,CAAC;IAED,IAAI,OAAO;QACP,OAAO,IAAI,CAAC,SAAS,CAAC,OAAO,CAAA;IACjC,CAAC;IAED,IAAI,UAAU;QACV,OAAO,IAAI,CAAC,SAAS,CAAC,QAA2B,CAAA;IACrD,CAAC;IAED,IAAI,UAAU;QACV,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAA;IAC/B,CAAC;IAED,IAAI,QAAQ;QACR,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;YACf,OAAO,EAAE,CAAA;SACZ;QAED,IAAI,UAAU,CAAC,IAAI,CAAC,OAAO,oCAA4B,EAAE;YACrD,OAAO,IAAI,CAAA;SACd;aAAM;YACH,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,CAAA;SAC5B;IACL,CAAC;IAEQ,OAAO;QACZ,IAAI,IAAI,CAAC,OAAO,IAAI,UAAU,CAAC,IAAI,CAAC,OAAO,iCAAyB,IAAI,IAAI,CAAC,SAAS,CAAC,OAAO,KAAK,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE;YACrH,OAAO,KAAK,CAAA;SACf;QAED,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,iCAAyB,EAAE;YAClF,OAAO,KAAK,CAAA;SACf;QAED,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;YAC1B,OAAO,KAAK,CAAA;SACf;QAED,OAAO,KAAK,CAAC,OAAO,EAAE,IAAI,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,IAAI,CAAC,CAAA;IAC3F,CAAC;IAEQ,QAAQ,CAAC,KAAK,GAAG,CAAC;QACvB,IAAI,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,aAAa,EAAE,GAAG,KAAK,IAAI,CAAC,OAAO,GAAG,CAAA;QAE3E,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE;YAC5C,CAAC,IAAI,IAAI,GAAG,QAAQ,CAAC,QAAQ,CAAC,KAAK,GAAG,CAAC,CAAC,CAAA;SAC3C;QAED,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,QAAQ,EAAE;YAC/B,CAAC,IAAI,IAAI,GAAG,KAAK,CAAC,QAAQ,CAAC,KAAK,GAAG,CAAC,CAAC,CAAA;SACxC;QAED,OAAO,CAAC,CAAA;IACZ,CAAC;CACJ;AAED,+EAA+E;AAC/E,OAAO;AACP,+EAA+E;AAE/E,MAAM,OAAO,QAAS,SAAQ,OAAO;IACxB,QAAQ,gCAAuB;IAExC,MAAM,CAAU,WAAW,GAAG,SAAS,CAAA;IAEvC,IAAI,GAAG;QACH,QAAQ,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE;YAC1B,KAAK,CAAC,CAAC,CAAC;gBACJ,OAAO,QAAQ,CAAC,WAAW,CAAA;aAC9B;YACD,KAAK,CAAC,CAAC,CAAC;gBACJ,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,+BAAuB,EAAE;oBACrD,MAAM,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAA;iBACtC;gBAED,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,CAAA;aACrC;SACJ;QAED,MAAM,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAA;IACvC,CAAC;IAED,IAAI,GAAG;QACH,QAAQ,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE;YAC1B,KAAK,CAAC,CAAC,CAAC;gBACJ,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,+BAAuB,EAAE;oBACrD,MAAM,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAA;iBACtC;gBAED,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,CAAA;aACrC;YACD,KAAK,CAAC,CAAC,CAAC;gBACJ,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,+BAAuB,EAAE;oBACrD,MAAM,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAA;iBACtC;gBAED,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,CAAA;aACrC;SACJ;QAED,MAAM,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAA;IACvC,CAAC;IAEQ,OAAO;QACZ,OAAO,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,IAAI,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,IAAI,CAAC,CAAC,CAAA;IACtF,CAAC;IAEQ,aAAa;QAClB,IAAI,CAAC,GAAG,KAAK,CAAC,aAAa,EAAE,CAAA;QAE7B,QAAQ,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE;YAC1B,KAAK,CAAC,CAAC,CAAC;gBACJ,CAAC,IAAI,SAAS,IAAI,CAAC,GAAG,GAAG,CAAA;gBACzB,MAAK;aACR;YACD,KAAK,CAAC,CAAC,CAAC;gBACJ,CAAC,IAAI,SAAS,IAAI,CAAC,GAAG,UAAU,IAAI,CAAC,GAAG,GAAG,CAAA;gBAC3C,MAAK;aACR;SACJ;QAED,OAAO,CAAC,CAAA;IACZ,CAAC"}