securemark 0.295.0 → 0.295.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (169) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/design.md +4 -3
  3. package/dist/index.js +529 -484
  4. package/markdown.d.ts +13 -28
  5. package/package.json +1 -1
  6. package/src/combinator/control/constraint/block.test.ts +6 -8
  7. package/src/combinator/control/constraint/contract.ts +7 -7
  8. package/src/combinator/control/constraint/line.test.ts +7 -9
  9. package/src/combinator/control/constraint/line.ts +0 -1
  10. package/src/combinator/control/manipulation/clear.ts +2 -2
  11. package/src/combinator/control/manipulation/convert.ts +3 -3
  12. package/src/combinator/control/manipulation/duplicate.ts +4 -4
  13. package/src/combinator/control/manipulation/fallback.ts +2 -2
  14. package/src/combinator/control/manipulation/fence.ts +3 -3
  15. package/src/combinator/control/manipulation/indent.test.ts +20 -22
  16. package/src/combinator/control/manipulation/indent.ts +2 -2
  17. package/src/combinator/control/manipulation/recovery.ts +3 -3
  18. package/src/combinator/control/manipulation/reverse.ts +2 -2
  19. package/src/combinator/control/manipulation/scope.ts +2 -4
  20. package/src/combinator/control/manipulation/surround.ts +66 -66
  21. package/src/combinator/control/monad/bind.ts +6 -6
  22. package/src/combinator/control/monad/fmap.ts +6 -6
  23. package/src/combinator/data/data.ts +2 -2
  24. package/src/combinator/data/{parser/context/delimiter.ts → delimiter.ts} +4 -4
  25. package/src/combinator/data/parser/context.test.ts +12 -11
  26. package/src/combinator/data/parser/context.ts +13 -14
  27. package/src/combinator/data/parser/inits.ts +5 -5
  28. package/src/combinator/data/parser/sequence.test.ts +12 -13
  29. package/src/combinator/data/parser/sequence.ts +5 -5
  30. package/src/combinator/data/parser/some.test.ts +15 -16
  31. package/src/combinator/data/parser/some.ts +5 -6
  32. package/src/combinator/data/parser/subsequence.test.ts +16 -17
  33. package/src/combinator/data/parser/subsequence.ts +3 -3
  34. package/src/combinator/data/parser/tails.ts +3 -3
  35. package/src/combinator/data/parser/union.test.ts +12 -13
  36. package/src/combinator/data/parser/union.ts +3 -3
  37. package/src/combinator/data/parser.ts +55 -32
  38. package/src/debug.test.ts +5 -3
  39. package/src/parser/api/bind.ts +8 -6
  40. package/src/parser/api/header.ts +4 -4
  41. package/src/parser/api/normalize.ts +2 -1
  42. package/src/parser/api/parse.test.ts +7 -6
  43. package/src/parser/api/parse.ts +9 -8
  44. package/src/parser/autolink.test.ts +18 -18
  45. package/src/parser/block/blockquote.test.ts +79 -79
  46. package/src/parser/block/blockquote.ts +5 -5
  47. package/src/parser/block/codeblock.test.ts +57 -57
  48. package/src/parser/block/codeblock.ts +3 -3
  49. package/src/parser/block/dlist.test.ts +57 -57
  50. package/src/parser/block/dlist.ts +6 -6
  51. package/src/parser/block/extension/aside.test.ts +9 -9
  52. package/src/parser/block/extension/aside.ts +5 -5
  53. package/src/parser/block/extension/example.test.ts +19 -19
  54. package/src/parser/block/extension/example.ts +6 -6
  55. package/src/parser/block/extension/fig.test.ts +36 -36
  56. package/src/parser/block/extension/figbase.test.ts +16 -16
  57. package/src/parser/block/extension/figbase.ts +2 -2
  58. package/src/parser/block/extension/figure.test.ts +63 -63
  59. package/src/parser/block/extension/figure.ts +3 -3
  60. package/src/parser/block/extension/message.test.ts +14 -14
  61. package/src/parser/block/extension/message.ts +5 -5
  62. package/src/parser/block/extension/placeholder.test.ts +13 -13
  63. package/src/parser/block/extension/placeholder.ts +2 -2
  64. package/src/parser/block/extension/table.test.ts +76 -76
  65. package/src/parser/block/extension/table.ts +14 -14
  66. package/src/parser/block/extension.test.ts +24 -24
  67. package/src/parser/block/heading.test.ts +59 -59
  68. package/src/parser/block/heading.ts +7 -7
  69. package/src/parser/block/ilist.test.ts +8 -12
  70. package/src/parser/block/ilist.ts +6 -6
  71. package/src/parser/block/mathblock.test.ts +32 -32
  72. package/src/parser/block/mathblock.ts +3 -3
  73. package/src/parser/block/mediablock.ts +3 -3
  74. package/src/parser/block/olist.test.ts +103 -103
  75. package/src/parser/block/olist.ts +5 -5
  76. package/src/parser/block/pagebreak.test.ts +16 -16
  77. package/src/parser/block/pagebreak.ts +2 -2
  78. package/src/parser/block/paragraph.test.ts +58 -58
  79. package/src/parser/block/paragraph.ts +2 -2
  80. package/src/parser/block/reply/cite.test.ts +40 -40
  81. package/src/parser/block/reply/cite.ts +6 -6
  82. package/src/parser/block/reply/quote.test.ts +51 -51
  83. package/src/parser/block/reply/quote.ts +3 -3
  84. package/src/parser/block/reply.test.ts +20 -20
  85. package/src/parser/block/reply.ts +3 -3
  86. package/src/parser/block/sidefence.test.ts +48 -48
  87. package/src/parser/block/sidefence.ts +4 -4
  88. package/src/parser/block/table.test.ts +50 -50
  89. package/src/parser/block/table.ts +12 -12
  90. package/src/parser/block/ulist.test.ts +53 -53
  91. package/src/parser/block/ulist.ts +6 -6
  92. package/src/parser/block.ts +6 -4
  93. package/src/parser/context.ts +39 -0
  94. package/src/parser/header.test.ts +23 -23
  95. package/src/parser/header.ts +5 -5
  96. package/src/parser/inline/annotation.test.ts +43 -43
  97. package/src/parser/inline/annotation.ts +15 -5
  98. package/src/parser/inline/autolink/account.test.ts +33 -33
  99. package/src/parser/inline/autolink/account.ts +9 -9
  100. package/src/parser/inline/autolink/anchor.test.ts +22 -22
  101. package/src/parser/inline/autolink/anchor.ts +4 -4
  102. package/src/parser/inline/autolink/channel.test.ts +15 -15
  103. package/src/parser/inline/autolink/email.test.ts +37 -37
  104. package/src/parser/inline/autolink/email.ts +2 -2
  105. package/src/parser/inline/autolink/hashnum.test.ts +33 -33
  106. package/src/parser/inline/autolink/hashnum.ts +6 -5
  107. package/src/parser/inline/autolink/hashtag.test.ts +60 -60
  108. package/src/parser/inline/autolink/hashtag.ts +4 -4
  109. package/src/parser/inline/autolink/url.test.ts +75 -75
  110. package/src/parser/inline/autolink/url.ts +4 -4
  111. package/src/parser/inline/bracket.test.ts +70 -70
  112. package/src/parser/inline/bracket.ts +35 -32
  113. package/src/parser/inline/code.test.ts +31 -31
  114. package/src/parser/inline/code.ts +4 -4
  115. package/src/parser/inline/deletion.test.ts +28 -28
  116. package/src/parser/inline/deletion.ts +4 -4
  117. package/src/parser/inline/emphasis.test.ts +40 -40
  118. package/src/parser/inline/emphasis.ts +3 -3
  119. package/src/parser/inline/emstrong.test.ts +101 -101
  120. package/src/parser/inline/emstrong.ts +23 -23
  121. package/src/parser/inline/extension/index.test.ts +92 -92
  122. package/src/parser/inline/extension/index.ts +5 -5
  123. package/src/parser/inline/extension/indexee.ts +5 -5
  124. package/src/parser/inline/extension/indexer.test.ts +24 -24
  125. package/src/parser/inline/extension/indexer.ts +2 -2
  126. package/src/parser/inline/extension/label.test.ts +33 -33
  127. package/src/parser/inline/extension/label.ts +2 -2
  128. package/src/parser/inline/extension/placeholder.test.ts +43 -43
  129. package/src/parser/inline/extension/placeholder.ts +4 -4
  130. package/src/parser/inline/html.test.ts +108 -108
  131. package/src/parser/inline/html.ts +10 -10
  132. package/src/parser/inline/htmlentity.test.ts +38 -38
  133. package/src/parser/inline/htmlentity.ts +5 -5
  134. package/src/parser/inline/insertion.test.ts +28 -28
  135. package/src/parser/inline/insertion.ts +4 -4
  136. package/src/parser/inline/italic.test.ts +55 -55
  137. package/src/parser/inline/italic.ts +4 -4
  138. package/src/parser/inline/link.test.ts +186 -187
  139. package/src/parser/inline/link.ts +16 -17
  140. package/src/parser/inline/mark.test.ts +31 -31
  141. package/src/parser/inline/mark.ts +5 -5
  142. package/src/parser/inline/math.test.ts +132 -132
  143. package/src/parser/inline/math.ts +2 -2
  144. package/src/parser/inline/media.test.ts +91 -91
  145. package/src/parser/inline/media.ts +15 -15
  146. package/src/parser/inline/reference.test.ts +109 -109
  147. package/src/parser/inline/reference.ts +16 -55
  148. package/src/parser/inline/remark.test.ts +50 -50
  149. package/src/parser/inline/remark.ts +5 -5
  150. package/src/parser/inline/ruby.test.ts +45 -45
  151. package/src/parser/inline/ruby.ts +17 -17
  152. package/src/parser/inline/shortmedia.test.ts +10 -10
  153. package/src/parser/inline/strong.test.ts +37 -37
  154. package/src/parser/inline/strong.ts +3 -3
  155. package/src/parser/inline/template.test.ts +23 -23
  156. package/src/parser/inline/template.ts +5 -5
  157. package/src/parser/inline.test.ts +224 -223
  158. package/src/parser/segment.ts +2 -2
  159. package/src/parser/source/escapable.test.ts +24 -24
  160. package/src/parser/source/escapable.ts +8 -8
  161. package/src/parser/source/line.test.ts +18 -18
  162. package/src/parser/source/str.ts +2 -2
  163. package/src/parser/source/text.test.ts +85 -85
  164. package/src/parser/source/text.ts +5 -5
  165. package/src/parser/source/unescapable.test.ts +24 -24
  166. package/src/parser/source/unescapable.ts +5 -5
  167. package/src/parser/util.ts +10 -11
  168. package/src/parser/visibility.ts +8 -9
  169. package/src/util/quote.ts +2 -1
@@ -1,130 +1,130 @@
1
1
  import { reference } from './reference';
2
2
  import { some } from '../../combinator';
3
3
  import { input } from '../../combinator/data/parser';
4
+ import { Context } from '../context';
4
5
  import { inspect } from '../../debug.test';
5
6
 
6
7
  describe('Unit: parser/inline/reference', () => {
7
8
  describe('reference', () => {
8
- const parser = (source: string) => some(reference)(input(source, ctx));
9
- const { context: ctx } = input('', {});
9
+ const parser = some(reference);
10
10
 
11
11
  it('invalid', () => {
12
- assert.deepStrictEqual(inspect(parser(''), ctx), undefined);
13
- assert.deepStrictEqual(inspect(parser('['), ctx), undefined);
14
- assert.deepStrictEqual(inspect(parser('[]'), ctx), undefined);
15
- assert.deepStrictEqual(inspect(parser('[['), ctx), undefined);
16
- assert.deepStrictEqual(inspect(parser('[[]]'), ctx), undefined);
17
- assert.deepStrictEqual(inspect(parser('[[]]]'), ctx), undefined);
18
- assert.deepStrictEqual(inspect(parser('[["]]'), ctx), undefined);
19
- assert.deepStrictEqual(inspect(parser('[[(]]'), ctx), undefined);
20
- assert.deepStrictEqual(inspect(parser('[[[%]]'), ctx), undefined);
21
- assert.deepStrictEqual(inspect(parser('[[ ]]'), ctx), undefined);
22
- assert.deepStrictEqual(inspect(parser('[[ [a'), ctx), undefined);
23
- assert.deepStrictEqual(inspect(parser('[[\n]]'), ctx), undefined);
24
- assert.deepStrictEqual(inspect(parser('[[\na]]'), ctx), undefined);
25
- assert.deepStrictEqual(inspect(parser('[[\\\na]]'), ctx), undefined);
26
- assert.deepStrictEqual(inspect(parser('[[a\n]]'), ctx), undefined);
27
- assert.deepStrictEqual(inspect(parser('[[a\\\n]]'), ctx), undefined);
28
- assert.deepStrictEqual(inspect(parser('[[a\nb]]'), ctx), undefined);
29
- assert.deepStrictEqual(inspect(parser('[[a\\\nb]]'), ctx), undefined);
30
- assert.deepStrictEqual(inspect(parser('[[*a\nb*]]'), ctx), undefined);
31
- assert.deepStrictEqual(inspect(parser('[[\\]]'), ctx), undefined);
32
- assert.deepStrictEqual(inspect(parser('[[a]b]]'), ctx), undefined);
33
- assert.deepStrictEqual(inspect(parser('[[[a]]'), ctx), undefined);
34
- assert.deepStrictEqual(inspect(parser(' [[a]]'), ctx), undefined);
12
+ assert.deepStrictEqual(inspect(parser, input('', new Context())), undefined);
13
+ assert.deepStrictEqual(inspect(parser, input('[', new Context())), undefined);
14
+ assert.deepStrictEqual(inspect(parser, input('[]', new Context())), undefined);
15
+ assert.deepStrictEqual(inspect(parser, input('[[', new Context())), undefined);
16
+ assert.deepStrictEqual(inspect(parser, input('[[]]', new Context())), undefined);
17
+ assert.deepStrictEqual(inspect(parser, input('[[]]]', new Context())), undefined);
18
+ assert.deepStrictEqual(inspect(parser, input('[["]]', new Context())), undefined);
19
+ assert.deepStrictEqual(inspect(parser, input('[[(]]', new Context())), undefined);
20
+ assert.deepStrictEqual(inspect(parser, input('[[[%]]', new Context())), undefined);
21
+ assert.deepStrictEqual(inspect(parser, input('[[ ]]', new Context())), undefined);
22
+ assert.deepStrictEqual(inspect(parser, input('[[ [a', new Context())), undefined);
23
+ assert.deepStrictEqual(inspect(parser, input('[[\n]]', new Context())), undefined);
24
+ assert.deepStrictEqual(inspect(parser, input('[[\na]]', new Context())), undefined);
25
+ assert.deepStrictEqual(inspect(parser, input('[[\\\na]]', new Context())), undefined);
26
+ assert.deepStrictEqual(inspect(parser, input('[[a\n]]', new Context())), undefined);
27
+ assert.deepStrictEqual(inspect(parser, input('[[a\\\n]]', new Context())), undefined);
28
+ assert.deepStrictEqual(inspect(parser, input('[[a\nb]]', new Context())), undefined);
29
+ assert.deepStrictEqual(inspect(parser, input('[[a\\\nb]]', new Context())), undefined);
30
+ assert.deepStrictEqual(inspect(parser, input('[[*a\nb*]]', new Context())), undefined);
31
+ assert.deepStrictEqual(inspect(parser, input('[[\\]]', new Context())), undefined);
32
+ assert.deepStrictEqual(inspect(parser, input('[[a]b]]', new Context())), undefined);
33
+ assert.deepStrictEqual(inspect(parser, input('[[[a]]', new Context())), undefined);
34
+ assert.deepStrictEqual(inspect(parser, input(' [[a]]', new Context())), undefined);
35
35
  });
36
36
 
37
37
  it('basic', () => {
38
- assert.deepStrictEqual(inspect(parser('[[ a]]'), ctx), [['<sup class="reference"><span>a</span></sup>'], '']);
39
- assert.deepStrictEqual(inspect(parser('[[ a ]]'), ctx), [['<sup class="reference"><span>a</span></sup>'], '']);
40
- assert.deepStrictEqual(inspect(parser('[[\\ a]]'), ctx), [['<sup class="reference"><span>a</span></sup>'], '']);
41
- assert.deepStrictEqual(inspect(parser('[[<wbr>a]]'), ctx), [['<sup class="reference"><span>a</span></sup>'], '']);
42
- assert.deepStrictEqual(inspect(parser('[[a]]'), ctx), [['<sup class="reference"><span>a</span></sup>'], '']);
43
- assert.deepStrictEqual(inspect(parser('[[a ]]'), ctx), [['<sup class="reference"><span>a</span></sup>'], '']);
44
- assert.deepStrictEqual(inspect(parser('[[a ]]'), ctx), [['<sup class="reference"><span>a</span></sup>'], '']);
45
- assert.deepStrictEqual(inspect(parser('[[a &nbsp;]]'), ctx), [['<sup class="reference"><span>a</span></sup>'], '']);
46
- assert.deepStrictEqual(inspect(parser('[[a <wbr>]]'), ctx), [['<sup class="reference"><span>a</span></sup>'], '']);
47
- assert.deepStrictEqual(inspect(parser('[[ab]]'), ctx), [['<sup class="reference"><span>ab</span></sup>'], '']);
38
+ assert.deepStrictEqual(inspect(parser, input('[[ a]]', new Context())), [['<sup class="reference"><span>a</span></sup>'], '']);
39
+ assert.deepStrictEqual(inspect(parser, input('[[ a ]]', new Context())), [['<sup class="reference"><span>a</span></sup>'], '']);
40
+ assert.deepStrictEqual(inspect(parser, input('[[\\ a]]', new Context())), [['<sup class="reference"><span>a</span></sup>'], '']);
41
+ assert.deepStrictEqual(inspect(parser, input('[[<wbr>a]]', new Context())), [['<sup class="reference"><span>a</span></sup>'], '']);
42
+ assert.deepStrictEqual(inspect(parser, input('[[a]]', new Context())), [['<sup class="reference"><span>a</span></sup>'], '']);
43
+ assert.deepStrictEqual(inspect(parser, input('[[a ]]', new Context())), [['<sup class="reference"><span>a</span></sup>'], '']);
44
+ assert.deepStrictEqual(inspect(parser, input('[[a ]]', new Context())), [['<sup class="reference"><span>a</span></sup>'], '']);
45
+ assert.deepStrictEqual(inspect(parser, input('[[a &nbsp;]]', new Context())), [['<sup class="reference"><span>a</span></sup>'], '']);
46
+ assert.deepStrictEqual(inspect(parser, input('[[a <wbr>]]', new Context())), [['<sup class="reference"><span>a</span></sup>'], '']);
47
+ assert.deepStrictEqual(inspect(parser, input('[[ab]]', new Context())), [['<sup class="reference"><span>ab</span></sup>'], '']);
48
48
  });
49
49
 
50
50
  it('nest', () => {
51
- assert.deepStrictEqual(inspect(parser('[[`a`]]'), ctx), [['<sup class="reference"><span><code data-src="`a`">a</code></span></sup>'], '']);
52
- assert.deepStrictEqual(inspect(parser('[[@a]]'), ctx), [['<sup class="reference"><span><a class="account" href="/@a">@a</a></span></sup>'], '']);
53
- assert.deepStrictEqual(inspect(parser('[[http://host]]'), ctx), [['<sup class="reference"><span><a class="url" href="http://host" target="_blank">http://host</a></span></sup>'], '']);
54
- assert.deepStrictEqual(inspect(parser('[[![]{a}]]'), ctx), [['<sup class="reference"><span>!<a class="url" href="a">a</a></span></sup>'], '']);
55
- assert.deepStrictEqual(inspect(parser('[[[a]]]'), ctx), [['<sup class="reference"><span>[a]</span></sup>'], '']);
56
- assert.deepStrictEqual(inspect(parser('[[[[a]]]]'), ctx), [['<sup class="reference"><span>[[a]]</span></sup>'], '']);
57
- assert.deepStrictEqual(inspect(parser('[[((a))]]'), ctx), [['<sup class="reference"><span><span class="paren">((a))</span></span></sup>'], '']);
51
+ assert.deepStrictEqual(inspect(parser, input('[[`a`]]', new Context())), [['<sup class="reference"><span><code data-src="`a`">a</code></span></sup>'], '']);
52
+ assert.deepStrictEqual(inspect(parser, input('[[@a]]', new Context())), [['<sup class="reference"><span><a class="account" href="/@a">@a</a></span></sup>'], '']);
53
+ assert.deepStrictEqual(inspect(parser, input('[[http://host]]', new Context())), [['<sup class="reference"><span><a class="url" href="http://host" target="_blank">http://host</a></span></sup>'], '']);
54
+ assert.deepStrictEqual(inspect(parser, input('[[![]{a}]]', new Context())), [['<sup class="reference"><span>!<a class="url" href="a">a</a></span></sup>'], '']);
55
+ assert.deepStrictEqual(inspect(parser, input('[[[a]]]', new Context())), [['<sup class="reference"><span>[a]</span></sup>'], '']);
56
+ assert.deepStrictEqual(inspect(parser, input('[[[[a]]]]', new Context())), [['<sup class="reference"><span>[[a]]</span></sup>'], '']);
57
+ assert.deepStrictEqual(inspect(parser, input('[[((a))]]', new Context())), [['<sup class="reference"><span><span class="paren">((a))</span></span></sup>'], '']);
58
58
  });
59
59
 
60
60
  it('abbr', () => {
61
- assert.deepStrictEqual(inspect(parser('[[^]]'), ctx), [['<sup class="invalid"><span>^</span></sup>'], '']);
62
- assert.deepStrictEqual(inspect(parser('[[^A]]'), ctx), [['<sup class="reference" data-abbr="A"><span></span></sup>'], '']);
63
- assert.deepStrictEqual(inspect(parser('[[^A,]]'), ctx), [['<sup class="reference" data-abbr="A,"><span></span></sup>'], '']);
64
- assert.deepStrictEqual(inspect(parser('[[^A, ]]'), ctx), [['<sup class="reference" data-abbr="A,"><span></span></sup>'], '']);
65
- assert.deepStrictEqual(inspect(parser('[[^A.]]'), ctx), [['<sup class="reference" data-abbr="A."><span></span></sup>'], '']);
66
- assert.deepStrictEqual(inspect(parser('[[^A.,]]'), ctx), [['<sup class="reference" data-abbr="A.,"><span></span></sup>'], '']);
67
- assert.deepStrictEqual(inspect(parser('[[^A?]]'), ctx), [['<sup class="reference" data-abbr="A?"><span></span></sup>'], '']);
68
- assert.deepStrictEqual(inspect(parser('[[^A?,]]'), ctx), [['<sup class="reference" data-abbr="A?,"><span></span></sup>'], '']);
69
- assert.deepStrictEqual(inspect(parser('[[^A ]]'), ctx), [['<sup class="reference" data-abbr="A"><span></span></sup>'], '']);
70
- assert.deepStrictEqual(inspect(parser('[[^A ]]'), ctx), [['<sup class="invalid"><span>^A</span></sup>'], '']);
71
- assert.deepStrictEqual(inspect(parser('[[^A B]]'), ctx), [['<sup class="reference" data-abbr="A B"><span></span></sup>'], '']);
72
- assert.deepStrictEqual(inspect(parser('[[^A B]]'), ctx), [['<sup class="invalid"><span>^A B</span></sup>'], '']);
73
- assert.deepStrictEqual(inspect(parser('[[^A|]]'), ctx), [['<sup class="reference" data-abbr="A"><span></span></sup>'], '']);
74
- assert.deepStrictEqual(inspect(parser('[[^A,|]]'), ctx), [['<sup class="reference" data-abbr="A,"><span></span></sup>'], '']);
75
- assert.deepStrictEqual(inspect(parser('[[^A |]]'), ctx), [['<sup class="reference" data-abbr="A"><span></span></sup>'], '']);
76
- assert.deepStrictEqual(inspect(parser('[[^A|b]]'), ctx), [['<sup class="reference" data-abbr="A"><span>b</span></sup>'], '']);
77
- assert.deepStrictEqual(inspect(parser('[[^A|b]]'), ctx), [['<sup class="reference" data-abbr="A"><span>b</span></sup>'], '']);
78
- assert.deepStrictEqual(inspect(parser('[[^A|b ]]'), ctx), [['<sup class="reference" data-abbr="A"><span>b</span></sup>'], '']);
79
- assert.deepStrictEqual(inspect(parser('[[^A|b ]]'), ctx), [['<sup class="reference" data-abbr="A"><span>b</span></sup>'], '']);
80
- assert.deepStrictEqual(inspect(parser('[[^A| ]]'), ctx), [['<sup class="reference" data-abbr="A"><span></span></sup>'], '']);
81
- assert.deepStrictEqual(inspect(parser('[[^A| b]]'), ctx), [['<sup class="reference" data-abbr="A"><span>b</span></sup>'], '']);
82
- assert.deepStrictEqual(inspect(parser('[[^A| ]]'), ctx), undefined);
83
- assert.deepStrictEqual(inspect(parser('[[^A|<wbr>]]'), ctx), undefined);
84
- assert.deepStrictEqual(inspect(parser('[[^A|<wbr>b]]'), ctx), [['<sup class="reference" data-abbr="A"><span>b</span></sup>'], '']);
85
- assert.deepStrictEqual(inspect(parser('[[^A|^]]'), ctx), [['<sup class="reference" data-abbr="A"><span>^</span></sup>'], '']);
86
- assert.deepStrictEqual(inspect(parser('[[^A|^B]]'), ctx), [['<sup class="reference" data-abbr="A"><span>^B</span></sup>'], '']);
87
- assert.deepStrictEqual(inspect(parser('[[^1]]'), ctx), [['<sup class="invalid"><span>^1</span></sup>'], '']);
88
- assert.deepStrictEqual(inspect(parser('[[^1A]]'), ctx), [['<sup class="invalid"><span>^1A</span></sup>'], '']);
89
- assert.deepStrictEqual(inspect(parser('[[^1 ]]'), ctx), [['<sup class="invalid"><span>^1</span></sup>'], '']);
90
- assert.deepStrictEqual(inspect(parser('[[^1 A]]'), ctx), [['<sup class="invalid"><span>^1 A</span></sup>'], '']);
91
- assert.deepStrictEqual(inspect(parser('[[^1|]]'), ctx), [['<sup class="invalid"><span>^1|</span></sup>'], '']);
92
- assert.deepStrictEqual(inspect(parser('[[^1 |]]'), ctx), [['<sup class="invalid"><span>^1 |</span></sup>'], '']);
93
- assert.deepStrictEqual(inspect(parser('[[^Abc]]'), ctx), [['<sup class="reference" data-abbr="Abc"><span></span></sup>'], '']);
94
- assert.deepStrictEqual(inspect(parser('[[^A, B]]'), ctx), [['<sup class="reference" data-abbr="A, B"><span></span></sup>'], '']);
95
- assert.deepStrictEqual(inspect(parser(`[[^A's, Aces']]`), ctx), [[`<sup class="reference" data-abbr="A's, Aces'"><span></span></sup>`], '']);
96
- assert.deepStrictEqual(inspect(parser('[[^Xyz 2020]]'), ctx), [['<sup class="reference" data-abbr="Xyz 2020"><span></span></sup>'], '']);
97
- assert.deepStrictEqual(inspect(parser('[[^Xyz 2020, 1]]'), ctx), [['<sup class="reference" data-abbr="Xyz 2020, 1"><span></span></sup>'], '']);
98
- assert.deepStrictEqual(inspect(parser('[[^Xyz 2020, 1, 2]]'), ctx), [['<sup class="reference" data-abbr="Xyz 2020, 1, 2"><span></span></sup>'], '']);
99
- assert.deepStrictEqual(inspect(parser('[[^Xyz 2020, 1, fig. 1]]'), ctx), [['<sup class="reference" data-abbr="Xyz 2020, 1, fig. 1"><span></span></sup>'], '']);
100
- assert.deepStrictEqual(inspect(parser('[[^Xyz 2020, 1, fig. 1.1]]'), ctx), [['<sup class="reference" data-abbr="Xyz 2020, 1, fig. 1.1"><span></span></sup>'], '']);
101
- assert.deepStrictEqual(inspect(parser('[[^Xyz 2020, 1, fig. 1.1-2.1b]]'), ctx), [['<sup class="reference" data-abbr="Xyz 2020, 1, fig. 1.1-2.1b"><span></span></sup>'], '']);
102
- assert.deepStrictEqual(inspect(parser('[[^Xyz 2020, 1, fig. 1.1a-b]]'), ctx), [['<sup class="reference" data-abbr="Xyz 2020, 1, fig. 1.1a-b"><span></span></sup>'], '']);
103
- assert.deepStrictEqual(inspect(parser('[[^Xyz 2020, 1-2]]'), ctx), [['<sup class="reference" data-abbr="Xyz 2020, 1-2"><span></span></sup>'], '']);
104
- assert.deepStrictEqual(inspect(parser('[[^Xyz 2020, 1:1-2]]'), ctx), [['<sup class="reference" data-abbr="Xyz 2020, 1:1-2"><span></span></sup>'], '']);
105
- assert.deepStrictEqual(inspect(parser('[[^Xyz 2020, 1n]]'), ctx), [['<sup class="reference" data-abbr="Xyz 2020, 1n"><span></span></sup>'], '']);
106
- assert.deepStrictEqual(inspect(parser('[[^Xyz 2020, 1n1]]'), ctx), [['<sup class="reference" data-abbr="Xyz 2020, 1n1"><span></span></sup>'], '']);
107
- assert.deepStrictEqual(inspect(parser('[[^Xyz 2020, 1nn1-2]]'), ctx), [['<sup class="reference" data-abbr="Xyz 2020, 1nn1-2"><span></span></sup>'], '']);
108
- assert.deepStrictEqual(inspect(parser('[[^Xyz 2020, i]]'), ctx), [['<sup class="reference" data-abbr="Xyz 2020, i"><span></span></sup>'], '']);
109
- assert.deepStrictEqual(inspect(parser('[[^Xyz 2020, capter 1]]'), ctx), [['<sup class="reference" data-abbr="Xyz 2020, capter 1"><span></span></sup>'], '']);
110
- assert.deepStrictEqual(inspect(parser('[[^Xyz 2020, cap. 1]]'), ctx), [['<sup class="reference" data-abbr="Xyz 2020, cap. 1"><span></span></sup>'], '']);
111
- assert.deepStrictEqual(inspect(parser('[[^Xyz 2020a]]'), ctx), [['<sup class="reference" data-abbr="Xyz 2020a"><span></span></sup>'], '']);
112
- assert.deepStrictEqual(inspect(parser('[[^Xyz 2020a, 1]]'), ctx), [['<sup class="reference" data-abbr="Xyz 2020a, 1"><span></span></sup>'], '']);
113
- assert.deepStrictEqual(inspect(parser('[[^Xyz 2020-2021a]]'), ctx), [['<sup class="reference" data-abbr="Xyz 2020-2021a"><span></span></sup>'], '']);
114
- assert.deepStrictEqual(inspect(parser('[[^Xyz 2020-2021a, 1]]'), ctx), [['<sup class="reference" data-abbr="Xyz 2020-2021a, 1"><span></span></sup>'], '']);
115
- assert.deepStrictEqual(inspect(parser('[[^Xyz, April 1, 2020]]'), ctx), [['<sup class="reference" data-abbr="Xyz, April 1, 2020"><span></span></sup>'], '']);
116
- assert.deepStrictEqual(inspect(parser('[[^Xyz, April 1, 2020, 1]]'), ctx), [['<sup class="reference" data-abbr="Xyz, April 1, 2020, 1"><span></span></sup>'], '']);
117
- assert.deepStrictEqual(inspect(parser('[[^Xyz n.d.]]'), ctx), [['<sup class="reference" data-abbr="Xyz n.d."><span></span></sup>'], '']);
118
- assert.deepStrictEqual(inspect(parser('[[^Xyz n.d., 1]]'), ctx), [['<sup class="reference" data-abbr="Xyz n.d., 1"><span></span></sup>'], '']);
119
- assert.deepStrictEqual(inspect(parser('[[^X. Y., and Z et al. 2020, 1-2]]'), ctx), [['<sup class="reference" data-abbr="X. Y., and Z et al. 2020, 1-2"><span></span></sup>'], '']);
120
- assert.deepStrictEqual(inspect(parser('[[^^]]'), ctx), [['<sup class="invalid"><span>^^</span></sup>'], '']);
121
- assert.deepStrictEqual(inspect(parser('[[\\^]]'), ctx), [['<sup class="reference"><span>^</span></sup>'], '']);
122
- assert.deepStrictEqual(inspect(parser('[[^ ]]'), ctx), [['<sup class="invalid"><span>^</span></sup>'], '']);
123
- assert.deepStrictEqual(inspect(parser('[[^ A]]'), ctx), [['<sup class="invalid"><span>^ A</span></sup>'], '']);
124
- assert.deepStrictEqual(inspect(parser('[[^ |]]'), ctx), [['<sup class="invalid"><span>^ |</span></sup>'], '']);
125
- assert.deepStrictEqual(inspect(parser('[[^ |b]]'), ctx), [['<sup class="invalid"><span>^ |b</span></sup>'], '']);
126
- assert.deepStrictEqual(inspect(parser('[[^ | ]]'), ctx), [['<sup class="invalid"><span>^ |</span></sup>'], '']);
127
- assert.deepStrictEqual(inspect(parser('[[^ | b]]'), ctx), [['<sup class="invalid"><span>^ | b</span></sup>'], '']);
61
+ assert.deepStrictEqual(inspect(parser, input('[[^]]', new Context())), [['<sup class="invalid"><span>^</span></sup>'], '']);
62
+ assert.deepStrictEqual(inspect(parser, input('[[^A]]', new Context())), [['<sup class="reference" data-abbr="A"><span></span></sup>'], '']);
63
+ assert.deepStrictEqual(inspect(parser, input('[[^A,]]', new Context())), [['<sup class="reference" data-abbr="A,"><span></span></sup>'], '']);
64
+ assert.deepStrictEqual(inspect(parser, input('[[^A, ]]', new Context())), [['<sup class="reference" data-abbr="A,"><span></span></sup>'], '']);
65
+ assert.deepStrictEqual(inspect(parser, input('[[^A.]]', new Context())), [['<sup class="reference" data-abbr="A."><span></span></sup>'], '']);
66
+ assert.deepStrictEqual(inspect(parser, input('[[^A.,]]', new Context())), [['<sup class="reference" data-abbr="A.,"><span></span></sup>'], '']);
67
+ assert.deepStrictEqual(inspect(parser, input('[[^A?]]', new Context())), [['<sup class="reference" data-abbr="A?"><span></span></sup>'], '']);
68
+ assert.deepStrictEqual(inspect(parser, input('[[^A?,]]', new Context())), [['<sup class="reference" data-abbr="A?,"><span></span></sup>'], '']);
69
+ assert.deepStrictEqual(inspect(parser, input('[[^A ]]', new Context())), [['<sup class="reference" data-abbr="A"><span></span></sup>'], '']);
70
+ assert.deepStrictEqual(inspect(parser, input('[[^A ]]', new Context())), [['<sup class="invalid"><span>^A</span></sup>'], '']);
71
+ assert.deepStrictEqual(inspect(parser, input('[[^A B]]', new Context())), [['<sup class="reference" data-abbr="A B"><span></span></sup>'], '']);
72
+ assert.deepStrictEqual(inspect(parser, input('[[^A B]]', new Context())), [['<sup class="invalid"><span>^A B</span></sup>'], '']);
73
+ assert.deepStrictEqual(inspect(parser, input('[[^A|]]', new Context())), [['<sup class="reference" data-abbr="A"><span></span></sup>'], '']);
74
+ assert.deepStrictEqual(inspect(parser, input('[[^A,|]]', new Context())), [['<sup class="reference" data-abbr="A,"><span></span></sup>'], '']);
75
+ assert.deepStrictEqual(inspect(parser, input('[[^A |]]', new Context())), [['<sup class="reference" data-abbr="A"><span></span></sup>'], '']);
76
+ assert.deepStrictEqual(inspect(parser, input('[[^A|b]]', new Context())), [['<sup class="reference" data-abbr="A"><span>b</span></sup>'], '']);
77
+ assert.deepStrictEqual(inspect(parser, input('[[^A|b]]', new Context())), [['<sup class="reference" data-abbr="A"><span>b</span></sup>'], '']);
78
+ assert.deepStrictEqual(inspect(parser, input('[[^A|b ]]', new Context())), [['<sup class="reference" data-abbr="A"><span>b</span></sup>'], '']);
79
+ assert.deepStrictEqual(inspect(parser, input('[[^A|b ]]', new Context())), [['<sup class="reference" data-abbr="A"><span>b</span></sup>'], '']);
80
+ assert.deepStrictEqual(inspect(parser, input('[[^A| ]]', new Context())), [['<sup class="reference" data-abbr="A"><span></span></sup>'], '']);
81
+ assert.deepStrictEqual(inspect(parser, input('[[^A| b]]', new Context())), [['<sup class="reference" data-abbr="A"><span>b</span></sup>'], '']);
82
+ assert.deepStrictEqual(inspect(parser, input('[[^A| ]]', new Context())), undefined);
83
+ assert.deepStrictEqual(inspect(parser, input('[[^A|<wbr>]]', new Context())), undefined);
84
+ assert.deepStrictEqual(inspect(parser, input('[[^A|<wbr>b]]', new Context())), [['<sup class="reference" data-abbr="A"><span>b</span></sup>'], '']);
85
+ assert.deepStrictEqual(inspect(parser, input('[[^A|^]]', new Context())), [['<sup class="reference" data-abbr="A"><span>^</span></sup>'], '']);
86
+ assert.deepStrictEqual(inspect(parser, input('[[^A|^B]]', new Context())), [['<sup class="reference" data-abbr="A"><span>^B</span></sup>'], '']);
87
+ assert.deepStrictEqual(inspect(parser, input('[[^1]]', new Context())), [['<sup class="invalid"><span>^1</span></sup>'], '']);
88
+ assert.deepStrictEqual(inspect(parser, input('[[^1A]]', new Context())), [['<sup class="invalid"><span>^1A</span></sup>'], '']);
89
+ assert.deepStrictEqual(inspect(parser, input('[[^1 ]]', new Context())), [['<sup class="invalid"><span>^1</span></sup>'], '']);
90
+ assert.deepStrictEqual(inspect(parser, input('[[^1 A]]', new Context())), [['<sup class="invalid"><span>^1 A</span></sup>'], '']);
91
+ assert.deepStrictEqual(inspect(parser, input('[[^1|]]', new Context())), [['<sup class="invalid"><span>^1|</span></sup>'], '']);
92
+ assert.deepStrictEqual(inspect(parser, input('[[^1 |]]', new Context())), [['<sup class="invalid"><span>^1 |</span></sup>'], '']);
93
+ assert.deepStrictEqual(inspect(parser, input('[[^Abc]]', new Context())), [['<sup class="reference" data-abbr="Abc"><span></span></sup>'], '']);
94
+ assert.deepStrictEqual(inspect(parser, input('[[^A, B]]', new Context())), [['<sup class="reference" data-abbr="A, B"><span></span></sup>'], '']);
95
+ assert.deepStrictEqual(inspect(parser, input(`[[^A's, Aces']]`, new Context())), [[`<sup class="reference" data-abbr="A's, Aces'"><span></span></sup>`], '']);
96
+ assert.deepStrictEqual(inspect(parser, input('[[^Xyz 2020]]', new Context())), [['<sup class="reference" data-abbr="Xyz 2020"><span></span></sup>'], '']);
97
+ assert.deepStrictEqual(inspect(parser, input('[[^Xyz 2020, 1]]', new Context())), [['<sup class="reference" data-abbr="Xyz 2020, 1"><span></span></sup>'], '']);
98
+ assert.deepStrictEqual(inspect(parser, input('[[^Xyz 2020, 1, 2]]', new Context())), [['<sup class="reference" data-abbr="Xyz 2020, 1, 2"><span></span></sup>'], '']);
99
+ assert.deepStrictEqual(inspect(parser, input('[[^Xyz 2020, 1, fig. 1]]', new Context())), [['<sup class="reference" data-abbr="Xyz 2020, 1, fig. 1"><span></span></sup>'], '']);
100
+ assert.deepStrictEqual(inspect(parser, input('[[^Xyz 2020, 1, fig. 1.1]]', new Context())), [['<sup class="reference" data-abbr="Xyz 2020, 1, fig. 1.1"><span></span></sup>'], '']);
101
+ assert.deepStrictEqual(inspect(parser, input('[[^Xyz 2020, 1, fig. 1.1-2.1b]]', new Context())), [['<sup class="reference" data-abbr="Xyz 2020, 1, fig. 1.1-2.1b"><span></span></sup>'], '']);
102
+ assert.deepStrictEqual(inspect(parser, input('[[^Xyz 2020, 1, fig. 1.1a-b]]', new Context())), [['<sup class="reference" data-abbr="Xyz 2020, 1, fig. 1.1a-b"><span></span></sup>'], '']);
103
+ assert.deepStrictEqual(inspect(parser, input('[[^Xyz 2020, 1-2]]', new Context())), [['<sup class="reference" data-abbr="Xyz 2020, 1-2"><span></span></sup>'], '']);
104
+ assert.deepStrictEqual(inspect(parser, input('[[^Xyz 2020, 1:1-2]]', new Context())), [['<sup class="reference" data-abbr="Xyz 2020, 1:1-2"><span></span></sup>'], '']);
105
+ assert.deepStrictEqual(inspect(parser, input('[[^Xyz 2020, 1n]]', new Context())), [['<sup class="reference" data-abbr="Xyz 2020, 1n"><span></span></sup>'], '']);
106
+ assert.deepStrictEqual(inspect(parser, input('[[^Xyz 2020, 1n1]]', new Context())), [['<sup class="reference" data-abbr="Xyz 2020, 1n1"><span></span></sup>'], '']);
107
+ assert.deepStrictEqual(inspect(parser, input('[[^Xyz 2020, 1nn1-2]]', new Context())), [['<sup class="reference" data-abbr="Xyz 2020, 1nn1-2"><span></span></sup>'], '']);
108
+ assert.deepStrictEqual(inspect(parser, input('[[^Xyz 2020, i]]', new Context())), [['<sup class="reference" data-abbr="Xyz 2020, i"><span></span></sup>'], '']);
109
+ assert.deepStrictEqual(inspect(parser, input('[[^Xyz 2020, capter 1]]', new Context())), [['<sup class="reference" data-abbr="Xyz 2020, capter 1"><span></span></sup>'], '']);
110
+ assert.deepStrictEqual(inspect(parser, input('[[^Xyz 2020, cap. 1]]', new Context())), [['<sup class="reference" data-abbr="Xyz 2020, cap. 1"><span></span></sup>'], '']);
111
+ assert.deepStrictEqual(inspect(parser, input('[[^Xyz 2020a]]', new Context())), [['<sup class="reference" data-abbr="Xyz 2020a"><span></span></sup>'], '']);
112
+ assert.deepStrictEqual(inspect(parser, input('[[^Xyz 2020a, 1]]', new Context())), [['<sup class="reference" data-abbr="Xyz 2020a, 1"><span></span></sup>'], '']);
113
+ assert.deepStrictEqual(inspect(parser, input('[[^Xyz 2020-2021a]]', new Context())), [['<sup class="reference" data-abbr="Xyz 2020-2021a"><span></span></sup>'], '']);
114
+ assert.deepStrictEqual(inspect(parser, input('[[^Xyz 2020-2021a, 1]]', new Context())), [['<sup class="reference" data-abbr="Xyz 2020-2021a, 1"><span></span></sup>'], '']);
115
+ assert.deepStrictEqual(inspect(parser, input('[[^Xyz, April 1, 2020]]', new Context())), [['<sup class="reference" data-abbr="Xyz, April 1, 2020"><span></span></sup>'], '']);
116
+ assert.deepStrictEqual(inspect(parser, input('[[^Xyz, April 1, 2020, 1]]', new Context())), [['<sup class="reference" data-abbr="Xyz, April 1, 2020, 1"><span></span></sup>'], '']);
117
+ assert.deepStrictEqual(inspect(parser, input('[[^Xyz n.d.]]', new Context())), [['<sup class="reference" data-abbr="Xyz n.d."><span></span></sup>'], '']);
118
+ assert.deepStrictEqual(inspect(parser, input('[[^Xyz n.d., 1]]', new Context())), [['<sup class="reference" data-abbr="Xyz n.d., 1"><span></span></sup>'], '']);
119
+ assert.deepStrictEqual(inspect(parser, input('[[^X. Y., and Z et al. 2020, 1-2]]', new Context())), [['<sup class="reference" data-abbr="X. Y., and Z et al. 2020, 1-2"><span></span></sup>'], '']);
120
+ assert.deepStrictEqual(inspect(parser, input('[[^^]]', new Context())), [['<sup class="invalid"><span>^^</span></sup>'], '']);
121
+ assert.deepStrictEqual(inspect(parser, input('[[\\^]]', new Context())), [['<sup class="reference"><span>^</span></sup>'], '']);
122
+ assert.deepStrictEqual(inspect(parser, input('[[^ ]]', new Context())), [['<sup class="invalid"><span>^</span></sup>'], '']);
123
+ assert.deepStrictEqual(inspect(parser, input('[[^ A]]', new Context())), [['<sup class="invalid"><span>^ A</span></sup>'], '']);
124
+ assert.deepStrictEqual(inspect(parser, input('[[^ |]]', new Context())), [['<sup class="invalid"><span>^ |</span></sup>'], '']);
125
+ assert.deepStrictEqual(inspect(parser, input('[[^ |b]]', new Context())), [['<sup class="invalid"><span>^ |b</span></sup>'], '']);
126
+ assert.deepStrictEqual(inspect(parser, input('[[^ | ]]', new Context())), [['<sup class="invalid"><span>^ |</span></sup>'], '']);
127
+ assert.deepStrictEqual(inspect(parser, input('[[^ | b]]', new Context())), [['<sup class="invalid"><span>^ | b</span></sup>'], '']);
128
128
  });
129
129
 
130
130
  });
@@ -1,6 +1,6 @@
1
1
  import { ReferenceParser } from '../inline';
2
2
  import { State, Backtrack, Command } from '../context';
3
- import { List, Data } from '../../combinator/data/parser';
3
+ import { List, Node } from '../../combinator/data/parser';
4
4
  import { union, subsequence, some, precedence, state, constraint, surround, isBacktrack, setBacktrack, lazy } from '../../combinator';
5
5
  import { inline } from '../inline';
6
6
  import { textlink } from './link';
@@ -18,75 +18,36 @@ export const reference: ReferenceParser = lazy(() => constraint(State.reference,
18
18
  ]))),
19
19
  ']]',
20
20
  false,
21
- [1 | Backtrack.common, 3 | Backtrack.doublebracket],
21
+ [2, 1 | Backtrack.common, 3 | Backtrack.doublebracket],
22
22
  ([, ns], context) => {
23
- const { position, range = 0, linebreak = 0 } = context;
23
+ const { position, range, linebreak } = context;
24
24
  if (linebreak === 0) {
25
- return new List([new Data(html('sup', attributes(ns), [html('span', defrag(unwrap(trimBlankNodeEnd(ns))))]))]);
25
+ return new List([new Node(html('sup', attributes(ns), [html('span', defrag(unwrap(trimBlankNodeEnd(ns))))]))]);
26
26
  }
27
27
  else {
28
28
  const head = position - range;
29
29
  setBacktrack(context, 2 | Backtrack.link, head, 2);
30
30
  }
31
31
  },
32
- ([as, bs], context) => {
33
- if (!bs) return;
34
- const { source, position, range = 0, linebreak = 0, state = 0 } = context;
32
+ (_, context): undefined => {
33
+ const { source, position, range, linebreak } = context;
35
34
  const head = position - range;
36
35
  if (source[position] !== ']') {
37
36
  setBacktrack(context, 2 | Backtrack.common, head, 2);
38
37
  }
39
38
  else if (linebreak !== 0) {
40
- setBacktrack(context, 2 | Backtrack.link | Backtrack.ruby, head, 2);
39
+ setBacktrack(context, 2 | Backtrack.doublebracket | Backtrack.link | Backtrack.ruby, head, 2);
41
40
  }
42
41
  else {
43
42
  assert(source[position] === ']');
44
- if (state & State.annotation) {
45
- bs.push(new Data(source[position]));
46
- }
47
43
  context.position += 1;
48
- let result: ReturnType<typeof textlink>;
49
- if (source[context.position] !== '{') {
44
+ if (source[context.position] !== '{' ||
45
+ isBacktrack(context, 1 | Backtrack.link) ||
46
+ !textlink({ context })) {
50
47
  setBacktrack(context, 2 | Backtrack.link, head + 1);
51
- result = new List();
52
- }
53
- else {
54
- result = !isBacktrack(context, 1 | Backtrack.link)
55
- ? textlink({ context })
56
- : undefined;
57
- context.range = range;
58
- if (!result) {
59
- setBacktrack(context, 2 | Backtrack.link, head + 1);
60
- result = new List();
61
- }
62
- }
63
- assert(result);
64
- if (context.position === source.length) {
65
- setBacktrack(context, 2 | Backtrack.link, head);
66
- }
67
- else {
68
- assert(state ^ State.link);
69
- const next = surround(
70
- '',
71
- some(inline, ']', [[']', 1]]),
72
- str(']'),
73
- true, [],
74
- ([, cs = new List(), ds]) =>
75
- cs.import(ds),
76
- ([, cs = new List()]) => {
77
- setBacktrack(context, 2 | Backtrack.link, head);
78
- return cs;
79
- })
80
- ({ context });
81
- if (state & State.annotation && next) {
82
- return (as as List<Data<string | HTMLElement>>).import(bs).import(result).import(next);
83
- }
84
48
  }
85
49
  context.position = position;
86
50
  }
87
- return state & State.annotation
88
- ? as.import(bs as List<Data<string>>)
89
- : undefined;
90
51
  })));
91
52
 
92
53
  // Chicago-Style
@@ -96,17 +57,17 @@ const abbr: ReferenceParser.AbbrParser = surround(
96
57
  /\|?(?=]])|\|/y,
97
58
  true, [],
98
59
  ([, ns], context) => {
99
- const { source, position, range = 0 } = context;
100
- if (!ns) return new List([new Data(''), new Data(source.slice(position - range, source[position - 1] === '|' ? position - 1 : position))]);
60
+ const { source, position, range } = context;
61
+ if (!ns) return new List([new Node(''), new Node(source.slice(position - range, source[position - 1] === '|' ? position - 1 : position))]);
101
62
  context.position += source[position] === ' ' ? 1 : 0;
102
- return new List([new Data(Command.Separator), new Data(ns.head!.value.trimEnd())]);
63
+ return new List([new Node(Command.Separator), new Node(ns.head!.value.trimEnd())]);
103
64
  },
104
65
  (_, context) => {
105
- context.position -= context.range!;
106
- return new List([new Data('')]);
66
+ context.position -= context.range;
67
+ return new List([new Node('')]);
107
68
  });
108
69
 
109
- function attributes(ns: List<Data<string | HTMLElement>>): Record<string, string | undefined> {
70
+ function attributes(ns: List<Node<string | HTMLElement>>): Record<string, string | undefined> {
110
71
  switch (ns.head!.value) {
111
72
  case '':
112
73
  return { class: 'invalid', ...invalid('reference', 'syntax', 'Invalid abbreviation') };
@@ -1,65 +1,65 @@
1
1
  import { remark } from './remark';
2
2
  import { some } from '../../combinator';
3
3
  import { input } from '../../combinator/data/parser';
4
+ import { Context } from '../context';
4
5
  import { inspect } from '../../debug.test';
5
6
 
6
7
  describe('Unit: parser/inline/remark', () => {
7
8
  describe('remark', () => {
8
- const parser = (source: string) => some(remark)(input(source, ctx));
9
- const { context: ctx } = input('', {});
9
+ const parser = some(remark);
10
10
 
11
11
  it('invalid', () => {
12
- assert.deepStrictEqual(inspect(parser(''), ctx), undefined);
13
- assert.deepStrictEqual(inspect(parser('<'), ctx), undefined);
14
- assert.deepStrictEqual(inspect(parser('[%'), ctx), undefined);
15
- assert.deepStrictEqual(inspect(parser('[%[%'), ctx), undefined);
16
- assert.deepStrictEqual(inspect(parser('[%a%]'), ctx), undefined);
17
- assert.deepStrictEqual(inspect(parser('[%a b%]'), ctx), undefined);
18
- assert.deepStrictEqual(inspect(parser('[% '), ctx), [['[%'], '']);
19
- assert.deepStrictEqual(inspect(parser('[% \n a'), ctx), [['[%', '<br>', ' a'], '']);
20
- assert.deepStrictEqual(inspect(parser('[%%]'), ctx), undefined);
21
- assert.deepStrictEqual(inspect(parser('[% [%'), ctx), [['[%', ' ', '[', '%'], '']);
22
- assert.deepStrictEqual(inspect(parser('[% [% '), ctx), [['[%', ' ', '[%'], '']);
23
- assert.deepStrictEqual(inspect(parser('[% [% a'), ctx), [['[%', ' ', '[%', ' a'], '']);
24
- assert.deepStrictEqual(inspect(parser('[% [% a %]'), ctx), [['[%', ' ', '<span class="remark"><input type="checkbox"><span>[% a %]</span></span>'], '']);
25
- assert.deepStrictEqual(inspect(parser('[% a[%'), ctx), [['[%', ' a', '[', '%'], '']);
26
- assert.deepStrictEqual(inspect(parser('[% a [%'), ctx), [['[%', ' a ', '[', '%'], '']);
27
- assert.deepStrictEqual(inspect(parser('[% a [% '), ctx), [['[%', ' a ', '[%'], '']);
28
- assert.deepStrictEqual(inspect(parser('[% a [% b'), ctx), [['[%', ' a ', '[%', ' b'], '']);
29
- assert.deepStrictEqual(inspect(parser('[% a [%% b'), ctx), [['[%', ' a ', '<span class="invalid">[%%</span>', ' b'], '']);
30
- assert.deepStrictEqual(inspect(parser('[%% a [% b'), ctx), [['<span class="invalid">[%%</span>'], ' a [% b']);
31
- assert.deepStrictEqual(inspect(parser('[%\\ a %]'), ctx), undefined);
32
- assert.deepStrictEqual(inspect(parser('[% a\\ %]'), ctx), [['[%', ' a', ' ', '%', ']'], '']);
33
- assert.deepStrictEqual(inspect(parser('[% a%]'), ctx), [['[%', ' a', '%', ']'], '']);
34
- assert.deepStrictEqual(inspect(parser('[% a %%]'), ctx), [['[%', ' a %', '%', ']'], '']);
35
- assert.deepStrictEqual(inspect(parser('[% [%% %]'), ctx), [['<span class="remark"><input type="checkbox"><span>[% <span class="invalid">[%%</span> %]</span></span>'], '']);
36
- assert.deepStrictEqual(inspect(parser('[%% [% %%]'), ctx), [['<span class="invalid">[%%</span>'], ' [% %%]']);
37
- assert.deepStrictEqual(inspect(parser('[%% a %]'), ctx), [['<span class="invalid">[%%</span>'], ' a %]']);
38
- assert.deepStrictEqual(inspect(parser(' [% a %]'), ctx), undefined);
12
+ assert.deepStrictEqual(inspect(parser, input('', new Context())), undefined);
13
+ assert.deepStrictEqual(inspect(parser, input('<', new Context())), undefined);
14
+ assert.deepStrictEqual(inspect(parser, input('[%', new Context())), undefined);
15
+ assert.deepStrictEqual(inspect(parser, input('[%[%', new Context())), undefined);
16
+ assert.deepStrictEqual(inspect(parser, input('[%a%]', new Context())), undefined);
17
+ assert.deepStrictEqual(inspect(parser, input('[%a b%]', new Context())), undefined);
18
+ assert.deepStrictEqual(inspect(parser, input('[% ', new Context())), [['[%'], '']);
19
+ assert.deepStrictEqual(inspect(parser, input('[% \n a', new Context())), [['[%', '<br>', ' a'], '']);
20
+ assert.deepStrictEqual(inspect(parser, input('[%%]', new Context())), undefined);
21
+ assert.deepStrictEqual(inspect(parser, input('[% [%', new Context())), [['[%', ' ', '[', '%'], '']);
22
+ assert.deepStrictEqual(inspect(parser, input('[% [% ', new Context())), [['[%', ' ', '[%'], '']);
23
+ assert.deepStrictEqual(inspect(parser, input('[% [% a', new Context())), [['[%', ' ', '[%', ' a'], '']);
24
+ assert.deepStrictEqual(inspect(parser, input('[% [% a %]', new Context())), [['[%', ' ', '<span class="remark"><input type="checkbox"><span>[% a %]</span></span>'], '']);
25
+ assert.deepStrictEqual(inspect(parser, input('[% a[%', new Context())), [['[%', ' a', '[', '%'], '']);
26
+ assert.deepStrictEqual(inspect(parser, input('[% a [%', new Context())), [['[%', ' a ', '[', '%'], '']);
27
+ assert.deepStrictEqual(inspect(parser, input('[% a [% ', new Context())), [['[%', ' a ', '[%'], '']);
28
+ assert.deepStrictEqual(inspect(parser, input('[% a [% b', new Context())), [['[%', ' a ', '[%', ' b'], '']);
29
+ assert.deepStrictEqual(inspect(parser, input('[% a [%% b', new Context())), [['[%', ' a ', '<span class="invalid">[%%</span>', ' b'], '']);
30
+ assert.deepStrictEqual(inspect(parser, input('[%% a [% b', new Context())), [['<span class="invalid">[%%</span>'], ' a [% b']);
31
+ assert.deepStrictEqual(inspect(parser, input('[%\\ a %]', new Context())), undefined);
32
+ assert.deepStrictEqual(inspect(parser, input('[% a\\ %]', new Context())), [['[%', ' a', ' ', '%', ']'], '']);
33
+ assert.deepStrictEqual(inspect(parser, input('[% a%]', new Context())), [['[%', ' a', '%', ']'], '']);
34
+ assert.deepStrictEqual(inspect(parser, input('[% a %%]', new Context())), [['[%', ' a %', '%', ']'], '']);
35
+ assert.deepStrictEqual(inspect(parser, input('[% [%% %]', new Context())), [['<span class="remark"><input type="checkbox"><span>[% <span class="invalid">[%%</span> %]</span></span>'], '']);
36
+ assert.deepStrictEqual(inspect(parser, input('[%% [% %%]', new Context())), [['<span class="invalid">[%%</span>'], ' [% %%]']);
37
+ assert.deepStrictEqual(inspect(parser, input('[%% a %]', new Context())), [['<span class="invalid">[%%</span>'], ' a %]']);
38
+ assert.deepStrictEqual(inspect(parser, input(' [% a %]', new Context())), undefined);
39
39
  });
40
40
 
41
41
  it('basic', () => {
42
- assert.deepStrictEqual(inspect(parser('[% %]'), ctx), [['<span class="remark"><input type="checkbox"><span>[% %]</span></span>'], '']);
43
- assert.deepStrictEqual(inspect(parser('[% %]'), ctx), [['<span class="remark"><input type="checkbox"><span>[% %]</span></span>'], '']);
44
- assert.deepStrictEqual(inspect(parser('[% %]'), ctx), [['<span class="remark"><input type="checkbox"><span>[% %]</span></span>'], '']);
45
- assert.deepStrictEqual(inspect(parser('[% a %]'), ctx), [['<span class="remark"><input type="checkbox"><span>[% a %]</span></span>'], '']);
46
- assert.deepStrictEqual(inspect(parser('[% - %]'), ctx), [['<span class="remark"><input type="checkbox"><span>[% - %]</span></span>'], '']);
47
- assert.deepStrictEqual(inspect(parser('[% a %]'), ctx), [['<span class="remark"><input type="checkbox"><span>[% a %]</span></span>'], '']);
48
- assert.deepStrictEqual(inspect(parser('[% - %]'), ctx), [['<span class="remark"><input type="checkbox"><span>[% - %]</span></span>'], '']);
49
- assert.deepStrictEqual(inspect(parser('[% a b %]'), ctx), [['<span class="remark"><input type="checkbox"><span>[% a b %]</span></span>'], '']);
50
- assert.deepStrictEqual(inspect(parser('[% a\nb %]'), ctx), [['<span class="remark"><input type="checkbox"><span>[% a<br>b %]</span></span>'], '']);
51
- assert.deepStrictEqual(inspect(parser('[% a %] %]'), ctx), [['<span class="remark"><input type="checkbox"><span>[% a %]</span></span>'], ' %]']);
52
- assert.deepStrictEqual(inspect(parser('[% %%] %]'), ctx), [['<span class="remark"><input type="checkbox"><span>[% %%] %]</span></span>'], '']);
53
- assert.deepStrictEqual(inspect(parser('[% [% a %] %]'), ctx), [['<span class="remark"><input type="checkbox"><span>[% <span class="remark"><input type="checkbox"><span>[% a %]</span></span> %]</span></span>'], '']);
54
- assert.deepStrictEqual(inspect(parser('[% a %]b'), ctx), [['<span class="remark"><input type="checkbox"><span>[% a %]</span></span>'], 'b']);
55
- assert.deepStrictEqual(inspect(parser('[%\na\n%]'), ctx), [['<span class="remark"><input type="checkbox"><span>[%<br>a<br>%]</span></span>'], '']);
56
- assert.deepStrictEqual(inspect(parser('[% &a; %]'), ctx), [['<span class="remark"><input type="checkbox"><span>[% <span class="invalid">&amp;a;</span> %]</span></span>'], '']);
57
- assert.deepStrictEqual(inspect(parser('[% &copy; %]'), ctx), [['<span class="remark"><input type="checkbox"><span>[% © %]</span></span>'], '']);
58
- assert.deepStrictEqual(inspect(parser('[% &amp;copy; %]'), ctx), [['<span class="remark"><input type="checkbox"><span>[% &amp;copy; %]</span></span>'], '']);
59
- assert.deepStrictEqual(inspect(parser('[% [ %]'), ctx), [['<span class="remark"><input type="checkbox"><span>[% [ %]</span></span>'], '']);
60
- assert.deepStrictEqual(inspect(parser('[% \\ a %]'), ctx), [['<span class="remark"><input type="checkbox"><span>[% a %]</span></span>'], '']);
61
- assert.deepStrictEqual(inspect(parser('[% $-a %]$'), ctx), [['<span class="remark"><input type="checkbox"><span>[% <a class="label" data-label="$-a">$-a</a> %]</span></span>'], '$']);
62
- assert.deepStrictEqual(inspect(parser('[% <bdi> %]'), ctx), [['<span class="remark"><input type="checkbox"><span>[% <span class="invalid">&lt;bdi&gt;</span> %]</span></span>'], '']);
42
+ assert.deepStrictEqual(inspect(parser, input('[% %]', new Context())), [['<span class="remark"><input type="checkbox"><span>[% %]</span></span>'], '']);
43
+ assert.deepStrictEqual(inspect(parser, input('[% %]', new Context())), [['<span class="remark"><input type="checkbox"><span>[% %]</span></span>'], '']);
44
+ assert.deepStrictEqual(inspect(parser, input('[% %]', new Context())), [['<span class="remark"><input type="checkbox"><span>[% %]</span></span>'], '']);
45
+ assert.deepStrictEqual(inspect(parser, input('[% a %]', new Context())), [['<span class="remark"><input type="checkbox"><span>[% a %]</span></span>'], '']);
46
+ assert.deepStrictEqual(inspect(parser, input('[% - %]', new Context())), [['<span class="remark"><input type="checkbox"><span>[% - %]</span></span>'], '']);
47
+ assert.deepStrictEqual(inspect(parser, input('[% a %]', new Context())), [['<span class="remark"><input type="checkbox"><span>[% a %]</span></span>'], '']);
48
+ assert.deepStrictEqual(inspect(parser, input('[% - %]', new Context())), [['<span class="remark"><input type="checkbox"><span>[% - %]</span></span>'], '']);
49
+ assert.deepStrictEqual(inspect(parser, input('[% a b %]', new Context())), [['<span class="remark"><input type="checkbox"><span>[% a b %]</span></span>'], '']);
50
+ assert.deepStrictEqual(inspect(parser, input('[% a\nb %]', new Context())), [['<span class="remark"><input type="checkbox"><span>[% a<br>b %]</span></span>'], '']);
51
+ assert.deepStrictEqual(inspect(parser, input('[% a %] %]', new Context())), [['<span class="remark"><input type="checkbox"><span>[% a %]</span></span>'], ' %]']);
52
+ assert.deepStrictEqual(inspect(parser, input('[% %%] %]', new Context())), [['<span class="remark"><input type="checkbox"><span>[% %%] %]</span></span>'], '']);
53
+ assert.deepStrictEqual(inspect(parser, input('[% [% a %] %]', new Context())), [['<span class="remark"><input type="checkbox"><span>[% <span class="remark"><input type="checkbox"><span>[% a %]</span></span> %]</span></span>'], '']);
54
+ assert.deepStrictEqual(inspect(parser, input('[% a %]b', new Context())), [['<span class="remark"><input type="checkbox"><span>[% a %]</span></span>'], 'b']);
55
+ assert.deepStrictEqual(inspect(parser, input('[%\na\n%]', new Context())), [['<span class="remark"><input type="checkbox"><span>[%<br>a<br>%]</span></span>'], '']);
56
+ assert.deepStrictEqual(inspect(parser, input('[% &a; %]', new Context())), [['<span class="remark"><input type="checkbox"><span>[% <span class="invalid">&amp;a;</span> %]</span></span>'], '']);
57
+ assert.deepStrictEqual(inspect(parser, input('[% &copy; %]', new Context())), [['<span class="remark"><input type="checkbox"><span>[% © %]</span></span>'], '']);
58
+ assert.deepStrictEqual(inspect(parser, input('[% &amp;copy; %]', new Context())), [['<span class="remark"><input type="checkbox"><span>[% &amp;copy; %]</span></span>'], '']);
59
+ assert.deepStrictEqual(inspect(parser, input('[% [ %]', new Context())), [['<span class="remark"><input type="checkbox"><span>[% [ %]</span></span>'], '']);
60
+ assert.deepStrictEqual(inspect(parser, input('[% \\ a %]', new Context())), [['<span class="remark"><input type="checkbox"><span>[% a %]</span></span>'], '']);
61
+ assert.deepStrictEqual(inspect(parser, input('[% $-a %]$', new Context())), [['<span class="remark"><input type="checkbox"><span>[% <a class="label" data-label="$-a">$-a</a> %]</span></span>'], '$']);
62
+ assert.deepStrictEqual(inspect(parser, input('[% <bdi> %]', new Context())), [['<span class="remark"><input type="checkbox"><span>[% <span class="invalid">&lt;bdi&gt;</span> %]</span></span>'], '']);
63
63
  });
64
64
 
65
65
  });
@@ -1,6 +1,6 @@
1
1
  import { RemarkParser } from '../inline';
2
2
  import { Recursion } from '../context';
3
- import { List, Data } from '../../combinator/data/parser';
3
+ import { List, Node } from '../../combinator/data/parser';
4
4
  import { union, some, recursion, precedence, focus, surround, close, fallback, lazy } from '../../combinator';
5
5
  import { inline } from '../inline';
6
6
  import { text, str } from '../source';
@@ -14,12 +14,12 @@ export const remark: RemarkParser = lazy(() => fallback(surround(
14
14
  close(text, str(`%]`)),
15
15
  true, [],
16
16
  ([as, bs = new List(), cs]) => new List([
17
- new Data(html('span', { class: 'remark' }, [
17
+ new Node(html('span', { class: 'remark' }, [
18
18
  html('input', { type: 'checkbox' }),
19
- html('span', defrag(unwrap(as.import(bs as List<Data<string>>).import(cs)))),
19
+ html('span', defrag(unwrap(as.import(bs as List<Node<string>>).import(cs)))),
20
20
  ])),
21
21
  ]),
22
- ([as, bs]) => bs && as.import(bs as List<Data<string>>)),
22
+ ([as, bs]) => bs && as.import(bs as List<Node<string>>)),
23
23
  focus(/\[%+(?=[ \n])/y, ({ context: { source } }) => new List([
24
- new Data(html('span', { class: 'invalid', ...invalid('remark', 'syntax', 'Invalid start symbol') }, source))
24
+ new Node(html('span', { class: 'invalid', ...invalid('remark', 'syntax', 'Invalid start symbol') }, source))
25
25
  ]))));