securemark 0.235.1 → 0.235.2
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/CHANGELOG.md +4 -0
- package/dist/securemark.js +70 -77
- package/markdown.d.ts +5 -2
- package/package-lock.json +4 -4
- package/package.json +1 -1
- package/src/parser/api/parse.test.ts +2 -2
- package/src/parser/block/blockquote.test.ts +1 -1
- package/src/parser/block/extension/aside.test.ts +1 -1
- package/src/parser/block/extension/example.test.ts +2 -2
- package/src/parser/block/extension/fig.test.ts +20 -20
- package/src/parser/block/extension/figure.test.ts +31 -31
- package/src/parser/block/extension/figure.ts +1 -1
- package/src/parser/inline/annotation.ts +3 -3
- package/src/parser/inline/bracket.test.ts +10 -10
- package/src/parser/inline/bracket.ts +2 -5
- package/src/parser/inline/deletion.test.ts +4 -1
- package/src/parser/inline/deletion.ts +7 -4
- package/src/parser/inline/emphasis.ts +2 -2
- package/src/parser/inline/emstrong.ts +4 -4
- package/src/parser/inline/html.test.ts +25 -17
- package/src/parser/inline/html.ts +36 -12
- package/src/parser/inline/insertion.test.ts +4 -1
- package/src/parser/inline/insertion.ts +7 -4
- package/src/parser/inline/link.test.ts +3 -0
- package/src/parser/inline/link.ts +6 -7
- package/src/parser/inline/mark.ts +2 -2
- package/src/parser/inline/media.test.ts +3 -0
- package/src/parser/inline/media.ts +1 -1
- package/src/parser/inline/reference.ts +6 -6
- package/src/parser/inline/strong.ts +2 -2
- package/src/parser/inline.test.ts +2 -2
- package/src/parser/processor/figure.test.ts +28 -28
- package/src/parser/util.ts +38 -32
|
@@ -14,32 +14,32 @@ describe('Unit: parser/block/extension/fig', () => {
|
|
|
14
14
|
assert.deepStrictEqual(inspect(parser('[$group-name]\n !https://host')), undefined);
|
|
15
15
|
assert.deepStrictEqual(inspect(parser('[$group-name]\n\n!https://host')), undefined);
|
|
16
16
|
assert.deepStrictEqual(inspect(parser('[$group-name]a\nhttps://host')), undefined);
|
|
17
|
-
assert.deepStrictEqual(inspect(parser('[$group-name]a\n!https://host')), [['<figure data-label="group-name" data-group="group" class="invalid"><div
|
|
17
|
+
assert.deepStrictEqual(inspect(parser('[$group-name]a\n!https://host')), [['<figure data-label="group-name" data-group="group" class="invalid"><div><a href="https://host" target="_blank"><img class="media" data-src="https://host" alt=""></a></div><figcaption><span class="figindex"></span></figcaption></figure>'], '']);
|
|
18
18
|
assert.deepStrictEqual(inspect(parser('[$group-name] a\nhttps://host')), undefined);
|
|
19
|
-
assert.deepStrictEqual(inspect(parser('[$group-name] a\n!https://host')), [['<figure data-label="group-name" data-group="group" class="invalid"><div
|
|
19
|
+
assert.deepStrictEqual(inspect(parser('[$group-name] a\n!https://host')), [['<figure data-label="group-name" data-group="group" class="invalid"><div><a href="https://host" target="_blank"><img class="media" data-src="https://host" alt=""></a></div><figcaption><span class="figindex"></span></figcaption></figure>'], '']);
|
|
20
20
|
assert.deepStrictEqual(inspect(parser('$-a\n$-b')), undefined);
|
|
21
21
|
assert.deepStrictEqual(inspect(parser(' [$group-name]\n!https://host\n')), undefined);
|
|
22
22
|
});
|
|
23
23
|
|
|
24
24
|
it('valid', () => {
|
|
25
|
-
assert.deepStrictEqual(inspect(parser('[$group-name]\n!https://host')), [['<figure data-label="group-name" data-group="group"><div
|
|
26
|
-
assert.deepStrictEqual(inspect(parser('[$group-name]\n!https://host\n')), [['<figure data-label="group-name" data-group="group"><div
|
|
27
|
-
assert.deepStrictEqual(inspect(parser('[$group-name]\n|\n|-\n|')), [['<figure data-label="group-name" data-group="group"><div
|
|
28
|
-
assert.deepStrictEqual(inspect(parser('[$group-name]\n|\n|-\n|\n')), [['<figure data-label="group-name" data-group="group"><div
|
|
29
|
-
assert.deepStrictEqual(inspect(parser('[$group-name]\n```\n\n```')), [['<figure data-label="group-name" data-group="group"><div
|
|
30
|
-
assert.deepStrictEqual(inspect(parser('[$group-name]\n```\n\n```\n')), [['<figure data-label="group-name" data-group="group"><div
|
|
31
|
-
assert.deepStrictEqual(inspect(parser('[$group-name]\n```\n~~~\n```')), [['<figure data-label="group-name" data-group="group"><div
|
|
32
|
-
assert.deepStrictEqual(inspect(parser('[$group-name]\n$$\n\n$$')), [['<figure data-label="group-name" data-group="group"><div
|
|
33
|
-
assert.deepStrictEqual(inspect(parser('[$group-name]\n$$\n\n$$\n')), [['<figure data-label="group-name" data-group="group"><div
|
|
34
|
-
assert.deepStrictEqual(inspect(parser('[$group-name]\n~~~example/markdown\n~~~')), [['<figure data-label="group-name" data-group="group"><div
|
|
35
|
-
assert.deepStrictEqual(inspect(parser('[$group-name]\n~~~example/markdown\n~~~\n')), [['<figure data-label="group-name" data-group="group"><div
|
|
36
|
-
assert.deepStrictEqual(inspect(parser('[$group-name]\n> ')), [['<figure data-label="group-name" data-group="group"><div
|
|
37
|
-
assert.deepStrictEqual(inspect(parser('[$group-name]\n> \n')), [['<figure data-label="group-name" data-group="group"><div
|
|
38
|
-
assert.deepStrictEqual(inspect(parser('[$group-name]\n>\n~~~')), [['<figure data-label="group-name" data-group="group"><div
|
|
39
|
-
assert.deepStrictEqual(inspect(parser('[$group-name]\n!> *a*')), [['<figure data-label="group-name" data-group="group"><div
|
|
40
|
-
assert.deepStrictEqual(inspect(parser('[$group-name]\n![]{https://host}')), [['<figure data-label="group-name" data-group="group"><div
|
|
41
|
-
assert.deepStrictEqual(inspect(parser('[$group-name]\n![]{https://host}\n')), [['<figure data-label="group-name" data-group="group"><div
|
|
42
|
-
assert.deepStrictEqual(inspect(parser('$group-name\n!https://host')), [['<figure data-label="group-name" data-group="group"><div
|
|
25
|
+
assert.deepStrictEqual(inspect(parser('[$group-name]\n!https://host')), [['<figure data-label="group-name" data-group="group"><div><a href="https://host" target="_blank"><img class="media" data-src="https://host" alt=""></a></div><figcaption><span class="figindex"></span></figcaption></figure>'], '']);
|
|
26
|
+
assert.deepStrictEqual(inspect(parser('[$group-name]\n!https://host\n')), [['<figure data-label="group-name" data-group="group"><div><a href="https://host" target="_blank"><img class="media" data-src="https://host" alt=""></a></div><figcaption><span class="figindex"></span></figcaption></figure>'], '']);
|
|
27
|
+
assert.deepStrictEqual(inspect(parser('[$group-name]\n|\n|-\n|')), [['<figure data-label="group-name" data-group="group"><div><table><thead><tr></tr></thead><tbody><tr></tr></tbody></table></div><figcaption><span class="figindex"></span></figcaption></figure>'], '']);
|
|
28
|
+
assert.deepStrictEqual(inspect(parser('[$group-name]\n|\n|-\n|\n')), [['<figure data-label="group-name" data-group="group"><div><table><thead><tr></tr></thead><tbody><tr></tr></tbody></table></div><figcaption><span class="figindex"></span></figcaption></figure>'], '']);
|
|
29
|
+
assert.deepStrictEqual(inspect(parser('[$group-name]\n```\n\n```')), [['<figure data-label="group-name" data-group="group"><div><pre class="text" translate="no"></pre></div><figcaption><span class="figindex"></span></figcaption></figure>'], '']);
|
|
30
|
+
assert.deepStrictEqual(inspect(parser('[$group-name]\n```\n\n```\n')), [['<figure data-label="group-name" data-group="group"><div><pre class="text" translate="no"></pre></div><figcaption><span class="figindex"></span></figcaption></figure>'], '']);
|
|
31
|
+
assert.deepStrictEqual(inspect(parser('[$group-name]\n```\n~~~\n```')), [['<figure data-label="group-name" data-group="group"><div><pre class="text" translate="no">~~~</pre></div><figcaption><span class="figindex"></span></figcaption></figure>'], '']);
|
|
32
|
+
assert.deepStrictEqual(inspect(parser('[$group-name]\n$$\n\n$$')), [['<figure data-label="group-name" data-group="group"><div><div class="math" translate="no">$$\n\n$$</div></div><figcaption><span class="figindex"></span></figcaption></figure>'], '']);
|
|
33
|
+
assert.deepStrictEqual(inspect(parser('[$group-name]\n$$\n\n$$\n')), [['<figure data-label="group-name" data-group="group"><div><div class="math" translate="no">$$\n\n$$</div></div><figcaption><span class="figindex"></span></figcaption></figure>'], '']);
|
|
34
|
+
assert.deepStrictEqual(inspect(parser('[$group-name]\n~~~example/markdown\n~~~')), [['<figure data-label="group-name" data-group="group"><div><aside class="example" data-type="markdown"><pre translate="no"></pre><hr><section><ol class="annotations"></ol><ol class="references"></ol></section></aside></div><figcaption><span class="figindex"></span></figcaption></figure>'], '']);
|
|
35
|
+
assert.deepStrictEqual(inspect(parser('[$group-name]\n~~~example/markdown\n~~~\n')), [['<figure data-label="group-name" data-group="group"><div><aside class="example" data-type="markdown"><pre translate="no"></pre><hr><section><ol class="annotations"></ol><ol class="references"></ol></section></aside></div><figcaption><span class="figindex"></span></figcaption></figure>'], '']);
|
|
36
|
+
assert.deepStrictEqual(inspect(parser('[$group-name]\n> ')), [['<figure data-label="group-name" data-group="group"><div><blockquote></blockquote></div><figcaption><span class="figindex"></span></figcaption></figure>'], '']);
|
|
37
|
+
assert.deepStrictEqual(inspect(parser('[$group-name]\n> \n')), [['<figure data-label="group-name" data-group="group"><div><blockquote></blockquote></div><figcaption><span class="figindex"></span></figcaption></figure>'], '']);
|
|
38
|
+
assert.deepStrictEqual(inspect(parser('[$group-name]\n>\n~~~')), [['<figure data-label="group-name" data-group="group"><div><blockquote><pre><br>~~~</pre></blockquote></div><figcaption><span class="figindex"></span></figcaption></figure>'], '']);
|
|
39
|
+
assert.deepStrictEqual(inspect(parser('[$group-name]\n!> *a*')), [['<figure data-label="group-name" data-group="group"><div><blockquote><section><p><em>a</em></p><ol class="annotations"></ol><ol class="references"></ol></section></blockquote></div><figcaption><span class="figindex"></span></figcaption></figure>'], '']);
|
|
40
|
+
assert.deepStrictEqual(inspect(parser('[$group-name]\n![]{https://host}')), [['<figure data-label="group-name" data-group="group"><div><a href="https://host" target="_blank"><img class="media" data-src="https://host" alt=""></a></div><figcaption><span class="figindex"></span></figcaption></figure>'], '']);
|
|
41
|
+
assert.deepStrictEqual(inspect(parser('[$group-name]\n![]{https://host}\n')), [['<figure data-label="group-name" data-group="group"><div><a href="https://host" target="_blank"><img class="media" data-src="https://host" alt=""></a></div><figcaption><span class="figindex"></span></figcaption></figure>'], '']);
|
|
42
|
+
assert.deepStrictEqual(inspect(parser('$group-name\n!https://host')), [['<figure data-label="group-name" data-group="group"><div><a href="https://host" target="_blank"><img class="media" data-src="https://host" alt=""></a></div><figcaption><span class="figindex"></span></figcaption></figure>'], '']);
|
|
43
43
|
});
|
|
44
44
|
|
|
45
45
|
});
|
|
@@ -8,7 +8,7 @@ describe('Unit: parser/block/extension/figure', () => {
|
|
|
8
8
|
|
|
9
9
|
it('invalid', () => {
|
|
10
10
|
assert.deepStrictEqual(inspect(parser('~~~figure\n!https://host\n~~~')), undefined);
|
|
11
|
-
assert.deepStrictEqual(inspect(parser('~~~figure $group-name]\n!https://host\n~~~')), [['<figure data-label="group-name" data-group="group" class="invalid"><div
|
|
11
|
+
assert.deepStrictEqual(inspect(parser('~~~figure $group-name]\n!https://host\n~~~')), [['<figure data-label="group-name" data-group="group" class="invalid"><div><a href="https://host" target="_blank"><img class="media" data-src="https://host" alt=""></a></div><figcaption><span class="figindex"></span></figcaption></figure>'], '']);
|
|
12
12
|
assert.deepStrictEqual(inspect(parser('~~~figure [$group-name\n!https://host\n~~~')), undefined);
|
|
13
13
|
assert.deepStrictEqual(inspect(parser('~~~figure [$group-name]\nhttps://host\n~~~')), undefined);
|
|
14
14
|
assert.deepStrictEqual(inspect(parser('~~~figure [$group-name]\n!https://host\\\n~~~')), undefined);
|
|
@@ -21,9 +21,9 @@ describe('Unit: parser/block/extension/figure', () => {
|
|
|
21
21
|
assert.deepStrictEqual(inspect(parser('~~~figure [$group-name]\n!https://host\n~~~~')), undefined);
|
|
22
22
|
assert.deepStrictEqual(inspect(parser('~~~~figure [$group-name]\n!https://host\n~~~')), undefined);
|
|
23
23
|
assert.deepStrictEqual(inspect(parser('~~~figure [$group-name]a\nhttps://host\n~~~')), undefined);
|
|
24
|
-
assert.deepStrictEqual(inspect(parser('~~~figure [$group-name]a\n!https://host\n~~~')), [['<figure data-label="group-name" data-group="group" class="invalid"><div
|
|
24
|
+
assert.deepStrictEqual(inspect(parser('~~~figure [$group-name]a\n!https://host\n~~~')), [['<figure data-label="group-name" data-group="group" class="invalid"><div><a href="https://host" target="_blank"><img class="media" data-src="https://host" alt=""></a></div><figcaption><span class="figindex"></span></figcaption></figure>'], '']);
|
|
25
25
|
assert.deepStrictEqual(inspect(parser('~~~figure [$group-name] a\nhttps://host\n~~~')), undefined);
|
|
26
|
-
assert.deepStrictEqual(inspect(parser('~~~figure [$group-name] a\n!https://host\n~~~')), [['<figure data-label="group-name" data-group="group" class="invalid"><div
|
|
26
|
+
assert.deepStrictEqual(inspect(parser('~~~figure [$group-name] a\n!https://host\n~~~')), [['<figure data-label="group-name" data-group="group" class="invalid"><div><a href="https://host" target="_blank"><img class="media" data-src="https://host" alt=""></a></div><figcaption><span class="figindex"></span></figcaption></figure>'], '']);
|
|
27
27
|
assert.deepStrictEqual(inspect(parser('~~~ [$group-name]\n!https://host\n~~~')), undefined);
|
|
28
28
|
assert.deepStrictEqual(inspect(parser('~~~ $group-name\n!https://host\n~~~')), undefined);
|
|
29
29
|
assert.deepStrictEqual(inspect(parser(' ~~~figure [$group-name]\n!https://host\n~~~')), undefined);
|
|
@@ -31,34 +31,34 @@ describe('Unit: parser/block/extension/figure', () => {
|
|
|
31
31
|
});
|
|
32
32
|
|
|
33
33
|
it('valid', () => {
|
|
34
|
-
assert.deepStrictEqual(inspect(parser('~~~figure [$group-name]\n!https://host\n~~~')), [['<figure data-label="group-name" data-group="group"><div
|
|
35
|
-
assert.deepStrictEqual(inspect(parser('~~~figure [$group-name]\n!https://host\n~~~\n')), [['<figure data-label="group-name" data-group="group"><div
|
|
36
|
-
assert.deepStrictEqual(inspect(parser('~~~figure [$group-name]\n!https://host\n\n~~~')), [['<figure data-label="group-name" data-group="group"><div
|
|
37
|
-
assert.deepStrictEqual(inspect(parser('~~~figure [$group-name]\n!https://host\n\n\n~~~')), [['<figure data-label="group-name" data-group="group"><div
|
|
38
|
-
assert.deepStrictEqual(inspect(parser('~~~figure [$group-name]\n!https://host\n\n\\\n~~~')), [['<figure data-label="group-name" data-group="group"><div
|
|
39
|
-
assert.deepStrictEqual(inspect(parser('~~~figure [$group-name]\n!https://host\n\n!https://caption\n~~~')), [['<figure data-label="group-name" data-group="group"><div
|
|
40
|
-
assert.deepStrictEqual(inspect(parser('~~~figure [$group-name]\n|\n|-\n|\n~~~')), [['<figure data-label="group-name" data-group="group"><div
|
|
41
|
-
assert.deepStrictEqual(inspect(parser('~~~figure [$group-name]\n```\n\n```\n~~~')), [['<figure data-label="group-name" data-group="group"><div
|
|
42
|
-
assert.deepStrictEqual(inspect(parser('~~~figure [$group-name]\n```\n~~~\n```\n\n~~~')), [['<figure data-label="group-name" data-group="group"><div
|
|
43
|
-
assert.deepStrictEqual(inspect(parser('~~~figure [$group-name]\n```\n```\n\ncaption\n~~~')), [['<figure data-label="group-name" data-group="group"><div
|
|
44
|
-
assert.deepStrictEqual(inspect(parser('~~~figure [$group-name]\n$$\n\n$$\n~~~')), [['<figure data-label="group-name" data-group="group"><div
|
|
45
|
-
assert.deepStrictEqual(inspect(parser('~~~figure [$group-name]\n$$\n~~~\n$$\n~~~')), [['<figure data-label="group-name" data-group="group"><div
|
|
46
|
-
assert.deepStrictEqual(inspect(parser('~~~figure [$group-name]\n$$\n\n$$\n\ncaption\n~~~')), [['<figure data-label="group-name" data-group="group"><div
|
|
47
|
-
assert.deepStrictEqual(inspect(parser('~~~figure [$group-name]\n~~~example/markdown\n~~~\n\ncaption\n~~~')), [['<figure data-label="group-name" data-group="group"><div
|
|
48
|
-
assert.deepStrictEqual(inspect(parser('~~~figure [$group-name]\n~~~table\n~~~\n\ncaption\n~~~')), [['<figure data-label="group-name" data-group="group"><div
|
|
49
|
-
assert.deepStrictEqual(inspect(parser('~~~figure [$group-name]\n> \n~~~\n\n~~~')), [['<figure data-label="group-name" data-group="group"><div
|
|
50
|
-
assert.deepStrictEqual(inspect(parser('~~~figure [$group-name]\n> \n~~~\n\ncaption\n~~~')), [['<figure data-label="group-name" data-group="group"><div
|
|
51
|
-
assert.deepStrictEqual(inspect(parser('~~~figure [$group-name]\n![]{https://host}\n~~~')), [['<figure data-label="group-name" data-group="group"><div
|
|
52
|
-
assert.deepStrictEqual(inspect(parser('~~~~figure [$group-name]\n!https://host\n~~~~')), [['<figure data-label="group-name" data-group="group"><div
|
|
53
|
-
assert.deepStrictEqual(inspect(parser('~~~figure $group-name\n!https://host\n~~~')), [['<figure data-label="group-name" data-group="group"><div
|
|
54
|
-
assert.deepStrictEqual(inspect(parser('~~~[$group-name]\n!https://host\n~~~')), [['<figure data-label="group-name" data-group="group"><div
|
|
55
|
-
assert.deepStrictEqual(inspect(parser('~~~$group-name\n!https://host\n~~~')), [['<figure data-label="group-name" data-group="group"><div
|
|
56
|
-
assert.deepStrictEqual(inspect(parser('~~~figure [$group-0]\n> \n\n~~~')), [['<figure data-label="group-0" data-group="group" class="invalid"><div
|
|
57
|
-
assert.deepStrictEqual(inspect(parser('~~~figure [$group-0.0]\n> \n\n~~~')), [['<figure data-label="group-0.0" data-group="group" class="invalid"><div
|
|
58
|
-
assert.deepStrictEqual(inspect(parser('~~~figure [$-0]\n$$\n\n$$\n~~~')), [['<figure data-label="$-0" data-group="$" class="invalid"><div
|
|
59
|
-
assert.deepStrictEqual(inspect(parser('~~~figure [$-0.0]\n$$\n\n$$\n~~~')), [['<figure data-label="$-0.0" data-group="$" class="invalid"><div
|
|
60
|
-
assert.deepStrictEqual(inspect(parser('~~~figure [$-name]\n!https://host\n~~~')), [['<figure data-label="$-name" data-group="$" class="invalid"><div
|
|
61
|
-
assert.deepStrictEqual(inspect(parser('~~~figure [$-name]\n$$\n\n$$\n\ncaption\n~~~')), [['<figure data-label="$-name" data-group="$" class="invalid"><div
|
|
34
|
+
assert.deepStrictEqual(inspect(parser('~~~figure [$group-name]\n!https://host\n~~~')), [['<figure data-label="group-name" data-group="group"><div><a href="https://host" target="_blank"><img class="media" data-src="https://host" alt=""></a></div><figcaption><span class="figindex"></span></figcaption></figure>'], '']);
|
|
35
|
+
assert.deepStrictEqual(inspect(parser('~~~figure [$group-name]\n!https://host\n~~~\n')), [['<figure data-label="group-name" data-group="group"><div><a href="https://host" target="_blank"><img class="media" data-src="https://host" alt=""></a></div><figcaption><span class="figindex"></span></figcaption></figure>'], '']);
|
|
36
|
+
assert.deepStrictEqual(inspect(parser('~~~figure [$group-name]\n!https://host\n\n~~~')), [['<figure data-label="group-name" data-group="group"><div><a href="https://host" target="_blank"><img class="media" data-src="https://host" alt=""></a></div><figcaption><span class="figindex"></span></figcaption></figure>'], '']);
|
|
37
|
+
assert.deepStrictEqual(inspect(parser('~~~figure [$group-name]\n!https://host\n\n\n~~~')), [['<figure data-label="group-name" data-group="group"><div><a href="https://host" target="_blank"><img class="media" data-src="https://host" alt=""></a></div><figcaption><span class="figindex"></span></figcaption></figure>'], '']);
|
|
38
|
+
assert.deepStrictEqual(inspect(parser('~~~figure [$group-name]\n!https://host\n\n\\\n~~~')), [['<figure data-label="group-name" data-group="group"><div><a href="https://host" target="_blank"><img class="media" data-src="https://host" alt=""></a></div><figcaption><span class="figindex"></span>\\</figcaption></figure>'], '']);
|
|
39
|
+
assert.deepStrictEqual(inspect(parser('~~~figure [$group-name]\n!https://host\n\n!https://caption\n~~~')), [['<figure data-label="group-name" data-group="group"><div><a href="https://host" target="_blank"><img class="media" data-src="https://host" alt=""></a></div><figcaption><span class="figindex"></span>!<a href="https://caption" target="_blank">https://caption</a></figcaption></figure>'], '']);
|
|
40
|
+
assert.deepStrictEqual(inspect(parser('~~~figure [$group-name]\n|\n|-\n|\n~~~')), [['<figure data-label="group-name" data-group="group"><div><table><thead><tr></tr></thead><tbody><tr></tr></tbody></table></div><figcaption><span class="figindex"></span></figcaption></figure>'], '']);
|
|
41
|
+
assert.deepStrictEqual(inspect(parser('~~~figure [$group-name]\n```\n\n```\n~~~')), [['<figure data-label="group-name" data-group="group"><div><pre class="text" translate="no"></pre></div><figcaption><span class="figindex"></span></figcaption></figure>'], '']);
|
|
42
|
+
assert.deepStrictEqual(inspect(parser('~~~figure [$group-name]\n```\n~~~\n```\n\n~~~')), [['<figure data-label="group-name" data-group="group"><div><pre class="text" translate="no">~~~</pre></div><figcaption><span class="figindex"></span></figcaption></figure>'], '']);
|
|
43
|
+
assert.deepStrictEqual(inspect(parser('~~~figure [$group-name]\n```\n```\n\ncaption\n~~~')), [['<figure data-label="group-name" data-group="group"><div><pre class="text" translate="no"></pre></div><figcaption><span class="figindex"></span>caption</figcaption></figure>'], '']);
|
|
44
|
+
assert.deepStrictEqual(inspect(parser('~~~figure [$group-name]\n$$\n\n$$\n~~~')), [['<figure data-label="group-name" data-group="group"><div><div class="math" translate="no">$$\n\n$$</div></div><figcaption><span class="figindex"></span></figcaption></figure>'], '']);
|
|
45
|
+
assert.deepStrictEqual(inspect(parser('~~~figure [$group-name]\n$$\n~~~\n$$\n~~~')), [['<figure data-label="group-name" data-group="group"><div><div class="math" translate="no">$$\n~~~\n$$</div></div><figcaption><span class="figindex"></span></figcaption></figure>'], '']);
|
|
46
|
+
assert.deepStrictEqual(inspect(parser('~~~figure [$group-name]\n$$\n\n$$\n\ncaption\n~~~')), [['<figure data-label="group-name" data-group="group"><div><div class="math" translate="no">$$\n\n$$</div></div><figcaption><span class="figindex"></span>caption</figcaption></figure>'], '']);
|
|
47
|
+
assert.deepStrictEqual(inspect(parser('~~~figure [$group-name]\n~~~example/markdown\n~~~\n\ncaption\n~~~')), [['<figure data-label="group-name" data-group="group"><div><aside class="example" data-type="markdown"><pre translate="no"></pre><hr><section><ol class="annotations"></ol><ol class="references"></ol></section></aside></div><figcaption><span class="figindex"></span>caption</figcaption></figure>'], '']);
|
|
48
|
+
assert.deepStrictEqual(inspect(parser('~~~figure [$group-name]\n~~~table\n~~~\n\ncaption\n~~~')), [['<figure data-label="group-name" data-group="group"><div><table></table></div><figcaption><span class="figindex"></span>caption</figcaption></figure>'], '']);
|
|
49
|
+
assert.deepStrictEqual(inspect(parser('~~~figure [$group-name]\n> \n~~~\n\n~~~')), [['<figure data-label="group-name" data-group="group"><div><blockquote><pre><br>~~~</pre></blockquote></div><figcaption><span class="figindex"></span></figcaption></figure>'], '']);
|
|
50
|
+
assert.deepStrictEqual(inspect(parser('~~~figure [$group-name]\n> \n~~~\n\ncaption\n~~~')), [['<figure data-label="group-name" data-group="group"><div><blockquote><pre><br>~~~</pre></blockquote></div><figcaption><span class="figindex"></span>caption</figcaption></figure>'], '']);
|
|
51
|
+
assert.deepStrictEqual(inspect(parser('~~~figure [$group-name]\n![]{https://host}\n~~~')), [['<figure data-label="group-name" data-group="group"><div><a href="https://host" target="_blank"><img class="media" data-src="https://host" alt=""></a></div><figcaption><span class="figindex"></span></figcaption></figure>'], '']);
|
|
52
|
+
assert.deepStrictEqual(inspect(parser('~~~~figure [$group-name]\n!https://host\n~~~~')), [['<figure data-label="group-name" data-group="group"><div><a href="https://host" target="_blank"><img class="media" data-src="https://host" alt=""></a></div><figcaption><span class="figindex"></span></figcaption></figure>'], '']);
|
|
53
|
+
assert.deepStrictEqual(inspect(parser('~~~figure $group-name\n!https://host\n~~~')), [['<figure data-label="group-name" data-group="group"><div><a href="https://host" target="_blank"><img class="media" data-src="https://host" alt=""></a></div><figcaption><span class="figindex"></span></figcaption></figure>'], '']);
|
|
54
|
+
assert.deepStrictEqual(inspect(parser('~~~[$group-name]\n!https://host\n~~~')), [['<figure data-label="group-name" data-group="group"><div><a href="https://host" target="_blank"><img class="media" data-src="https://host" alt=""></a></div><figcaption><span class="figindex"></span></figcaption></figure>'], '']);
|
|
55
|
+
assert.deepStrictEqual(inspect(parser('~~~$group-name\n!https://host\n~~~')), [['<figure data-label="group-name" data-group="group"><div><a href="https://host" target="_blank"><img class="media" data-src="https://host" alt=""></a></div><figcaption><span class="figindex"></span></figcaption></figure>'], '']);
|
|
56
|
+
assert.deepStrictEqual(inspect(parser('~~~figure [$group-0]\n> \n\n~~~')), [['<figure data-label="group-0" data-group="group" class="invalid"><div><blockquote></blockquote></div><figcaption><span class="figindex"></span></figcaption></figure>'], '']);
|
|
57
|
+
assert.deepStrictEqual(inspect(parser('~~~figure [$group-0.0]\n> \n\n~~~')), [['<figure data-label="group-0.0" data-group="group" class="invalid"><div><blockquote></blockquote></div><figcaption><span class="figindex"></span></figcaption></figure>'], '']);
|
|
58
|
+
assert.deepStrictEqual(inspect(parser('~~~figure [$-0]\n$$\n\n$$\n~~~')), [['<figure data-label="$-0" data-group="$" class="invalid"><div><div class="math" translate="no">$$\n\n$$</div></div><figcaption><span class="figindex"></span></figcaption></figure>'], '']);
|
|
59
|
+
assert.deepStrictEqual(inspect(parser('~~~figure [$-0.0]\n$$\n\n$$\n~~~')), [['<figure data-label="$-0.0" data-group="$" class="invalid"><div><div class="math" translate="no">$$\n\n$$</div></div><figcaption><span class="figindex"></span></figcaption></figure>'], '']);
|
|
60
|
+
assert.deepStrictEqual(inspect(parser('~~~figure [$-name]\n!https://host\n~~~')), [['<figure data-label="$-name" data-group="$" class="invalid"><div><a href="https://host" target="_blank"><img class="media" data-src="https://host" alt=""></a></div><figcaption><span class="figindex"></span></figcaption></figure>'], '']);
|
|
61
|
+
assert.deepStrictEqual(inspect(parser('~~~figure [$-name]\n$$\n\n$$\n\ncaption\n~~~')), [['<figure data-label="$-name" data-group="$" class="invalid"><div><div class="math" translate="no">$$\n\n$$</div></div><figcaption><span class="figindex"></span>caption</figcaption></figure>'], '']);
|
|
62
62
|
assert(parser('~~~figure [$group-name]\n```\n0' + '\n'.repeat(300) + '```\n~~~'));
|
|
63
63
|
assert(parser('~~~figure [$group-name]\n' + '>\n'.repeat(500) + '\n~~~'));
|
|
64
64
|
});
|
|
@@ -72,7 +72,7 @@ export const figure: FigureParser = block(rewrite(segment, fmap(
|
|
|
72
72
|
html('figure',
|
|
73
73
|
attributes(label.getAttribute('data-label')!, param, content, caption),
|
|
74
74
|
[
|
|
75
|
-
html('div',
|
|
75
|
+
html('div', [content]),
|
|
76
76
|
html('figcaption', unshift(
|
|
77
77
|
[html('span', { class: 'figindex' })],
|
|
78
78
|
defrag(caption))),
|
|
@@ -2,7 +2,7 @@ import { undefined } from 'spica/global';
|
|
|
2
2
|
import { AnnotationParser } from '../inline';
|
|
3
3
|
import { union, some, validate, guard, context, creator, surround, lazy, fmap } from '../../combinator';
|
|
4
4
|
import { inline } from '../inline';
|
|
5
|
-
import { startLoose,
|
|
5
|
+
import { startLoose, trimSpaceStart, trimNodeEnd } from '../util';
|
|
6
6
|
import { html, defrag } from 'typed-dom';
|
|
7
7
|
|
|
8
8
|
export const annotation: AnnotationParser = lazy(() => creator(validate('((', '))', '\n', fmap(surround(
|
|
@@ -20,6 +20,6 @@ export const annotation: AnnotationParser = lazy(() => creator(validate('((', ')
|
|
|
20
20
|
//link: true,
|
|
21
21
|
//autolink: true,
|
|
22
22
|
}}, state: undefined },
|
|
23
|
-
union([some(inline, ')', /^\\?\n/)]))
|
|
23
|
+
trimSpaceStart(union([some(inline, ')', /^\\?\n/)]))))),
|
|
24
24
|
'))'),
|
|
25
|
-
ns => [html('sup', { class: 'annotation' },
|
|
25
|
+
ns => [html('sup', { class: 'annotation' }, trimNodeEnd(defrag(ns)))]))));
|
|
@@ -12,17 +12,17 @@ describe('Unit: parser/inline/bracket', () => {
|
|
|
12
12
|
assert.deepStrictEqual(inspect(parser('(a')), [['(', 'a'], '']);
|
|
13
13
|
assert.deepStrictEqual(inspect(parser('(\\a)')), [['<span class="paren">(a)</span>'], '']);
|
|
14
14
|
assert.deepStrictEqual(inspect(parser(')')), undefined);
|
|
15
|
-
assert.deepStrictEqual(inspect(parser('(0)')), [['(0)'], '']);
|
|
16
|
-
assert.deepStrictEqual(inspect(parser('(1)')), [['(1)'], '']);
|
|
17
|
-
assert.deepStrictEqual(inspect(parser('(10)')), [['(10)'], '']);
|
|
18
|
-
assert.deepStrictEqual(inspect(parser('(2000)')), [['(2000)'], '']);
|
|
15
|
+
assert.deepStrictEqual(inspect(parser('(0)')), [['(', '0', ')'], '']);
|
|
16
|
+
assert.deepStrictEqual(inspect(parser('(1)')), [['(', '1', ')'], '']);
|
|
17
|
+
assert.deepStrictEqual(inspect(parser('(10)')), [['(', '10', ')'], '']);
|
|
18
|
+
assert.deepStrictEqual(inspect(parser('(2000)')), [['(', '2000', ')'], '']);
|
|
19
19
|
assert.deepStrictEqual(inspect(parser('(0-1)')), [['<span class="paren">(0-1)</span>'], '']);
|
|
20
|
-
assert.deepStrictEqual(inspect(parser('(0)-1')), [['(0)'], '-1']);
|
|
21
|
-
assert.deepStrictEqual(inspect(parser('(0.1)')), [['(0.1)'], '']);
|
|
22
|
-
assert.deepStrictEqual(inspect(parser('(0.1.2)')), [['(0.1.2)'], '']);
|
|
23
|
-
assert.deepStrictEqual(inspect(parser('(a)')), [['(a)'], '']);
|
|
24
|
-
assert.deepStrictEqual(inspect(parser('(A)')), [['(A)'], '']);
|
|
25
|
-
assert.deepStrictEqual(inspect(parser('
|
|
20
|
+
assert.deepStrictEqual(inspect(parser('(0)-1')), [['(', '0', ')'], '-1']);
|
|
21
|
+
assert.deepStrictEqual(inspect(parser('(0.1)')), [['(', '0.1', ')'], '']);
|
|
22
|
+
assert.deepStrictEqual(inspect(parser('(0.1.2)')), [['(', '0.1.2', ')'], '']);
|
|
23
|
+
assert.deepStrictEqual(inspect(parser('(a)')), [['(', 'a', ')'], '']);
|
|
24
|
+
assert.deepStrictEqual(inspect(parser('(A)')), [['(', 'A', ')'], '']);
|
|
25
|
+
assert.deepStrictEqual(inspect(parser('(0.1)(A)')), [['(', '0.1', ')', '(', 'A', ')'], '']);
|
|
26
26
|
});
|
|
27
27
|
|
|
28
28
|
it('[', () => {
|
|
@@ -7,16 +7,13 @@ import { html, defrag } from 'typed-dom';
|
|
|
7
7
|
import { unshift, push } from 'spica/array';
|
|
8
8
|
|
|
9
9
|
const index = /^(?:[0-9]+(?:\.[0-9]+)*|[A-Za-z])/;
|
|
10
|
-
const indexFW = new RegExp(index.source.replace(/[019AZaz](?!,)/g, c => String.fromCharCode(c.charCodeAt(0) + 0xFEE0)));
|
|
11
10
|
|
|
12
11
|
export const bracket: BracketParser = lazy(() => creator(union([
|
|
13
|
-
surround(str('('), str(index), str(')'),
|
|
14
|
-
([as, bs = [], cs], rest) => [defrag(push(unshift(as, bs), cs)), rest]),
|
|
15
|
-
surround(str('('), str(indexFW), str(')'), false,
|
|
16
|
-
([as, bs = [], cs], rest) => [defrag(push(unshift(as, bs), cs)), rest]),
|
|
12
|
+
surround(str('('), str(index), str(')')),
|
|
17
13
|
surround(str('('), some(inline, ')'), str(')'), true,
|
|
18
14
|
([as, bs = [], cs], rest) => [[html('span', { class: 'paren' }, defrag(push(unshift(as, bs), cs)))], rest],
|
|
19
15
|
([as, bs = []], rest) => [unshift(as, bs), rest]),
|
|
16
|
+
surround(str('('), str(new RegExp(index.source.replace(/[09AZaz.]/g, c => String.fromCharCode(c.charCodeAt(0) + 0xFEE0)))), str(')')),
|
|
20
17
|
surround(str('('), some(inline, ')'), str(')'), true,
|
|
21
18
|
([as, bs = [], cs], rest) => [[html('span', { class: 'paren' }, defrag(push(unshift(as, bs), cs)))], rest],
|
|
22
19
|
([as, bs = []], rest) => [unshift(as, bs), rest]),
|
|
@@ -18,7 +18,6 @@ describe('Unit: parser/inline/deletion', () => {
|
|
|
18
18
|
it('basic', () => {
|
|
19
19
|
assert.deepStrictEqual(inspect(parser('~~a~~')), [['<del>a</del>'], '']);
|
|
20
20
|
assert.deepStrictEqual(inspect(parser('~~a~b~~')), [['<del>a~b</del>'], '']);
|
|
21
|
-
assert.deepStrictEqual(inspect(parser('~~a ~~')), [['<del>a </del>'], '']);
|
|
22
21
|
assert.deepStrictEqual(inspect(parser('~~ ~~')), [['<del> </del>'], '']);
|
|
23
22
|
assert.deepStrictEqual(inspect(parser('~~ a~~')), [['<del> a</del>'], '']);
|
|
24
23
|
assert.deepStrictEqual(inspect(parser('~~ a ~~')), [['<del> a </del>'], '']);
|
|
@@ -26,7 +25,11 @@ describe('Unit: parser/inline/deletion', () => {
|
|
|
26
25
|
assert.deepStrictEqual(inspect(parser('~~\na~~')), [['<del><br>a</del>'], '']);
|
|
27
26
|
assert.deepStrictEqual(inspect(parser('~~\\\na~~')), [['<del><span class="linebreak"> </span>a</del>'], '']);
|
|
28
27
|
assert.deepStrictEqual(inspect(parser('~~<wbr>a~~')), [['<del><wbr>a</del>'], '']);
|
|
28
|
+
assert.deepStrictEqual(inspect(parser('~~a ~~')), [['<del>a </del>'], '']);
|
|
29
|
+
assert.deepStrictEqual(inspect(parser('~~a \n ~~')), [['<del>a </del>'], '']);
|
|
29
30
|
assert.deepStrictEqual(inspect(parser('~~a\n~~')), [['<del>a</del>'], '']);
|
|
31
|
+
assert.deepStrictEqual(inspect(parser('~~a\n ~~')), [['<del>a </del>'], '']);
|
|
32
|
+
assert.deepStrictEqual(inspect(parser('~~a\n<wbr>~~')), [['<del>a<wbr></del>'], '']);
|
|
30
33
|
assert.deepStrictEqual(inspect(parser('~~a\nb~~')), [['<del>a<br>b</del>'], '']);
|
|
31
34
|
assert.deepStrictEqual(inspect(parser('~~a\\\nb~~')), [['<del>a<span class="linebreak"> </span>b</del>'], '']);
|
|
32
35
|
assert.deepStrictEqual(inspect(parser('~~\\~~~')), [['<del>~</del>'], '']);
|
|
@@ -1,14 +1,17 @@
|
|
|
1
1
|
import { DeletionParser } from '../inline';
|
|
2
|
-
import { union, some, creator, surround, lazy } from '../../combinator';
|
|
2
|
+
import { union, some, creator, surround, open, lazy } from '../../combinator';
|
|
3
3
|
import { inline } from '../inline';
|
|
4
4
|
import { str } from '../source';
|
|
5
|
-
import {
|
|
5
|
+
import { blank } from '../util';
|
|
6
6
|
import { html, defrag } from 'typed-dom';
|
|
7
7
|
import { unshift } from 'spica/array';
|
|
8
8
|
|
|
9
9
|
export const deletion: DeletionParser = lazy(() => creator(surround(
|
|
10
10
|
str('~~'),
|
|
11
|
-
union([
|
|
11
|
+
some(union([
|
|
12
|
+
some(inline, blank(/\n?/, /~~/)),
|
|
13
|
+
open(/^\n?/, some(inline, '~'), true),
|
|
14
|
+
])),
|
|
12
15
|
str('~~'), false,
|
|
13
|
-
([, bs], rest) => [[html('del', defrag(
|
|
16
|
+
([, bs], rest) => [[html('del', defrag(bs))], rest],
|
|
14
17
|
([as, bs], rest) => [unshift(as, bs), rest])));
|
|
@@ -3,7 +3,7 @@ import { union, some, creator, surround, open, lazy } from '../../combinator';
|
|
|
3
3
|
import { inline } from '../inline';
|
|
4
4
|
import { strong } from './strong';
|
|
5
5
|
import { str } from '../source';
|
|
6
|
-
import { startTight,
|
|
6
|
+
import { startTight, blank } from '../util';
|
|
7
7
|
import { html, defrag } from 'typed-dom';
|
|
8
8
|
import { unshift } from 'spica/array';
|
|
9
9
|
|
|
@@ -11,7 +11,7 @@ export const emphasis: EmphasisParser = lazy(() => creator(surround(
|
|
|
11
11
|
str('*'),
|
|
12
12
|
startTight(some(union([
|
|
13
13
|
strong,
|
|
14
|
-
some(inline,
|
|
14
|
+
some(inline, blank('', /\*/)),
|
|
15
15
|
open(some(inline, '*'), inline),
|
|
16
16
|
])), '*'),
|
|
17
17
|
str('*'), false,
|
|
@@ -5,24 +5,24 @@ import { union, some, creator, surround, open, lazy, bind } from '../../combinat
|
|
|
5
5
|
import { inline } from '../inline';
|
|
6
6
|
import { strong } from './strong';
|
|
7
7
|
import { str } from '../source';
|
|
8
|
-
import { startTight,
|
|
8
|
+
import { startTight, blank } from '../util';
|
|
9
9
|
import { html, defrag } from 'typed-dom';
|
|
10
10
|
import { unshift } from 'spica/array';
|
|
11
11
|
|
|
12
12
|
const substrong: IntermediateParser<StrongParser> = lazy(() => some(union([
|
|
13
|
-
some(inline,
|
|
13
|
+
some(inline, blank('', /\*\*/)),
|
|
14
14
|
open(some(inline, '*'), inline),
|
|
15
15
|
])));
|
|
16
16
|
const subemphasis: IntermediateParser<EmphasisParser> = lazy(() => some(union([
|
|
17
17
|
strong,
|
|
18
|
-
some(inline,
|
|
18
|
+
some(inline, blank('', /\*/)),
|
|
19
19
|
open(some(inline, '*'), inline),
|
|
20
20
|
])));
|
|
21
21
|
|
|
22
22
|
export const emstrong: EmStrongParser = lazy(() => creator(surround(
|
|
23
23
|
str('***'),
|
|
24
24
|
startTight(some(union([
|
|
25
|
-
some(inline,
|
|
25
|
+
some(inline, blank('', /\*/)),
|
|
26
26
|
open(some(inline, '*'), inline),
|
|
27
27
|
]))),
|
|
28
28
|
str(/^\*{1,3}/), false,
|
|
@@ -59,11 +59,14 @@ describe('Unit: parser/inline/html', () => {
|
|
|
59
59
|
it('basic', () => {
|
|
60
60
|
assert.deepStrictEqual(inspect(parser('<small> a</small>')), [['<small> a</small>'], '']);
|
|
61
61
|
assert.deepStrictEqual(inspect(parser('<small> a </small>')), [['<small> a </small>'], '']);
|
|
62
|
+
assert.deepStrictEqual(inspect(parser('<small> a </small>')), [['<small> a </small>'], '']);
|
|
62
63
|
assert.deepStrictEqual(inspect(parser('<small>a</small>')), [['<small>a</small>'], '']);
|
|
63
64
|
assert.deepStrictEqual(inspect(parser('<small>a</small>a')), [['<small>a</small>'], 'a']);
|
|
64
65
|
assert.deepStrictEqual(inspect(parser('<small>a </small>')), [['<small>a </small>'], '']);
|
|
65
|
-
assert.deepStrictEqual(inspect(parser('<small>a
|
|
66
|
+
assert.deepStrictEqual(inspect(parser('<small>a \n </small>')), [['<small>a </small>'], '']);
|
|
66
67
|
assert.deepStrictEqual(inspect(parser('<small>a\n</small>')), [['<small>a</small>'], '']);
|
|
68
|
+
assert.deepStrictEqual(inspect(parser('<small>a\n </small>')), [['<small>a </small>'], '']);
|
|
69
|
+
assert.deepStrictEqual(inspect(parser('<small>a\n<wbr></small>')), [['<small>a<wbr></small>'], '']);
|
|
67
70
|
assert.deepStrictEqual(inspect(parser('<small>a\nb</small>')), [['<small>a<br>b</small>'], '']);
|
|
68
71
|
assert.deepStrictEqual(inspect(parser('<wbr>a')), [['<wbr>'], 'a']);
|
|
69
72
|
});
|
|
@@ -85,22 +88,27 @@ describe('Unit: parser/inline/html', () => {
|
|
|
85
88
|
});
|
|
86
89
|
|
|
87
90
|
it('attribute', () => {
|
|
88
|
-
assert.deepStrictEqual(inspect(parser('<small
|
|
89
|
-
assert.deepStrictEqual(inspect(parser('<small
|
|
90
|
-
assert.deepStrictEqual(inspect(parser('<
|
|
91
|
-
assert.deepStrictEqual(inspect(parser('<
|
|
92
|
-
assert.deepStrictEqual(inspect(parser('<
|
|
93
|
-
assert.deepStrictEqual(inspect(parser('<bdo
|
|
94
|
-
assert.deepStrictEqual(inspect(parser('<bdo
|
|
95
|
-
assert.deepStrictEqual(inspect(parser('<bdo
|
|
96
|
-
assert.deepStrictEqual(inspect(parser('<bdo
|
|
97
|
-
assert.deepStrictEqual(inspect(parser('<bdo
|
|
98
|
-
assert.deepStrictEqual(inspect(parser('<bdo dir
|
|
99
|
-
assert.deepStrictEqual(inspect(parser('<bdo dir
|
|
100
|
-
assert.deepStrictEqual(inspect(parser('<bdo dir=
|
|
101
|
-
assert.deepStrictEqual(inspect(parser('<bdo dir="
|
|
102
|
-
assert.deepStrictEqual(inspect(parser('<bdo dir="
|
|
103
|
-
assert.deepStrictEqual(inspect(parser('<
|
|
91
|
+
assert.deepStrictEqual(inspect(parser('<small >a</small>')), [['<small>a</small>'], '']);
|
|
92
|
+
assert.deepStrictEqual(inspect(parser('<small >a</small>')), [['<small>a</small>'], '']);
|
|
93
|
+
assert.deepStrictEqual(inspect(parser('<small __proto__>a</small>')), undefined);
|
|
94
|
+
assert.deepStrictEqual(inspect(parser('<small constructor>a</small>')), [['<span class="invalid"><small constructor>a</small></span>'], '']);
|
|
95
|
+
assert.deepStrictEqual(inspect(parser('<small toString>a</small>')), undefined);
|
|
96
|
+
assert.deepStrictEqual(inspect(parser('<bdo>a</bdo>')), [['<span class="invalid"><bdo>a</bdo></span>'], '']);
|
|
97
|
+
assert.deepStrictEqual(inspect(parser('<bdo >a</bdo>')), [['<span class="invalid"><bdo >a</bdo></span>'], '']);
|
|
98
|
+
assert.deepStrictEqual(inspect(parser('<bdo __proto__>a</bdo>')), undefined);
|
|
99
|
+
assert.deepStrictEqual(inspect(parser('<bdo constructor>a</bdo>')), [['<span class="invalid"><bdo constructor>a</bdo></span>'], '']);
|
|
100
|
+
assert.deepStrictEqual(inspect(parser('<bdo toString>a</bdo>')), undefined);
|
|
101
|
+
assert.deepStrictEqual(inspect(parser('<bdo dir>a</bdo>')), [['<span class="invalid"><bdo dir>a</bdo></span>'], '']);
|
|
102
|
+
assert.deepStrictEqual(inspect(parser('<bdo dir=>a</bdo>')), undefined);
|
|
103
|
+
assert.deepStrictEqual(inspect(parser('<bdo dir=rtl>a</bdo>')), undefined);
|
|
104
|
+
assert.deepStrictEqual(inspect(parser('<bdo dir=">a</bdo>')), undefined);
|
|
105
|
+
assert.deepStrictEqual(inspect(parser('<bdo dir="">a</bdo>')), [['<span class="invalid"><bdo dir="">a</bdo></span>'], '']);
|
|
106
|
+
assert.deepStrictEqual(inspect(parser('<bdo dir="rtl" dir="rtl">a</bdo>')), [['<span class="invalid"><bdo dir="rtl" dir="rtl">a</bdo></span>'], '']);
|
|
107
|
+
assert.deepStrictEqual(inspect(parser('<bdo dir="rtl">a</bdo>')), [['<bdo dir="rtl">a</bdo>'], '']);
|
|
108
|
+
assert.deepStrictEqual(inspect(parser('<bdo dir="rtl" >a</bdo>')), [['<bdo dir="rtl">a</bdo>'], '']);
|
|
109
|
+
assert.deepStrictEqual(inspect(parser('<bdo dir="rtl" >a</bdo>')), [['<bdo dir="rtl">a</bdo>'], '']);
|
|
110
|
+
assert.deepStrictEqual(inspect(parser('<bdo dir="rtl">a</bdo>')), [['<bdo dir="rtl">a</bdo>'], '']);
|
|
111
|
+
assert.deepStrictEqual(inspect(parser('<wbr constructor>')), [['<wbr class="invalid">'], '']);
|
|
104
112
|
});
|
|
105
113
|
|
|
106
114
|
});
|
|
@@ -2,10 +2,10 @@ import { undefined } from 'spica/global';
|
|
|
2
2
|
import { isFrozen, ObjectEntries, ObjectFreeze, ObjectSetPrototypeOf, ObjectValues } from 'spica/alias';
|
|
3
3
|
import { MarkdownParser } from '../../../markdown';
|
|
4
4
|
import { HTMLParser } from '../inline';
|
|
5
|
-
import { union, some, validate, context, creator, surround, match, lazy } from '../../combinator';
|
|
5
|
+
import { union, some, validate, context, creator, surround, open, match, lazy } from '../../combinator';
|
|
6
6
|
import { inline } from '../inline';
|
|
7
7
|
import { str } from '../source';
|
|
8
|
-
import { startLoose,
|
|
8
|
+
import { startLoose, blank } from '../util';
|
|
9
9
|
import { html as h, defrag } from 'typed-dom';
|
|
10
10
|
import { memoize } from 'spica/memoize';
|
|
11
11
|
import { Cache } from 'spica/cache';
|
|
@@ -26,17 +26,17 @@ export const html: HTMLParser = lazy(() => creator(validate('<', validate(/^<[a-
|
|
|
26
26
|
memoize(
|
|
27
27
|
([, tag]) =>
|
|
28
28
|
surround(
|
|
29
|
-
`<${tag}`, some(union([attribute])),
|
|
29
|
+
`<${tag}`, some(union([attribute])), /^\s*>/, true,
|
|
30
30
|
([, bs = []], rest) =>
|
|
31
31
|
[[h(tag as 'span', attributes('html', [], attrspec[tag], bs))], rest]),
|
|
32
32
|
([, tag]) => tag)),
|
|
33
33
|
match(
|
|
34
|
-
/^(?=<(sup|sub|small
|
|
34
|
+
/^(?=<(sup|sub|small)(?=[^\S\n]|>))/,
|
|
35
35
|
memoize(
|
|
36
36
|
([, tag]) =>
|
|
37
37
|
validate(`<${tag}`, `</${tag}>`,
|
|
38
38
|
surround<HTMLParser.TagParser, string>(surround(
|
|
39
|
-
str(`<${tag}`), some(attribute), str(
|
|
39
|
+
str(`<${tag}`), some(attribute), str(/^\s*>/), true),
|
|
40
40
|
startLoose(
|
|
41
41
|
context((() => {
|
|
42
42
|
switch (tag) {
|
|
@@ -58,25 +58,49 @@ export const html: HTMLParser = lazy(() => creator(validate('<', validate(/^<[a-
|
|
|
58
58
|
}},
|
|
59
59
|
};
|
|
60
60
|
default:
|
|
61
|
+
assert(false);
|
|
61
62
|
return {};
|
|
62
63
|
}
|
|
63
64
|
})(),
|
|
64
|
-
some(union([
|
|
65
|
+
some(union([
|
|
66
|
+
some(inline, blank(/\n?/, `</${tag}>`)),
|
|
67
|
+
open(/^\n?/, some(inline, '</'), true),
|
|
68
|
+
]), `</${tag}>`)), `</${tag}>`),
|
|
65
69
|
str(`</${tag}>`), false,
|
|
66
70
|
([as, bs, cs], rest, context) =>
|
|
67
|
-
[[elem(tag, as,
|
|
71
|
+
[[elem(tag, as, defrag(bs), cs, context)], rest])),
|
|
68
72
|
([, tag]) => tag)),
|
|
73
|
+
match(
|
|
74
|
+
/^(?=<(bdo|bdi)(?=[^\S\n]|>))/,
|
|
75
|
+
memoize(
|
|
76
|
+
([, tag]) =>
|
|
77
|
+
validate(`<${tag}`, `</${tag}>`,
|
|
78
|
+
surround<HTMLParser.TagParser, string>(surround(
|
|
79
|
+
str(`<${tag}`), some(attribute), str(/^\s*>/), true),
|
|
80
|
+
startLoose(some(union([
|
|
81
|
+
some(inline, blank(/\n?/, `</${tag}>`)),
|
|
82
|
+
open(/^\n?/, some(inline, '</'), true),
|
|
83
|
+
]), `</${tag}>`), `</${tag}>`),
|
|
84
|
+
str(`</${tag}>`), false,
|
|
85
|
+
([as, bs, cs], rest) =>
|
|
86
|
+
[[elem(tag, as, defrag(bs), cs, {})], rest],
|
|
87
|
+
([as, bs], rest) =>
|
|
88
|
+
as.length === 1 ? [unshift(as, bs), rest] : undefined)),
|
|
89
|
+
([, tag]) => tag)),
|
|
69
90
|
match(
|
|
70
91
|
/^(?=<([a-z]+)(?=[^\S\n]|>))/,
|
|
71
92
|
memoize(
|
|
72
93
|
([, tag]) =>
|
|
73
94
|
validate(`<${tag}`, `</${tag}>`,
|
|
74
95
|
surround<HTMLParser.TagParser, string>(surround(
|
|
75
|
-
str(`<${tag}`), some(attribute), str(
|
|
76
|
-
startLoose(some(union([
|
|
96
|
+
str(`<${tag}`), some(attribute), str(/^\s*>/), true),
|
|
97
|
+
startLoose(some(union([
|
|
98
|
+
some(inline, blank(/\n?/, `</${tag}>`)),
|
|
99
|
+
open(/^\n?/, some(inline, '</'), true),
|
|
100
|
+
]), `</${tag}>`), `</${tag}>`),
|
|
77
101
|
str(`</${tag}>`), false,
|
|
78
102
|
([as, bs, cs], rest) =>
|
|
79
|
-
[[elem(tag, as,
|
|
103
|
+
[[elem(tag, as, defrag(bs), cs, {})], rest],
|
|
80
104
|
([as, bs], rest) =>
|
|
81
105
|
as.length === 1 ? [unshift(as, bs), rest] : undefined)),
|
|
82
106
|
([, tag]) => tag,
|
|
@@ -89,6 +113,7 @@ export const attribute: HTMLParser.TagParser.AttributeParser = union([
|
|
|
89
113
|
|
|
90
114
|
function elem(tag: string, as: string[], bs: (HTMLElement | string)[], cs: string[], context: MarkdownParser.Context): HTMLElement {
|
|
91
115
|
assert(as.length > 0);
|
|
116
|
+
assert(as[0][0] === '<' && as[as.length - 1].slice(-1) === '>');
|
|
92
117
|
assert(bs.length === defrag(bs).length);
|
|
93
118
|
assert(cs.length === 1);
|
|
94
119
|
if (!tags.includes(tag)) return invalid('tag', `Invalid HTML tag <${tag}>.`, as, bs, cs);
|
|
@@ -110,8 +135,7 @@ function elem(tag: string, as: string[], bs: (HTMLElement | string)[], cs: strin
|
|
|
110
135
|
}
|
|
111
136
|
let attrs: Record<string, string | undefined> | undefined;
|
|
112
137
|
switch (true) {
|
|
113
|
-
case
|
|
114
|
-
|| 'data-invalid-syntax' in (attrs = attributes('html', [], attrspec[tag], as.slice(1, -1) as string[])):
|
|
138
|
+
case 'data-invalid-syntax' in (attrs = attributes('html', [], attrspec[tag], as.slice(1, -1) as string[])):
|
|
115
139
|
return invalid('attribute', 'Invalid HTML attribute.', as, bs, cs);
|
|
116
140
|
default:
|
|
117
141
|
assert(attrs);
|
|
@@ -18,7 +18,6 @@ describe('Unit: parser/inline/insertion', () => {
|
|
|
18
18
|
it('basic', () => {
|
|
19
19
|
assert.deepStrictEqual(inspect(parser('++a++')), [['<ins>a</ins>'], '']);
|
|
20
20
|
assert.deepStrictEqual(inspect(parser('++a+b++')), [['<ins>a+b</ins>'], '']);
|
|
21
|
-
assert.deepStrictEqual(inspect(parser('++a ++')), [['<ins>a </ins>'], '']);
|
|
22
21
|
assert.deepStrictEqual(inspect(parser('++ ++')), [['<ins> </ins>'], '']);
|
|
23
22
|
assert.deepStrictEqual(inspect(parser('++ a++')), [['<ins> a</ins>'], '']);
|
|
24
23
|
assert.deepStrictEqual(inspect(parser('++ a ++')), [['<ins> a </ins>'], '']);
|
|
@@ -26,7 +25,11 @@ describe('Unit: parser/inline/insertion', () => {
|
|
|
26
25
|
assert.deepStrictEqual(inspect(parser('++\na++')), [['<ins><br>a</ins>'], '']);
|
|
27
26
|
assert.deepStrictEqual(inspect(parser('++\\\na++')), [['<ins><span class="linebreak"> </span>a</ins>'], '']);
|
|
28
27
|
assert.deepStrictEqual(inspect(parser('++<wbr>a++')), [['<ins><wbr>a</ins>'], '']);
|
|
28
|
+
assert.deepStrictEqual(inspect(parser('++a ++')), [['<ins>a </ins>'], '']);
|
|
29
|
+
assert.deepStrictEqual(inspect(parser('++a \n ++')), [['<ins>a </ins>'], '']);
|
|
29
30
|
assert.deepStrictEqual(inspect(parser('++a\n++')), [['<ins>a</ins>'], '']);
|
|
31
|
+
assert.deepStrictEqual(inspect(parser('++a\n ++')), [['<ins>a </ins>'], '']);
|
|
32
|
+
assert.deepStrictEqual(inspect(parser('++a\n<wbr>++')), [['<ins>a<wbr></ins>'], '']);
|
|
30
33
|
assert.deepStrictEqual(inspect(parser('++a\nb++')), [['<ins>a<br>b</ins>'], '']);
|
|
31
34
|
assert.deepStrictEqual(inspect(parser('++a\\\nb++')), [['<ins>a<span class="linebreak"> </span>b</ins>'], '']);
|
|
32
35
|
assert.deepStrictEqual(inspect(parser('++\\+++')), [['<ins>+</ins>'], '']);
|