securemark 0.250.0 → 0.253.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (50) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/design.md +17 -11
  3. package/dist/index.js +120 -139
  4. package/index.d.ts +1 -1
  5. package/markdown.d.ts +8 -18
  6. package/package.json +1 -1
  7. package/src/combinator/control/manipulation/indent.ts +15 -12
  8. package/src/combinator/control/manipulation/match.ts +2 -3
  9. package/src/combinator/data/parser.ts +1 -1
  10. package/src/parser/api/bind.test.ts +6 -6
  11. package/src/parser/api/parse.test.ts +8 -1
  12. package/src/parser/api/parse.ts +1 -1
  13. package/src/parser/block/blockquote.test.ts +31 -31
  14. package/src/parser/block/blockquote.ts +1 -3
  15. package/src/parser/block/extension/aside.test.ts +3 -3
  16. package/src/parser/block/extension/aside.ts +0 -3
  17. package/src/parser/block/extension/example.test.ts +11 -11
  18. package/src/parser/block/extension/example.ts +1 -3
  19. package/src/parser/block/extension/fig.test.ts +5 -5
  20. package/src/parser/block/extension/figure.test.ts +2 -2
  21. package/src/parser/block/extension/figure.ts +2 -4
  22. package/src/parser/block/extension/message.ts +0 -2
  23. package/src/parser/block/ilist.ts +4 -5
  24. package/src/parser/block/olist.ts +26 -22
  25. package/src/parser/block/paragraph.test.ts +3 -3
  26. package/src/parser/block/ulist.ts +3 -13
  27. package/src/parser/block.ts +0 -3
  28. package/src/parser/inline/annotation.test.ts +18 -18
  29. package/src/parser/inline/annotation.ts +1 -1
  30. package/src/parser/inline/autolink/hashnum.ts +1 -1
  31. package/src/parser/inline/autolink/hashtag.ts +5 -5
  32. package/src/parser/inline/autolink.ts +2 -2
  33. package/src/parser/inline/code.ts +1 -1
  34. package/src/parser/inline/comment.ts +1 -1
  35. package/src/parser/inline/extension/index.ts +4 -5
  36. package/src/parser/inline/html.ts +3 -3
  37. package/src/parser/inline/reference.test.ts +58 -58
  38. package/src/parser/inline/reference.ts +4 -4
  39. package/src/parser/inline.test.ts +20 -20
  40. package/src/parser/locale.test.ts +1 -1
  41. package/src/parser/processor/figure.test.ts +3 -3
  42. package/src/parser/processor/figure.ts +2 -2
  43. package/src/parser/processor/footnote.test.ts +60 -2
  44. package/src/parser/processor/footnote.ts +53 -24
  45. package/src/parser/source/str.ts +2 -2
  46. package/src/parser/util.ts +14 -10
  47. package/src/util/info.ts +4 -4
  48. package/src/util/toc.ts +12 -16
  49. package/src/parser/block/indentblock.test.ts +0 -30
  50. package/src/parser/block/indentblock.ts +0 -13
package/index.d.ts CHANGED
@@ -33,7 +33,7 @@ export interface ParserSettings {
33
33
  // For editing.
34
34
  readonly caches?: Partial<Caches>;
35
35
  readonly footnotes: {
36
- readonly annotations: HTMLOListElement;
36
+ readonly annotations?: HTMLOListElement;
37
37
  readonly references: HTMLOListElement;
38
38
  };
39
39
  readonly chunk?: boolean;
package/markdown.d.ts CHANGED
@@ -77,7 +77,6 @@ export namespace MarkdownParser {
77
77
  BlockParser.IListParser,
78
78
  BlockParser.DListParser,
79
79
  BlockParser.TableParser,
80
- BlockParser.IndentBlockParser,
81
80
  BlockParser.CodeBlockParser,
82
81
  BlockParser.MathBlockParser,
83
82
  BlockParser.ExtensionParser,
@@ -283,13 +282,6 @@ export namespace MarkdownParser {
283
282
  }
284
283
  }
285
284
  }
286
- export interface IndentBlockParser extends
287
- // abc
288
- Block<'indentblock'>,
289
- Parser<HTMLPreElement, Context, [
290
- CodeBlockParser,
291
- ]> {
292
- }
293
285
  export interface CodeBlockParser extends
294
286
  // ```js index.js
295
287
  // abc
@@ -358,7 +350,6 @@ export namespace MarkdownParser {
358
350
  UListParser,
359
351
  OListParser,
360
352
  BlockParser.TableParser,
361
- IndentBlockParser,
362
353
  CodeBlockParser,
363
354
  MathBlockParser,
364
355
  ExampleParser,
@@ -503,7 +494,6 @@ export namespace MarkdownParser {
503
494
  BlockParser.OListParser,
504
495
  BlockParser.IListParser,
505
496
  BlockParser.TableParser,
506
- BlockParser.IndentBlockParser,
507
497
  BlockParser.CodeBlockParser,
508
498
  BlockParser.MathBlockParser,
509
499
  BlockParser.SidefenceParser,
@@ -668,13 +658,6 @@ export namespace MarkdownParser {
668
658
  }
669
659
  export namespace InlineParser {
670
660
  interface Inline<T extends string> extends Markdown<`inline/${T}`> { }
671
- export interface AnnotationParser extends
672
- // ((abc))
673
- Inline<'annotation'>,
674
- Parser<HTMLElement, Context, [
675
- InlineParser,
676
- ]> {
677
- }
678
661
  export interface EscapeParser extends
679
662
  // ****
680
663
  // +++
@@ -685,6 +668,13 @@ export namespace MarkdownParser {
685
668
  SourceParser.StrParser,
686
669
  ]> {
687
670
  }
671
+ export interface AnnotationParser extends
672
+ // ((abc))
673
+ Inline<'annotation'>,
674
+ Parser<HTMLElement, Context, [
675
+ InlineParser,
676
+ ]> {
677
+ }
688
678
  export interface ReferenceParser extends
689
679
  // [[abc]]
690
680
  // [[^abbr]]
@@ -692,7 +682,7 @@ export namespace MarkdownParser {
692
682
  Inline<'reference'>,
693
683
  Parser<HTMLElement, Context, [
694
684
  ReferenceParser.AbbrParser,
695
- SourceParser.StrParser,
685
+ InlineParser,
696
686
  InlineParser,
697
687
  ]> {
698
688
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "securemark",
3
- "version": "0.250.0",
3
+ "version": "0.253.0",
4
4
  "description": "Secure markdown renderer working on browsers for user input data.",
5
5
  "private": false,
6
6
  "homepage": "https://github.com/falsandtru/securemark",
@@ -9,25 +9,28 @@ import { open } from './surround';
9
9
  import { memoize } from 'spica/memoize';
10
10
 
11
11
  export function indent<P extends Parser<unknown>>(parser: P, separation?: boolean): P;
12
- export function indent<T>(parser: Parser<T>, separation = false): Parser<T> {
12
+ export function indent<P extends Parser<unknown>>(opener: RegExp, parser: P, separation?: boolean): P;
13
+ export function indent<T>(opener: RegExp | Parser<T>, parser?: Parser<T> | boolean, separation = false): Parser<T> {
14
+ if (typeof opener === 'function') return indent(/^([ \t])\1*/, opener, parser as boolean);
13
15
  assert(parser);
14
16
  return bind(block(match(
15
- /^(?=(([ \t])\2*))/,
17
+ opener,
16
18
  memoize(
17
- ([, indent]) =>
18
- some(line(open(indent, source => [[unline(source)], '']))),
19
- ([, indent]) => indent.length * 2 + +(indent[0] === ' '), [])), separation),
20
- (nodes, rest, context) => {
21
- const result = parser(nodes.join('\n'), context);
19
+ ([indent]) =>
20
+ some(line(open(indent, source => [[source], '']))),
21
+ ([indent]) => indent.length * 2 + +(indent[0] === ' '), [])), separation),
22
+ (lines, rest, context) => {
23
+ assert(parser = parser as Parser<T>);
24
+ const result = parser(trimBlockEnd(lines.join('')), context);
22
25
  return result && exec(result) === ''
23
26
  ? [eval(result), rest]
24
27
  : undefined;
25
28
  });
26
29
  }
27
30
 
28
- function unline(line: string): string {
29
- return line === ''
30
- || line[line.length - 1] !== '\n'
31
- ? line
32
- : line.slice(0, -1);
31
+ function trimBlockEnd(block: string): string {
32
+ return block === ''
33
+ || block[block.length - 1] !== '\n'
34
+ ? block
35
+ : block.slice(0, -1);
33
36
  }
@@ -9,11 +9,10 @@ export function match<T>(pattern: RegExp, f: (matched: RegExpMatchArray) => Pars
9
9
  const param = source.match(pattern);
10
10
  if (!param) return;
11
11
  assert(source.startsWith(param[0]));
12
- const rest = source.slice(param[0].length);
13
- const result = f(param)(rest, context);
12
+ const result = f(param)(source, context);
14
13
  assert(check(source, result, false));
15
14
  if (!result) return;
16
- return exec(result).length < source.length && exec(result).length <= rest.length
15
+ return exec(result).length < source.length && exec(result).length <= source.length
17
16
  ? result
18
17
  : undefined;
19
18
  };
@@ -14,7 +14,7 @@ export interface Ctx {
14
14
  delimiters?: Delimiters;
15
15
  }
16
16
  export type Tree<P extends Parser<unknown>> = P extends Parser<infer T> ? T : never;
17
- export type SubParsers<P extends Parser<unknown>> = P extends Parser<unknown, any, infer D> ? D : never;
17
+ export type SubParsers<P extends Parser<unknown>> = P extends Parser<unknown, Ctx, infer D> ? D : never;
18
18
  export type Context<P extends Parser<unknown>> = P extends Parser<unknown, infer C> ? C : never;
19
19
  export type SubTree<P extends Parser<unknown>> = ExtractSubTree<SubParsers<P>>;
20
20
  export type IntermediateParser<P extends Parser<unknown>> = Parser<SubTree<P>, Context<P>, SubParsers<P>>;
@@ -175,17 +175,17 @@ describe('Unit: parser/api/bind', () => {
175
175
  assert.deepStrictEqual(
176
176
  [...el.children].map(el => el.outerHTML),
177
177
  [
178
- html('p', [html('sup', { class: "annotation" }, '1'),]).outerHTML,
179
- html('p', [html('sup', { class: "annotation" }, '2'),]).outerHTML,
178
+ html('p', [html('sup', { class: "annotation" }, [html('span', '1')]),]).outerHTML,
179
+ html('p', [html('sup', { class: "annotation" }, [html('span', '2')]),]).outerHTML,
180
180
  ]);
181
181
  inspect(iter, 1);
182
182
  el.appendChild(chunk);
183
183
  assert.deepStrictEqual(
184
184
  [...el.children].map(el => el.outerHTML),
185
185
  [
186
- html('p', [html('sup', { class: "annotation" }, '1'),]).outerHTML,
187
- html('p', [html('sup', { class: "annotation" }, '2'),]).outerHTML,
188
- html('p', [html('sup', { class: "annotation" }, '3'),]).outerHTML,
186
+ html('p', [html('sup', { class: "annotation" }, [html('span', '1')]),]).outerHTML,
187
+ html('p', [html('sup', { class: "annotation" }, [html('span', '2')]),]).outerHTML,
188
+ html('p', [html('sup', { class: "annotation" }, [html('span', '3')]),]).outerHTML,
189
189
  ]);
190
190
  inspect(iter);
191
191
  assert.deepStrictEqual(
@@ -211,7 +211,7 @@ describe('Unit: parser/api/bind', () => {
211
211
  ]).outerHTML,
212
212
  ]);
213
213
  assert.deepStrictEqual(
214
- cfgs.footnotes.annotations.outerHTML,
214
+ cfgs.footnotes.annotations?.outerHTML,
215
215
  html('ol', [
216
216
  html('li', { id: 'annotation:def:1' }, [
217
217
  '1',
@@ -80,6 +80,12 @@ describe('Unit: parser/api/parse', () => {
80
80
  ['<p>a<br>\\<br>b</p>']);
81
81
  });
82
82
 
83
+ it('indent', () => {
84
+ assert.deepStrictEqual(
85
+ [...parse('\ta').children].map(el => el.outerHTML),
86
+ ['<p>\ta</p>']);
87
+ });
88
+
83
89
  it('url', () => {
84
90
  assert.deepStrictEqual(
85
91
  [...parse([
@@ -131,6 +137,7 @@ describe('Unit: parser/api/parse', () => {
131
137
  '<p><a href="https://source/x/a" target="_blank"><img class="media" data-src="https://source/x/a" alt=""></a></p>',
132
138
  '<p><a href="/z/a" target="_blank"><img class="media" data-src="/z/a" alt=""></a></p>',
133
139
  '<p><a href="https://source/a" target="_blank"><img class="media" data-src="https://source/a" alt=""></a></p>',
140
+ '<ol class="annotations"><li id="annotation:def:1" data-marker="*1">a<sup><a href="#annotation:ref:1">^1</a></sup></li></ol>',
134
141
  ]);
135
142
  assert.deepStrictEqual(
136
143
  [...parse([
@@ -191,7 +198,7 @@ describe('Unit: parser/api/parse', () => {
191
198
  [
192
199
  `<aside class="header"><details open=""><summary>Header</summary><span class="field" data-name="url" data-value="https://example/x"><span class="field-name">URL</span>: <span class="field-value">https://example/x</span>\n</span></details></aside>`,
193
200
  '<pre class="invalid" translate="no" data-invalid-syntax="header" data-invalid-type="syntax" data-invalid-message="Invalid syntax">---\nURL: https://example/y\n---\n</pre>',
194
- '<aside class="example" data-type="markdown"><pre translate="no">---\nURL: https://example/y\n---\n\n{#}</pre><hr><section><aside class="header"><details open=""><summary>Header</summary><span class="field" data-name="url" data-value="https://example/y"><span class="field-name">URL</span>: <span class="field-value">https://example/y</span>\n</span></details></aside><p><a href="https://example/y#" target="_blank">#</a></p><ol class="annotations"></ol><ol class="references"></ol></section></aside>',
201
+ '<aside class="example" data-type="markdown"><pre translate="no">---\nURL: https://example/y\n---\n\n{#}</pre><hr><section><aside class="header"><details open=""><summary>Header</summary><span class="field" data-name="url" data-value="https://example/y"><span class="field-name">URL</span>: <span class="field-value">https://example/y</span>\n</span></details></aside><p><a href="https://example/y#" target="_blank">#</a></p><ol class="references"></ol></section></aside>',
195
202
  '<p><a href="https://example/x#" target="_blank">#</a></p>',
196
203
  ]);
197
204
  });
@@ -40,7 +40,7 @@ export function parse(source: string, opts: Options = {}, context?: MarkdownPars
40
40
  for (const _ of figure(node, opts.footnotes, context));
41
41
  for (const _ of footnote(node, opts.footnotes, context));
42
42
  assert(opts.id !== '' || !node.querySelector('[id], .index[href], .label[href], .annotation > a[href], .reference > a[href]'));
43
- assert(opts.id !== '' || !opts.footnotes?.annotations.querySelector('[id], .index[href], .label[href]'));
43
+ assert(opts.id !== '' || !opts.footnotes?.annotations?.querySelector('[id], .index[href], .label[href]'));
44
44
  assert(opts.id !== '' || !opts.footnotes?.references.querySelector('[id], .index[href], .label[href]'));
45
45
  return node;
46
46
  }
@@ -65,38 +65,38 @@ describe('Unit: parser/block/blockquote', () => {
65
65
  assert.deepStrictEqual(inspect(parser('!')), undefined);
66
66
  assert.deepStrictEqual(inspect(parser('!>')), undefined);
67
67
  assert.deepStrictEqual(inspect(parser('!> ')), [['<blockquote></blockquote>'], '']);
68
- assert.deepStrictEqual(inspect(parser('!> \\')), [['<blockquote><section><p>\\</p><ol class="annotations"></ol><ol class="references"></ol></section></blockquote>'], '']);
69
- assert.deepStrictEqual(inspect(parser('!> \\\n')), [['<blockquote><section><p>\\</p><ol class="annotations"></ol><ol class="references"></ol></section></blockquote>'], '']);
70
- assert.deepStrictEqual(inspect(parser('!> a')), [['<blockquote><section><p>a</p><ol class="annotations"></ol><ol class="references"></ol></section></blockquote>'], '']);
71
- assert.deepStrictEqual(inspect(parser('!> a\n')), [['<blockquote><section><p>a</p><ol class="annotations"></ol><ol class="references"></ol></section></blockquote>'], '']);
72
- assert.deepStrictEqual(inspect(parser('!> a\\\nb')), [['<blockquote><section><p>a<span class="linebreak"> </span>b</p><ol class="annotations"></ol><ol class="references"></ol></section></blockquote>'], '']);
73
- assert.deepStrictEqual(inspect(parser('!> *a\nb*')), [['<blockquote><section><p><em>a<br>b</em></p><ol class="annotations"></ol><ol class="references"></ol></section></blockquote>'], '']);
74
- assert.deepStrictEqual(inspect(parser('!> *a\n> b*')), [['<blockquote><section><p><em>a<br>b</em></p><ol class="annotations"></ol><ol class="references"></ol></section></blockquote>'], '']);
75
- assert.deepStrictEqual(inspect(parser('!> a \n b c ')), [['<blockquote><section><p> a<br> b c</p><ol class="annotations"></ol><ol class="references"></ol></section></blockquote>'], '']);
76
- assert.deepStrictEqual(inspect(parser('!>> a')), [['<blockquote><blockquote><section><p>a</p><ol class="annotations"></ol><ol class="references"></ol></section></blockquote></blockquote>'], '']);
77
- assert.deepStrictEqual(inspect(parser('!>> a\n> b')), [['<blockquote><blockquote><section><p>a</p><ol class="annotations"></ol><ol class="references"></ol></section></blockquote><section><p>b</p><ol class="annotations"></ol><ol class="references"></ol></section></blockquote>'], '']);
78
- assert.deepStrictEqual(inspect(parser('!> - a')), [['<blockquote><section><ul><li>a</li></ul><ol class="annotations"></ol><ol class="references"></ol></section></blockquote>'], '']);
79
- assert.deepStrictEqual(inspect(parser('!> ```\na\n```')), [['<blockquote><section><pre class="text">a</pre><ol class="annotations"></ol><ol class="references"></ol></section></blockquote>'], '']);
80
- assert.deepStrictEqual(inspect(parser('!> ```\n> a\n```')), [['<blockquote><section><pre class="text">a</pre><ol class="annotations"></ol><ol class="references"></ol></section></blockquote>'], '']);
81
- assert.deepStrictEqual(inspect(parser('!> ```\n> a\n> ```')), [['<blockquote><section><pre class="text">a</pre><ol class="annotations"></ol><ol class="references"></ol></section></blockquote>'], '']);
82
- assert.deepStrictEqual(inspect(parser('!> ```\n> a\n> \n> b\n> ```')), [['<blockquote><section><pre class="text">a<br><br>b</pre><ol class="annotations"></ol><ol class="references"></ol></section></blockquote>'], '']);
83
- assert.deepStrictEqual(inspect(parser('!> a\n>\n> b')), [['<blockquote><section><p>a</p><p>b</p><ol class="annotations"></ol><ol class="references"></ol></section></blockquote>'], '']);
84
- assert.deepStrictEqual(inspect(parser('!> > a')), [['<blockquote><section><blockquote><pre>a</pre></blockquote><ol class="annotations"></ol><ol class="references"></ol></section></blockquote>'], '']);
85
- assert.deepStrictEqual(inspect(parser('!> > a\n> b')), [['<blockquote><section><blockquote><pre>a<br>b</pre></blockquote><ol class="annotations"></ol><ol class="references"></ol></section></blockquote>'], '']);
86
- assert.deepStrictEqual(inspect(parser('!> > a\n> > b')), [['<blockquote><section><blockquote><pre>a<br>b</pre></blockquote><ol class="annotations"></ol><ol class="references"></ol></section></blockquote>'], '']);
87
- assert.deepStrictEqual(inspect(parser('!> > a\n>> b')), [['<blockquote><section><blockquote><pre>a</pre></blockquote><ol class="annotations"></ol><ol class="references"></ol></section><blockquote><section><p>b</p><ol class="annotations"></ol><ol class="references"></ol></section></blockquote></blockquote>'], '']);
88
- assert.deepStrictEqual(inspect(parser('!>> > a\n> b')), [['<blockquote><blockquote><section><blockquote><pre>a</pre></blockquote><ol class="annotations"></ol><ol class="references"></ol></section></blockquote><section><p>b</p><ol class="annotations"></ol><ol class="references"></ol></section></blockquote>'], '']);
89
- assert.deepStrictEqual(inspect(parser('!> !> a')), [['<blockquote><section><blockquote><section><p>a</p><ol class="annotations"></ol><ol class="references"></ol></section></blockquote><ol class="annotations"></ol><ol class="references"></ol></section></blockquote>'], '']);
90
- assert.deepStrictEqual(inspect(parser('!> \na')), [['<blockquote><section><p>a</p><ol class="annotations"></ol><ol class="references"></ol></section></blockquote>'], '']);
68
+ assert.deepStrictEqual(inspect(parser('!> \\')), [['<blockquote><section><p>\\</p><ol class="references"></ol></section></blockquote>'], '']);
69
+ assert.deepStrictEqual(inspect(parser('!> \\\n')), [['<blockquote><section><p>\\</p><ol class="references"></ol></section></blockquote>'], '']);
70
+ assert.deepStrictEqual(inspect(parser('!> a')), [['<blockquote><section><p>a</p><ol class="references"></ol></section></blockquote>'], '']);
71
+ assert.deepStrictEqual(inspect(parser('!> a\n')), [['<blockquote><section><p>a</p><ol class="references"></ol></section></blockquote>'], '']);
72
+ assert.deepStrictEqual(inspect(parser('!> a\\\nb')), [['<blockquote><section><p>a<span class="linebreak"> </span>b</p><ol class="references"></ol></section></blockquote>'], '']);
73
+ assert.deepStrictEqual(inspect(parser('!> *a\nb*')), [['<blockquote><section><p><em>a<br>b</em></p><ol class="references"></ol></section></blockquote>'], '']);
74
+ assert.deepStrictEqual(inspect(parser('!> *a\n> b*')), [['<blockquote><section><p><em>a<br>b</em></p><ol class="references"></ol></section></blockquote>'], '']);
75
+ assert.deepStrictEqual(inspect(parser('!> a \n b c ')), [['<blockquote><section><p> a<br> b c</p><ol class="references"></ol></section></blockquote>'], '']);
76
+ assert.deepStrictEqual(inspect(parser('!>> a')), [['<blockquote><blockquote><section><p>a</p><ol class="references"></ol></section></blockquote></blockquote>'], '']);
77
+ assert.deepStrictEqual(inspect(parser('!>> a\n> b')), [['<blockquote><blockquote><section><p>a</p><ol class="references"></ol></section></blockquote><section><p>b</p><ol class="references"></ol></section></blockquote>'], '']);
78
+ assert.deepStrictEqual(inspect(parser('!> - a')), [['<blockquote><section><ul><li>a</li></ul><ol class="references"></ol></section></blockquote>'], '']);
79
+ assert.deepStrictEqual(inspect(parser('!> ```\na\n```')), [['<blockquote><section><pre class="text">a</pre><ol class="references"></ol></section></blockquote>'], '']);
80
+ assert.deepStrictEqual(inspect(parser('!> ```\n> a\n```')), [['<blockquote><section><pre class="text">a</pre><ol class="references"></ol></section></blockquote>'], '']);
81
+ assert.deepStrictEqual(inspect(parser('!> ```\n> a\n> ```')), [['<blockquote><section><pre class="text">a</pre><ol class="references"></ol></section></blockquote>'], '']);
82
+ assert.deepStrictEqual(inspect(parser('!> ```\n> a\n> \n> b\n> ```')), [['<blockquote><section><pre class="text">a<br><br>b</pre><ol class="references"></ol></section></blockquote>'], '']);
83
+ assert.deepStrictEqual(inspect(parser('!> a\n>\n> b')), [['<blockquote><section><p>a</p><p>b</p><ol class="references"></ol></section></blockquote>'], '']);
84
+ assert.deepStrictEqual(inspect(parser('!> > a')), [['<blockquote><section><blockquote><pre>a</pre></blockquote><ol class="references"></ol></section></blockquote>'], '']);
85
+ assert.deepStrictEqual(inspect(parser('!> > a\n> b')), [['<blockquote><section><blockquote><pre>a<br>b</pre></blockquote><ol class="references"></ol></section></blockquote>'], '']);
86
+ assert.deepStrictEqual(inspect(parser('!> > a\n> > b')), [['<blockquote><section><blockquote><pre>a<br>b</pre></blockquote><ol class="references"></ol></section></blockquote>'], '']);
87
+ assert.deepStrictEqual(inspect(parser('!> > a\n>> b')), [['<blockquote><section><blockquote><pre>a</pre></blockquote><ol class="references"></ol></section><blockquote><section><p>b</p><ol class="references"></ol></section></blockquote></blockquote>'], '']);
88
+ assert.deepStrictEqual(inspect(parser('!>> > a\n> b')), [['<blockquote><blockquote><section><blockquote><pre>a</pre></blockquote><ol class="references"></ol></section></blockquote><section><p>b</p><ol class="references"></ol></section></blockquote>'], '']);
89
+ assert.deepStrictEqual(inspect(parser('!> !> a')), [['<blockquote><section><blockquote><section><p>a</p><ol class="references"></ol></section></blockquote><ol class="references"></ol></section></blockquote>'], '']);
90
+ assert.deepStrictEqual(inspect(parser('!> \na')), [['<blockquote><section><p>a</p><ol class="references"></ol></section></blockquote>'], '']);
91
91
  assert.deepStrictEqual(inspect(parser('!>\n')), undefined);
92
- assert.deepStrictEqual(inspect(parser('!>\na')), [['<blockquote><section><p>a</p><ol class="annotations"></ol><ol class="references"></ol></section></blockquote>'], '']);
93
- assert.deepStrictEqual(inspect(parser('!>\n a')), [['<blockquote><section><p> a</p><ol class="annotations"></ol><ol class="references"></ol></section></blockquote>'], '']);
94
- assert.deepStrictEqual(inspect(parser('!>\n>')), [['<blockquote><section><ol class="annotations"></ol><ol class="references"></ol></section></blockquote>'], '']);
95
- assert.deepStrictEqual(inspect(parser('!>\n> a')), [['<blockquote><section><p>a</p><ol class="annotations"></ol><ol class="references"></ol></section></blockquote>'], '']);
96
- assert.deepStrictEqual(inspect(parser('!>> ## a\n> ## a')), [['<blockquote><blockquote><section><h2>a</h2><ol class="annotations"></ol><ol class="references"></ol></section></blockquote><section><h2>a</h2><ol class="annotations"></ol><ol class="references"></ol></section></blockquote>'], '']);
97
- assert.deepStrictEqual(inspect(parser('!>> ~ a\n> ~ a')), [['<blockquote><blockquote><section><dl><dt>a</dt><dd></dd></dl><ol class="annotations"></ol><ol class="references"></ol></section></blockquote><section><dl><dt>a</dt><dd></dd></dl><ol class="annotations"></ol><ol class="references"></ol></section></blockquote>'], '']);
98
- assert.deepStrictEqual(inspect(parser('!>> ~~~figure $test-a\n>> > \n>>\n~~~\n> ~~~figure $test-a\n> > \n>\n[#a]\n~~~')), [['<blockquote><blockquote><section><figure data-type="quote" data-label="test-a" data-group="test" data-number="1"><figcaption><span class="figindex">Test 1. </span></figcaption><div><blockquote></blockquote></div></figure><ol class="annotations"></ol><ol class="references"></ol></section></blockquote><section><figure data-type="quote" data-label="test-a" data-group="test" data-number="1"><figcaption><span class="figindex">Test 1. </span><a class="index">a</a></figcaption><div><blockquote></blockquote></div></figure><ol class="annotations"></ol><ol class="references"></ol></section></blockquote>'], '']);
99
- assert.deepStrictEqual(inspect(parser('!>> ((a))\n> ((a))')), [['<blockquote><blockquote><section><p><sup class="annotation disabled" title="a"><span hidden="">a</span><a>*1</a></sup></p><ol class="annotations"><li>a<sup><a>^1</a></sup></li></ol><ol class="references"></ol></section></blockquote><section><p><sup class="annotation disabled" title="a"><span hidden="">a</span><a>*1</a></sup></p><ol class="annotations"><li>a<sup><a>^1</a></sup></li></ol><ol class="references"></ol></section></blockquote>'], '']);
92
+ assert.deepStrictEqual(inspect(parser('!>\na')), [['<blockquote><section><p>a</p><ol class="references"></ol></section></blockquote>'], '']);
93
+ assert.deepStrictEqual(inspect(parser('!>\n a')), [['<blockquote><section><p> a</p><ol class="references"></ol></section></blockquote>'], '']);
94
+ assert.deepStrictEqual(inspect(parser('!>\n>')), [['<blockquote><section><ol class="references"></ol></section></blockquote>'], '']);
95
+ assert.deepStrictEqual(inspect(parser('!>\n> a')), [['<blockquote><section><p>a</p><ol class="references"></ol></section></blockquote>'], '']);
96
+ assert.deepStrictEqual(inspect(parser('!>> ## a\n> ## a')), [['<blockquote><blockquote><section><h2>a</h2><ol class="references"></ol></section></blockquote><section><h2>a</h2><ol class="references"></ol></section></blockquote>'], '']);
97
+ assert.deepStrictEqual(inspect(parser('!>> ~ a\n> ~ a')), [['<blockquote><blockquote><section><dl><dt>a</dt><dd></dd></dl><ol class="references"></ol></section></blockquote><section><dl><dt>a</dt><dd></dd></dl><ol class="references"></ol></section></blockquote>'], '']);
98
+ assert.deepStrictEqual(inspect(parser('!>> ~~~figure $test-a\n>> > \n>>\n~~~\n> ~~~figure $test-a\n> > \n>\n[#a]\n~~~')), [['<blockquote><blockquote><section><figure data-type="quote" data-label="test-a" data-group="test" data-number="1"><figcaption><span class="figindex">Test 1. </span></figcaption><div><blockquote></blockquote></div></figure><ol class="references"></ol></section></blockquote><section><figure data-type="quote" data-label="test-a" data-group="test" data-number="1"><figcaption><span class="figindex">Test 1. </span><a class="index">a</a></figcaption><div><blockquote></blockquote></div></figure><ol class="references"></ol></section></blockquote>'], '']);
99
+ assert.deepStrictEqual(inspect(parser('!>> ((a))\n> ((a))')), [['<blockquote><blockquote><section><p><sup class="annotation disabled" title="a"><span hidden="">a</span><a>*1</a></sup></p><ol class="annotations"><li data-marker="*1">a<sup><a>^1</a></sup></li></ol><ol class="references"></ol></section></blockquote><section><p><sup class="annotation disabled" title="a"><span hidden="">a</span><a>*1</a></sup></p><ol class="annotations"><li data-marker="*1">a<sup><a>^1</a></sup></li></ol><ol class="references"></ol></section></blockquote>'], '']);
100
100
  });
101
101
 
102
102
  });
@@ -38,16 +38,14 @@ const markdown: BlockquoteParser.MarkdownParser = lazy(() => fmap(
38
38
  rewrite(
39
39
  some(contentline, opener),
40
40
  convert(unindent, (source, context) => {
41
- const annotations = html('ol', { class: 'annotations' });
42
41
  const references = html('ol', { class: 'references' });
43
42
  const document = parse(source, {
44
43
  id: '',
45
44
  footnotes: {
46
- annotations,
47
45
  references,
48
46
  },
49
47
  }, context);
50
- return [[html('section', [document, annotations, references])], ''];
48
+ return [[html('section', [document, references])], ''];
51
49
  }))),
52
50
  ]))),
53
51
  ns => [html('blockquote', ns)]));
@@ -14,9 +14,9 @@ describe('Unit: parser/block/extension/aside', () => {
14
14
  });
15
15
 
16
16
  it('valid', () => {
17
- assert.deepStrictEqual(inspect(parser('~~~aside\n# 0\n~~~')), [['<aside id="index:0" class="aside"><h1>0</h1><ol class="annotations"></ol><ol class="references"></ol></aside>'], '']);
18
- assert.deepStrictEqual(inspect(parser('~~~aside\n## 0\n~~~')), [['<aside id="index:0" class="aside"><h2>0</h2><ol class="annotations"></ol><ol class="references"></ol></aside>'], '']);
19
- assert.deepStrictEqual(inspect(parser('~~~aside\n# 0\n\n$-0.0\n\n## 1\n\n$test-a\n> \n~~~')), [['<aside id="index:0" class="aside"><h1>0</h1><figure data-label="$-0.0" data-group="$" hidden="" data-number="0.0"></figure><h2>1</h2><figure data-type="quote" data-label="test-a" data-group="test" data-number="1.1"><figcaption><span class="figindex">Test 1.1. </span></figcaption><div><blockquote></blockquote></div></figure><ol class="annotations"></ol><ol class="references"></ol></aside>'], '']);
17
+ assert.deepStrictEqual(inspect(parser('~~~aside\n# 0\n~~~')), [['<aside id="index:0" class="aside"><h1>0</h1><ol class="references"></ol></aside>'], '']);
18
+ assert.deepStrictEqual(inspect(parser('~~~aside\n## 0\n~~~')), [['<aside id="index:0" class="aside"><h2>0</h2><ol class="references"></ol></aside>'], '']);
19
+ assert.deepStrictEqual(inspect(parser('~~~aside\n# 0\n\n$-0.0\n\n## 1\n\n$test-a\n> \n~~~')), [['<aside id="index:0" class="aside"><h1>0</h1><figure data-label="$-0.0" data-group="$" hidden="" data-number="0.0"></figure><h2>1</h2><figure data-type="quote" data-label="test-a" data-group="test" data-number="1.1"><figcaption><span class="figindex">Test 1.1. </span></figcaption><div><blockquote></blockquote></div></figure><ol class="references"></ol></aside>'], '']);
20
20
  });
21
21
 
22
22
  });
@@ -18,12 +18,10 @@ export const aside: ExtensionParser.AsideParser = creator(100, block(validate('~
18
18
  overflow ? `Invalid trailing line after the closing delimiter "${delim}"` :
19
19
  'Invalid argument',
20
20
  }, `${opener}${body}${overflow || closer}`)];
21
- const annotations = html('ol', { class: 'annotations' });
22
21
  const references = html('ol', { class: 'references' });
23
22
  const document = parse(body.slice(0, -1), {
24
23
  id: '',
25
24
  footnotes: {
26
- annotations,
27
25
  references,
28
26
  },
29
27
  }, context);
@@ -42,7 +40,6 @@ export const aside: ExtensionParser.AsideParser = creator(100, block(validate('~
42
40
  return [
43
41
  html('aside', { id: identity(text(heading)), class: 'aside' }, [
44
42
  document,
45
- annotations,
46
43
  references,
47
44
  ]),
48
45
  ];
@@ -14,17 +14,17 @@ describe('Unit: parser/block/extension/example', () => {
14
14
  });
15
15
 
16
16
  it('valid', () => {
17
- assert.deepStrictEqual(inspect(parser('~~~\n~~~')), [['<aside class="example" data-type="markdown"><pre translate="no"></pre><hr><section><ol class="annotations"></ol><ol class="references"></ol></section></aside>'], '']);
18
- assert.deepStrictEqual(inspect(parser('~~~example/markdown\n~~~')), [['<aside class="example" data-type="markdown"><pre translate="no"></pre><hr><section><ol class="annotations"></ol><ol class="references"></ol></section></aside>'], '']);
19
- assert.deepStrictEqual(inspect(parser('~~~example/markdown\n\n~~~')), [['<aside class="example" data-type="markdown"><pre translate="no"></pre><hr><section><ol class="annotations"></ol><ol class="references"></ol></section></aside>'], '']);
20
- assert.deepStrictEqual(inspect(parser('~~~example/markdown\na\n~~~')), [['<aside class="example" data-type="markdown"><pre translate="no">a</pre><hr><section><p>a</p><ol class="annotations"></ol><ol class="references"></ol></section></aside>'], '']);
21
- assert.deepStrictEqual(inspect(parser('~~~example/markdown\n*a\nb*\n~~~')), [['<aside class="example" data-type="markdown"><pre translate="no">*a\nb*</pre><hr><section><p><em>a<br>b</em></p><ol class="annotations"></ol><ol class="references"></ol></section></aside>'], '']);
22
- assert.deepStrictEqual(inspect(parser('~~~example/markdown\n$fig-a\n!https://host\n~~~')), [['<aside class="example" data-type="markdown"><pre translate="no">$fig-a\n!https://host</pre><hr><section><figure data-type="media" data-label="fig-a" data-group="fig" data-number="1"><figcaption><span class="figindex">Fig. 1. </span></figcaption><div><a href="https://host" target="_blank"><img class="media" data-src="https://host" alt=""></a></div></figure><ol class="annotations"></ol><ol class="references"></ol></section></aside>'], '']);
23
- assert.deepStrictEqual(inspect(parser('~~~example/markdown\n[$fig-a]\n!https://host\n~~~')), [['<aside class="example" data-type="markdown"><pre translate="no">[$fig-a]\n!https://host</pre><hr><section><figure data-type="media" data-label="fig-a" data-group="fig" data-number="1"><figcaption><span class="figindex">Fig. 1. </span></figcaption><div><a href="https://host" target="_blank"><img class="media" data-src="https://host" alt=""></a></div></figure><ol class="annotations"></ol><ol class="references"></ol></section></aside>'], '']);
24
- assert.deepStrictEqual(inspect(parser('~~~example/markdown\n## a\n~~~')), [['<aside class="example" data-type="markdown"><pre translate="no">## a</pre><hr><section><h2>a</h2><ol class="annotations"></ol><ol class="references"></ol></section></aside>'], '']);
25
- assert.deepStrictEqual(inspect(parser('~~~example/markdown\n~ a\n~~~')), [['<aside class="example" data-type="markdown"><pre translate="no">~ a</pre><hr><section><dl><dt>a</dt><dd></dd></dl><ol class="annotations"></ol><ol class="references"></ol></section></aside>'], '']);
26
- assert.deepStrictEqual(inspect(parser('~~~example/markdown\n((a))[[b]]\n~~~')), [['<aside class="example" data-type="markdown"><pre translate="no">((a))[[b]]</pre><hr><section><p><sup class="annotation disabled" title="a"><span hidden="">a</span><a>*1</a></sup><sup class="reference disabled" title="b"><span hidden="">b</span><a>[1]</a></sup></p><ol class="annotations"><li>a<sup><a>^1</a></sup></li></ol><ol class="references"><li>b<sup><a>^1</a></sup></li></ol></section></aside>'], '']);
27
- assert.deepStrictEqual(inspect(parser('~~~~example/markdown\na\n~~~~')), [['<aside class="example" data-type="markdown"><pre translate="no">a</pre><hr><section><p>a</p><ol class="annotations"></ol><ol class="references"></ol></section></aside>'], '']);
17
+ assert.deepStrictEqual(inspect(parser('~~~\n~~~')), [['<aside class="example" data-type="markdown"><pre translate="no"></pre><hr><section><ol class="references"></ol></section></aside>'], '']);
18
+ assert.deepStrictEqual(inspect(parser('~~~example/markdown\n~~~')), [['<aside class="example" data-type="markdown"><pre translate="no"></pre><hr><section><ol class="references"></ol></section></aside>'], '']);
19
+ assert.deepStrictEqual(inspect(parser('~~~example/markdown\n\n~~~')), [['<aside class="example" data-type="markdown"><pre translate="no"></pre><hr><section><ol class="references"></ol></section></aside>'], '']);
20
+ assert.deepStrictEqual(inspect(parser('~~~example/markdown\na\n~~~')), [['<aside class="example" data-type="markdown"><pre translate="no">a</pre><hr><section><p>a</p><ol class="references"></ol></section></aside>'], '']);
21
+ assert.deepStrictEqual(inspect(parser('~~~example/markdown\n*a\nb*\n~~~')), [['<aside class="example" data-type="markdown"><pre translate="no">*a\nb*</pre><hr><section><p><em>a<br>b</em></p><ol class="references"></ol></section></aside>'], '']);
22
+ assert.deepStrictEqual(inspect(parser('~~~example/markdown\n$fig-a\n!https://host\n~~~')), [['<aside class="example" data-type="markdown"><pre translate="no">$fig-a\n!https://host</pre><hr><section><figure data-type="media" data-label="fig-a" data-group="fig" data-number="1"><figcaption><span class="figindex">Fig. 1. </span></figcaption><div><a href="https://host" target="_blank"><img class="media" data-src="https://host" alt=""></a></div></figure><ol class="references"></ol></section></aside>'], '']);
23
+ assert.deepStrictEqual(inspect(parser('~~~example/markdown\n[$fig-a]\n!https://host\n~~~')), [['<aside class="example" data-type="markdown"><pre translate="no">[$fig-a]\n!https://host</pre><hr><section><figure data-type="media" data-label="fig-a" data-group="fig" data-number="1"><figcaption><span class="figindex">Fig. 1. </span></figcaption><div><a href="https://host" target="_blank"><img class="media" data-src="https://host" alt=""></a></div></figure><ol class="references"></ol></section></aside>'], '']);
24
+ assert.deepStrictEqual(inspect(parser('~~~example/markdown\n## a\n~~~')), [['<aside class="example" data-type="markdown"><pre translate="no">## a</pre><hr><section><h2>a</h2><ol class="references"></ol></section></aside>'], '']);
25
+ assert.deepStrictEqual(inspect(parser('~~~example/markdown\n~ a\n~~~')), [['<aside class="example" data-type="markdown"><pre translate="no">~ a</pre><hr><section><dl><dt>a</dt><dd></dd></dl><ol class="references"></ol></section></aside>'], '']);
26
+ assert.deepStrictEqual(inspect(parser('~~~example/markdown\n((a))[[b]]\n~~~')), [['<aside class="example" data-type="markdown"><pre translate="no">((a))[[b]]</pre><hr><section><p><sup class="annotation disabled" title="a"><span hidden="">a</span><a>*1</a></sup><sup class="reference disabled" title="b"><span hidden="">b</span><a>[1]</a></sup></p><ol class="annotations"><li data-marker="*1">a<sup><a>^1</a></sup></li></ol><ol class="references"><li>b<sup><a>^1</a></sup></li></ol></section></aside>'], '']);
27
+ assert.deepStrictEqual(inspect(parser('~~~~example/markdown\na\n~~~~')), [['<aside class="example" data-type="markdown"><pre translate="no">a</pre><hr><section><p>a</p><ol class="references"></ol></section></aside>'], '']);
28
28
  assert.deepStrictEqual(inspect(parser('~~~example/math\na\n~~~')), [['<aside class="example" data-type="math"><pre translate="no">a</pre><hr><div class="math" translate="no">$$\na\n$$</div></aside>'], '']);
29
29
  assert.deepStrictEqual(inspect(parser(`~~~example/math\n0${'\n'.repeat(100)}~~~`), '>'), [['<aside class="example" data-type="math">'], '']);
30
30
  });
@@ -23,12 +23,10 @@ export const example: ExtensionParser.ExampleParser = creator(100, block(validat
23
23
  }, `${opener}${body}${overflow || closer}`)];
24
24
  switch (type) {
25
25
  case 'markdown': {
26
- const annotations = html('ol', { class: 'annotations' });
27
26
  const references = html('ol', { class: 'references' });
28
27
  const document = parse(body.slice(0, -1), {
29
28
  id: '',
30
29
  footnotes: {
31
- annotations,
32
30
  references,
33
31
  },
34
32
  }, context);
@@ -37,7 +35,7 @@ export const example: ExtensionParser.ExampleParser = creator(100, block(validat
37
35
  html('aside', { class: 'example', 'data-type': 'markdown' }, [
38
36
  html('pre', { translate: 'no' }, body.slice(0, -1)),
39
37
  html('hr'),
40
- html('section', [document, annotations, references]),
38
+ html('section', [document, references]),
41
39
  ]),
42
40
  ];
43
41
  }
@@ -31,16 +31,16 @@ describe('Unit: parser/block/extension/fig', () => {
31
31
  assert.deepStrictEqual(inspect(parser('[$group-name]\n```\n~~~\n```')), [['<figure data-type="text" data-label="group-name" data-group="group"><figcaption><span class="figindex"></span></figcaption><div><pre class="text">~~~</pre></div></figure>'], '']);
32
32
  assert.deepStrictEqual(inspect(parser('[$group-name]\n$$\n\n$$')), [['<figure data-type="math" data-label="group-name" data-group="group"><figcaption><span class="figindex"></span></figcaption><div><div class="math" translate="no">$$\n\n$$</div></div></figure>'], '']);
33
33
  assert.deepStrictEqual(inspect(parser('[$group-name]\n$$\n\n$$\n')), [['<figure data-type="math" data-label="group-name" data-group="group"><figcaption><span class="figindex"></span></figcaption><div><div class="math" translate="no">$$\n\n$$</div></div></figure>'], '']);
34
- assert.deepStrictEqual(inspect(parser('[$group-name]\n~~~\n~~~')), [['<figure data-type="example" data-label="group-name" data-group="group"><figcaption><span class="figindex"></span></figcaption><div><aside class="example" data-type="markdown"><pre translate="no"></pre><hr><section><ol class="annotations"></ol><ol class="references"></ol></section></aside></div></figure>'], '']);
35
- assert.deepStrictEqual(inspect(parser('[$group-name]\n~~~\n~~~\n')), [['<figure data-type="example" data-label="group-name" data-group="group"><figcaption><span class="figindex"></span></figcaption><div><aside class="example" data-type="markdown"><pre translate="no"></pre><hr><section><ol class="annotations"></ol><ol class="references"></ol></section></aside></div></figure>'], '']);
36
- assert.deepStrictEqual(inspect(parser('[$group-name]\n~~~example/markdown\n~~~')), [['<figure data-type="example" data-label="group-name" data-group="group"><figcaption><span class="figindex"></span></figcaption><div><aside class="example" data-type="markdown"><pre translate="no"></pre><hr><section><ol class="annotations"></ol><ol class="references"></ol></section></aside></div></figure>'], '']);
37
- assert.deepStrictEqual(inspect(parser('[$group-name]\n~~~example/markdown\n~~~\n')), [['<figure data-type="example" data-label="group-name" data-group="group"><figcaption><span class="figindex"></span></figcaption><div><aside class="example" data-type="markdown"><pre translate="no"></pre><hr><section><ol class="annotations"></ol><ol class="references"></ol></section></aside></div></figure>'], '']);
34
+ assert.deepStrictEqual(inspect(parser('[$group-name]\n~~~\n~~~')), [['<figure data-type="example" data-label="group-name" data-group="group"><figcaption><span class="figindex"></span></figcaption><div><aside class="example" data-type="markdown"><pre translate="no"></pre><hr><section><ol class="references"></ol></section></aside></div></figure>'], '']);
35
+ assert.deepStrictEqual(inspect(parser('[$group-name]\n~~~\n~~~\n')), [['<figure data-type="example" data-label="group-name" data-group="group"><figcaption><span class="figindex"></span></figcaption><div><aside class="example" data-type="markdown"><pre translate="no"></pre><hr><section><ol class="references"></ol></section></aside></div></figure>'], '']);
36
+ assert.deepStrictEqual(inspect(parser('[$group-name]\n~~~example/markdown\n~~~')), [['<figure data-type="example" data-label="group-name" data-group="group"><figcaption><span class="figindex"></span></figcaption><div><aside class="example" data-type="markdown"><pre translate="no"></pre><hr><section><ol class="references"></ol></section></aside></div></figure>'], '']);
37
+ assert.deepStrictEqual(inspect(parser('[$group-name]\n~~~example/markdown\n~~~\n')), [['<figure data-type="example" data-label="group-name" data-group="group"><figcaption><span class="figindex"></span></figcaption><div><aside class="example" data-type="markdown"><pre translate="no"></pre><hr><section><ol class="references"></ol></section></aside></div></figure>'], '']);
38
38
  assert.deepStrictEqual(inspect(parser('[$group-name]\n~~~table\n~~~')), [['<figure data-type="table" data-label="group-name" data-group="group"><figcaption><span class="figindex"></span></figcaption><div><table></table></div></figure>'], '']);
39
39
  assert.deepStrictEqual(inspect(parser('[$group-name]\n~~~table\n~~~\n')), [['<figure data-type="table" data-label="group-name" data-group="group"><figcaption><span class="figindex"></span></figcaption><div><table></table></div></figure>'], '']);
40
40
  assert.deepStrictEqual(inspect(parser('[$group-name]\n> ')), [['<figure data-type="quote" data-label="group-name" data-group="group"><figcaption><span class="figindex"></span></figcaption><div><blockquote></blockquote></div></figure>'], '']);
41
41
  assert.deepStrictEqual(inspect(parser('[$group-name]\n> \n')), [['<figure data-type="quote" data-label="group-name" data-group="group"><figcaption><span class="figindex"></span></figcaption><div><blockquote></blockquote></div></figure>'], '']);
42
42
  assert.deepStrictEqual(inspect(parser('[$group-name]\n>\n~~~')), [['<figure data-type="quote" data-label="group-name" data-group="group"><figcaption><span class="figindex"></span></figcaption><div><blockquote><pre><br>~~~</pre></blockquote></div></figure>'], '']);
43
- assert.deepStrictEqual(inspect(parser('[$group-name]\n!> *a*')), [['<figure data-type="quote" data-label="group-name" data-group="group"><figcaption><span class="figindex"></span></figcaption><div><blockquote><section><p><em>a</em></p><ol class="annotations"></ol><ol class="references"></ol></section></blockquote></div></figure>'], '']);
43
+ assert.deepStrictEqual(inspect(parser('[$group-name]\n!> *a*')), [['<figure data-type="quote" data-label="group-name" data-group="group"><figcaption><span class="figindex"></span></figcaption><div><blockquote><section><p><em>a</em></p><ol class="references"></ol></section></blockquote></div></figure>'], '']);
44
44
  assert.deepStrictEqual(inspect(parser('[$group-name]\n![]{https://host}')), [['<figure data-type="media" data-label="group-name" data-group="group"><figcaption><span class="figindex"></span></figcaption><div><a href="https://host" target="_blank"><img class="media" data-src="https://host" alt=""></a></div></figure>'], '']);
45
45
  assert.deepStrictEqual(inspect(parser('[$group-name]\n![]{https://host}\n')), [['<figure data-type="media" data-label="group-name" data-group="group"><figcaption><span class="figindex"></span></figcaption><div><a href="https://host" target="_blank"><img class="media" data-src="https://host" alt=""></a></div></figure>'], '']);
46
46
  assert.deepStrictEqual(inspect(parser('$group-name\n!https://host')), [['<figure data-type="media" data-label="group-name" data-group="group"><figcaption><span class="figindex"></span></figcaption><div><a href="https://host" target="_blank"><img class="media" data-src="https://host" alt=""></a></div></figure>'], '']);
@@ -53,8 +53,8 @@ describe('Unit: parser/block/extension/figure', () => {
53
53
  assert.deepStrictEqual(inspect(parser('~~~figure [$group-name]\n$$\n\n$$\n~~~')), [['<figure data-type="math" data-label="group-name" data-group="group"><figcaption><span class="figindex"></span></figcaption><div><div class="math" translate="no">$$\n\n$$</div></div></figure>'], '']);
54
54
  assert.deepStrictEqual(inspect(parser('~~~figure [$group-name]\n$$\n~~~\n$$\n~~~')), [['<figure data-type="math" data-label="group-name" data-group="group"><figcaption><span class="figindex"></span></figcaption><div><div class="math" translate="no">$$\n~~~\n$$</div></div></figure>'], '']);
55
55
  assert.deepStrictEqual(inspect(parser('~~~figure [$group-name]\n$$\n\n$$\n\ncaption\n~~~')), [['<figure data-type="math" data-label="group-name" data-group="group"><figcaption><span class="figindex"></span>caption</figcaption><div><div class="math" translate="no">$$\n\n$$</div></div></figure>'], '']);
56
- assert.deepStrictEqual(inspect(parser('~~~figure [$group-name]\n~~~\n~~~\n\ncaption\n~~~')), [['<figure data-type="example" data-label="group-name" data-group="group"><figcaption><span class="figindex"></span>caption</figcaption><div><aside class="example" data-type="markdown"><pre translate="no"></pre><hr><section><ol class="annotations"></ol><ol class="references"></ol></section></aside></div></figure>'], '']);
57
- assert.deepStrictEqual(inspect(parser('~~~figure [$group-name]\n~~~example/markdown\n~~~\n\ncaption\n~~~')), [['<figure data-type="example" data-label="group-name" data-group="group"><figcaption><span class="figindex"></span>caption</figcaption><div><aside class="example" data-type="markdown"><pre translate="no"></pre><hr><section><ol class="annotations"></ol><ol class="references"></ol></section></aside></div></figure>'], '']);
56
+ assert.deepStrictEqual(inspect(parser('~~~figure [$group-name]\n~~~\n~~~\n\ncaption\n~~~')), [['<figure data-type="example" data-label="group-name" data-group="group"><figcaption><span class="figindex"></span>caption</figcaption><div><aside class="example" data-type="markdown"><pre translate="no"></pre><hr><section><ol class="references"></ol></section></aside></div></figure>'], '']);
57
+ assert.deepStrictEqual(inspect(parser('~~~figure [$group-name]\n~~~example/markdown\n~~~\n\ncaption\n~~~')), [['<figure data-type="example" data-label="group-name" data-group="group"><figcaption><span class="figindex"></span>caption</figcaption><div><aside class="example" data-type="markdown"><pre translate="no"></pre><hr><section><ol class="references"></ol></section></aside></div></figure>'], '']);
58
58
  assert.deepStrictEqual(inspect(parser('~~~figure [$group-name]\n~~~table\n~~~\n\ncaption\n~~~')), [['<figure data-type="table" data-label="group-name" data-group="group"><figcaption><span class="figindex"></span>caption</figcaption><div><table></table></div></figure>'], '']);
59
59
  assert.deepStrictEqual(inspect(parser('~~~figure [$group-name]\n> \n~~~\n\n~~~')), [['<figure data-type="quote" data-label="group-name" data-group="group"><figcaption><span class="figindex"></span></figcaption><div><blockquote><pre><br>~~~</pre></blockquote></div></figure>'], '']);
60
60
  assert.deepStrictEqual(inspect(parser('~~~figure [$group-name]\n> \n~~~\n\ncaption\n~~~')), [['<figure data-type="quote" data-label="group-name" data-group="group"><figcaption><span class="figindex"></span>caption</figcaption><div><blockquote><pre><br>~~~</pre></blockquote></div></figure>'], '']);
@@ -6,7 +6,6 @@ import { label, segment as seg_label } from '../../inline/extension/label';
6
6
  import { ulist } from '../ulist';
7
7
  import { olist } from '../olist';
8
8
  import { table as styled_table } from '../table';
9
- import { indentblock } from '../indentblock';
10
9
  import { codeblock, segment_ as seg_code } from '../codeblock';
11
10
  import { mathblock, segment_ as seg_math } from '../mathblock';
12
11
  import { example } from './example';
@@ -23,7 +22,7 @@ import { unshift } from 'spica/array';
23
22
  import FigureParser = ExtensionParser.FigureParser;
24
23
 
25
24
  export const segment: FigureParser.SegmentParser = block(match(
26
- /^(~{3,})(?:figure[^\S\n]|(?=\[?\$))/,
25
+ /^(~{3,})(?:figure[^\S\n])?(?=\[?\$)/,
27
26
  memoize(
28
27
  ([, fence], closer = new RegExp(String.raw`^${fence}[^\S\n]*(?:$|\n)`)) => close(
29
28
  sequence([
@@ -49,7 +48,7 @@ export const segment: FigureParser.SegmentParser = block(match(
49
48
  ([, fence]) => fence.length, [])));
50
49
 
51
50
  export const figure: FigureParser = block(fallback(rewrite(segment, fmap(
52
- convert(source => source.slice(source.match(/^~+(?:figure[^\S\n]+)?/)![0].length, source.trimEnd().lastIndexOf('\n')),
51
+ convert(source => source.slice(source.match(/^~+(?:\w+\s+)?/)![0].length, source.trimEnd().lastIndexOf('\n')),
53
52
  sequence([
54
53
  line(sequence([label, str(/^(?=\s).*\n/)])),
55
54
  inits([
@@ -57,7 +56,6 @@ export const figure: FigureParser = block(fallback(rewrite(segment, fmap(
57
56
  ulist,
58
57
  olist,
59
58
  styled_table,
60
- indentblock,
61
59
  codeblock,
62
60
  mathblock,
63
61
  example,
@@ -7,7 +7,6 @@ import { ulist } from '../ulist';
7
7
  import { olist } from '../olist';
8
8
  import { ilist } from '../ilist';
9
9
  import { table } from '../table';
10
- import { indentblock } from '../indentblock';
11
10
  import { codeblock } from '../codeblock';
12
11
  import { mathblock } from '../mathblock';
13
12
  import { sidefence } from '../sidefence';
@@ -71,7 +70,6 @@ const content: MessageParser.ContentParser = union([
71
70
  olist,
72
71
  ilist,
73
72
  table,
74
- indentblock,
75
73
  codeblock,
76
74
  mathblock,
77
75
  sidefence,