securemark 0.264.0 → 0.266.0

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.
Files changed (35) hide show
  1. package/CHANGELOG.md +10 -0
  2. package/dist/index.js +44 -58
  3. package/index.d.ts +2 -1
  4. package/package.json +1 -1
  5. package/src/combinator/data/parser/some.ts +2 -1
  6. package/src/parser/api/bind.test.ts +17 -17
  7. package/src/parser/api/bind.ts +1 -0
  8. package/src/parser/api/normalize.ts +1 -1
  9. package/src/parser/api/parse.test.ts +6 -6
  10. package/src/parser/api/parse.ts +2 -1
  11. package/src/parser/block/blockquote.ts +1 -1
  12. package/src/parser/block/dlist.test.ts +34 -34
  13. package/src/parser/block/extension/aside.test.ts +3 -3
  14. package/src/parser/block/extension/aside.ts +2 -4
  15. package/src/parser/block/extension/figure.test.ts +2 -2
  16. package/src/parser/block/heading.test.ts +47 -47
  17. package/src/parser/block/olist.test.ts +30 -28
  18. package/src/parser/block/reply/cite.test.ts +1 -1
  19. package/src/parser/block/sidefence.ts +1 -1
  20. package/src/parser/block/ulist.test.ts +26 -26
  21. package/src/parser/inline/extension/index.test.ts +48 -48
  22. package/src/parser/inline/extension/index.ts +1 -1
  23. package/src/parser/inline/extension/indexee.ts +19 -18
  24. package/src/parser/inline/extension/indexer.ts +1 -1
  25. package/src/parser/inline/link.test.ts +26 -22
  26. package/src/parser/inline/link.ts +9 -14
  27. package/src/parser/inline/mark.test.ts +9 -9
  28. package/src/parser/inline/mark.ts +1 -1
  29. package/src/parser/inline.test.ts +7 -6
  30. package/src/parser/processor/figure.test.ts +19 -19
  31. package/src/parser/processor/figure.ts +0 -2
  32. package/src/parser/processor/footnote.test.ts +66 -66
  33. package/src/parser/processor/footnote.ts +11 -15
  34. package/src/util/toc.test.ts +28 -28
  35. package/src/util/toc.ts +0 -2
@@ -31,46 +31,46 @@ describe('Unit: parser/block/dlist', () => {
31
31
  });
32
32
 
33
33
  it('single', () => {
34
- assert.deepStrictEqual(inspect(parser('~ a')), [['<dl><dt id="index:a">a</dt><dd></dd></dl>'], '']);
35
- assert.deepStrictEqual(inspect(parser('~ \\')), [['<dl><dt id="index:\\">\\</dt><dd></dd></dl>'], '']);
36
- assert.deepStrictEqual(inspect(parser('~ \\ a')), [['<dl><dt id="index:a">a</dt><dd></dd></dl>'], '']);
37
- assert.deepStrictEqual(inspect(parser('~ a\nb')), [['<dl><dt id="index:a">a</dt><dd>b</dd></dl>'], '']);
38
- assert.deepStrictEqual(inspect(parser('~ a\nb\n')), [['<dl><dt id="index:a">a</dt><dd>b</dd></dl>'], '']);
39
- assert.deepStrictEqual(inspect(parser('~ a\nb\nc')), [['<dl><dt id="index:a">a</dt><dd>b<br>c</dd></dl>'], '']);
40
- assert.deepStrictEqual(inspect(parser('~ a\nb\n\\\nc')), [['<dl><dt id="index:a">a</dt><dd>b<br>\\<br>c</dd></dl>'], '']);
41
- assert.deepStrictEqual(inspect(parser('~ a\n~')), [['<dl><dt id="index:a">a</dt><dd>~</dd></dl>'], '']);
42
- assert.deepStrictEqual(inspect(parser('~ a\n~b')), [['<dl><dt id="index:a">a</dt><dd>~b</dd></dl>'], '']);
43
- assert.deepStrictEqual(inspect(parser('~ a\n~ b')), [['<dl><dt id="index:a">a</dt><dt id="index:b">b</dt><dd></dd></dl>'], '']);
44
- assert.deepStrictEqual(inspect(parser('~ a\n:')), [['<dl><dt id="index:a">a</dt><dd>:</dd></dl>'], '']);
45
- assert.deepStrictEqual(inspect(parser('~ a\n: ')), [['<dl><dt id="index:a">a</dt><dd>:</dd></dl>'], '']);
46
- assert.deepStrictEqual(inspect(parser('~ a\n: \n')), [['<dl><dt id="index:a">a</dt><dd>:</dd></dl>'], '']);
47
- assert.deepStrictEqual(inspect(parser('~ a\n: \\')), [['<dl><dt id="index:a">a</dt><dd>\\</dd></dl>'], '']);
48
- assert.deepStrictEqual(inspect(parser('~ a\n:b')), [['<dl><dt id="index:a">a</dt><dd>:b</dd></dl>'], '']);
49
- assert.deepStrictEqual(inspect(parser('~ a\n: b')), [['<dl><dt id="index:a">a</dt><dd>b</dd></dl>'], '']);
50
- assert.deepStrictEqual(inspect(parser('~ a\n: b\n')), [['<dl><dt id="index:a">a</dt><dd>b</dd></dl>'], '']);
51
- assert.deepStrictEqual(inspect(parser('~ a\n: b\nc')), [['<dl><dt id="index:a">a</dt><dd>b<br>c</dd></dl>'], '']);
52
- assert.deepStrictEqual(inspect(parser('~ a\n: b\n\\\nc')), [['<dl><dt id="index:a">a</dt><dd>b<br>\\<br>c</dd></dl>'], '']);
53
- assert.deepStrictEqual(inspect(parser('~ a~ b')), [['<dl><dt id="index:a~_b">a~ b</dt><dd></dd></dl>'], '']);
54
- assert.deepStrictEqual(inspect(parser('~ a: b')), [['<dl><dt id="index:a:_b">a: b</dt><dd></dd></dl>'], '']);
55
- assert.deepStrictEqual(inspect(parser('~ a \n: b \nc ')), [['<dl><dt id="index:a">a</dt><dd>b<br>c</dd></dl>'], '']);
56
- assert.deepStrictEqual(inspect(parser('~ a \n: b\n c ')), [['<dl><dt id="index:a">a</dt><dd>b<br> c</dd></dl>'], '']);
34
+ assert.deepStrictEqual(inspect(parser('~ a')), [['<dl><dt id="index::a">a</dt><dd></dd></dl>'], '']);
35
+ assert.deepStrictEqual(inspect(parser('~ \\')), [['<dl><dt id="index::\\">\\</dt><dd></dd></dl>'], '']);
36
+ assert.deepStrictEqual(inspect(parser('~ \\ a')), [['<dl><dt id="index::a">a</dt><dd></dd></dl>'], '']);
37
+ assert.deepStrictEqual(inspect(parser('~ a\nb')), [['<dl><dt id="index::a">a</dt><dd>b</dd></dl>'], '']);
38
+ assert.deepStrictEqual(inspect(parser('~ a\nb\n')), [['<dl><dt id="index::a">a</dt><dd>b</dd></dl>'], '']);
39
+ assert.deepStrictEqual(inspect(parser('~ a\nb\nc')), [['<dl><dt id="index::a">a</dt><dd>b<br>c</dd></dl>'], '']);
40
+ assert.deepStrictEqual(inspect(parser('~ a\nb\n\\\nc')), [['<dl><dt id="index::a">a</dt><dd>b<br>\\<br>c</dd></dl>'], '']);
41
+ assert.deepStrictEqual(inspect(parser('~ a\n~')), [['<dl><dt id="index::a">a</dt><dd>~</dd></dl>'], '']);
42
+ assert.deepStrictEqual(inspect(parser('~ a\n~b')), [['<dl><dt id="index::a">a</dt><dd>~b</dd></dl>'], '']);
43
+ assert.deepStrictEqual(inspect(parser('~ a\n~ b')), [['<dl><dt id="index::a">a</dt><dt id="index::b">b</dt><dd></dd></dl>'], '']);
44
+ assert.deepStrictEqual(inspect(parser('~ a\n:')), [['<dl><dt id="index::a">a</dt><dd>:</dd></dl>'], '']);
45
+ assert.deepStrictEqual(inspect(parser('~ a\n: ')), [['<dl><dt id="index::a">a</dt><dd>:</dd></dl>'], '']);
46
+ assert.deepStrictEqual(inspect(parser('~ a\n: \n')), [['<dl><dt id="index::a">a</dt><dd>:</dd></dl>'], '']);
47
+ assert.deepStrictEqual(inspect(parser('~ a\n: \\')), [['<dl><dt id="index::a">a</dt><dd>\\</dd></dl>'], '']);
48
+ assert.deepStrictEqual(inspect(parser('~ a\n:b')), [['<dl><dt id="index::a">a</dt><dd>:b</dd></dl>'], '']);
49
+ assert.deepStrictEqual(inspect(parser('~ a\n: b')), [['<dl><dt id="index::a">a</dt><dd>b</dd></dl>'], '']);
50
+ assert.deepStrictEqual(inspect(parser('~ a\n: b\n')), [['<dl><dt id="index::a">a</dt><dd>b</dd></dl>'], '']);
51
+ assert.deepStrictEqual(inspect(parser('~ a\n: b\nc')), [['<dl><dt id="index::a">a</dt><dd>b<br>c</dd></dl>'], '']);
52
+ assert.deepStrictEqual(inspect(parser('~ a\n: b\n\\\nc')), [['<dl><dt id="index::a">a</dt><dd>b<br>\\<br>c</dd></dl>'], '']);
53
+ assert.deepStrictEqual(inspect(parser('~ a~ b')), [['<dl><dt id="index::a~_b">a~ b</dt><dd></dd></dl>'], '']);
54
+ assert.deepStrictEqual(inspect(parser('~ a: b')), [['<dl><dt id="index::a:_b">a: b</dt><dd></dd></dl>'], '']);
55
+ assert.deepStrictEqual(inspect(parser('~ a \n: b \nc ')), [['<dl><dt id="index::a">a</dt><dd>b<br>c</dd></dl>'], '']);
56
+ assert.deepStrictEqual(inspect(parser('~ a \n: b\n c ')), [['<dl><dt id="index::a">a</dt><dd>b<br> c</dd></dl>'], '']);
57
57
  });
58
58
 
59
59
  it('multiple', () => {
60
- assert.deepStrictEqual(inspect(parser('~ a\n: b\n~ c\n: d')), [['<dl><dt id="index:a">a</dt><dd>b</dd><dt id="index:c">c</dt><dd>d</dd></dl>'], '']);
61
- assert.deepStrictEqual(inspect(parser('~ a\n b\nc\n d')), [['<dl><dt id="index:a">a</dt><dd> b<br>c<br> d</dd></dl>'], '']);
62
- assert.deepStrictEqual(inspect(parser('~ a\n: b\nc\n: d')), [['<dl><dt id="index:a">a</dt><dd>b<br>c</dd><dd>d</dd></dl>'], '']);
63
- assert.deepStrictEqual(inspect(parser('~ a\n: b\nc\n~ d\n: e')), [['<dl><dt id="index:a">a</dt><dd>b<br>c</dd><dt id="index:d">d</dt><dd>e</dd></dl>'], '']);
64
- assert.deepStrictEqual(inspect(parser('~ a\n: b\n~ c\n: d\n~ e\n: f')), [['<dl><dt id="index:a">a</dt><dd>b</dd><dt id="index:c">c</dt><dd>d</dd><dt id="index:e">e</dt><dd>f</dd></dl>'], '']);
60
+ assert.deepStrictEqual(inspect(parser('~ a\n: b\n~ c\n: d')), [['<dl><dt id="index::a">a</dt><dd>b</dd><dt id="index::c">c</dt><dd>d</dd></dl>'], '']);
61
+ assert.deepStrictEqual(inspect(parser('~ a\n b\nc\n d')), [['<dl><dt id="index::a">a</dt><dd> b<br>c<br> d</dd></dl>'], '']);
62
+ assert.deepStrictEqual(inspect(parser('~ a\n: b\nc\n: d')), [['<dl><dt id="index::a">a</dt><dd>b<br>c</dd><dd>d</dd></dl>'], '']);
63
+ assert.deepStrictEqual(inspect(parser('~ a\n: b\nc\n~ d\n: e')), [['<dl><dt id="index::a">a</dt><dd>b<br>c</dd><dt id="index::d">d</dt><dd>e</dd></dl>'], '']);
64
+ assert.deepStrictEqual(inspect(parser('~ a\n: b\n~ c\n: d\n~ e\n: f')), [['<dl><dt id="index::a">a</dt><dd>b</dd><dt id="index::c">c</dt><dd>d</dd><dt id="index::e">e</dt><dd>f</dd></dl>'], '']);
65
65
  });
66
66
 
67
67
  it('index', () => {
68
- assert.deepStrictEqual(inspect(parser('~ a [#b]')), [['<dl><dt id="index:b">a<span class="indexer" data-index="b"></span></dt><dd></dd></dl>'], '']);
69
- assert.deepStrictEqual(inspect(parser('~ a [#b]\\')), [['<dl><dt id="index:a_[#b]">a [<a class="hashtag" href="/hashtags/b">#b</a>]</dt><dd></dd></dl>'], '']);
70
- assert.deepStrictEqual(inspect(parser('~ A')), [['<dl><dt id="index:A">A</dt><dd></dd></dl>'], '']);
71
- assert.deepStrictEqual(inspect(parser('~ _A_')), [['<dl><dt id="index:A"><em>A</em></dt><dd></dd></dl>'], '']);
72
- assert.deepStrictEqual(inspect(parser('~ `A`')), [['<dl><dt id="index:`A`"><code data-src="`A`">A</code></dt><dd></dd></dl>'], '']);
73
- assert.deepStrictEqual(inspect(parser('~ ${A}$')), [['<dl><dt id="index:${A}$"><span class="math" translate="no" data-src="${A}$">${A}$</span></dt><dd></dd></dl>'], '']);
68
+ assert.deepStrictEqual(inspect(parser('~ a [#b]')), [['<dl><dt id="index::b">a<span class="indexer" data-index="b"></span></dt><dd></dd></dl>'], '']);
69
+ assert.deepStrictEqual(inspect(parser('~ a [#b]\\')), [['<dl><dt id="index::a_[#b]">a [<a class="hashtag" href="/hashtags/b">#b</a>]</dt><dd></dd></dl>'], '']);
70
+ assert.deepStrictEqual(inspect(parser('~ A')), [['<dl><dt id="index::A">A</dt><dd></dd></dl>'], '']);
71
+ assert.deepStrictEqual(inspect(parser('~ _A_')), [['<dl><dt id="index::A"><em>A</em></dt><dd></dd></dl>'], '']);
72
+ assert.deepStrictEqual(inspect(parser('~ `A`')), [['<dl><dt id="index::`A`"><code data-src="`A`">A</code></dt><dd></dd></dl>'], '']);
73
+ assert.deepStrictEqual(inspect(parser('~ ${A}$')), [['<dl><dt id="index::${A}$"><span class="math" translate="no" data-src="${A}$">${A}$</span></dt><dd></dd></dl>'], '']);
74
74
  });
75
75
 
76
76
  });
@@ -14,9 +14,9 @@ describe('Unit: parser/block/extension/aside', () => {
14
14
  });
15
15
 
16
16
  it('valid', () => {
17
- assert.deepStrictEqual(inspect(parser('~~~aside\n# 0\n~~~')), [['<aside id="index:0" class="aside"><h1>0</h1><h2>References</h2><ol class="references"></ol></aside>'], '']);
18
- assert.deepStrictEqual(inspect(parser('~~~aside\n## 0\n~~~')), [['<aside id="index:0" class="aside"><h2>0</h2><h2>References</h2><ol class="references"></ol></aside>'], '']);
19
- assert.deepStrictEqual(inspect(parser('~~~aside\n# 0\n\n$-0.0\n\n## 1\n\n$test-a\n> \n~~~')), [['<aside id="index:0" class="aside"><h1>0</h1><figure data-label="$-0.0" data-group="$" hidden="" data-number="0.0"></figure><h2>1</h2><figure data-type="quote" data-label="test-a" data-group="test" data-number="1.1"><figcaption><span class="figindex">Test 1.1. </span><span class="figtext"></span></figcaption><div><blockquote></blockquote></div></figure><h2>References</h2><ol class="references"></ol></aside>'], '']);
17
+ assert.deepStrictEqual(inspect(parser('~~~aside\n# 0\n~~~')), [['<aside id="index::0" class="aside"><h1>0</h1><h2>References</h2><ol class="references"></ol></aside>'], '']);
18
+ assert.deepStrictEqual(inspect(parser('~~~aside\n## 0\n~~~')), [['<aside id="index::0" class="aside"><h2>0</h2><h2>References</h2><ol class="references"></ol></aside>'], '']);
19
+ assert.deepStrictEqual(inspect(parser('~~~aside\n# 0\n\n$-0.0\n\n## 1\n\n$test-a\n> \n~~~')), [['<aside id="index::0" class="aside"><h1>0</h1><figure data-label="$-0.0" data-group="$" hidden="" data-number="0.0"></figure><h2>1</h2><figure data-type="quote" data-label="test-a" data-group="test" data-number="1.1"><figcaption><span class="figindex">Test 1.1. </span><span class="figtext"></span></figcaption><div><blockquote></blockquote></div></figure><h2>References</h2><ol class="references"></ol></aside>'], '']);
20
20
  });
21
21
 
22
22
  });
@@ -26,8 +26,6 @@ export const aside: ExtensionParser.AsideParser = block(validate('~~~', fmap(
26
26
  },
27
27
  }, context);
28
28
  assert(!document.querySelector('[id]'));
29
- // Bug: Firefox
30
- //const heading = document.querySelector(':scope > h1:first-child');
31
29
  const heading = 'H1 H2 H3 H4 H5 H6'.split(' ').includes(document.firstElementChild?.tagName!) && document.firstElementChild as HTMLHeadingElement;
32
30
  if (!heading) return [html('pre', {
33
31
  class: 'invalid',
@@ -36,9 +34,9 @@ export const aside: ExtensionParser.AsideParser = block(validate('~~~', fmap(
36
34
  'data-invalid-type': 'content',
37
35
  'data-invalid-message': 'Missing the title at the first line',
38
36
  }, `${opener}${body}${closer}`)];
39
- assert(identity(text(heading)));
37
+ assert(identity(context.id, text(heading)));
40
38
  return [
41
- html('aside', { id: identity(text(heading)), class: 'aside' }, [
39
+ html('aside', { id: identity(context.id, text(heading)), class: 'aside' }, [
42
40
  document,
43
41
  html('h2', 'References'),
44
42
  references,
@@ -44,8 +44,8 @@ describe('Unit: parser/block/extension/figure', () => {
44
44
  assert.deepStrictEqual(inspect(parser('~~~figure [$group-name]\n!https://host\n\n\n~~~')), [['<figure data-type="media" data-label="group-name" data-group="group"><figcaption><span class="figindex"></span><span class="figtext"></span></figcaption><div><a href="https://host" target="_blank"><img class="media" data-src="https://host" alt=""></a></div></figure>'], '']);
45
45
  assert.deepStrictEqual(inspect(parser('~~~figure [$group-name]\n!https://host\n\n\\\n~~~')), [['<figure data-type="media" data-label="group-name" data-group="group"><figcaption><span class="figindex"></span><span class="figtext">\\</span></figcaption><div><a href="https://host" target="_blank"><img class="media" data-src="https://host" alt=""></a></div></figure>'], '']);
46
46
  assert.deepStrictEqual(inspect(parser('~~~figure [$group-name]\n!https://host\n\n!https://caption\n~~~')), [['<figure data-type="media" data-label="group-name" data-group="group"><figcaption><span class="figindex"></span><span class="figtext">!<a class="url" href="https://caption" target="_blank">https://caption</a></span></figcaption><div><a href="https://host" target="_blank"><img class="media" data-src="https://host" alt=""></a></div></figure>'], '']);
47
- assert.deepStrictEqual(inspect(parser('~~~figure [$group-name]\n- a\n~~~')), [['<figure data-type="list" data-label="group-name" data-group="group"><figcaption><span class="figindex"></span><span class="figtext"></span></figcaption><div><ul><li>a</li></ul></div></figure>'], '']);
48
- assert.deepStrictEqual(inspect(parser('~~~figure [$group-name]\n1. a\n~~~')), [['<figure data-type="list" data-label="group-name" data-group="group"><figcaption><span class="figindex"></span><span class="figtext"></span></figcaption><div><ol><li>a</li></ol></div></figure>'], '']);
47
+ assert.deepStrictEqual(inspect(parser('~~~figure [$group-name]\n- a\n~~~')), [['<figure data-type="list" data-label="group-name" data-group="group"><figcaption><span class="figindex"></span><span class="figtext"></span></figcaption><div><ul><li id="index::a">a</li></ul></div></figure>'], '']);
48
+ assert.deepStrictEqual(inspect(parser('~~~figure [$group-name]\n1. a\n~~~')), [['<figure data-type="list" data-label="group-name" data-group="group"><figcaption><span class="figindex"></span><span class="figtext"></span></figcaption><div><ol><li id="index::a">a</li></ol></div></figure>'], '']);
49
49
  assert.deepStrictEqual(inspect(parser('~~~figure [$group-name]\n|\n|-\n|\n~~~')), [['<figure data-type="table" data-label="group-name" data-group="group"><figcaption><span class="figindex"></span><span class="figtext"></span></figcaption><div><table><thead><tr></tr></thead><tbody><tr></tr></tbody></table></div></figure>'], '']);
50
50
  assert.deepStrictEqual(inspect(parser('~~~figure [$group-name]\n```\n\n```\n~~~')), [['<figure data-type="text" data-label="group-name" data-group="group"><figcaption><span class="figindex"></span><span class="figtext"></span></figcaption><div><pre class="text"></pre></div></figure>'], '']);
51
51
  assert.deepStrictEqual(inspect(parser('~~~figure [$group-name]\n```\n~~~\n```\n\n~~~')), [['<figure data-type="text" data-label="group-name" data-group="group"><figcaption><span class="figindex"></span><span class="figtext"></span></figcaption><div><pre class="text">~~~</pre></div></figure>'], '']);
@@ -27,60 +27,60 @@ describe('Unit: parser/block/heading', () => {
27
27
  assert.deepStrictEqual(inspect(parser('# a\nb')), undefined);
28
28
  assert.deepStrictEqual(inspect(parser('# *a\nb*')), undefined);
29
29
  assert.deepStrictEqual(inspect(parser('# a\n#b')), undefined);
30
- assert.deepStrictEqual(inspect(parser('####### a')), [['<h6 class="invalid" id="index:a">a</h6>'], '']);
30
+ assert.deepStrictEqual(inspect(parser('####### a')), [['<h6 class="invalid" id="index::a">a</h6>'], '']);
31
31
  assert.deepStrictEqual(inspect(parser(' # a')), undefined);
32
32
  });
33
33
 
34
34
  it('basic', () => {
35
- assert.deepStrictEqual(inspect(parser('# a')), [['<h1 id="index:a">a</h1>'], '']);
36
- assert.deepStrictEqual(inspect(parser('# a ')), [['<h1 id="index:a">a</h1>'], '']);
37
- assert.deepStrictEqual(inspect(parser('# a b c \n')), [['<h1 id="index:a_b_c">a b c</h1>'], '']);
38
- assert.deepStrictEqual(inspect(parser('# a\n')), [['<h1 id="index:a">a</h1>'], '']);
39
- assert.deepStrictEqual(inspect(parser('# _a_`b`${c}$')), [['<h1 id="index:a`b`${c}$"><em>a</em><code data-src="`b`">b</code><span class="math" translate="no" data-src="${c}$">${c}$</span></h1>'], '']);
40
- assert.deepStrictEqual(inspect(parser('# a\\')), [['<h1 id="index:a">a</h1>'], '']);
41
- assert.deepStrictEqual(inspect(parser('# a\\\n')), [['<h1 id="index:a">a</h1>'], '']);
42
- assert.deepStrictEqual(inspect(parser('# \\')), [['<h1 id="index:\\">\\</h1>'], '']);
43
- assert.deepStrictEqual(inspect(parser('# \\ a')), [['<h1 id="index:a">a</h1>'], '']);
44
- assert.deepStrictEqual(inspect(parser('## \\')), [['<h2 id="index:\\">\\</h2>'], '']);
45
- assert.deepStrictEqual(inspect(parser('# @a')), [['<h1 id="index:@a">@a</h1>'], '']);
46
- assert.deepStrictEqual(inspect(parser('## @a')), [['<h2 id="index:@a"><a class="account" href="/@a">@a</a></h2>'], '']);
47
- assert.deepStrictEqual(inspect(parser('# http://host')), [['<h1 id="index:http://host">http://host</h1>'], '']);
48
- assert.deepStrictEqual(inspect(parser('## http://host')), [['<h2 id="index:http://host"><a class="url" href="http://host" target="_blank">http://host</a></h2>'], '']);
49
- assert.deepStrictEqual(inspect(parser('# !http://host')), [['<h1 id="index:!http://host">!http://host</h1>'], '']);
50
- assert.deepStrictEqual(inspect(parser('## !http://host')), [['<h2 id="index:!http://host">!<a class="url" href="http://host" target="_blank">http://host</a></h2>'], '']);
51
- assert.deepStrictEqual(inspect(parser('# a((b))')), [['<h1 id="index:a((b))">a<span class="paren">((b))</span></h1>'], '']);
52
- assert.deepStrictEqual(inspect(parser('## a((b))')), [['<h2 id="index:a((b))">a<span class="paren">((b))</span></h2>'], '']);
53
- assert.deepStrictEqual(inspect(parser('# a[[b]]')), [['<h1 id="index:a[[b]]">a[[b]]</h1>'], '']);
54
- assert.deepStrictEqual(inspect(parser('## a[[b]]')), [['<h2 id="index:a[[b]]">a[[b]]</h2>'], '']);
55
- assert.deepStrictEqual(inspect(parser('###### a')), [['<h6 id="index:a">a</h6>'], '']);
56
- assert.deepStrictEqual(inspect(parser('# a\n##')), [['<h1 id="index:a">a</h1>', '##'], '']);
57
- assert.deepStrictEqual(inspect(parser('# a\n## ')), [['<h1 id="index:a">a</h1>', '## '], '']);
58
- assert.deepStrictEqual(inspect(parser('# a\n## b')), [['<h1 id="index:a">a</h1>', '<h2 id="index:b">b</h2>'], '']);
59
- assert.deepStrictEqual(inspect(parser('# a\n##\n## b')), [['<h1 id="index:a">a</h1>', '##\n', '<h2 id="index:b">b</h2>'], '']);
35
+ assert.deepStrictEqual(inspect(parser('# a')), [['<h1 id="index::a">a</h1>'], '']);
36
+ assert.deepStrictEqual(inspect(parser('# a ')), [['<h1 id="index::a">a</h1>'], '']);
37
+ assert.deepStrictEqual(inspect(parser('# a b c \n')), [['<h1 id="index::a_b_c">a b c</h1>'], '']);
38
+ assert.deepStrictEqual(inspect(parser('# a\n')), [['<h1 id="index::a">a</h1>'], '']);
39
+ assert.deepStrictEqual(inspect(parser('# _a_`b`${c}$')), [['<h1 id="index::a`b`${c}$"><em>a</em><code data-src="`b`">b</code><span class="math" translate="no" data-src="${c}$">${c}$</span></h1>'], '']);
40
+ assert.deepStrictEqual(inspect(parser('# a\\')), [['<h1 id="index::a">a</h1>'], '']);
41
+ assert.deepStrictEqual(inspect(parser('# a\\\n')), [['<h1 id="index::a">a</h1>'], '']);
42
+ assert.deepStrictEqual(inspect(parser('# \\')), [['<h1 id="index::\\">\\</h1>'], '']);
43
+ assert.deepStrictEqual(inspect(parser('# \\ a')), [['<h1 id="index::a">a</h1>'], '']);
44
+ assert.deepStrictEqual(inspect(parser('## \\')), [['<h2 id="index::\\">\\</h2>'], '']);
45
+ assert.deepStrictEqual(inspect(parser('# @a')), [['<h1 id="index::@a">@a</h1>'], '']);
46
+ assert.deepStrictEqual(inspect(parser('## @a')), [['<h2 id="index::@a"><a class="account" href="/@a">@a</a></h2>'], '']);
47
+ assert.deepStrictEqual(inspect(parser('# http://host')), [['<h1 id="index::http://host">http://host</h1>'], '']);
48
+ assert.deepStrictEqual(inspect(parser('## http://host')), [['<h2 id="index::http://host"><a class="url" href="http://host" target="_blank">http://host</a></h2>'], '']);
49
+ assert.deepStrictEqual(inspect(parser('# !http://host')), [['<h1 id="index::!http://host">!http://host</h1>'], '']);
50
+ assert.deepStrictEqual(inspect(parser('## !http://host')), [['<h2 id="index::!http://host">!<a class="url" href="http://host" target="_blank">http://host</a></h2>'], '']);
51
+ assert.deepStrictEqual(inspect(parser('# a((b))')), [['<h1 id="index::a((b))">a<span class="paren">((b))</span></h1>'], '']);
52
+ assert.deepStrictEqual(inspect(parser('## a((b))')), [['<h2 id="index::a((b))">a<span class="paren">((b))</span></h2>'], '']);
53
+ assert.deepStrictEqual(inspect(parser('# a[[b]]')), [['<h1 id="index::a[[b]]">a[[b]]</h1>'], '']);
54
+ assert.deepStrictEqual(inspect(parser('## a[[b]]')), [['<h2 id="index::a[[b]]">a[[b]]</h2>'], '']);
55
+ assert.deepStrictEqual(inspect(parser('###### a')), [['<h6 id="index::a">a</h6>'], '']);
56
+ assert.deepStrictEqual(inspect(parser('# a\n##')), [['<h1 id="index::a">a</h1>', '##'], '']);
57
+ assert.deepStrictEqual(inspect(parser('# a\n## ')), [['<h1 id="index::a">a</h1>', '## '], '']);
58
+ assert.deepStrictEqual(inspect(parser('# a\n## b')), [['<h1 id="index::a">a</h1>', '<h2 id="index::b">b</h2>'], '']);
59
+ assert.deepStrictEqual(inspect(parser('# a\n##\n## b')), [['<h1 id="index::a">a</h1>', '##\n', '<h2 id="index::b">b</h2>'], '']);
60
60
  });
61
61
 
62
62
  it('indexer', () => {
63
- assert.deepStrictEqual(inspect(parser('# [#a]')), [['<h1 id="index:[#a]">[#a]</h1>'], '']);
64
- assert.deepStrictEqual(inspect(parser('# a[#b]')), [['<h1 id="index:a[#b]">a[#b]</h1>'], '']);
65
- assert.deepStrictEqual(inspect(parser('# a [#b]')), [['<h1 id="index:b">a<span class="indexer" data-index="b"></span></h1>'], '']);
66
- assert.deepStrictEqual(inspect(parser('# a [#b] ')), [['<h1 id="index:b">a<span class="indexer" data-index="b"></span></h1>'], '']);
67
- assert.deepStrictEqual(inspect(parser('# a [#b]\\')), [['<h1 id="index:a_[#b]">a [#b]</h1>'], '']);
68
- assert.deepStrictEqual(inspect(parser('# a [#B]')), [['<h1 id="index:B">a<span class="indexer" data-index="B"></span></h1>'], '']);
69
- assert.deepStrictEqual(inspect(parser('# a [#b ]')), [['<h1 id="index:b">a<span class="indexer" data-index="b"></span></h1>'], '']);
70
- assert.deepStrictEqual(inspect(parser('# a [#b ]')), [['<h1 id="index:b">a<span class="indexer" data-index="b"></span></h1>'], '']);
71
- assert.deepStrictEqual(inspect(parser('# a [#b c]')), [['<h1 id="index:b_c">a<span class="indexer" data-index="b_c"></span></h1>'], '']);
72
- assert.deepStrictEqual(inspect(parser('# a [#_b_`c`${d}$]')), [['<h1 id="index:b`c`${d}$">a<span class="indexer" data-index="b`c`${d}$"></span></h1>'], '']);
73
- assert.deepStrictEqual(inspect(parser('# a [#@a]')), [['<h1 id="index:@a">a<span class="indexer" data-index="@a"></span></h1>'], '']);
74
- assert.deepStrictEqual(inspect(parser('# a [#http://host]')), [['<h1 id="index:http://host">a<span class="indexer" data-index="http://host"></span></h1>'], '']);
75
- assert.deepStrictEqual(inspect(parser('# a [#!http://host]')), [['<h1 id="index:!http://host">a<span class="indexer" data-index="!http://host"></span></h1>'], '']);
76
- assert.deepStrictEqual(inspect(parser('# a [#a((b))]')), [['<h1 id="index:a((b))">a<span class="indexer" data-index="a((b))"></span></h1>'], '']);
77
- assert.deepStrictEqual(inspect(parser('# a [#a[[b]]]')), [['<h1 id="index:a[[b]]">a<span class="indexer" data-index="a[[b]]"></span></h1>'], '']);
78
- assert.deepStrictEqual(inspect(parser('# a [#b |c]')), [['<h1 id="index:c">a<span class="indexer" data-index="c"></span></h1>'], '']);
79
- assert.deepStrictEqual(inspect(parser('# a [#b] [#c]')), [['<h1 id="index:c">a [#b]<span class="indexer" data-index="c"></span></h1>'], '']);
80
- assert.deepStrictEqual(inspect(parser('# a [#b] \n')), [['<h1 id="index:b">a<span class="indexer" data-index="b"></span></h1>'], '']);
81
- assert.deepStrictEqual(inspect(parser('# a \\[#b]')), [['<h1 id="index:a_[#b]">a [#b]</h1>'], '']);
82
- assert.deepStrictEqual(inspect(parser('## a [#b] [#c]')), [['<h2 id="index:c">a [<a class="hashtag" href="/hashtags/b">#b</a>]<span class="indexer" data-index="c"></span></h2>'], '']);
83
- assert.deepStrictEqual(inspect(parser('## a [#b ] [#c ]')), [['<h2 id="index:c">a [<a class="hashtag" href="/hashtags/b">#b</a> ]<span class="indexer" data-index="c"></span></h2>'], '']);
63
+ assert.deepStrictEqual(inspect(parser('# [#a]')), [['<h1 id="index::[#a]">[#a]</h1>'], '']);
64
+ assert.deepStrictEqual(inspect(parser('# a[#b]')), [['<h1 id="index::a[#b]">a[#b]</h1>'], '']);
65
+ assert.deepStrictEqual(inspect(parser('# a [#b]')), [['<h1 id="index::b">a<span class="indexer" data-index="b"></span></h1>'], '']);
66
+ assert.deepStrictEqual(inspect(parser('# a [#b] ')), [['<h1 id="index::b">a<span class="indexer" data-index="b"></span></h1>'], '']);
67
+ assert.deepStrictEqual(inspect(parser('# a [#b]\\')), [['<h1 id="index::a_[#b]">a [#b]</h1>'], '']);
68
+ assert.deepStrictEqual(inspect(parser('# a [#B]')), [['<h1 id="index::B">a<span class="indexer" data-index="B"></span></h1>'], '']);
69
+ assert.deepStrictEqual(inspect(parser('# a [#b ]')), [['<h1 id="index::b">a<span class="indexer" data-index="b"></span></h1>'], '']);
70
+ assert.deepStrictEqual(inspect(parser('# a [#b ]')), [['<h1 id="index::b">a<span class="indexer" data-index="b"></span></h1>'], '']);
71
+ assert.deepStrictEqual(inspect(parser('# a [#b c]')), [['<h1 id="index::b_c">a<span class="indexer" data-index="b_c"></span></h1>'], '']);
72
+ assert.deepStrictEqual(inspect(parser('# a [#_b_`c`${d}$]')), [['<h1 id="index::b`c`${d}$">a<span class="indexer" data-index="b`c`${d}$"></span></h1>'], '']);
73
+ assert.deepStrictEqual(inspect(parser('# a [#@a]')), [['<h1 id="index::@a">a<span class="indexer" data-index="@a"></span></h1>'], '']);
74
+ assert.deepStrictEqual(inspect(parser('# a [#http://host]')), [['<h1 id="index::http://host">a<span class="indexer" data-index="http://host"></span></h1>'], '']);
75
+ assert.deepStrictEqual(inspect(parser('# a [#!http://host]')), [['<h1 id="index::!http://host">a<span class="indexer" data-index="!http://host"></span></h1>'], '']);
76
+ assert.deepStrictEqual(inspect(parser('# a [#a((b))]')), [['<h1 id="index::a((b))">a<span class="indexer" data-index="a((b))"></span></h1>'], '']);
77
+ assert.deepStrictEqual(inspect(parser('# a [#a[[b]]]')), [['<h1 id="index::a[[b]]">a<span class="indexer" data-index="a[[b]]"></span></h1>'], '']);
78
+ assert.deepStrictEqual(inspect(parser('# a [#b |c]')), [['<h1 id="index::c">a<span class="indexer" data-index="c"></span></h1>'], '']);
79
+ assert.deepStrictEqual(inspect(parser('# a [#b] [#c]')), [['<h1 id="index::c">a [#b]<span class="indexer" data-index="c"></span></h1>'], '']);
80
+ assert.deepStrictEqual(inspect(parser('# a [#b] \n')), [['<h1 id="index::b">a<span class="indexer" data-index="b"></span></h1>'], '']);
81
+ assert.deepStrictEqual(inspect(parser('# a \\[#b]')), [['<h1 id="index::a_[#b]">a [#b]</h1>'], '']);
82
+ assert.deepStrictEqual(inspect(parser('## a [#b] [#c]')), [['<h2 id="index::c">a [<a class="hashtag" href="/hashtags/b">#b</a>]<span class="indexer" data-index="c"></span></h2>'], '']);
83
+ assert.deepStrictEqual(inspect(parser('## a [#b ] [#c ]')), [['<h2 id="index::c">a [<a class="hashtag" href="/hashtags/b">#b</a> ]<span class="indexer" data-index="c"></span></h2>'], '']);
84
84
  });
85
85
 
86
86
  });
@@ -39,12 +39,12 @@ describe('Unit: parser/block/olist', () => {
39
39
  // filled
40
40
  assert.deepStrictEqual(inspect(parser('1. \\')), [['<ol><li></li></ol>'], '']);
41
41
  assert.deepStrictEqual(inspect(parser('1. \\\n')), [['<ol><li></li></ol>'], '']);
42
- assert.deepStrictEqual(inspect(parser('1. -')), [['<ol><li>-</li></ol>'], '']);
43
- assert.deepStrictEqual(inspect(parser('1. -\n')), [['<ol><li>-</li></ol>'], '']);
42
+ assert.deepStrictEqual(inspect(parser('1. -')), [['<ol><li id="index::-">-</li></ol>'], '']);
43
+ assert.deepStrictEqual(inspect(parser('1. -\n')), [['<ol><li id="index::-">-</li></ol>'], '']);
44
44
  // pending
45
45
  assert.deepStrictEqual(inspect(parser('(1) ')), [['<ol data-format="paren"><li></li></ol>'], '']);
46
46
  // filled
47
- assert.deepStrictEqual(inspect(parser('(1) a')), [['<ol data-format="paren"><li>a</li></ol>'], '']);
47
+ assert.deepStrictEqual(inspect(parser('(1) a')), [['<ol data-format="paren"><li id="index::a">a</li></ol>'], '']);
48
48
  });
49
49
 
50
50
  it('multiple', () => {
@@ -55,8 +55,8 @@ describe('Unit: parser/block/olist', () => {
55
55
  assert.deepStrictEqual(inspect(parser('0.\n0. ')), [['<ol><li></li><li></li></ol>'], '']);
56
56
  assert.deepStrictEqual(inspect(parser('0.\n0.\n')), [['<ol><li></li><li></li></ol>'], '']);
57
57
  // filled
58
- assert.deepStrictEqual(inspect(parser('0. 1\n0. 2')), [['<ol><li>1</li><li>2</li></ol>'], '']);
59
- assert.deepStrictEqual(inspect(parser('0. 1\n0. 2\n0. 3')), [['<ol><li>1</li><li>2</li><li>3</li></ol>'], '']);
58
+ assert.deepStrictEqual(inspect(parser('0. 1\n0. 2')), [['<ol><li id="index::1">1</li><li id="index::2">2</li></ol>'], '']);
59
+ assert.deepStrictEqual(inspect(parser('0. 1\n0. 2\n0. 3')), [['<ol><li id="index::1">1</li><li id="index::2">2</li><li id="index::3">3</li></ol>'], '']);
60
60
  // pending
61
61
  assert.deepStrictEqual(inspect(parser('(1) \n(')), [['<ol data-format="paren"><li></li><li></li></ol>'], '']);
62
62
  assert.deepStrictEqual(inspect(parser('(1) \n(\n')), [['<ol data-format="paren"><li></li><li></li></ol>'], '']);
@@ -67,21 +67,21 @@ describe('Unit: parser/block/olist', () => {
67
67
  // filled
68
68
  assert.deepStrictEqual(inspect(parser('(1) \n(1) ')), [['<ol data-format="paren"><li></li><li></li></ol>'], '']);
69
69
  // invalid
70
- assert.deepStrictEqual(inspect(parser('0. \n0 ')), [['<ol><li></li><li><span class="invalid">0 </span></li></ol>'], '']);
70
+ assert.deepStrictEqual(inspect(parser('0. \n0 ')), [['<ol><li></li><li id="index::0"><span class="invalid">0 </span></li></ol>'], '']);
71
71
  });
72
72
 
73
73
  it('nest', () => {
74
74
  assert.deepStrictEqual(inspect(parser('0.\n 0')), [['<ol><li><br><ol><li></li></ol></li></ol>'], '']);
75
- assert.deepStrictEqual(inspect(parser('0. 1\n 0')), [['<ol><li>1<ol><li></li></ol></li></ol>'], '']);
76
- assert.deepStrictEqual(inspect(parser('0. 1\n 0.')), [['<ol><li>1<ol><li></li></ol></li></ol>'], '']);
77
- assert.deepStrictEqual(inspect(parser('0. 1\n 0. ')), [['<ol><li>1<ol><li></li></ol></li></ol>'], '']);
78
- assert.deepStrictEqual(inspect(parser('0. 1\n 0.\n')), [['<ol><li>1<ol><li></li></ol></li></ol>'], '']);
79
- assert.deepStrictEqual(inspect(parser('0. 1\n 0. 2')), [['<ol><li>1<ol><li>2</li></ol></li></ol>'], '']);
80
- assert.deepStrictEqual(inspect(parser('0. 1\n 0. 2\n0. 3')), [['<ol><li>1<ol><li>2</li></ol></li><li>3</li></ol>'], '']);
81
- assert.deepStrictEqual(inspect(parser('0. 1\n 0. 2\n 0. 3')), [['<ol><li>1<ol><li>2</li><li>3</li></ol></li></ol>'], '']);
82
- assert.deepStrictEqual(inspect(parser('0. 1\n 0. 2\n 0. 3')), [['<ol><li>1<ol><li>2<ol><li>3</li></ol></li></ol></li></ol>'], '']);
83
- assert.deepStrictEqual(inspect(parser('0. 1\n 0. 2\n 0. 3')), [['<ol><li>1<ol><li>2</li></ol></li><li><span class="invalid"> 0. 3</span></li></ol>'], '']);
84
- assert.deepStrictEqual(inspect(parser('0. !http://host')), [['<ol><li>!<a class="url" href="http://host" target="_blank">http://host</a></li></ol>'], '']);
75
+ assert.deepStrictEqual(inspect(parser('0. 1\n 0')), [['<ol><li id="index::1">1<ol><li></li></ol></li></ol>'], '']);
76
+ assert.deepStrictEqual(inspect(parser('0. 1\n 0.')), [['<ol><li id="index::1">1<ol><li></li></ol></li></ol>'], '']);
77
+ assert.deepStrictEqual(inspect(parser('0. 1\n 0. ')), [['<ol><li id="index::1">1<ol><li></li></ol></li></ol>'], '']);
78
+ assert.deepStrictEqual(inspect(parser('0. 1\n 0.\n')), [['<ol><li id="index::1">1<ol><li></li></ol></li></ol>'], '']);
79
+ assert.deepStrictEqual(inspect(parser('0. 1\n 0. 2')), [['<ol><li id="index::1">1<ol><li id="index::2">2</li></ol></li></ol>'], '']);
80
+ assert.deepStrictEqual(inspect(parser('0. 1\n 0. 2\n0. 3')), [['<ol><li id="index::1">1<ol><li id="index::2">2</li></ol></li><li id="index::3">3</li></ol>'], '']);
81
+ assert.deepStrictEqual(inspect(parser('0. 1\n 0. 2\n 0. 3')), [['<ol><li id="index::1">1<ol><li id="index::2">2</li><li id="index::3">3</li></ol></li></ol>'], '']);
82
+ assert.deepStrictEqual(inspect(parser('0. 1\n 0. 2\n 0. 3')), [['<ol><li id="index::1">1<ol><li id="index::2">2<ol><li id="index::3">3</li></ol></li></ol></li></ol>'], '']);
83
+ assert.deepStrictEqual(inspect(parser('0. 1\n 0. 2\n 0. 3')), [['<ol><li id="index::1">1<ol><li id="index::2">2</li></ol></li><li id="index::0._3"><span class="invalid"> 0. 3</span></li></ol>'], '']);
84
+ assert.deepStrictEqual(inspect(parser('0. !http://host')), [['<ol><li id="index::!http://host">!<a class="url" href="http://host" target="_blank">http://host</a></li></ol>'], '']);
85
85
  });
86
86
 
87
87
  it('index', () => {
@@ -103,10 +103,11 @@ describe('Unit: parser/block/olist', () => {
103
103
  assert.deepStrictEqual(inspect(parser('(1)-1-1 ')), [['<ol data-format="paren"><li data-marker="(1)-1-1"></li></ol>'], '']);
104
104
  assert.deepStrictEqual(inspect(parser('(1) \n(1)-')), [['<ol data-format="paren"><li></li><li data-marker="(1)-"></li></ol>'], '']);
105
105
  assert.deepStrictEqual(inspect(parser('(1) \n(1)-1')), [['<ol data-format="paren"><li></li><li data-marker="(1)-1"></li></ol>'], '']);
106
- assert.deepStrictEqual(inspect(parser('1. \n1--')), [['<ol><li></li><li><span class="invalid">1--</span></li></ol>'], '']);
107
- assert.deepStrictEqual(inspect(parser('1. \n1--. ')), [['<ol><li></li><li><span class="invalid">1--. </span></li></ol>'], '']);
108
- assert.deepStrictEqual(inspect(parser('(1) \n(1)--')), [['<ol data-format="paren"><li></li><li><span class="invalid">(1)--</span></li></ol>'], '']);
109
- assert.deepStrictEqual(inspect(parser('(1) \n(1)-- ')), [['<ol data-format="paren"><li></li><li><span class="invalid">(1)-- </span></li></ol>'], '']);
106
+ assert.deepStrictEqual(inspect(parser('1. \n1--')), [['<ol><li></li><li id="index::1--"><span class="invalid">1--</span></li></ol>'], '']);
107
+ assert.deepStrictEqual(inspect(parser('1. \n1--. ')), [['<ol><li></li><li id="index::1--."><span class="invalid">1--. </span></li></ol>'], '']);
108
+ assert.deepStrictEqual(inspect(parser('(1) \n(1)--')), [['<ol data-format="paren"><li></li><li id="index::(1)--"><span class="invalid">(1)--</span></li></ol>'], '']);
109
+ assert.deepStrictEqual(inspect(parser('(1) \n(1)-- ')), [['<ol data-format="paren"><li></li><li id="index::(1)--"><span class="invalid">(1)-- </span></li></ol>'], '']);
110
+ assert.deepStrictEqual(inspect(parser('1-1. 1')), [['<ol><li data-marker="1-1." id="index::1">1</li></ol>'], '']);
110
111
  });
111
112
 
112
113
  it('type', () => {
@@ -115,23 +116,24 @@ describe('Unit: parser/block/olist', () => {
115
116
  assert.deepStrictEqual(inspect(parser('I. ')), [['<ol type="I" data-type="upper-roman"><li></li></ol>'], '']);
116
117
  assert.deepStrictEqual(inspect(parser('A. ')), [['<ol type="A" data-type="upper-alpha"><li></li></ol>'], '']);
117
118
  assert.deepStrictEqual(inspect(parser('a.\n1.\nc')), [['<ol type="a" data-type="lower-alpha"><li></li><li data-marker="1."></li><li data-marker="c."></li></ol>'], '']);
119
+ assert.deepStrictEqual(inspect(parser('i. 1')), [['<ol type="i" data-type="lower-roman"><li id="index::1">1</li></ol>'], '']);
118
120
  });
119
121
 
120
122
  it('checkbox', () => {
121
123
  assert.deepStrictEqual(inspect(parser('1. [ ]')), [['<ol class="checklist"><li><span class="checkbox">☐</span></li></ol>'], '']);
122
124
  assert.deepStrictEqual(inspect(parser('1. [x]')), [['<ol class="checklist"><li><span class="checkbox">☑</span></li></ol>'], '']);
123
125
  assert.deepStrictEqual(inspect(parser('1. [X]')), [['<ol class="checklist"><li><span class="checkbox">☑</span></li></ol>'], '']);
124
- assert.deepStrictEqual(inspect(parser('1. [X] 1')), [['<ol class="checklist"><li><span class="checkbox">☑</span>1</li></ol>'], '']);
126
+ assert.deepStrictEqual(inspect(parser('1. [X] 1')), [['<ol class="checklist"><li id="index::1"><span class="checkbox">☑</span>1</li></ol>'], '']);
125
127
  });
126
128
 
127
129
  it('indexer', () => {
128
- assert.deepStrictEqual(inspect(parser('1. [#a]')), [['<ol><li><a class="index" href="#index:a">a</a></li></ol>'], '']);
129
- assert.deepStrictEqual(inspect(parser('1. a [#]')), [['<ol><li id="index:a">a<span class="indexer" data-index=""></span></li></ol>'], '']);
130
- assert.deepStrictEqual(inspect(parser('1. a [#b]')), [['<ol><li id="index:b">a<span class="indexer" data-index="b"></span></li></ol>'], '']);
131
- assert.deepStrictEqual(inspect(parser('1. [ ] [#a]')), [['<ol class="checklist"><li><span class="checkbox">☐</span><a class="index" href="#index:a">a</a></li></ol>'], '']);
132
- assert.deepStrictEqual(inspect(parser('1. [ ] a [#b]')), [['<ol class="checklist"><li id="index:b"><span class="checkbox">☐</span>a<span class="indexer" data-index="b"></span></li></ol>'], '']);
133
- assert.deepStrictEqual(inspect(parser('1. a [#]\n 1. c [#d]')), [['<ol><li id="index:a">a<span class="indexer" data-index=""></span><ol><li id="index:d">c<span class="indexer" data-index="d"></span></li></ol></li></ol>'], '']);
134
- assert.deepStrictEqual(inspect(parser('1. a [#b]\n 1. c [#d]')), [['<ol><li id="index:b">a<span class="indexer" data-index="b"></span><ol><li id="index:d">c<span class="indexer" data-index="d"></span></li></ol></li></ol>'], '']);
130
+ assert.deepStrictEqual(inspect(parser('1. [#a]')), [['<ol><li id="index::a"><a class="index" href="#index::a">a</a></li></ol>'], '']);
131
+ assert.deepStrictEqual(inspect(parser('1. a [#]')), [['<ol><li>a<span class="indexer" data-index=""></span></li></ol>'], '']);
132
+ assert.deepStrictEqual(inspect(parser('1. a [#b]')), [['<ol><li id="index::b">a<span class="indexer" data-index="b"></span></li></ol>'], '']);
133
+ assert.deepStrictEqual(inspect(parser('1. [ ] [#a]')), [['<ol class="checklist"><li id="index::a"><span class="checkbox">☐</span><a class="index" href="#index::a">a</a></li></ol>'], '']);
134
+ assert.deepStrictEqual(inspect(parser('1. [ ] a [#b]')), [['<ol class="checklist"><li id="index::b"><span class="checkbox">☐</span>a<span class="indexer" data-index="b"></span></li></ol>'], '']);
135
+ assert.deepStrictEqual(inspect(parser('1. a [#]\n 1. c [#d]')), [['<ol><li>a<span class="indexer" data-index=""></span><ol><li id="index::d">c<span class="indexer" data-index="d"></span></li></ol></li></ol>'], '']);
136
+ assert.deepStrictEqual(inspect(parser('1. a [#b]\n 1. c [#d]')), [['<ol><li id="index::b">a<span class="indexer" data-index="b"></span><ol><li id="index::d">c<span class="indexer" data-index="d"></span></li></ol></li></ol>'], '']);
135
137
  });
136
138
 
137
139
  });
@@ -44,7 +44,7 @@ describe('Unit: parser/block/reply/cite', () => {
44
44
  assert.deepStrictEqual(inspect(parser('>>#')), [['<span class="cite">&gt;<a class="anchor" data-depth="1">&gt;#</a></span>', '<br>'], '']);
45
45
  assert.deepStrictEqual(inspect(parser('>>#\n')), [['<span class="cite">&gt;<a class="anchor" data-depth="1">&gt;#</a></span>', '<br>'], '']);
46
46
  assert.deepStrictEqual(inspect(parser('>>#a')), [['<span class="cite">&gt;<a class="anchor" data-depth="1">&gt;#a</a></span>', '<br>'], '']);
47
- assert.deepStrictEqual(inspect(parser('>>#index:a')), [['<span class="cite">&gt;<a class="anchor" data-depth="1">&gt;#index:a</a></span>', '<br>'], '']);
47
+ assert.deepStrictEqual(inspect(parser('>>#index::a')), [['<span class="cite">&gt;<a class="anchor" data-depth="1">&gt;#index::a</a></span>', '<br>'], '']);
48
48
  assert.deepStrictEqual(inspect(parser('>>#:~:text=a')), [['<span class="cite">&gt;<a class="anchor" data-depth="1">&gt;#:~:text=a</a></span>', '<br>'], '']);
49
49
  assert.deepStrictEqual(inspect(parser('>>http://host')), [['<span class="cite">&gt;<a class="anchor" href="http://host" target="_blank" data-depth="1">&gt;http://host</a></span>', '<br>'], '']);
50
50
  assert.deepStrictEqual(inspect(parser('>>http://host ')), [['<span class="cite">&gt;<a class="anchor" href="http://host" target="_blank" data-depth="1">&gt;http://host</a></span>', '<br>'], '']);
@@ -17,7 +17,7 @@ export const sidefence: SidefenceParser = lazy(() => block(fmap(focus(
17
17
  ])));
18
18
 
19
19
  const opener = /^(?=\|\|+(?:$|\s))/;
20
- const unindent = (source: string) => source.replace(/(^|\n)\|(?:[^\S\n]|(?=\|*(?:$|\s)))|\n$/g, '$1');
20
+ const unindent = (source: string) => source.replace(/(?<=^|\n)\|(?:[^\S\n]|(?=\|*(?:$|\s)))|\n$/g, '');
21
21
 
22
22
  const source: SidefenceParser.SourceParser = lazy(() => fmap(
23
23
  some(creation(1, false, union([
@@ -28,52 +28,52 @@ describe('Unit: parser/block/ulist', () => {
28
28
  // filled
29
29
  assert.deepStrictEqual(inspect(parser('- \\')), [['<ul><li></li></ul>'], '']);
30
30
  assert.deepStrictEqual(inspect(parser('- \\\n')), [['<ul><li></li></ul>'], '']);
31
- assert.deepStrictEqual(inspect(parser('- -')), [['<ul><li>-</li></ul>'], '']);
32
- assert.deepStrictEqual(inspect(parser('- -\n')), [['<ul><li>-</li></ul>'], '']);
31
+ assert.deepStrictEqual(inspect(parser('- -')), [['<ul><li id="index::-">-</li></ul>'], '']);
32
+ assert.deepStrictEqual(inspect(parser('- -\n')), [['<ul><li id="index::-">-</li></ul>'], '']);
33
33
  });
34
34
 
35
35
  it('multiple', () => {
36
36
  // pending
37
37
  assert.deepStrictEqual(inspect(parser('-\n-')), [['<ul><li></li><li></li></ul>'], '']);
38
38
  // filled
39
- assert.deepStrictEqual(inspect(parser('- 1\n- 2')), [['<ul><li>1</li><li>2</li></ul>'], '']);
40
- assert.deepStrictEqual(inspect(parser('- 1\n- 2\n- 3')), [['<ul><li>1</li><li>2</li><li>3</li></ul>'], '']);
39
+ assert.deepStrictEqual(inspect(parser('- 1\n- 2')), [['<ul><li id="index::1">1</li><li id="index::2">2</li></ul>'], '']);
40
+ assert.deepStrictEqual(inspect(parser('- 1\n- 2\n- 3')), [['<ul><li id="index::1">1</li><li id="index::2">2</li><li id="index::3">3</li></ul>'], '']);
41
41
  // invalid
42
- assert.deepStrictEqual(inspect(parser('-\n+')), [['<ul><li></li><li><span class="invalid">+</span></li></ul>'], '']);
43
- assert.deepStrictEqual(inspect(parser('-\n0')), [['<ul><li></li><li><span class="invalid">0</span></li></ul>'], '']);
42
+ assert.deepStrictEqual(inspect(parser('-\n+')), [['<ul><li></li><li id="index::+"><span class="invalid">+</span></li></ul>'], '']);
43
+ assert.deepStrictEqual(inspect(parser('-\n0')), [['<ul><li></li><li id="index::0"><span class="invalid">0</span></li></ul>'], '']);
44
44
  });
45
45
 
46
46
  it('nest', () => {
47
47
  assert.deepStrictEqual(inspect(parser('-\n -')), [['<ul><li><br><ul><li></li></ul></li></ul>'], '']);
48
- assert.deepStrictEqual(inspect(parser('- 1\n - 2')), [['<ul><li>1<ul><li>2</li></ul></li></ul>'], '']);
49
- assert.deepStrictEqual(inspect(parser('- 1\n - 2\n- 3')), [['<ul><li>1<ul><li>2</li></ul></li><li>3</li></ul>'], '']);
50
- assert.deepStrictEqual(inspect(parser('- 1\n - 2\n - 3')), [['<ul><li>1<ul><li>2</li><li>3</li></ul></li></ul>'], '']);
51
- assert.deepStrictEqual(inspect(parser('- 1\n - 2\n - 3')), [['<ul><li>1<ul><li>2<ul><li>3</li></ul></li></ul></li></ul>'], '']);
52
- assert.deepStrictEqual(inspect(parser('- 1\n - 2\n - 3')), [['<ul><li>1<ul><li>2</li></ul></li><li><span class="invalid"> - 3</span></li></ul>'], '']);
53
- assert.deepStrictEqual(inspect(parser('-\n -\n +\n -\n +\n+')), [['<ul><li><br><ul><li></li><li><span class="invalid">+</span></li><li></li><li><span class="invalid">+</span></li></ul></li><li><span class="invalid">+</span></li></ul>'], '']);
54
- assert.deepStrictEqual(inspect(parser('- 1\n + 2')), [['<ul><li>1<ul class="invalid"><li>2</li></ul></li></ul>'], '']);
55
- assert.deepStrictEqual(inspect(parser('- 1\n 0')), [['<ul><li>1<ol><li></li></ol></li></ul>'], '']);
56
- assert.deepStrictEqual(inspect(parser('- 1\n 0.')), [['<ul><li>1<ol><li></li></ol></li></ul>'], '']);
57
- assert.deepStrictEqual(inspect(parser('- 1\n 0. ')), [['<ul><li>1<ol><li></li></ol></li></ul>'], '']);
58
- assert.deepStrictEqual(inspect(parser('- 1\n 0. 2')), [['<ul><li>1<ol><li>2</li></ol></li></ul>'], '']);
59
- assert.deepStrictEqual(inspect(parser('- !http://host')), [['<ul><li>!<a class="url" href="http://host" target="_blank">http://host</a></li></ul>'], '']);
48
+ assert.deepStrictEqual(inspect(parser('- 1\n - 2')), [['<ul><li id="index::1">1<ul><li id="index::2">2</li></ul></li></ul>'], '']);
49
+ assert.deepStrictEqual(inspect(parser('- 1\n - 2\n- 3')), [['<ul><li id="index::1">1<ul><li id="index::2">2</li></ul></li><li id="index::3">3</li></ul>'], '']);
50
+ assert.deepStrictEqual(inspect(parser('- 1\n - 2\n - 3')), [['<ul><li id="index::1">1<ul><li id="index::2">2</li><li id="index::3">3</li></ul></li></ul>'], '']);
51
+ assert.deepStrictEqual(inspect(parser('- 1\n - 2\n - 3')), [['<ul><li id="index::1">1<ul><li id="index::2">2<ul><li id="index::3">3</li></ul></li></ul></li></ul>'], '']);
52
+ assert.deepStrictEqual(inspect(parser('- 1\n - 2\n - 3')), [['<ul><li id="index::1">1<ul><li id="index::2">2</li></ul></li><li id="index::-_3"><span class="invalid"> - 3</span></li></ul>'], '']);
53
+ assert.deepStrictEqual(inspect(parser('-\n -\n +\n -\n +\n+')), [['<ul><li><br><ul><li></li><li id="index::+"><span class="invalid">+</span></li><li></li><li id="index::+"><span class="invalid">+</span></li></ul></li><li id="index::+"><span class="invalid">+</span></li></ul>'], '']);
54
+ assert.deepStrictEqual(inspect(parser('- 1\n + 2')), [['<ul><li id="index::1">1<ul class="invalid"><li>2</li></ul></li></ul>'], '']);
55
+ assert.deepStrictEqual(inspect(parser('- 1\n 0')), [['<ul><li id="index::1">1<ol><li></li></ol></li></ul>'], '']);
56
+ assert.deepStrictEqual(inspect(parser('- 1\n 0.')), [['<ul><li id="index::1">1<ol><li></li></ol></li></ul>'], '']);
57
+ assert.deepStrictEqual(inspect(parser('- 1\n 0. ')), [['<ul><li id="index::1">1<ol><li></li></ol></li></ul>'], '']);
58
+ assert.deepStrictEqual(inspect(parser('- 1\n 0. 2')), [['<ul><li id="index::1">1<ol><li id="index::2">2</li></ol></li></ul>'], '']);
59
+ assert.deepStrictEqual(inspect(parser('- !http://host')), [['<ul><li id="index::!http://host">!<a class="url" href="http://host" target="_blank">http://host</a></li></ul>'], '']);
60
60
  });
61
61
 
62
62
  it('checkbox', () => {
63
63
  assert.deepStrictEqual(inspect(parser('- [ ]')), [['<ul class="checklist"><li><span class="checkbox">☐</span></li></ul>'], '']);
64
64
  assert.deepStrictEqual(inspect(parser('- [x]')), [['<ul class="checklist"><li><span class="checkbox">☑</span></li></ul>'], '']);
65
65
  assert.deepStrictEqual(inspect(parser('- [X]')), [['<ul class="checklist"><li><span class="checkbox">☑</span></li></ul>'], '']);
66
- assert.deepStrictEqual(inspect(parser('- [X] 1')), [['<ul class="checklist"><li><span class="checkbox">☑</span>1</li></ul>'], '']);
66
+ assert.deepStrictEqual(inspect(parser('- [X] 1')), [['<ul class="checklist"><li id="index::1"><span class="checkbox">☑</span>1</li></ul>'], '']);
67
67
  });
68
68
 
69
69
  it('indexer', () => {
70
- assert.deepStrictEqual(inspect(parser('- [#a]')), [['<ul><li><a class="index" href="#index:a">a</a></li></ul>'], '']);
71
- assert.deepStrictEqual(inspect(parser('- a [#]')), [['<ul><li id="index:a">a<span class="indexer" data-index=""></span></li></ul>'], '']);
72
- assert.deepStrictEqual(inspect(parser('- a [#b]')), [['<ul><li id="index:b">a<span class="indexer" data-index="b"></span></li></ul>'], '']);
73
- assert.deepStrictEqual(inspect(parser('- [ ] [#a]')), [['<ul class="checklist"><li><span class="checkbox">☐</span><a class="index" href="#index:a">a</a></li></ul>'], '']);
74
- assert.deepStrictEqual(inspect(parser('- [ ] a [#b]')), [['<ul class="checklist"><li id="index:b"><span class="checkbox">☐</span>a<span class="indexer" data-index="b"></span></li></ul>'], '']);
75
- assert.deepStrictEqual(inspect(parser('- a [#]\n - c [#d]')), [['<ul><li id="index:a">a<span class="indexer" data-index=""></span><ul><li id="index:d">c<span class="indexer" data-index="d"></span></li></ul></li></ul>'], '']);
76
- assert.deepStrictEqual(inspect(parser('- a [#b]\n - c [#d]')), [['<ul><li id="index:b">a<span class="indexer" data-index="b"></span><ul><li id="index:d">c<span class="indexer" data-index="d"></span></li></ul></li></ul>'], '']);
70
+ assert.deepStrictEqual(inspect(parser('- [#a]')), [['<ul><li id="index::a"><a class="index" href="#index::a">a</a></li></ul>'], '']);
71
+ assert.deepStrictEqual(inspect(parser('- a [#]')), [['<ul><li>a<span class="indexer" data-index=""></span></li></ul>'], '']);
72
+ assert.deepStrictEqual(inspect(parser('- a [#b]')), [['<ul><li id="index::b">a<span class="indexer" data-index="b"></span></li></ul>'], '']);
73
+ assert.deepStrictEqual(inspect(parser('- [ ] [#a]')), [['<ul class="checklist"><li id="index::a"><span class="checkbox">☐</span><a class="index" href="#index::a">a</a></li></ul>'], '']);
74
+ assert.deepStrictEqual(inspect(parser('- [ ] a [#b]')), [['<ul class="checklist"><li id="index::b"><span class="checkbox">☐</span>a<span class="indexer" data-index="b"></span></li></ul>'], '']);
75
+ assert.deepStrictEqual(inspect(parser('- a [#]\n - c [#d]')), [['<ul><li>a<span class="indexer" data-index=""></span><ul><li id="index::d">c<span class="indexer" data-index="d"></span></li></ul></li></ul>'], '']);
76
+ assert.deepStrictEqual(inspect(parser('- a [#b]\n - c [#d]')), [['<ul><li id="index::b">a<span class="indexer" data-index="b"></span><ul><li id="index::d">c<span class="indexer" data-index="d"></span></li></ul></li></ul>'], '']);
77
77
  });
78
78
 
79
79
  });