@chayns-components/format 5.0.0-beta.651 → 5.0.0-beta.682
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/lib/cjs/constants/format.js +8 -0
- package/lib/cjs/constants/format.js.map +1 -0
- package/lib/cjs/index.js +7 -0
- package/lib/cjs/index.js.map +1 -1
- package/lib/cjs/types/format.js +2 -0
- package/lib/cjs/types/format.js.map +1 -0
- package/lib/cjs/utils/escape.js +1 -5
- package/lib/cjs/utils/escape.js.map +1 -1
- package/lib/cjs/utils/formatString/bb-code/findBBCode.js +6 -4
- package/lib/cjs/utils/formatString/bb-code/findBBCode.js.map +1 -1
- package/lib/cjs/utils/formatString/bb-code/formatBBCode.js +38 -38
- package/lib/cjs/utils/formatString/bb-code/formatBBCode.js.map +1 -1
- package/lib/cjs/utils/formatString/formatString.js +30 -42
- package/lib/cjs/utils/formatString/formatString.js.map +1 -1
- package/lib/cjs/utils/formatString/formatString.test.js +549 -0
- package/lib/cjs/utils/formatString/formatString.test.js.map +1 -0
- package/lib/cjs/utils/formatString/markdown/formatMarkdown.js +145 -30
- package/lib/cjs/utils/formatString/markdown/formatMarkdown.js.map +1 -1
- package/lib/esm/constants/format.js +2 -0
- package/lib/esm/constants/format.js.map +1 -0
- package/lib/esm/index.js +1 -0
- package/lib/esm/index.js.map +1 -1
- package/lib/esm/types/format.js +2 -0
- package/lib/esm/types/format.js.map +1 -0
- package/lib/esm/utils/escape.js +0 -3
- package/lib/esm/utils/escape.js.map +1 -1
- package/lib/esm/utils/formatString/bb-code/findBBCode.js +6 -4
- package/lib/esm/utils/formatString/bb-code/findBBCode.js.map +1 -1
- package/lib/esm/utils/formatString/bb-code/formatBBCode.js +38 -40
- package/lib/esm/utils/formatString/bb-code/formatBBCode.js.map +1 -1
- package/lib/esm/utils/formatString/formatString.js +33 -45
- package/lib/esm/utils/formatString/formatString.js.map +1 -1
- package/lib/esm/utils/formatString/formatString.test.js +547 -0
- package/lib/esm/utils/formatString/formatString.test.js.map +1 -0
- package/lib/esm/utils/formatString/markdown/formatMarkdown.js +141 -27
- package/lib/esm/utils/formatString/markdown/formatMarkdown.js.map +1 -1
- package/lib/types/constants/format.d.ts +1 -0
- package/lib/types/index.d.ts +2 -0
- package/lib/types/types/format.d.ts +5 -0
- package/lib/types/utils/escape.d.ts +0 -3
- package/lib/types/utils/formatString/bb-code/findBBCode.d.ts +2 -0
- package/lib/types/utils/formatString/bb-code/formatBBCode.d.ts +4 -2
- package/lib/types/utils/formatString/formatString.d.ts +1 -3
- package/lib/types/utils/formatString/formatString.test.d.ts +1 -0
- package/lib/types/utils/formatString/markdown/formatMarkdown.d.ts +3 -1
- package/package.json +6 -4
- package/lib/cjs/utils/formatString/markdown/InternalHTMLRenderer.js +0 -287
- package/lib/cjs/utils/formatString/markdown/InternalHTMLRenderer.js.map +0 -1
- package/lib/cjs/utils/formatString/markdown/formatMarkdownTable.js +0 -86
- package/lib/cjs/utils/formatString/markdown/formatMarkdownTable.js.map +0 -1
- package/lib/esm/utils/formatString/markdown/InternalHTMLRenderer.js +0 -278
- package/lib/esm/utils/formatString/markdown/InternalHTMLRenderer.js.map +0 -1
- package/lib/esm/utils/formatString/markdown/formatMarkdownTable.js +0 -78
- package/lib/esm/utils/formatString/markdown/formatMarkdownTable.js.map +0 -1
- package/lib/types/utils/formatString/markdown/InternalHTMLRenderer.d.ts +0 -5
- package/lib/types/utils/formatString/markdown/formatMarkdownTable.d.ts +0 -9
|
@@ -1,287 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.default = void 0;
|
|
7
|
-
var _commonmark = require("commonmark");
|
|
8
|
-
var _escape = require("../../escape");
|
|
9
|
-
// @ts-nocheck
|
|
10
|
-
// /* eslint-disable camelcase */
|
|
11
|
-
// noinspection JSUnusedGlobalSymbols,JSUnresolvedReference
|
|
12
|
-
|
|
13
|
-
const reUnsafeProtocol = /^javascript:|vbscript:|file:|data:/i;
|
|
14
|
-
const reSafeDataProtocol = /^data:image\/(?:png|gif|jpeg|webp)/i;
|
|
15
|
-
function potentiallyUnsafe(url) {
|
|
16
|
-
return reUnsafeProtocol.test(url) && !reSafeDataProtocol.test(url);
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
// Helper function to produce an HTML tag.
|
|
20
|
-
function tag(name, attributes, selfclosing) {
|
|
21
|
-
if (this.disableTags > 0) {
|
|
22
|
-
return;
|
|
23
|
-
}
|
|
24
|
-
this.buffer += `<${name}`;
|
|
25
|
-
if (attributes && attributes.length > 0) {
|
|
26
|
-
let i = 0;
|
|
27
|
-
let attribute;
|
|
28
|
-
// eslint-disable-next-line no-cond-assign
|
|
29
|
-
while ((attribute = attributes[i]) !== undefined) {
|
|
30
|
-
this.buffer += ` ${attribute[0]}="${attribute[1]}"`;
|
|
31
|
-
i++;
|
|
32
|
-
}
|
|
33
|
-
}
|
|
34
|
-
if (selfclosing) {
|
|
35
|
-
this.buffer += ' /';
|
|
36
|
-
}
|
|
37
|
-
this.buffer += '>';
|
|
38
|
-
this.lastOut = '>';
|
|
39
|
-
}
|
|
40
|
-
function InternalHTMLRenderer(options) {
|
|
41
|
-
// eslint-disable-next-line no-param-reassign
|
|
42
|
-
options = options || {};
|
|
43
|
-
// by default, soft breaks are rendered as newlines in HTML
|
|
44
|
-
// eslint-disable-next-line no-param-reassign
|
|
45
|
-
options.softbreak = options.softbreak || '';
|
|
46
|
-
// set to "<br />" to make them hard breaks
|
|
47
|
-
// set to " " if you want to ignore line wrapping in source
|
|
48
|
-
this.esc = _escape.escapeHtmlInText;
|
|
49
|
-
// escape html with a custom function
|
|
50
|
-
// else use escapeXml
|
|
51
|
-
|
|
52
|
-
this.disableTags = 0;
|
|
53
|
-
this.lastOut = '\n';
|
|
54
|
-
this.options = options;
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
/* Node methods */
|
|
58
|
-
|
|
59
|
-
function text(node) {
|
|
60
|
-
this.out(node.literal);
|
|
61
|
-
}
|
|
62
|
-
function softbreak() {
|
|
63
|
-
this.lit('\n');
|
|
64
|
-
}
|
|
65
|
-
function linebreak() {
|
|
66
|
-
this.lit('\n');
|
|
67
|
-
}
|
|
68
|
-
function link(node, entering) {
|
|
69
|
-
const attributes = this.attrs(node);
|
|
70
|
-
if (entering) {
|
|
71
|
-
if (!(this.options.safe && potentiallyUnsafe(node.destination))) {
|
|
72
|
-
attributes.push(['href', this.esc(node.destination)]);
|
|
73
|
-
}
|
|
74
|
-
if (node.title) {
|
|
75
|
-
attributes.push(['title', this.esc(node.title)]);
|
|
76
|
-
}
|
|
77
|
-
this.tag('a', attributes);
|
|
78
|
-
} else {
|
|
79
|
-
this.tag('/a');
|
|
80
|
-
}
|
|
81
|
-
}
|
|
82
|
-
function image(node, entering) {
|
|
83
|
-
if (entering) {
|
|
84
|
-
if (this.disableTags === 0) {
|
|
85
|
-
if (this.options.safe && potentiallyUnsafe(node.destination)) {
|
|
86
|
-
this.lit('<img style="max-width: 100%" src=""');
|
|
87
|
-
} else {
|
|
88
|
-
this.lit(`<img src="${this.esc(node.destination)}"`);
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
|
-
this.disableTags += 1;
|
|
92
|
-
} else {
|
|
93
|
-
this.disableTags -= 1;
|
|
94
|
-
if (this.disableTags === 0) {
|
|
95
|
-
if (node.title) {
|
|
96
|
-
this.lit(` title="${this.esc(node.title)}`);
|
|
97
|
-
}
|
|
98
|
-
this.lit('/>');
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
|
-
function emph(node, entering) {
|
|
103
|
-
this.tag(entering ? 'em' : '/em');
|
|
104
|
-
}
|
|
105
|
-
function strong(node, entering) {
|
|
106
|
-
this.tag(entering ? 'strong' : '/strong');
|
|
107
|
-
}
|
|
108
|
-
function paragraph(node) {
|
|
109
|
-
const grandparent = node.parent.parent;
|
|
110
|
-
if (grandparent !== null && grandparent.type === 'list') {
|
|
111
|
-
return;
|
|
112
|
-
}
|
|
113
|
-
this.cr();
|
|
114
|
-
}
|
|
115
|
-
function heading(node, entering) {
|
|
116
|
-
const tagName = `h${node.level}`;
|
|
117
|
-
const attributes = this.attrs(node);
|
|
118
|
-
if (entering) {
|
|
119
|
-
var _node$next, _node$next2;
|
|
120
|
-
this.cr();
|
|
121
|
-
this.tag(tagName, attributes);
|
|
122
|
-
|
|
123
|
-
// Removes line break after heading.
|
|
124
|
-
// That line break would be one too many, since headings are block-level elements, and thus already cause a line break behind them.
|
|
125
|
-
if (((_node$next = node.next) === null || _node$next === void 0 ? void 0 : _node$next.type) === 'html_block' && ((_node$next2 = node.next) === null || _node$next2 === void 0 ? void 0 : _node$next2.literal) === _escape.MESSAGE_CONVERSION_LINE_BREAK) {
|
|
126
|
-
node.next.unlink();
|
|
127
|
-
}
|
|
128
|
-
} else {
|
|
129
|
-
this.tag(`/${tagName}`);
|
|
130
|
-
this.cr();
|
|
131
|
-
}
|
|
132
|
-
}
|
|
133
|
-
function code(node) {
|
|
134
|
-
this.tag('code class="inline-code"');
|
|
135
|
-
this.out(node.literal);
|
|
136
|
-
this.tag('/code');
|
|
137
|
-
}
|
|
138
|
-
function code_block(node) {
|
|
139
|
-
if (node._isFenced) {
|
|
140
|
-
var _node$next3, _node$next4;
|
|
141
|
-
this.tag('pre', [['language', node.info]]);
|
|
142
|
-
this.tag('code');
|
|
143
|
-
|
|
144
|
-
// Removes trailing and leading line break from the code block content.
|
|
145
|
-
const pattern = new RegExp(`^(${_escape.MESSAGE_CONVERSION_LINE_BREAK}|\\n)+|(${_escape.MESSAGE_CONVERSION_LINE_BREAK}|\\n)+$`, 'g');
|
|
146
|
-
const replaced = node.literal.replaceAll(pattern, '');
|
|
147
|
-
this.out(replaced);
|
|
148
|
-
this.tag('/code');
|
|
149
|
-
this.tag('/pre');
|
|
150
|
-
|
|
151
|
-
// Removes line break after code block.
|
|
152
|
-
// That line break would be one too many, since code blocks are block-level elements, and thus already cause a line break behind them.
|
|
153
|
-
if (((_node$next3 = node.next) === null || _node$next3 === void 0 ? void 0 : _node$next3.type) === 'html_block' && ((_node$next4 = node.next) === null || _node$next4 === void 0 ? void 0 : _node$next4.literal) === _escape.MESSAGE_CONVERSION_LINE_BREAK) {
|
|
154
|
-
// eslint-disable-next-line no-param-reassign
|
|
155
|
-
node.next.literal = '';
|
|
156
|
-
}
|
|
157
|
-
} else {
|
|
158
|
-
this.out(node.literal);
|
|
159
|
-
}
|
|
160
|
-
}
|
|
161
|
-
function thematic_break(node) {
|
|
162
|
-
var _node$next5, _node$next6;
|
|
163
|
-
// Removes line break after thematic break.
|
|
164
|
-
// That line break would be one too many, since thematic breaks are block-level elements, and thus already cause a line break behind them.
|
|
165
|
-
if (((_node$next5 = node.next) === null || _node$next5 === void 0 ? void 0 : _node$next5.type) === 'html_block' && ((_node$next6 = node.next) === null || _node$next6 === void 0 ? void 0 : _node$next6.literal) === _escape.MESSAGE_CONVERSION_LINE_BREAK) {
|
|
166
|
-
// eslint-disable-next-line no-param-reassign
|
|
167
|
-
node.next.literal = '';
|
|
168
|
-
}
|
|
169
|
-
const attributes = this.attrs(node);
|
|
170
|
-
this.cr();
|
|
171
|
-
this.tag('hr', attributes, true);
|
|
172
|
-
this.cr();
|
|
173
|
-
}
|
|
174
|
-
function block_quote(node, entering) {
|
|
175
|
-
const attributes = this.attrs(node);
|
|
176
|
-
if (entering) {
|
|
177
|
-
this.cr();
|
|
178
|
-
this.tag('blockquote', attributes);
|
|
179
|
-
this.cr();
|
|
180
|
-
} else {
|
|
181
|
-
this.cr();
|
|
182
|
-
this.tag('/blockquote');
|
|
183
|
-
this.cr();
|
|
184
|
-
}
|
|
185
|
-
}
|
|
186
|
-
function list(node, entering) {
|
|
187
|
-
const tagName = node.listType === 'bullet' ? 'ul' : 'ol';
|
|
188
|
-
const attributes = this.attrs(node);
|
|
189
|
-
if (entering) {
|
|
190
|
-
const start = node.listStart;
|
|
191
|
-
if (start !== null && start !== 1) {
|
|
192
|
-
attributes.push(['start', start.toString()]);
|
|
193
|
-
}
|
|
194
|
-
this.cr();
|
|
195
|
-
this.tag(tagName, attributes);
|
|
196
|
-
this.cr();
|
|
197
|
-
} else {
|
|
198
|
-
this.cr();
|
|
199
|
-
this.tag(`/${tagName}`);
|
|
200
|
-
this.cr();
|
|
201
|
-
}
|
|
202
|
-
}
|
|
203
|
-
function item(node, entering) {
|
|
204
|
-
const attributes = this.attrs(node);
|
|
205
|
-
if (entering) {
|
|
206
|
-
this.tag('li', attributes);
|
|
207
|
-
} else {
|
|
208
|
-
this.tag('/li');
|
|
209
|
-
this.cr();
|
|
210
|
-
}
|
|
211
|
-
}
|
|
212
|
-
function html_inline(node) {
|
|
213
|
-
if (this.options.safe) {
|
|
214
|
-
this.lit('<!-- raw HTML omitted -->');
|
|
215
|
-
} else {
|
|
216
|
-
this.lit(node.literal);
|
|
217
|
-
}
|
|
218
|
-
}
|
|
219
|
-
function html_block(node) {
|
|
220
|
-
this.cr();
|
|
221
|
-
if (this.options.safe) {
|
|
222
|
-
this.lit('<!-- raw HTML omitted -->');
|
|
223
|
-
} else {
|
|
224
|
-
this.lit(node.literal);
|
|
225
|
-
}
|
|
226
|
-
this.cr();
|
|
227
|
-
}
|
|
228
|
-
function custom_inline(node, entering) {
|
|
229
|
-
if (entering && node.onEnter) {
|
|
230
|
-
this.lit(node.onEnter);
|
|
231
|
-
} else if (!entering && node.onExit) {
|
|
232
|
-
this.lit(node.onExit);
|
|
233
|
-
}
|
|
234
|
-
}
|
|
235
|
-
function custom_block(node, entering) {
|
|
236
|
-
this.cr();
|
|
237
|
-
if (entering && node.onEnter) {
|
|
238
|
-
this.lit(node.onEnter);
|
|
239
|
-
} else if (!entering && node.onExit) {
|
|
240
|
-
this.lit(node.onExit);
|
|
241
|
-
}
|
|
242
|
-
this.cr();
|
|
243
|
-
}
|
|
244
|
-
|
|
245
|
-
/* Helper methods */
|
|
246
|
-
|
|
247
|
-
function out(s) {
|
|
248
|
-
this.lit(this.esc(s));
|
|
249
|
-
}
|
|
250
|
-
function attrs(node) {
|
|
251
|
-
const att = [];
|
|
252
|
-
if (this.options.sourcepos) {
|
|
253
|
-
const pos = node.sourcepos;
|
|
254
|
-
if (pos) {
|
|
255
|
-
att.push(['data-sourcepos', `${String(pos[0][0])}:${String(pos[0][1])}-${String(pos[1][0])}:${String(pos[1][1])}`]);
|
|
256
|
-
}
|
|
257
|
-
}
|
|
258
|
-
return att;
|
|
259
|
-
}
|
|
260
|
-
|
|
261
|
-
// quick browser-compatible inheritance
|
|
262
|
-
InternalHTMLRenderer.prototype = Object.create(_commonmark.HtmlRenderer.prototype);
|
|
263
|
-
InternalHTMLRenderer.prototype.text = text;
|
|
264
|
-
InternalHTMLRenderer.prototype.html_inline = html_inline;
|
|
265
|
-
InternalHTMLRenderer.prototype.html_block = html_block;
|
|
266
|
-
InternalHTMLRenderer.prototype.softbreak = softbreak;
|
|
267
|
-
InternalHTMLRenderer.prototype.linebreak = linebreak;
|
|
268
|
-
InternalHTMLRenderer.prototype.link = link;
|
|
269
|
-
InternalHTMLRenderer.prototype.image = image;
|
|
270
|
-
InternalHTMLRenderer.prototype.emph = emph;
|
|
271
|
-
InternalHTMLRenderer.prototype.strong = strong;
|
|
272
|
-
InternalHTMLRenderer.prototype.paragraph = paragraph;
|
|
273
|
-
InternalHTMLRenderer.prototype.heading = heading;
|
|
274
|
-
InternalHTMLRenderer.prototype.code = code;
|
|
275
|
-
InternalHTMLRenderer.prototype.code_block = code_block;
|
|
276
|
-
InternalHTMLRenderer.prototype.thematic_break = thematic_break;
|
|
277
|
-
InternalHTMLRenderer.prototype.block_quote = block_quote;
|
|
278
|
-
InternalHTMLRenderer.prototype.list = list;
|
|
279
|
-
InternalHTMLRenderer.prototype.item = item;
|
|
280
|
-
InternalHTMLRenderer.prototype.custom_inline = custom_inline;
|
|
281
|
-
InternalHTMLRenderer.prototype.custom_block = custom_block;
|
|
282
|
-
InternalHTMLRenderer.prototype.esc = _escape.escapeHtmlInText;
|
|
283
|
-
InternalHTMLRenderer.prototype.out = out;
|
|
284
|
-
InternalHTMLRenderer.prototype.tag = tag;
|
|
285
|
-
InternalHTMLRenderer.prototype.attrs = attrs;
|
|
286
|
-
var _default = exports.default = InternalHTMLRenderer;
|
|
287
|
-
//# sourceMappingURL=InternalHTMLRenderer.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"InternalHTMLRenderer.js","names":["_commonmark","require","_escape","reUnsafeProtocol","reSafeDataProtocol","potentiallyUnsafe","url","test","tag","name","attributes","selfclosing","disableTags","buffer","length","i","attribute","undefined","lastOut","InternalHTMLRenderer","options","softbreak","esc","escapeHtmlInText","text","node","out","literal","lit","linebreak","link","entering","attrs","safe","destination","push","title","image","emph","strong","paragraph","grandparent","parent","type","cr","heading","tagName","level","_node$next","_node$next2","next","MESSAGE_CONVERSION_LINE_BREAK","unlink","code","code_block","_isFenced","_node$next3","_node$next4","info","pattern","RegExp","replaced","replaceAll","thematic_break","_node$next5","_node$next6","block_quote","list","listType","start","listStart","toString","item","html_inline","html_block","custom_inline","onEnter","onExit","custom_block","s","att","sourcepos","pos","String","prototype","Object","create","HtmlRenderer","_default","exports","default"],"sources":["../../../../../src/utils/formatString/markdown/InternalHTMLRenderer.ts"],"sourcesContent":["// @ts-nocheck\n// /* eslint-disable camelcase */\n// noinspection JSUnusedGlobalSymbols,JSUnresolvedReference\n\nimport { HtmlRenderer } from 'commonmark';\nimport { escapeHtmlInText, MESSAGE_CONVERSION_LINE_BREAK } from '../../escape';\n\nconst reUnsafeProtocol = /^javascript:|vbscript:|file:|data:/i;\nconst reSafeDataProtocol = /^data:image\\/(?:png|gif|jpeg|webp)/i;\n\nfunction potentiallyUnsafe(url) {\n return reUnsafeProtocol.test(url) && !reSafeDataProtocol.test(url);\n}\n\n// Helper function to produce an HTML tag.\nfunction tag(name, attributes, selfclosing) {\n if (this.disableTags > 0) {\n return;\n }\n this.buffer += `<${name}`;\n if (attributes && attributes.length > 0) {\n let i = 0;\n let attribute;\n // eslint-disable-next-line no-cond-assign\n while ((attribute = attributes[i]) !== undefined) {\n this.buffer += ` ${attribute[0]}=\"${attribute[1]}\"`;\n i++;\n }\n }\n if (selfclosing) {\n this.buffer += ' /';\n }\n this.buffer += '>';\n this.lastOut = '>';\n}\n\nfunction InternalHTMLRenderer(options) {\n // eslint-disable-next-line no-param-reassign\n options = options || {};\n // by default, soft breaks are rendered as newlines in HTML\n // eslint-disable-next-line no-param-reassign\n options.softbreak = options.softbreak || '';\n // set to \"<br />\" to make them hard breaks\n // set to \" \" if you want to ignore line wrapping in source\n this.esc = escapeHtmlInText;\n // escape html with a custom function\n // else use escapeXml\n\n this.disableTags = 0;\n this.lastOut = '\\n';\n this.options = options;\n}\n\n/* Node methods */\n\nfunction text(node) {\n this.out(node.literal);\n}\n\nfunction softbreak() {\n this.lit('\\n');\n}\n\nfunction linebreak() {\n this.lit('\\n');\n}\n\nfunction link(node, entering) {\n const attributes = this.attrs(node);\n if (entering) {\n if (!(this.options.safe && potentiallyUnsafe(node.destination))) {\n attributes.push(['href', this.esc(node.destination)]);\n }\n if (node.title) {\n attributes.push(['title', this.esc(node.title)]);\n }\n this.tag('a', attributes);\n } else {\n this.tag('/a');\n }\n}\n\nfunction image(node, entering) {\n if (entering) {\n if (this.disableTags === 0) {\n if (this.options.safe && potentiallyUnsafe(node.destination)) {\n this.lit('<img style=\"max-width: 100%\" src=\"\"');\n } else {\n this.lit(`<img src=\"${this.esc(node.destination)}\"`);\n }\n }\n this.disableTags += 1;\n } else {\n this.disableTags -= 1;\n if (this.disableTags === 0) {\n if (node.title) {\n this.lit(` title=\"${this.esc(node.title)}`);\n }\n this.lit('/>');\n }\n }\n}\n\nfunction emph(node, entering) {\n this.tag(entering ? 'em' : '/em');\n}\n\nfunction strong(node, entering) {\n this.tag(entering ? 'strong' : '/strong');\n}\n\nfunction paragraph(node) {\n const grandparent = node.parent.parent;\n\n if (grandparent !== null && grandparent.type === 'list') {\n return;\n }\n\n this.cr();\n}\n\nfunction heading(node, entering) {\n const tagName = `h${node.level}`;\n const attributes = this.attrs(node);\n if (entering) {\n this.cr();\n this.tag(tagName, attributes);\n\n // Removes line break after heading.\n // That line break would be one too many, since headings are block-level elements, and thus already cause a line break behind them.\n if (\n node.next?.type === 'html_block' &&\n node.next?.literal === MESSAGE_CONVERSION_LINE_BREAK\n ) {\n node.next.unlink();\n }\n } else {\n this.tag(`/${tagName}`);\n this.cr();\n }\n}\n\nfunction code(node) {\n this.tag('code class=\"inline-code\"');\n this.out(node.literal);\n this.tag('/code');\n}\n\nfunction code_block(node) {\n if (node._isFenced) {\n this.tag('pre', [['language', node.info]]);\n this.tag('code');\n\n // Removes trailing and leading line break from the code block content.\n const pattern = new RegExp(\n `^(${MESSAGE_CONVERSION_LINE_BREAK}|\\\\n)+|(${MESSAGE_CONVERSION_LINE_BREAK}|\\\\n)+$`,\n 'g',\n );\n const replaced = node.literal.replaceAll(pattern, '');\n this.out(replaced);\n\n this.tag('/code');\n this.tag('/pre');\n\n // Removes line break after code block.\n // That line break would be one too many, since code blocks are block-level elements, and thus already cause a line break behind them.\n if (\n node.next?.type === 'html_block' &&\n node.next?.literal === MESSAGE_CONVERSION_LINE_BREAK\n ) {\n // eslint-disable-next-line no-param-reassign\n node.next.literal = '';\n }\n } else {\n this.out(node.literal);\n }\n}\n\nfunction thematic_break(node) {\n // Removes line break after thematic break.\n // That line break would be one too many, since thematic breaks are block-level elements, and thus already cause a line break behind them.\n if (node.next?.type === 'html_block' && node.next?.literal === MESSAGE_CONVERSION_LINE_BREAK) {\n // eslint-disable-next-line no-param-reassign\n node.next.literal = '';\n }\n\n const attributes = this.attrs(node);\n this.cr();\n this.tag('hr', attributes, true);\n this.cr();\n}\n\nfunction block_quote(node, entering) {\n const attributes = this.attrs(node);\n if (entering) {\n this.cr();\n this.tag('blockquote', attributes);\n this.cr();\n } else {\n this.cr();\n this.tag('/blockquote');\n this.cr();\n }\n}\n\nfunction list(node, entering) {\n const tagName = node.listType === 'bullet' ? 'ul' : 'ol';\n const attributes = this.attrs(node);\n\n if (entering) {\n const start = node.listStart;\n if (start !== null && start !== 1) {\n attributes.push(['start', start.toString()]);\n }\n this.cr();\n this.tag(tagName, attributes);\n this.cr();\n } else {\n this.cr();\n this.tag(`/${tagName}`);\n this.cr();\n }\n}\n\nfunction item(node, entering) {\n const attributes = this.attrs(node);\n if (entering) {\n this.tag('li', attributes);\n } else {\n this.tag('/li');\n this.cr();\n }\n}\n\nfunction html_inline(node) {\n if (this.options.safe) {\n this.lit('<!-- raw HTML omitted -->');\n } else {\n this.lit(node.literal);\n }\n}\n\nfunction html_block(node) {\n this.cr();\n if (this.options.safe) {\n this.lit('<!-- raw HTML omitted -->');\n } else {\n this.lit(node.literal);\n }\n this.cr();\n}\n\nfunction custom_inline(node, entering) {\n if (entering && node.onEnter) {\n this.lit(node.onEnter);\n } else if (!entering && node.onExit) {\n this.lit(node.onExit);\n }\n}\n\nfunction custom_block(node, entering) {\n this.cr();\n if (entering && node.onEnter) {\n this.lit(node.onEnter);\n } else if (!entering && node.onExit) {\n this.lit(node.onExit);\n }\n this.cr();\n}\n\n/* Helper methods */\n\nfunction out(s) {\n this.lit(this.esc(s));\n}\n\nfunction attrs(node) {\n const att = [];\n if (this.options.sourcepos) {\n const pos = node.sourcepos;\n if (pos) {\n att.push([\n 'data-sourcepos',\n `${String(pos[0][0])}:${String(pos[0][1])}-${String(pos[1][0])}:${String(\n pos[1][1],\n )}`,\n ]);\n }\n }\n return att;\n}\n\n// quick browser-compatible inheritance\nInternalHTMLRenderer.prototype = Object.create(HtmlRenderer.prototype);\n\nInternalHTMLRenderer.prototype.text = text;\nInternalHTMLRenderer.prototype.html_inline = html_inline;\nInternalHTMLRenderer.prototype.html_block = html_block;\nInternalHTMLRenderer.prototype.softbreak = softbreak;\nInternalHTMLRenderer.prototype.linebreak = linebreak;\nInternalHTMLRenderer.prototype.link = link;\nInternalHTMLRenderer.prototype.image = image;\nInternalHTMLRenderer.prototype.emph = emph;\nInternalHTMLRenderer.prototype.strong = strong;\nInternalHTMLRenderer.prototype.paragraph = paragraph;\nInternalHTMLRenderer.prototype.heading = heading;\nInternalHTMLRenderer.prototype.code = code;\nInternalHTMLRenderer.prototype.code_block = code_block;\nInternalHTMLRenderer.prototype.thematic_break = thematic_break;\nInternalHTMLRenderer.prototype.block_quote = block_quote;\nInternalHTMLRenderer.prototype.list = list;\nInternalHTMLRenderer.prototype.item = item;\nInternalHTMLRenderer.prototype.custom_inline = custom_inline;\nInternalHTMLRenderer.prototype.custom_block = custom_block;\n\nInternalHTMLRenderer.prototype.esc = escapeHtmlInText;\n\nInternalHTMLRenderer.prototype.out = out;\nInternalHTMLRenderer.prototype.tag = tag;\nInternalHTMLRenderer.prototype.attrs = attrs;\n\nexport default InternalHTMLRenderer;\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1,86 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.parseMarkdownTables = void 0;
|
|
7
|
-
var _sync = require("csv-stringify/browser/esm/sync");
|
|
8
|
-
var _marked = require("marked");
|
|
9
|
-
// TODO Implement all markdown parsing this way.
|
|
10
|
-
// This parses tables, that follow the Github-Flavored-Markdown specification.
|
|
11
|
-
const parseMarkdownTables = text => {
|
|
12
|
-
let newText = text;
|
|
13
|
-
const tableTokens = [];
|
|
14
|
-
|
|
15
|
-
// marked.parse parses all markdown in the provided text and returns the result.
|
|
16
|
-
// The parsed result isn't needed. Instead, the parsed table tokens are collected.
|
|
17
|
-
_marked.marked.parse(newText, {
|
|
18
|
-
walkTokens: token => {
|
|
19
|
-
if (token.type === 'table') {
|
|
20
|
-
tableTokens.push(token);
|
|
21
|
-
}
|
|
22
|
-
}
|
|
23
|
-
});
|
|
24
|
-
const tables = [];
|
|
25
|
-
|
|
26
|
-
// The collected table tokens are used to replace the raw Markdown table with the corresponding bb-code table.
|
|
27
|
-
// If the table was directly parsed to html, other markdown replacements within the table wouldn't work.
|
|
28
|
-
tableTokens.forEach((tableToken, index) => {
|
|
29
|
-
var _tableToken$header, _tableToken$rows;
|
|
30
|
-
let tableHtml = '';
|
|
31
|
-
const tableArray = [];
|
|
32
|
-
const id = `message-table-${index}`;
|
|
33
|
-
tableHtml += `<table id="${id}">`;
|
|
34
|
-
if (((_tableToken$header = tableToken.header) === null || _tableToken$header === void 0 ? void 0 : _tableToken$header.length) > 0) {
|
|
35
|
-
const rowArray = [];
|
|
36
|
-
tableHtml += '<thead>';
|
|
37
|
-
tableToken.header.forEach(header => {
|
|
38
|
-
rowArray.push(header.text);
|
|
39
|
-
tableHtml += '<th>';
|
|
40
|
-
tableHtml += header.text;
|
|
41
|
-
tableHtml += '</th>';
|
|
42
|
-
});
|
|
43
|
-
tableHtml += '</thead>';
|
|
44
|
-
tableArray.push(rowArray);
|
|
45
|
-
}
|
|
46
|
-
if (((_tableToken$rows = tableToken.rows) === null || _tableToken$rows === void 0 ? void 0 : _tableToken$rows.length) > 0) {
|
|
47
|
-
tableHtml += '<tbody>';
|
|
48
|
-
tableToken.rows.forEach(row => {
|
|
49
|
-
const rowArray = [];
|
|
50
|
-
tableHtml += '<tr>';
|
|
51
|
-
row.forEach(cell => {
|
|
52
|
-
rowArray.push(cell.text);
|
|
53
|
-
tableHtml += '<td>';
|
|
54
|
-
tableHtml += cell.text;
|
|
55
|
-
tableHtml += '</td>';
|
|
56
|
-
});
|
|
57
|
-
tableHtml += '</tr>';
|
|
58
|
-
tableArray.push(rowArray);
|
|
59
|
-
});
|
|
60
|
-
tableHtml += '</tbody>';
|
|
61
|
-
}
|
|
62
|
-
tableHtml += '</table>';
|
|
63
|
-
const csv = (0, _sync.stringify)(tableArray || []);
|
|
64
|
-
tables.push({
|
|
65
|
-
id,
|
|
66
|
-
raw: tableToken.raw,
|
|
67
|
-
csv
|
|
68
|
-
});
|
|
69
|
-
|
|
70
|
-
// This removes all trailing line breaks from the raw table Markdown, except for one.
|
|
71
|
-
// This is done to ensure that the table HTML is followed by the correct number of line breaks.
|
|
72
|
-
const trailingLineBreaksIndex = tableToken.raw.search(/\n+$/);
|
|
73
|
-
const rawTableMarkdown = trailingLineBreaksIndex === -1 ? tableToken.raw : tableToken.raw.slice(0, trailingLineBreaksIndex + 1);
|
|
74
|
-
|
|
75
|
-
// Replaces the raw table + a leading line break with the table HTML.
|
|
76
|
-
// The line break is removed to ensure, that the table context menu is displayed in the same line as the text before the table.
|
|
77
|
-
const hasLeadingLineBreak = newText.includes(`\n${rawTableMarkdown}`);
|
|
78
|
-
newText = newText.replace(`${hasLeadingLineBreak ? '\n' : ''}${rawTableMarkdown}`, tableHtml);
|
|
79
|
-
});
|
|
80
|
-
return {
|
|
81
|
-
html: newText,
|
|
82
|
-
tables
|
|
83
|
-
};
|
|
84
|
-
};
|
|
85
|
-
exports.parseMarkdownTables = parseMarkdownTables;
|
|
86
|
-
//# sourceMappingURL=formatMarkdownTable.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"formatMarkdownTable.js","names":["_sync","require","_marked","parseMarkdownTables","text","newText","tableTokens","marked","parse","walkTokens","token","type","push","tables","forEach","tableToken","index","_tableToken$header","_tableToken$rows","tableHtml","tableArray","id","header","length","rowArray","rows","row","cell","csv","stringify","raw","trailingLineBreaksIndex","search","rawTableMarkdown","slice","hasLeadingLineBreak","includes","replace","html","exports"],"sources":["../../../../../src/utils/formatString/markdown/formatMarkdownTable.ts"],"sourcesContent":["import { stringify } from 'csv-stringify/browser/esm/sync';\nimport { marked, Tokens } from 'marked';\n\nexport type TableObject = {\n id: string;\n raw: string;\n csv: string;\n};\n\n// TODO Implement all markdown parsing this way.\n// This parses tables, that follow the Github-Flavored-Markdown specification.\nexport const parseMarkdownTables = (text: string) => {\n let newText = text;\n const tableTokens: Tokens.Table[] = [];\n\n // marked.parse parses all markdown in the provided text and returns the result.\n // The parsed result isn't needed. Instead, the parsed table tokens are collected.\n marked.parse(newText, {\n walkTokens: (token) => {\n if (token.type === 'table') {\n tableTokens.push(token as Tokens.Table);\n }\n },\n }) as string;\n\n const tables: TableObject[] = [];\n\n // The collected table tokens are used to replace the raw Markdown table with the corresponding bb-code table.\n // If the table was directly parsed to html, other markdown replacements within the table wouldn't work.\n tableTokens.forEach((tableToken, index) => {\n let tableHtml = '';\n const tableArray: string[][] = [];\n\n const id = `message-table-${index}`;\n\n tableHtml += `<table id=\"${id}\">`;\n if (tableToken.header?.length > 0) {\n const rowArray: string[] = [];\n\n tableHtml += '<thead>';\n tableToken.header.forEach((header) => {\n rowArray.push(header.text);\n\n tableHtml += '<th>';\n tableHtml += header.text;\n tableHtml += '</th>';\n });\n tableHtml += '</thead>';\n\n tableArray.push(rowArray);\n }\n if (tableToken.rows?.length > 0) {\n tableHtml += '<tbody>';\n tableToken.rows.forEach((row) => {\n const rowArray: string[] = [];\n\n tableHtml += '<tr>';\n row.forEach((cell) => {\n rowArray.push(cell.text);\n\n tableHtml += '<td>';\n tableHtml += cell.text;\n tableHtml += '</td>';\n });\n tableHtml += '</tr>';\n\n tableArray.push(rowArray);\n });\n tableHtml += '</tbody>';\n }\n tableHtml += '</table>';\n\n const csv = stringify(tableArray || []);\n\n tables.push({\n id,\n raw: tableToken.raw,\n csv,\n });\n\n // This removes all trailing line breaks from the raw table Markdown, except for one.\n // This is done to ensure that the table HTML is followed by the correct number of line breaks.\n const trailingLineBreaksIndex = tableToken.raw.search(/\\n+$/);\n const rawTableMarkdown =\n trailingLineBreaksIndex === -1\n ? tableToken.raw\n : tableToken.raw.slice(0, trailingLineBreaksIndex + 1);\n\n // Replaces the raw table + a leading line break with the table HTML.\n // The line break is removed to ensure, that the table context menu is displayed in the same line as the text before the table.\n const hasLeadingLineBreak = newText.includes(`\\n${rawTableMarkdown}`);\n newText = newText.replace(\n `${hasLeadingLineBreak ? '\\n' : ''}${rawTableMarkdown}`,\n tableHtml,\n );\n });\n\n return {\n html: newText,\n tables,\n };\n};\n"],"mappings":"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","ignoreList":[]}
|