Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
Avatar for KuCalc : devops.
Download
50665 views
1
// CodeMirror, copyright (c) by Marijn Haverbeke and others
2
// Distributed under an MIT license: http://codemirror.net/LICENSE
3
4
(function() {
5
var mode = CodeMirror.getMode({tabSize: 4}, "markdown");
6
function MT(name) { test.mode(name, mode, Array.prototype.slice.call(arguments, 1)); }
7
var modeHighlightFormatting = CodeMirror.getMode({tabSize: 4}, {name: "markdown", highlightFormatting: true});
8
function FT(name) { test.mode(name, modeHighlightFormatting, Array.prototype.slice.call(arguments, 1)); }
9
10
FT("formatting_emAsterisk",
11
"[em&formatting&formatting-em *][em foo][em&formatting&formatting-em *]");
12
13
FT("formatting_emUnderscore",
14
"[em&formatting&formatting-em _][em foo][em&formatting&formatting-em _]");
15
16
FT("formatting_strongAsterisk",
17
"[strong&formatting&formatting-strong **][strong foo][strong&formatting&formatting-strong **]");
18
19
FT("formatting_strongUnderscore",
20
"[strong&formatting&formatting-strong __][strong foo][strong&formatting&formatting-strong __]");
21
22
FT("formatting_codeBackticks",
23
"[comment&formatting&formatting-code `][comment foo][comment&formatting&formatting-code `]");
24
25
FT("formatting_doubleBackticks",
26
"[comment&formatting&formatting-code ``][comment foo ` bar][comment&formatting&formatting-code ``]");
27
28
FT("formatting_atxHeader",
29
"[header&header-1&formatting&formatting-header&formatting-header-1 #][header&header-1 foo # bar ][header&header-1&formatting&formatting-header&formatting-header-1 #]");
30
31
FT("formatting_setextHeader",
32
"foo",
33
"[header&header-1&formatting&formatting-header&formatting-header-1 =]");
34
35
FT("formatting_blockquote",
36
"[quote&quote-1&formatting&formatting-quote&formatting-quote-1 > ][quote&quote-1 foo]");
37
38
FT("formatting_list",
39
"[variable-2&formatting&formatting-list&formatting-list-ul - ][variable-2 foo]");
40
FT("formatting_list",
41
"[variable-2&formatting&formatting-list&formatting-list-ol 1. ][variable-2 foo]");
42
43
FT("formatting_link",
44
"[link&formatting&formatting-link [][link foo][link&formatting&formatting-link ]]][string&formatting&formatting-link-string (][string http://example.com/][string&formatting&formatting-link-string )]");
45
46
FT("formatting_linkReference",
47
"[link&formatting&formatting-link [][link foo][link&formatting&formatting-link ]]][string&formatting&formatting-link-string [][string bar][string&formatting&formatting-link-string ]]]",
48
"[link&formatting&formatting-link [][link bar][link&formatting&formatting-link ]]:] [string http://example.com/]");
49
50
FT("formatting_linkWeb",
51
"[link&formatting&formatting-link <][link http://example.com/][link&formatting&formatting-link >]");
52
53
FT("formatting_linkEmail",
54
"[link&formatting&formatting-link <][link [email protected]][link&formatting&formatting-link >]");
55
56
FT("formatting_escape",
57
"[formatting-escape \\*]");
58
59
MT("plainText",
60
"foo");
61
62
// Don't style single trailing space
63
MT("trailingSpace1",
64
"foo ");
65
66
// Two or more trailing spaces should be styled with line break character
67
MT("trailingSpace2",
68
"foo[trailing-space-a ][trailing-space-new-line ]");
69
70
MT("trailingSpace3",
71
"foo[trailing-space-a ][trailing-space-b ][trailing-space-new-line ]");
72
73
MT("trailingSpace4",
74
"foo[trailing-space-a ][trailing-space-b ][trailing-space-a ][trailing-space-new-line ]");
75
76
// Code blocks using 4 spaces (regardless of CodeMirror.tabSize value)
77
MT("codeBlocksUsing4Spaces",
78
" [comment foo]");
79
80
// Code blocks using 4 spaces with internal indentation
81
MT("codeBlocksUsing4SpacesIndentation",
82
" [comment bar]",
83
" [comment hello]",
84
" [comment world]",
85
" [comment foo]",
86
"bar");
87
88
// Code blocks using 4 spaces with internal indentation
89
MT("codeBlocksUsing4SpacesIndentation",
90
" foo",
91
" [comment bar]",
92
" [comment hello]",
93
" [comment world]");
94
95
// Code blocks should end even after extra indented lines
96
MT("codeBlocksWithTrailingIndentedLine",
97
" [comment foo]",
98
" [comment bar]",
99
" [comment baz]",
100
" ",
101
"hello");
102
103
// Code blocks using 1 tab (regardless of CodeMirror.indentWithTabs value)
104
MT("codeBlocksUsing1Tab",
105
"\t[comment foo]");
106
107
// Inline code using backticks
108
MT("inlineCodeUsingBackticks",
109
"foo [comment `bar`]");
110
111
// Block code using single backtick (shouldn't work)
112
MT("blockCodeSingleBacktick",
113
"[comment `]",
114
"foo",
115
"[comment `]");
116
117
// Unclosed backticks
118
// Instead of simply marking as CODE, it would be nice to have an
119
// incomplete flag for CODE, that is styled slightly different.
120
MT("unclosedBackticks",
121
"foo [comment `bar]");
122
123
// Per documentation: "To include a literal backtick character within a
124
// code span, you can use multiple backticks as the opening and closing
125
// delimiters"
126
MT("doubleBackticks",
127
"[comment ``foo ` bar``]");
128
129
// Tests based on Dingus
130
// http://daringfireball.net/projects/markdown/dingus
131
//
132
// Multiple backticks within an inline code block
133
MT("consecutiveBackticks",
134
"[comment `foo```bar`]");
135
136
// Multiple backticks within an inline code block with a second code block
137
MT("consecutiveBackticks",
138
"[comment `foo```bar`] hello [comment `world`]");
139
140
// Unclosed with several different groups of backticks
141
MT("unclosedBackticks",
142
"[comment ``foo ``` bar` hello]");
143
144
// Closed with several different groups of backticks
145
MT("closedBackticks",
146
"[comment ``foo ``` bar` hello``] world");
147
148
// atx headers
149
// http://daringfireball.net/projects/markdown/syntax#header
150
151
MT("atxH1",
152
"[header&header-1 # foo]");
153
154
MT("atxH2",
155
"[header&header-2 ## foo]");
156
157
MT("atxH3",
158
"[header&header-3 ### foo]");
159
160
MT("atxH4",
161
"[header&header-4 #### foo]");
162
163
MT("atxH5",
164
"[header&header-5 ##### foo]");
165
166
MT("atxH6",
167
"[header&header-6 ###### foo]");
168
169
// H6 - 7x '#' should still be H6, per Dingus
170
// http://daringfireball.net/projects/markdown/dingus
171
MT("atxH6NotH7",
172
"[header&header-6 ####### foo]");
173
174
// Inline styles should be parsed inside headers
175
MT("atxH1inline",
176
"[header&header-1 # foo ][header&header-1&em *bar*]");
177
178
// Setext headers - H1, H2
179
// Per documentation, "Any number of underlining =’s or -’s will work."
180
// http://daringfireball.net/projects/markdown/syntax#header
181
// Ideally, the text would be marked as `header` as well, but this is
182
// not really feasible at the moment. So, instead, we're testing against
183
// what works today, to avoid any regressions.
184
//
185
// Check if single underlining = works
186
MT("setextH1",
187
"foo",
188
"[header&header-1 =]");
189
190
// Check if 3+ ='s work
191
MT("setextH1",
192
"foo",
193
"[header&header-1 ===]");
194
195
// Check if single underlining - works
196
MT("setextH2",
197
"foo",
198
"[header&header-2 -]");
199
200
// Check if 3+ -'s work
201
MT("setextH2",
202
"foo",
203
"[header&header-2 ---]");
204
205
// Single-line blockquote with trailing space
206
MT("blockquoteSpace",
207
"[quote&quote-1 > foo]");
208
209
// Single-line blockquote
210
MT("blockquoteNoSpace",
211
"[quote&quote-1 >foo]");
212
213
// No blank line before blockquote
214
MT("blockquoteNoBlankLine",
215
"foo",
216
"[quote&quote-1 > bar]");
217
218
// Nested blockquote
219
MT("blockquoteSpace",
220
"[quote&quote-1 > foo]",
221
"[quote&quote-1 >][quote&quote-2 > foo]",
222
"[quote&quote-1 >][quote&quote-2 >][quote&quote-3 > foo]");
223
224
// Single-line blockquote followed by normal paragraph
225
MT("blockquoteThenParagraph",
226
"[quote&quote-1 >foo]",
227
"",
228
"bar");
229
230
// Multi-line blockquote (lazy mode)
231
MT("multiBlockquoteLazy",
232
"[quote&quote-1 >foo]",
233
"[quote&quote-1 bar]");
234
235
// Multi-line blockquote followed by normal paragraph (lazy mode)
236
MT("multiBlockquoteLazyThenParagraph",
237
"[quote&quote-1 >foo]",
238
"[quote&quote-1 bar]",
239
"",
240
"hello");
241
242
// Multi-line blockquote (non-lazy mode)
243
MT("multiBlockquote",
244
"[quote&quote-1 >foo]",
245
"[quote&quote-1 >bar]");
246
247
// Multi-line blockquote followed by normal paragraph (non-lazy mode)
248
MT("multiBlockquoteThenParagraph",
249
"[quote&quote-1 >foo]",
250
"[quote&quote-1 >bar]",
251
"",
252
"hello");
253
254
// Check list types
255
256
MT("listAsterisk",
257
"foo",
258
"bar",
259
"",
260
"[variable-2 * foo]",
261
"[variable-2 * bar]");
262
263
MT("listPlus",
264
"foo",
265
"bar",
266
"",
267
"[variable-2 + foo]",
268
"[variable-2 + bar]");
269
270
MT("listDash",
271
"foo",
272
"bar",
273
"",
274
"[variable-2 - foo]",
275
"[variable-2 - bar]");
276
277
MT("listNumber",
278
"foo",
279
"bar",
280
"",
281
"[variable-2 1. foo]",
282
"[variable-2 2. bar]");
283
284
// Lists require a preceding blank line (per Dingus)
285
MT("listBogus",
286
"foo",
287
"1. bar",
288
"2. hello");
289
290
// List after header
291
MT("listAfterHeader",
292
"[header&header-1 # foo]",
293
"[variable-2 - bar]");
294
295
// Formatting in lists (*)
296
MT("listAsteriskFormatting",
297
"[variable-2 * ][variable-2&em *foo*][variable-2 bar]",
298
"[variable-2 * ][variable-2&strong **foo**][variable-2 bar]",
299
"[variable-2 * ][variable-2&strong **][variable-2&em&strong *foo**][variable-2&em *][variable-2 bar]",
300
"[variable-2 * ][variable-2&comment `foo`][variable-2 bar]");
301
302
// Formatting in lists (+)
303
MT("listPlusFormatting",
304
"[variable-2 + ][variable-2&em *foo*][variable-2 bar]",
305
"[variable-2 + ][variable-2&strong **foo**][variable-2 bar]",
306
"[variable-2 + ][variable-2&strong **][variable-2&em&strong *foo**][variable-2&em *][variable-2 bar]",
307
"[variable-2 + ][variable-2&comment `foo`][variable-2 bar]");
308
309
// Formatting in lists (-)
310
MT("listDashFormatting",
311
"[variable-2 - ][variable-2&em *foo*][variable-2 bar]",
312
"[variable-2 - ][variable-2&strong **foo**][variable-2 bar]",
313
"[variable-2 - ][variable-2&strong **][variable-2&em&strong *foo**][variable-2&em *][variable-2 bar]",
314
"[variable-2 - ][variable-2&comment `foo`][variable-2 bar]");
315
316
// Formatting in lists (1.)
317
MT("listNumberFormatting",
318
"[variable-2 1. ][variable-2&em *foo*][variable-2 bar]",
319
"[variable-2 2. ][variable-2&strong **foo**][variable-2 bar]",
320
"[variable-2 3. ][variable-2&strong **][variable-2&em&strong *foo**][variable-2&em *][variable-2 bar]",
321
"[variable-2 4. ][variable-2&comment `foo`][variable-2 bar]");
322
323
// Paragraph lists
324
MT("listParagraph",
325
"[variable-2 * foo]",
326
"",
327
"[variable-2 * bar]");
328
329
// Multi-paragraph lists
330
//
331
// 4 spaces
332
MT("listMultiParagraph",
333
"[variable-2 * foo]",
334
"",
335
"[variable-2 * bar]",
336
"",
337
" [variable-2 hello]");
338
339
// 4 spaces, extra blank lines (should still be list, per Dingus)
340
MT("listMultiParagraphExtra",
341
"[variable-2 * foo]",
342
"",
343
"[variable-2 * bar]",
344
"",
345
"",
346
" [variable-2 hello]");
347
348
// 4 spaces, plus 1 space (should still be list, per Dingus)
349
MT("listMultiParagraphExtraSpace",
350
"[variable-2 * foo]",
351
"",
352
"[variable-2 * bar]",
353
"",
354
" [variable-2 hello]",
355
"",
356
" [variable-2 world]");
357
358
// 1 tab
359
MT("listTab",
360
"[variable-2 * foo]",
361
"",
362
"[variable-2 * bar]",
363
"",
364
"\t[variable-2 hello]");
365
366
// No indent
367
MT("listNoIndent",
368
"[variable-2 * foo]",
369
"",
370
"[variable-2 * bar]",
371
"",
372
"hello");
373
374
// Blockquote
375
MT("blockquote",
376
"[variable-2 * foo]",
377
"",
378
"[variable-2 * bar]",
379
"",
380
" [variable-2&quote&quote-1 > hello]");
381
382
// Code block
383
MT("blockquoteCode",
384
"[variable-2 * foo]",
385
"",
386
"[variable-2 * bar]",
387
"",
388
" [comment > hello]",
389
"",
390
" [variable-2 world]");
391
392
// Code block followed by text
393
MT("blockquoteCodeText",
394
"[variable-2 * foo]",
395
"",
396
" [variable-2 bar]",
397
"",
398
" [comment hello]",
399
"",
400
" [variable-2 world]");
401
402
// Nested list
403
404
MT("listAsteriskNested",
405
"[variable-2 * foo]",
406
"",
407
" [variable-3 * bar]");
408
409
MT("listPlusNested",
410
"[variable-2 + foo]",
411
"",
412
" [variable-3 + bar]");
413
414
MT("listDashNested",
415
"[variable-2 - foo]",
416
"",
417
" [variable-3 - bar]");
418
419
MT("listNumberNested",
420
"[variable-2 1. foo]",
421
"",
422
" [variable-3 2. bar]");
423
424
MT("listMixed",
425
"[variable-2 * foo]",
426
"",
427
" [variable-3 + bar]",
428
"",
429
" [keyword - hello]",
430
"",
431
" [variable-2 1. world]");
432
433
MT("listBlockquote",
434
"[variable-2 * foo]",
435
"",
436
" [variable-3 + bar]",
437
"",
438
" [quote&quote-1&variable-3 > hello]");
439
440
MT("listCode",
441
"[variable-2 * foo]",
442
"",
443
" [variable-3 + bar]",
444
"",
445
" [comment hello]");
446
447
// Code with internal indentation
448
MT("listCodeIndentation",
449
"[variable-2 * foo]",
450
"",
451
" [comment bar]",
452
" [comment hello]",
453
" [comment world]",
454
" [comment foo]",
455
" [variable-2 bar]");
456
457
// List nesting edge cases
458
MT("listNested",
459
"[variable-2 * foo]",
460
"",
461
" [variable-3 * bar]",
462
"",
463
" [variable-2 hello]"
464
);
465
MT("listNested",
466
"[variable-2 * foo]",
467
"",
468
" [variable-3 * bar]",
469
"",
470
" [variable-3 * foo]"
471
);
472
473
// Code followed by text
474
MT("listCodeText",
475
"[variable-2 * foo]",
476
"",
477
" [comment bar]",
478
"",
479
"hello");
480
481
// Following tests directly from official Markdown documentation
482
// http://daringfireball.net/projects/markdown/syntax#hr
483
484
MT("hrSpace",
485
"[hr * * *]");
486
487
MT("hr",
488
"[hr ***]");
489
490
MT("hrLong",
491
"[hr *****]");
492
493
MT("hrSpaceDash",
494
"[hr - - -]");
495
496
MT("hrDashLong",
497
"[hr ---------------------------------------]");
498
499
// Inline link with title
500
MT("linkTitle",
501
"[link [[foo]]][string (http://example.com/ \"bar\")] hello");
502
503
// Inline link without title
504
MT("linkNoTitle",
505
"[link [[foo]]][string (http://example.com/)] bar");
506
507
// Inline link with image
508
MT("linkImage",
509
"[link [[][tag ![[foo]]][string (http://example.com/)][link ]]][string (http://example.com/)] bar");
510
511
// Inline link with Em
512
MT("linkEm",
513
"[link [[][link&em *foo*][link ]]][string (http://example.com/)] bar");
514
515
// Inline link with Strong
516
MT("linkStrong",
517
"[link [[][link&strong **foo**][link ]]][string (http://example.com/)] bar");
518
519
// Inline link with EmStrong
520
MT("linkEmStrong",
521
"[link [[][link&strong **][link&em&strong *foo**][link&em *][link ]]][string (http://example.com/)] bar");
522
523
// Image with title
524
MT("imageTitle",
525
"[tag ![[foo]]][string (http://example.com/ \"bar\")] hello");
526
527
// Image without title
528
MT("imageNoTitle",
529
"[tag ![[foo]]][string (http://example.com/)] bar");
530
531
// Image with asterisks
532
MT("imageAsterisks",
533
"[tag ![[*foo*]]][string (http://example.com/)] bar");
534
535
// Not a link. Should be normal text due to square brackets being used
536
// regularly in text, especially in quoted material, and no space is allowed
537
// between square brackets and parentheses (per Dingus).
538
MT("notALink",
539
"[[foo]] (bar)");
540
541
// Reference-style links
542
MT("linkReference",
543
"[link [[foo]]][string [[bar]]] hello");
544
545
// Reference-style links with Em
546
MT("linkReferenceEm",
547
"[link [[][link&em *foo*][link ]]][string [[bar]]] hello");
548
549
// Reference-style links with Strong
550
MT("linkReferenceStrong",
551
"[link [[][link&strong **foo**][link ]]][string [[bar]]] hello");
552
553
// Reference-style links with EmStrong
554
MT("linkReferenceEmStrong",
555
"[link [[][link&strong **][link&em&strong *foo**][link&em *][link ]]][string [[bar]]] hello");
556
557
// Reference-style links with optional space separator (per docuentation)
558
// "You can optionally use a space to separate the sets of brackets"
559
MT("linkReferenceSpace",
560
"[link [[foo]]] [string [[bar]]] hello");
561
562
// Should only allow a single space ("...use *a* space...")
563
MT("linkReferenceDoubleSpace",
564
"[[foo]] [[bar]] hello");
565
566
// Reference-style links with implicit link name
567
MT("linkImplicit",
568
"[link [[foo]]][string [[]]] hello");
569
570
// @todo It would be nice if, at some point, the document was actually
571
// checked to see if the referenced link exists
572
573
// Link label, for reference-style links (taken from documentation)
574
575
MT("labelNoTitle",
576
"[link [[foo]]:] [string http://example.com/]");
577
578
MT("labelIndented",
579
" [link [[foo]]:] [string http://example.com/]");
580
581
MT("labelSpaceTitle",
582
"[link [[foo bar]]:] [string http://example.com/ \"hello\"]");
583
584
MT("labelDoubleTitle",
585
"[link [[foo bar]]:] [string http://example.com/ \"hello\"] \"world\"");
586
587
MT("labelTitleDoubleQuotes",
588
"[link [[foo]]:] [string http://example.com/ \"bar\"]");
589
590
MT("labelTitleSingleQuotes",
591
"[link [[foo]]:] [string http://example.com/ 'bar']");
592
593
MT("labelTitleParenthese",
594
"[link [[foo]]:] [string http://example.com/ (bar)]");
595
596
MT("labelTitleInvalid",
597
"[link [[foo]]:] [string http://example.com/] bar");
598
599
MT("labelLinkAngleBrackets",
600
"[link [[foo]]:] [string <http://example.com/> \"bar\"]");
601
602
MT("labelTitleNextDoubleQuotes",
603
"[link [[foo]]:] [string http://example.com/]",
604
"[string \"bar\"] hello");
605
606
MT("labelTitleNextSingleQuotes",
607
"[link [[foo]]:] [string http://example.com/]",
608
"[string 'bar'] hello");
609
610
MT("labelTitleNextParenthese",
611
"[link [[foo]]:] [string http://example.com/]",
612
"[string (bar)] hello");
613
614
MT("labelTitleNextMixed",
615
"[link [[foo]]:] [string http://example.com/]",
616
"(bar\" hello");
617
618
MT("linkWeb",
619
"[link <http://example.com/>] foo");
620
621
MT("linkWebDouble",
622
"[link <http://example.com/>] foo [link <http://example.com/>]");
623
624
MT("linkEmail",
625
"[link <[email protected]>] foo");
626
627
MT("linkEmailDouble",
628
"[link <[email protected]>] foo [link <[email protected]>]");
629
630
MT("emAsterisk",
631
"[em *foo*] bar");
632
633
MT("emUnderscore",
634
"[em _foo_] bar");
635
636
MT("emInWordAsterisk",
637
"foo[em *bar*]hello");
638
639
MT("emInWordUnderscore",
640
"foo[em _bar_]hello");
641
642
// Per documentation: "...surround an * or _ with spaces, it’ll be
643
// treated as a literal asterisk or underscore."
644
645
MT("emEscapedBySpaceIn",
646
"foo [em _bar _ hello_] world");
647
648
MT("emEscapedBySpaceOut",
649
"foo _ bar[em _hello_]world");
650
651
MT("emEscapedByNewline",
652
"foo",
653
"_ bar[em _hello_]world");
654
655
// Unclosed emphasis characters
656
// Instead of simply marking as EM / STRONG, it would be nice to have an
657
// incomplete flag for EM and STRONG, that is styled slightly different.
658
MT("emIncompleteAsterisk",
659
"foo [em *bar]");
660
661
MT("emIncompleteUnderscore",
662
"foo [em _bar]");
663
664
MT("strongAsterisk",
665
"[strong **foo**] bar");
666
667
MT("strongUnderscore",
668
"[strong __foo__] bar");
669
670
MT("emStrongAsterisk",
671
"[em *foo][em&strong **bar*][strong hello**] world");
672
673
MT("emStrongUnderscore",
674
"[em _foo][em&strong __bar_][strong hello__] world");
675
676
// "...same character must be used to open and close an emphasis span.""
677
MT("emStrongMixed",
678
"[em _foo][em&strong **bar*hello__ world]");
679
680
MT("emStrongMixed",
681
"[em *foo][em&strong __bar_hello** world]");
682
683
// These characters should be escaped:
684
// \ backslash
685
// ` backtick
686
// * asterisk
687
// _ underscore
688
// {} curly braces
689
// [] square brackets
690
// () parentheses
691
// # hash mark
692
// + plus sign
693
// - minus sign (hyphen)
694
// . dot
695
// ! exclamation mark
696
697
MT("escapeBacktick",
698
"foo \\`bar\\`");
699
700
MT("doubleEscapeBacktick",
701
"foo \\\\[comment `bar\\\\`]");
702
703
MT("escapeAsterisk",
704
"foo \\*bar\\*");
705
706
MT("doubleEscapeAsterisk",
707
"foo \\\\[em *bar\\\\*]");
708
709
MT("escapeUnderscore",
710
"foo \\_bar\\_");
711
712
MT("doubleEscapeUnderscore",
713
"foo \\\\[em _bar\\\\_]");
714
715
MT("escapeHash",
716
"\\# foo");
717
718
MT("doubleEscapeHash",
719
"\\\\# foo");
720
721
MT("escapeNewline",
722
"\\",
723
"[em *foo*]");
724
725
726
// Tests to make sure GFM-specific things aren't getting through
727
728
MT("taskList",
729
"[variable-2 * [ ]] bar]");
730
731
MT("fencedCodeBlocks",
732
"[comment ```]",
733
"foo",
734
"[comment ```]");
735
736
// Tests that require XML mode
737
738
MT("xmlMode",
739
"[tag&bracket <][tag div][tag&bracket >]",
740
"*foo*",
741
"[tag&bracket <][tag http://github.com][tag&bracket />]",
742
"[tag&bracket </][tag div][tag&bracket >]",
743
"[link <http://github.com/>]");
744
745
MT("xmlModeWithMarkdownInside",
746
"[tag&bracket <][tag div] [attribute markdown]=[string 1][tag&bracket >]",
747
"[em *foo*]",
748
"[link <http://github.com/>]",
749
"[tag </div>]",
750
"[link <http://github.com/>]",
751
"[tag&bracket <][tag div][tag&bracket >]",
752
"[tag&bracket </][tag div][tag&bracket >]");
753
754
})();
755
756