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.
- package/dist/generateHtml.d.ts +1 -1
- package/dist/generator/Generator.d.ts +2 -1
- package/dist/generator/transforms/Transform.d.ts +2 -1
- package/dist/generator/transforms/htmlTransforms.d.ts +2 -1
- package/dist/generator/utils/getTagImmediateAttrVal.d.ts +2 -1
- package/dist/generator/utils/getTagImmediateText.d.ts +1 -0
- package/dist/generator/utils/getWidthHeightAttr.d.ts +2 -1
- package/dist/generator/utils/isOrderedList.d.ts +2 -1
- package/dist/index.js +1014 -16
- package/dist/index.js.map +1 -1
- package/dist/index.umd.cjs +1018 -0
- package/dist/index.umd.cjs.map +1 -0
- package/dist/lexer/Lexer.d.ts +2 -1
- package/dist/lexer/Token.d.ts +1 -0
- package/dist/parser/AstNode.d.ts +8 -8
- package/dist/parser/AstNode.d.ts.map +1 -1
- package/dist/parser/Parser.d.ts +2 -1
- package/dist/parser/nodeIsType.d.ts +1 -0
- package/package.json +20 -19
- package/src/parser/AstNode.ts +73 -73
- package/src/parser/Parser.ts +103 -103
- package/dist/generateHtml.js +0 -13
- package/dist/generateHtml.js.map +0 -1
- package/dist/generator/Generator.js +0 -54
- package/dist/generator/Generator.js.map +0 -1
- package/dist/generator/transforms/Transform.js +0 -2
- package/dist/generator/transforms/Transform.js.map +0 -1
- package/dist/generator/transforms/htmlTransforms.js +0 -198
- package/dist/generator/transforms/htmlTransforms.js.map +0 -1
- package/dist/generator/utils/getTagImmediateAttrVal.js +0 -19
- package/dist/generator/utils/getTagImmediateAttrVal.js.map +0 -1
- package/dist/generator/utils/getTagImmediateText.js +0 -28
- package/dist/generator/utils/getTagImmediateText.js.map +0 -1
- package/dist/generator/utils/getWidthHeightAttr.js +0 -47
- package/dist/generator/utils/getWidthHeightAttr.js.map +0 -1
- package/dist/generator/utils/isDangerousUrl.js +0 -14
- package/dist/generator/utils/isDangerousUrl.js.map +0 -1
- package/dist/generator/utils/isOrderedList.js +0 -26
- package/dist/generator/utils/isOrderedList.js.map +0 -1
- package/dist/lexer/Lexer.js +0 -81
- package/dist/lexer/Lexer.js.map +0 -1
- package/dist/lexer/Token.js +0 -53
- package/dist/lexer/Token.js.map +0 -1
- package/dist/lexer/TokenType.js +0 -41
- package/dist/lexer/TokenType.js.map +0 -1
- package/dist/parser/AstNode.js +0 -263
- package/dist/parser/AstNode.js.map +0 -1
- package/dist/parser/Parser.js +0 -268
- package/dist/parser/Parser.js.map +0 -1
- package/dist/parser/nodeIsType.js +0 -4
- package/dist/parser/nodeIsType.js.map +0 -1
package/src/parser/Parser.ts
CHANGED
|
@@ -18,109 +18,6 @@ export class Parser {
|
|
|
18
18
|
parse(ogText: string, tokens: Array<Token>): RootNode {
|
|
19
19
|
let idx = 0
|
|
20
20
|
|
|
21
|
-
const parseRoot = (): RootNode => {
|
|
22
|
-
const root = new RootNode()
|
|
23
|
-
|
|
24
|
-
while (idx < tokens.length) {
|
|
25
|
-
if (tokens[idx].type === TokenType.L_BRACKET) {
|
|
26
|
-
const startIdx = idx
|
|
27
|
-
const tagNode = parseTag()
|
|
28
|
-
|
|
29
|
-
if (tagNode !== null) {
|
|
30
|
-
root.addChild(tagNode)
|
|
31
|
-
} else {
|
|
32
|
-
const invalidTokens = tokens.slice(startIdx, idx)
|
|
33
|
-
const str = stringifyTokens(ogText, invalidTokens)
|
|
34
|
-
const textNode = new TextNode(str)
|
|
35
|
-
root.addChild(textNode)
|
|
36
|
-
}
|
|
37
|
-
} else if (tokens[idx].type === TokenType.LINEBREAK) {
|
|
38
|
-
idx += 1 // Consume LINEBREAK
|
|
39
|
-
root.addChild(new LinebreakNode())
|
|
40
|
-
} else {
|
|
41
|
-
const startIdx = idx
|
|
42
|
-
|
|
43
|
-
// Advance until we see the start of another RootNode's child (TagNode or LinebreakNode)
|
|
44
|
-
while (idx < tokens.length && tokens[idx].type !== TokenType.L_BRACKET && tokens[idx].type !== TokenType.LINEBREAK) {
|
|
45
|
-
idx += 1
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
const slice = tokens.slice(startIdx, idx)
|
|
49
|
-
const str = stringifyTokens(ogText, slice)
|
|
50
|
-
root.addChild(new TextNode(str))
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
return root
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
const parseTag = (): StartTagNode | EndTagNode | null => {
|
|
58
|
-
if (idx + 1 >= tokens.length) {
|
|
59
|
-
return null
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
if (tokens[idx].type !== TokenType.L_BRACKET) {
|
|
63
|
-
return null
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
// If L_BRACKET is followed by text, then it must be StartTag or is invalid
|
|
67
|
-
if (isStringToken(tokens[idx + 1].type)) {
|
|
68
|
-
const startIdx = idx
|
|
69
|
-
idx += 1 // Consume L_BRACKET
|
|
70
|
-
|
|
71
|
-
const labelText = parseLabel()
|
|
72
|
-
if (!this.tags.has(labelText)) {
|
|
73
|
-
return null
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
const attrNodes = new Array<AttrNode>()
|
|
77
|
-
while (true) {
|
|
78
|
-
const attrNode = parseAttr()
|
|
79
|
-
if (attrNode === null) {
|
|
80
|
-
break
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
attrNodes.push(attrNode)
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
if (tokens[idx].type !== TokenType.R_BRACKET) {
|
|
87
|
-
return null
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
idx += 1 // Consume R_BRACKET
|
|
91
|
-
|
|
92
|
-
const slice = tokens.slice(startIdx, idx)
|
|
93
|
-
const ogTag = stringifyTokens(ogText, slice)
|
|
94
|
-
const startTagNode = new StartTagNode(labelText, ogTag, attrNodes)
|
|
95
|
-
return startTagNode
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
// If L_BRACKET is followed by BACKSLASH, then it must be EndTag or is invalid
|
|
99
|
-
if (tokens[idx + 1].type === TokenType.BACKSLASH) {
|
|
100
|
-
const startIdx = idx
|
|
101
|
-
idx += 1 // Consume L_BRACKET
|
|
102
|
-
idx += 1 // Consume BACKSLASH
|
|
103
|
-
|
|
104
|
-
const labelText = parseLabel()
|
|
105
|
-
if (!this.tags.has(labelText)) {
|
|
106
|
-
return null
|
|
107
|
-
}
|
|
108
|
-
|
|
109
|
-
if (tokens[idx].type !== TokenType.R_BRACKET) {
|
|
110
|
-
return null
|
|
111
|
-
}
|
|
112
|
-
|
|
113
|
-
idx += 1 // Consume R_BRACKET
|
|
114
|
-
|
|
115
|
-
const slice = tokens.slice(startIdx, idx)
|
|
116
|
-
const ogTag = stringifyTokens(ogText, slice)
|
|
117
|
-
const endTagNode = new EndTagNode(labelText, ogTag)
|
|
118
|
-
return endTagNode
|
|
119
|
-
}
|
|
120
|
-
|
|
121
|
-
return null
|
|
122
|
-
}
|
|
123
|
-
|
|
124
21
|
const parseLabel = (): string => {
|
|
125
22
|
const slice = tokens.slice(idx, idx + 1)
|
|
126
23
|
const label = stringifyTokens(ogText, slice)
|
|
@@ -243,6 +140,109 @@ export class Parser {
|
|
|
243
140
|
return attrNode
|
|
244
141
|
}
|
|
245
142
|
|
|
143
|
+
const parseTag = (): StartTagNode | EndTagNode | null => {
|
|
144
|
+
if (idx + 1 >= tokens.length) {
|
|
145
|
+
return null
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
if (tokens[idx].type !== TokenType.L_BRACKET) {
|
|
149
|
+
return null
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
// If L_BRACKET is followed by text, then it must be StartTag or is invalid
|
|
153
|
+
if (isStringToken(tokens[idx + 1].type)) {
|
|
154
|
+
const startIdx = idx
|
|
155
|
+
idx += 1 // Consume L_BRACKET
|
|
156
|
+
|
|
157
|
+
const labelText = parseLabel()
|
|
158
|
+
if (!this.tags.has(labelText)) {
|
|
159
|
+
return null
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
const attrNodes = new Array<AttrNode>()
|
|
163
|
+
while (true) {
|
|
164
|
+
const attrNode = parseAttr()
|
|
165
|
+
if (attrNode === null) {
|
|
166
|
+
break
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
attrNodes.push(attrNode)
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
if (tokens[idx].type !== TokenType.R_BRACKET) {
|
|
173
|
+
return null
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
idx += 1 // Consume R_BRACKET
|
|
177
|
+
|
|
178
|
+
const slice = tokens.slice(startIdx, idx)
|
|
179
|
+
const ogTag = stringifyTokens(ogText, slice)
|
|
180
|
+
const startTagNode = new StartTagNode(labelText, ogTag, attrNodes)
|
|
181
|
+
return startTagNode
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
// If L_BRACKET is followed by BACKSLASH, then it must be EndTag or is invalid
|
|
185
|
+
if (tokens[idx + 1].type === TokenType.BACKSLASH) {
|
|
186
|
+
const startIdx = idx
|
|
187
|
+
idx += 1 // Consume L_BRACKET
|
|
188
|
+
idx += 1 // Consume BACKSLASH
|
|
189
|
+
|
|
190
|
+
const labelText = parseLabel()
|
|
191
|
+
if (!this.tags.has(labelText)) {
|
|
192
|
+
return null
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
if (tokens[idx].type !== TokenType.R_BRACKET) {
|
|
196
|
+
return null
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
idx += 1 // Consume R_BRACKET
|
|
200
|
+
|
|
201
|
+
const slice = tokens.slice(startIdx, idx)
|
|
202
|
+
const ogTag = stringifyTokens(ogText, slice)
|
|
203
|
+
const endTagNode = new EndTagNode(labelText, ogTag)
|
|
204
|
+
return endTagNode
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
return null
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
const parseRoot = (): RootNode => {
|
|
211
|
+
const root = new RootNode()
|
|
212
|
+
|
|
213
|
+
while (idx < tokens.length) {
|
|
214
|
+
if (tokens[idx].type === TokenType.L_BRACKET) {
|
|
215
|
+
const startIdx = idx
|
|
216
|
+
const tagNode = parseTag()
|
|
217
|
+
|
|
218
|
+
if (tagNode !== null) {
|
|
219
|
+
root.addChild(tagNode)
|
|
220
|
+
} else {
|
|
221
|
+
const invalidTokens = tokens.slice(startIdx, idx)
|
|
222
|
+
const str = stringifyTokens(ogText, invalidTokens)
|
|
223
|
+
const textNode = new TextNode(str)
|
|
224
|
+
root.addChild(textNode)
|
|
225
|
+
}
|
|
226
|
+
} else if (tokens[idx].type === TokenType.LINEBREAK) {
|
|
227
|
+
idx += 1 // Consume LINEBREAK
|
|
228
|
+
root.addChild(new LinebreakNode())
|
|
229
|
+
} else {
|
|
230
|
+
const startIdx = idx
|
|
231
|
+
|
|
232
|
+
// Advance until we see the start of another RootNode's child (TagNode or LinebreakNode)
|
|
233
|
+
while (idx < tokens.length && tokens[idx].type !== TokenType.L_BRACKET && tokens[idx].type !== TokenType.LINEBREAK) {
|
|
234
|
+
idx += 1
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
const slice = tokens.slice(startIdx, idx)
|
|
238
|
+
const str = stringifyTokens(ogText, slice)
|
|
239
|
+
root.addChild(new TextNode(str))
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
return root
|
|
244
|
+
}
|
|
245
|
+
|
|
246
246
|
let root = parseRoot()
|
|
247
247
|
root = this.matchTagNodes(root)
|
|
248
248
|
return root
|
package/dist/generateHtml.js
DELETED
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import { Generator } from './generator/Generator.js';
|
|
2
|
-
import { htmlTransforms } from './generator/transforms/htmlTransforms.js';
|
|
3
|
-
import { Lexer } from './lexer/Lexer.js';
|
|
4
|
-
import { Parser } from './parser/Parser.js';
|
|
5
|
-
export function generateHtml(input, transforms = htmlTransforms) {
|
|
6
|
-
const lexer = new Lexer();
|
|
7
|
-
const tokens = lexer.tokenize(input);
|
|
8
|
-
const parser = new Parser(transforms);
|
|
9
|
-
const root = parser.parse(input, tokens);
|
|
10
|
-
const generator = new Generator(transforms);
|
|
11
|
-
return generator.generate(root);
|
|
12
|
-
}
|
|
13
|
-
//# sourceMappingURL=generateHtml.js.map
|
package/dist/generateHtml.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"generateHtml.js","sourceRoot":"","sources":["../src/generateHtml.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAA;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,0CAA0C,CAAA;AACzE,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAA;AACxC,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAA;AAE3C,MAAM,UAAU,YAAY,CAAC,KAAa,EAAE,UAAU,GAAG,cAAc;IACnE,MAAM,KAAK,GAAG,IAAI,KAAK,EAAE,CAAA;IACzB,MAAM,MAAM,GAAG,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAA;IAEpC,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,UAAU,CAAC,CAAA;IACrC,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,MAAM,CAAC,CAAA;IAExC,MAAM,SAAS,GAAG,IAAI,SAAS,CAAC,UAAU,CAAC,CAAA;IAC3C,OAAO,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAA;AACnC,CAAC"}
|
|
@@ -1,54 +0,0 @@
|
|
|
1
|
-
import { nodeIsType } from '../parser/nodeIsType.js';
|
|
2
|
-
import { htmlTransforms } from './transforms/htmlTransforms.js';
|
|
3
|
-
export class Generator {
|
|
4
|
-
transforms;
|
|
5
|
-
constructor(transforms = htmlTransforms) {
|
|
6
|
-
this.transforms = new Map(transforms.map((transform) => [transform.name, transform]));
|
|
7
|
-
}
|
|
8
|
-
generate(root) {
|
|
9
|
-
const stringify = (node) => {
|
|
10
|
-
let output = '';
|
|
11
|
-
if (nodeIsType(node, 3 /* AstNodeType.TagNode */)) {
|
|
12
|
-
const tagName = node.tagName;
|
|
13
|
-
const transform = this.transforms.get(tagName);
|
|
14
|
-
if (!transform) {
|
|
15
|
-
throw new Error(`Unrecognized bbcode ${node.tagName}`);
|
|
16
|
-
}
|
|
17
|
-
const renderedStartTag = transform.start(node);
|
|
18
|
-
const renderedEndTag = transform.end?.(node) ?? '';
|
|
19
|
-
const isInvalidTag = renderedStartTag === false;
|
|
20
|
-
if (isInvalidTag) {
|
|
21
|
-
output += node.ogStartTag;
|
|
22
|
-
}
|
|
23
|
-
else {
|
|
24
|
-
output += renderedStartTag;
|
|
25
|
-
}
|
|
26
|
-
if (!transform.skipChildren || isInvalidTag) {
|
|
27
|
-
for (const child of node.children) {
|
|
28
|
-
output += stringify(child);
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
if (isInvalidTag) {
|
|
32
|
-
output += node.ogEndTag;
|
|
33
|
-
}
|
|
34
|
-
else {
|
|
35
|
-
output += renderedEndTag;
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
else if (nodeIsType(node, 1 /* AstNodeType.TextNode */)) {
|
|
39
|
-
output += node.str;
|
|
40
|
-
}
|
|
41
|
-
else if (nodeIsType(node, 2 /* AstNodeType.LinebreakNode */)) {
|
|
42
|
-
output += '\n';
|
|
43
|
-
}
|
|
44
|
-
else {
|
|
45
|
-
for (const child of node.children) {
|
|
46
|
-
output += stringify(child);
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
return output;
|
|
50
|
-
};
|
|
51
|
-
return stringify(root);
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
//# sourceMappingURL=Generator.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Generator.js","sourceRoot":"","sources":["../../src/generator/Generator.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAA;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAA;AAG/D,MAAM,OAAO,SAAS;IAClB,UAAU,CAAgC;IAE1C,YAAY,UAAU,GAAG,cAAc;QACnC,IAAI,CAAC,UAAU,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,SAAS,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC,CAAA;IACzF,CAAC;IAED,QAAQ,CAAC,IAAc;QACnB,MAAM,SAAS,GAAG,CAAC,IAAa,EAAU,EAAE;YACxC,IAAI,MAAM,GAAG,EAAE,CAAA;YAEf,IAAI,UAAU,CAAC,IAAI,8BAAsB,EAAE,CAAC;gBACxC,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAA;gBAC5B,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;gBAC9C,IAAI,CAAC,SAAS,EAAE,CAAC;oBACb,MAAM,IAAI,KAAK,CAAC,uBAAuB,IAAI,CAAC,OAAO,EAAE,CAAC,CAAA;gBAC1D,CAAC;gBAED,MAAM,gBAAgB,GAAG,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;gBAC9C,MAAM,cAAc,GAAG,SAAS,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAA;gBAClD,MAAM,YAAY,GAAG,gBAAgB,KAAK,KAAK,CAAA;gBAE/C,IAAI,YAAY,EAAE,CAAC;oBACf,MAAM,IAAI,IAAI,CAAC,UAAU,CAAA;gBAC7B,CAAC;qBAAM,CAAC;oBACJ,MAAM,IAAI,gBAAgB,CAAA;gBAC9B,CAAC;gBAED,IAAI,CAAC,SAAS,CAAC,YAAY,IAAI,YAAY,EAAE,CAAC;oBAC1C,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;wBAChC,MAAM,IAAI,SAAS,CAAC,KAAK,CAAC,CAAA;oBAC9B,CAAC;gBACL,CAAC;gBAED,IAAI,YAAY,EAAE,CAAC;oBACf,MAAM,IAAI,IAAI,CAAC,QAAQ,CAAA;gBAC3B,CAAC;qBAAM,CAAC;oBACJ,MAAM,IAAI,cAAc,CAAA;gBAC5B,CAAC;YACL,CAAC;iBAAM,IAAI,UAAU,CAAC,IAAI,+BAAuB,EAAE,CAAC;gBAChD,MAAM,IAAI,IAAI,CAAC,GAAG,CAAA;YACtB,CAAC;iBAAM,IAAI,UAAU,CAAC,IAAI,oCAA4B,EAAE,CAAC;gBACrD,MAAM,IAAI,IAAI,CAAA;YAClB,CAAC;iBAAM,CAAC;gBACJ,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;oBAChC,MAAM,IAAI,SAAS,CAAC,KAAK,CAAC,CAAA;gBAC9B,CAAC;YACL,CAAC;YAED,OAAO,MAAM,CAAA;QACjB,CAAC,CAAA;QAED,OAAO,SAAS,CAAC,IAAI,CAAC,CAAA;IAC1B,CAAC;CACJ"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Transform.js","sourceRoot":"","sources":["../../../src/generator/transforms/Transform.ts"],"names":[],"mappings":""}
|
|
@@ -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"}
|