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,5 +1,5 @@
1
1
  import { MarkdownParser } from '../../markdown';
2
- import { Command } from './context';
2
+ import { Context, Command } from './context';
3
3
  import { union, some } from '../combinator';
4
4
  import { segment as heading } from './block/heading';
5
5
  import { segment as codeblock } from './block/codeblock';
@@ -43,7 +43,7 @@ export function* segment(source: string): Generator<string, undefined, undefined
43
43
  if (!validate(source, MAX_INPUT_SIZE)) return yield `${Command.Error}Too large input over ${MAX_INPUT_SIZE.toLocaleString('en')} bytes.\n${source.slice(0, 1001)}`;
44
44
  assert(source.length < Number.MAX_SAFE_INTEGER);
45
45
  for (let position = 0; position < source.length;) {
46
- const context = { source, position };
46
+ const context = new Context({ source, position });
47
47
  const result = parser({ context })!;
48
48
  assert(result);
49
49
  assert(context.position > position);
@@ -1,48 +1,48 @@
1
1
  import { escsource } from './escapable';
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/source/escsource', () => {
7
8
  describe('escsource', () => {
8
- const parser = (source: string) => some(escsource)(input(source, ctx));
9
- const { context: ctx } = input('', {});
9
+ const parser = some(escsource);
10
10
 
11
11
  it('invalid', () => {
12
- assert.deepStrictEqual(inspect(parser(''), ctx), undefined);
12
+ assert.deepStrictEqual(inspect(parser, input('', new Context())), undefined);
13
13
  });
14
14
 
15
15
  it('basic', () => {
16
- assert.deepStrictEqual(inspect(parser('a'), ctx), [['a'], '']);
17
- assert.deepStrictEqual(inspect(parser('ab'), ctx), [['ab'], '']);
18
- assert.deepStrictEqual(inspect(parser('a b c'), ctx), [['a b c'], '']);
19
- assert.deepStrictEqual(inspect(parser('09あいAZaz'), ctx), [['09あいAZaz'], '']);
16
+ assert.deepStrictEqual(inspect(parser, input('a', new Context())), [['a'], '']);
17
+ assert.deepStrictEqual(inspect(parser, input('ab', new Context())), [['ab'], '']);
18
+ assert.deepStrictEqual(inspect(parser, input('a b c', new Context())), [['a b c'], '']);
19
+ assert.deepStrictEqual(inspect(parser, input('09あいAZaz', new Context())), [['09あいAZaz'], '']);
20
20
  });
21
21
 
22
22
  it('space', () => {
23
- assert.deepStrictEqual(inspect(parser(' '), ctx), [[' '], '']);
24
- assert.deepStrictEqual(inspect(parser(' '), ctx), [[' '], '']);
25
- assert.deepStrictEqual(inspect(parser(' '), ctx), [[' '], '']);
26
- assert.deepStrictEqual(inspect(parser(' \n'), ctx), [[' ', '<br>'], '']);
27
- assert.deepStrictEqual(inspect(parser(' \n'), ctx), [[' ', '<br>'], '']);
28
- assert.deepStrictEqual(inspect(parser(' \n'), ctx), [[' ', '<br>'], '']);
23
+ assert.deepStrictEqual(inspect(parser, input(' ', new Context())), [[' '], '']);
24
+ assert.deepStrictEqual(inspect(parser, input(' ', new Context())), [[' '], '']);
25
+ assert.deepStrictEqual(inspect(parser, input(' ', new Context())), [[' '], '']);
26
+ assert.deepStrictEqual(inspect(parser, input(' \n', new Context())), [[' ', '<br>'], '']);
27
+ assert.deepStrictEqual(inspect(parser, input(' \n', new Context())), [[' ', '<br>'], '']);
28
+ assert.deepStrictEqual(inspect(parser, input(' \n', new Context())), [[' ', '<br>'], '']);
29
29
  });
30
30
 
31
31
  it('linebreak', () => {
32
- assert.deepStrictEqual(inspect(parser('\n\n'), ctx), [['<br>', '<br>'], '']);
32
+ assert.deepStrictEqual(inspect(parser, input('\n\n', new Context())), [['<br>', '<br>'], '']);
33
33
  });
34
34
 
35
35
  it('\\', () => {
36
- assert.deepStrictEqual(inspect(parser('\\'), ctx), [['\\'], '']);
37
- assert.deepStrictEqual(inspect(parser('\\\\'), ctx), [['\\\\'], '']);
38
- assert.deepStrictEqual(inspect(parser('\\\\\\'), ctx), [['\\\\', '\\'], '']);
39
- assert.deepStrictEqual(inspect(parser('\\ '), ctx), [['\\ '], '']);
40
- assert.deepStrictEqual(inspect(parser('\\_'), ctx), [['\\_'], '']);
41
- assert.deepStrictEqual(inspect(parser('\\0'), ctx), [['\\0'], '']);
42
- assert.deepStrictEqual(inspect(parser('\\a'), ctx), [['\\a'], '']);
43
- assert.deepStrictEqual(inspect(parser('\\$'), ctx), [['\\$'], '']);
44
- assert.deepStrictEqual(inspect(parser('\\ '), ctx), [['\\ '], '']);
45
- assert.deepStrictEqual(inspect(parser('\\\n'), ctx), [['\\', '<br>'], '']);
36
+ assert.deepStrictEqual(inspect(parser, input('\\', new Context())), [['\\'], '']);
37
+ assert.deepStrictEqual(inspect(parser, input('\\\\', new Context())), [['\\\\'], '']);
38
+ assert.deepStrictEqual(inspect(parser, input('\\\\\\', new Context())), [['\\\\', '\\'], '']);
39
+ assert.deepStrictEqual(inspect(parser, input('\\ ', new Context())), [['\\ '], '']);
40
+ assert.deepStrictEqual(inspect(parser, input('\\_', new Context())), [['\\_'], '']);
41
+ assert.deepStrictEqual(inspect(parser, input('\\0', new Context())), [['\\0'], '']);
42
+ assert.deepStrictEqual(inspect(parser, input('\\a', new Context())), [['\\a'], '']);
43
+ assert.deepStrictEqual(inspect(parser, input('\\$', new Context())), [['\\$'], '']);
44
+ assert.deepStrictEqual(inspect(parser, input('\\ ', new Context())), [['\\ '], '']);
45
+ assert.deepStrictEqual(inspect(parser, input('\\\n', new Context())), [['\\', '<br>'], '']);
46
46
  });
47
47
 
48
48
  });
@@ -1,6 +1,6 @@
1
1
  import { EscapableSourceParser } from '../source';
2
2
  import { Command } from '../context';
3
- import { List, Data } from '../../combinator/data/parser';
3
+ import { List, Node } from '../../combinator/data/parser';
4
4
  import { consume } from '../../combinator';
5
5
  import { next } from './text';
6
6
  import { html } from 'typed-dom/dom';
@@ -17,32 +17,32 @@ export const escsource: EscapableSourceParser = ({ context }) => {
17
17
  case Command.Escape:
18
18
  consume(1, context);
19
19
  context.position += 1;
20
- return new List([new Data(source.slice(position + 1, position + 2))]);
20
+ return new List([new Node(source.slice(position + 1, position + 2))]);
21
21
  case '\\':
22
22
  switch (source[position + 1]) {
23
23
  case undefined:
24
- return new List([new Data(char)]);
24
+ return new List([new Node(char)]);
25
25
  case '\n':
26
- return new List([new Data(char)]);
26
+ return new List([new Node(char)]);
27
27
  default:
28
28
  consume(1, context);
29
29
  context.position += 1;
30
- return new List([new Data(source.slice(position, position + 2))]);
30
+ return new List([new Node(source.slice(position, position + 2))]);
31
31
  }
32
32
  case '\r':
33
33
  consume(-1, context);
34
34
  return new List();
35
35
  case '\n':
36
36
  context.linebreak ||= source.length - position;
37
- return new List([new Data(html('br'))]);
37
+ return new List([new Node(html('br'))]);
38
38
  default:
39
39
  assert(char !== '\n');
40
- if (context.sequential) return new List([new Data(char)]);
40
+ if (context.sequential) return new List([new Node(char)]);
41
41
  let i = next(source, position, delimiter);
42
42
  assert(i > position);
43
43
  i -= position;
44
44
  consume(i - 1, context);
45
45
  context.position += i - 1;
46
- return new List([new Data(source.slice(position, context.position))]);
46
+ return new List([new Node(source.slice(position, context.position))]);
47
47
  }
48
48
  };
@@ -1,32 +1,32 @@
1
1
  import { contentline } from './line';
2
2
  import { input } from '../../combinator/data/parser';
3
+ import { Context } from '../context';
3
4
  import { inspect } from '../../debug.test';
4
5
 
5
6
  describe('Unit: parser/source/line', () => {
6
7
  describe('contentline', () => {
7
- const parser = (source: string) => contentline(input(source, ctx));
8
- const { context: ctx } = input('', {});
8
+ const parser = contentline;
9
9
 
10
10
  it('invalid', () => {
11
- assert.deepStrictEqual(inspect(parser(''), ctx), undefined);
12
- assert.deepStrictEqual(inspect(parser(' '), ctx), undefined);
13
- assert.deepStrictEqual(inspect(parser('\n'), ctx), undefined);
14
- assert.deepStrictEqual(inspect(parser(' \n'), ctx), undefined);
15
- assert.deepStrictEqual(inspect(parser('\n\n'), ctx), undefined);
11
+ assert.deepStrictEqual(inspect(parser, input('', new Context())), undefined);
12
+ assert.deepStrictEqual(inspect(parser, input(' ', new Context())), undefined);
13
+ assert.deepStrictEqual(inspect(parser, input('\n', new Context())), undefined);
14
+ assert.deepStrictEqual(inspect(parser, input(' \n', new Context())), undefined);
15
+ assert.deepStrictEqual(inspect(parser, input('\n\n', new Context())), undefined);
16
16
  });
17
17
 
18
18
  it('valid', () => {
19
- assert.deepStrictEqual(inspect(parser('a'), ctx), [[], '']);
20
- assert.deepStrictEqual(inspect(parser('a '), ctx), [[], '']);
21
- assert.deepStrictEqual(inspect(parser(' a'), ctx), [[], '']);
22
- assert.deepStrictEqual(inspect(parser(' a '), ctx), [[], '']);
23
- assert.deepStrictEqual(inspect(parser(' a\n'), ctx), [[], '']);
24
- assert.deepStrictEqual(inspect(parser(' a \n'), ctx), [[], '']);
25
- assert.deepStrictEqual(inspect(parser('ab'), ctx), [[], '']);
26
- assert.deepStrictEqual(inspect(parser('a\nb'), ctx), [[], 'b']);
27
- assert.deepStrictEqual(inspect(parser('\\\n'), ctx), [[], '']);
28
- assert.deepStrictEqual(inspect(parser('\\ \\\n'), ctx), [[], '']);
29
- assert.deepStrictEqual(inspect(parser('\\ \\ \\\n'), ctx), [[], '']);
19
+ assert.deepStrictEqual(inspect(parser, input('a', new Context())), [[], '']);
20
+ assert.deepStrictEqual(inspect(parser, input('a ', new Context())), [[], '']);
21
+ assert.deepStrictEqual(inspect(parser, input(' a', new Context())), [[], '']);
22
+ assert.deepStrictEqual(inspect(parser, input(' a ', new Context())), [[], '']);
23
+ assert.deepStrictEqual(inspect(parser, input(' a\n', new Context())), [[], '']);
24
+ assert.deepStrictEqual(inspect(parser, input(' a \n', new Context())), [[], '']);
25
+ assert.deepStrictEqual(inspect(parser, input('ab', new Context())), [[], '']);
26
+ assert.deepStrictEqual(inspect(parser, input('a\nb', new Context())), [[], 'b']);
27
+ assert.deepStrictEqual(inspect(parser, input('\\\n', new Context())), [[], '']);
28
+ assert.deepStrictEqual(inspect(parser, input('\\ \\\n', new Context())), [[], '']);
29
+ assert.deepStrictEqual(inspect(parser, input('\\ \\ \\\n', new Context())), [[], '']);
30
30
  });
31
31
 
32
32
  });
@@ -1,5 +1,5 @@
1
1
  import { StrParser } from '../source';
2
- import { Parser, List, Data } from '../../combinator/data/parser';
2
+ import { Parser, List, Node } from '../../combinator/data/parser';
3
3
  import { matcher } from '../../combinator';
4
4
 
5
5
  export function str(pattern: string | RegExp): StrParser;
@@ -17,6 +17,6 @@ export function strs(pattern: string): Parser<string> {
17
17
  acc += pattern;
18
18
  context.position += pattern.length;
19
19
  }
20
- return new List([new Data(acc)]);
20
+ return new List([new Node(acc)]);
21
21
  };
22
22
  }
@@ -1,121 +1,121 @@
1
1
  import { text } from './text';
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/source/text', () => {
7
8
  describe('text', () => {
8
- const parser = (source: string) => some(text)(input(source, ctx));
9
- const { context: ctx } = input('', {});
9
+ const parser = some(text);
10
10
 
11
11
  it('invalid', () => {
12
- assert.deepStrictEqual(inspect(parser(''), ctx), undefined);
12
+ assert.deepStrictEqual(inspect(parser, input('', new Context())), undefined);
13
13
  });
14
14
 
15
15
  it('basic', () => {
16
- assert.deepStrictEqual(inspect(parser('a'), ctx), [['a'], '']);
17
- assert.deepStrictEqual(inspect(parser('ab'), ctx), [['ab'], '']);
18
- assert.deepStrictEqual(inspect(parser('a b c'), ctx), [['a b c'], '']);
19
- assert.deepStrictEqual(inspect(parser('09あいAZaz'), ctx), [['09あいAZaz'], '']);
20
- assert.deepStrictEqual(inspect(parser('a\nb'), ctx), [['a', '<br>', 'b'], '']);
16
+ assert.deepStrictEqual(inspect(parser, input('a', new Context())), [['a'], '']);
17
+ assert.deepStrictEqual(inspect(parser, input('ab', new Context())), [['ab'], '']);
18
+ assert.deepStrictEqual(inspect(parser, input('a b c', new Context())), [['a b c'], '']);
19
+ assert.deepStrictEqual(inspect(parser, input('09あいAZaz', new Context())), [['09あいAZaz'], '']);
20
+ assert.deepStrictEqual(inspect(parser, input('a\nb', new Context())), [['a', '<br>', 'b'], '']);
21
21
  });
22
22
 
23
23
  it('escape', () => {
24
- assert.deepStrictEqual(inspect(parser('\\'), ctx), [[], '']);
25
- assert.deepStrictEqual(inspect(parser('\\\\'), ctx), [['\\'], '']);
26
- assert.deepStrictEqual(inspect(parser('\\\\\\'), ctx), [['\\'], '']);
27
- assert.deepStrictEqual(inspect(parser('\\\\\\\\'), ctx), [['\\', '\\'], '']);
28
- assert.deepStrictEqual(inspect(parser('\\ '), ctx), [[' '], '']);
29
- assert.deepStrictEqual(inspect(parser('\\_'), ctx), [['_'], '']);
30
- assert.deepStrictEqual(inspect(parser('\\0'), ctx), [['0'], '']);
31
- assert.deepStrictEqual(inspect(parser('\\a'), ctx), [['a'], '']);
32
- assert.deepStrictEqual(inspect(parser('\\\\a'), ctx), [['\\', 'a'], '']);
33
- assert.deepStrictEqual(inspect(parser('\\ '), ctx), [[' '], '']);
34
- assert.deepStrictEqual(inspect(parser('\\。'), ctx), [['。'], '']);
24
+ assert.deepStrictEqual(inspect(parser, input('\\', new Context())), [[], '']);
25
+ assert.deepStrictEqual(inspect(parser, input('\\\\', new Context())), [['\\'], '']);
26
+ assert.deepStrictEqual(inspect(parser, input('\\\\\\', new Context())), [['\\'], '']);
27
+ assert.deepStrictEqual(inspect(parser, input('\\\\\\\\', new Context())), [['\\', '\\'], '']);
28
+ assert.deepStrictEqual(inspect(parser, input('\\ ', new Context())), [[' '], '']);
29
+ assert.deepStrictEqual(inspect(parser, input('\\_', new Context())), [['_'], '']);
30
+ assert.deepStrictEqual(inspect(parser, input('\\0', new Context())), [['0'], '']);
31
+ assert.deepStrictEqual(inspect(parser, input('\\a', new Context())), [['a'], '']);
32
+ assert.deepStrictEqual(inspect(parser, input('\\\\a', new Context())), [['\\', 'a'], '']);
33
+ assert.deepStrictEqual(inspect(parser, input('\\ ', new Context())), [[' '], '']);
34
+ assert.deepStrictEqual(inspect(parser, input('\\。', new Context())), [['。'], '']);
35
35
  });
36
36
 
37
37
  it('space', () => {
38
- assert.deepStrictEqual(inspect(parser(' '), ctx), [[], '']);
39
- assert.deepStrictEqual(inspect(parser(' '), ctx), [[], '']);
40
- assert.deepStrictEqual(inspect(parser(' '), ctx), [[], '']);
41
- assert.deepStrictEqual(inspect(parser(' \n'), ctx), [['<br>'], '']);
42
- assert.deepStrictEqual(inspect(parser(' \n'), ctx), [['<br>'], '']);
43
- assert.deepStrictEqual(inspect(parser(' \\\n'), ctx), [[' ', '<br>'], '']);
44
- assert.deepStrictEqual(inspect(parser(' \\\n'), ctx), [[' ', ' ', '<br>'], '']);
45
- assert.deepStrictEqual(inspect(parser(' a'), ctx), [[' a'], '']);
46
- assert.deepStrictEqual(inspect(parser(' a'), ctx), [[' ', ' a'], '']);
47
- assert.deepStrictEqual(inspect(parser(' a'), ctx), [[' ', ' a'], '']);
48
- assert.deepStrictEqual(inspect(parser('a '), ctx), [['a'], '']);
49
- assert.deepStrictEqual(inspect(parser('a '), ctx), [['a'], '']);
50
- assert.deepStrictEqual(inspect(parser('a \n'), ctx), [['a', '<br>'], '']);
51
- assert.deepStrictEqual(inspect(parser('a \n'), ctx), [['a', '<br>'], '']);
52
- assert.deepStrictEqual(inspect(parser('a \\\n'), ctx), [['a', ' ', '<br>'], '']);
53
- assert.deepStrictEqual(inspect(parser('a \\\n'), ctx), [['a', ' ', '<br>'], '']);
54
- assert.deepStrictEqual(inspect(parser('a b'), ctx), [['a b'], '']);
55
- assert.deepStrictEqual(inspect(parser('a b'), ctx), [['a', ' b'], '']);
56
- assert.deepStrictEqual(inspect(parser('a b'), ctx), [['a', ' b'], '']);
38
+ assert.deepStrictEqual(inspect(parser, input(' ', new Context())), [[], '']);
39
+ assert.deepStrictEqual(inspect(parser, input(' ', new Context())), [[], '']);
40
+ assert.deepStrictEqual(inspect(parser, input(' ', new Context())), [[], '']);
41
+ assert.deepStrictEqual(inspect(parser, input(' \n', new Context())), [['<br>'], '']);
42
+ assert.deepStrictEqual(inspect(parser, input(' \n', new Context())), [['<br>'], '']);
43
+ assert.deepStrictEqual(inspect(parser, input(' \\\n', new Context())), [[' ', '<br>'], '']);
44
+ assert.deepStrictEqual(inspect(parser, input(' \\\n', new Context())), [[' ', ' ', '<br>'], '']);
45
+ assert.deepStrictEqual(inspect(parser, input(' a', new Context())), [[' a'], '']);
46
+ assert.deepStrictEqual(inspect(parser, input(' a', new Context())), [[' ', ' a'], '']);
47
+ assert.deepStrictEqual(inspect(parser, input(' a', new Context())), [[' ', ' a'], '']);
48
+ assert.deepStrictEqual(inspect(parser, input('a ', new Context())), [['a'], '']);
49
+ assert.deepStrictEqual(inspect(parser, input('a ', new Context())), [['a'], '']);
50
+ assert.deepStrictEqual(inspect(parser, input('a \n', new Context())), [['a', '<br>'], '']);
51
+ assert.deepStrictEqual(inspect(parser, input('a \n', new Context())), [['a', '<br>'], '']);
52
+ assert.deepStrictEqual(inspect(parser, input('a \\\n', new Context())), [['a', ' ', '<br>'], '']);
53
+ assert.deepStrictEqual(inspect(parser, input('a \\\n', new Context())), [['a', ' ', '<br>'], '']);
54
+ assert.deepStrictEqual(inspect(parser, input('a b', new Context())), [['a b'], '']);
55
+ assert.deepStrictEqual(inspect(parser, input('a b', new Context())), [['a', ' b'], '']);
56
+ assert.deepStrictEqual(inspect(parser, input('a b', new Context())), [['a', ' b'], '']);
57
57
  });
58
58
 
59
59
  it('hardbreak', () => {
60
- assert.deepStrictEqual(inspect(parser('\n'), ctx), [['<br>'], '']);
61
- assert.deepStrictEqual(inspect(parser('\n '), ctx), [['<br>'], '']);
62
- assert.deepStrictEqual(inspect(parser(' \n'), ctx), [['<br>'], '']);
63
- assert.deepStrictEqual(inspect(parser('\n\n'), ctx), [['<br>', '<br>'], '']);
64
- assert.deepStrictEqual(inspect(parser(' \n\n'), ctx), [['<br>', '<br>'], '']);
65
- assert.deepStrictEqual(inspect(parser('\n \n'), ctx), [['<br>', '<br>'], '']);
66
- assert.deepStrictEqual(inspect(parser('\n\n '), ctx), [['<br>', '<br>'], '']);
67
- assert.deepStrictEqual(inspect(parser('。\n'), ctx), [['。', '<br>'], '']);
60
+ assert.deepStrictEqual(inspect(parser, input('\n', new Context())), [['<br>'], '']);
61
+ assert.deepStrictEqual(inspect(parser, input('\n ', new Context())), [['<br>'], '']);
62
+ assert.deepStrictEqual(inspect(parser, input(' \n', new Context())), [['<br>'], '']);
63
+ assert.deepStrictEqual(inspect(parser, input('\n\n', new Context())), [['<br>', '<br>'], '']);
64
+ assert.deepStrictEqual(inspect(parser, input(' \n\n', new Context())), [['<br>', '<br>'], '']);
65
+ assert.deepStrictEqual(inspect(parser, input('\n \n', new Context())), [['<br>', '<br>'], '']);
66
+ assert.deepStrictEqual(inspect(parser, input('\n\n ', new Context())), [['<br>', '<br>'], '']);
67
+ assert.deepStrictEqual(inspect(parser, input('。\n', new Context())), [['。', '<br>'], '']);
68
68
  });
69
69
 
70
70
  it('softbreak', () => {
71
- assert.deepStrictEqual(inspect(parser('\\\n'), ctx), [['<br>'], '']);
72
- assert.deepStrictEqual(inspect(parser('\\\n '), ctx), [['<br>'], '']);
73
- assert.deepStrictEqual(inspect(parser('\\\na'), ctx), [['<br>', 'a'], '']);
74
- assert.deepStrictEqual(inspect(parser('a\\\n'), ctx), [['a', '<br>'], '']);
75
- assert.deepStrictEqual(inspect(parser('a\\\nb\\\n'), ctx), [['a', '<br>', 'b', '<br>'], '']);
76
- assert.deepStrictEqual(inspect(parser('\\\\\\\n'), ctx), [['\\', '<br>'], '']);
71
+ assert.deepStrictEqual(inspect(parser, input('\\\n', new Context())), [['<br>'], '']);
72
+ assert.deepStrictEqual(inspect(parser, input('\\\n ', new Context())), [['<br>'], '']);
73
+ assert.deepStrictEqual(inspect(parser, input('\\\na', new Context())), [['<br>', 'a'], '']);
74
+ assert.deepStrictEqual(inspect(parser, input('a\\\n', new Context())), [['a', '<br>'], '']);
75
+ assert.deepStrictEqual(inspect(parser, input('a\\\nb\\\n', new Context())), [['a', '<br>', 'b', '<br>'], '']);
76
+ assert.deepStrictEqual(inspect(parser, input('\\\\\\\n', new Context())), [['\\', '<br>'], '']);
77
77
  });
78
78
 
79
79
  it('account', () => {
80
- assert.deepStrictEqual(inspect(parser('@0'), ctx), [['@0'], '']);
81
- assert.deepStrictEqual(inspect(parser('_@0'), ctx), [['_', '@0'], '']);
82
- assert.deepStrictEqual(inspect(parser('$@0'), ctx), [['$', '@0'], '']);
83
- assert.deepStrictEqual(inspect(parser('+@0'), ctx), [['+', '@0'], '']);
84
- assert.deepStrictEqual(inspect(parser('-@0'), ctx), [['-', '@0'], '']);
85
- assert.deepStrictEqual(inspect(parser('0@0'), ctx), [['0', '@0'], '']);
86
- assert.deepStrictEqual(inspect(parser('a@0'), ctx), [['a', '@0'], '']);
87
- assert.deepStrictEqual(inspect(parser('A@0'), ctx), [['A', '@0'], '']);
88
- assert.deepStrictEqual(inspect(parser('aA@0'), ctx), [['aA', '@0'], '']);
89
- assert.deepStrictEqual(inspect(parser(' @0'), ctx), [[' ', '@0'], '']);
90
- assert.deepStrictEqual(inspect(parser('@@0'), ctx), [['@', '@0'], '']);
80
+ assert.deepStrictEqual(inspect(parser, input('@0', new Context())), [['@0'], '']);
81
+ assert.deepStrictEqual(inspect(parser, input('_@0', new Context())), [['_', '@0'], '']);
82
+ assert.deepStrictEqual(inspect(parser, input('$@0', new Context())), [['$', '@0'], '']);
83
+ assert.deepStrictEqual(inspect(parser, input('+@0', new Context())), [['+', '@0'], '']);
84
+ assert.deepStrictEqual(inspect(parser, input('-@0', new Context())), [['-', '@0'], '']);
85
+ assert.deepStrictEqual(inspect(parser, input('0@0', new Context())), [['0', '@0'], '']);
86
+ assert.deepStrictEqual(inspect(parser, input('a@0', new Context())), [['a', '@0'], '']);
87
+ assert.deepStrictEqual(inspect(parser, input('A@0', new Context())), [['A', '@0'], '']);
88
+ assert.deepStrictEqual(inspect(parser, input('aA@0', new Context())), [['aA', '@0'], '']);
89
+ assert.deepStrictEqual(inspect(parser, input(' @0', new Context())), [[' ', '@0'], '']);
90
+ assert.deepStrictEqual(inspect(parser, input('@@0', new Context())), [['@', '@0'], '']);
91
91
  });
92
92
 
93
93
  it('hashtag', () => {
94
- assert.deepStrictEqual(inspect(parser('#0'), ctx), [['#0'], '']);
95
- assert.deepStrictEqual(inspect(parser('_#0'), ctx), [['_', '#0'], '']);
96
- assert.deepStrictEqual(inspect(parser('$#0'), ctx), [['$', '#0'], '']);
97
- assert.deepStrictEqual(inspect(parser('+#0'), ctx), [['+', '#0'], '']);
98
- assert.deepStrictEqual(inspect(parser('-#0'), ctx), [['-', '#0'], '']);
99
- assert.deepStrictEqual(inspect(parser('0#0'), ctx), [['0', '#0'], '']);
100
- assert.deepStrictEqual(inspect(parser('a#0'), ctx), [['a', '#0'], '']);
101
- assert.deepStrictEqual(inspect(parser('A#0'), ctx), [['A', '#0'], '']);
102
- assert.deepStrictEqual(inspect(parser('aA#0'), ctx), [['aA', '#0'], '']);
103
- assert.deepStrictEqual(inspect(parser(' #0'), ctx), [[' ', '#0'], '']);
104
- assert.deepStrictEqual(inspect(parser('##0'), ctx), [['#', '#0'], '']);
94
+ assert.deepStrictEqual(inspect(parser, input('#0', new Context())), [['#0'], '']);
95
+ assert.deepStrictEqual(inspect(parser, input('_#0', new Context())), [['_', '#0'], '']);
96
+ assert.deepStrictEqual(inspect(parser, input('$#0', new Context())), [['$', '#0'], '']);
97
+ assert.deepStrictEqual(inspect(parser, input('+#0', new Context())), [['+', '#0'], '']);
98
+ assert.deepStrictEqual(inspect(parser, input('-#0', new Context())), [['-', '#0'], '']);
99
+ assert.deepStrictEqual(inspect(parser, input('0#0', new Context())), [['0', '#0'], '']);
100
+ assert.deepStrictEqual(inspect(parser, input('a#0', new Context())), [['a', '#0'], '']);
101
+ assert.deepStrictEqual(inspect(parser, input('A#0', new Context())), [['A', '#0'], '']);
102
+ assert.deepStrictEqual(inspect(parser, input('aA#0', new Context())), [['aA', '#0'], '']);
103
+ assert.deepStrictEqual(inspect(parser, input(' #0', new Context())), [[' ', '#0'], '']);
104
+ assert.deepStrictEqual(inspect(parser, input('##0', new Context())), [['#', '#0'], '']);
105
105
  });
106
106
 
107
107
  it('anchor', () => {
108
- assert.deepStrictEqual(inspect(parser('>>0'), ctx), [['>', '>0'], '']);
109
- assert.deepStrictEqual(inspect(parser('_>>0'), ctx), [['_', '>', '>0'], '']);
110
- assert.deepStrictEqual(inspect(parser('$>>0'), ctx), [['$', '>', '>0'], '']);
111
- assert.deepStrictEqual(inspect(parser('+>>0'), ctx), [['+', '>', '>0'], '']);
112
- assert.deepStrictEqual(inspect(parser('->>0'), ctx), [['-', '>', '>0'], '']);
113
- assert.deepStrictEqual(inspect(parser('0>>0'), ctx), [['0', '>', '>0'], '']);
114
- assert.deepStrictEqual(inspect(parser('a>>0'), ctx), [['a', '>', '>0'], '']);
115
- assert.deepStrictEqual(inspect(parser('A>>0'), ctx), [['A', '>', '>0'], '']);
116
- assert.deepStrictEqual(inspect(parser('aA>>0'), ctx), [['aA', '>', '>0'], '']);
117
- assert.deepStrictEqual(inspect(parser(' >>0'), ctx), [[' ', '>', '>0'], '']);
118
- assert.deepStrictEqual(inspect(parser('>>>>0'), ctx), [['>', '>', '>', '>0'], '']);
108
+ assert.deepStrictEqual(inspect(parser, input('>>0', new Context())), [['>', '>0'], '']);
109
+ assert.deepStrictEqual(inspect(parser, input('_>>0', new Context())), [['_', '>', '>0'], '']);
110
+ assert.deepStrictEqual(inspect(parser, input('$>>0', new Context())), [['$', '>', '>0'], '']);
111
+ assert.deepStrictEqual(inspect(parser, input('+>>0', new Context())), [['+', '>', '>0'], '']);
112
+ assert.deepStrictEqual(inspect(parser, input('->>0', new Context())), [['-', '>', '>0'], '']);
113
+ assert.deepStrictEqual(inspect(parser, input('0>>0', new Context())), [['0', '>', '>0'], '']);
114
+ assert.deepStrictEqual(inspect(parser, input('a>>0', new Context())), [['a', '>', '>0'], '']);
115
+ assert.deepStrictEqual(inspect(parser, input('A>>0', new Context())), [['A', '>', '>0'], '']);
116
+ assert.deepStrictEqual(inspect(parser, input('aA>>0', new Context())), [['aA', '>', '>0'], '']);
117
+ assert.deepStrictEqual(inspect(parser, input(' >>0', new Context())), [[' ', '>', '>0'], '']);
118
+ assert.deepStrictEqual(inspect(parser, input('>>>>0', new Context())), [['>', '>', '>', '>0'], '']);
119
119
  });
120
120
 
121
121
  });
@@ -1,6 +1,6 @@
1
1
  import { TextParser, TxtParser } from '../source';
2
2
  import { Command } from '../context';
3
- import { List, Data } from '../../combinator/data/parser';
3
+ import { List, Node } from '../../combinator/data/parser';
4
4
  import { union, consume } from '../../combinator';
5
5
  import { html } from 'typed-dom/dom';
6
6
 
@@ -26,17 +26,17 @@ export const text: TextParser = input => {
26
26
  default:
27
27
  consume(1, context);
28
28
  context.position += 1;
29
- return new List([new Data(source.slice(position + 1, context.position))]);
29
+ return new List([new Node(source.slice(position + 1, context.position))]);
30
30
  }
31
31
  case '\r':
32
32
  consume(-1, context);
33
33
  return new List();
34
34
  case '\n':
35
35
  context.linebreak ||= source.length - position;
36
- return new List([new Data(html('br'))]);
36
+ return new List([new Node(html('br'))]);
37
37
  default:
38
38
  assert(char !== '\n');
39
- if (context.sequential) return new List([new Data(char)]);
39
+ if (context.sequential) return new List([new Node(char)]);
40
40
  nonWhitespace.lastIndex = position + 1;
41
41
  const s = canSkip(source, position);
42
42
  let i = s
@@ -55,7 +55,7 @@ export const text: TextParser = input => {
55
55
  const linestart = position === 0 || source[position - 1] === '\n';
56
56
  return position === context.position || s && !linestart || lineend
57
57
  ? new List()
58
- : new List([new Data(source.slice(position, context.position))]);
58
+ : new List([new Node(source.slice(position, context.position))]);
59
59
  }
60
60
  };
61
61
 
@@ -1,48 +1,48 @@
1
1
  import { unescsource } from './unescapable';
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/source/unescapable', () => {
7
8
  describe('unescsource', () => {
8
- const parser = (source: string) => some(unescsource)(input(source, ctx));
9
- const { context: ctx } = input('', {});
9
+ const parser = some(unescsource);
10
10
 
11
11
  it('invalid', () => {
12
- assert.deepStrictEqual(inspect(parser(''), ctx), undefined);
12
+ assert.deepStrictEqual(inspect(parser, input('', new Context())), undefined);
13
13
  });
14
14
 
15
15
  it('basic', () => {
16
- assert.deepStrictEqual(inspect(parser('a'), ctx), [['a'], '']);
17
- assert.deepStrictEqual(inspect(parser('ab'), ctx), [['ab'], '']);
18
- assert.deepStrictEqual(inspect(parser('a b c'), ctx), [['a', ' b', ' c'], '']);
19
- assert.deepStrictEqual(inspect(parser('09あいAZaz'), ctx), [['09', 'あいAZaz'], '']);
16
+ assert.deepStrictEqual(inspect(parser, input('a', new Context())), [['a'], '']);
17
+ assert.deepStrictEqual(inspect(parser, input('ab', new Context())), [['ab'], '']);
18
+ assert.deepStrictEqual(inspect(parser, input('a b c', new Context())), [['a', ' b', ' c'], '']);
19
+ assert.deepStrictEqual(inspect(parser, input('09あいAZaz', new Context())), [['09', 'あいAZaz'], '']);
20
20
  });
21
21
 
22
22
  it('space', () => {
23
- assert.deepStrictEqual(inspect(parser(' '), ctx), [[' '], '']);
24
- assert.deepStrictEqual(inspect(parser(' '), ctx), [[' '], '']);
25
- assert.deepStrictEqual(inspect(parser(' '), ctx), [[' '], '']);
26
- assert.deepStrictEqual(inspect(parser(' \n'), ctx), [[' ', '<br>'], '']);
27
- assert.deepStrictEqual(inspect(parser(' \n'), ctx), [[' ', '<br>'], '']);
28
- assert.deepStrictEqual(inspect(parser(' \n'), ctx), [[' ', '<br>'], '']);
23
+ assert.deepStrictEqual(inspect(parser, input(' ', new Context())), [[' '], '']);
24
+ assert.deepStrictEqual(inspect(parser, input(' ', new Context())), [[' '], '']);
25
+ assert.deepStrictEqual(inspect(parser, input(' ', new Context())), [[' '], '']);
26
+ assert.deepStrictEqual(inspect(parser, input(' \n', new Context())), [[' ', '<br>'], '']);
27
+ assert.deepStrictEqual(inspect(parser, input(' \n', new Context())), [[' ', '<br>'], '']);
28
+ assert.deepStrictEqual(inspect(parser, input(' \n', new Context())), [[' ', '<br>'], '']);
29
29
  });
30
30
 
31
31
  it('linebreak', () => {
32
- assert.deepStrictEqual(inspect(parser('\n\n'), ctx), [['<br>', '<br>'], '']);
32
+ assert.deepStrictEqual(inspect(parser, input('\n\n', new Context())), [['<br>', '<br>'], '']);
33
33
  });
34
34
 
35
35
  it('\\', () => {
36
- assert.deepStrictEqual(inspect(parser('\\'), ctx), [['\\'], '']);
37
- assert.deepStrictEqual(inspect(parser('\\\\'), ctx), [['\\', '\\'], '']);
38
- assert.deepStrictEqual(inspect(parser('\\\\\\'), ctx), [['\\', '\\', '\\'], '']);
39
- assert.deepStrictEqual(inspect(parser('\\ '), ctx), [['\\', ' '], '']);
40
- assert.deepStrictEqual(inspect(parser('\\_'), ctx), [['\\', '_'], '']);
41
- assert.deepStrictEqual(inspect(parser('\\0'), ctx), [['\\0'], '']);
42
- assert.deepStrictEqual(inspect(parser('\\a'), ctx), [['\\a'], '']);
43
- assert.deepStrictEqual(inspect(parser('\\`'), ctx), [['\\', '`'], '']);
44
- assert.deepStrictEqual(inspect(parser('\\ '), ctx), [['\\', ' '], '']);
45
- assert.deepStrictEqual(inspect(parser('\\\n'), ctx), [['\\', '<br>'], '']);
36
+ assert.deepStrictEqual(inspect(parser, input('\\', new Context())), [['\\'], '']);
37
+ assert.deepStrictEqual(inspect(parser, input('\\\\', new Context())), [['\\', '\\'], '']);
38
+ assert.deepStrictEqual(inspect(parser, input('\\\\\\', new Context())), [['\\', '\\', '\\'], '']);
39
+ assert.deepStrictEqual(inspect(parser, input('\\ ', new Context())), [['\\', ' '], '']);
40
+ assert.deepStrictEqual(inspect(parser, input('\\_', new Context())), [['\\', '_'], '']);
41
+ assert.deepStrictEqual(inspect(parser, input('\\0', new Context())), [['\\0'], '']);
42
+ assert.deepStrictEqual(inspect(parser, input('\\a', new Context())), [['\\a'], '']);
43
+ assert.deepStrictEqual(inspect(parser, input('\\`', new Context())), [['\\', '`'], '']);
44
+ assert.deepStrictEqual(inspect(parser, input('\\ ', new Context())), [['\\', ' '], '']);
45
+ assert.deepStrictEqual(inspect(parser, input('\\\n', new Context())), [['\\', '<br>'], '']);
46
46
  });
47
47
 
48
48
  });
@@ -1,6 +1,6 @@
1
1
  import { UnescapableSourceParser } from '../source';
2
2
  import { Command } from '../context';
3
- import { List, Data } from '../../combinator/data/parser';
3
+ import { List, Node } from '../../combinator/data/parser';
4
4
  import { consume } from '../../combinator';
5
5
  import { nonWhitespace, canSkip, next } from './text';
6
6
  import { html } from 'typed-dom/dom';
@@ -17,15 +17,15 @@ export const unescsource: UnescapableSourceParser = ({ context }) => {
17
17
  case Command.Escape:
18
18
  consume(1, context);
19
19
  context.position += 1;
20
- return new List([new Data(source.slice(position + 1, position + 2))]);
20
+ return new List([new Node(source.slice(position + 1, position + 2))]);
21
21
  case '\r':
22
22
  return new List();
23
23
  case '\n':
24
24
  context.linebreak ||= source.length - position;
25
- return new List([new Data(html('br'))]);
25
+ return new List([new Node(html('br'))]);
26
26
  default:
27
27
  assert(char !== '\n');
28
- if (context.sequential) return new List([new Data(char)]);
28
+ if (context.sequential) return new List([new Node(char)]);
29
29
  nonWhitespace.lastIndex = position + 1;
30
30
  let i = canSkip(source, position)
31
31
  ? nonWhitespace.test(source)
@@ -36,6 +36,6 @@ export const unescsource: UnescapableSourceParser = ({ context }) => {
36
36
  i -= position;
37
37
  consume(i - 1, context);
38
38
  context.position += i - 1;
39
- return new List([new Data(source.slice(position, context.position))]);
39
+ return new List([new Node(source.slice(position, context.position))]);
40
40
  }
41
41
  };