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,58 +1,58 @@
1
1
  import { placeholder } from './placeholder';
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/extension/placeholder', () => {
7
8
  describe('placeholder', () => {
8
- const parser = (source: string) => some(placeholder)(input(source, ctx));
9
- const { context: ctx } = input('', {});
9
+ const parser = some(placeholder);
10
10
 
11
11
  it('invalid', () => {
12
- assert.deepStrictEqual(inspect(parser('[]'), ctx), undefined);
13
- assert.deepStrictEqual(inspect(parser('[a]'), ctx), undefined);
14
- assert.deepStrictEqual(inspect(parser('[ab]'), ctx), undefined);
15
- assert.deepStrictEqual(inspect(parser('[^]'), ctx), undefined);
16
- assert.deepStrictEqual(inspect(parser('[^]]'), ctx), undefined);
17
- assert.deepStrictEqual(inspect(parser('[^\\]'), ctx), [['[^', ']'], '']);
18
- assert.deepStrictEqual(inspect(parser('[^ ]'), ctx), undefined);
19
- assert.deepStrictEqual(inspect(parser('[^ a]'), ctx), undefined);
20
- assert.deepStrictEqual(inspect(parser('[^\\ ]'), ctx), undefined);
21
- assert.deepStrictEqual(inspect(parser('[^\\ a]'), ctx), undefined);
22
- assert.deepStrictEqual(inspect(parser('[^\n]'), ctx), undefined);
23
- assert.deepStrictEqual(inspect(parser('[^\na]'), ctx), undefined);
24
- assert.deepStrictEqual(inspect(parser('[^\\\na]'), ctx), undefined);
25
- assert.deepStrictEqual(inspect(parser('[^ !http://host]'), ctx), undefined);
26
- assert.deepStrictEqual(inspect(parser('[^a'), ctx), [['[^', 'a'], '']);
27
- assert.deepStrictEqual(inspect(parser('[[]'), ctx), undefined);
28
- assert.deepStrictEqual(inspect(parser('[]]'), ctx), undefined);
29
- assert.deepStrictEqual(inspect(parser('[[]]'), ctx), undefined);
30
- assert.deepStrictEqual(inspect(parser('[[ ]]'), ctx), undefined);
31
- assert.deepStrictEqual(inspect(parser('[[a]]'), ctx), undefined);
32
- assert.deepStrictEqual(inspect(parser(' [^a]'), ctx), undefined);
12
+ assert.deepStrictEqual(inspect(parser, input('[]', new Context())), undefined);
13
+ assert.deepStrictEqual(inspect(parser, input('[a]', new Context())), undefined);
14
+ assert.deepStrictEqual(inspect(parser, input('[ab]', 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())), [['[^', ']'], '']);
18
+ assert.deepStrictEqual(inspect(parser, input('[^ ]', new Context())), undefined);
19
+ assert.deepStrictEqual(inspect(parser, input('[^ a]', new Context())), undefined);
20
+ assert.deepStrictEqual(inspect(parser, input('[^\\ ]', new Context())), undefined);
21
+ assert.deepStrictEqual(inspect(parser, input('[^\\ a]', new Context())), undefined);
22
+ assert.deepStrictEqual(inspect(parser, input('[^\n]', new Context())), undefined);
23
+ assert.deepStrictEqual(inspect(parser, input('[^\na]', new Context())), undefined);
24
+ assert.deepStrictEqual(inspect(parser, input('[^\\\na]', new Context())), undefined);
25
+ assert.deepStrictEqual(inspect(parser, input('[^ !http://host]', new Context())), undefined);
26
+ assert.deepStrictEqual(inspect(parser, input('[^a', new Context())), [['[^', 'a'], '']);
27
+ assert.deepStrictEqual(inspect(parser, input('[[]', new Context())), undefined);
28
+ assert.deepStrictEqual(inspect(parser, input('[]]', new Context())), undefined);
29
+ assert.deepStrictEqual(inspect(parser, input('[[]]', new Context())), undefined);
30
+ assert.deepStrictEqual(inspect(parser, input('[[ ]]', new Context())), undefined);
31
+ assert.deepStrictEqual(inspect(parser, input('[[a]]', new Context())), undefined);
32
+ assert.deepStrictEqual(inspect(parser, input(' [^a]', new Context())), undefined);
33
33
  });
34
34
 
35
35
  it('valid', () => {
36
- assert.deepStrictEqual(inspect(parser('[^a]'), ctx), [['<span class="invalid">[^a]</span>'], '']);
37
- assert.deepStrictEqual(inspect(parser('[^a b]'), ctx), [['<span class="invalid">[^a b]</span>'], '']);
38
- assert.deepStrictEqual(inspect(parser('[^a ]'), ctx), [['<span class="invalid">[^a ]</span>'], '']);
39
- assert.deepStrictEqual(inspect(parser('[^a ]'), ctx), [['<span class="invalid">[^a ]</span>'], '']);
40
- assert.deepStrictEqual(inspect(parser('[^a\\ ]'), ctx), [['<span class="invalid">[^a\\ ]</span>'], '']);
41
- assert.deepStrictEqual(inspect(parser('[^a\\ \\ ]'), ctx), [['<span class="invalid">[^a\\ \\ ]</span>'], '']);
42
- assert.deepStrictEqual(inspect(parser('[^a\n]'), ctx), [['<span class="invalid">[^a\n]</span>'], '']);
43
- assert.deepStrictEqual(inspect(parser('[^a\\\n]'), ctx), [['<span class="invalid">[^a\\\n]</span>'], '']);
44
- assert.deepStrictEqual(inspect(parser('[^a\nb]'), ctx), [['<span class="invalid">[^a\nb]</span>'], '']);
45
- assert.deepStrictEqual(inspect(parser('[^a\\\nb]'), ctx), [['<span class="invalid">[^a\\\nb]</span>'], '']);
46
- assert.deepStrictEqual(inspect(parser('[^a<wbr>]'), ctx), [['<span class="invalid">[^a&lt;wbr&gt;]</span>'], '']);
47
- assert.deepStrictEqual(inspect(parser('[^a<wbr><wbr>]'), ctx), [['<span class="invalid">[^a&lt;wbr&gt;&lt;wbr&gt;]</span>'], '']);
48
- assert.deepStrictEqual(inspect(parser('[^==]'), ctx), [['<span class="invalid">[^==]</span>'], '']);
49
- assert.deepStrictEqual(inspect(parser('[^a[% b %]]'), ctx), [['<span class="invalid">[^a[% b %]]</span>'], '']);
50
- assert.deepStrictEqual(inspect(parser('[^a[% b %][% c %]]'), ctx), [['<span class="invalid">[^a[% b %][% c %]]</span>'], '']);
51
- assert.deepStrictEqual(inspect(parser('[^\\]]'), ctx), [['<span class="invalid">[^\\]]</span>'], '']);
52
- assert.deepStrictEqual(inspect(parser('[^(])]'), ctx), [['<span class="invalid">[^(])]</span>'], '']);
53
- assert.deepStrictEqual(inspect(parser('[^!http://host]'), ctx), [['<span class="invalid">[^!http://host]</span>'], '']);
54
- assert.deepStrictEqual(inspect(parser('[^[% a %]]'), ctx), [['<span class="invalid">[^[% a %]]</span>'], '']);
55
- assert.deepStrictEqual(inspect(parser('[^[% a %]b]'), ctx), [['<span class="invalid">[^[% a %]b]</span>'], '']);
36
+ assert.deepStrictEqual(inspect(parser, input('[^a]', new Context())), [['<span class="invalid">[^a]</span>'], '']);
37
+ assert.deepStrictEqual(inspect(parser, input('[^a b]', new Context())), [['<span class="invalid">[^a b]</span>'], '']);
38
+ assert.deepStrictEqual(inspect(parser, input('[^a ]', new Context())), [['<span class="invalid">[^a ]</span>'], '']);
39
+ assert.deepStrictEqual(inspect(parser, input('[^a ]', new Context())), [['<span class="invalid">[^a ]</span>'], '']);
40
+ assert.deepStrictEqual(inspect(parser, input('[^a\\ ]', new Context())), [['<span class="invalid">[^a\\ ]</span>'], '']);
41
+ assert.deepStrictEqual(inspect(parser, input('[^a\\ \\ ]', new Context())), [['<span class="invalid">[^a\\ \\ ]</span>'], '']);
42
+ assert.deepStrictEqual(inspect(parser, input('[^a\n]', new Context())), [['<span class="invalid">[^a\n]</span>'], '']);
43
+ assert.deepStrictEqual(inspect(parser, input('[^a\\\n]', new Context())), [['<span class="invalid">[^a\\\n]</span>'], '']);
44
+ assert.deepStrictEqual(inspect(parser, input('[^a\nb]', new Context())), [['<span class="invalid">[^a\nb]</span>'], '']);
45
+ assert.deepStrictEqual(inspect(parser, input('[^a\\\nb]', new Context())), [['<span class="invalid">[^a\\\nb]</span>'], '']);
46
+ assert.deepStrictEqual(inspect(parser, input('[^a<wbr>]', new Context())), [['<span class="invalid">[^a&lt;wbr&gt;]</span>'], '']);
47
+ assert.deepStrictEqual(inspect(parser, input('[^a<wbr><wbr>]', new Context())), [['<span class="invalid">[^a&lt;wbr&gt;&lt;wbr&gt;]</span>'], '']);
48
+ assert.deepStrictEqual(inspect(parser, input('[^==]', new Context())), [['<span class="invalid">[^==]</span>'], '']);
49
+ assert.deepStrictEqual(inspect(parser, input('[^a[% b %]]', new Context())), [['<span class="invalid">[^a[% b %]]</span>'], '']);
50
+ assert.deepStrictEqual(inspect(parser, input('[^a[% b %][% c %]]', new Context())), [['<span class="invalid">[^a[% b %][% c %]]</span>'], '']);
51
+ assert.deepStrictEqual(inspect(parser, input('[^\\]]', new Context())), [['<span class="invalid">[^\\]]</span>'], '']);
52
+ assert.deepStrictEqual(inspect(parser, input('[^(])]', new Context())), [['<span class="invalid">[^(])]</span>'], '']);
53
+ assert.deepStrictEqual(inspect(parser, input('[^!http://host]', new Context())), [['<span class="invalid">[^!http://host]</span>'], '']);
54
+ assert.deepStrictEqual(inspect(parser, input('[^[% a %]]', new Context())), [['<span class="invalid">[^[% a %]]</span>'], '']);
55
+ assert.deepStrictEqual(inspect(parser, input('[^[% a %]b]', new Context())), [['<span class="invalid">[^[% a %]b]</span>'], '']);
56
56
  });
57
57
 
58
58
  });
@@ -1,6 +1,6 @@
1
1
  import { ExtensionParser } from '../../inline';
2
2
  import { Recursion, Backtrack } 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, surround, lazy } from '../../../combinator';
5
5
  import { inline } from '../../inline';
6
6
  import { str } from '../../source';
@@ -21,11 +21,11 @@ export const placeholder: ExtensionParser.PlaceholderParser = lazy(() => surroun
21
21
  false,
22
22
  [3 | Backtrack.common],
23
23
  (_, context) => new List([
24
- new Data(html('span',
24
+ new Node(html('span',
25
25
  {
26
26
  class: 'invalid',
27
27
  ...invalid('extension', 'syntax', `Invalid start symbol or linebreak`),
28
28
  },
29
- context.source.slice(context.position - context.range!, context.position)))
29
+ context.source.slice(context.position - context.range, context.position)))
30
30
  ]),
31
- ([as, bs]) => bs && as.import(bs as List<Data<string>>)));
31
+ ([as, bs]) => bs && as.import(bs as List<Node<string>>)));
@@ -1,135 +1,135 @@
1
1
  import { html } from './html';
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/html', () => {
7
8
  describe('html', () => {
8
- const parser = (source: string) => some(html)(input(source, ctx));
9
- const { context: ctx } = input('', {});
9
+ const parser = some(html);
10
10
 
11
11
  it('xss', () => {
12
- assert.deepStrictEqual(inspect(parser('<script>'), ctx), [['<span class="invalid">&lt;script&gt;</span>'], '']);
13
- assert.deepStrictEqual(inspect(parser('<script>alert()<script>'), ctx), [['<span class="invalid">&lt;script&gt;alert()&lt;script&gt;</span>'], '']);
14
- assert.deepStrictEqual(inspect(parser('<script>alert()</script>'), ctx), [['<span class="invalid">&lt;script&gt;alert()&lt;/script&gt;</span>'], '']);
15
- assert.deepStrictEqual(inspect(parser('<bdi onclick="alert()">'), ctx), [['<span class="invalid">&lt;bdi onclick="alert()"&gt;</span>'], '']);
16
- assert.deepStrictEqual(inspect(parser('<bdi onclick="alert()"></bdi>'), ctx), [['<span class="invalid">&lt;bdi onclick="alert()"&gt;&lt;/bdi&gt;</span>'], '']);
17
- assert.deepStrictEqual(inspect(parser('<bdi onclick="alert()">a</bdi>'), ctx), [['<span class="invalid">&lt;bdi onclick="alert()"&gt;a&lt;/bdi&gt;</span>'], '']);
18
- assert.deepStrictEqual(inspect(parser('<bdi><bdi onclick="alert()">a</bdi></bdi>'), ctx), [['<bdi><span class="invalid">&lt;bdi onclick="alert()"&gt;a&lt;/bdi&gt;</span></bdi>'], '']);
12
+ assert.deepStrictEqual(inspect(parser, input('<script>', new Context())), [['<span class="invalid">&lt;script&gt;</span>'], '']);
13
+ assert.deepStrictEqual(inspect(parser, input('<script>alert()<script>', new Context())), [['<span class="invalid">&lt;script&gt;alert()&lt;script&gt;</span>'], '']);
14
+ assert.deepStrictEqual(inspect(parser, input('<script>alert()</script>', new Context())), [['<span class="invalid">&lt;script&gt;alert()&lt;/script&gt;</span>'], '']);
15
+ assert.deepStrictEqual(inspect(parser, input('<bdi onclick="alert()">', new Context())), [['<span class="invalid">&lt;bdi onclick="alert()"&gt;</span>'], '']);
16
+ assert.deepStrictEqual(inspect(parser, input('<bdi onclick="alert()"></bdi>', new Context())), [['<span class="invalid">&lt;bdi onclick="alert()"&gt;&lt;/bdi&gt;</span>'], '']);
17
+ assert.deepStrictEqual(inspect(parser, input('<bdi onclick="alert()">a</bdi>', new Context())), [['<span class="invalid">&lt;bdi onclick="alert()"&gt;a&lt;/bdi&gt;</span>'], '']);
18
+ assert.deepStrictEqual(inspect(parser, input('<bdi><bdi onclick="alert()">a</bdi></bdi>', new Context())), [['<bdi><span class="invalid">&lt;bdi onclick="alert()"&gt;a&lt;/bdi&gt;</span></bdi>'], '']);
19
19
  });
20
20
 
21
21
  it('invalid', () => {
22
- assert.deepStrictEqual(inspect(parser(''), ctx), undefined);
23
- assert.deepStrictEqual(inspect(parser('<0>'), ctx), undefined);
24
- assert.deepStrictEqual(inspect(parser('<aT>'), ctx), [['<span class="invalid">&lt;aT&gt;</span>'], '']);
25
- assert.deepStrictEqual(inspect(parser('<a,b>'), ctx), undefined);
26
- assert.deepStrictEqual(inspect(parser('<a, b>'), ctx), undefined);
27
- assert.deepStrictEqual(inspect(parser('<T>'), ctx), [['<span class="invalid">&lt;T&gt;</span>'], '']);
28
- assert.deepStrictEqual(inspect(parser('<wbr/>'), ctx), undefined);
29
- assert.deepStrictEqual(inspect(parser('<wbr />'), ctx), [['<span class="invalid">&lt;wbr /&gt;</span>'], '']);
30
- assert.deepStrictEqual(inspect(parser('<bdi>'), ctx), [['<span class="invalid">&lt;bdi&gt;</span>'], '']);
31
- assert.deepStrictEqual(inspect(parser('<bdi>z'), ctx), [['<span class="invalid">&lt;bdi&gt;z</span>'], '']);
32
- assert.deepStrictEqual(inspect(parser('<bdi></bdi>'), ctx), [['<span class="invalid">&lt;bdi&gt;&lt;/bdi&gt;</span>'], '']);
33
- assert.deepStrictEqual(inspect(parser('<bdi> </bdi>'), ctx), [['<span class="invalid">&lt;bdi&gt; &lt;/bdi&gt;</span>'], '']);
34
- assert.deepStrictEqual(inspect(parser('<bdi> \n</bdi>'), ctx), [['<span class="invalid">&lt;bdi&gt; \n&lt;/bdi&gt;</span>'], '']);
35
- assert.deepStrictEqual(inspect(parser('<bdi> \na</bdi>'), ctx), [['<span class="invalid">&lt;bdi&gt; \na&lt;/bdi&gt;</span>'], '']);
36
- assert.deepStrictEqual(inspect(parser('<bdi>\\ </bdi>'), ctx), [['<span class="invalid">&lt;bdi&gt;\\ &lt;/bdi&gt;</span>'], '']);
37
- assert.deepStrictEqual(inspect(parser('<bdi>&Tab;</bdi>'), ctx), [['<span class="invalid">&lt;bdi&gt;&amp;Tab;&lt;/bdi&gt;</span>'], '']);
38
- assert.deepStrictEqual(inspect(parser('<bdi><wbr></bdi>'), ctx), [['<span class="invalid">&lt;bdi&gt;&lt;wbr&gt;&lt;/bdi&gt;</span>'], '']);
39
- assert.deepStrictEqual(inspect(parser('<bdi>\n</bdi>'), ctx), [['<span class="invalid">&lt;bdi&gt;\n&lt;/bdi&gt;</span>'], '']);
40
- assert.deepStrictEqual(inspect(parser('<bdi>\na</bdi>'), ctx), [['<span class="invalid">&lt;bdi&gt;\na&lt;/bdi&gt;</span>'], '']);
41
- assert.deepStrictEqual(inspect(parser('<bdi>\\\na</bdi>'), ctx), [['<span class="invalid">&lt;bdi&gt;\\\na&lt;/bdi&gt;</span>'], '']);
42
- assert.deepStrictEqual(inspect(parser('<bdi>a'), ctx), [['<span class="invalid">&lt;bdi&gt;a</span>'], '']);
43
- assert.deepStrictEqual(inspect(parser('<bdi>a</BDI>'), ctx), [['<span class="invalid">&lt;bdi&gt;a&lt;/BDI&gt;</span>'], '']);
44
- assert.deepStrictEqual(inspect(parser('<BDI>a</BDI>'), ctx), [['<span class="invalid">&lt;BDI&gt;</span>'], 'a</BDI>']);
45
- assert.deepStrictEqual(inspect(parser('<BDI>a</bdi>'), ctx), [['<span class="invalid">&lt;BDI&gt;</span>'], 'a</bdi>']);
46
- assert.deepStrictEqual(inspect(parser('</bdi>'), ctx), undefined);
47
- assert.deepStrictEqual(inspect(parser('<bdi/>'), ctx), undefined);
48
- assert.deepStrictEqual(inspect(parser('<bdi />'), ctx), [['<span class="invalid">&lt;bdi /&gt;</span>'], '']);
49
- assert.deepStrictEqual(inspect(parser('<b><b><b>a</b></b></b>'), ctx), [['<span class="invalid">&lt;b&gt;&lt;b&gt;&lt;b&gt;a&lt;/b&gt;&lt;/b&gt;&lt;/b&gt;</span>'], '']);
50
- assert.deepStrictEqual(inspect(parser('<bdi><bdi><bdi>a</bdi></bdi></bdi>'), ctx), [['<bdi><bdi><bdi>a</bdi></bdi></bdi>'], '']);
51
- assert.deepStrictEqual(inspect(parser('<x a="*b*"'), ctx), [['<span class="invalid">&lt;x a="*b*"</span>'], '']);
52
- assert.deepStrictEqual(inspect(parser('<x a="*b*">'), ctx), [['<span class="invalid">&lt;x a="*b*"&gt;</span>'], '']);
53
- assert.deepStrictEqual(inspect(parser('<x a="*b*">c'), ctx), [['<span class="invalid">&lt;x a="*b*"&gt;</span>'], 'c']);
54
- assert.deepStrictEqual(inspect(parser('<bdi a="*b*"'), ctx), [['<span class="invalid">&lt;bdi a="*b*"</span>'], '']);
55
- assert.deepStrictEqual(inspect(parser('<bdi a="*b*">'), ctx), [['<span class="invalid">&lt;bdi a="*b*"&gt;</span>'], '']);
56
- assert.deepStrictEqual(inspect(parser('<bdi a="*b*">c'), ctx), [['<span class="invalid">&lt;bdi a="*b*"&gt;c</span>'], '']);
57
- assert.deepStrictEqual(inspect(parser('<bdi a b="*" *c*'), ctx), [['<span class="invalid">&lt;bdi a b="*" *c*</span>'], '']);
58
- assert.deepStrictEqual(inspect(parser('<bdi a b="*" *c*>'), ctx), [['<span class="invalid">&lt;bdi a b="*" *c*&gt;</span>'], '']);
59
- assert.deepStrictEqual(inspect(parser('<bdi a b="*" *c*>d</bdi>'), ctx), [['<span class="invalid">&lt;bdi a b="*" *c*&gt;d&lt;/bdi&gt;</span>'], '']);
60
- assert.deepStrictEqual(inspect(parser('<bdi a b="*" *>*c*'), ctx), [['<span class="invalid">&lt;bdi a b="*" *&gt;*c*</span>'], '']);
61
- assert.deepStrictEqual(inspect(parser('<bdi a b="*" *>*c*</bdi>'), ctx), [['<span class="invalid">&lt;bdi a b="*" *&gt;*c*&lt;/bdi&gt;</span>'], '']);
62
- assert.deepStrictEqual(inspect(parser(' <bdi>a</bdi>'), ctx), undefined);
22
+ assert.deepStrictEqual(inspect(parser, input('', new Context())), undefined);
23
+ assert.deepStrictEqual(inspect(parser, input('<0>', new Context())), undefined);
24
+ assert.deepStrictEqual(inspect(parser, input('<aT>', new Context())), [['<span class="invalid">&lt;aT&gt;</span>'], '']);
25
+ assert.deepStrictEqual(inspect(parser, input('<a,b>', new Context())), undefined);
26
+ assert.deepStrictEqual(inspect(parser, input('<a, b>', new Context())), undefined);
27
+ assert.deepStrictEqual(inspect(parser, input('<T>', new Context())), [['<span class="invalid">&lt;T&gt;</span>'], '']);
28
+ assert.deepStrictEqual(inspect(parser, input('<wbr/>', new Context())), undefined);
29
+ assert.deepStrictEqual(inspect(parser, input('<wbr />', new Context())), [['<span class="invalid">&lt;wbr /&gt;</span>'], '']);
30
+ assert.deepStrictEqual(inspect(parser, input('<bdi>', new Context())), [['<span class="invalid">&lt;bdi&gt;</span>'], '']);
31
+ assert.deepStrictEqual(inspect(parser, input('<bdi>z', new Context())), [['<span class="invalid">&lt;bdi&gt;z</span>'], '']);
32
+ assert.deepStrictEqual(inspect(parser, input('<bdi></bdi>', new Context())), [['<span class="invalid">&lt;bdi&gt;&lt;/bdi&gt;</span>'], '']);
33
+ assert.deepStrictEqual(inspect(parser, input('<bdi> </bdi>', new Context())), [['<span class="invalid">&lt;bdi&gt; &lt;/bdi&gt;</span>'], '']);
34
+ assert.deepStrictEqual(inspect(parser, input('<bdi> \n</bdi>', new Context())), [['<span class="invalid">&lt;bdi&gt; \n&lt;/bdi&gt;</span>'], '']);
35
+ assert.deepStrictEqual(inspect(parser, input('<bdi> \na</bdi>', new Context())), [['<span class="invalid">&lt;bdi&gt; \na&lt;/bdi&gt;</span>'], '']);
36
+ assert.deepStrictEqual(inspect(parser, input('<bdi>\\ </bdi>', new Context())), [['<span class="invalid">&lt;bdi&gt;\\ &lt;/bdi&gt;</span>'], '']);
37
+ assert.deepStrictEqual(inspect(parser, input('<bdi>&Tab;</bdi>', new Context())), [['<span class="invalid">&lt;bdi&gt;&amp;Tab;&lt;/bdi&gt;</span>'], '']);
38
+ assert.deepStrictEqual(inspect(parser, input('<bdi><wbr></bdi>', new Context())), [['<span class="invalid">&lt;bdi&gt;&lt;wbr&gt;&lt;/bdi&gt;</span>'], '']);
39
+ assert.deepStrictEqual(inspect(parser, input('<bdi>\n</bdi>', new Context())), [['<span class="invalid">&lt;bdi&gt;\n&lt;/bdi&gt;</span>'], '']);
40
+ assert.deepStrictEqual(inspect(parser, input('<bdi>\na</bdi>', new Context())), [['<span class="invalid">&lt;bdi&gt;\na&lt;/bdi&gt;</span>'], '']);
41
+ assert.deepStrictEqual(inspect(parser, input('<bdi>\\\na</bdi>', new Context())), [['<span class="invalid">&lt;bdi&gt;\\\na&lt;/bdi&gt;</span>'], '']);
42
+ assert.deepStrictEqual(inspect(parser, input('<bdi>a', new Context())), [['<span class="invalid">&lt;bdi&gt;a</span>'], '']);
43
+ assert.deepStrictEqual(inspect(parser, input('<bdi>a</BDI>', new Context())), [['<span class="invalid">&lt;bdi&gt;a&lt;/BDI&gt;</span>'], '']);
44
+ assert.deepStrictEqual(inspect(parser, input('<BDI>a</BDI>', new Context())), [['<span class="invalid">&lt;BDI&gt;</span>'], 'a</BDI>']);
45
+ assert.deepStrictEqual(inspect(parser, input('<BDI>a</bdi>', new Context())), [['<span class="invalid">&lt;BDI&gt;</span>'], 'a</bdi>']);
46
+ assert.deepStrictEqual(inspect(parser, input('</bdi>', new Context())), undefined);
47
+ assert.deepStrictEqual(inspect(parser, input('<bdi/>', new Context())), undefined);
48
+ assert.deepStrictEqual(inspect(parser, input('<bdi />', new Context())), [['<span class="invalid">&lt;bdi /&gt;</span>'], '']);
49
+ assert.deepStrictEqual(inspect(parser, input('<b><b><b>a</b></b></b>', new Context())), [['<span class="invalid">&lt;b&gt;&lt;b&gt;&lt;b&gt;a&lt;/b&gt;&lt;/b&gt;&lt;/b&gt;</span>'], '']);
50
+ assert.deepStrictEqual(inspect(parser, input('<bdi><bdi><bdi>a</bdi></bdi></bdi>', new Context())), [['<bdi><bdi><bdi>a</bdi></bdi></bdi>'], '']);
51
+ assert.deepStrictEqual(inspect(parser, input('<x a="*b*"', new Context())), [['<span class="invalid">&lt;x a="*b*"</span>'], '']);
52
+ assert.deepStrictEqual(inspect(parser, input('<x a="*b*">', new Context())), [['<span class="invalid">&lt;x a="*b*"&gt;</span>'], '']);
53
+ assert.deepStrictEqual(inspect(parser, input('<x a="*b*">c', new Context())), [['<span class="invalid">&lt;x a="*b*"&gt;</span>'], 'c']);
54
+ assert.deepStrictEqual(inspect(parser, input('<bdi a="*b*"', new Context())), [['<span class="invalid">&lt;bdi a="*b*"</span>'], '']);
55
+ assert.deepStrictEqual(inspect(parser, input('<bdi a="*b*">', new Context())), [['<span class="invalid">&lt;bdi a="*b*"&gt;</span>'], '']);
56
+ assert.deepStrictEqual(inspect(parser, input('<bdi a="*b*">c', new Context())), [['<span class="invalid">&lt;bdi a="*b*"&gt;c</span>'], '']);
57
+ assert.deepStrictEqual(inspect(parser, input('<bdi a b="*" *c*', new Context())), [['<span class="invalid">&lt;bdi a b="*" *c*</span>'], '']);
58
+ assert.deepStrictEqual(inspect(parser, input('<bdi a b="*" *c*>', new Context())), [['<span class="invalid">&lt;bdi a b="*" *c*&gt;</span>'], '']);
59
+ assert.deepStrictEqual(inspect(parser, input('<bdi a b="*" *c*>d</bdi>', new Context())), [['<span class="invalid">&lt;bdi a b="*" *c*&gt;d&lt;/bdi&gt;</span>'], '']);
60
+ assert.deepStrictEqual(inspect(parser, input('<bdi a b="*" *>*c*', new Context())), [['<span class="invalid">&lt;bdi a b="*" *&gt;*c*</span>'], '']);
61
+ assert.deepStrictEqual(inspect(parser, input('<bdi a b="*" *>*c*</bdi>', new Context())), [['<span class="invalid">&lt;bdi a b="*" *&gt;*c*&lt;/bdi&gt;</span>'], '']);
62
+ assert.deepStrictEqual(inspect(parser, input(' <bdi>a</bdi>', new Context())), undefined);
63
63
  });
64
64
 
65
65
  it('basic', () => {
66
- assert.deepStrictEqual(inspect(parser('<wbr>'), ctx), [['<wbr>'], '']);
67
- assert.deepStrictEqual(inspect(parser('<wbr >'), ctx), [['<wbr>'], '']);
68
- assert.deepStrictEqual(inspect(parser('<wbr >'), ctx), [['<span class="invalid">&lt;wbr </span>'], ' >']);
69
- assert.deepStrictEqual(inspect(parser('<wbr>a'), ctx), [['<wbr>'], 'a']);
70
- assert.deepStrictEqual(inspect(parser('<bdi >a</bdi>'), ctx), [['<bdi>a</bdi>'], '']);
71
- assert.deepStrictEqual(inspect(parser('<bdi >a</bdi>'), ctx), [['<span class="invalid">&lt;bdi &gt;a&lt;/bdi&gt;</span>'], '']);
72
- assert.deepStrictEqual(inspect(parser('<bdi> a</bdi>'), ctx), [['<bdi> a</bdi>'], '']);
73
- assert.deepStrictEqual(inspect(parser('<bdi> a </bdi>'), ctx), [['<bdi> a </bdi>'], '']);
74
- assert.deepStrictEqual(inspect(parser('<bdi> a </bdi>'), ctx), [['<bdi> a </bdi>'], '']);
75
- assert.deepStrictEqual(inspect(parser('<bdi>\\ a</bdi>'), ctx), [['<bdi> a</bdi>'], '']);
76
- assert.deepStrictEqual(inspect(parser('<bdi><wbr>a</bdi>'), ctx), [['<bdi><wbr>a</bdi>'], '']);
77
- assert.deepStrictEqual(inspect(parser('<bdi>a</bdi>'), ctx), [['<bdi>a</bdi>'], '']);
78
- assert.deepStrictEqual(inspect(parser('<bdi>a</bdi>a'), ctx), [['<bdi>a</bdi>'], 'a']);
79
- assert.deepStrictEqual(inspect(parser('<bdi>a </bdi>'), ctx), [['<bdi>a </bdi>'], '']);
80
- assert.deepStrictEqual(inspect(parser('<bdi>a \n </bdi>'), ctx), [['<bdi>a </bdi>'], '']);
81
- assert.deepStrictEqual(inspect(parser('<bdi>a\n</bdi>'), ctx), [['<bdi>a</bdi>'], '']);
82
- assert.deepStrictEqual(inspect(parser('<bdi>a\n </bdi>'), ctx), [['<bdi>a </bdi>'], '']);
83
- assert.deepStrictEqual(inspect(parser('<bdi>a\n<wbr></bdi>'), ctx), [['<bdi>a<wbr></bdi>'], '']);
84
- assert.deepStrictEqual(inspect(parser('<bdi>a\nb</bdi>'), ctx), [['<bdi>a<br>b</bdi>'], '']);
66
+ assert.deepStrictEqual(inspect(parser, input('<wbr>', new Context())), [['<wbr>'], '']);
67
+ assert.deepStrictEqual(inspect(parser, input('<wbr >', new Context())), [['<wbr>'], '']);
68
+ assert.deepStrictEqual(inspect(parser, input('<wbr >', new Context())), [['<span class="invalid">&lt;wbr </span>'], ' >']);
69
+ assert.deepStrictEqual(inspect(parser, input('<wbr>a', new Context())), [['<wbr>'], 'a']);
70
+ assert.deepStrictEqual(inspect(parser, input('<bdi >a</bdi>', new Context())), [['<bdi>a</bdi>'], '']);
71
+ assert.deepStrictEqual(inspect(parser, input('<bdi >a</bdi>', new Context())), [['<span class="invalid">&lt;bdi &gt;a&lt;/bdi&gt;</span>'], '']);
72
+ assert.deepStrictEqual(inspect(parser, input('<bdi> a</bdi>', new Context())), [['<bdi> a</bdi>'], '']);
73
+ assert.deepStrictEqual(inspect(parser, input('<bdi> a </bdi>', new Context())), [['<bdi> a </bdi>'], '']);
74
+ assert.deepStrictEqual(inspect(parser, input('<bdi> a </bdi>', new Context())), [['<bdi> a </bdi>'], '']);
75
+ assert.deepStrictEqual(inspect(parser, input('<bdi>\\ a</bdi>', new Context())), [['<bdi> a</bdi>'], '']);
76
+ assert.deepStrictEqual(inspect(parser, input('<bdi><wbr>a</bdi>', new Context())), [['<bdi><wbr>a</bdi>'], '']);
77
+ assert.deepStrictEqual(inspect(parser, input('<bdi>a</bdi>', new Context())), [['<bdi>a</bdi>'], '']);
78
+ assert.deepStrictEqual(inspect(parser, input('<bdi>a</bdi>a', new Context())), [['<bdi>a</bdi>'], 'a']);
79
+ assert.deepStrictEqual(inspect(parser, input('<bdi>a </bdi>', new Context())), [['<bdi>a </bdi>'], '']);
80
+ assert.deepStrictEqual(inspect(parser, input('<bdi>a \n </bdi>', new Context())), [['<bdi>a </bdi>'], '']);
81
+ assert.deepStrictEqual(inspect(parser, input('<bdi>a\n</bdi>', new Context())), [['<bdi>a</bdi>'], '']);
82
+ assert.deepStrictEqual(inspect(parser, input('<bdi>a\n </bdi>', new Context())), [['<bdi>a </bdi>'], '']);
83
+ assert.deepStrictEqual(inspect(parser, input('<bdi>a\n<wbr></bdi>', new Context())), [['<bdi>a<wbr></bdi>'], '']);
84
+ assert.deepStrictEqual(inspect(parser, input('<bdi>a\nb</bdi>', new Context())), [['<bdi>a<br>b</bdi>'], '']);
85
85
  });
86
86
 
87
87
  it('nest', () => {
88
- assert.deepStrictEqual(inspect(parser('<bdi>[% </bdi>'), ctx), [['<span class="invalid">&lt;bdi&gt;[% &lt;/bdi&gt;</span>'], '']);
89
- assert.deepStrictEqual(inspect(parser('<bdi><bdi>a</bdi></bdi>'), ctx), [['<bdi><bdi>a</bdi></bdi>'], '']);
90
- assert.deepStrictEqual(inspect(parser('<bdi>a<bdi>b</bdi>c</bdi>'), ctx), [['<bdi>a<bdi>b</bdi>c</bdi>'], '']);
91
- assert.deepStrictEqual(inspect(parser('<bdi>`a`</bdi>'), ctx), [['<bdi><code data-src="`a`">a</code></bdi>'], '']);
88
+ assert.deepStrictEqual(inspect(parser, input('<bdi>[% </bdi>', new Context())), [['<span class="invalid">&lt;bdi&gt;[% &lt;/bdi&gt;</span>'], '']);
89
+ assert.deepStrictEqual(inspect(parser, input('<bdi><bdi>a</bdi></bdi>', new Context())), [['<bdi><bdi>a</bdi></bdi>'], '']);
90
+ assert.deepStrictEqual(inspect(parser, input('<bdi>a<bdi>b</bdi>c</bdi>', new Context())), [['<bdi>a<bdi>b</bdi>c</bdi>'], '']);
91
+ assert.deepStrictEqual(inspect(parser, input('<bdi>`a`</bdi>', new Context())), [['<bdi><code data-src="`a`">a</code></bdi>'], '']);
92
92
  });
93
93
 
94
94
  it('escape', () => {
95
- assert.deepStrictEqual(inspect(parser('<a>'), ctx), [['<span class="invalid">&lt;a&gt;</span>'], '']);
96
- assert.deepStrictEqual(inspect(parser('<bdi><a>a</a></bdi>'), ctx), [['<bdi><span class="invalid">&lt;a&gt;a&lt;/a&gt;</span></bdi>'], '']);
97
- assert.deepStrictEqual(inspect(parser('<bdi>a<a>b</a>c</bdi>'), ctx), [['<bdi>a<span class="invalid">&lt;a&gt;b&lt;/a&gt;</span>c</bdi>'], '']);
98
- assert.deepStrictEqual(inspect(parser('<img>'), ctx), [['<span class="invalid">&lt;img&gt;</span>'], '']);
99
- assert.deepStrictEqual(inspect(parser('<bdi><img></bdi>'), ctx), [['<bdi><span class="invalid">&lt;img&gt;</span></bdi>'], '']);
95
+ assert.deepStrictEqual(inspect(parser, input('<a>', new Context())), [['<span class="invalid">&lt;a&gt;</span>'], '']);
96
+ assert.deepStrictEqual(inspect(parser, input('<bdi><a>a</a></bdi>', new Context())), [['<bdi><span class="invalid">&lt;a&gt;a&lt;/a&gt;</span></bdi>'], '']);
97
+ assert.deepStrictEqual(inspect(parser, input('<bdi>a<a>b</a>c</bdi>', new Context())), [['<bdi>a<span class="invalid">&lt;a&gt;b&lt;/a&gt;</span>c</bdi>'], '']);
98
+ assert.deepStrictEqual(inspect(parser, input('<img>', new Context())), [['<span class="invalid">&lt;img&gt;</span>'], '']);
99
+ assert.deepStrictEqual(inspect(parser, input('<bdi><img></bdi>', new Context())), [['<bdi><span class="invalid">&lt;img&gt;</span></bdi>'], '']);
100
100
  });
101
101
 
102
102
  it('attribute', () => {
103
- assert.deepStrictEqual(inspect(parser('<bdi\n>a</bdi>'), ctx), undefined);
104
- assert.deepStrictEqual(inspect(parser('<bdi \n>a</bdi>'), ctx), [['<span class="invalid">&lt;bdi \n&gt;a&lt;/bdi&gt;</span>'], '']);
105
- assert.deepStrictEqual(inspect(parser('<bdi __proto__>a</bdi>'), ctx), [['<span class="invalid">&lt;bdi __proto__&gt;a&lt;/bdi&gt;</span>'], '']);
106
- assert.deepStrictEqual(inspect(parser('<bdi constructor>a</bdi>'), ctx), [['<span class="invalid">&lt;bdi constructor&gt;a&lt;/bdi&gt;</span>'], '']);
107
- assert.deepStrictEqual(inspect(parser('<bdi toString>a</bdi>'), ctx), [['<span class="invalid">&lt;bdi toString&gt;a&lt;/bdi&gt;</span>'], '']);
108
- assert.deepStrictEqual(inspect(parser('<bdi X>a</bdi>'), ctx), [['<span class="invalid">&lt;bdi X&gt;a&lt;/bdi&gt;</span>'], '']);
109
- assert.deepStrictEqual(inspect(parser('<bdi x>a</bdi>'), ctx), [['<span class="invalid">&lt;bdi x&gt;a&lt;/bdi&gt;</span>'], '']);
110
- assert.deepStrictEqual(inspect(parser('<bdo>a</bdo>'), ctx), [['<span class="invalid">&lt;bdo&gt;a&lt;/bdo&gt;</span>'], '']);
111
- assert.deepStrictEqual(inspect(parser('<bdo >a</bdo>'), ctx), [['<span class="invalid">&lt;bdo &gt;a&lt;/bdo&gt;</span>'], '']);
112
- assert.deepStrictEqual(inspect(parser('<bdo __proto__>a</bdo>'), ctx), [['<span class="invalid">&lt;bdo __proto__&gt;a&lt;/bdo&gt;</span>'], '']);
113
- assert.deepStrictEqual(inspect(parser('<bdo constructor>a</bdo>'), ctx), [['<span class="invalid">&lt;bdo constructor&gt;a&lt;/bdo&gt;</span>'], '']);
114
- assert.deepStrictEqual(inspect(parser('<bdo toString>a</bdo>'), ctx), [['<span class="invalid">&lt;bdo toString&gt;a&lt;/bdo&gt;</span>'], '']);
115
- assert.deepStrictEqual(inspect(parser('<bdo X>a</bdo>'), ctx), [['<span class="invalid">&lt;bdo X&gt;a&lt;/bdo&gt;</span>'], '']);
116
- assert.deepStrictEqual(inspect(parser('<bdo x>a</bdo>'), ctx), [['<span class="invalid">&lt;bdo x&gt;a&lt;/bdo&gt;</span>'], '']);
117
- assert.deepStrictEqual(inspect(parser('<bdo dir>a</bdo>'), ctx), [['<span class="invalid">&lt;bdo dir&gt;a&lt;/bdo&gt;</span>'], '']);
118
- assert.deepStrictEqual(inspect(parser('<bdo dir=>a</bdo>'), ctx), [['<span class="invalid">&lt;bdo dir=&gt;a&lt;/bdo&gt;</span>'], '']);
119
- assert.deepStrictEqual(inspect(parser('<bdo dir=rtl>a</bdo>'), ctx), [['<span class="invalid">&lt;bdo dir=rtl&gt;a&lt;/bdo&gt;</span>'], '']);
120
- assert.deepStrictEqual(inspect(parser('<bdo dir=">a</bdo>'), ctx), [['<span class="invalid">&lt;bdo dir="&gt;a&lt;/bdo&gt;</span>'], '']);
121
- assert.deepStrictEqual(inspect(parser('<bdo dir="">a</bdo>'), ctx), [['<span class="invalid">&lt;bdo dir=""&gt;a&lt;/bdo&gt;</span>'], '']);
122
- assert.deepStrictEqual(inspect(parser('<bdo dir="rtl" dir="rtl">a</bdo>'), ctx), [['<span class="invalid">&lt;bdo dir="rtl" dir="rtl"&gt;a&lt;/bdo&gt;</span>'], '']);
123
- assert.deepStrictEqual(inspect(parser('<bdo diR="rtl">a</bdo>'), ctx), [['<span class="invalid">&lt;bdo diR="rtl"&gt;a&lt;/bdo&gt;</span>'], '']);
124
- assert.deepStrictEqual(inspect(parser('<bdo dir="rtl">a</bdo>'), ctx), [['<bdo dir="rtl">a</bdo>'], '']);
125
- assert.deepStrictEqual(inspect(parser('<bdo dir="rtl" >a</bdo>'), ctx), [['<bdo dir="rtl">a</bdo>'], '']);
126
- assert.deepStrictEqual(inspect(parser('<bdo dir="rtl" >a</bdo>'), ctx), [['<span class="invalid">&lt;bdo dir="rtl" &gt;a&lt;/bdo&gt;</span>'], '']);
127
- assert.deepStrictEqual(inspect(parser('<bdo dir="rtl">a</bdo>'), ctx), [['<span class="invalid">&lt;bdo dir="rtl"&gt;a&lt;/bdo&gt;</span>'], '']);
128
- assert.deepStrictEqual(inspect(parser('<wbr\n>'), ctx), undefined);
129
- assert.deepStrictEqual(inspect(parser('<wbr \n>'), ctx), [['<span class="invalid">&lt;wbr </span>'], '\n>']);
130
- assert.deepStrictEqual(inspect(parser('<wbr constructor>'), ctx), [['<span class="invalid">&lt;wbr constructor&gt;</span>'], '']);
131
- assert.deepStrictEqual(inspect(parser('<wbr X>'), ctx), [['<span class="invalid">&lt;wbr X&gt;</span>'], '']);
132
- assert.deepStrictEqual(inspect(parser('<wbr x>'), ctx), [['<span class="invalid">&lt;wbr x&gt;</span>'], '']);
103
+ assert.deepStrictEqual(inspect(parser, input('<bdi\n>a</bdi>', new Context())), undefined);
104
+ assert.deepStrictEqual(inspect(parser, input('<bdi \n>a</bdi>', new Context())), [['<span class="invalid">&lt;bdi \n&gt;a&lt;/bdi&gt;</span>'], '']);
105
+ assert.deepStrictEqual(inspect(parser, input('<bdi __proto__>a</bdi>', new Context())), [['<span class="invalid">&lt;bdi __proto__&gt;a&lt;/bdi&gt;</span>'], '']);
106
+ assert.deepStrictEqual(inspect(parser, input('<bdi constructor>a</bdi>', new Context())), [['<span class="invalid">&lt;bdi constructor&gt;a&lt;/bdi&gt;</span>'], '']);
107
+ assert.deepStrictEqual(inspect(parser, input('<bdi toString>a</bdi>', new Context())), [['<span class="invalid">&lt;bdi toString&gt;a&lt;/bdi&gt;</span>'], '']);
108
+ assert.deepStrictEqual(inspect(parser, input('<bdi X>a</bdi>', new Context())), [['<span class="invalid">&lt;bdi X&gt;a&lt;/bdi&gt;</span>'], '']);
109
+ assert.deepStrictEqual(inspect(parser, input('<bdi x>a</bdi>', new Context())), [['<span class="invalid">&lt;bdi x&gt;a&lt;/bdi&gt;</span>'], '']);
110
+ assert.deepStrictEqual(inspect(parser, input('<bdo>a</bdo>', new Context())), [['<span class="invalid">&lt;bdo&gt;a&lt;/bdo&gt;</span>'], '']);
111
+ assert.deepStrictEqual(inspect(parser, input('<bdo >a</bdo>', new Context())), [['<span class="invalid">&lt;bdo &gt;a&lt;/bdo&gt;</span>'], '']);
112
+ assert.deepStrictEqual(inspect(parser, input('<bdo __proto__>a</bdo>', new Context())), [['<span class="invalid">&lt;bdo __proto__&gt;a&lt;/bdo&gt;</span>'], '']);
113
+ assert.deepStrictEqual(inspect(parser, input('<bdo constructor>a</bdo>', new Context())), [['<span class="invalid">&lt;bdo constructor&gt;a&lt;/bdo&gt;</span>'], '']);
114
+ assert.deepStrictEqual(inspect(parser, input('<bdo toString>a</bdo>', new Context())), [['<span class="invalid">&lt;bdo toString&gt;a&lt;/bdo&gt;</span>'], '']);
115
+ assert.deepStrictEqual(inspect(parser, input('<bdo X>a</bdo>', new Context())), [['<span class="invalid">&lt;bdo X&gt;a&lt;/bdo&gt;</span>'], '']);
116
+ assert.deepStrictEqual(inspect(parser, input('<bdo x>a</bdo>', new Context())), [['<span class="invalid">&lt;bdo x&gt;a&lt;/bdo&gt;</span>'], '']);
117
+ assert.deepStrictEqual(inspect(parser, input('<bdo dir>a</bdo>', new Context())), [['<span class="invalid">&lt;bdo dir&gt;a&lt;/bdo&gt;</span>'], '']);
118
+ assert.deepStrictEqual(inspect(parser, input('<bdo dir=>a</bdo>', new Context())), [['<span class="invalid">&lt;bdo dir=&gt;a&lt;/bdo&gt;</span>'], '']);
119
+ assert.deepStrictEqual(inspect(parser, input('<bdo dir=rtl>a</bdo>', new Context())), [['<span class="invalid">&lt;bdo dir=rtl&gt;a&lt;/bdo&gt;</span>'], '']);
120
+ assert.deepStrictEqual(inspect(parser, input('<bdo dir=">a</bdo>', new Context())), [['<span class="invalid">&lt;bdo dir="&gt;a&lt;/bdo&gt;</span>'], '']);
121
+ assert.deepStrictEqual(inspect(parser, input('<bdo dir="">a</bdo>', new Context())), [['<span class="invalid">&lt;bdo dir=""&gt;a&lt;/bdo&gt;</span>'], '']);
122
+ assert.deepStrictEqual(inspect(parser, input('<bdo dir="rtl" dir="rtl">a</bdo>', new Context())), [['<span class="invalid">&lt;bdo dir="rtl" dir="rtl"&gt;a&lt;/bdo&gt;</span>'], '']);
123
+ assert.deepStrictEqual(inspect(parser, input('<bdo diR="rtl">a</bdo>', new Context())), [['<span class="invalid">&lt;bdo diR="rtl"&gt;a&lt;/bdo&gt;</span>'], '']);
124
+ assert.deepStrictEqual(inspect(parser, input('<bdo dir="rtl">a</bdo>', new Context())), [['<bdo dir="rtl">a</bdo>'], '']);
125
+ assert.deepStrictEqual(inspect(parser, input('<bdo dir="rtl" >a</bdo>', new Context())), [['<bdo dir="rtl">a</bdo>'], '']);
126
+ assert.deepStrictEqual(inspect(parser, input('<bdo dir="rtl" >a</bdo>', new Context())), [['<span class="invalid">&lt;bdo dir="rtl" &gt;a&lt;/bdo&gt;</span>'], '']);
127
+ assert.deepStrictEqual(inspect(parser, input('<bdo dir="rtl">a</bdo>', new Context())), [['<span class="invalid">&lt;bdo dir="rtl"&gt;a&lt;/bdo&gt;</span>'], '']);
128
+ assert.deepStrictEqual(inspect(parser, input('<wbr\n>', new Context())), undefined);
129
+ assert.deepStrictEqual(inspect(parser, input('<wbr \n>', new Context())), [['<span class="invalid">&lt;wbr </span>'], '\n>']);
130
+ assert.deepStrictEqual(inspect(parser, input('<wbr constructor>', new Context())), [['<span class="invalid">&lt;wbr constructor&gt;</span>'], '']);
131
+ assert.deepStrictEqual(inspect(parser, input('<wbr X>', new Context())), [['<span class="invalid">&lt;wbr X&gt;</span>'], '']);
132
+ assert.deepStrictEqual(inspect(parser, input('<wbr x>', new Context())), [['<span class="invalid">&lt;wbr x&gt;</span>'], '']);
133
133
  });
134
134
 
135
135
  });
@@ -1,6 +1,6 @@
1
1
  import { HTMLParser } from '../inline';
2
2
  import { Recursion } from '../context';
3
- import { List, Data, Ctx } from '../../combinator/data/parser';
3
+ import { List, Node, Context } from '../../combinator/data/parser';
4
4
  import { union, some, recursion, precedence, validate, surround, open, match, lazy } from '../../combinator';
5
5
  import { inline } from '../inline';
6
6
  import { str } from '../source';
@@ -28,9 +28,9 @@ export const html: HTMLParser = lazy(() => validate(/<[a-z]+(?=[ >])/yi,
28
28
  open(str(/ ?/y), str('>'), true),
29
29
  true, [],
30
30
  ([as, bs = new List(), cs], context) =>
31
- new List([new Data(elem(as.head!.value.slice(1), false, [...unwrap(as.import(bs).import(cs))], new List(), new List(), context))]),
31
+ new List([new Node(elem(as.head!.value.slice(1), false, [...unwrap(as.import(bs).import(cs))], new List(), new List(), context))]),
32
32
  ([as, bs = new List()], context) =>
33
- new List([new Data(elem(as.head!.value.slice(1), false, [...unwrap(as.import(bs))], new List(), new List(), context))])),
33
+ new List([new Node(elem(as.head!.value.slice(1), false, [...unwrap(as.import(bs))], new List(), new List(), context))])),
34
34
  match(
35
35
  new RegExp(String.raw`<(${TAGS.join('|')})(?=[ >])`, 'y'),
36
36
  memoize(
@@ -53,9 +53,9 @@ export const html: HTMLParser = lazy(() => validate(/<[a-z]+(?=[ >])/yi,
53
53
  str(`</${tag}>`),
54
54
  true, [],
55
55
  ([as, bs = new List(), cs], context) =>
56
- new List([new Data(elem(tag, true, [...unwrap(as)], bs, cs, context))]),
56
+ new List([new Node(elem(tag, true, [...unwrap(as)], bs, cs, context))]),
57
57
  ([as, bs = new List()], context) =>
58
- new List([new Data(elem(tag, true, [...unwrap(as)], bs, new List(), context))])),
58
+ new List([new Node(elem(tag, true, [...unwrap(as)], bs, new List(), context))])),
59
59
  ([, tag]) => tag,
60
60
  new Map())),
61
61
  surround(
@@ -65,9 +65,9 @@ export const html: HTMLParser = lazy(() => validate(/<[a-z]+(?=[ >])/yi,
65
65
  open(str(/ ?/y), str('>'), true),
66
66
  true, [],
67
67
  ([as, bs = new List(), cs], context) =>
68
- new List([new Data(elem(as.head!.value.slice(1), false, [...unwrap(as.import(bs).import(cs))], new List(), new List(), context))]),
68
+ new List([new Node(elem(as.head!.value.slice(1), false, [...unwrap(as.import(bs).import(cs))], new List(), new List(), context))]),
69
69
  ([as, bs = new List()], context) =>
70
- new List([new Data(elem(as.head!.value.slice(1), false, [...unwrap(as.import(bs))], new List(), new List(), context))])),
70
+ new List([new Node(elem(as.head!.value.slice(1), false, [...unwrap(as.import(bs))], new List(), new List(), context))])),
71
71
  ])));
72
72
 
73
73
  export const attribute: HTMLParser.AttributeParser = union([
@@ -75,7 +75,7 @@ export const attribute: HTMLParser.AttributeParser = union([
75
75
  str(/ [^\s<>]+/y),
76
76
  ]);
77
77
 
78
- function elem(tag: string, content: boolean, as: readonly string[], bs: List<Data<HTMLElement | string>>, cs: List<Data<string>>, context: Ctx): HTMLElement {
78
+ function elem(tag: string, content: boolean, as: readonly string[], bs: List<Node<HTMLElement | string>>, cs: List<Node<string>>, context: Context): HTMLElement {
79
79
  assert(as.length > 0);
80
80
  assert(as[0][0] === '<');
81
81
  if (!tags.includes(tag)) return ielem('tag', `Invalid HTML tag name "${tag}"`, context);
@@ -90,10 +90,10 @@ function elem(tag: string, content: boolean, as: readonly string[], bs: List<Dat
90
90
  return h(tag as 'span', attrs, defrag(unwrap(bs)));
91
91
  }
92
92
 
93
- function ielem(type: string, message: string, context: Ctx): HTMLElement {
93
+ function ielem(type: string, message: string, context: Context): HTMLElement {
94
94
  return h('span',
95
95
  { class: 'invalid', ...invalid('html', type, message) },
96
- context.source.slice(context.position - context.range!, context.position));
96
+ context.source.slice(context.position - context.range, context.position));
97
97
  }
98
98
 
99
99
  const requiredAttributes = memoize(