瀏覽代碼

Tidying

main
Rocketsoup 1 年之前
父節點
當前提交
3cf9199fe9
共有 1 個檔案被更改,包括 148 行新增55 行删除
  1. 148
    55
      js/markdown.js

+ 148
- 55
js/markdown.js 查看文件

@@ -1,4 +1,6 @@
1 1
 // TODO: Linked image not parsed correctly.  [![](image.jpg)](link.html)
2
+// TODO: Referenced URL definitions
3
+// TODO: HTML tags probably need better handling. Consider whether interior of matched tags should be interpreted as markdown.
2 4
 // TODO: {.class #cssid lang=fr}
3 5
 //     # Header {.class}
4 6
 //     Header {.class}
@@ -22,7 +24,7 @@ class _MDHAlign {
22 24
 	}
23 25
 
24 26
 	toString() {
25
-		return `_MDHAlign.${this.name}`;
27
+		return `${this.constructor.name}.${this.name}`;
26 28
 	}
27 29
 
28 30
 	static toHTMLAttribute(align) {
@@ -57,23 +59,23 @@ class _MDTokenType {
57 59
 
58 60
 	static META_AnyNonWhitespace = new _MDTokenType('METAAnyNonWhitespace');
59 61
 
60
-	#name;
61
-
62
-	get name() {
63
-		return this.#name;
64
-	}
62
+	/** @var {String} */
63
+	name;
65 64
 
66 65
 	constructor(name) {
67
-		this.#name = name;
66
+		this.name = name;
68 67
 	}
69 68
 
70 69
 	toString() {
71
-		return this.constructor.name + `.${this.#name}`;
70
+		return `${this.constructor.name}.${this.name}`;
72 71
 	}
73 72
 }
74
-class _MDToken {
75 73
 
76
-	/** @var {String} */
74
+class _MDToken {
75
+	/**
76
+	 * The original token string.
77
+	 * @var {String}
78
+	 */
77 79
 	original;
78 80
 	/** @var {_MDTokenType} */
79 81
 	type;
@@ -84,6 +86,13 @@ class _MDToken {
84 86
 	/** @var {_MDHTMLTag|null} */
85 87
 	tag;
86 88
 
89
+	/**
90
+	 * @param {String} original
91
+	 * @param {_MDTokenType} type
92
+	 * @param {String|null} content
93
+	 * @param {String|null} extra
94
+	 * @param {_MDHTMLTag|null} tag
95
+	 */
87 96
 	constructor(original, type, content=null, extra=null, tag=null) {
88 97
 		this.original = original;
89 98
 		this.type = type;
@@ -98,6 +107,13 @@ class _MDToken {
98 107
 
99 108
 
100 109
 class _MDSpan {
110
+	/** @var {String[]} */
111
+	cssClasses = [];
112
+	/** @var {String|null} */
113
+	id = null;
114
+	/** @var {Object} */
115
+	attributes = {};
116
+
101 117
 	/**
102 118
 	 * @param {_MDState} state
103 119
 	 * @returns {String} HTML
@@ -106,6 +122,21 @@ class _MDSpan {
106 122
 		throw new Error(self.constructor.name + ".toHTML not implemented");
107 123
 	}
108 124
 
125
+	htmlAttributes() {
126
+		var html = '';
127
+		if (this.cssClasses.length > 0) {
128
+			html += ` class="${this.cssClasses.join(' ')}"`;
129
+		}
130
+		if (this.id !== null) {
131
+			html += ` id="${this.id}"`;
132
+		}
133
+		for (const name in this.attributes) {
134
+			let value = this.attributes[name];
135
+			html += ` ${name}="${value.replace('"', '"')}"`;
136
+		}
137
+		return html;
138
+	}
139
+
109 140
 	/**
110 141
 	 * @param {_MDSpan[]} spans
111 142
 	 * @param {_MDState} state
@@ -114,9 +145,11 @@ class _MDSpan {
114 145
 		return spans.map((span) => span.toHTML(state)).join("");
115 146
 	}
116 147
 }
148
+
117 149
 class _MDMultiSpan extends _MDSpan {
118 150
 	/** @var {_MDSpan[]} */
119 151
 	content;
152
+
120 153
 	/**
121 154
 	 * @param {_MDSpan[]} content
122 155
 	 */
@@ -124,13 +157,16 @@ class _MDMultiSpan extends _MDSpan {
124 157
 		super();
125 158
 		this.content = content;
126 159
 	}
160
+
127 161
 	toHTML(state) {
128 162
 		return _MDSpan.toHTML(this.content, state);
129 163
 	}
130 164
 }
165
+
131 166
 class _MDTextSpan extends _MDSpan {
132 167
 	/** @param {String} text */
133 168
 	text;
169
+
134 170
 	/**
135 171
 	 * @param {String} text
136 172
 	 */
@@ -138,6 +174,7 @@ class _MDTextSpan extends _MDSpan {
138 174
 		super();
139 175
 		this.text = text;
140 176
 	}
177
+
141 178
 	toHTML(state) {
142 179
 		let html = this.text.replace('<', '&lt;');
143 180
 		let abbrevs = state.abbreviations;
@@ -151,9 +188,11 @@ class _MDTextSpan extends _MDSpan {
151 188
 		return html;
152 189
 	}
153 190
 }
191
+
154 192
 class _MDHTMLSpan extends _MDSpan {
155 193
 	/** @param {String} html */
156 194
 	html;
195
+
157 196
 	/**
158 197
 	 * @param {String} html
159 198
 	 */
@@ -161,10 +200,12 @@ class _MDHTMLSpan extends _MDSpan {
161 200
 		super();
162 201
 		this.html = html;
163 202
 	}
203
+
164 204
 	toHTML(state) {
165 205
 		return this.html;
166 206
 	}
167 207
 }
208
+
168 209
 class _MDLinkSpan extends _MDSpan {
169 210
 	/** @var {String} */
170 211
 	link;
@@ -190,17 +231,21 @@ class _MDLinkSpan extends _MDSpan {
190 231
 			let escapedTarget = this.target.replace('"', '&quot;');
191 232
 			html += ` target="${escapedTarget}"`;
192 233
 		}
234
+		html += this.htmlAttributes();
193 235
 		html += '>' + this.content.toHTML(state) + '</a>';
194 236
 		return html;
195 237
 	}
196 238
 }
239
+
197 240
 class _MDReferencedLinkSpan extends _MDLinkSpan {
198 241
 	/** @var {String} id */
199 242
 	id;
243
+
200 244
 	constructor(id, content) {
201 245
 		super(null, content);
202 246
 		this.id = id;
203 247
 	}
248
+
204 249
 	toHTML(state) {
205 250
 		if (this.link) {
206 251
 			return super.toHTML(state);
@@ -210,9 +255,11 @@ class _MDReferencedLinkSpan extends _MDLinkSpan {
210 255
 		}
211 256
 	}
212 257
 }
258
+
213 259
 class _MDEmphasisSpan extends _MDSpan {
214
-	/** @var {_MDSpan} content */
260
+	/** @var {_MDSpan} */
215 261
 	#content;
262
+
216 263
 	/**
217 264
 	 * @param {_MDSpan} content
218 265
 	 */
@@ -220,14 +267,17 @@ class _MDEmphasisSpan extends _MDSpan {
220 267
 		super();
221 268
 		this.#content = content;
222 269
 	}
270
+
223 271
 	toHTML(state) {
224 272
 		let contentHTML = this.#content.toHTML(state);
225
-		return `<em>${contentHTML}</em>`;
273
+		return `<em${this.htmlAttributes()}>${contentHTML}</em>`;
226 274
 	}
227 275
 }
276
+
228 277
 class _MDStrongSpan extends _MDSpan {
229 278
 	/** @var {_MDSpan} content */
230 279
 	#content;
280
+
231 281
 	/**
232 282
 	 * @param {_MDSpan} content
233 283
 	 */
@@ -235,14 +285,17 @@ class _MDStrongSpan extends _MDSpan {
235 285
 		super();
236 286
 		this.#content = content;
237 287
 	}
288
+
238 289
 	toHTML(state) {
239 290
 		let contentHTML = this.#content.toHTML(state);
240
-		return `<strong>${contentHTML}</strong>`;
291
+		return `<strong${this.htmlAttributes()}>${contentHTML}</strong>`;
241 292
 	}
242 293
 }
294
+
243 295
 class _MDStrikethroughSpan extends _MDSpan {
244 296
 	/** @var {_MDSpan} content */
245 297
 	#content;
298
+
246 299
 	/**
247 300
 	 * @param {_MDSpan} content
248 301
 	 */
@@ -250,14 +303,17 @@ class _MDStrikethroughSpan extends _MDSpan {
250 303
 		super();
251 304
 		this.#content = content;
252 305
 	}
306
+
253 307
 	toHTML(state) {
254 308
 		let contentHTML = this.#content.toHTML(state);
255
-		return `<strike>${contentHTML}</strike>`;
309
+		return `<strike${this.htmlAttributes()}>${contentHTML}</strike>`;
256 310
 	}
257 311
 }
312
+
258 313
 class _MDCodeSpan extends _MDSpan {
259 314
 	/** @var {_MDSpan} content */
260 315
 	#content;
316
+
261 317
 	/**
262 318
 	 * @param {_MDSpan} content
263 319
 	 */
@@ -265,11 +321,13 @@ class _MDCodeSpan extends _MDSpan {
265 321
 		super();
266 322
 		this.#content = content;
267 323
 	}
324
+
268 325
 	toHTML(state) {
269 326
 		let contentHTML = this.#content.toHTML(state);
270
-		return `<code>${contentHTML}</code>`;
327
+		return `<code${this.htmlAttributes()}>${contentHTML}</code>`;
271 328
 	}
272 329
 }
330
+
273 331
 class _MDImageSpan extends _MDSpan {
274 332
 	/** @var {String} */
275 333
 	source;
@@ -277,6 +335,7 @@ class _MDImageSpan extends _MDSpan {
277 335
 	alt;
278 336
 	/** @var {String|null} */
279 337
 	title;
338
+
280 339
 	/**
281 340
 	 * @param {String} source
282 341
 	 */
@@ -286,6 +345,7 @@ class _MDImageSpan extends _MDSpan {
286 345
 		this.alt = alt;
287 346
 		this.title = title;
288 347
 	}
348
+
289 349
 	toHTML(state) {
290 350
 		let escapedSource = this.source.replace('"', '&quot;');
291 351
 		let html = `<img src="${escapedSource}"`;
@@ -297,13 +357,16 @@ class _MDImageSpan extends _MDSpan {
297 357
 			let titleEscaped = this.title.replace('"', '&quot;');
298 358
 			html += ` title="${titleEscaped}"`;
299 359
 		}
360
+		html += this.htmlAttributes();
300 361
 		html += '>';
301 362
 		return html;
302 363
 	}
303 364
 }
365
+
304 366
 class _MDReferencedImageSpan extends _MDImageSpan {
305 367
 	/** @var {String} */
306 368
 	id;
369
+
307 370
 	/**
308 371
 	 * @param {String} id
309 372
 	 */
@@ -311,6 +374,7 @@ class _MDReferencedImageSpan extends _MDImageSpan {
311 374
 		super(null, alt);
312 375
 		this.id = id;
313 376
 	}
377
+
314 378
 	toHTML(state) {
315 379
 		if (this.source) {
316 380
 			return super.toHTML(state);
@@ -321,9 +385,11 @@ class _MDReferencedImageSpan extends _MDImageSpan {
321 385
 		}
322 386
 	}
323 387
 }
388
+
324 389
 class _MDFootnoteReferenceSpan extends _MDSpan {
325 390
 	/** @var {String} */
326 391
 	symbol;
392
+
327 393
 	/**
328 394
 	 * @param {String} symbol
329 395
 	 */
@@ -331,27 +397,9 @@ class _MDFootnoteReferenceSpan extends _MDSpan {
331 397
 		super();
332 398
 		this.symbol = symbol;
333 399
 	}
400
+
334 401
 	toHTML(state) {
335
-		return `<!--FNREF:{${this.symbol}}-->`
336
-	}
337
-}
338
-class _MDAbbreviationSpan extends _MDSpan {
339
-	/** @var {String} */
340
-	abbreviation;
341
-	/** @var {String|null} definition */
342
-	definition;
343
-	/**
344
-	 * @param {String} abbreviation
345
-	 * @param {String|null} definition
346
-	 */
347
-	constructor(abbreviation, definition=null) {
348
-		super();
349
-		this.abbreviation = abbreviation;
350
-		this.definition = definition;
351
-	}
352
-	toHTML(state) {
353
-		let definitionEscaped = this.definition.replace('"', '&quot;');
354
-		return `<abbr title="${definitionEscaped}">${this.abbreviation}</em>`;
402
+		return `<!--FNREF:{${this.symbol}}-->`;
355 403
 	}
356 404
 }
357 405
 
@@ -360,6 +408,13 @@ class _MDAbbreviationSpan extends _MDSpan {
360 408
 
361 409
 
362 410
 class _MDBlock {
411
+	/** @var {String[]} */
412
+	cssClasses = [];
413
+	/** @var {String|null} */
414
+	id = null;
415
+	/** @var {Object} */
416
+	attributes = {};
417
+
363 418
 	/**
364 419
 	 * @param {_MDState} state
365 420
 	 */
@@ -367,6 +422,21 @@ class _MDBlock {
367 422
 		throw new Error(self.constructor.name + ".toHTML not implemented");
368 423
 	}
369 424
 
425
+	htmlAttributes() {
426
+		var html = '';
427
+		if (this.cssClasses.length > 0) {
428
+			html += ` class="${this.cssClasses.join(' ')}"`;
429
+		}
430
+		if (this.id !== null) {
431
+			html += ` id="${this.id}"`;
432
+		}
433
+		for (const name in this.attributes) {
434
+			let value = this.attributes[name];
435
+			html += ` ${name}="${value.replace('"', '&quot;')}"`;
436
+		}
437
+		return html;
438
+	}
439
+
370 440
 	/**
371 441
 	 * @param {_MDBlock[]} blocks
372 442
 	 * @param {_MDState} state
@@ -406,7 +476,7 @@ class _MDParagraphBlock extends _MDBlock {
406 476
 
407 477
 	toHTML(state) {
408 478
 		let contentHTML = this.content.toHTML(state);
409
-		return `<p>${contentHTML}</p>\n`;
479
+		return `<p${this.htmlAttributes()}>${contentHTML}</p>\n`;
410 480
 	}
411 481
 }
412 482
 
@@ -428,13 +498,14 @@ class _MDHeaderBlock extends _MDBlock {
428 498
 
429 499
 	toHTML(state) {
430 500
 		let contentHTML = this.content.toHTML(state);
431
-		return `<h${this.level}>${contentHTML}</h${this.level}>\n`;
501
+		return `<h${this.level}${this.htmlAttributes()}>${contentHTML}</h${this.level}>\n`;
432 502
 	}
433 503
 }
434 504
 
435 505
 class _MDBlockquoteBlock extends _MDBlock {
436 506
 	/** @var {_MDBlock[]} */
437 507
 	content;
508
+
438 509
 	/**
439 510
 	 * @param {_MDBlock[]} content
440 511
 	 */
@@ -442,15 +513,17 @@ class _MDBlockquoteBlock extends _MDBlock {
442 513
 		super();
443 514
 		this.content = content;
444 515
 	}
516
+
445 517
 	toHTML(state) {
446 518
 		let contentHTML = _MDBlock.toHTML(this.content, state);
447
-		return `<blockquote>\n${contentHTML}\n</blockquote>`;
519
+		return `<blockquote${this.htmlAttributes()}>\n${contentHTML}\n</blockquote>`;
448 520
 	}
449 521
 }
450 522
 
451 523
 class _MDUnorderedListBlock extends _MDBlock {
452 524
 	/** @var {_MDListItemBlock[]} */
453 525
 	items;
526
+
454 527
 	/**
455 528
 	 * @param {_MDListItemBlock[]} items
456 529
 	 */
@@ -458,15 +531,17 @@ class _MDUnorderedListBlock extends _MDBlock {
458 531
 		super();
459 532
 		this.items = items;
460 533
 	}
534
+
461 535
 	toHTML(state) {
462 536
 		let contentHTML = _MDBlock.toHTML(this.items, state);
463
-		return `<ul>\n${contentHTML}\n</ul>`;
537
+		return `<ul${this.htmlAttributes()}>\n${contentHTML}\n</ul>`;
464 538
 	}
465 539
 }
466 540
 
467 541
 class _MDOrderedListBlock extends _MDBlock {
468 542
 	/** @var {_MDListItemBlock[]} */
469 543
 	items;
544
+
470 545
 	/**
471 546
 	 * @param {_MDListItemBlock[]} items
472 547
 	 */
@@ -474,9 +549,10 @@ class _MDOrderedListBlock extends _MDBlock {
474 549
 		super();
475 550
 		this.items = items;
476 551
 	}
552
+
477 553
 	toHTML(state) {
478 554
 		let contentHTML = _MDBlock.toHTML(this.items, state);
479
-		return `<ol>\n${contentHTML}\n</ol>`;
555
+		return `<ol${this.htmlAttributes()}>\n${contentHTML}\n</ol>`;
480 556
 	}
481 557
 }
482 558
 
@@ -494,13 +570,14 @@ class _MDListItemBlock extends _MDBlock {
494 570
 
495 571
 	toHTML(state) {
496 572
 		let contentHTML = this.content.toHTML(state);
497
-		return `<li>${contentHTML}</li>`;
573
+		return `<li${this.htmlAttributes()}>${contentHTML}</li>`;
498 574
 	}
499 575
 }
500 576
 
501 577
 class _MDCodeBlock extends _MDBlock {
502 578
 	/** @var {String} */
503 579
 	#code;
580
+
504 581
 	/**
505 582
 	 * @param {String} code
506 583
 	 */
@@ -508,14 +585,15 @@ class _MDCodeBlock extends _MDBlock {
508 585
 		super();
509 586
 		this.#code = code;
510 587
 	}
588
+
511 589
 	toHTML(state) {
512
-		return `<pre><code>${this.#code}</code></pre>`;
590
+		return `<pre${this.htmlAttributes()}><code>${this.#code}</code></pre>`;
513 591
 	}
514 592
 }
515 593
 
516 594
 class _MDHorizontalRuleBlock extends _MDBlock {
517 595
 	toHTML(state) {
518
-		return "<hr>\n";
596
+		return `<hr${this.htmlAttributes()}>\n`;
519 597
 	}
520 598
 }
521 599
 
@@ -524,6 +602,7 @@ class _MDTableCellBlock extends _MDBlock {
524 602
 	#content;
525 603
 	/** @var {_MDHAlign|null} */
526 604
 	align = null;
605
+
527 606
 	/**
528 607
 	 * @param {_MDBlock} content
529 608
 	 */
@@ -531,10 +610,16 @@ class _MDTableCellBlock extends _MDBlock {
531 610
 		super();
532 611
 		this.#content = content;
533 612
 	}
613
+
614
+	htmlAttributes() {
615
+		var html = super.htmlAttributes();
616
+		html += _MDHAlign.toHTMLAttribute(this.align);
617
+		return html;
618
+	}
619
+
534 620
 	toHTML(state) {
535 621
 		let contentHTML = this.#content.toHTML(state);
536
-		let alignAttribute = _MDHAlign.toHTMLAttribute(this.align);
537
-		return `<td${alignAttribute}>${contentHTML}</td>`;
622
+		return `<td${this.htmlAttributes()}>${contentHTML}</td>`;
538 623
 	}
539 624
 }
540 625
 
@@ -549,6 +634,7 @@ class _MDTableHeaderCellBlock extends _MDTableCellBlock {
549 634
 class _MDTableRowBlock extends _MDBlock {
550 635
 	/** @var {_MDTableCellBlock[]|_MDTableHeaderCellBlock[]} */
551 636
 	#cells;
637
+
552 638
 	/**
553 639
 	 * @param {_MDTableCellBlock[]|_MDTableHeaderCellBlock[]} cells
554 640
 	 */
@@ -556,6 +642,7 @@ class _MDTableRowBlock extends _MDBlock {
556 642
 		super();
557 643
 		this.#cells = cells;
558 644
 	}
645
+
559 646
 	/**
560 647
 	 * @param {_MDHAlign[]} alignments
561 648
 	 */
@@ -566,9 +653,10 @@ class _MDTableRowBlock extends _MDBlock {
566 653
 			cell.align = align;
567 654
 		}
568 655
 	}
656
+
569 657
 	toHTML(state) {
570 658
 		let cellsHTML = _MDBlock.toHTML(this.#cells, state);
571
-		return `<tr>\n${cellsHTML}\n</tr>`;
659
+		return `<tr${this.htmlAttributes()}>\n${cellsHTML}\n</tr>`;
572 660
 	}
573 661
 }
574 662
 
@@ -577,6 +665,7 @@ class _MDTableBlock extends _MDBlock {
577 665
 	#headerRow;
578 666
 	/** @var {_MDTableRowBlock[]} */
579 667
 	#bodyRows;
668
+
580 669
 	/**
581 670
 	 * @param {_MDTableRowBlock} headerRow
582 671
 	 * @param {_MDTableRowBlock[]} bodyRows
@@ -586,16 +675,18 @@ class _MDTableBlock extends _MDBlock {
586 675
 		this.#headerRow = headerRow;
587 676
 		this.#bodyRows = bodyRows;
588 677
 	}
678
+
589 679
 	toHTML(state) {
590 680
 		let headerRowHTML = this.#headerRow.toHTML(state);
591 681
 		let bodyRowsHTML = _MDBlock.toHTML(this.#bodyRows, state);
592
-		return `<table>\n<thead>\n${headerRowHTML}\n</thead>\n<tbody>\n${bodyRowsHTML}\n</tbody>\n</table>`;
682
+		return `<table${this.htmlAttributes()}>\n<thead>\n${headerRowHTML}\n</thead>\n<tbody>\n${bodyRowsHTML}\n</tbody>\n</table>`;
593 683
 	}
594 684
 }
595 685
 
596 686
 class _MDDefinitionListBlock extends _MDBlock {
597 687
 	/** @var {_MDBlock[]} */
598 688
 	#content;
689
+
599 690
 	/**
600 691
 	 * @param {_MDBlock[]} content
601 692
 	 */
@@ -603,15 +694,17 @@ class _MDDefinitionListBlock extends _MDBlock {
603 694
 		super();
604 695
 		this.#content = content;
605 696
 	}
697
+
606 698
 	toHTML(state) {
607 699
 		let contentHTML = _MDBlock.toHTML(this.#content, state);
608
-		return `<dl>\n${contentHTML}\n</dl>`;
700
+		return `<dl${this.htmlAttributes()}>\n${contentHTML}\n</dl>`;
609 701
 	}
610 702
 }
611 703
 
612 704
 class _MDDefinitionTermBlock extends _MDBlock {
613 705
 	/** @var {_MDBlock} */
614 706
 	#content;
707
+
615 708
 	/**
616 709
 	 * @param {_MDBlock} content
617 710
 	 */
@@ -619,15 +712,17 @@ class _MDDefinitionTermBlock extends _MDBlock {
619 712
 		super();
620 713
 		this.#content = content;
621 714
 	}
715
+
622 716
 	toHTML(state) {
623 717
 		let contentHTML = this.#content.toHTML(state);
624
-		return `<dt>${contentHTML}</dt>`;
718
+		return `<dt${this.htmlAttributes()}>${contentHTML}</dt>`;
625 719
 	}
626 720
 }
627 721
 
628 722
 class _MDDefinitionDefinitionBlock extends _MDBlock {
629 723
 	/** @var {_MDBlock} */
630 724
 	#content;
725
+
631 726
 	/**
632 727
 	 * @param {_MDBlock} content
633 728
 	 */
@@ -635,15 +730,17 @@ class _MDDefinitionDefinitionBlock extends _MDBlock {
635 730
 		super();
636 731
 		this.#content = content;
637 732
 	}
733
+
638 734
 	toHTML(state) {
639 735
 		let contentHTML = this.#content.toHTML(state);
640
-		return `<dd>${contentHTML}</dd>`;
736
+		return `<dd${this.htmlAttributes()}>${contentHTML}</dd>`;
641 737
 	}
642 738
 }
643 739
 
644 740
 class _MDInlineBlock extends _MDBlock {
645 741
 	/** @var {_MDSpan[]} */
646 742
 	#content;
743
+
647 744
 	/**
648 745
 	 * @param {_MDSpan[]} content
649 746
 	 */
@@ -758,10 +855,6 @@ class _MDState {
758 855
 	}
759 856
 }
760 857
 
761
-class MDConfig {
762
-
763
-}
764
-
765 858
 class Markdown {
766 859
 	/**
767 860
 	 * @param {String} line
@@ -1781,7 +1874,7 @@ class Markdown {
1781 1874
 	 * @param  {String} markdown
1782 1875
 	 * @returns {String} HTML
1783 1876
 	 */
1784
-	static toHTML(markdown, config=new MDConfig()) {
1877
+	static toHTML(markdown) {
1785 1878
 		var state = new _MDState();
1786 1879
 		let lines = markdown.split(/(?:\n|\r|\r\n)/);
1787 1880
 		state.lines = lines;

Loading…
取消
儲存