bbcode-compiler 0.1.5 → 0.1.7

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 (54) hide show
  1. package/README.md +1 -3
  2. package/dist/generateHtml.d.ts +1 -1
  3. package/dist/generator/Generator.d.ts +2 -1
  4. package/dist/generator/transforms/Transform.d.ts +2 -1
  5. package/dist/generator/transforms/htmlTransforms.d.ts +2 -1
  6. package/dist/generator/transforms/htmlTransforms.d.ts.map +1 -1
  7. package/dist/generator/utils/getTagImmediateAttrVal.d.ts +2 -1
  8. package/dist/generator/utils/getTagImmediateText.d.ts +1 -0
  9. package/dist/generator/utils/getWidthHeightAttr.d.ts +2 -1
  10. package/dist/generator/utils/isOrderedList.d.ts +2 -1
  11. package/dist/index.js +1061 -16
  12. package/dist/index.js.map +1 -1
  13. package/dist/index.umd.cjs +1065 -0
  14. package/dist/index.umd.cjs.map +1 -0
  15. package/dist/lexer/Lexer.d.ts +2 -1
  16. package/dist/lexer/Token.d.ts +1 -0
  17. package/dist/parser/AstNode.d.ts +27 -17
  18. package/dist/parser/AstNode.d.ts.map +1 -1
  19. package/dist/parser/Parser.d.ts +2 -1
  20. package/dist/parser/nodeIsType.d.ts +1 -0
  21. package/package.json +41 -20
  22. package/src/generator/transforms/htmlTransforms.ts +7 -0
  23. package/src/parser/AstNode.ts +162 -89
  24. package/src/parser/Parser.ts +103 -103
  25. package/dist/generateHtml.js +0 -13
  26. package/dist/generateHtml.js.map +0 -1
  27. package/dist/generator/Generator.js +0 -54
  28. package/dist/generator/Generator.js.map +0 -1
  29. package/dist/generator/transforms/Transform.js +0 -2
  30. package/dist/generator/transforms/Transform.js.map +0 -1
  31. package/dist/generator/transforms/htmlTransforms.js +0 -198
  32. package/dist/generator/transforms/htmlTransforms.js.map +0 -1
  33. package/dist/generator/utils/getTagImmediateAttrVal.js +0 -19
  34. package/dist/generator/utils/getTagImmediateAttrVal.js.map +0 -1
  35. package/dist/generator/utils/getTagImmediateText.js +0 -28
  36. package/dist/generator/utils/getTagImmediateText.js.map +0 -1
  37. package/dist/generator/utils/getWidthHeightAttr.js +0 -47
  38. package/dist/generator/utils/getWidthHeightAttr.js.map +0 -1
  39. package/dist/generator/utils/isDangerousUrl.js +0 -14
  40. package/dist/generator/utils/isDangerousUrl.js.map +0 -1
  41. package/dist/generator/utils/isOrderedList.js +0 -26
  42. package/dist/generator/utils/isOrderedList.js.map +0 -1
  43. package/dist/lexer/Lexer.js +0 -81
  44. package/dist/lexer/Lexer.js.map +0 -1
  45. package/dist/lexer/Token.js +0 -53
  46. package/dist/lexer/Token.js.map +0 -1
  47. package/dist/lexer/TokenType.js +0 -41
  48. package/dist/lexer/TokenType.js.map +0 -1
  49. package/dist/parser/AstNode.js +0 -263
  50. package/dist/parser/AstNode.js.map +0 -1
  51. package/dist/parser/Parser.js +0 -268
  52. package/dist/parser/Parser.js.map +0 -1
  53. package/dist/parser/nodeIsType.js +0 -4
  54. package/dist/parser/nodeIsType.js.map +0 -1
@@ -1,198 +0,0 @@
1
- import { getTagImmediateAttrVal } from '../utils/getTagImmediateAttrVal.js';
2
- import { getTagImmediateText } from '../utils/getTagImmediateText.js';
3
- import { getWidthHeightAttr } from '../utils/getWidthHeightAttr.js';
4
- import { isDangerousUrl } from '../utils/isDangerousUrl.js';
5
- import { isOrderedList } from '../utils/isOrderedList.js';
6
- export const htmlTransforms = [
7
- {
8
- name: 'b',
9
- start: () => {
10
- return '<strong>';
11
- },
12
- end: () => {
13
- return '</strong>';
14
- },
15
- },
16
- {
17
- name: 'i',
18
- start: () => {
19
- return '<em>';
20
- },
21
- end: () => {
22
- return '</em>';
23
- },
24
- },
25
- {
26
- name: 'u',
27
- start: () => {
28
- return '<ins>';
29
- },
30
- end: () => {
31
- return '</ins>';
32
- },
33
- },
34
- {
35
- name: 's',
36
- start: () => {
37
- return '<del>';
38
- },
39
- end: () => {
40
- return '</del>';
41
- },
42
- },
43
- {
44
- name: 'style',
45
- start: (tagNode) => {
46
- let style = '';
47
- for (const child of tagNode.attributes) {
48
- switch (child.key) {
49
- case 'color': {
50
- style += `color:${child.val};`;
51
- continue;
52
- }
53
- case 'size': {
54
- if (/^\d+$/.test(child.val)) {
55
- style += `font-size:${child.val}%;`; // When no units provided (i.e. just a number), then assume %
56
- }
57
- else {
58
- style += `font-size:${child.val};`;
59
- }
60
- continue;
61
- }
62
- }
63
- }
64
- return `<span style="${style}">`;
65
- },
66
- end: () => {
67
- return '</span>';
68
- },
69
- },
70
- {
71
- name: 'color',
72
- start: (tagNode) => {
73
- const color = getTagImmediateAttrVal(tagNode);
74
- return `<span style="color:${color};">`;
75
- },
76
- end: () => {
77
- return '</span>';
78
- },
79
- },
80
- {
81
- name: 'hr',
82
- isStandalone: true,
83
- start: () => {
84
- return '<hr />';
85
- },
86
- },
87
- {
88
- name: 'list',
89
- start: (tagNode) => {
90
- return isOrderedList(tagNode)
91
- ? '<ol>'
92
- : '<ul>';
93
- },
94
- end: (tagNode) => {
95
- return isOrderedList(tagNode)
96
- ? '</ol>'
97
- : '</ul>';
98
- },
99
- },
100
- {
101
- name: '*',
102
- isLinebreakTerminated: true,
103
- start: () => {
104
- return '<li>';
105
- },
106
- end: () => {
107
- return '</li>';
108
- },
109
- },
110
- {
111
- name: 'img',
112
- skipChildren: true,
113
- start: (tagNode) => {
114
- const src = getTagImmediateText(tagNode);
115
- if (!src) {
116
- return false;
117
- }
118
- if (isDangerousUrl(src)) {
119
- return false;
120
- }
121
- const { width, height } = getWidthHeightAttr(tagNode);
122
- let str = `<img src="${src}"`;
123
- if (width) {
124
- str += ` width="${width}"`;
125
- }
126
- if (height) {
127
- str += ` height="${height}"`;
128
- }
129
- str += '>';
130
- return str;
131
- },
132
- },
133
- {
134
- name: 'url',
135
- start: (tagNode) => {
136
- const href = getTagImmediateAttrVal(tagNode) ?? getTagImmediateText(tagNode);
137
- if (!href) {
138
- return false;
139
- }
140
- if (isDangerousUrl(href)) {
141
- return false;
142
- }
143
- return `<a href="${href}">`;
144
- },
145
- end: () => {
146
- return '</a>';
147
- },
148
- },
149
- {
150
- name: 'quote',
151
- start: (tagNode) => {
152
- const author = getTagImmediateAttrVal(tagNode);
153
- return author
154
- ? `<blockquote><strong>${author}</strong>`
155
- : '<blockquote>';
156
- },
157
- end: () => {
158
- return '</blockquote>';
159
- },
160
- },
161
- {
162
- name: 'table',
163
- start: () => {
164
- return '<table>';
165
- },
166
- end: () => {
167
- return '</table>';
168
- },
169
- },
170
- {
171
- name: 'tr',
172
- start: () => {
173
- return '<tr>';
174
- },
175
- end: () => {
176
- return '</tr>';
177
- },
178
- },
179
- {
180
- name: 'td',
181
- start: () => {
182
- return '<td>';
183
- },
184
- end: () => {
185
- return '</td>';
186
- },
187
- },
188
- {
189
- name: 'code',
190
- start: () => {
191
- return '<code>';
192
- },
193
- end: () => {
194
- return '</code>';
195
- },
196
- },
197
- ];
198
- //# sourceMappingURL=htmlTransforms.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"htmlTransforms.js","sourceRoot":"","sources":["../../../src/generator/transforms/htmlTransforms.ts"],"names":[],"mappings":"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"}
@@ -1,19 +0,0 @@
1
- /**
2
- * Gets the text of the immediate attribute of the current TagNode
3
- *
4
- * [url=https://en.wikipedia.org]English Wikipedia[/url]
5
- *
6
- * TagNode [url]
7
- * AttrNode VAL="https://en.wikipedia.org" (returns this string)
8
- * TextNode "https://en.wikipedia.org"
9
- * RootNode
10
- * TextNode "English Wikipedia"
11
- */
12
- export function getTagImmediateAttrVal(tagNode) {
13
- if (tagNode.attributes.length !== 1) {
14
- return undefined;
15
- }
16
- const attrNode = tagNode.attributes[0];
17
- return attrNode.val;
18
- }
19
- //# sourceMappingURL=getTagImmediateAttrVal.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"getTagImmediateAttrVal.js","sourceRoot":"","sources":["../../../src/generator/utils/getTagImmediateAttrVal.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;GAUG;AACH,MAAM,UAAU,sBAAsB,CAAC,OAAgB;IACnD,IAAI,OAAO,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAClC,OAAO,SAAS,CAAA;IACpB,CAAC;IAED,MAAM,QAAQ,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAA;IACtC,OAAO,QAAQ,CAAC,GAAG,CAAA;AACvB,CAAC"}
@@ -1,28 +0,0 @@
1
- import { nodeIsType } from '../../parser/nodeIsType.js';
2
- /**
3
- * Gets the text of the immediate descendant of the current TagNode
4
- *
5
- * [url]https://en.wikipedia.org[/url]
6
- *
7
- * TagNode [url]
8
- * RootNode
9
- * TextNode "https://en.wikipedia.org" (returns this string)
10
- */
11
- export function getTagImmediateText(tagNode) {
12
- if (tagNode.children.length !== 1) {
13
- return undefined;
14
- }
15
- const child = tagNode.children[0];
16
- if (!nodeIsType(child, 0 /* AstNodeType.RootNode */)) {
17
- return undefined;
18
- }
19
- if (child.children.length !== 1) {
20
- return undefined;
21
- }
22
- const textNode = child.children[0];
23
- if (!nodeIsType(textNode, 1 /* AstNodeType.TextNode */)) {
24
- return undefined;
25
- }
26
- return textNode.str;
27
- }
28
- //# sourceMappingURL=getTagImmediateText.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"getTagImmediateText.js","sourceRoot":"","sources":["../../../src/generator/utils/getTagImmediateText.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAA;AAEvD;;;;;;;;GAQG;AACH,MAAM,UAAU,mBAAmB,CAAC,OAAgB;IAChD,IAAI,OAAO,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAChC,OAAO,SAAS,CAAA;IACpB,CAAC;IAED,MAAM,KAAK,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAA;IACjC,IAAI,CAAC,UAAU,CAAC,KAAK,+BAAuB,EAAE,CAAC;QAC3C,OAAO,SAAS,CAAA;IACpB,CAAC;IAED,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC9B,OAAO,SAAS,CAAA;IACpB,CAAC;IAED,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAA;IAClC,IAAI,CAAC,UAAU,CAAC,QAAQ,+BAAuB,EAAE,CAAC;QAC9C,OAAO,SAAS,CAAA;IACpB,CAAC;IAED,OAAO,QAAQ,CAAC,GAAG,CAAA;AACvB,CAAC"}
@@ -1,47 +0,0 @@
1
- /**
2
- * Gets the width/height attributes of the TagNode if they exist
3
- *
4
- * [img 500x300]https://upload.wikimedia.org/wikipedia/commons/7/70/Example.png[/img]
5
- *
6
- * RootNode
7
- * TagNode [img] (returns width:500, height:300)
8
- * AttrNode VAL="500x300"
9
- * TextNode " 500x300"
10
- * RootNode
11
- * TextNode "https://upload.wikimedia.org/wikipedia/commons/7/70/Example.png"
12
- *
13
- * [img width=500 height=300]https://upload.wikimedia.org/wikipedia/commons/7/70/Example.png[/img]
14
- *
15
- * RootNode
16
- * TagNode [img] (returns width:500, height:300)
17
- * AttrNode KEY="width" VAL="500"
18
- * TextNode " width"
19
- * TextNode "500"
20
- * AttrNode KEY="height" VAL="300"
21
- * TextNode " height"
22
- * TextNode "300"
23
- * RootNode
24
- * TextNode "https://upload.wikimedia.org/wikipedia/commons/7/70/Example.png
25
- */
26
- export function getWidthHeightAttr(tagNode) {
27
- let width;
28
- let height;
29
- for (const child of tagNode.attributes) {
30
- if (child.key === 'width') {
31
- width = child.val;
32
- }
33
- if (child.key === 'height') {
34
- height = child.val;
35
- }
36
- const matches = /(\d+)x(\d+)/.exec(child.val);
37
- if (matches) {
38
- width = matches[1];
39
- height = matches[2];
40
- }
41
- }
42
- return {
43
- width,
44
- height,
45
- };
46
- }
47
- //# sourceMappingURL=getWidthHeightAttr.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"getWidthHeightAttr.js","sourceRoot":"","sources":["../../../src/generator/utils/getWidthHeightAttr.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,MAAM,UAAU,kBAAkB,CAAC,OAAgB;IAC/C,IAAI,KAAyB,CAAA;IAC7B,IAAI,MAA0B,CAAA;IAE9B,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;QACrC,IAAI,KAAK,CAAC,GAAG,KAAK,OAAO,EAAE,CAAC;YACxB,KAAK,GAAG,KAAK,CAAC,GAAG,CAAA;QACrB,CAAC;QACD,IAAI,KAAK,CAAC,GAAG,KAAK,QAAQ,EAAE,CAAC;YACzB,MAAM,GAAG,KAAK,CAAC,GAAG,CAAA;QACtB,CAAC;QAED,MAAM,OAAO,GAAG,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;QAC7C,IAAI,OAAO,EAAE,CAAC;YACV,KAAK,GAAG,OAAO,CAAC,CAAC,CAAC,CAAA;YAClB,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAAA;QACvB,CAAC;IACL,CAAC;IAED,OAAO;QACH,KAAK;QACL,MAAM;KACT,CAAA;AACL,CAAC"}
@@ -1,14 +0,0 @@
1
- const dangerousUriRe = /^(vbscript|javascript|file|data):/;
2
- const safeDataUriRe = /^data:image\/(gif|png|jpeg|webp);/;
3
- export function isDangerousUrl(url) {
4
- const normalizedUrl = url.trim().toLowerCase();
5
- if (!dangerousUriRe.test(normalizedUrl)) {
6
- return false;
7
- }
8
- // Only a subset of data uris are considered safe
9
- if (safeDataUriRe.test(normalizedUrl)) {
10
- return false;
11
- }
12
- return true;
13
- }
14
- //# sourceMappingURL=isDangerousUrl.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"isDangerousUrl.js","sourceRoot":"","sources":["../../../src/generator/utils/isDangerousUrl.ts"],"names":[],"mappings":"AAAA,MAAM,cAAc,GAAG,mCAAmC,CAAA;AAC1D,MAAM,aAAa,GAAG,mCAAmC,CAAA;AAEzD,MAAM,UAAU,cAAc,CAAC,GAAW;IACtC,MAAM,aAAa,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAA;IAE9C,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC;QACtC,OAAO,KAAK,CAAA;IAChB,CAAC;IAED,iDAAiD;IACjD,IAAI,aAAa,CAAC,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC;QACpC,OAAO,KAAK,CAAA;IAChB,CAAC;IAED,OAAO,IAAI,CAAA;AACf,CAAC"}
@@ -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,CAAC;QAClC,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,CAAA;QACrB,IAAI,GAAG,KAAK,GAAG,EAAE,CAAC;YACd,OAAO,IAAI,CAAA;QACf,CAAC;IACL,CAAC;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,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"}