securemark 0.265.0 → 0.267.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 (43) hide show
  1. package/CHANGELOG.md +9 -0
  2. package/README.md +1 -1
  3. package/dist/index.js +49 -42
  4. package/index.d.ts +7 -7
  5. package/markdown.d.ts +4 -4
  6. package/package.json +1 -1
  7. package/src/parser/api/bind.test.ts +17 -17
  8. package/src/parser/api/bind.ts +1 -0
  9. package/src/parser/api/parse.test.ts +6 -8
  10. package/src/parser/api/parse.ts +2 -1
  11. package/src/parser/block/dlist.test.ts +34 -34
  12. package/src/parser/block/extension/aside.test.ts +3 -3
  13. package/src/parser/block/extension/aside.ts +2 -2
  14. package/src/parser/block/extension/figure.test.ts +2 -2
  15. package/src/parser/block/heading.test.ts +47 -47
  16. package/src/parser/block/olist.test.ts +29 -29
  17. package/src/parser/block/pagebreak.test.ts +31 -0
  18. package/src/parser/block/pagebreak.ts +7 -0
  19. package/src/parser/block/reply/cite.test.ts +1 -1
  20. package/src/parser/block/ulist.test.ts +25 -25
  21. package/src/parser/block.ts +3 -3
  22. package/src/parser/inline/autolink/account.ts +3 -5
  23. package/src/parser/inline/autolink/anchor.test.ts +2 -2
  24. package/src/parser/inline/autolink/anchor.ts +4 -3
  25. package/src/parser/inline/autolink/channel.test.ts +0 -2
  26. package/src/parser/inline/autolink/channel.ts +0 -1
  27. package/src/parser/inline/autolink/hashnum.test.ts +1 -1
  28. package/src/parser/inline/autolink/hashtag.test.ts +2 -6
  29. package/src/parser/inline/autolink/hashtag.ts +7 -20
  30. package/src/parser/inline/extension/index.test.ts +48 -48
  31. package/src/parser/inline/extension/index.ts +1 -1
  32. package/src/parser/inline/extension/indexee.ts +15 -11
  33. package/src/parser/inline/extension/indexer.ts +1 -1
  34. package/src/parser/inline/link.ts +1 -0
  35. package/src/parser/inline/mark.test.ts +9 -9
  36. package/src/parser/inline/mark.ts +1 -1
  37. package/src/parser/inline.test.ts +9 -6
  38. package/src/parser/processor/figure.test.ts +19 -19
  39. package/src/parser/processor/footnote.test.ts +66 -66
  40. package/src/parser/processor/footnote.ts +11 -11
  41. package/src/util/toc.test.ts +28 -28
  42. package/src/parser/block/horizontalrule.test.ts +0 -31
  43. package/src/parser/block/horizontalrule.ts +0 -7
@@ -34,9 +34,6 @@ describe('Unit: parser/inline/autolink/hashtag', () => {
34
34
  assert.deepStrictEqual(inspect(parser('a##1')), [['a##1'], '']);
35
35
  assert.deepStrictEqual(inspect(parser('a##b')), [['a##b'], '']);
36
36
  assert.deepStrictEqual(inspect(parser('あ#b')), [['あ#b'], '']);
37
- assert.deepStrictEqual(inspect(parser(`#${'1'.repeat(127)}_`)), [[`#${'1'.repeat(127)}`], '_']);
38
- assert.deepStrictEqual(inspect(parser(`#${'1'.repeat(127)}_a`)), [[`#${'1'.repeat(127)}`], '_a']);
39
- assert.deepStrictEqual(inspect(parser(`#${'1'.repeat(127)}_'a`)), [[`#${'1'.repeat(127)}`], `_'a`]);
40
37
  assert.deepStrictEqual(inspect(parser(' #a')), undefined);
41
38
  });
42
39
 
@@ -51,15 +48,13 @@ describe('Unit: parser/inline/autolink/hashtag', () => {
51
48
  assert.deepStrictEqual(inspect(parser('#a(b')), [['<a class="hashtag" href="/hashtags/a">#a</a>'], '(b']);
52
49
  assert.deepStrictEqual(inspect(parser('#a(b)')), [['<a class="hashtag" href="/hashtags/a">#a</a>'], '(b)']);
53
50
  assert.deepStrictEqual(inspect(parser('#a_')), [['<a class="hashtag" href="/hashtags/a">#a</a>'], '_']);
54
- assert.deepStrictEqual(inspect(parser('#a__b')), [['<a class="hashtag" href="/hashtags/a">#a</a>'], '__b']);
55
51
  assert.deepStrictEqual(inspect(parser('#a_b')), [['<a class="hashtag" href="/hashtags/a_b">#a_b</a>'], '']);
52
+ assert.deepStrictEqual(inspect(parser('#a__b')), [['<a class="hashtag" href="/hashtags/a">#a</a>'], '__b']);
56
53
  assert.deepStrictEqual(inspect(parser('#あ')), [['<a class="hashtag" href="/hashtags/あ">#あ</a>'], '']);
57
54
  assert.deepStrictEqual(inspect(parser('#👩')), [['<a class="hashtag" href="/hashtags/👩">#👩</a>'], '']);
58
55
  assert.deepStrictEqual(inspect(parser('#1a')), [['<a class="hashtag" href="/hashtags/1a">#1a</a>'], '']);
59
56
  assert.deepStrictEqual(inspect(parser('#1あ')), [['<a class="hashtag" href="/hashtags/1あ">#1あ</a>'], '']);
60
57
  assert.deepStrictEqual(inspect(parser('#1👩')), [['<a class="hashtag" href="/hashtags/1👩">#1👩</a>'], '']);
61
- assert.deepStrictEqual(inspect(parser('#domain/a')), [['<a class="hashtag" href="https://domain/hashtags/a" target="_blank">#domain/a</a>'], '']);
62
- assert.deepStrictEqual(inspect(parser('#domain.co.jp/a')), [['<a class="hashtag" href="https://domain.co.jp/hashtags/a" target="_blank">#domain.co.jp/a</a>'], '']);
63
58
  assert.deepStrictEqual(inspect(parser(`#'0`)), [[`<a class="hashtag" href="/hashtags/'0">#'0</a>`], '']);
64
59
  assert.deepStrictEqual(inspect(parser(`#'00`)), [[`<a class="hashtag" href="/hashtags/'00">#'00</a>`], '']);
65
60
  assert.deepStrictEqual(inspect(parser(`#1'`)), [[`<a class="hashtag" href="/hashtags/1'">#1'</a>`], '']);
@@ -69,6 +64,7 @@ describe('Unit: parser/inline/autolink/hashtag', () => {
69
64
  assert.deepStrictEqual(inspect(parser(`#a'b`)), [[`<a class="hashtag" href="/hashtags/a'b">#a'b</a>`], '']);
70
65
  assert.deepStrictEqual(inspect(parser(`#a'_b`)), [[`<a class="hashtag" href="/hashtags/a'_b">#a'_b</a>`], '']);
71
66
  assert.deepStrictEqual(inspect(parser(`#a_'b`)), [[`<a class="hashtag" href="/hashtags/a_'b">#a_'b</a>`], '']);
67
+ assert.deepStrictEqual(inspect(parser(`#${'1'.repeat(15)}a`)), [[`<a class="hashtag" href="/hashtags/${'1'.repeat(15)}a">#${'1'.repeat(15)}a</a>`], '']);
72
68
  });
73
69
 
74
70
  });
@@ -1,5 +1,5 @@
1
1
  import { AutolinkParser } from '../../inline';
2
- import { union, tails, constraint, verify, rewrite, open, convert, fmap, lazy } from '../../../combinator';
2
+ import { union, constraint, rewrite, open, convert, fmap, lazy } from '../../../combinator';
3
3
  import { unsafelink } from '../link';
4
4
  import { str } from '../../source';
5
5
  import { State } from '../../context';
@@ -14,24 +14,11 @@ export const hashtag: AutolinkParser.HashtagParser = lazy(() => fmap(rewrite(
14
14
  constraint(State.shortcut, false,
15
15
  open(
16
16
  '#',
17
- tails([
18
- verify(
19
- str(/^[0-9a-z](?:(?:[0-9a-z]|-(?=\w)){0,61}[0-9a-z])?(?:\.[0-9a-z](?:(?:[0-9a-z]|-(?=\w)){0,61}[0-9a-z])?)*\//i),
20
- ([source]) => source.length <= 253 + 1),
21
- verify(
22
- str(new RegExp([
23
- /^(?=(?:[0-9]{1,127}_?)?(?:[^\d\p{C}\p{S}\p{P}\s]|emoji|'))/u.source,
24
- /(?:[^\p{C}\p{S}\p{P}\s]|emoji|(?<!')'|_(?=[^\p{C}\p{S}\p{P}\s]|emoji|')){1,128}/u.source,
25
- /(?!_?(?:[^\p{C}\p{S}\p{P}\s]|emoji|(?<!')'))/u.source,
26
- ].join('').replace(/emoji/g, emoji), 'u')),
27
- ([source]) => source.length <= 128),
28
- ]))),
17
+ str(new RegExp([
18
+ /^(?=(?:[0-9]{1,15})?(?:[^\d\p{C}\p{S}\p{P}\s]|emoji|'))/u.source,
19
+ /(?:[^\p{C}\p{S}\p{P}\s]|emoji|(?<!')'|_(?=[^\p{C}\p{S}\p{P}\s]|emoji|'))+/u.source,
20
+ ].join('').replace(/emoji/g, emoji), 'u')))),
29
21
  convert(
30
- source =>
31
- `[${source}]{ ${
32
- source.includes('/')
33
- ? `https://${source.slice(1).replace('/', '/hashtags/')}`
34
- : `/hashtags/${source.slice(1)}`
35
- } }`,
22
+ source => `[${source}]{ ${`/hashtags/${source.slice(1)}`} }`,
36
23
  union([unsafelink]))),
37
- ([el]) => [define(el, { class: 'hashtag' }, el.innerText)]));
24
+ ([el]) => [define(el, { class: 'hashtag' })]));
@@ -35,59 +35,59 @@ describe('Unit: parser/inline/extension/index', () => {
35
35
  });
36
36
 
37
37
  it('basic', () => {
38
- assert.deepStrictEqual(inspect(parser('[#a]')), [['<a class="index" href="#index:a">a</a>'], '']);
39
- assert.deepStrictEqual(inspect(parser('[#a ]')), [['<a class="index" href="#index:a">a</a>'], '']);
40
- assert.deepStrictEqual(inspect(parser('[#a ]')), [['<a class="index" href="#index:a">a</a>'], '']);
41
- assert.deepStrictEqual(inspect(parser('[#a b]')), [['<a class="index" href="#index:a_b">a b</a>'], '']);
42
- assert.deepStrictEqual(inspect(parser('[#a b]')), [['<a class="index" href="#index:a_b">a b</a>'], '']);
43
- assert.deepStrictEqual(inspect(parser('[#a \\ ]')), [['<a class="index" href="#index:a">a</a>'], '']);
44
- assert.deepStrictEqual(inspect(parser('[#a &nbsp;]')), [['<a class="index" href="#index:a">a</a>'], '']);
45
- assert.deepStrictEqual(inspect(parser('[#a <wbr>]')), [['<a class="index" href="#index:a">a</a>'], '']);
46
- assert.deepStrictEqual(inspect(parser('[#a [% b %]]')), [['<a class="index" href="#index:a">a <span class="comment"><input type="checkbox"><span>[% b %]</span></span></a>'], '']);
47
- assert.deepStrictEqual(inspect(parser('[#a\\ ]')), [['<a class="index" href="#index:a">a</a>'], '']);
48
- assert.deepStrictEqual(inspect(parser('[#a\\ b]')), [['<a class="index" href="#index:a_b">a b</a>'], '']);
49
- assert.deepStrictEqual(inspect(parser('[#[]]')), [['<a class="index" href="#index:[]">[]</a>'], '']);
50
- assert.deepStrictEqual(inspect(parser('[#\\]]')), [['<a class="index" href="#index:]">]</a>'], '']);
51
- assert.deepStrictEqual(inspect(parser('[#\\\\]')), [['<a class="index" href="#index:\\">\\</a>'], '']);
52
- assert.deepStrictEqual(inspect(parser('[#A]')), [['<a class="index" href="#index:A">A</a>'], '']);
53
- assert.deepStrictEqual(inspect(parser('[#==]')), [['<a class="index" href="#index:==">==</a>'], '']);
54
- assert.deepStrictEqual(inspect(parser('[#_A_]')), [['<a class="index" href="#index:A"><em>A</em></a>'], '']);
55
- assert.deepStrictEqual(inspect(parser('[#`A`]')), [['<a class="index" href="#index:`A`"><code data-src="`A`">A</code></a>'], '']);
56
- assert.deepStrictEqual(inspect(parser('[#${A}$]')), [['<a class="index" href="#index:${A}$"><span class="math" translate="no" data-src="${A}$">${A}$</span></a>'], '']);
57
- assert.deepStrictEqual(inspect(parser('[#[A](a)]')), [['<a class="index" href="#index:A"><ruby>A<rp>(</rp><rt>a</rt><rp>)</rp></ruby></a>'], '']);
58
- assert.deepStrictEqual(inspect(parser('[#[]{a}]')), [['<a class="index" href="#index:[]{a}">[]{a}</a>'], '']);
59
- assert.deepStrictEqual(inspect(parser('[#![]{a}]')), [['<a class="index" href="#index:![]{a}">![]{a}</a>'], '']);
60
- assert.deepStrictEqual(inspect(parser('[#@a]')), [['<a class="index" href="#index:@a">@a</a>'], '']);
61
- assert.deepStrictEqual(inspect(parser('[#http://host]')), [['<a class="index" href="#index:http://host">http://host</a>'], '']);
62
- assert.deepStrictEqual(inspect(parser('[#!http://host]')), [['<a class="index" href="#index:!http://host">!http://host</a>'], '']);
38
+ assert.deepStrictEqual(inspect(parser('[#a]')), [['<a class="index" href="#index::a">a</a>'], '']);
39
+ assert.deepStrictEqual(inspect(parser('[#a ]')), [['<a class="index" href="#index::a">a</a>'], '']);
40
+ assert.deepStrictEqual(inspect(parser('[#a ]')), [['<a class="index" href="#index::a">a</a>'], '']);
41
+ assert.deepStrictEqual(inspect(parser('[#a b]')), [['<a class="index" href="#index::a_b">a b</a>'], '']);
42
+ assert.deepStrictEqual(inspect(parser('[#a b]')), [['<a class="index" href="#index::a_b">a b</a>'], '']);
43
+ assert.deepStrictEqual(inspect(parser('[#a \\ ]')), [['<a class="index" href="#index::a">a</a>'], '']);
44
+ assert.deepStrictEqual(inspect(parser('[#a &nbsp;]')), [['<a class="index" href="#index::a">a</a>'], '']);
45
+ assert.deepStrictEqual(inspect(parser('[#a <wbr>]')), [['<a class="index" href="#index::a">a</a>'], '']);
46
+ assert.deepStrictEqual(inspect(parser('[#a [% b %]]')), [['<a class="index" href="#index::a">a <span class="comment"><input type="checkbox"><span>[% b %]</span></span></a>'], '']);
47
+ assert.deepStrictEqual(inspect(parser('[#a\\ ]')), [['<a class="index" href="#index::a">a</a>'], '']);
48
+ assert.deepStrictEqual(inspect(parser('[#a\\ b]')), [['<a class="index" href="#index::a_b">a b</a>'], '']);
49
+ assert.deepStrictEqual(inspect(parser('[#[]]')), [['<a class="index" href="#index::[]">[]</a>'], '']);
50
+ assert.deepStrictEqual(inspect(parser('[#\\]]')), [['<a class="index" href="#index::]">]</a>'], '']);
51
+ assert.deepStrictEqual(inspect(parser('[#\\\\]')), [['<a class="index" href="#index::\\">\\</a>'], '']);
52
+ assert.deepStrictEqual(inspect(parser('[#A]')), [['<a class="index" href="#index::A">A</a>'], '']);
53
+ assert.deepStrictEqual(inspect(parser('[#==]')), [['<a class="index" href="#index::==">==</a>'], '']);
54
+ assert.deepStrictEqual(inspect(parser('[#_A_]')), [['<a class="index" href="#index::A"><em>A</em></a>'], '']);
55
+ assert.deepStrictEqual(inspect(parser('[#`A`]')), [['<a class="index" href="#index::`A`"><code data-src="`A`">A</code></a>'], '']);
56
+ assert.deepStrictEqual(inspect(parser('[#${A}$]')), [['<a class="index" href="#index::${A}$"><span class="math" translate="no" data-src="${A}$">${A}$</span></a>'], '']);
57
+ assert.deepStrictEqual(inspect(parser('[#[A](a)]')), [['<a class="index" href="#index::A"><ruby>A<rp>(</rp><rt>a</rt><rp>)</rp></ruby></a>'], '']);
58
+ assert.deepStrictEqual(inspect(parser('[#[]{a}]')), [['<a class="index" href="#index::[]{a}">[]{a}</a>'], '']);
59
+ assert.deepStrictEqual(inspect(parser('[#![]{a}]')), [['<a class="index" href="#index::![]{a}">![]{a}</a>'], '']);
60
+ assert.deepStrictEqual(inspect(parser('[#@a]')), [['<a class="index" href="#index::@a">@a</a>'], '']);
61
+ assert.deepStrictEqual(inspect(parser('[#http://host]')), [['<a class="index" href="#index::http://host">http://host</a>'], '']);
62
+ assert.deepStrictEqual(inspect(parser('[#!http://host]')), [['<a class="index" href="#index::!http://host">!http://host</a>'], '']);
63
63
  assert.deepStrictEqual(inspect(parser('[#[% %]]')), [['<a class="index"><span class="comment"><input type="checkbox"><span>[% %]</span></span></a>'], '']);
64
64
  assert.deepStrictEqual(inspect(parser('[#[% a %]]')), [['<a class="index"><span class="comment"><input type="checkbox"><span>[% a %]</span></span></a>'], '']);
65
- assert.deepStrictEqual(inspect(parser('[#a((b))]')), [['<a class="index" href="#index:a((b))">a<span class="paren">((b))</span></a>'], '']);
66
- assert.deepStrictEqual(inspect(parser('[#a[[b]]]')), [['<a class="index" href="#index:a[[b]]">a[[b]]</a>'], '']);
65
+ assert.deepStrictEqual(inspect(parser('[#a((b))]')), [['<a class="index" href="#index::a((b))">a<span class="paren">((b))</span></a>'], '']);
66
+ assert.deepStrictEqual(inspect(parser('[#a[[b]]]')), [['<a class="index" href="#index::a[[b]]">a[[b]]</a>'], '']);
67
67
  });
68
68
 
69
69
  it('indexer', () => {
70
- assert.deepStrictEqual(inspect(parser('[#|]')), [['<a class="index" href="#index:|">|</a>'], '']);
71
- assert.deepStrictEqual(inspect(parser('[#|b]')), [['<a class="index" href="#index:|b">|b</a>'], '']);
72
- assert.deepStrictEqual(inspect(parser('[#a|]')), [['<a class="index" href="#index:a|">a|</a>'], '']);
73
- assert.deepStrictEqual(inspect(parser('[#a| ]')), [['<a class="index" href="#index:a|">a|</a>'], '']);
74
- assert.deepStrictEqual(inspect(parser('[#a|\\ ]')), [['<a class="index" href="#index:a|">a|</a>'], '']);
75
- assert.deepStrictEqual(inspect(parser('[#a|b]')), [['<a class="index" href="#index:b">a<span class="indexer" data-index="b"></span></a>'], '']);
76
- assert.deepStrictEqual(inspect(parser('[#a|b ]')), [['<a class="index" href="#index:b">a<span class="indexer" data-index="b"></span></a>'], '']);
77
- assert.deepStrictEqual(inspect(parser('[#a|b ]')), [['<a class="index" href="#index:b">a<span class="indexer" data-index="b"></span></a>'], '']);
78
- assert.deepStrictEqual(inspect(parser('[#a|\\b]')), [['<a class="index" href="#index:b">a<span class="indexer" data-index="b"></span></a>'], '']);
79
- assert.deepStrictEqual(inspect(parser('[#a|_b_]')), [['<a class="index" href="#index:_b_">a<span class="indexer" data-index="_b_"></span></a>'], '']);
80
- assert.deepStrictEqual(inspect(parser('[#a|b c]')), [['<a class="index" href="#index:b_c">a<span class="indexer" data-index="b_c"></span></a>'], '']);
81
- assert.deepStrictEqual(inspect(parser('[#a|b c]')), [['<a class="index" href="#index:b_c">a<span class="indexer" data-index="b_c"></span></a>'], '']);
82
- assert.deepStrictEqual(inspect(parser('[#a|[]]')), [['<a class="index" href="#index:[]">a<span class="indexer" data-index="[]"></span></a>'], '']);
83
- assert.deepStrictEqual(inspect(parser('[#a|&copy;]')), [['<a class="index" href="#index:&amp;copy;">a<span class="indexer" data-index="&amp;copy;"></span></a>'], '']);
84
- assert.deepStrictEqual(inspect(parser('[#a |b]')), [['<a class="index" href="#index:b">a<span class="indexer" data-index="b"></span></a>'], '']);
85
- assert.deepStrictEqual(inspect(parser('[#a |b]')), [['<a class="index" href="#index:b">a<span class="indexer" data-index="b"></span></a>'], '']);
86
- assert.deepStrictEqual(inspect(parser('[#a \\ |b]')), [['<a class="index" href="#index:b">a<span class="indexer" data-index="b"></span></a>'], '']);
87
- assert.deepStrictEqual(inspect(parser('[#a &nbsp;|b]')), [['<a class="index" href="#index:b">a<span class="indexer" data-index="b"></span></a>'], '']);
88
- assert.deepStrictEqual(inspect(parser('[#a <wbr>|b]')), [['<a class="index" href="#index:b">a<span class="indexer" data-index="b"></span></a>'], '']);
89
- assert.deepStrictEqual(inspect(parser('[#a [% b %]|c]')), [['<a class="index" href="#index:c">a <span class="comment"><input type="checkbox"><span>[% b %]</span></span><span class="indexer" data-index="c"></span></a>'], '']);
90
- assert.deepStrictEqual(inspect(parser('[#a\\ |b]')), [['<a class="index" href="#index:b">a<span class="indexer" data-index="b"></span></a>'], '']);
70
+ assert.deepStrictEqual(inspect(parser('[#|]')), [['<a class="index" href="#index::|">|</a>'], '']);
71
+ assert.deepStrictEqual(inspect(parser('[#|b]')), [['<a class="index" href="#index::|b">|b</a>'], '']);
72
+ assert.deepStrictEqual(inspect(parser('[#a|]')), [['<a class="index" href="#index::a|">a|</a>'], '']);
73
+ assert.deepStrictEqual(inspect(parser('[#a| ]')), [['<a class="index" href="#index::a|">a|</a>'], '']);
74
+ assert.deepStrictEqual(inspect(parser('[#a|\\ ]')), [['<a class="index" href="#index::a|">a|</a>'], '']);
75
+ assert.deepStrictEqual(inspect(parser('[#a|b]')), [['<a class="index" href="#index::b">a<span class="indexer" data-index="b"></span></a>'], '']);
76
+ assert.deepStrictEqual(inspect(parser('[#a|b ]')), [['<a class="index" href="#index::b">a<span class="indexer" data-index="b"></span></a>'], '']);
77
+ assert.deepStrictEqual(inspect(parser('[#a|b ]')), [['<a class="index" href="#index::b">a<span class="indexer" data-index="b"></span></a>'], '']);
78
+ assert.deepStrictEqual(inspect(parser('[#a|\\b]')), [['<a class="index" href="#index::b">a<span class="indexer" data-index="b"></span></a>'], '']);
79
+ assert.deepStrictEqual(inspect(parser('[#a|_b_]')), [['<a class="index" href="#index::_b_">a<span class="indexer" data-index="_b_"></span></a>'], '']);
80
+ assert.deepStrictEqual(inspect(parser('[#a|b c]')), [['<a class="index" href="#index::b_c">a<span class="indexer" data-index="b_c"></span></a>'], '']);
81
+ assert.deepStrictEqual(inspect(parser('[#a|b c]')), [['<a class="index" href="#index::b_c">a<span class="indexer" data-index="b_c"></span></a>'], '']);
82
+ assert.deepStrictEqual(inspect(parser('[#a|[]]')), [['<a class="index" href="#index::[]">a<span class="indexer" data-index="[]"></span></a>'], '']);
83
+ assert.deepStrictEqual(inspect(parser('[#a|&copy;]')), [['<a class="index" href="#index::&amp;copy;">a<span class="indexer" data-index="&amp;copy;"></span></a>'], '']);
84
+ assert.deepStrictEqual(inspect(parser('[#a |b]')), [['<a class="index" href="#index::b">a<span class="indexer" data-index="b"></span></a>'], '']);
85
+ assert.deepStrictEqual(inspect(parser('[#a |b]')), [['<a class="index" href="#index::b">a<span class="indexer" data-index="b"></span></a>'], '']);
86
+ assert.deepStrictEqual(inspect(parser('[#a \\ |b]')), [['<a class="index" href="#index::b">a<span class="indexer" data-index="b"></span></a>'], '']);
87
+ assert.deepStrictEqual(inspect(parser('[#a &nbsp;|b]')), [['<a class="index" href="#index::b">a<span class="indexer" data-index="b"></span></a>'], '']);
88
+ assert.deepStrictEqual(inspect(parser('[#a <wbr>|b]')), [['<a class="index" href="#index::b">a<span class="indexer" data-index="b"></span></a>'], '']);
89
+ assert.deepStrictEqual(inspect(parser('[#a [% b %]|c]')), [['<a class="index" href="#index::c">a <span class="comment"><input type="checkbox"><span>[% b %]</span></span><span class="indexer" data-index="c"></span></a>'], '']);
90
+ assert.deepStrictEqual(inspect(parser('[#a\\ |b]')), [['<a class="index" href="#index::b">a<span class="indexer" data-index="b"></span></a>'], '']);
91
91
  });
92
92
 
93
93
  });
@@ -35,7 +35,7 @@ const signature: IndexParser.SignatureParser = lazy(() => creation(fmap(open(
35
35
  '|',
36
36
  startTight(some(union([bracket, txt]), ']'))),
37
37
  ns => [
38
- html('span', { class: 'indexer', 'data-index': identity(ns.join('')).slice(6) }),
38
+ html('span', { class: 'indexer', 'data-index': identity(undefined, ns.join(''))!.slice(7) }),
39
39
  ])));
40
40
 
41
41
  const bracket: IndexParser.SignatureParser.BracketParser = lazy(() => creation(union([
@@ -5,26 +5,30 @@ import { define } from 'typed-dom/dom';
5
5
 
6
6
  export function indexee<P extends Parser<unknown, MarkdownParser.Context>>(parser: P, optional?: boolean): P;
7
7
  export function indexee(parser: Parser<HTMLElement, MarkdownParser.Context>, optional?: boolean): Parser<HTMLElement> {
8
- return fmap(parser, ([el], _, { id }) => [define(el, { id: id !== '' && identity(text(el, optional)) || undefined })]);
8
+ return fmap(parser, ([el], _, { id }) => [define(el, { id: identity(id, text(el, optional)) })]);
9
9
  }
10
10
 
11
- export function identity(text: string, name: 'index' | 'mark' = 'index'): string {
11
+ export function identity(id: string | undefined, text: string, name: 'index' | 'mark' = 'index'): string | undefined {
12
+ assert(!id?.match(/[^0-9a-z-]/i));
12
13
  assert(!text.includes('\n'));
14
+ if (id === '') return undefined;
13
15
  text &&= text.trim().replace(/\s+/g, '_');
14
- if (text.length <= 100) return text && `${name}:${text}`;
16
+ if (text === '') return undefined;
17
+ if (text.length <= 100) return `${name}:${id ?? ''}:${text}`;
15
18
  switch (name) {
16
19
  case 'index':
17
- return `${name}:${text.slice(0, 97)}...`;
20
+ return `${name}:${id ?? ''}:${text.slice(0, 97)}...`;
18
21
  case 'mark':
19
- return `${name}:${text.slice(0, 50)}...${text.slice(-47)}`;
22
+ return `${name}:${id ?? ''}:${text.slice(0, 50)}...${text.slice(-47)}`;
20
23
  }
24
+ assert(false);
21
25
  }
22
- assert(identity('0'.repeat(100 - 1) + 1).slice(6) === '0'.repeat(100 - 1) + 1);
23
- assert(identity('0'.repeat(100) + 1).slice(6) === '0'.repeat(97) + '...');
24
- assert(identity('0'.repeat(200) + 1).slice(6) === '0'.repeat(97) + '...');
25
- assert(identity('0'.repeat(100 - 1) + 1, 'mark').slice(5) === '0'.repeat(100 - 1) + 1);
26
- assert(identity('0'.repeat(100) + 1, 'mark').slice(5) === '0'.repeat(50) + '...' + '0'.repeat(47 - 1) + 1);
27
- assert(identity('0'.repeat(200) + 1, 'mark').slice(5) === '0'.repeat(50) + '...' + '0'.repeat(47 - 1) + 1);
26
+ assert(identity(undefined, '0'.repeat(100 - 1) + 1)!.slice(7) === '0'.repeat(100 - 1) + 1);
27
+ assert(identity(undefined, '0'.repeat(100) + 1)!.slice(7) === '0'.repeat(97) + '...');
28
+ assert(identity(undefined, '0'.repeat(200) + 1)!.slice(7) === '0'.repeat(97) + '...');
29
+ assert(identity(undefined, '0'.repeat(100 - 1) + 1, 'mark')!.slice(6) === '0'.repeat(100 - 1) + 1);
30
+ assert(identity(undefined, '0'.repeat(100) + 1, 'mark')!.slice(6) === '0'.repeat(50) + '...' + '0'.repeat(47 - 1) + 1);
31
+ assert(identity(undefined, '0'.repeat(200) + 1, 'mark')!.slice(6) === '0'.repeat(50) + '...' + '0'.repeat(47 - 1) + 1);
28
32
 
29
33
  export function text(source: HTMLElement | DocumentFragment, optional = false): string {
30
34
  assert(source instanceof DocumentFragment || !source.matches('.indexer'));
@@ -15,5 +15,5 @@ export const indexer: ExtensionParser.IndexerParser = creation(fmap(verify(surro
15
15
  // Indexer is invisible but invalids must be visible.
16
16
  ([el]) => el.getElementsByClassName('invalid').length === 0),
17
17
  ([el]) => [
18
- html('span', { class: 'indexer', 'data-index': el.getAttribute('href')!.slice(7) }),
18
+ html('span', { class: 'indexer', 'data-index': el.getAttribute('href')!.slice(1).replace(/^\w+:\w*:/, '') }),
19
19
  ]));
@@ -180,6 +180,7 @@ export function resolve(uri: string, host: URL | Location, source: URL | Locatio
180
180
  case uri.slice(0, 2) === '^/':
181
181
  const last = host.pathname.slice(host.pathname.lastIndexOf('/') + 1);
182
182
  return last.includes('.') // isFile
183
+ // Exclude ISO 6709.
183
184
  && /^[0-9]*[a-z][0-9a-z]*$/i.test(last.slice(last.lastIndexOf('.') + 1))
184
185
  ? `${host.pathname.slice(0, -last.length)}${uri.slice(2)}`
185
186
  : `${host.pathname.replace(/\/?$/, '/')}${uri.slice(2)}`;
@@ -29,18 +29,18 @@ describe('Unit: parser/inline/mark', () => {
29
29
  });
30
30
 
31
31
  it('basic', () => {
32
- assert.deepStrictEqual(inspect(parser('==a==')), [['<mark id="mark:a">a</mark>', '<a href="#mark:a"></a>'], '']);
33
- assert.deepStrictEqual(inspect(parser('==a=b==')), [['<mark id="mark:a=b">a=b</mark>', '<a href="#mark:a=b"></a>'], '']);
34
- assert.deepStrictEqual(inspect(parser('==\\===')), [['<mark id="mark:=">=</mark>', '<a href="#mark:="></a>'], '']);
35
- assert.deepStrictEqual(inspect(parser('==a===')), [['<mark id="mark:a">a</mark>', '<a href="#mark:a"></a>'], '=']);
32
+ assert.deepStrictEqual(inspect(parser('==a==')), [['<mark id="mark::a">a</mark>', '<a href="#mark::a"></a>'], '']);
33
+ assert.deepStrictEqual(inspect(parser('==a=b==')), [['<mark id="mark::a=b">a=b</mark>', '<a href="#mark::a=b"></a>'], '']);
34
+ assert.deepStrictEqual(inspect(parser('==\\===')), [['<mark id="mark::=">=</mark>', '<a href="#mark::="></a>'], '']);
35
+ assert.deepStrictEqual(inspect(parser('==a===')), [['<mark id="mark::a">a</mark>', '<a href="#mark::a"></a>'], '=']);
36
36
  });
37
37
 
38
38
  it('nest', () => {
39
- assert.deepStrictEqual(inspect(parser('==a ==b====')), [['<mark id="mark:a_b">a <mark id="mark:b">b</mark><a href="#mark:b"></a></mark>', '<a href="#mark:a_b"></a>'], '']);
40
- assert.deepStrictEqual(inspect(parser('==a\\ ==b====')), [['<mark id="mark:a_b">a <mark id="mark:b">b</mark><a href="#mark:b"></a></mark>', '<a href="#mark:a_b"></a>'], '']);
41
- assert.deepStrictEqual(inspect(parser('==a&Tab;==b====')), [['<mark id="mark:a_b">a\t<mark id="mark:b">b</mark><a href="#mark:b"></a></mark>', '<a href="#mark:a_b"></a>'], '']);
42
- assert.deepStrictEqual(inspect(parser('==a<wbr>==b====')), [['<mark id="mark:ab">a<wbr><mark id="mark:b">b</mark><a href="#mark:b"></a></mark>', '<a href="#mark:ab"></a>'], '']);
43
- assert.deepStrictEqual(inspect(parser('==_==a==_==')), [['<mark id="mark:a"><em><mark id="mark:a">a</mark><a href="#mark:a"></a></em></mark>', '<a href="#mark:a"></a>'], '']);
39
+ assert.deepStrictEqual(inspect(parser('==a ==b====')), [['<mark id="mark::a_b">a <mark id="mark::b">b</mark><a href="#mark::b"></a></mark>', '<a href="#mark::a_b"></a>'], '']);
40
+ assert.deepStrictEqual(inspect(parser('==a\\ ==b====')), [['<mark id="mark::a_b">a <mark id="mark::b">b</mark><a href="#mark::b"></a></mark>', '<a href="#mark::a_b"></a>'], '']);
41
+ assert.deepStrictEqual(inspect(parser('==a&Tab;==b====')), [['<mark id="mark::a_b">a\t<mark id="mark::b">b</mark><a href="#mark::b"></a></mark>', '<a href="#mark::a_b"></a>'], '']);
42
+ assert.deepStrictEqual(inspect(parser('==a<wbr>==b====')), [['<mark id="mark::ab">a<wbr><mark id="mark::b">b</mark><a href="#mark::b"></a></mark>', '<a href="#mark::ab"></a>'], '']);
43
+ assert.deepStrictEqual(inspect(parser('==_==a==_==')), [['<mark id="mark::a"><em><mark id="mark::a">a</mark><a href="#mark::a"></a></em></mark>', '<a href="#mark::a"></a>'], '']);
44
44
  });
45
45
 
46
46
  });
@@ -19,7 +19,7 @@ export const mark: MarkParser = lazy(() => surround(
19
19
  str('=='), false,
20
20
  ([, bs], rest, { id }) => {
21
21
  const el = html('mark', defrag(bs));
22
- define(el, { id: id !== '' && identity(text(el), 'mark') || undefined });
22
+ define(el, { id: identity(id, text(el), 'mark') });
23
23
  return [[el, html('a', { href: el.id ? `#${el.id}` : undefined })], rest];
24
24
  },
25
25
  ([as, bs], rest) => [unshift(as, bs), rest]));
@@ -32,7 +32,7 @@ describe('Unit: parser/inline', () => {
32
32
  assert.deepStrictEqual(inspect(parser('++\na\n++\n~~\nb\n~~\nc')), [['<ins><br>a</ins>', '<br>', '<del><br>b</del>', '<br>', 'c'], '']);
33
33
  assert.deepStrictEqual(inspect(parser('``a`')), [['``', 'a', '`'], '']);
34
34
  assert.deepStrictEqual(inspect(parser('[@a]')), [['[', '<a class="account" href="/@a">@a</a>', ']'], '']);
35
- assert.deepStrictEqual(inspect(parser('[#1][#2]')), [['<a class="index" href="#index:1">1</a>', '<a class="index" href="#index:2">2</a>'], '']);
35
+ assert.deepStrictEqual(inspect(parser('[#1][#2]')), [['<a class="index" href="#index::1">1</a>', '<a class="index" href="#index::2">2</a>'], '']);
36
36
  assert.deepStrictEqual(inspect(parser('[$1]')), [['[', '$', '1', ']'], '']);
37
37
  assert.deepStrictEqual(inspect(parser('[$1-2]')), [['[', '$', '1-2', ']'], '']);
38
38
  assert.deepStrictEqual(inspect(parser('[$-1][$-2]')), [['<a class="label" data-label="$-1">$-1</a>', '<a class="label" data-label="$-2">$-2</a>'], '']);
@@ -44,8 +44,8 @@ describe('Unit: parser/inline', () => {
44
44
  assert.deepStrictEqual(inspect(parser('[[#-1]]{b}')), [['<sup class="reference"><span>#-1</span></sup>', '<a class="url" href="b">b</a>'], '']);
45
45
  assert.deepStrictEqual(inspect(parser('[[#-1]](b)')), [['<sup class="reference"><span>#-1</span></sup>', '(', 'b', ')'], '']);
46
46
  assert.deepStrictEqual(inspect(parser('[[#-1]a]{b}')), [['<a class="link" href="b">[#-1]a</a>'], '']);
47
- assert.deepStrictEqual(inspect(parser('[[#-1]a](b)')), [['[', '<a class="index" href="#index:-1">-1</a>', 'a', ']', '(', 'b', ')'], '']);
48
- assert.deepStrictEqual(inspect(parser('[#a]{b}')), [['<a class="index" href="#index:a">a</a>', '<a class="url" href="b">b</a>'], '']);
47
+ assert.deepStrictEqual(inspect(parser('[[#-1]a](b)')), [['[', '<a class="index" href="#index::-1">-1</a>', 'a', ']', '(', 'b', ')'], '']);
48
+ assert.deepStrictEqual(inspect(parser('[#a]{b}')), [['<a class="index" href="#index::a">a</a>', '<a class="url" href="b">b</a>'], '']);
49
49
  assert.deepStrictEqual(inspect(parser('[@a]{b}')), [['<a class="link" href="b">@a</a>'], '']);
50
50
  assert.deepStrictEqual(inspect(parser('[http://host]{http://evil}')), [['<a class="invalid">http://host</a>'], '']);
51
51
  assert.deepStrictEqual(inspect(parser('[http://host]{http://host}')), [['<a class="invalid">http://host</a>'], '']);
@@ -122,6 +122,7 @@ describe('Unit: parser/inline', () => {
122
122
  assert.deepStrictEqual(inspect(parser('a@b')), [['<a class="email" href="mailto:a@b">a@b</a>'], '']);
123
123
  assert.deepStrictEqual(inspect(parser('_a@b')), [['_', '<a class="email" href="mailto:a@b">a@b</a>'], '']);
124
124
  assert.deepStrictEqual(inspect(parser('_a@b_')), [['<em><a class="email" href="mailto:a@b">a@b</a></em>'], '']);
125
+ assert.deepStrictEqual(inspect(parser('_a_b@c_')), [['<em><a class="email" href="mailto:a_b@c">a_b@c</a></em>'], '']);
125
126
  assert.deepStrictEqual(inspect(parser('*a@b*')), [['<strong><a class="email" href="mailto:a@b">a@b</a></strong>'], '']);
126
127
  assert.deepStrictEqual(inspect(parser('(a@b)')), [['<span class="paren">(<a class="email" href="mailto:a@b">a@b</a>)</span>'], '']);
127
128
  assert.deepStrictEqual(inspect(parser(' a@b')), [[' ', '<a class="email" href="mailto:a@b">a@b</a>'], '']);
@@ -130,9 +131,7 @@ describe('Unit: parser/inline', () => {
130
131
 
131
132
  it('channel', () => {
132
133
  assert.deepStrictEqual(inspect(parser('@a#b')), [['<a class="channel" href="/@a?ch=b">@a#b</a>'], '']);
133
- assert.deepStrictEqual(inspect(parser('@a#domain/b')), [['@a#domain/b'], '']);
134
134
  assert.deepStrictEqual(inspect(parser('@domain/a#b')), [['<a class="channel" href="https://domain/@a?ch=b" target="_blank">@domain/a#b</a>'], '']);
135
- assert.deepStrictEqual(inspect(parser('@domain/a#domain/b')), [['@domain/a#domain/b'], '']);
136
135
  assert.deepStrictEqual(inspect(parser('_@a#b')), [['_', '<a class="channel" href="/@a?ch=b">@a#b</a>'], '']);
137
136
  assert.deepStrictEqual(inspect(parser(' @a#b')), [[' ', '<a class="channel" href="/@a?ch=b">@a#b</a>'], '']);
138
137
  });
@@ -150,8 +149,10 @@ describe('Unit: parser/inline', () => {
150
149
  assert.deepStrictEqual(inspect(parser('#a#')), [['#a#'], '']);
151
150
  assert.deepStrictEqual(inspect(parser('#a#b')), [['#a#b'], '']);
152
151
  assert.deepStrictEqual(inspect(parser('#a')), [['<a class="hashtag" href="/hashtags/a">#a</a>'], '']);
153
- assert.deepStrictEqual(inspect(parser('#a\nb\n#c\n[#d]')), [['<a class="hashtag" href="/hashtags/a">#a</a>', '<br>', 'b', '<br>', '<a class="hashtag" href="/hashtags/c">#c</a>', '<br>', '<a class="index" href="#index:d">d</a>'], '']);
152
+ assert.deepStrictEqual(inspect(parser('#a\nb\n#c\n[#d]')), [['<a class="hashtag" href="/hashtags/a">#a</a>', '<br>', 'b', '<br>', '<a class="hashtag" href="/hashtags/c">#c</a>', '<br>', '<a class="index" href="#index::d">d</a>'], '']);
154
153
  assert.deepStrictEqual(inspect(parser('##a')), [['##a'], '']);
154
+ assert.deepStrictEqual(inspect(parser('_#a')), [['_', '<a class="hashtag" href="/hashtags/a">#a</a>'], '']);
155
+ assert.deepStrictEqual(inspect(parser('_#a_')), [['<em><a class="hashtag" href="/hashtags/a">#a</a></em>'], '']);
155
156
  assert.deepStrictEqual(inspect(parser('a#b')), [['a#b'], '']);
156
157
  assert.deepStrictEqual(inspect(parser('0a#b')), [['0a#b'], '']);
157
158
  assert.deepStrictEqual(inspect(parser('あ#b')), [['あ#b'], '']);
@@ -173,6 +174,8 @@ describe('Unit: parser/inline', () => {
173
174
  it('hashnum', () => {
174
175
  assert.deepStrictEqual(inspect(parser('#1')), [['<a class="hashnum">#1</a>'], '']);
175
176
  assert.deepStrictEqual(inspect(parser('#12345678901234567@a')), [['#12345678901234567@a'], '']);
177
+ assert.deepStrictEqual(inspect(parser('_#1_')), [['<em><a class="hashnum">#1</a></em>'], '']);
178
+ assert.deepStrictEqual(inspect(parser('_#1_0')), [['<em><a class="hashnum">#1</a></em>', '0'], '']);
176
179
  assert.deepStrictEqual(inspect(parser('「#1」')), [['「', '<a class="hashnum">#1</a>', '」'], '']);
177
180
  });
178
181
 
@@ -52,7 +52,7 @@ describe('Unit: parser/processor/figure', () => {
52
52
  [...target.children].map(el => el.outerHTML),
53
53
  [
54
54
  '<figure data-type="quote" data-label="test-a" data-group="test" data-number="1" id="label:test-a"><figcaption><span class="figindex">Test 1. </span><span class="figtext"></span></figcaption><div><blockquote></blockquote></div></figure>',
55
- '<h2 id="index:0">0</h2>',
55
+ '<h2 id="index::0">0</h2>',
56
56
  '<figure data-type="quote" data-label="test-b" data-group="test" data-number="2" id="label:test-b"><figcaption><span class="figindex">Test 2. </span><span class="figtext"></span></figcaption><div><blockquote></blockquote></div></figure>',
57
57
  '<figure data-type="quote" data-label="quote-a" data-group="quote" data-number="1" id="label:quote-a"><figcaption><span class="figindex">Quote 1. </span><span class="figtext"></span></figcaption><div><blockquote></blockquote></div></figure>',
58
58
  '<figure data-type="quote" data-label="test-b" data-group="test" data-number="3" class="invalid" data-invalid-syntax="figure" data-invalid-type="argument" data-invalid-message="Duplicate label"><figcaption><span class="figindex">Test 3. </span><span class="figtext"></span></figcaption><div><blockquote></blockquote></div></figure>',
@@ -168,40 +168,40 @@ describe('Unit: parser/processor/figure', () => {
168
168
  assert.deepStrictEqual(
169
169
  [...target.children].map(el => normalize(el.outerHTML)),
170
170
  [
171
- '<h1 id="index:0">0</h1>',
171
+ '<h1 id="index::0">0</h1>',
172
172
  '<figure data-label="$-0.0" data-group="$" hidden="" data-number="0.0"></figure>',
173
- '<h2 id="index:0">0</h2>',
173
+ '<h2 id="index::0">0</h2>',
174
174
  '<figure data-type="quote" data-label="test-1" data-group="test" data-number="1" id="label:test-1"><figcaption><span class="figindex">Test 1. </span><span class="figtext"></span></figcaption><div><blockquote></blockquote></div></figure>',
175
- '<h2 id="index:0">0</h2>',
175
+ '<h2 id="index::0">0</h2>',
176
176
  '<blockquote><section><h2>0</h2><h2>References</h2><ol class="references"></ol></section></blockquote>',
177
177
  '<figure data-type="quote" data-label="test-b" data-group="test" data-number="2.1" id="label:test-b"><figcaption><span class="figindex">Test 2.1. </span><span class="figtext"></span></figcaption><div><blockquote></blockquote></div></figure>',
178
- '<h2 id="index:0">0</h2>',
178
+ '<h2 id="index::0">0</h2>',
179
179
  '<figure data-label="$-0.0.0" data-group="$" class="invalid" data-invalid-syntax="figure" data-invalid-type="argument" data-invalid-message="Base index must be $-x.0 format"></figure>',
180
- '<h3 id="index:0">0</h3>',
180
+ '<h3 id="index::0">0</h3>',
181
181
  '<figure data-label="$-0.0" data-group="$" hidden="" data-number="3.0"></figure>',
182
182
  '<figure data-type="quote" data-label="test-c" data-group="test" data-number="3.1" id="label:test-c"><figcaption><span class="figindex">Test 3.1. </span><span class="figtext"></span></figcaption><div><blockquote></blockquote></div></figure>',
183
- '<h2 id="index:0">0</h2>',
183
+ '<h2 id="index::0">0</h2>',
184
184
  '<figure data-label="$-0.1.0" data-group="$" class="invalid" data-invalid-syntax="figure" data-invalid-type="argument" data-invalid-message="Base index must be $-x.0 format"></figure>',
185
185
  '<figure data-type="quote" data-label="test-d" data-group="test" data-number="4.1" id="label:test-d"><figcaption><span class="figindex">Test 4.1. </span><span class="figtext"></span></figcaption><div><blockquote></blockquote></div></figure>',
186
186
  '<figure data-label="$-0.0" data-group="$" class="invalid" data-invalid-syntax="figure" data-invalid-type="position" data-invalid-message="Base index declarations must be after level 1 to 6 headings"></figure>',
187
187
  '<figure data-label="$-0.1.0" data-group="$" class="invalid" data-invalid-syntax="figure" data-invalid-type="argument" data-invalid-message="Base index must be $-x.0 format"></figure>',
188
188
  '<figure data-label="$-0.4.0" data-group="$" class="invalid" data-invalid-syntax="figure" data-invalid-type="argument" data-invalid-message="Base index must be $-x.0 format"></figure>',
189
189
  '<figure data-label="$-0.1.0" data-group="$" class="invalid" data-invalid-syntax="figure" data-invalid-type="argument" data-invalid-message="Base index must be $-x.0 format"></figure>',
190
- '<h2 id="index:0">0</h2>',
191
- '<h2 id="index:0">0</h2>',
190
+ '<h2 id="index::0">0</h2>',
191
+ '<h2 id="index::0">0</h2>',
192
192
  '<figure data-label="$-0.0" data-group="$" hidden="" data-number="6.0"></figure>',
193
193
  '<figure data-type="quote" data-label="test-e" data-group="test" data-number="6.1" id="label:test-e"><figcaption><span class="figindex">Test 6.1. </span><span class="figtext"></span></figcaption><div><blockquote></blockquote></div></figure>',
194
- '<h2 id="index:0">0</h2>',
194
+ '<h2 id="index::0">0</h2>',
195
195
  '<figure data-label="$-5.0" data-group="$" hidden="" data-number="5.0"></figure>',
196
196
  '<figure data-type="quote" data-label="test-f" data-group="test" data-number="5.1" id="label:test-f"><figcaption><span class="figindex">Test 5.1. </span><span class="figtext"></span></figcaption><div><blockquote></blockquote></div></figure>',
197
197
  '<figure data-label="$-0" data-group="$" class="invalid" data-invalid-syntax="figure" data-invalid-type="argument" data-invalid-message="Invalid base index"></figure>',
198
198
  '<figure data-type="quote" data-label="test-g" data-group="test" data-number="5.2" id="label:test-g"><figcaption><span class="figindex">Test 5.2. </span><span class="figtext"></span></figcaption><div><blockquote></blockquote></div></figure>',
199
- '<h3 id="index:0">0</h3>',
199
+ '<h3 id="index::0">0</h3>',
200
200
  '<figure data-label="$-0.0.0" data-group="$" class="invalid" data-invalid-syntax="figure" data-invalid-type="argument" data-invalid-message="Base index must be $-x.0 format"></figure>',
201
201
  '<figure data-type="quote" data-label="test-h" data-group="test" data-number="5.3" id="label:test-h"><figcaption><span class="figindex">Test 5.3. </span><span class="figtext"></span></figcaption><div><blockquote></blockquote></div></figure>',
202
- '<h3 id="index:0">0</h3>',
202
+ '<h3 id="index::0">0</h3>',
203
203
  '<figure data-type="quote" data-label="test-i" data-group="test" data-number="5.4" id="label:test-i"><figcaption><span class="figindex">Test 5.4. </span><span class="figtext"></span></figcaption><div><blockquote></blockquote></div></figure>',
204
- '<h1 id="index:0">0</h1>',
204
+ '<h1 id="index::0">0</h1>',
205
205
  '<figure data-type="quote" data-label="test-j" data-group="test" data-number="6.1" id="label:test-j"><figcaption><span class="figindex">Test 6.1. </span><span class="figtext"></span></figcaption><div><blockquote></blockquote></div></figure>',
206
206
  ]);
207
207
  }
@@ -235,22 +235,22 @@ describe('Unit: parser/processor/figure', () => {
235
235
  [...target.children].map(el => normalize(el.outerHTML)),
236
236
  [
237
237
  '<figure data-label="$-0.0" data-group="$" class="invalid" data-invalid-syntax="figure" data-invalid-type="position" data-invalid-message="Base index declarations must be after level 1 to 6 headings"></figure>',
238
- '<h2 id="index:0">0</h2>',
238
+ '<h2 id="index::0">0</h2>',
239
239
  '<figure data-label="$-0.0" data-group="$" hidden="" data-number="0.0"></figure>',
240
240
  '<figure data-type="quote" data-label="test-a" data-group="test" data-number="0.1" id="label:test-a"><figcaption><span class="figindex">Test 0.1. </span><span class="figtext"></span></figcaption><div><blockquote></blockquote></div></figure>',
241
241
  '<figure data-label="$-0.0" data-group="$" class="invalid" data-invalid-syntax="figure" data-invalid-type="position" data-invalid-message="Base index declarations must be after level 1 to 6 headings"></figure>',
242
- '<h2 id="index:0">0</h2>',
242
+ '<h2 id="index::0">0</h2>',
243
243
  '<figure data-type="quote" data-label="test-b" data-group="test" data-number="1.1" id="label:test-b"><figcaption><span class="figindex">Test 1.1. </span><span class="figtext"></span></figcaption><div><blockquote></blockquote></div></figure>',
244
244
  '<figure data-label="$-0.0" data-group="$" class="invalid" data-invalid-syntax="figure" data-invalid-type="position" data-invalid-message="Base index declarations must be after level 1 to 6 headings"></figure>',
245
- '<h3 id="index:0">0</h3>',
245
+ '<h3 id="index::0">0</h3>',
246
246
  '<figure data-type="quote" data-label="test-c" data-group="test" data-number="1.2" id="label:test-c"><figcaption><span class="figindex">Test 1.2. </span><span class="figtext"></span></figcaption><div><blockquote></blockquote></div></figure>',
247
247
  '<figure data-label="$-1.0" data-group="$" class="invalid" data-invalid-syntax="figure" data-invalid-type="position" data-invalid-message="Base index declarations must be after level 1 to 6 headings"></figure>',
248
- '<h2 id="index:0">0</h2>',
248
+ '<h2 id="index::0">0</h2>',
249
249
  '<figure data-label="$-0.0" data-group="$" hidden="" data-number="2.0"></figure>',
250
250
  '<figure data-type="quote" data-label="test-d" data-group="test" data-number="2.1" id="label:test-d"><figcaption><span class="figindex">Test 2.1. </span><span class="figtext"></span></figcaption><div><blockquote></blockquote></div></figure>',
251
- '<h3 id="index:0">0</h3>',
251
+ '<h3 id="index::0">0</h3>',
252
252
  '<figure data-label="$-0.0" data-group="$" hidden="" data-number="2.0"></figure>',
253
- '<h2 id="index:0">0</h2>',
253
+ '<h2 id="index::0">0</h2>',
254
254
  '<figure data-label="$-9.0" data-group="$" hidden="" data-number="9.0"></figure>',
255
255
  '<figure data-type="quote" data-label="test-e" data-group="test" data-number="9.1" id="label:test-e"><figcaption><span class="figindex">Test 9.1. </span><span class="figtext"></span></figcaption><div><blockquote></blockquote></div></figure>',
256
256
  ]);