securemark 0.299.3 → 0.300.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 (241) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/design.md +0 -6
  3. package/dist/index.js +3479 -2750
  4. package/index.d.ts +2 -1
  5. package/index.ts +2 -2
  6. package/markdown.d.ts +209 -183
  7. package/package.json +1 -1
  8. package/src/{parser/api → api}/bind.test.ts +2 -24
  9. package/src/{parser/api → api}/bind.ts +18 -13
  10. package/src/{parser/api → api}/body.test.ts +1 -1
  11. package/src/{parser/api → api}/cache.ts +1 -1
  12. package/src/{parser/api → api}/header.test.ts +1 -1
  13. package/src/{parser/api → api}/header.ts +9 -6
  14. package/src/{parser/api → api}/normalize.test.ts +1 -1
  15. package/src/{parser/api → api}/parse.test.ts +120 -124
  16. package/src/api/parse.ts +30 -0
  17. package/src/api/run.ts +6 -0
  18. package/src/{parser/api.ts → api.ts} +1 -0
  19. package/src/combinator/control/inits.ts +26 -0
  20. package/src/combinator/control/sequence.test.ts +38 -0
  21. package/src/combinator/control/sequence.ts +17 -0
  22. package/src/combinator/control/some.test.ts +41 -0
  23. package/src/combinator/{data/parser → control}/some.ts +39 -26
  24. package/src/combinator/control/state.ts +42 -0
  25. package/src/combinator/control/subsequence.test.ts +47 -0
  26. package/src/combinator/control/subsequence.ts +16 -0
  27. package/src/combinator/control/tails.ts +8 -0
  28. package/src/combinator/control/union.test.ts +37 -0
  29. package/src/combinator/control/union.ts +18 -0
  30. package/src/combinator/{data/delimiter.ts → delimiter.ts} +40 -60
  31. package/src/combinator/effect/backtrack.ts +64 -0
  32. package/src/combinator/effect/clock.ts +10 -0
  33. package/src/combinator/effect/precedence.ts +50 -0
  34. package/src/combinator/effect/recursion.ts +30 -0
  35. package/src/combinator/effect/scope.ts +100 -0
  36. package/src/combinator/effect/state.ts +72 -0
  37. package/src/combinator/{data/node.ts → parser/list.ts} +38 -13
  38. package/src/combinator/parser.ts +293 -0
  39. package/src/combinator/process/bind.ts +34 -0
  40. package/src/combinator/process/block.test.ts +20 -0
  41. package/src/combinator/process/block.ts +33 -0
  42. package/src/combinator/process/clear.ts +16 -0
  43. package/src/combinator/process/contract.ts +35 -0
  44. package/src/combinator/process/duplicate.ts +7 -0
  45. package/src/combinator/process/error.ts +13 -0
  46. package/src/combinator/{control/manipulation → process}/fallback.ts +3 -3
  47. package/src/combinator/process/fence.ts +59 -0
  48. package/src/combinator/process/fmap.ts +10 -0
  49. package/src/combinator/process/indent.test.ts +31 -0
  50. package/src/combinator/process/indent.ts +51 -0
  51. package/src/combinator/process/lazy.ts +8 -0
  52. package/src/combinator/process/line.test.ts +21 -0
  53. package/src/combinator/process/line.ts +55 -0
  54. package/src/combinator/process/match.ts +37 -0
  55. package/src/combinator/process/reverse.ts +7 -0
  56. package/src/combinator/process/scope.ts +102 -0
  57. package/src/combinator/process/surround.ts +271 -0
  58. package/src/combinator.ts +28 -24
  59. package/src/debug.test.ts +11 -8
  60. package/src/parser/autolink.test.ts +17 -18
  61. package/src/parser/block/blockquote.test.ts +78 -79
  62. package/src/parser/block/blockquote.ts +32 -25
  63. package/src/parser/block/codeblock.test.ts +56 -57
  64. package/src/parser/block/codeblock.ts +44 -26
  65. package/src/parser/block/dlist.test.ts +56 -57
  66. package/src/parser/block/dlist.ts +5 -5
  67. package/src/parser/block/extension/aside.test.ts +8 -9
  68. package/src/parser/block/extension/aside.ts +76 -47
  69. package/src/parser/block/extension/example.test.ts +18 -19
  70. package/src/parser/block/extension/example.ts +88 -48
  71. package/src/parser/block/extension/fig.test.ts +37 -36
  72. package/src/parser/block/extension/fig.ts +20 -25
  73. package/src/parser/block/extension/figbase.test.ts +18 -19
  74. package/src/parser/block/extension/figbase.ts +3 -3
  75. package/src/parser/block/extension/figure.test.ts +62 -63
  76. package/src/parser/block/extension/figure.ts +23 -21
  77. package/src/parser/block/extension/message.test.ts +13 -14
  78. package/src/parser/block/extension/message.ts +52 -39
  79. package/src/parser/block/extension/placeholder.test.ts +13 -13
  80. package/src/parser/block/extension/placeholder.ts +23 -21
  81. package/src/parser/block/extension/table.test.ts +70 -71
  82. package/src/parser/block/extension/table.ts +43 -31
  83. package/src/parser/block/extension.test.ts +24 -24
  84. package/src/parser/block/extension.ts +3 -3
  85. package/src/parser/block/heading.test.ts +58 -59
  86. package/src/parser/block/heading.ts +19 -18
  87. package/src/parser/block/ilist.test.ts +8 -8
  88. package/src/parser/block/ilist.ts +9 -7
  89. package/src/parser/block/mathblock.test.ts +31 -32
  90. package/src/parser/block/mathblock.ts +24 -23
  91. package/src/parser/block/mediablock.ts +7 -7
  92. package/src/parser/block/olist.test.ts +102 -103
  93. package/src/parser/block/olist.ts +11 -12
  94. package/src/parser/block/pagebreak.test.ts +15 -16
  95. package/src/parser/block/pagebreak.ts +5 -5
  96. package/src/parser/block/paragraph.test.ts +57 -58
  97. package/src/parser/block/paragraph.ts +1 -1
  98. package/src/parser/block/reply/cite.test.ts +39 -40
  99. package/src/parser/block/reply/cite.ts +5 -5
  100. package/src/parser/block/reply/quote.test.ts +50 -51
  101. package/src/parser/block/reply/quote.ts +8 -7
  102. package/src/parser/block/reply.test.ts +19 -20
  103. package/src/parser/block/reply.ts +2 -2
  104. package/src/parser/block/sidefence.test.ts +41 -48
  105. package/src/parser/block/sidefence.ts +17 -11
  106. package/src/parser/block/table.test.ts +48 -49
  107. package/src/parser/block/table.ts +10 -9
  108. package/src/parser/block/ulist.test.ts +52 -53
  109. package/src/parser/block/ulist.ts +9 -8
  110. package/src/parser/block.ts +63 -51
  111. package/src/parser/context.ts +35 -32
  112. package/src/parser/document.ts +48 -0
  113. package/src/parser/header.test.ts +19 -20
  114. package/src/parser/header.ts +31 -25
  115. package/src/parser/inline/annotation.test.ts +49 -50
  116. package/src/parser/inline/annotation.ts +14 -16
  117. package/src/parser/inline/autolink/account.test.ts +32 -33
  118. package/src/parser/inline/autolink/account.ts +18 -19
  119. package/src/parser/inline/autolink/anchor.test.ts +21 -22
  120. package/src/parser/inline/autolink/anchor.ts +7 -8
  121. package/src/parser/inline/autolink/channel.test.ts +14 -15
  122. package/src/parser/inline/autolink/email.test.ts +36 -37
  123. package/src/parser/inline/autolink/email.ts +6 -6
  124. package/src/parser/inline/autolink/hashnum.test.ts +32 -33
  125. package/src/parser/inline/autolink/hashnum.ts +7 -8
  126. package/src/parser/inline/autolink/hashtag.test.ts +59 -60
  127. package/src/parser/inline/autolink/hashtag.ts +8 -9
  128. package/src/parser/inline/autolink/url.test.ts +75 -76
  129. package/src/parser/inline/autolink/url.ts +13 -14
  130. package/src/parser/inline/autolink.ts +24 -11
  131. package/src/parser/inline/bracket.test.ts +73 -74
  132. package/src/parser/inline/bracket.ts +88 -63
  133. package/src/parser/inline/code.test.ts +30 -31
  134. package/src/parser/inline/code.ts +6 -6
  135. package/src/parser/inline/deletion.test.ts +27 -28
  136. package/src/parser/inline/deletion.ts +5 -5
  137. package/src/parser/inline/emphasis.test.ts +39 -40
  138. package/src/parser/inline/emphasis.ts +5 -5
  139. package/src/parser/inline/emstrong.test.ts +101 -102
  140. package/src/parser/inline/emstrong.ts +103 -85
  141. package/src/parser/inline/extension/index.test.ts +91 -92
  142. package/src/parser/inline/extension/index.ts +17 -13
  143. package/src/parser/inline/extension/indexee.ts +4 -4
  144. package/src/parser/inline/extension/indexer.test.ts +23 -24
  145. package/src/parser/inline/extension/indexer.ts +6 -5
  146. package/src/parser/inline/extension/label.test.ts +32 -33
  147. package/src/parser/inline/extension/label.ts +14 -5
  148. package/src/parser/inline/extension/placeholder.test.ts +42 -43
  149. package/src/parser/inline/extension/placeholder.ts +8 -9
  150. package/src/parser/inline/html.test.ts +109 -109
  151. package/src/parser/inline/html.ts +27 -27
  152. package/src/parser/inline/htmlentity.test.ts +37 -38
  153. package/src/parser/inline/htmlentity.ts +6 -7
  154. package/src/parser/inline/insertion.test.ts +27 -28
  155. package/src/parser/inline/insertion.ts +5 -5
  156. package/src/parser/inline/italic.test.ts +55 -56
  157. package/src/parser/inline/italic.ts +5 -5
  158. package/src/parser/inline/link.test.ts +186 -187
  159. package/src/parser/inline/link.ts +31 -32
  160. package/src/parser/inline/mark.test.ts +31 -32
  161. package/src/parser/inline/mark.ts +6 -6
  162. package/src/parser/inline/math.test.ts +140 -141
  163. package/src/parser/inline/math.ts +6 -7
  164. package/src/parser/inline/media.test.ts +92 -93
  165. package/src/parser/inline/media.ts +32 -38
  166. package/src/parser/inline/reference.test.ts +111 -112
  167. package/src/parser/inline/reference.ts +61 -32
  168. package/src/parser/inline/remark.test.ts +49 -50
  169. package/src/parser/inline/remark.ts +13 -13
  170. package/src/parser/inline/ruby.test.ts +49 -50
  171. package/src/parser/inline/ruby.ts +60 -49
  172. package/src/parser/inline/shortmedia.test.ts +9 -10
  173. package/src/parser/inline/shortmedia.ts +11 -9
  174. package/src/parser/inline/strong.test.ts +36 -37
  175. package/src/parser/inline/strong.ts +5 -5
  176. package/src/parser/inline/template.test.ts +22 -23
  177. package/src/parser/inline/template.ts +13 -16
  178. package/src/parser/inline.test.ts +225 -226
  179. package/src/parser/inline.ts +68 -34
  180. package/src/parser/node.ts +1 -1
  181. package/src/parser/parser.ts +51 -0
  182. package/src/parser/repeat.ts +118 -91
  183. package/src/parser/segment.test.ts +0 -11
  184. package/src/parser/segment.ts +25 -28
  185. package/src/parser/source/escapable.test.ts +23 -24
  186. package/src/parser/source/escapable.ts +20 -20
  187. package/src/parser/source/line.test.ts +17 -18
  188. package/src/parser/source/line.ts +19 -24
  189. package/src/parser/source/str.ts +17 -10
  190. package/src/parser/source/text.test.ts +88 -89
  191. package/src/parser/source/text.ts +19 -20
  192. package/src/parser/source/unescapable.test.ts +23 -24
  193. package/src/parser/source/unescapable.ts +16 -16
  194. package/src/parser/util.ts +1 -1
  195. package/src/parser/visibility.ts +36 -15
  196. package/src/{parser/processor → processor}/figure.test.ts +23 -23
  197. package/src/{parser/processor → processor}/figure.ts +20 -12
  198. package/src/{parser/processor → processor}/note.test.ts +15 -15
  199. package/src/{parser/processor → processor}/note.ts +6 -4
  200. package/src/renderer/render/media/pdf.ts +2 -2
  201. package/src/renderer/render/media/twitter.ts +2 -2
  202. package/src/renderer/render/media.test.ts +12 -13
  203. package/src/renderer/render.test.ts +11 -11
  204. package/src/util/info.test.ts +2 -2
  205. package/src/util/quote.test.ts +3 -3
  206. package/src/util/quote.ts +6 -5
  207. package/src/util/toc.test.ts +12 -12
  208. package/src/combinator/control/constraint/block.test.ts +0 -20
  209. package/src/combinator/control/constraint/block.ts +0 -28
  210. package/src/combinator/control/constraint/contract.ts +0 -27
  211. package/src/combinator/control/constraint/line.test.ts +0 -21
  212. package/src/combinator/control/constraint/line.ts +0 -42
  213. package/src/combinator/control/manipulation/clear.ts +0 -5
  214. package/src/combinator/control/manipulation/convert.ts +0 -22
  215. package/src/combinator/control/manipulation/duplicate.ts +0 -7
  216. package/src/combinator/control/manipulation/fence.ts +0 -54
  217. package/src/combinator/control/manipulation/indent.test.ts +0 -31
  218. package/src/combinator/control/manipulation/indent.ts +0 -39
  219. package/src/combinator/control/manipulation/lazy.ts +0 -8
  220. package/src/combinator/control/manipulation/match.ts +0 -27
  221. package/src/combinator/control/manipulation/recovery.ts +0 -18
  222. package/src/combinator/control/manipulation/reverse.ts +0 -8
  223. package/src/combinator/control/manipulation/scope.ts +0 -61
  224. package/src/combinator/control/manipulation/surround.ts +0 -223
  225. package/src/combinator/control/monad/bind.ts +0 -26
  226. package/src/combinator/control/monad/fmap.ts +0 -10
  227. package/src/combinator/data/parser/context.ts +0 -96
  228. package/src/combinator/data/parser/inits.ts +0 -20
  229. package/src/combinator/data/parser/sequence.test.ts +0 -33
  230. package/src/combinator/data/parser/sequence.ts +0 -20
  231. package/src/combinator/data/parser/some.test.ts +0 -37
  232. package/src/combinator/data/parser/subsequence.test.ts +0 -41
  233. package/src/combinator/data/parser/subsequence.ts +0 -13
  234. package/src/combinator/data/parser/tails.ts +0 -8
  235. package/src/combinator/data/parser/union.test.ts +0 -33
  236. package/src/combinator/data/parser/union.ts +0 -18
  237. package/src/combinator/data/parser.ts +0 -144
  238. package/src/parser/api/parse.ts +0 -48
  239. package/src/parser.ts +0 -1
  240. /package/src/{parser/api → api}/body.ts +0 -0
  241. /package/src/{parser/api → api}/normalize.ts +0 -0
@@ -1,7 +1,6 @@
1
1
  import { reference } from './reference';
2
2
  import { some } from '../../combinator';
3
- import { input } from '../../combinator/data/parser';
4
- import { Context } from '../context';
3
+ import { input } from '../context';
5
4
  import { inspect } from '../../debug.test';
6
5
 
7
6
  describe('Unit: parser/inline/reference', () => {
@@ -9,125 +8,125 @@ describe('Unit: parser/inline/reference', () => {
9
8
  const parser = some(reference);
10
9
 
11
10
  it('invalid', () => {
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('[[a', new Context())), undefined);
19
- assert.deepStrictEqual(inspect(parser, input('[[a]', new Context())), undefined);
20
- assert.deepStrictEqual(inspect(parser, input('[[a]b]', new Context())), undefined);
21
- assert.deepStrictEqual(inspect(parser, input('[["]]', new Context())), undefined);
22
- assert.deepStrictEqual(inspect(parser, input('[[(]]', new Context())), undefined);
23
- assert.deepStrictEqual(inspect(parser, input('[[[%]]', new Context())), undefined);
24
- assert.deepStrictEqual(inspect(parser, input('[[ ]]', new Context())), undefined);
25
- assert.deepStrictEqual(inspect(parser, input('[[ a]]', new Context())), undefined);
26
- assert.deepStrictEqual(inspect(parser, input('[[ a ]]', new Context())), undefined);
27
- assert.deepStrictEqual(inspect(parser, input('[[\\ a]]', new Context())), undefined);
28
- assert.deepStrictEqual(inspect(parser, input('[[<wbr>a]]', new Context())), undefined);
29
- assert.deepStrictEqual(inspect(parser, input('[[\n]]', new Context())), undefined);
30
- assert.deepStrictEqual(inspect(parser, input('[[\na]]', new Context())), undefined);
31
- assert.deepStrictEqual(inspect(parser, input('[[\\\na]]', new Context())), undefined);
32
- assert.deepStrictEqual(inspect(parser, input('[[a\n]]', new Context())), undefined);
33
- assert.deepStrictEqual(inspect(parser, input('[[a\\\n]]', new Context())), undefined);
34
- assert.deepStrictEqual(inspect(parser, input('[[a\nb]]', new Context())), undefined);
35
- assert.deepStrictEqual(inspect(parser, input('[[a\\\nb]]', new Context())), undefined);
36
- assert.deepStrictEqual(inspect(parser, input('[[*a\nb*]]', new Context())), undefined);
37
- assert.deepStrictEqual(inspect(parser, input('[[\\]]', new Context())), undefined);
38
- assert.deepStrictEqual(inspect(parser, input('[[a]b]]', new Context())), undefined);
39
- assert.deepStrictEqual(inspect(parser, input('[[[a]]', new Context())), undefined);
40
- assert.deepStrictEqual(inspect(parser, input(' [[a]]', new Context())), undefined);
11
+ assert.deepStrictEqual(inspect(parser, input('')), undefined);
12
+ assert.deepStrictEqual(inspect(parser, input('[')), undefined);
13
+ assert.deepStrictEqual(inspect(parser, input('[]')), undefined);
14
+ assert.deepStrictEqual(inspect(parser, input('[[')), undefined);
15
+ assert.deepStrictEqual(inspect(parser, input('[[]]')), undefined);
16
+ assert.deepStrictEqual(inspect(parser, input('[[]]]')), undefined);
17
+ assert.deepStrictEqual(inspect(parser, input('[[a')), undefined);
18
+ assert.deepStrictEqual(inspect(parser, input('[[a]')), undefined);
19
+ assert.deepStrictEqual(inspect(parser, input('[[a]b]')), undefined);
20
+ assert.deepStrictEqual(inspect(parser, input('[["]]')), undefined);
21
+ assert.deepStrictEqual(inspect(parser, input('[[(]]')), undefined);
22
+ assert.deepStrictEqual(inspect(parser, input('[[[%]]')), undefined);
23
+ assert.deepStrictEqual(inspect(parser, input('[[ ]]')), undefined);
24
+ assert.deepStrictEqual(inspect(parser, input('[[ a]]')), undefined);
25
+ assert.deepStrictEqual(inspect(parser, input('[[ a ]]')), undefined);
26
+ assert.deepStrictEqual(inspect(parser, input('[[\\ a]]')), undefined);
27
+ assert.deepStrictEqual(inspect(parser, input('[[<wbr>a]]')), undefined);
28
+ assert.deepStrictEqual(inspect(parser, input('[[\n]]')), undefined);
29
+ assert.deepStrictEqual(inspect(parser, input('[[\na]]')), undefined);
30
+ assert.deepStrictEqual(inspect(parser, input('[[\\\na]]')), undefined);
31
+ assert.deepStrictEqual(inspect(parser, input('[[a\n]]')), undefined);
32
+ assert.deepStrictEqual(inspect(parser, input('[[a\\\n]]')), undefined);
33
+ assert.deepStrictEqual(inspect(parser, input('[[a\nb]]')), undefined);
34
+ assert.deepStrictEqual(inspect(parser, input('[[a\\\nb]]')), undefined);
35
+ assert.deepStrictEqual(inspect(parser, input('[[*a\nb*]]')), undefined);
36
+ assert.deepStrictEqual(inspect(parser, input('[[\\]]')), undefined);
37
+ assert.deepStrictEqual(inspect(parser, input('[[a]b]]')), undefined);
38
+ assert.deepStrictEqual(inspect(parser, input('[[[a]]')), undefined);
39
+ assert.deepStrictEqual(inspect(parser, input(' [[a]]')), undefined);
41
40
  });
42
41
 
43
42
  it('basic', () => {
44
- assert.deepStrictEqual(inspect(parser, input('[[a]]', new Context())), [['<sup class="reference"><span>a</span></sup>'], '']);
45
- assert.deepStrictEqual(inspect(parser, input('[[a ]]', new Context())), [['<sup class="reference"><span>a</span></sup>'], '']);
46
- assert.deepStrictEqual(inspect(parser, input('[[a ]]', new Context())), [['<sup class="reference"><span>a</span></sup>'], '']);
47
- assert.deepStrictEqual(inspect(parser, input('[[a &nbsp;]]', new Context())), [['<sup class="reference"><span>a</span></sup>'], '']);
48
- assert.deepStrictEqual(inspect(parser, input('[[a <wbr>]]', new Context())), [['<sup class="reference"><span>a</span></sup>'], '']);
49
- assert.deepStrictEqual(inspect(parser, input('[[ab]]', new Context())), [['<sup class="reference"><span>ab</span></sup>'], '']);
43
+ assert.deepStrictEqual(inspect(parser, input('[[a]]')), [['<sup class="reference"><span>a</span></sup>'], '']);
44
+ assert.deepStrictEqual(inspect(parser, input('[[a ]]')), [['<sup class="reference"><span>a</span></sup>'], '']);
45
+ assert.deepStrictEqual(inspect(parser, input('[[a ]]')), [['<sup class="reference"><span>a</span></sup>'], '']);
46
+ assert.deepStrictEqual(inspect(parser, input('[[a &nbsp;]]')), [['<sup class="reference"><span>a</span></sup>'], '']);
47
+ assert.deepStrictEqual(inspect(parser, input('[[a <wbr>]]')), [['<sup class="reference"><span>a</span></sup>'], '']);
48
+ assert.deepStrictEqual(inspect(parser, input('[[ab]]')), [['<sup class="reference"><span>ab</span></sup>'], '']);
50
49
  });
51
50
 
52
51
  it('nest', () => {
53
- assert.deepStrictEqual(inspect(parser, input('[[`a`]]', new Context())), [['<sup class="reference"><span><code data-src="`a`">a</code></span></sup>'], '']);
54
- assert.deepStrictEqual(inspect(parser, input('[[@a]]', new Context())), [['<sup class="reference"><span><a class="account" href="/@a">@a</a></span></sup>'], '']);
55
- 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>'], '']);
56
- assert.deepStrictEqual(inspect(parser, input('[[![]{a}]]', new Context())), [['<sup class="reference"><span>!<a class="url" href="a">a</a></span></sup>'], '']);
57
- assert.deepStrictEqual(inspect(parser, input('[[a[[]]]]', new Context())), [['<sup class="reference"><span>a[[]]</span></sup>'], '']);
58
- assert.deepStrictEqual(inspect(parser, input('[[[a]]]', new Context())), [['<sup class="reference"><span>[a]</span></sup>'], '']);
59
- assert.deepStrictEqual(inspect(parser, input('[[[[a]]]]', new Context())), [['<sup class="reference"><span>[[a]]</span></sup>'], '']);
60
- assert.deepStrictEqual(inspect(parser, input('[[((a))]]', new Context())), [['<sup class="reference"><span><span class="paren">(<span class="paren">(a)</span>)</span></span></sup>'], '']);
52
+ assert.deepStrictEqual(inspect(parser, input('[[`a`]]')), [['<sup class="reference"><span><code data-src="`a`">a</code></span></sup>'], '']);
53
+ assert.deepStrictEqual(inspect(parser, input('[[@a]]')), [['<sup class="reference"><span><a class="account" href="/@a">@a</a></span></sup>'], '']);
54
+ assert.deepStrictEqual(inspect(parser, input('[[http://host]]')), [['<sup class="reference"><span><a class="url" href="http://host" target="_blank">http://host</a></span></sup>'], '']);
55
+ assert.deepStrictEqual(inspect(parser, input('[[![]{a}]]')), [['<sup class="reference"><span>!<a class="url" href="a">a</a></span></sup>'], '']);
56
+ assert.deepStrictEqual(inspect(parser, input('[[a[[]]]]')), [['<sup class="reference"><span>a[[]]</span></sup>'], '']);
57
+ assert.deepStrictEqual(inspect(parser, input('[[[a]]]')), [['<sup class="reference"><span>[a]</span></sup>'], '']);
58
+ assert.deepStrictEqual(inspect(parser, input('[[[[a]]]]')), [['<sup class="reference"><span>[[a]]</span></sup>'], '']);
59
+ assert.deepStrictEqual(inspect(parser, input('[[((a))]]')), [['<sup class="reference"><span><span class="paren">(<span class="paren">(a)</span>)</span></span></sup>'], '']);
61
60
  });
62
61
 
63
62
  it('abbr', () => {
64
- assert.deepStrictEqual(inspect(parser, input('[[^]]', new Context())), [['<sup class="invalid"><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="reference" data-abbr="A?"><span></span></sup>'], '']);
71
- assert.deepStrictEqual(inspect(parser, input('[[^A?,]]', new Context())), [['<sup class="reference" data-abbr="A?,"><span></span></sup>'], '']);
72
- assert.deepStrictEqual(inspect(parser, input('[[^A ]]', new Context())), [['<sup class="reference" data-abbr="A"><span></span></sup>'], '']);
73
- assert.deepStrictEqual(inspect(parser, input('[[^A ]]', new Context())), [['<sup class="invalid"><span>^A</span></sup>'], '']);
74
- assert.deepStrictEqual(inspect(parser, input('[[^A B]]', new Context())), [['<sup class="reference" data-abbr="A B"><span></span></sup>'], '']);
75
- assert.deepStrictEqual(inspect(parser, input('[[^A B]]', new Context())), [['<sup class="invalid"><span>^A B</span></sup>'], '']);
76
- assert.deepStrictEqual(inspect(parser, input('[[^A|]]', new Context())), [['<sup class="reference" data-abbr="A"><span></span></sup>'], '']);
77
- assert.deepStrictEqual(inspect(parser, input('[[^A,|]]', new Context())), [['<sup class="reference" data-abbr="A,"><span></span></sup>'], '']);
78
- assert.deepStrictEqual(inspect(parser, input('[[^A |]]', new Context())), [['<sup class="reference" data-abbr="A"><span></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|b]]', new Context())), [['<sup class="reference" data-abbr="A"><span>b</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|b ]]', new Context())), [['<sup class="reference" data-abbr="A"><span>b</span></sup>'], '']);
83
- assert.deepStrictEqual(inspect(parser, input('[[^A| ]]', new Context())), [['<sup class="reference" data-abbr="A"><span></span></sup>'], '']);
84
- assert.deepStrictEqual(inspect(parser, input('[[^A| b]]', new Context())), [['<sup class="reference" data-abbr="A"><span>b</span></sup>'], '']);
85
- assert.deepStrictEqual(inspect(parser, input('[[^A| ]]', new Context())), undefined);
86
- assert.deepStrictEqual(inspect(parser, input('[[^A|<wbr>]]', new Context())), undefined);
87
- assert.deepStrictEqual(inspect(parser, input('[[^A|<wbr>b]]', new Context())), undefined);
88
- assert.deepStrictEqual(inspect(parser, input('[[^A|^]]', new Context())), [['<sup class="reference" data-abbr="A"><span>^</span></sup>'], '']);
89
- assert.deepStrictEqual(inspect(parser, input('[[^A|^B]]', new Context())), [['<sup class="reference" data-abbr="A"><span>^B</span></sup>'], '']);
90
- assert.deepStrictEqual(inspect(parser, input('[[^1]]', new Context())), [['<sup class="invalid"><span>^1</span></sup>'], '']);
91
- assert.deepStrictEqual(inspect(parser, input('[[^1A]]', new Context())), [['<sup class="invalid"><span>^1A</span></sup>'], '']);
92
- assert.deepStrictEqual(inspect(parser, input('[[^1 ]]', new Context())), [['<sup class="invalid"><span>^1</span></sup>'], '']);
93
- assert.deepStrictEqual(inspect(parser, input('[[^1 A]]', new Context())), [['<sup class="invalid"><span>^1 A</span></sup>'], '']);
94
- assert.deepStrictEqual(inspect(parser, input('[[^1|]]', new Context())), [['<sup class="invalid"><span>^1|</span></sup>'], '']);
95
- assert.deepStrictEqual(inspect(parser, input('[[^1 |]]', new Context())), [['<sup class="invalid"><span>^1 |</span></sup>'], '']);
96
- assert.deepStrictEqual(inspect(parser, input('[[^Abc]]', new Context())), [['<sup class="reference" data-abbr="Abc"><span></span></sup>'], '']);
97
- assert.deepStrictEqual(inspect(parser, input('[[^A, B]]', new Context())), [['<sup class="reference" data-abbr="A, B"><span></span></sup>'], '']);
98
- assert.deepStrictEqual(inspect(parser, input(`[[^A's, Aces']]`, new Context())), [[`<sup class="reference" data-abbr="A's, Aces'"><span></span></sup>`], '']);
99
- assert.deepStrictEqual(inspect(parser, input('[[^Xyz 2020]]', new Context())), [['<sup class="reference" data-abbr="Xyz 2020"><span></span></sup>'], '']);
100
- assert.deepStrictEqual(inspect(parser, input('[[^Xyz 2020, 1]]', new Context())), [['<sup class="reference" data-abbr="Xyz 2020, 1"><span></span></sup>'], '']);
101
- assert.deepStrictEqual(inspect(parser, input('[[^Xyz 2020, 1, 2]]', new Context())), [['<sup class="reference" data-abbr="Xyz 2020, 1, 2"><span></span></sup>'], '']);
102
- 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>'], '']);
103
- 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>'], '']);
104
- 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>'], '']);
105
- 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>'], '']);
106
- assert.deepStrictEqual(inspect(parser, input('[[^Xyz 2020, 1-2]]', new Context())), [['<sup class="reference" data-abbr="Xyz 2020, 1-2"><span></span></sup>'], '']);
107
- 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>'], '']);
108
- assert.deepStrictEqual(inspect(parser, input('[[^Xyz 2020, 1n]]', new Context())), [['<sup class="reference" data-abbr="Xyz 2020, 1n"><span></span></sup>'], '']);
109
- assert.deepStrictEqual(inspect(parser, input('[[^Xyz 2020, 1n1]]', new Context())), [['<sup class="reference" data-abbr="Xyz 2020, 1n1"><span></span></sup>'], '']);
110
- assert.deepStrictEqual(inspect(parser, input('[[^Xyz 2020, 1nn1-2]]', new Context())), [['<sup class="reference" data-abbr="Xyz 2020, 1nn1-2"><span></span></sup>'], '']);
111
- assert.deepStrictEqual(inspect(parser, input('[[^Xyz 2020, i]]', new Context())), [['<sup class="reference" data-abbr="Xyz 2020, i"><span></span></sup>'], '']);
112
- assert.deepStrictEqual(inspect(parser, input('[[^Xyz 2020, capter 1]]', new Context())), [['<sup class="reference" data-abbr="Xyz 2020, capter 1"><span></span></sup>'], '']);
113
- assert.deepStrictEqual(inspect(parser, input('[[^Xyz 2020, cap. 1]]', new Context())), [['<sup class="reference" data-abbr="Xyz 2020, cap. 1"><span></span></sup>'], '']);
114
- assert.deepStrictEqual(inspect(parser, input('[[^Xyz 2020a]]', new Context())), [['<sup class="reference" data-abbr="Xyz 2020a"><span></span></sup>'], '']);
115
- assert.deepStrictEqual(inspect(parser, input('[[^Xyz 2020a, 1]]', new Context())), [['<sup class="reference" data-abbr="Xyz 2020a, 1"><span></span></sup>'], '']);
116
- assert.deepStrictEqual(inspect(parser, input('[[^Xyz 2020-2021a]]', new Context())), [['<sup class="reference" data-abbr="Xyz 2020-2021a"><span></span></sup>'], '']);
117
- assert.deepStrictEqual(inspect(parser, input('[[^Xyz 2020-2021a, 1]]', new Context())), [['<sup class="reference" data-abbr="Xyz 2020-2021a, 1"><span></span></sup>'], '']);
118
- assert.deepStrictEqual(inspect(parser, input('[[^Xyz, April 1, 2020]]', new Context())), [['<sup class="reference" data-abbr="Xyz, April 1, 2020"><span></span></sup>'], '']);
119
- 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>'], '']);
120
- assert.deepStrictEqual(inspect(parser, input('[[^Xyz n.d.]]', new Context())), [['<sup class="reference" data-abbr="Xyz n.d."><span></span></sup>'], '']);
121
- assert.deepStrictEqual(inspect(parser, input('[[^Xyz n.d., 1]]', new Context())), [['<sup class="reference" data-abbr="Xyz n.d., 1"><span></span></sup>'], '']);
122
- 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>'], '']);
123
- assert.deepStrictEqual(inspect(parser, input('[[^^]]', new Context())), [['<sup class="invalid"><span>^^</span></sup>'], '']);
124
- assert.deepStrictEqual(inspect(parser, input('[[\\^]]', new Context())), [['<sup class="reference"><span>^</span></sup>'], '']);
125
- assert.deepStrictEqual(inspect(parser, input('[[^ ]]', new Context())), [['<sup class="invalid"><span>^</span></sup>'], '']);
126
- assert.deepStrictEqual(inspect(parser, input('[[^ A]]', new Context())), [['<sup class="invalid"><span>^ A</span></sup>'], '']);
127
- assert.deepStrictEqual(inspect(parser, input('[[^ |]]', new Context())), [['<sup class="invalid"><span>^ |</span></sup>'], '']);
128
- assert.deepStrictEqual(inspect(parser, input('[[^ |b]]', new Context())), [['<sup class="invalid"><span>^ |b</span></sup>'], '']);
129
- assert.deepStrictEqual(inspect(parser, input('[[^ | ]]', new Context())), [['<sup class="invalid"><span>^ |</span></sup>'], '']);
130
- assert.deepStrictEqual(inspect(parser, input('[[^ | b]]', new Context())), [['<sup class="invalid"><span>^ | b</span></sup>'], '']);
63
+ assert.deepStrictEqual(inspect(parser, input('[[^]]')), [['<sup class="invalid"><span>^</span></sup>'], '']);
64
+ assert.deepStrictEqual(inspect(parser, input('[[^A]]')), [['<sup class="reference" data-abbr="A"><span></span></sup>'], '']);
65
+ assert.deepStrictEqual(inspect(parser, input('[[^A,]]')), [['<sup class="reference" data-abbr="A,"><span></span></sup>'], '']);
66
+ assert.deepStrictEqual(inspect(parser, input('[[^A, ]]')), [['<sup class="reference" data-abbr="A,"><span></span></sup>'], '']);
67
+ assert.deepStrictEqual(inspect(parser, input('[[^A.]]')), [['<sup class="reference" data-abbr="A."><span></span></sup>'], '']);
68
+ assert.deepStrictEqual(inspect(parser, input('[[^A.,]]')), [['<sup class="reference" data-abbr="A.,"><span></span></sup>'], '']);
69
+ assert.deepStrictEqual(inspect(parser, input('[[^A?]]')), [['<sup class="reference" data-abbr="A?"><span></span></sup>'], '']);
70
+ assert.deepStrictEqual(inspect(parser, input('[[^A?,]]')), [['<sup class="reference" data-abbr="A?,"><span></span></sup>'], '']);
71
+ assert.deepStrictEqual(inspect(parser, input('[[^A ]]')), [['<sup class="reference" data-abbr="A"><span></span></sup>'], '']);
72
+ assert.deepStrictEqual(inspect(parser, input('[[^A ]]')), [['<sup class="invalid"><span>^A</span></sup>'], '']);
73
+ assert.deepStrictEqual(inspect(parser, input('[[^A B]]')), [['<sup class="reference" data-abbr="A B"><span></span></sup>'], '']);
74
+ assert.deepStrictEqual(inspect(parser, input('[[^A B]]')), [['<sup class="invalid"><span>^A B</span></sup>'], '']);
75
+ assert.deepStrictEqual(inspect(parser, input('[[^A|]]')), [['<sup class="reference" data-abbr="A"><span></span></sup>'], '']);
76
+ assert.deepStrictEqual(inspect(parser, input('[[^A,|]]')), [['<sup class="reference" data-abbr="A,"><span></span></sup>'], '']);
77
+ assert.deepStrictEqual(inspect(parser, input('[[^A |]]')), [['<sup class="reference" data-abbr="A"><span></span></sup>'], '']);
78
+ assert.deepStrictEqual(inspect(parser, input('[[^A|b]]')), [['<sup class="reference" data-abbr="A"><span>b</span></sup>'], '']);
79
+ assert.deepStrictEqual(inspect(parser, input('[[^A|b]]')), [['<sup class="reference" data-abbr="A"><span>b</span></sup>'], '']);
80
+ assert.deepStrictEqual(inspect(parser, input('[[^A|b ]]')), [['<sup class="reference" data-abbr="A"><span>b</span></sup>'], '']);
81
+ assert.deepStrictEqual(inspect(parser, input('[[^A|b ]]')), [['<sup class="reference" data-abbr="A"><span>b</span></sup>'], '']);
82
+ assert.deepStrictEqual(inspect(parser, input('[[^A| ]]')), [['<sup class="reference" data-abbr="A"><span></span></sup>'], '']);
83
+ assert.deepStrictEqual(inspect(parser, input('[[^A| b]]')), [['<sup class="reference" data-abbr="A"><span>b</span></sup>'], '']);
84
+ assert.deepStrictEqual(inspect(parser, input('[[^A| ]]')), undefined);
85
+ assert.deepStrictEqual(inspect(parser, input('[[^A|<wbr>]]')), undefined);
86
+ assert.deepStrictEqual(inspect(parser, input('[[^A|<wbr>b]]')), undefined);
87
+ assert.deepStrictEqual(inspect(parser, input('[[^A|^]]')), [['<sup class="reference" data-abbr="A"><span>^</span></sup>'], '']);
88
+ assert.deepStrictEqual(inspect(parser, input('[[^A|^B]]')), [['<sup class="reference" data-abbr="A"><span>^B</span></sup>'], '']);
89
+ assert.deepStrictEqual(inspect(parser, input('[[^1]]')), [['<sup class="invalid"><span>^1</span></sup>'], '']);
90
+ assert.deepStrictEqual(inspect(parser, input('[[^1A]]')), [['<sup class="invalid"><span>^1A</span></sup>'], '']);
91
+ assert.deepStrictEqual(inspect(parser, input('[[^1 ]]')), [['<sup class="invalid"><span>^1</span></sup>'], '']);
92
+ assert.deepStrictEqual(inspect(parser, input('[[^1 A]]')), [['<sup class="invalid"><span>^1 A</span></sup>'], '']);
93
+ assert.deepStrictEqual(inspect(parser, input('[[^1|]]')), [['<sup class="invalid"><span>^1|</span></sup>'], '']);
94
+ assert.deepStrictEqual(inspect(parser, input('[[^1 |]]')), [['<sup class="invalid"><span>^1 |</span></sup>'], '']);
95
+ assert.deepStrictEqual(inspect(parser, input('[[^Abc]]')), [['<sup class="reference" data-abbr="Abc"><span></span></sup>'], '']);
96
+ assert.deepStrictEqual(inspect(parser, input('[[^A, B]]')), [['<sup class="reference" data-abbr="A, B"><span></span></sup>'], '']);
97
+ assert.deepStrictEqual(inspect(parser, input(`[[^A's, Aces']]`)), [[`<sup class="reference" data-abbr="A's, Aces'"><span></span></sup>`], '']);
98
+ assert.deepStrictEqual(inspect(parser, input('[[^Xyz 2020]]')), [['<sup class="reference" data-abbr="Xyz 2020"><span></span></sup>'], '']);
99
+ assert.deepStrictEqual(inspect(parser, input('[[^Xyz 2020, 1]]')), [['<sup class="reference" data-abbr="Xyz 2020, 1"><span></span></sup>'], '']);
100
+ assert.deepStrictEqual(inspect(parser, input('[[^Xyz 2020, 1, 2]]')), [['<sup class="reference" data-abbr="Xyz 2020, 1, 2"><span></span></sup>'], '']);
101
+ assert.deepStrictEqual(inspect(parser, input('[[^Xyz 2020, 1, fig. 1]]')), [['<sup class="reference" data-abbr="Xyz 2020, 1, fig. 1"><span></span></sup>'], '']);
102
+ assert.deepStrictEqual(inspect(parser, input('[[^Xyz 2020, 1, fig. 1.1]]')), [['<sup class="reference" data-abbr="Xyz 2020, 1, fig. 1.1"><span></span></sup>'], '']);
103
+ assert.deepStrictEqual(inspect(parser, input('[[^Xyz 2020, 1, fig. 1.1-2.1b]]')), [['<sup class="reference" data-abbr="Xyz 2020, 1, fig. 1.1-2.1b"><span></span></sup>'], '']);
104
+ assert.deepStrictEqual(inspect(parser, input('[[^Xyz 2020, 1, fig. 1.1a-b]]')), [['<sup class="reference" data-abbr="Xyz 2020, 1, fig. 1.1a-b"><span></span></sup>'], '']);
105
+ assert.deepStrictEqual(inspect(parser, input('[[^Xyz 2020, 1-2]]')), [['<sup class="reference" data-abbr="Xyz 2020, 1-2"><span></span></sup>'], '']);
106
+ assert.deepStrictEqual(inspect(parser, input('[[^Xyz 2020, 1:1-2]]')), [['<sup class="reference" data-abbr="Xyz 2020, 1:1-2"><span></span></sup>'], '']);
107
+ assert.deepStrictEqual(inspect(parser, input('[[^Xyz 2020, 1n]]')), [['<sup class="reference" data-abbr="Xyz 2020, 1n"><span></span></sup>'], '']);
108
+ assert.deepStrictEqual(inspect(parser, input('[[^Xyz 2020, 1n1]]')), [['<sup class="reference" data-abbr="Xyz 2020, 1n1"><span></span></sup>'], '']);
109
+ assert.deepStrictEqual(inspect(parser, input('[[^Xyz 2020, 1nn1-2]]')), [['<sup class="reference" data-abbr="Xyz 2020, 1nn1-2"><span></span></sup>'], '']);
110
+ assert.deepStrictEqual(inspect(parser, input('[[^Xyz 2020, i]]')), [['<sup class="reference" data-abbr="Xyz 2020, i"><span></span></sup>'], '']);
111
+ assert.deepStrictEqual(inspect(parser, input('[[^Xyz 2020, capter 1]]')), [['<sup class="reference" data-abbr="Xyz 2020, capter 1"><span></span></sup>'], '']);
112
+ assert.deepStrictEqual(inspect(parser, input('[[^Xyz 2020, cap. 1]]')), [['<sup class="reference" data-abbr="Xyz 2020, cap. 1"><span></span></sup>'], '']);
113
+ assert.deepStrictEqual(inspect(parser, input('[[^Xyz 2020a]]')), [['<sup class="reference" data-abbr="Xyz 2020a"><span></span></sup>'], '']);
114
+ assert.deepStrictEqual(inspect(parser, input('[[^Xyz 2020a, 1]]')), [['<sup class="reference" data-abbr="Xyz 2020a, 1"><span></span></sup>'], '']);
115
+ assert.deepStrictEqual(inspect(parser, input('[[^Xyz 2020-2021a]]')), [['<sup class="reference" data-abbr="Xyz 2020-2021a"><span></span></sup>'], '']);
116
+ assert.deepStrictEqual(inspect(parser, input('[[^Xyz 2020-2021a, 1]]')), [['<sup class="reference" data-abbr="Xyz 2020-2021a, 1"><span></span></sup>'], '']);
117
+ assert.deepStrictEqual(inspect(parser, input('[[^Xyz, April 1, 2020]]')), [['<sup class="reference" data-abbr="Xyz, April 1, 2020"><span></span></sup>'], '']);
118
+ assert.deepStrictEqual(inspect(parser, input('[[^Xyz, April 1, 2020, 1]]')), [['<sup class="reference" data-abbr="Xyz, April 1, 2020, 1"><span></span></sup>'], '']);
119
+ assert.deepStrictEqual(inspect(parser, input('[[^Xyz n.d.]]')), [['<sup class="reference" data-abbr="Xyz n.d."><span></span></sup>'], '']);
120
+ assert.deepStrictEqual(inspect(parser, input('[[^Xyz n.d., 1]]')), [['<sup class="reference" data-abbr="Xyz n.d., 1"><span></span></sup>'], '']);
121
+ assert.deepStrictEqual(inspect(parser, input('[[^X. Y., and Z et al. 2020, 1-2]]')), [['<sup class="reference" data-abbr="X. Y., and Z et al. 2020, 1-2"><span></span></sup>'], '']);
122
+ assert.deepStrictEqual(inspect(parser, input('[[^^]]')), [['<sup class="invalid"><span>^^</span></sup>'], '']);
123
+ assert.deepStrictEqual(inspect(parser, input('[[\\^]]')), [['<sup class="reference"><span>^</span></sup>'], '']);
124
+ assert.deepStrictEqual(inspect(parser, input('[[^ ]]')), [['<sup class="invalid"><span>^</span></sup>'], '']);
125
+ assert.deepStrictEqual(inspect(parser, input('[[^ A]]')), [['<sup class="invalid"><span>^ A</span></sup>'], '']);
126
+ assert.deepStrictEqual(inspect(parser, input('[[^ |]]')), [['<sup class="invalid"><span>^ |</span></sup>'], '']);
127
+ assert.deepStrictEqual(inspect(parser, input('[[^ |b]]')), [['<sup class="invalid"><span>^ |b</span></sup>'], '']);
128
+ assert.deepStrictEqual(inspect(parser, input('[[^ | ]]')), [['<sup class="invalid"><span>^ |</span></sup>'], '']);
129
+ assert.deepStrictEqual(inspect(parser, input('[[^ | b]]')), [['<sup class="invalid"><span>^ | b</span></sup>'], '']);
131
130
  });
132
131
 
133
132
  });
@@ -1,7 +1,7 @@
1
1
  import { ReferenceParser } from '../inline';
2
- import { State, Backtrack, Command } from '../context';
3
- import { List, Node } from '../../combinator/data/parser';
4
- import { union, subsequence, some, precedence, state, constraint, surround, open, isBacktrack, setBacktrack, lazy } from '../../combinator';
2
+ import { Input, State, Backtrack, Command } from '../context';
3
+ import { Result, List, Node } from '../../combinator/parser';
4
+ import { union, subsequence, some, precedence, state, constraint, backtrack, surround, open, isBacktrack, setBacktrack, lazy } from '../../combinator';
5
5
  import { inline } from '../inline';
6
6
  import { textlink } from './link';
7
7
  import { str } from '../source';
@@ -9,7 +9,7 @@ import { beforeNonblank, trimBlankNodeEnd } from '../visibility';
9
9
  import { unwrap, invalid } from '../util';
10
10
  import { html, defrag } from 'typed-dom/dom';
11
11
 
12
- export const reference: ReferenceParser = lazy(() => constraint(State.reference, surround(
12
+ export const reference: ReferenceParser = lazy(() => constraint(State.reference, backtrack(surround(
13
13
  '[[',
14
14
  precedence(1, state(State.annotation | State.reference,
15
15
  subsequence([
@@ -19,56 +19,85 @@ export const reference: ReferenceParser = lazy(() => constraint(State.reference,
19
19
  ']]',
20
20
  false,
21
21
  [2, 1 | Backtrack.common, 3 | Backtrack.doublebracket],
22
- ([, ns], context) => {
23
- const { position, range, linebreak } = context;
22
+ ([, ns], input, output) => {
23
+ const { position, range, linebreak } = input;
24
24
  const head = position - range;
25
25
  if (linebreak !== 0) {
26
- setBacktrack(context, 2 | Backtrack.link, head, 2);
26
+ setBacktrack(input, 2 | Backtrack.link, head, 2);
27
27
  return;
28
28
  }
29
- return new List([new Node(html('sup', attributes(ns), [html('span', defrag(unwrap(trimBlankNodeEnd(ns))))]))]);
29
+ return output.import(new List([
30
+ new Node(html('sup', attributes(ns), [html('span', defrag(unwrap(trimBlankNodeEnd(ns))))]))
31
+ ]));
30
32
  },
31
- (_, context): undefined => {
32
- const { source, position, range, linebreak } = context;
33
+ (_, input) => {
34
+ const { source, position, range, linebreak } = input;
33
35
  const head = position - range;
34
36
  if (source[position] !== ']') {
35
- setBacktrack(context, 2 | Backtrack.common, head, 2);
37
+ setBacktrack(input, 2 | Backtrack.common, head, 2);
36
38
  }
37
39
  else if (linebreak !== 0) {
38
- setBacktrack(context, 2 | Backtrack.doublebracket | Backtrack.link | Backtrack.ruby, head, 2);
40
+ setBacktrack(input, 2 | Backtrack.doublebracket | Backtrack.link | Backtrack.ruby, head, 2);
39
41
  }
40
42
  else if (source[position + 1] !== '{') {
41
- setBacktrack(context, 2 | Backtrack.link, head + 1);
43
+ setBacktrack(input, 2 | Backtrack.link, head + 1);
42
44
  }
43
45
  else {
44
46
  assert(source[position] === ']');
45
- assert(~context.state & State.link);
46
- context.position += 1;
47
- assert(!isBacktrack(context, 1 | Backtrack.link));
48
- if (!textlink(context)) {
49
- setBacktrack(context, 2 | Backtrack.link, head + 1);
50
- }
51
- context.position = position;
52
- context.range = range;
47
+ assert(~input.state & State.link);
48
+ input.position += 1;
49
+ assert(!isBacktrack(input, 1 | Backtrack.link));
50
+ input.memory = {
51
+ position,
52
+ range,
53
+ head,
54
+ };
55
+ return cont;
53
56
  }
54
- })));
57
+ }))));
58
+
59
+ interface Memory {
60
+ readonly position: number;
61
+ readonly range: number;
62
+ readonly head: number;
63
+ }
64
+ const cont: Result<HTMLElement | string, Input<Memory>> = [
65
+ (_, output) => {
66
+ output.push();
67
+ return output.context;
68
+ },
69
+ lazy(() => textlink),
70
+ (input, output) => {
71
+ const { memory: { position, range, head } } = input;
72
+ if (output.state) {
73
+ setBacktrack(input, 2 | Backtrack.link, head + 1);
74
+ }
75
+ input.position = position;
76
+ input.range = range;
77
+ output.pop();
78
+ return Result.fail;
79
+ },
80
+ ];
55
81
 
56
82
  // Chicago-Style
57
- const abbr: ReferenceParser.AbbrParser = surround(
83
+ const abbr: ReferenceParser.AbbrParser = backtrack(surround(
58
84
  str('^'),
59
85
  union([str(/(?=[A-Z])(?:[0-9A-Za-z]'?|(?:[-.:]|\.?\??,? ?)(?!['\-.:?, ]))+/y)]),
60
86
  /\|?(?=]])|\|/y,
61
87
  true, [],
62
- ([, ns], context) => {
63
- const { source, position, range } = context;
64
- if (!ns) return new List([new Node(''), new Node(source.slice(position - range, source[position - 1] === '|' ? position - 1 : position))]);
65
- context.position += source[position] === ' ' ? 1 : 0;
66
- return new List([new Node(Command.Separator), new Node(ns.head!.value.trimEnd())]);
88
+ ([, ns], input, output) => {
89
+ const { source, position, range } = input;
90
+ if (!ns) return output.import(new List([
91
+ new Node(''),
92
+ new Node(source.slice(position - range, source[position - 1] === '|' ? position - 1 : position)),
93
+ ]));
94
+ input.position += source[position] === ' ' ? 1 : 0;
95
+ return output.import(new List([new Node(Command.Separator), new Node(ns.head!.value.trimEnd())]));
67
96
  },
68
- (_, context) => {
69
- context.position -= context.range;
70
- return new List([new Node('')]);
71
- });
97
+ (_, input, output) => {
98
+ input.position -= input.range;
99
+ return output.append(new Node(''));
100
+ }));
72
101
 
73
102
  function attributes(ns: List<Node<string | HTMLElement>>): Record<string, string | undefined> {
74
103
  switch (ns.head!.value) {
@@ -1,7 +1,6 @@
1
1
  import { remark } from './remark';
2
2
  import { some } from '../../combinator';
3
- import { input } from '../../combinator/data/parser';
4
- import { Context } from '../context';
3
+ import { input } from '../context';
5
4
  import { inspect } from '../../debug.test';
6
5
 
7
6
  describe('Unit: parser/inline/remark', () => {
@@ -9,57 +8,57 @@ describe('Unit: parser/inline/remark', () => {
9
8
  const parser = some(remark);
10
9
 
11
10
  it('invalid', () => {
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);
11
+ assert.deepStrictEqual(inspect(parser, input('')), undefined);
12
+ assert.deepStrictEqual(inspect(parser, input('<')), undefined);
13
+ assert.deepStrictEqual(inspect(parser, input('[%')), undefined);
14
+ assert.deepStrictEqual(inspect(parser, input('[%[%')), undefined);
15
+ assert.deepStrictEqual(inspect(parser, input('[%a%]')), undefined);
16
+ assert.deepStrictEqual(inspect(parser, input('[%a b%]')), undefined);
17
+ assert.deepStrictEqual(inspect(parser, input('[% ')), [['[%'], '']);
18
+ assert.deepStrictEqual(inspect(parser, input('[% \n a')), [['[%', '<br>', ' a'], '']);
19
+ assert.deepStrictEqual(inspect(parser, input('[%%]')), undefined);
20
+ assert.deepStrictEqual(inspect(parser, input('[% [%')), [['[%', ' ', '[', '%'], '']);
21
+ assert.deepStrictEqual(inspect(parser, input('[% [% ')), [['[%', ' ', '[%'], '']);
22
+ assert.deepStrictEqual(inspect(parser, input('[% [% a')), [['[%', ' ', '[%', ' a'], '']);
23
+ assert.deepStrictEqual(inspect(parser, input('[% [% a %]')), [['[%', ' ', '<span class="remark"><input type="checkbox"><span>[% a %]</span></span>'], '']);
24
+ assert.deepStrictEqual(inspect(parser, input('[% a[%')), [['[%', ' a', '[', '%'], '']);
25
+ assert.deepStrictEqual(inspect(parser, input('[% a [%')), [['[%', ' a ', '[', '%'], '']);
26
+ assert.deepStrictEqual(inspect(parser, input('[% a [% ')), [['[%', ' a ', '[%'], '']);
27
+ assert.deepStrictEqual(inspect(parser, input('[% a [% b')), [['[%', ' a ', '[%', ' b'], '']);
28
+ assert.deepStrictEqual(inspect(parser, input('[% a [%% b')), [['[%', ' a ', '<span class="invalid">[%%</span>', ' b'], '']);
29
+ assert.deepStrictEqual(inspect(parser, input('[%% a [% b')), [['<span class="invalid">[%%</span>'], ' a [% b']);
30
+ assert.deepStrictEqual(inspect(parser, input('[%\\ a %]')), undefined);
31
+ assert.deepStrictEqual(inspect(parser, input('[% a\\ %]')), [['[%', ' a', ' ', '%', ']'], '']);
32
+ assert.deepStrictEqual(inspect(parser, input('[% a%]')), [['[%', ' a%', ']'], '']);
33
+ assert.deepStrictEqual(inspect(parser, input('[% a %%]')), [['[%', ' a %%', ']'], '']);
34
+ assert.deepStrictEqual(inspect(parser, input('[% [%% %]')), [['<span class="remark"><input type="checkbox"><span>[% <span class="invalid">[%%</span> %]</span></span>'], '']);
35
+ assert.deepStrictEqual(inspect(parser, input('[%% [% %%]')), [['<span class="invalid">[%%</span>'], ' [% %%]']);
36
+ assert.deepStrictEqual(inspect(parser, input('[%% a %]')), [['<span class="invalid">[%%</span>'], ' a %]']);
37
+ assert.deepStrictEqual(inspect(parser, input(' [% a %]')), undefined);
39
38
  });
40
39
 
41
40
  it('basic', () => {
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>'], '']);
41
+ assert.deepStrictEqual(inspect(parser, input('[% %]')), [['<span class="remark"><input type="checkbox"><span>[% %]</span></span>'], '']);
42
+ assert.deepStrictEqual(inspect(parser, input('[% %]')), [['<span class="remark"><input type="checkbox"><span>[% %]</span></span>'], '']);
43
+ assert.deepStrictEqual(inspect(parser, input('[% %]')), [['<span class="remark"><input type="checkbox"><span>[% %]</span></span>'], '']);
44
+ assert.deepStrictEqual(inspect(parser, input('[% a %]')), [['<span class="remark"><input type="checkbox"><span>[% a %]</span></span>'], '']);
45
+ assert.deepStrictEqual(inspect(parser, input('[% - %]')), [['<span class="remark"><input type="checkbox"><span>[% - %]</span></span>'], '']);
46
+ assert.deepStrictEqual(inspect(parser, input('[% a %]')), [['<span class="remark"><input type="checkbox"><span>[% a %]</span></span>'], '']);
47
+ assert.deepStrictEqual(inspect(parser, input('[% - %]')), [['<span class="remark"><input type="checkbox"><span>[% - %]</span></span>'], '']);
48
+ assert.deepStrictEqual(inspect(parser, input('[% a b %]')), [['<span class="remark"><input type="checkbox"><span>[% a b %]</span></span>'], '']);
49
+ assert.deepStrictEqual(inspect(parser, input('[% a\nb %]')), [['<span class="remark"><input type="checkbox"><span>[% a<br>b %]</span></span>'], '']);
50
+ assert.deepStrictEqual(inspect(parser, input('[% a %] %]')), [['<span class="remark"><input type="checkbox"><span>[% a %]</span></span>'], ' %]']);
51
+ assert.deepStrictEqual(inspect(parser, input('[% %%] %]')), [['<span class="remark"><input type="checkbox"><span>[% %%] %]</span></span>'], '']);
52
+ assert.deepStrictEqual(inspect(parser, input('[% [% a %] %]')), [['<span class="remark"><input type="checkbox"><span>[% <span class="remark"><input type="checkbox"><span>[% a %]</span></span> %]</span></span>'], '']);
53
+ assert.deepStrictEqual(inspect(parser, input('[% a %]b')), [['<span class="remark"><input type="checkbox"><span>[% a %]</span></span>'], 'b']);
54
+ assert.deepStrictEqual(inspect(parser, input('[%\na\n%]')), [['<span class="remark"><input type="checkbox"><span>[%<br>a<br>%]</span></span>'], '']);
55
+ assert.deepStrictEqual(inspect(parser, input('[% &a; %]')), [['<span class="remark"><input type="checkbox"><span>[% <span class="invalid">&amp;a;</span> %]</span></span>'], '']);
56
+ assert.deepStrictEqual(inspect(parser, input('[% &copy; %]')), [['<span class="remark"><input type="checkbox"><span>[% © %]</span></span>'], '']);
57
+ assert.deepStrictEqual(inspect(parser, input('[% &amp;copy; %]')), [['<span class="remark"><input type="checkbox"><span>[% &amp;copy; %]</span></span>'], '']);
58
+ assert.deepStrictEqual(inspect(parser, input('[% [ %]')), [['<span class="remark"><input type="checkbox"><span>[% [ %]</span></span>'], '']);
59
+ assert.deepStrictEqual(inspect(parser, input('[% \\ a %]')), [['<span class="remark"><input type="checkbox"><span>[% a %]</span></span>'], '']);
60
+ assert.deepStrictEqual(inspect(parser, input('[% $-a %]$')), [['<span class="remark"><input type="checkbox"><span>[% <a class="label" data-label="$-a">$-a</a> %]</span></span>'], '$']);
61
+ assert.deepStrictEqual(inspect(parser, input('[% <bdi> %]')), [['<span class="remark"><input type="checkbox"><span>[% <span class="invalid">&lt;bdi&gt;</span> %]</span></span>'], '']);
63
62
  });
64
63
 
65
64
  });
@@ -1,25 +1,25 @@
1
1
  import { RemarkParser } from '../inline';
2
2
  import { Recursion } from '../context';
3
- import { List, Node } from '../../combinator/data/parser';
4
- import { union, some, recursion, precedence, focus, surround, close, fallback, lazy } from '../../combinator';
3
+ import { List, Node } from '../../combinator/parser';
4
+ import { union, some, recursion, precedence, backtrack, focus, surround, close, fallback, lazy } from '../../combinator';
5
5
  import { inline } from '../inline';
6
6
  import { text, str } from '../source';
7
7
  import { unwrap, invalid } from '../util';
8
8
  import { html, defrag } from 'typed-dom/dom';
9
9
 
10
- export const remark: RemarkParser = lazy(() => fallback(surround(
10
+ export const remark: RemarkParser = lazy(() => fallback(backtrack(surround(
11
11
  str(/\[%(?=[ \r\n])/y),
12
12
  precedence(3, recursion(Recursion.inline,
13
13
  some(union([inline]), /[ \n]%\]/y, [[/[ \n]%\]/y, 3]]))),
14
14
  close(text, str('%]')),
15
15
  true, [],
16
- ([as, bs = new List(), cs]) => new List([
17
- new Node(html('span', { class: 'remark' }, [
18
- html('input', { type: 'checkbox' }),
19
- html('span', defrag(unwrap(as.import(bs as List<Node<string>>).import(cs)))),
20
- ])),
21
- ]),
22
- ([as, bs]) => bs && as.import(bs as List<Node<string>>)),
23
- focus(/\[%+(?=[ \r\n])/y, ({ source }) => new List([
24
- new Node(html('span', { class: 'invalid', ...invalid('remark', 'syntax', 'Invalid start symbol') }, source))
25
- ]))));
16
+ ([as, bs = new List(), cs], _, output) =>
17
+ output.append(
18
+ new Node(html('span', { class: 'remark' }, [
19
+ html('input', { type: 'checkbox' }),
20
+ html('span', defrag(unwrap(as.import(bs as List<Node<string>>).import(cs)))),
21
+ ]))),
22
+ ([as, bs = new List()], _, output) => output.import(as.import(bs as List<Node<string>>)))),
23
+ focus(/\[%+(?=[ \r\n])/y, ({ source }, output) =>
24
+ output.append(new Node(
25
+ html('span', { class: 'invalid', ...invalid('remark', 'syntax', 'Invalid start symbol') }, source))))));