securemark 0.235.0 → 0.235.1

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 (32) hide show
  1. package/CHANGELOG.md +4 -0
  2. package/dist/securemark.js +93 -84
  3. package/package-lock.json +19 -19
  4. package/package.json +1 -1
  5. package/src/combinator/control/manipulation/context.test.ts +4 -4
  6. package/src/combinator/control/manipulation/resource.ts +6 -3
  7. package/src/combinator/control/manipulation/surround.ts +3 -4
  8. package/src/combinator/data/parser/inits.ts +1 -1
  9. package/src/combinator/data/parser/sequence.ts +1 -1
  10. package/src/combinator/data/parser/some.ts +23 -25
  11. package/src/combinator/data/parser.ts +33 -10
  12. package/src/parser/api/bind.test.ts +3 -3
  13. package/src/parser/api/parse.test.ts +12 -5
  14. package/src/parser/block/blockquote.test.ts +1 -1
  15. package/src/parser/block/extension/aside.test.ts +1 -1
  16. package/src/parser/block/extension/example.test.ts +2 -2
  17. package/src/parser/block/extension/fig.test.ts +20 -20
  18. package/src/parser/block/extension/figure.test.ts +31 -28
  19. package/src/parser/block/extension/figure.ts +4 -2
  20. package/src/parser/block/extension/table.ts +6 -6
  21. package/src/parser/block.ts +1 -2
  22. package/src/parser/inline/bracket.ts +3 -3
  23. package/src/parser/inline/emphasis.ts +2 -5
  24. package/src/parser/inline/emstrong.ts +4 -5
  25. package/src/parser/inline/html.ts +3 -3
  26. package/src/parser/inline/mark.ts +2 -5
  27. package/src/parser/inline/strong.test.ts +1 -1
  28. package/src/parser/inline/strong.ts +2 -5
  29. package/src/parser/inline.test.ts +0 -1
  30. package/src/parser/processor/figure.test.ts +28 -28
  31. package/src/parser/processor/figure.ts +1 -1
  32. package/src/parser/util.ts +5 -7
@@ -1,5 +1,5 @@
1
1
  import { undefined } from 'spica/global';
2
- import { Parser, eval, exec, check } from '../parser';
2
+ import { Parser, Delimiters, eval, exec, check } from '../parser';
3
3
  import { memoize, reduce } from 'spica/memoize';
4
4
  import { push } from 'spica/array';
5
5
 
@@ -13,19 +13,18 @@ const signature = (pattern: string | RegExp | undefined): string => {
13
13
  return `r/${pattern.source}/${pattern.flags}`;
14
14
  }
15
15
  };
16
- const [matcher, delimiter] = [...Array(2)].map(() =>
17
- memoize(
18
- (pattern: string | RegExp | undefined): (source: string) => boolean => {
19
- switch (typeof pattern) {
20
- case 'undefined':
21
- return () => false;
22
- case 'string':
23
- return source => source.slice(0, pattern.length) === pattern;
24
- case 'object':
25
- return reduce(source => pattern.test(source));
26
- }
27
- },
28
- signature));
16
+ const matcher = memoize(
17
+ (pattern: string | RegExp | undefined): (source: string) => boolean => {
18
+ switch (typeof pattern) {
19
+ case 'undefined':
20
+ return () => false;
21
+ case 'string':
22
+ return source => source.slice(0, pattern.length) === pattern;
23
+ case 'object':
24
+ return reduce(source => pattern.test(source));
25
+ }
26
+ },
27
+ signature);
29
28
 
30
29
  export function some<P extends Parser<unknown>>(parser: P, until?: string | RegExp | number, deep?: string | RegExp, limit?: number): P;
31
30
  export function some<T>(parser: Parser<T>, until?: string | RegExp | number, deep?: string | RegExp, limit = -1): Parser<T> {
@@ -34,25 +33,24 @@ export function some<T>(parser: Parser<T>, until?: string | RegExp | number, dee
34
33
  assert(deep instanceof RegExp ? !deep.flags.match(/[gmy]/) && deep.source.startsWith('^') : true);
35
34
  if (typeof until === 'number') return some(parser, undefined, deep, until);
36
35
  const match = matcher(until);
37
- const delim = delimiter(deep);
38
- const sig = signature(deep);
36
+ const delimiter = {
37
+ signature: signature(deep),
38
+ matcher: matcher(deep),
39
+ } as const;
39
40
  return (source, context) => {
40
41
  if (source === '') return;
41
42
  let rest = source;
42
43
  let nodes: T[] | undefined;
43
- if (context && deep) {
44
+ if (deep && context) {
44
45
  // bracket > annotation > bracket > reference > bracket > link > media | bracket
45
46
  // bracket > annotation > bracket > reference > bracket > index > bracket
46
- context.delimiters ??= { stack: [], matchers: {} };
47
- context.delimiters.stack.push(sig);
48
- context.delimiters.matchers[sig] ??= delim;
49
- assert(context.delimiters.matchers[sig] === delim);
47
+ context.delimiters ??= new Delimiters();
48
+ context.delimiters.push(delimiter);
50
49
  }
51
- const { stack, matchers } = context.delimiters ?? {};
52
50
  while (true) {
53
51
  if (rest === '') break;
54
52
  if (match(rest)) break;
55
- if (stack?.some(sig => matchers![sig](rest))) break;
53
+ if (context.delimiters?.match(rest)) break;
56
54
  const result = parser(rest, context);
57
55
  assert.doesNotThrow(() => limit < 0 && check(rest, result));
58
56
  if (!result) break;
@@ -62,8 +60,8 @@ export function some<T>(parser: Parser<T>, until?: string | RegExp | number, dee
62
60
  rest = exec(result);
63
61
  if (limit >= 0 && source.length - rest.length > limit) break;
64
62
  }
65
- if (context && deep) {
66
- stack?.pop();
63
+ if (deep && context.delimiters) {
64
+ context.delimiters.pop();
67
65
  }
68
66
  assert(rest.length <= source.length);
69
67
  return nodes && rest.length < source.length
@@ -1,19 +1,16 @@
1
- export interface Ctx {
2
- readonly resources?: {
3
- budget: number;
4
- };
5
- delimiters?: {
6
- readonly stack: string[];
7
- readonly matchers: Record<string, (source: string) => boolean>;
8
- };
9
- }
10
-
11
1
  export type Parser<T, C extends Ctx = Ctx, D extends Parser<unknown, C>[] = any>
12
2
  = (source: string, context: C) => Result<T, C, D>;
13
3
  export type Result<T, C extends Ctx = Ctx, D extends Parser<unknown, C>[] = any>
14
4
  = readonly [T[], string, C, D]
15
5
  | readonly [T[], string]
16
6
  | undefined;
7
+ export interface Ctx {
8
+ readonly resources?: {
9
+ budget: number;
10
+ recursion: number;
11
+ };
12
+ delimiters?: Delimiters;
13
+ }
17
14
  export type Tree<P extends Parser<unknown>> = P extends Parser<infer T> ? T : never;
18
15
  export type SubParsers<P extends Parser<unknown>> = P extends Parser<unknown, any, infer D> ? D : never;
19
16
  export type Context<P extends Parser<unknown>> = P extends Parser<unknown, infer C> ? C : never;
@@ -22,6 +19,32 @@ export type IntermediateParser<P extends Parser<unknown>> = Parser<SubTree<P>, C
22
19
  type ExtractSubTree<D extends Parser<unknown>[]> = ExtractSubParser<D> extends infer T ? T extends Parser<infer U> ? U : never : never;
23
20
  type ExtractSubParser<D extends Parser<unknown>[]> = D extends (infer P)[] ? P extends Parser<unknown> ? P : never : never;
24
21
 
22
+ export class Delimiters {
23
+ private readonly stack: string[] = [];
24
+ private readonly matchers: Record<string, (source: string) => boolean> = {};
25
+ public push(delimiter: { readonly signature: string; readonly matcher: (source: string) => boolean; }): void {
26
+ const { signature, matcher } = delimiter;
27
+ this.stack.push(signature);
28
+ this.matchers[signature] ??= matcher;
29
+ assert(this.matchers[signature] === matcher);
30
+ }
31
+ public pop(): void {
32
+ assert(this.stack.length > 0);
33
+ this.stack.pop();
34
+ }
35
+ public match(source: string): boolean {
36
+ const { stack, matchers } = this;
37
+ const log = {};
38
+ for (let i = 0; i < stack.length; ++i) {
39
+ const sig = stack[i];
40
+ if (sig in log) continue;
41
+ if (matchers[sig](source)) return true;
42
+ log[sig] = false;
43
+ }
44
+ return false;
45
+ }
46
+ }
47
+
25
48
  export { eval_ as eval };
26
49
  function eval_<T>(result: NonNullable<Result<T>>, default_?: T[]): T[];
27
50
  function eval_<T>(result: Result<T>, default_: T[]): T[];
@@ -34,7 +34,7 @@ describe('Unit: parser/api/bind', () => {
34
34
  assert.deepStrictEqual(
35
35
  inspect(iter),
36
36
  [
37
- '<h1 class="error" translate="no">Error: Too large input over 1,000,000 bytes.</h1>',
37
+ '<h1 class="error">Error: Too large input over 1,000,000 bytes.</h1>',
38
38
  `<pre class="error" translate="no">${'\n'.repeat(997)}...</pre>`,
39
39
  ]);
40
40
  });
@@ -46,9 +46,9 @@ describe('Unit: parser/api/bind', () => {
46
46
  assert.deepStrictEqual(
47
47
  inspect(iter, 3),
48
48
  [
49
- '<h1 class="error" translate="no">Error: Too large segment over 100,000 bytes.</h1>',
49
+ '<h1 class="error">Error: Too large segment over 100,000 bytes.</h1>',
50
50
  `<pre class="error" translate="no">${'\n'.repeat(997)}...</pre>`,
51
- '<h1 class="error" translate="no">Error: Too large segment over 100,000 bytes.</h1>',
51
+ '<h1 class="error">Error: Too large segment over 100,000 bytes.</h1>',
52
52
  ]);
53
53
  });
54
54
 
@@ -118,7 +118,7 @@ describe('Unit: parser/api/parse', () => {
118
118
  '<p><a href="https://source/hashtags/a" target="_blank" class="hashtag">#a</a></p>',
119
119
  '<p><a href="https://domain/hashtags/a" target="_blank" class="hashtag">#domain/a</a></p>',
120
120
  '<p><a class="index" href="#index:a">a</a></p>',
121
- '<figure data-label="$-a" data-group="$" data-number="1" id="label:$-a"><div class="figcontent"><div class="math" translate="no">$$\n$$</div></div><span class="figindex">(1)</span><figcaption></figcaption></figure>',
121
+ '<figure data-label="$-a" data-group="$" data-number="1" id="label:$-a"><div class="figcontent"><div class="math" translate="no">$$\n$$</div></div><figcaption><span class="figindex">(1)</span></figcaption></figure>',
122
122
  '<p><a class="label" data-label="$-a" href="#label:$-a">(1)</a></p>',
123
123
  '<p><sup class="annotation" id="annotation:ref:1" title="a"><span hidden="">a</span><a href="#annotation:def:1">*1</a></sup></p>',
124
124
  '<p><a href="https://source/x/a" target="_blank">a</a></p>',
@@ -201,7 +201,7 @@ describe('Unit: parser/api/parse', () => {
201
201
  assert.deepStrictEqual(
202
202
  [...parse('$-a\n$$\n$$\n\n(($-a[[b]][[c*d*]]))', { footnotes }).children].map(el => el.outerHTML),
203
203
  [
204
- '<figure data-label="$-a" data-group="$" data-number="1" id="label:$-a"><div class="figcontent"><div class="math" translate="no">$$\n$$</div></div><span class="figindex">(1)</span><figcaption></figcaption></figure>',
204
+ '<figure data-label="$-a" data-group="$" data-number="1" id="label:$-a"><div class="figcontent"><div class="math" translate="no">$$\n$$</div></div><figcaption><span class="figindex">(1)</span></figcaption></figure>',
205
205
  '<p><sup class="annotation" id="annotation:ref:1" title="(1)[1][2]"><span hidden=""><a class="label" data-label="$-a" href="#label:$-a">(1)</a><sup class="reference" id="reference:ref:1" title="b"><span hidden="">b</span><a href="#reference:def:1">[1]</a></sup><sup class="reference" id="reference:ref:2" title="cd"><span hidden="">c<em>d</em></span><a href="#reference:def:2">[2]</a></sup></span><a href="#annotation:def:1">*1</a></sup></p>',
206
206
  ]);
207
207
  assert.deepStrictEqual(
@@ -218,10 +218,17 @@ describe('Unit: parser/api/parse', () => {
218
218
  ['<p>a<span class="linebreak"> </span>b</p>']);
219
219
  });
220
220
 
221
- it('reset', () => {
221
+ it('recursion', () => {
222
222
  assert.deepStrictEqual(
223
- [...parse(`"${'('.repeat(10000)}\n\n"`).children].slice(2).map(el => el.outerHTML),
224
- ['<p>"</p>']);
223
+ [...parse('('.repeat(199)).children].map(el => el.outerHTML),
224
+ [`<p>${'('.repeat(199)}</p>`]);
225
+ assert.deepStrictEqual(
226
+ [...parse('('.repeat(200) + '\n\na').children].map(el => el.outerHTML.replace(/:\w+/, ':rnd')),
227
+ [
228
+ '<h1 id="error:rnd" class="error">Error: Too much recursion.</h1>',
229
+ `<pre class="error" translate="no">${'('.repeat(200)}\n</pre>`,
230
+ '<p>a</p>',
231
+ ]);
225
232
  });
226
233
 
227
234
  });
@@ -95,7 +95,7 @@ describe('Unit: parser/block/blockquote', () => {
95
95
  assert.deepStrictEqual(inspect(parser('!>\n> a')), [['<blockquote><section><p>a</p><ol class="annotations"></ol><ol class="references"></ol></section></blockquote>'], '']);
96
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
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 $fig-a\n>> > \n>>\n~~~\n> ~~~figure $fig-a\n> > \n>\n[#a]\n~~~')), [['<blockquote><blockquote><section><figure data-label="fig-a" data-group="fig" data-number="1"><div class="figcontent"><blockquote></blockquote></div><span class="figindex">Fig. 1. </span><figcaption></figcaption></figure><ol class="annotations"></ol><ol class="references"></ol></section></blockquote><section><figure data-label="fig-a" data-group="fig" data-number="1"><div class="figcontent"><blockquote></blockquote></div><span class="figindex">Fig. 1. </span><figcaption><a class="index">a</a></figcaption></figure><ol class="annotations"></ol><ol class="references"></ol></section></blockquote>'], '']);
98
+ assert.deepStrictEqual(inspect(parser('!>> ~~~figure $fig-a\n>> > \n>>\n~~~\n> ~~~figure $fig-a\n> > \n>\n[#a]\n~~~')), [['<blockquote><blockquote><section><figure data-label="fig-a" data-group="fig" data-number="1"><div class="figcontent"><blockquote></blockquote></div><figcaption><span class="figindex">Fig. 1. </span></figcaption></figure><ol class="annotations"></ol><ol class="references"></ol></section></blockquote><section><figure data-label="fig-a" data-group="fig" data-number="1"><div class="figcontent"><blockquote></blockquote></div><figcaption><span class="figindex">Fig. 1. </span><a class="index">a</a></figcaption></figure><ol class="annotations"></ol><ol class="references"></ol></section></blockquote>'], '']);
99
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>'], '']);
100
100
  });
101
101
 
@@ -16,7 +16,7 @@ describe('Unit: parser/block/extension/aside', () => {
16
16
  it('valid', () => {
17
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
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$fig-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-label="fig-a" data-group="fig" data-number="1.1"><div class="figcontent"><blockquote></blockquote></div><span class="figindex">Fig. 1.1. </span><figcaption></figcaption></figure><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$fig-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-label="fig-a" data-group="fig" data-number="1.1"><div class="figcontent"><blockquote></blockquote></div><figcaption><span class="figindex">Fig. 1.1. </span></figcaption></figure><ol class="annotations"></ol><ol class="references"></ol></aside>'], '']);
20
20
  });
21
21
 
22
22
  });
@@ -19,8 +19,8 @@ describe('Unit: parser/block/extension/example', () => {
19
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
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
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-label="fig-a" data-group="fig" data-number="1"><div class="figcontent"><a href="https://host" target="_blank"><img class="media" data-src="https://host" alt=""></a></div><span class="figindex">Fig. 1. </span><figcaption></figcaption></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-label="fig-a" data-group="fig" data-number="1"><div class="figcontent"><a href="https://host" target="_blank"><img class="media" data-src="https://host" alt=""></a></div><span class="figindex">Fig. 1. </span><figcaption></figcaption></figure><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-label="fig-a" data-group="fig" data-number="1"><div class="figcontent"><a href="https://host" target="_blank"><img class="media" data-src="https://host" alt=""></a></div><figcaption><span class="figindex">Fig. 1. </span></figcaption></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-label="fig-a" data-group="fig" data-number="1"><div class="figcontent"><a href="https://host" target="_blank"><img class="media" data-src="https://host" alt=""></a></div><figcaption><span class="figindex">Fig. 1. </span></figcaption></figure><ol class="annotations"></ol><ol class="references"></ol></section></aside>'], '']);
24
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
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
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>'], '']);
@@ -14,32 +14,32 @@ describe('Unit: parser/block/extension/fig', () => {
14
14
  assert.deepStrictEqual(inspect(parser('[$group-name]\n !https://host')), undefined);
15
15
  assert.deepStrictEqual(inspect(parser('[$group-name]\n\n!https://host')), undefined);
16
16
  assert.deepStrictEqual(inspect(parser('[$group-name]a\nhttps://host')), undefined);
17
- assert.deepStrictEqual(inspect(parser('[$group-name]a\n!https://host')), [['<figure data-label="group-name" data-group="group" class="invalid"><div class="figcontent"><a href="https://host" target="_blank"><img class="media" data-src="https://host" alt=""></a></div><span class="figindex"></span><figcaption></figcaption></figure>'], '']);
17
+ assert.deepStrictEqual(inspect(parser('[$group-name]a\n!https://host')), [['<figure data-label="group-name" data-group="group" class="invalid"><div class="figcontent"><a href="https://host" target="_blank"><img class="media" data-src="https://host" alt=""></a></div><figcaption><span class="figindex"></span></figcaption></figure>'], '']);
18
18
  assert.deepStrictEqual(inspect(parser('[$group-name] a\nhttps://host')), undefined);
19
- assert.deepStrictEqual(inspect(parser('[$group-name] a\n!https://host')), [['<figure data-label="group-name" data-group="group" class="invalid"><div class="figcontent"><a href="https://host" target="_blank"><img class="media" data-src="https://host" alt=""></a></div><span class="figindex"></span><figcaption></figcaption></figure>'], '']);
19
+ assert.deepStrictEqual(inspect(parser('[$group-name] a\n!https://host')), [['<figure data-label="group-name" data-group="group" class="invalid"><div class="figcontent"><a href="https://host" target="_blank"><img class="media" data-src="https://host" alt=""></a></div><figcaption><span class="figindex"></span></figcaption></figure>'], '']);
20
20
  assert.deepStrictEqual(inspect(parser('$-a\n$-b')), undefined);
21
21
  assert.deepStrictEqual(inspect(parser(' [$group-name]\n!https://host\n')), undefined);
22
22
  });
23
23
 
24
24
  it('valid', () => {
25
- assert.deepStrictEqual(inspect(parser('[$group-name]\n!https://host')), [['<figure data-label="group-name" data-group="group"><div class="figcontent"><a href="https://host" target="_blank"><img class="media" data-src="https://host" alt=""></a></div><span class="figindex"></span><figcaption></figcaption></figure>'], '']);
26
- assert.deepStrictEqual(inspect(parser('[$group-name]\n!https://host\n')), [['<figure data-label="group-name" data-group="group"><div class="figcontent"><a href="https://host" target="_blank"><img class="media" data-src="https://host" alt=""></a></div><span class="figindex"></span><figcaption></figcaption></figure>'], '']);
27
- assert.deepStrictEqual(inspect(parser('[$group-name]\n|\n|-\n|')), [['<figure data-label="group-name" data-group="group"><div class="figcontent"><table><thead><tr></tr></thead><tbody><tr></tr></tbody></table></div><span class="figindex"></span><figcaption></figcaption></figure>'], '']);
28
- assert.deepStrictEqual(inspect(parser('[$group-name]\n|\n|-\n|\n')), [['<figure data-label="group-name" data-group="group"><div class="figcontent"><table><thead><tr></tr></thead><tbody><tr></tr></tbody></table></div><span class="figindex"></span><figcaption></figcaption></figure>'], '']);
29
- assert.deepStrictEqual(inspect(parser('[$group-name]\n```\n\n```')), [['<figure data-label="group-name" data-group="group"><div class="figcontent"><pre class="text" translate="no"></pre></div><span class="figindex"></span><figcaption></figcaption></figure>'], '']);
30
- assert.deepStrictEqual(inspect(parser('[$group-name]\n```\n\n```\n')), [['<figure data-label="group-name" data-group="group"><div class="figcontent"><pre class="text" translate="no"></pre></div><span class="figindex"></span><figcaption></figcaption></figure>'], '']);
31
- assert.deepStrictEqual(inspect(parser('[$group-name]\n```\n~~~\n```')), [['<figure data-label="group-name" data-group="group"><div class="figcontent"><pre class="text" translate="no">~~~</pre></div><span class="figindex"></span><figcaption></figcaption></figure>'], '']);
32
- assert.deepStrictEqual(inspect(parser('[$group-name]\n$$\n\n$$')), [['<figure data-label="group-name" data-group="group"><div class="figcontent"><div class="math" translate="no">$$\n\n$$</div></div><span class="figindex"></span><figcaption></figcaption></figure>'], '']);
33
- assert.deepStrictEqual(inspect(parser('[$group-name]\n$$\n\n$$\n')), [['<figure data-label="group-name" data-group="group"><div class="figcontent"><div class="math" translate="no">$$\n\n$$</div></div><span class="figindex"></span><figcaption></figcaption></figure>'], '']);
34
- assert.deepStrictEqual(inspect(parser('[$group-name]\n~~~example/markdown\n~~~')), [['<figure data-label="group-name" data-group="group"><div class="figcontent"><aside class="example" data-type="markdown"><pre translate="no"></pre><hr><section><ol class="annotations"></ol><ol class="references"></ol></section></aside></div><span class="figindex"></span><figcaption></figcaption></figure>'], '']);
35
- assert.deepStrictEqual(inspect(parser('[$group-name]\n~~~example/markdown\n~~~\n')), [['<figure data-label="group-name" data-group="group"><div class="figcontent"><aside class="example" data-type="markdown"><pre translate="no"></pre><hr><section><ol class="annotations"></ol><ol class="references"></ol></section></aside></div><span class="figindex"></span><figcaption></figcaption></figure>'], '']);
36
- assert.deepStrictEqual(inspect(parser('[$group-name]\n> ')), [['<figure data-label="group-name" data-group="group"><div class="figcontent"><blockquote></blockquote></div><span class="figindex"></span><figcaption></figcaption></figure>'], '']);
37
- assert.deepStrictEqual(inspect(parser('[$group-name]\n> \n')), [['<figure data-label="group-name" data-group="group"><div class="figcontent"><blockquote></blockquote></div><span class="figindex"></span><figcaption></figcaption></figure>'], '']);
38
- assert.deepStrictEqual(inspect(parser('[$group-name]\n>\n~~~')), [['<figure data-label="group-name" data-group="group"><div class="figcontent"><blockquote><pre><br>~~~</pre></blockquote></div><span class="figindex"></span><figcaption></figcaption></figure>'], '']);
39
- assert.deepStrictEqual(inspect(parser('[$group-name]\n!> *a*')), [['<figure data-label="group-name" data-group="group"><div class="figcontent"><blockquote><section><p><em>a</em></p><ol class="annotations"></ol><ol class="references"></ol></section></blockquote></div><span class="figindex"></span><figcaption></figcaption></figure>'], '']);
40
- assert.deepStrictEqual(inspect(parser('[$group-name]\n![]{https://host}')), [['<figure data-label="group-name" data-group="group"><div class="figcontent"><a href="https://host" target="_blank"><img class="media" data-src="https://host" alt=""></a></div><span class="figindex"></span><figcaption></figcaption></figure>'], '']);
41
- assert.deepStrictEqual(inspect(parser('[$group-name]\n![]{https://host}\n')), [['<figure data-label="group-name" data-group="group"><div class="figcontent"><a href="https://host" target="_blank"><img class="media" data-src="https://host" alt=""></a></div><span class="figindex"></span><figcaption></figcaption></figure>'], '']);
42
- assert.deepStrictEqual(inspect(parser('$group-name\n!https://host')), [['<figure data-label="group-name" data-group="group"><div class="figcontent"><a href="https://host" target="_blank"><img class="media" data-src="https://host" alt=""></a></div><span class="figindex"></span><figcaption></figcaption></figure>'], '']);
25
+ assert.deepStrictEqual(inspect(parser('[$group-name]\n!https://host')), [['<figure data-label="group-name" data-group="group"><div class="figcontent"><a href="https://host" target="_blank"><img class="media" data-src="https://host" alt=""></a></div><figcaption><span class="figindex"></span></figcaption></figure>'], '']);
26
+ assert.deepStrictEqual(inspect(parser('[$group-name]\n!https://host\n')), [['<figure data-label="group-name" data-group="group"><div class="figcontent"><a href="https://host" target="_blank"><img class="media" data-src="https://host" alt=""></a></div><figcaption><span class="figindex"></span></figcaption></figure>'], '']);
27
+ assert.deepStrictEqual(inspect(parser('[$group-name]\n|\n|-\n|')), [['<figure data-label="group-name" data-group="group"><div class="figcontent"><table><thead><tr></tr></thead><tbody><tr></tr></tbody></table></div><figcaption><span class="figindex"></span></figcaption></figure>'], '']);
28
+ assert.deepStrictEqual(inspect(parser('[$group-name]\n|\n|-\n|\n')), [['<figure data-label="group-name" data-group="group"><div class="figcontent"><table><thead><tr></tr></thead><tbody><tr></tr></tbody></table></div><figcaption><span class="figindex"></span></figcaption></figure>'], '']);
29
+ assert.deepStrictEqual(inspect(parser('[$group-name]\n```\n\n```')), [['<figure data-label="group-name" data-group="group"><div class="figcontent"><pre class="text" translate="no"></pre></div><figcaption><span class="figindex"></span></figcaption></figure>'], '']);
30
+ assert.deepStrictEqual(inspect(parser('[$group-name]\n```\n\n```\n')), [['<figure data-label="group-name" data-group="group"><div class="figcontent"><pre class="text" translate="no"></pre></div><figcaption><span class="figindex"></span></figcaption></figure>'], '']);
31
+ assert.deepStrictEqual(inspect(parser('[$group-name]\n```\n~~~\n```')), [['<figure data-label="group-name" data-group="group"><div class="figcontent"><pre class="text" translate="no">~~~</pre></div><figcaption><span class="figindex"></span></figcaption></figure>'], '']);
32
+ assert.deepStrictEqual(inspect(parser('[$group-name]\n$$\n\n$$')), [['<figure data-label="group-name" data-group="group"><div class="figcontent"><div class="math" translate="no">$$\n\n$$</div></div><figcaption><span class="figindex"></span></figcaption></figure>'], '']);
33
+ assert.deepStrictEqual(inspect(parser('[$group-name]\n$$\n\n$$\n')), [['<figure data-label="group-name" data-group="group"><div class="figcontent"><div class="math" translate="no">$$\n\n$$</div></div><figcaption><span class="figindex"></span></figcaption></figure>'], '']);
34
+ assert.deepStrictEqual(inspect(parser('[$group-name]\n~~~example/markdown\n~~~')), [['<figure data-label="group-name" data-group="group"><div class="figcontent"><aside class="example" data-type="markdown"><pre translate="no"></pre><hr><section><ol class="annotations"></ol><ol class="references"></ol></section></aside></div><figcaption><span class="figindex"></span></figcaption></figure>'], '']);
35
+ assert.deepStrictEqual(inspect(parser('[$group-name]\n~~~example/markdown\n~~~\n')), [['<figure data-label="group-name" data-group="group"><div class="figcontent"><aside class="example" data-type="markdown"><pre translate="no"></pre><hr><section><ol class="annotations"></ol><ol class="references"></ol></section></aside></div><figcaption><span class="figindex"></span></figcaption></figure>'], '']);
36
+ assert.deepStrictEqual(inspect(parser('[$group-name]\n> ')), [['<figure data-label="group-name" data-group="group"><div class="figcontent"><blockquote></blockquote></div><figcaption><span class="figindex"></span></figcaption></figure>'], '']);
37
+ assert.deepStrictEqual(inspect(parser('[$group-name]\n> \n')), [['<figure data-label="group-name" data-group="group"><div class="figcontent"><blockquote></blockquote></div><figcaption><span class="figindex"></span></figcaption></figure>'], '']);
38
+ assert.deepStrictEqual(inspect(parser('[$group-name]\n>\n~~~')), [['<figure data-label="group-name" data-group="group"><div class="figcontent"><blockquote><pre><br>~~~</pre></blockquote></div><figcaption><span class="figindex"></span></figcaption></figure>'], '']);
39
+ assert.deepStrictEqual(inspect(parser('[$group-name]\n!> *a*')), [['<figure data-label="group-name" data-group="group"><div class="figcontent"><blockquote><section><p><em>a</em></p><ol class="annotations"></ol><ol class="references"></ol></section></blockquote></div><figcaption><span class="figindex"></span></figcaption></figure>'], '']);
40
+ assert.deepStrictEqual(inspect(parser('[$group-name]\n![]{https://host}')), [['<figure data-label="group-name" data-group="group"><div class="figcontent"><a href="https://host" target="_blank"><img class="media" data-src="https://host" alt=""></a></div><figcaption><span class="figindex"></span></figcaption></figure>'], '']);
41
+ assert.deepStrictEqual(inspect(parser('[$group-name]\n![]{https://host}\n')), [['<figure data-label="group-name" data-group="group"><div class="figcontent"><a href="https://host" target="_blank"><img class="media" data-src="https://host" alt=""></a></div><figcaption><span class="figindex"></span></figcaption></figure>'], '']);
42
+ assert.deepStrictEqual(inspect(parser('$group-name\n!https://host')), [['<figure data-label="group-name" data-group="group"><div class="figcontent"><a href="https://host" target="_blank"><img class="media" data-src="https://host" alt=""></a></div><figcaption><span class="figindex"></span></figcaption></figure>'], '']);
43
43
  });
44
44
 
45
45
  });
@@ -8,7 +8,7 @@ describe('Unit: parser/block/extension/figure', () => {
8
8
 
9
9
  it('invalid', () => {
10
10
  assert.deepStrictEqual(inspect(parser('~~~figure\n!https://host\n~~~')), undefined);
11
- assert.deepStrictEqual(inspect(parser('~~~figure $group-name]\n!https://host\n~~~')), [['<figure data-label="group-name" data-group="group" class="invalid"><div class="figcontent"><a href="https://host" target="_blank"><img class="media" data-src="https://host" alt=""></a></div><span class="figindex"></span><figcaption></figcaption></figure>'], '']);
11
+ assert.deepStrictEqual(inspect(parser('~~~figure $group-name]\n!https://host\n~~~')), [['<figure data-label="group-name" data-group="group" class="invalid"><div class="figcontent"><a href="https://host" target="_blank"><img class="media" data-src="https://host" alt=""></a></div><figcaption><span class="figindex"></span></figcaption></figure>'], '']);
12
12
  assert.deepStrictEqual(inspect(parser('~~~figure [$group-name\n!https://host\n~~~')), undefined);
13
13
  assert.deepStrictEqual(inspect(parser('~~~figure [$group-name]\nhttps://host\n~~~')), undefined);
14
14
  assert.deepStrictEqual(inspect(parser('~~~figure [$group-name]\n!https://host\\\n~~~')), undefined);
@@ -21,9 +21,9 @@ describe('Unit: parser/block/extension/figure', () => {
21
21
  assert.deepStrictEqual(inspect(parser('~~~figure [$group-name]\n!https://host\n~~~~')), undefined);
22
22
  assert.deepStrictEqual(inspect(parser('~~~~figure [$group-name]\n!https://host\n~~~')), undefined);
23
23
  assert.deepStrictEqual(inspect(parser('~~~figure [$group-name]a\nhttps://host\n~~~')), undefined);
24
- assert.deepStrictEqual(inspect(parser('~~~figure [$group-name]a\n!https://host\n~~~')), [['<figure data-label="group-name" data-group="group" class="invalid"><div class="figcontent"><a href="https://host" target="_blank"><img class="media" data-src="https://host" alt=""></a></div><span class="figindex"></span><figcaption></figcaption></figure>'], '']);
24
+ assert.deepStrictEqual(inspect(parser('~~~figure [$group-name]a\n!https://host\n~~~')), [['<figure data-label="group-name" data-group="group" class="invalid"><div class="figcontent"><a href="https://host" target="_blank"><img class="media" data-src="https://host" alt=""></a></div><figcaption><span class="figindex"></span></figcaption></figure>'], '']);
25
25
  assert.deepStrictEqual(inspect(parser('~~~figure [$group-name] a\nhttps://host\n~~~')), undefined);
26
- assert.deepStrictEqual(inspect(parser('~~~figure [$group-name] a\n!https://host\n~~~')), [['<figure data-label="group-name" data-group="group" class="invalid"><div class="figcontent"><a href="https://host" target="_blank"><img class="media" data-src="https://host" alt=""></a></div><span class="figindex"></span><figcaption></figcaption></figure>'], '']);
26
+ assert.deepStrictEqual(inspect(parser('~~~figure [$group-name] a\n!https://host\n~~~')), [['<figure data-label="group-name" data-group="group" class="invalid"><div class="figcontent"><a href="https://host" target="_blank"><img class="media" data-src="https://host" alt=""></a></div><figcaption><span class="figindex"></span></figcaption></figure>'], '']);
27
27
  assert.deepStrictEqual(inspect(parser('~~~ [$group-name]\n!https://host\n~~~')), undefined);
28
28
  assert.deepStrictEqual(inspect(parser('~~~ $group-name\n!https://host\n~~~')), undefined);
29
29
  assert.deepStrictEqual(inspect(parser(' ~~~figure [$group-name]\n!https://host\n~~~')), undefined);
@@ -31,31 +31,34 @@ describe('Unit: parser/block/extension/figure', () => {
31
31
  });
32
32
 
33
33
  it('valid', () => {
34
- assert.deepStrictEqual(inspect(parser('~~~figure [$group-name]\n!https://host\n~~~')), [['<figure data-label="group-name" data-group="group"><div class="figcontent"><a href="https://host" target="_blank"><img class="media" data-src="https://host" alt=""></a></div><span class="figindex"></span><figcaption></figcaption></figure>'], '']);
35
- assert.deepStrictEqual(inspect(parser('~~~figure [$group-name]\n!https://host\n~~~\n')), [['<figure data-label="group-name" data-group="group"><div class="figcontent"><a href="https://host" target="_blank"><img class="media" data-src="https://host" alt=""></a></div><span class="figindex"></span><figcaption></figcaption></figure>'], '']);
36
- assert.deepStrictEqual(inspect(parser('~~~figure [$group-name]\n!https://host\n\n~~~')), [['<figure data-label="group-name" data-group="group"><div class="figcontent"><a href="https://host" target="_blank"><img class="media" data-src="https://host" alt=""></a></div><span class="figindex"></span><figcaption></figcaption></figure>'], '']);
37
- assert.deepStrictEqual(inspect(parser('~~~figure [$group-name]\n!https://host\n\n\n~~~')), [['<figure data-label="group-name" data-group="group"><div class="figcontent"><a href="https://host" target="_blank"><img class="media" data-src="https://host" alt=""></a></div><span class="figindex"></span><figcaption></figcaption></figure>'], '']);
38
- assert.deepStrictEqual(inspect(parser('~~~figure [$group-name]\n!https://host\n\n\\\n~~~')), [['<figure data-label="group-name" data-group="group"><div class="figcontent"><a href="https://host" target="_blank"><img class="media" data-src="https://host" alt=""></a></div><span class="figindex"></span><figcaption>\\</figcaption></figure>'], '']);
39
- assert.deepStrictEqual(inspect(parser('~~~figure [$group-name]\n!https://host\n\n!https://caption\n~~~')), [['<figure data-label="group-name" data-group="group"><div class="figcontent"><a href="https://host" target="_blank"><img class="media" data-src="https://host" alt=""></a></div><span class="figindex"></span><figcaption>!<a href="https://caption" target="_blank">https://caption</a></figcaption></figure>'], '']);
40
- assert.deepStrictEqual(inspect(parser('~~~figure [$group-name]\n|\n|-\n|\n~~~')), [['<figure data-label="group-name" data-group="group"><div class="figcontent"><table><thead><tr></tr></thead><tbody><tr></tr></tbody></table></div><span class="figindex"></span><figcaption></figcaption></figure>'], '']);
41
- assert.deepStrictEqual(inspect(parser('~~~figure [$group-name]\n```\n\n```\n~~~')), [['<figure data-label="group-name" data-group="group"><div class="figcontent"><pre class="text" translate="no"></pre></div><span class="figindex"></span><figcaption></figcaption></figure>'], '']);
42
- assert.deepStrictEqual(inspect(parser('~~~figure [$group-name]\n```\n~~~\n```\n\n~~~')), [['<figure data-label="group-name" data-group="group"><div class="figcontent"><pre class="text" translate="no">~~~</pre></div><span class="figindex"></span><figcaption></figcaption></figure>'], '']);
43
- assert.deepStrictEqual(inspect(parser('~~~figure [$group-name]\n$$\n\n$$\n~~~')), [['<figure data-label="group-name" data-group="group"><div class="figcontent"><div class="math" translate="no">$$\n\n$$</div></div><span class="figindex"></span><figcaption></figcaption></figure>'], '']);
44
- assert.deepStrictEqual(inspect(parser('~~~figure [$group-name]\n$$\n~~~\n$$\n~~~')), [['<figure data-label="group-name" data-group="group"><div class="figcontent"><div class="math" translate="no">$$\n~~~\n$$</div></div><span class="figindex"></span><figcaption></figcaption></figure>'], '']);
45
- assert.deepStrictEqual(inspect(parser('~~~figure [$group-name]\n$$\n\n$$\n\ncaption\n~~~')), [['<figure data-label="group-name" data-group="group"><div class="figcontent"><div class="math" translate="no">$$\n\n$$</div></div><span class="figindex"></span><figcaption>caption</figcaption></figure>'], '']);
46
- assert.deepStrictEqual(inspect(parser('~~~figure [$group-name]\n~~~example/markdown\n~~~\n~~~')), [['<figure data-label="group-name" data-group="group"><div class="figcontent"><aside class="example" data-type="markdown"><pre translate="no"></pre><hr><section><ol class="annotations"></ol><ol class="references"></ol></section></aside></div><span class="figindex"></span><figcaption></figcaption></figure>'], '']);
47
- assert.deepStrictEqual(inspect(parser('~~~figure [$group-name]\n> \n~~~\n\n~~~')), [['<figure data-label="group-name" data-group="group"><div class="figcontent"><blockquote><pre><br>~~~</pre></blockquote></div><span class="figindex"></span><figcaption></figcaption></figure>'], '']);
48
- assert.deepStrictEqual(inspect(parser('~~~figure [$group-name]\n![]{https://host}\n~~~')), [['<figure data-label="group-name" data-group="group"><div class="figcontent"><a href="https://host" target="_blank"><img class="media" data-src="https://host" alt=""></a></div><span class="figindex"></span><figcaption></figcaption></figure>'], '']);
49
- assert.deepStrictEqual(inspect(parser('~~~~figure [$group-name]\n!https://host\n~~~~')), [['<figure data-label="group-name" data-group="group"><div class="figcontent"><a href="https://host" target="_blank"><img class="media" data-src="https://host" alt=""></a></div><span class="figindex"></span><figcaption></figcaption></figure>'], '']);
50
- assert.deepStrictEqual(inspect(parser('~~~figure $group-name\n!https://host\n~~~')), [['<figure data-label="group-name" data-group="group"><div class="figcontent"><a href="https://host" target="_blank"><img class="media" data-src="https://host" alt=""></a></div><span class="figindex"></span><figcaption></figcaption></figure>'], '']);
51
- assert.deepStrictEqual(inspect(parser('~~~[$group-name]\n!https://host\n~~~')), [['<figure data-label="group-name" data-group="group"><div class="figcontent"><a href="https://host" target="_blank"><img class="media" data-src="https://host" alt=""></a></div><span class="figindex"></span><figcaption></figcaption></figure>'], '']);
52
- assert.deepStrictEqual(inspect(parser('~~~$group-name\n!https://host\n~~~')), [['<figure data-label="group-name" data-group="group"><div class="figcontent"><a href="https://host" target="_blank"><img class="media" data-src="https://host" alt=""></a></div><span class="figindex"></span><figcaption></figcaption></figure>'], '']);
53
- assert.deepStrictEqual(inspect(parser('~~~figure [$group-0]\n> \n\n~~~')), [['<figure data-label="group-0" data-group="group" class="invalid"><div class="figcontent"><blockquote></blockquote></div><span class="figindex"></span><figcaption></figcaption></figure>'], '']);
54
- assert.deepStrictEqual(inspect(parser('~~~figure [$group-0.0]\n> \n\n~~~')), [['<figure data-label="group-0.0" data-group="group" class="invalid"><div class="figcontent"><blockquote></blockquote></div><span class="figindex"></span><figcaption></figcaption></figure>'], '']);
55
- assert.deepStrictEqual(inspect(parser('~~~figure [$-0]\n$$\n\n$$\n~~~')), [['<figure data-label="$-0" data-group="$" class="invalid"><div class="figcontent"><div class="math" translate="no">$$\n\n$$</div></div><span class="figindex"></span><figcaption></figcaption></figure>'], '']);
56
- assert.deepStrictEqual(inspect(parser('~~~figure [$-0.0]\n$$\n\n$$\n~~~')), [['<figure data-label="$-0.0" data-group="$" class="invalid"><div class="figcontent"><div class="math" translate="no">$$\n\n$$</div></div><span class="figindex"></span><figcaption></figcaption></figure>'], '']);
57
- assert.deepStrictEqual(inspect(parser('~~~figure [$-name]\n!https://host\n~~~')), [['<figure data-label="$-name" data-group="$" class="invalid"><div class="figcontent"><a href="https://host" target="_blank"><img class="media" data-src="https://host" alt=""></a></div><span class="figindex"></span><figcaption></figcaption></figure>'], '']);
58
- assert.deepStrictEqual(inspect(parser('~~~figure [$-name]\n$$\n\n$$\n\ncaption\n~~~')), [['<figure data-label="$-name" data-group="$" class="invalid"><div class="figcontent"><div class="math" translate="no">$$\n\n$$</div></div><span class="figindex"></span><figcaption>caption</figcaption></figure>'], '']);
34
+ assert.deepStrictEqual(inspect(parser('~~~figure [$group-name]\n!https://host\n~~~')), [['<figure data-label="group-name" data-group="group"><div class="figcontent"><a href="https://host" target="_blank"><img class="media" data-src="https://host" alt=""></a></div><figcaption><span class="figindex"></span></figcaption></figure>'], '']);
35
+ assert.deepStrictEqual(inspect(parser('~~~figure [$group-name]\n!https://host\n~~~\n')), [['<figure data-label="group-name" data-group="group"><div class="figcontent"><a href="https://host" target="_blank"><img class="media" data-src="https://host" alt=""></a></div><figcaption><span class="figindex"></span></figcaption></figure>'], '']);
36
+ assert.deepStrictEqual(inspect(parser('~~~figure [$group-name]\n!https://host\n\n~~~')), [['<figure data-label="group-name" data-group="group"><div class="figcontent"><a href="https://host" target="_blank"><img class="media" data-src="https://host" alt=""></a></div><figcaption><span class="figindex"></span></figcaption></figure>'], '']);
37
+ assert.deepStrictEqual(inspect(parser('~~~figure [$group-name]\n!https://host\n\n\n~~~')), [['<figure data-label="group-name" data-group="group"><div class="figcontent"><a href="https://host" target="_blank"><img class="media" data-src="https://host" alt=""></a></div><figcaption><span class="figindex"></span></figcaption></figure>'], '']);
38
+ assert.deepStrictEqual(inspect(parser('~~~figure [$group-name]\n!https://host\n\n\\\n~~~')), [['<figure data-label="group-name" data-group="group"><div class="figcontent"><a href="https://host" target="_blank"><img class="media" data-src="https://host" alt=""></a></div><figcaption><span class="figindex"></span>\\</figcaption></figure>'], '']);
39
+ assert.deepStrictEqual(inspect(parser('~~~figure [$group-name]\n!https://host\n\n!https://caption\n~~~')), [['<figure data-label="group-name" data-group="group"><div class="figcontent"><a href="https://host" target="_blank"><img class="media" data-src="https://host" alt=""></a></div><figcaption><span class="figindex"></span>!<a href="https://caption" target="_blank">https://caption</a></figcaption></figure>'], '']);
40
+ assert.deepStrictEqual(inspect(parser('~~~figure [$group-name]\n|\n|-\n|\n~~~')), [['<figure data-label="group-name" data-group="group"><div class="figcontent"><table><thead><tr></tr></thead><tbody><tr></tr></tbody></table></div><figcaption><span class="figindex"></span></figcaption></figure>'], '']);
41
+ assert.deepStrictEqual(inspect(parser('~~~figure [$group-name]\n```\n\n```\n~~~')), [['<figure data-label="group-name" data-group="group"><div class="figcontent"><pre class="text" translate="no"></pre></div><figcaption><span class="figindex"></span></figcaption></figure>'], '']);
42
+ assert.deepStrictEqual(inspect(parser('~~~figure [$group-name]\n```\n~~~\n```\n\n~~~')), [['<figure data-label="group-name" data-group="group"><div class="figcontent"><pre class="text" translate="no">~~~</pre></div><figcaption><span class="figindex"></span></figcaption></figure>'], '']);
43
+ assert.deepStrictEqual(inspect(parser('~~~figure [$group-name]\n```\n```\n\ncaption\n~~~')), [['<figure data-label="group-name" data-group="group"><div class="figcontent"><pre class="text" translate="no"></pre></div><figcaption><span class="figindex"></span>caption</figcaption></figure>'], '']);
44
+ assert.deepStrictEqual(inspect(parser('~~~figure [$group-name]\n$$\n\n$$\n~~~')), [['<figure data-label="group-name" data-group="group"><div class="figcontent"><div class="math" translate="no">$$\n\n$$</div></div><figcaption><span class="figindex"></span></figcaption></figure>'], '']);
45
+ assert.deepStrictEqual(inspect(parser('~~~figure [$group-name]\n$$\n~~~\n$$\n~~~')), [['<figure data-label="group-name" data-group="group"><div class="figcontent"><div class="math" translate="no">$$\n~~~\n$$</div></div><figcaption><span class="figindex"></span></figcaption></figure>'], '']);
46
+ assert.deepStrictEqual(inspect(parser('~~~figure [$group-name]\n$$\n\n$$\n\ncaption\n~~~')), [['<figure data-label="group-name" data-group="group"><div class="figcontent"><div class="math" translate="no">$$\n\n$$</div></div><figcaption><span class="figindex"></span>caption</figcaption></figure>'], '']);
47
+ assert.deepStrictEqual(inspect(parser('~~~figure [$group-name]\n~~~example/markdown\n~~~\n\ncaption\n~~~')), [['<figure data-label="group-name" data-group="group"><div class="figcontent"><aside class="example" data-type="markdown"><pre translate="no"></pre><hr><section><ol class="annotations"></ol><ol class="references"></ol></section></aside></div><figcaption><span class="figindex"></span>caption</figcaption></figure>'], '']);
48
+ assert.deepStrictEqual(inspect(parser('~~~figure [$group-name]\n~~~table\n~~~\n\ncaption\n~~~')), [['<figure data-label="group-name" data-group="group"><div class="figcontent"><table></table></div><figcaption><span class="figindex"></span>caption</figcaption></figure>'], '']);
49
+ assert.deepStrictEqual(inspect(parser('~~~figure [$group-name]\n> \n~~~\n\n~~~')), [['<figure data-label="group-name" data-group="group"><div class="figcontent"><blockquote><pre><br>~~~</pre></blockquote></div><figcaption><span class="figindex"></span></figcaption></figure>'], '']);
50
+ assert.deepStrictEqual(inspect(parser('~~~figure [$group-name]\n> \n~~~\n\ncaption\n~~~')), [['<figure data-label="group-name" data-group="group"><div class="figcontent"><blockquote><pre><br>~~~</pre></blockquote></div><figcaption><span class="figindex"></span>caption</figcaption></figure>'], '']);
51
+ assert.deepStrictEqual(inspect(parser('~~~figure [$group-name]\n![]{https://host}\n~~~')), [['<figure data-label="group-name" data-group="group"><div class="figcontent"><a href="https://host" target="_blank"><img class="media" data-src="https://host" alt=""></a></div><figcaption><span class="figindex"></span></figcaption></figure>'], '']);
52
+ assert.deepStrictEqual(inspect(parser('~~~~figure [$group-name]\n!https://host\n~~~~')), [['<figure data-label="group-name" data-group="group"><div class="figcontent"><a href="https://host" target="_blank"><img class="media" data-src="https://host" alt=""></a></div><figcaption><span class="figindex"></span></figcaption></figure>'], '']);
53
+ assert.deepStrictEqual(inspect(parser('~~~figure $group-name\n!https://host\n~~~')), [['<figure data-label="group-name" data-group="group"><div class="figcontent"><a href="https://host" target="_blank"><img class="media" data-src="https://host" alt=""></a></div><figcaption><span class="figindex"></span></figcaption></figure>'], '']);
54
+ assert.deepStrictEqual(inspect(parser('~~~[$group-name]\n!https://host\n~~~')), [['<figure data-label="group-name" data-group="group"><div class="figcontent"><a href="https://host" target="_blank"><img class="media" data-src="https://host" alt=""></a></div><figcaption><span class="figindex"></span></figcaption></figure>'], '']);
55
+ assert.deepStrictEqual(inspect(parser('~~~$group-name\n!https://host\n~~~')), [['<figure data-label="group-name" data-group="group"><div class="figcontent"><a href="https://host" target="_blank"><img class="media" data-src="https://host" alt=""></a></div><figcaption><span class="figindex"></span></figcaption></figure>'], '']);
56
+ assert.deepStrictEqual(inspect(parser('~~~figure [$group-0]\n> \n\n~~~')), [['<figure data-label="group-0" data-group="group" class="invalid"><div class="figcontent"><blockquote></blockquote></div><figcaption><span class="figindex"></span></figcaption></figure>'], '']);
57
+ assert.deepStrictEqual(inspect(parser('~~~figure [$group-0.0]\n> \n\n~~~')), [['<figure data-label="group-0.0" data-group="group" class="invalid"><div class="figcontent"><blockquote></blockquote></div><figcaption><span class="figindex"></span></figcaption></figure>'], '']);
58
+ assert.deepStrictEqual(inspect(parser('~~~figure [$-0]\n$$\n\n$$\n~~~')), [['<figure data-label="$-0" data-group="$" class="invalid"><div class="figcontent"><div class="math" translate="no">$$\n\n$$</div></div><figcaption><span class="figindex"></span></figcaption></figure>'], '']);
59
+ assert.deepStrictEqual(inspect(parser('~~~figure [$-0.0]\n$$\n\n$$\n~~~')), [['<figure data-label="$-0.0" data-group="$" class="invalid"><div class="figcontent"><div class="math" translate="no">$$\n\n$$</div></div><figcaption><span class="figindex"></span></figcaption></figure>'], '']);
60
+ assert.deepStrictEqual(inspect(parser('~~~figure [$-name]\n!https://host\n~~~')), [['<figure data-label="$-name" data-group="$" class="invalid"><div class="figcontent"><a href="https://host" target="_blank"><img class="media" data-src="https://host" alt=""></a></div><figcaption><span class="figindex"></span></figcaption></figure>'], '']);
61
+ assert.deepStrictEqual(inspect(parser('~~~figure [$-name]\n$$\n\n$$\n\ncaption\n~~~')), [['<figure data-label="$-name" data-group="$" class="invalid"><div class="figcontent"><div class="math" translate="no">$$\n\n$$</div></div><figcaption><span class="figindex"></span>caption</figcaption></figure>'], '']);
59
62
  assert(parser('~~~figure [$group-name]\n```\n0' + '\n'.repeat(300) + '```\n~~~'));
60
63
  assert(parser('~~~figure [$group-name]\n' + '>\n'.repeat(500) + '\n~~~'));
61
64
  });
@@ -15,6 +15,7 @@ import { localize } from '../../locale';
15
15
  import { visualize } from '../../util';
16
16
  import { html, defrag } from 'typed-dom';
17
17
  import { memoize } from 'spica/memoize';
18
+ import { unshift } from 'spica/array';
18
19
 
19
20
  import FigureParser = ExtensionParser.FigureParser;
20
21
 
@@ -72,8 +73,9 @@ export const figure: FigureParser = block(rewrite(segment, fmap(
72
73
  attributes(label.getAttribute('data-label')!, param, content, caption),
73
74
  [
74
75
  html('div', { class: 'figcontent' }, [content]),
75
- html('span', { class: 'figindex' }),
76
- html('figcaption', defrag(caption)),
76
+ html('figcaption', unshift(
77
+ [html('span', { class: 'figindex' })],
78
+ defrag(caption))),
77
79
  ])
78
80
  ])));
79
81
 
@@ -1,8 +1,8 @@
1
1
  import { undefined, Array } from 'spica/global';
2
2
  import { max, min, isArray } from 'spica/alias';
3
3
  import { ExtensionParser } from '../../block';
4
- import { Tree } from '../../../combinator/data/parser';
5
- import { union, subsequence, inits, some, block, line, validate, fence, rewrite, creator, open, clear, convert, trim, dup, recover, lazy, fmap, bind } from '../../../combinator';
4
+ import { Tree, eval } from '../../../combinator/data/parser';
5
+ import { union, subsequence, inits, some, block, line, validate, fence, rewrite, creator, open, clear, convert, trim, dup, recover, lazy, fmap } from '../../../combinator';
6
6
  import { inline } from '../../inline';
7
7
  import { str, anyline, emptyline, contentline } from '../../source';
8
8
  import { localize } from '../../locale';
@@ -23,18 +23,18 @@ export const segment: TableParser.SegmentParser = block(validate('~~~',
23
23
  export const segment_: TableParser.SegmentParser = block(validate('~~~',
24
24
  clear(fence(opener, 10000, false))), false);
25
25
 
26
- export const table: TableParser = block(validate('~~~', recover(bind(
26
+ export const table: TableParser = block(validate('~~~', recover(fmap(
27
27
  fence(opener, 10000),
28
28
  // Bug: Type mismatch between outer and inner.
29
29
  ([body, closer, opener, delim, param]: string[], _, context) => {
30
- if (!closer || param.trimStart()) return [[html('pre', {
30
+ if (!closer || param.trimStart()) return [html('pre', {
31
31
  class: 'invalid',
32
32
  translate: 'no',
33
33
  'data-invalid-syntax': 'table',
34
34
  'data-invalid-type': !closer ? 'closer' : 'argument',
35
35
  'data-invalid-description': !closer ? `Missing the closing delimiter "${delim}".` : 'Invalid argument.',
36
- }, `${opener}${body}${closer}`)], ''];
37
- return parser(body, context) ?? [[html('table')], ''];
36
+ }, `${opener}${body}${closer}`)];
37
+ return eval(parser(body, context)) ?? [html('table')];
38
38
  }),
39
39
  (source, _, reason) =>
40
40
  reason instanceof Error && reason.message === 'Number of columns must be 32 or less.'
@@ -34,7 +34,7 @@ export import ReplyParser = BlockParser.ReplyParser;
34
34
  export import ParagraphParser = BlockParser.ParagraphParser;
35
35
 
36
36
  export const block: BlockParser = creator(error(
37
- reset({ resources: { budget: 100 * 1000 } },
37
+ reset({ resources: { budget: 100 * 1000, recursion: 200 } },
38
38
  union([
39
39
  emptyline,
40
40
  horizontalrule,
@@ -61,7 +61,6 @@ function error(parser: BlockParser): BlockParser {
61
61
  {
62
62
  id: id !== '' ? `error:${rnd0Z(8)}` : undefined,
63
63
  class: 'error',
64
- translate: 'no',
65
64
  },
66
65
  reason instanceof Error
67
66
  ? `${reason.name}: ${reason.message}`
@@ -1,6 +1,6 @@
1
1
  import { undefined } from 'spica/global';
2
2
  import { BracketParser } from '../inline';
3
- import { union, some, surround, lazy } from '../../combinator';
3
+ import { union, some, creator, surround, lazy } from '../../combinator';
4
4
  import { inline } from '../inline';
5
5
  import { str } from '../source';
6
6
  import { html, defrag } from 'typed-dom';
@@ -9,7 +9,7 @@ import { unshift, push } from 'spica/array';
9
9
  const index = /^(?:[0-9]+(?:\.[0-9]+)*|[A-Za-z])/;
10
10
  const indexFW = new RegExp(index.source.replace(/[019AZaz](?!,)/g, c => String.fromCharCode(c.charCodeAt(0) + 0xFEE0)));
11
11
 
12
- export const bracket: BracketParser = lazy(() => union([
12
+ export const bracket: BracketParser = lazy(() => creator(union([
13
13
  surround(str('('), str(index), str(')'), false,
14
14
  ([as, bs = [], cs], rest) => [defrag(push(unshift(as, bs), cs)), rest]),
15
15
  surround(str('('), str(indexFW), str(')'), false,
@@ -30,4 +30,4 @@ export const bracket: BracketParser = lazy(() => union([
30
30
  surround(str('"'), some(inline, '"', '"'), str('"'), true,
31
31
  undefined,
32
32
  ([as, bs = []], rest) => [unshift(as, bs), rest]),
33
- ]));
33
+ ])));