securemark 0.240.2 → 0.243.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.
- package/CHANGELOG.md +12 -0
- package/dist/securemark.js +1082 -2461
- package/global.dev.d.ts +6 -2
- package/index.d.ts +0 -1
- package/markdown.d.ts +61 -32
- package/package-lock.json +169 -77
- package/package.json +5 -4
- package/src/combinator/control/manipulation/fallback.ts +0 -1
- package/src/combinator/control/manipulation/indent.test.ts +3 -1
- package/src/combinator/control/manipulation/indent.ts +7 -6
- package/src/debug.test.ts +1 -1
- package/src/parser/api/bind.test.ts +1 -1
- package/src/parser/api/parse.test.ts +1 -1
- package/src/parser/api/parse.ts +1 -1
- package/src/parser/block/blockquote.test.ts +4 -4
- package/src/parser/block/blockquote.ts +2 -8
- package/src/parser/block/codeblock.test.ts +27 -27
- package/src/parser/block/codeblock.ts +2 -2
- package/src/parser/block/dlist.ts +1 -1
- package/src/parser/block/extension/aside.ts +1 -1
- package/src/parser/block/extension/example.ts +1 -1
- package/src/parser/block/extension/fig.test.ts +3 -3
- package/src/parser/block/extension/fig.ts +7 -6
- package/src/parser/block/extension/figbase.ts +1 -1
- package/src/parser/block/extension/figure.test.ts +10 -10
- package/src/parser/block/extension/figure.ts +16 -6
- package/src/parser/block/extension/message.test.ts +7 -7
- package/src/parser/block/extension/message.ts +6 -2
- package/src/parser/block/extension/placeholder.ts +9 -3
- package/src/parser/block/extension/table.test.ts +1 -1
- package/src/parser/block/extension/table.ts +1 -1
- package/src/parser/block/heading.ts +1 -1
- package/src/parser/block/horizontalrule.ts +1 -1
- package/src/parser/block/ilist.ts +1 -1
- package/src/parser/block/indentblock.test.ts +30 -0
- package/src/parser/block/indentblock.ts +13 -0
- package/src/parser/block/mathblock.ts +1 -1
- package/src/parser/block/olist.ts +6 -6
- package/src/parser/block/paragraph.ts +1 -1
- package/src/parser/block/reply/cite.ts +1 -1
- package/src/parser/block/reply/quote.ts +1 -1
- package/src/parser/block/reply.ts +1 -1
- package/src/parser/block/sidefence.test.ts +66 -0
- package/src/parser/block/sidefence.ts +31 -0
- package/src/parser/block/table.ts +1 -1
- package/src/parser/block/ulist.ts +1 -1
- package/src/parser/block.ts +8 -2
- package/src/parser/header.ts +1 -1
- package/src/parser/inline/annotation.ts +1 -1
- package/src/parser/inline/autolink/account.ts +1 -1
- package/src/parser/inline/autolink/anchor.ts +1 -1
- package/src/parser/inline/autolink/channel.ts +1 -1
- package/src/parser/inline/autolink/email.ts +1 -1
- package/src/parser/inline/autolink/hashnum.ts +1 -1
- package/src/parser/inline/autolink/hashtag.ts +1 -1
- package/src/parser/inline/bracket.ts +1 -1
- package/src/parser/inline/code.ts +1 -1
- package/src/parser/inline/comment.ts +1 -1
- package/src/parser/inline/deletion.ts +1 -1
- package/src/parser/inline/emphasis.ts +1 -1
- package/src/parser/inline/emstrong.ts +1 -1
- package/src/parser/inline/extension/index.ts +1 -1
- package/src/parser/inline/extension/indexee.ts +1 -1
- package/src/parser/inline/extension/indexer.ts +1 -1
- package/src/parser/inline/extension/label.ts +1 -1
- package/src/parser/inline/extension/placeholder.ts +3 -3
- package/src/parser/inline/html.ts +1 -1
- package/src/parser/inline/htmlentity.ts +1 -1
- package/src/parser/inline/insertion.ts +1 -1
- package/src/parser/inline/link.ts +1 -1
- package/src/parser/inline/mark.ts +1 -1
- package/src/parser/inline/math.ts +1 -1
- package/src/parser/inline/media.ts +1 -1
- package/src/parser/inline/reference.ts +1 -1
- package/src/parser/inline/ruby.ts +1 -1
- package/src/parser/inline/strong.ts +1 -1
- package/src/parser/inline/template.ts +1 -1
- package/src/parser/locale.ts +1 -1
- package/src/parser/processor/figure.test.ts +1 -1
- package/src/parser/processor/figure.ts +4 -4
- package/src/parser/processor/footnote.test.ts +1 -1
- package/src/parser/processor/footnote.ts +6 -5
- package/src/parser/source/text.ts +1 -1
- package/src/renderer/render/math.ts +1 -1
- package/src/renderer/render/media/audio.ts +1 -1
- package/src/renderer/render/media/image.ts +1 -1
- package/src/renderer/render/media/pdf.ts +1 -1
- package/src/renderer/render/media/twitter.ts +21 -23
- package/src/renderer/render/media/video.ts +1 -1
- package/src/renderer/render/media/youtube.ts +1 -1
- package/src/renderer/render/media.test.ts +1 -1
- package/src/renderer/render.ts +3 -5
- package/src/util/info.ts +3 -7
- package/src/util/quote.ts +1 -1
- package/src/util/toc.test.ts +1 -1
- package/src/util/toc.ts +1 -1
- package/src/util.ts +0 -1
- package/src/util/sync.ts +0 -57
|
@@ -1,22 +1,23 @@
|
|
|
1
1
|
import { undefined } from 'spica/global';
|
|
2
2
|
import { Parser, eval, exec } from '../../data/parser';
|
|
3
3
|
import { some } from '../../data/parser/some';
|
|
4
|
+
import { block } from '../constraint/block';
|
|
4
5
|
import { line } from '../constraint/line';
|
|
5
6
|
import { bind } from '../monad/bind';
|
|
6
7
|
import { match } from './match';
|
|
7
8
|
import { open } from './surround';
|
|
8
|
-
import {
|
|
9
|
+
import { memoize } from 'spica/memoize';
|
|
9
10
|
import { join } from 'spica/array';
|
|
10
11
|
|
|
11
|
-
export function indent<P extends Parser<unknown>>(parser: P): P;
|
|
12
|
-
export function indent<T>(parser: Parser<T
|
|
12
|
+
export function indent<P extends Parser<unknown>>(parser: P, separation?: boolean): P;
|
|
13
|
+
export function indent<T>(parser: Parser<T>, separation = false): Parser<T> {
|
|
13
14
|
assert(parser);
|
|
14
|
-
return bind(match(
|
|
15
|
+
return bind(block(match(
|
|
15
16
|
/^(?=(([ \t])\2*))/,
|
|
16
|
-
|
|
17
|
+
memoize(
|
|
17
18
|
([, indent]) =>
|
|
18
19
|
some(line(open(indent, source => [[unline(source)], '']))),
|
|
19
|
-
([, indent]) => indent)),
|
|
20
|
+
([, indent]) => indent.length * 2 + +(indent[0] === ' '), [])), separation),
|
|
20
21
|
(nodes, rest, context) => {
|
|
21
22
|
const result = parser(join(nodes, '\n'), context);
|
|
22
23
|
return result && exec(result) === ''
|
package/src/debug.test.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Result, eval, exec } from './combinator/data/parser';
|
|
2
|
-
import { html, define } from 'typed-dom';
|
|
2
|
+
import { html, define } from 'typed-dom/dom';
|
|
3
3
|
|
|
4
4
|
export function inspect(result: Result<HTMLElement | string>, until: number | string = Infinity): Result<string> {
|
|
5
5
|
return result && [
|
package/src/parser/api/parse.ts
CHANGED
|
@@ -9,7 +9,7 @@ import { normalize } from './normalize';
|
|
|
9
9
|
import { headers } from './header';
|
|
10
10
|
import { figure } from '../processor/figure';
|
|
11
11
|
import { footnote } from '../processor/footnote';
|
|
12
|
-
import { frag } from 'typed-dom';
|
|
12
|
+
import { frag } from 'typed-dom/dom';
|
|
13
13
|
import { ReadonlyURL } from 'spica/url';
|
|
14
14
|
|
|
15
15
|
interface Options extends ParserOptions {
|
|
@@ -76,10 +76,10 @@ describe('Unit: parser/block/blockquote', () => {
|
|
|
76
76
|
assert.deepStrictEqual(inspect(parser('!>> a')), [['<blockquote><blockquote><section><p>a</p><ol class="annotations"></ol><ol class="references"></ol></section></blockquote></blockquote>'], '']);
|
|
77
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
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"
|
|
80
|
-
assert.deepStrictEqual(inspect(parser('!> ```\n> a\n```')), [['<blockquote><section><pre class="text"
|
|
81
|
-
assert.deepStrictEqual(inspect(parser('!> ```\n> a\n> ```')), [['<blockquote><section><pre class="text"
|
|
82
|
-
assert.deepStrictEqual(inspect(parser('!> ```\n> a\n> \n> b\n> ```')), [['<blockquote><section><pre class="text"
|
|
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
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
84
|
assert.deepStrictEqual(inspect(parser('!> > a')), [['<blockquote><section><blockquote><pre>a</pre></blockquote><ol class="annotations"></ol><ol class="references"></ol></section></blockquote>'], '']);
|
|
85
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>'], '']);
|
|
@@ -3,7 +3,7 @@ import { union, some, block, validate, rewrite, creator, open, convert, lazy, fm
|
|
|
3
3
|
import { autolink } from '../autolink';
|
|
4
4
|
import { contentline } from '../source';
|
|
5
5
|
import { parse } from '../api/parse';
|
|
6
|
-
import { html, defrag } from 'typed-dom';
|
|
6
|
+
import { html, defrag } from 'typed-dom/dom';
|
|
7
7
|
|
|
8
8
|
export const segment: BlockquoteParser.SegmentParser = block(validate(['!>', '>'], union([
|
|
9
9
|
validate(/^!?>+(?=[^\S\n]|\n[^\S\n]*\S)/, some(contentline)),
|
|
@@ -15,14 +15,8 @@ export const blockquote: BlockquoteParser = lazy(() => block(rewrite(segment, un
|
|
|
15
15
|
]))));
|
|
16
16
|
|
|
17
17
|
const opener = /^(?=>>+(?:$|\s))/;
|
|
18
|
-
|
|
19
18
|
const indent = block(open(opener, some(contentline, /^>(?:$|\s)/)), false);
|
|
20
|
-
|
|
21
|
-
function unindent(source: string): string {
|
|
22
|
-
return source
|
|
23
|
-
.replace(/\n$/, '')
|
|
24
|
-
.replace(/^>(?:$|\s|(?=>+(?:$|\s)))/mg, '');
|
|
25
|
-
}
|
|
19
|
+
const unindent = (source: string) => source.replace(/(^|\n)>(?:[^\S\n]|(?=>*(?:$|\s)))|\n$/g, '$1');
|
|
26
20
|
|
|
27
21
|
const source: BlockquoteParser.SourceParser = lazy(() => fmap(
|
|
28
22
|
some(creator(union([
|
|
@@ -24,24 +24,24 @@ describe('Unit: parser/block/codeblock', () => {
|
|
|
24
24
|
});
|
|
25
25
|
|
|
26
26
|
it('basic', () => {
|
|
27
|
-
assert.deepStrictEqual(inspect(parser('```\n```')), [['<pre class="text"
|
|
28
|
-
assert.deepStrictEqual(inspect(parser('```\n\n```')), [['<pre class="text"
|
|
29
|
-
assert.deepStrictEqual(inspect(parser('```\na\n```')), [['<pre class="text"
|
|
30
|
-
assert.deepStrictEqual(inspect(parser('```\na\nb\n```')), [['<pre class="text"
|
|
31
|
-
assert.deepStrictEqual(inspect(parser('```\n\\\n```')), [['<pre class="text"
|
|
32
|
-
assert.deepStrictEqual(inspect(parser('```\n`\n```')), [['<pre class="text"
|
|
33
|
-
assert.deepStrictEqual(inspect(parser('```\n```\n```')), [['<pre class="text"
|
|
34
|
-
assert.deepStrictEqual(inspect(parser('```\n```\n\n```')), [['<pre class="text"
|
|
35
|
-
assert.deepStrictEqual(inspect(parser('```\n````\n```')), [['<pre class="text"
|
|
36
|
-
assert.deepStrictEqual(inspect(parser('```\n````\n\n```')), [['<pre class="text"
|
|
37
|
-
assert.deepStrictEqual(inspect(parser('````\n```\n````')), [['<pre class="text"
|
|
38
|
-
assert.deepStrictEqual(inspect(parser('````\n```\n\n````')), [['<pre class="text"
|
|
39
|
-
assert.deepStrictEqual(inspect(parser('```\n\n```\n')), [['<pre class="text"
|
|
40
|
-
assert.deepStrictEqual(inspect(parser('```\nhttp://host\n```')), [['<pre class="text"
|
|
41
|
-
assert.deepStrictEqual(inspect(parser('```\n!http://host\n```')), [['<pre class="text"
|
|
42
|
-
assert.deepStrictEqual(inspect(parser('```\n#a\n```')), [['<pre class="text"
|
|
43
|
-
assert.deepStrictEqual(inspect(parser('```\n@a#b\n```')), [['<pre class="text"
|
|
44
|
-
assert.deepStrictEqual(inspect(parser(`\`\`\`\n0${'\n'.repeat(300)}\`\`\``), '>'), [['<pre class="text"
|
|
27
|
+
assert.deepStrictEqual(inspect(parser('```\n```')), [['<pre class="text"></pre>'], '']);
|
|
28
|
+
assert.deepStrictEqual(inspect(parser('```\n\n```')), [['<pre class="text"></pre>'], '']);
|
|
29
|
+
assert.deepStrictEqual(inspect(parser('```\na\n```')), [['<pre class="text">a</pre>'], '']);
|
|
30
|
+
assert.deepStrictEqual(inspect(parser('```\na\nb\n```')), [['<pre class="text">a<br>b</pre>'], '']);
|
|
31
|
+
assert.deepStrictEqual(inspect(parser('```\n\\\n```')), [['<pre class="text">\\</pre>'], '']);
|
|
32
|
+
assert.deepStrictEqual(inspect(parser('```\n`\n```')), [['<pre class="text">`</pre>'], '']);
|
|
33
|
+
assert.deepStrictEqual(inspect(parser('```\n```\n```')), [['<pre class="text">```</pre>'], '']);
|
|
34
|
+
assert.deepStrictEqual(inspect(parser('```\n```\n\n```')), [['<pre class="text"></pre>'], '\n```']);
|
|
35
|
+
assert.deepStrictEqual(inspect(parser('```\n````\n```')), [['<pre class="text">````</pre>'], '']);
|
|
36
|
+
assert.deepStrictEqual(inspect(parser('```\n````\n\n```')), [['<pre class="text">````<br></pre>'], '']);
|
|
37
|
+
assert.deepStrictEqual(inspect(parser('````\n```\n````')), [['<pre class="text">```</pre>'], '']);
|
|
38
|
+
assert.deepStrictEqual(inspect(parser('````\n```\n\n````')), [['<pre class="text">```<br></pre>'], '']);
|
|
39
|
+
assert.deepStrictEqual(inspect(parser('```\n\n```\n')), [['<pre class="text"></pre>'], '']);
|
|
40
|
+
assert.deepStrictEqual(inspect(parser('```\nhttp://host\n```')), [['<pre class="text"><a href="http://host" target="_blank">http://host</a></pre>'], '']);
|
|
41
|
+
assert.deepStrictEqual(inspect(parser('```\n!http://host\n```')), [['<pre class="text">!<a href="http://host" target="_blank">http://host</a></pre>'], '']);
|
|
42
|
+
assert.deepStrictEqual(inspect(parser('```\n#a\n```')), [['<pre class="text"><a href="/hashtags/a" class="hashtag">#a</a></pre>'], '']);
|
|
43
|
+
assert.deepStrictEqual(inspect(parser('```\n@a#b\n```')), [['<pre class="text"><a href="/@a?ch=b" class="channel">@a#b</a></pre>'], '']);
|
|
44
|
+
assert.deepStrictEqual(inspect(parser(`\`\`\`\n0${'\n'.repeat(300)}\`\`\``), '>'), [['<pre class="text">'], '']);
|
|
45
45
|
});
|
|
46
46
|
|
|
47
47
|
it('attribute', () => {
|
|
@@ -50,21 +50,21 @@ describe('Unit: parser/block/codeblock', () => {
|
|
|
50
50
|
assert.deepStrictEqual(inspect(parser('```A\n```')), [['<pre class="code language-a" translate="no" data-lang="a"></pre>'], '']);
|
|
51
51
|
assert.deepStrictEqual(inspect(parser('```a-b\n```')), [['<pre class="code language-a-b" translate="no" data-lang="a-b"></pre>'], '']);
|
|
52
52
|
assert.deepStrictEqual(inspect(parser('```a-b0\n```')), [['<pre class="code language-a-b0" translate="no" data-lang="a-b0"></pre>'], '']);
|
|
53
|
-
assert.deepStrictEqual(inspect(parser('```a--b\n```')), [['<pre class="text"
|
|
54
|
-
assert.deepStrictEqual(inspect(parser('``` b\n```')), [['<pre class="text"
|
|
53
|
+
assert.deepStrictEqual(inspect(parser('```a--b\n```')), [['<pre class="text" data-path="a--b"></pre>'], '']);
|
|
54
|
+
assert.deepStrictEqual(inspect(parser('``` b\n```')), [['<pre class="text" data-path="b"></pre>'], '']);
|
|
55
55
|
assert.deepStrictEqual(inspect(parser('``` b c\n```')), [['<pre class="invalid" translate="no">``` b c\n```</pre>'], '']);
|
|
56
|
-
assert.deepStrictEqual(inspect(parser('``` b\\ c\n```')), [['<pre class="text"
|
|
56
|
+
assert.deepStrictEqual(inspect(parser('``` b\\ c\n```')), [['<pre class="text" data-path="b\\ c"></pre>'], '']);
|
|
57
57
|
assert.deepStrictEqual(inspect(parser('``` b.c\n```')), [['<pre class="code language-c" translate="no" data-lang="c" data-path="b.c"></pre>'], '']);
|
|
58
|
-
assert.deepStrictEqual(inspect(parser('``` .b\n```')), [['<pre class="text"
|
|
59
|
-
assert.deepStrictEqual(inspect(parser('``` b \n```')), [['<pre class="text"
|
|
60
|
-
assert.deepStrictEqual(inspect(parser('``` ~/.b\n```')), [['<pre class="text"
|
|
58
|
+
assert.deepStrictEqual(inspect(parser('``` .b\n```')), [['<pre class="text" data-path=".b"></pre>'], '']);
|
|
59
|
+
assert.deepStrictEqual(inspect(parser('``` b \n```')), [['<pre class="text" data-path="b"></pre>'], '']);
|
|
60
|
+
assert.deepStrictEqual(inspect(parser('``` ~/.b\n```')), [['<pre class="text" data-path="~/.b"></pre>'], '']);
|
|
61
61
|
assert.deepStrictEqual(inspect(parser('``` ~/b.c\n```')), [['<pre class="code language-c" translate="no" data-lang="c" data-path="~/b.c"></pre>'], '']);
|
|
62
|
-
assert.deepStrictEqual(inspect(parser('```.b\n```')), [['<pre class="text"
|
|
62
|
+
assert.deepStrictEqual(inspect(parser('```.b\n```')), [['<pre class="text" data-path=".b"></pre>'], '']);
|
|
63
63
|
assert.deepStrictEqual(inspect(parser('```b.c\n```')), [['<pre class="code language-c" translate="no" data-lang="c" data-path="b.c"></pre>'], '']);
|
|
64
64
|
assert.deepStrictEqual(inspect(parser('```a b.c\n```')), [['<pre class="code language-a" translate="no" data-lang="a" data-path="b.c"></pre>'], '']);
|
|
65
65
|
assert.deepStrictEqual(inspect(parser('```a 1\n```')), [['<pre class="code language-a" translate="no" data-lang="a" data-line="1"></pre>'], '']);
|
|
66
|
-
assert.deepStrictEqual(inspect(parser('``` 1\n```')), [['<pre class="text"
|
|
67
|
-
assert.deepStrictEqual(inspect(parser('``` 1,2-3\n```')), [['<pre class="text"
|
|
66
|
+
assert.deepStrictEqual(inspect(parser('``` 1\n```')), [['<pre class="text" data-line="1"></pre>'], '']);
|
|
67
|
+
assert.deepStrictEqual(inspect(parser('``` 1,2-3\n```')), [['<pre class="text" data-line="1,2-3"></pre>'], '']);
|
|
68
68
|
assert.deepStrictEqual(inspect(parser('``` 1 b.c\n```')), [['<pre class="code language-c" translate="no" data-lang="c" data-line="1" data-path="b.c"></pre>'], '']);
|
|
69
69
|
});
|
|
70
70
|
|
|
@@ -3,7 +3,7 @@ import { CodeBlockParser } from '../block';
|
|
|
3
3
|
import { eval } from '../../combinator/data/parser';
|
|
4
4
|
import { some, block, validate, fence, clear, fmap } from '../../combinator';
|
|
5
5
|
import { autolink } from '../autolink';
|
|
6
|
-
import { html, defrag } from 'typed-dom';
|
|
6
|
+
import { html, defrag } from 'typed-dom/dom';
|
|
7
7
|
|
|
8
8
|
const opener = /^(`{3,})(?!`)([^\n]*)(?:$|\n)/;
|
|
9
9
|
const language = /^[0-9a-z]+(?:-[a-z][0-9a-z]*)*$/i;
|
|
@@ -59,7 +59,7 @@ export const codeblock: CodeBlockParser = block(validate('```', fmap(
|
|
|
59
59
|
const el = html('pre',
|
|
60
60
|
{
|
|
61
61
|
class: params.lang ? `code language-${params.lang}` : 'text',
|
|
62
|
-
translate: 'no',
|
|
62
|
+
translate: params.lang ? 'no' : undefined,
|
|
63
63
|
'data-lang': params.lang || undefined,
|
|
64
64
|
'data-line': params.line || undefined,
|
|
65
65
|
'data-path': params.path || undefined,
|
|
@@ -4,7 +4,7 @@ import { inline, indexee, indexer } from '../inline';
|
|
|
4
4
|
import { anyline } from '../source';
|
|
5
5
|
import { localize } from '../locale';
|
|
6
6
|
import { visualize } from '../util';
|
|
7
|
-
import { html, defrag } from 'typed-dom';
|
|
7
|
+
import { html, defrag } from 'typed-dom/dom';
|
|
8
8
|
import { push } from 'spica/array';
|
|
9
9
|
|
|
10
10
|
export const dlist: DListParser = lazy(() => block(localize(fmap(validate(
|
|
@@ -2,7 +2,7 @@ import { ExtensionParser } from '../../block';
|
|
|
2
2
|
import { block, validate, fence, creator, fmap } from '../../../combinator';
|
|
3
3
|
import { identity, text } from '../../inline/extension/indexee';
|
|
4
4
|
import { parse } from '../../api/parse';
|
|
5
|
-
import { html } from 'typed-dom';
|
|
5
|
+
import { html } from 'typed-dom/dom';
|
|
6
6
|
|
|
7
7
|
export const aside: ExtensionParser.AsideParser = creator(100, block(validate('~~~', fmap(
|
|
8
8
|
fence(/^(~{3,})aside(?!\S)([^\n]*)(?:$|\n)/, 300),
|
|
@@ -3,7 +3,7 @@ import { eval } from '../../../combinator/data/parser';
|
|
|
3
3
|
import { block, validate, fence, creator, fmap } from '../../../combinator';
|
|
4
4
|
import { parse } from '../../api/parse';
|
|
5
5
|
import { mathblock } from '../mathblock';
|
|
6
|
-
import { html } from 'typed-dom';
|
|
6
|
+
import { html } from 'typed-dom/dom';
|
|
7
7
|
|
|
8
8
|
const opener = /^(~{3,})(?:example\/(\S+)|(?!\S))([^\n]*)(?:$|\n)/;
|
|
9
9
|
|
|
@@ -26,9 +26,9 @@ describe('Unit: parser/block/extension/fig', () => {
|
|
|
26
26
|
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>'], '']);
|
|
27
27
|
assert.deepStrictEqual(inspect(parser('[$group-name]\n|\n|-\n|')), [['<figure data-type="table" data-label="group-name" data-group="group"><figcaption><span class="figindex"></span></figcaption><div><table><thead><tr></tr></thead><tbody><tr></tr></tbody></table></div></figure>'], '']);
|
|
28
28
|
assert.deepStrictEqual(inspect(parser('[$group-name]\n|\n|-\n|\n')), [['<figure data-type="table" data-label="group-name" data-group="group"><figcaption><span class="figindex"></span></figcaption><div><table><thead><tr></tr></thead><tbody><tr></tr></tbody></table></div></figure>'], '']);
|
|
29
|
-
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"
|
|
30
|
-
assert.deepStrictEqual(inspect(parser('[$group-name]\n```\n\n```\n')), [['<figure data-type="text" data-label="group-name" data-group="group"><figcaption><span class="figindex"></span></figcaption><div><pre class="text"
|
|
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"
|
|
29
|
+
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>'], '']);
|
|
30
|
+
assert.deepStrictEqual(inspect(parser('[$group-name]\n```\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>'], '']);
|
|
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
34
|
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>'], '']);
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { ExtensionParser } from '../../block';
|
|
2
|
-
import { union, sequence, some, block, line, validate, rewrite, close, convert } from '../../../combinator';
|
|
2
|
+
import { union, sequence, some, block, line, validate, verify, rewrite, close, convert } from '../../../combinator';
|
|
3
3
|
import { contentline } from '../../source';
|
|
4
4
|
import { figure } from './figure';
|
|
5
5
|
import { segment as seg_label } from '../../inline/extension/label';
|
|
6
6
|
import { segment as seg_code } from '../codeblock';
|
|
7
7
|
import { segment as seg_math } from '../mathblock';
|
|
8
|
-
import { segment as seg_blockquote } from '../blockquote';
|
|
9
8
|
import { segment as seg_table } from './table';
|
|
9
|
+
import { segment as seg_blockquote } from '../blockquote';
|
|
10
10
|
import { segment as seg_placeholder } from './placeholder';
|
|
11
11
|
|
|
12
12
|
import FigParser = ExtensionParser.FigParser;
|
|
@@ -17,17 +17,18 @@ export const segment: FigParser.SegmentParser = block(validate(['[$', '$'],
|
|
|
17
17
|
union([
|
|
18
18
|
seg_code,
|
|
19
19
|
seg_math,
|
|
20
|
-
seg_blockquote,
|
|
21
20
|
seg_table,
|
|
21
|
+
seg_blockquote,
|
|
22
22
|
seg_placeholder,
|
|
23
23
|
some(contentline),
|
|
24
24
|
]),
|
|
25
25
|
])));
|
|
26
26
|
|
|
27
|
-
export const fig: FigParser = block(rewrite(segment, convert(
|
|
27
|
+
export const fig: FigParser = block(rewrite(segment, verify(convert(
|
|
28
28
|
source => {
|
|
29
|
-
const fence = (/^[^\n]*\n!?>+\s/.test(source) && source.match(/^~{3,}(
|
|
29
|
+
const fence = (/^[^\n]*\n!?>+\s/.test(source) && source.match(/^~{3,}(?=[^\S\n]*$)/mg) || [])
|
|
30
30
|
.reduce((max, fence) => fence > max ? fence : max, '~~') + '~';
|
|
31
31
|
return `${fence}figure ${source}\n\n${fence}`;
|
|
32
32
|
},
|
|
33
|
-
union([figure]))
|
|
33
|
+
union([figure])),
|
|
34
|
+
([el]) => el.className !== 'invalid' || el.getAttribute('data-invalid-type') !== 'content')));
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { ExtensionParser } from '../../block';
|
|
2
2
|
import { union, block, line, validate, fmap } from '../../../combinator';
|
|
3
3
|
import { label } from '../../inline/extension/label';
|
|
4
|
-
import { html } from 'typed-dom';
|
|
4
|
+
import { html } from 'typed-dom/dom';
|
|
5
5
|
|
|
6
6
|
export const figbase: ExtensionParser.FigbaseParser = block(fmap(
|
|
7
7
|
validate(/^\[?\$-(?:[0-9]+\.)*0\]?[^\S\n]*(?!\S|\n[^\S\n]*\S)/,
|
|
@@ -10,19 +10,19 @@ describe('Unit: parser/block/extension/figure', () => {
|
|
|
10
10
|
assert.deepStrictEqual(inspect(parser('~~~figure\n!https://host\n~~~')), undefined);
|
|
11
11
|
assert.deepStrictEqual(inspect(parser('~~~figure $group-name]\n!https://host\n~~~')), [['<figure data-type="media" data-label="group-name" data-group="group" class="invalid"><figcaption><span class="figindex"></span></figcaption><div><a href="https://host" target="_blank"><img class="media" data-src="https://host" alt=""></a></div></figure>'], '']);
|
|
12
12
|
assert.deepStrictEqual(inspect(parser('~~~figure [$group-name\n!https://host\n~~~')), undefined);
|
|
13
|
-
assert.deepStrictEqual(inspect(parser('~~~figure [$group-name]\nhttps://host\n~~~')),
|
|
14
|
-
assert.deepStrictEqual(inspect(parser('~~~figure [$group-name]\n!https://host\\\n~~~')),
|
|
15
|
-
assert.deepStrictEqual(inspect(parser('~~~figure [$group-name]\n!https://host\n\\\n~~~')),
|
|
16
|
-
assert.deepStrictEqual(inspect(parser('~~~figure [$group-name]\n!https://host\na\n~~~')),
|
|
13
|
+
assert.deepStrictEqual(inspect(parser('~~~figure [$group-name]\nhttps://host\n~~~')), [['<figure data-type="invalid" data-label="group-name" data-group="group" class="invalid"><figcaption><span class="figindex"></span></figcaption><div><br></div></figure>'], '']);
|
|
14
|
+
assert.deepStrictEqual(inspect(parser('~~~figure [$group-name]\n!https://host\\\n~~~')), [['<figure data-type="invalid" data-label="group-name" data-group="group" class="invalid"><figcaption><span class="figindex"></span></figcaption><div><br></div></figure>'], '']);
|
|
15
|
+
assert.deepStrictEqual(inspect(parser('~~~figure [$group-name]\n!https://host\n\\\n~~~')), [['<figure data-type="invalid" data-label="group-name" data-group="group" class="invalid"><figcaption><span class="figindex"></span></figcaption><div><br></div></figure>'], '']);
|
|
16
|
+
assert.deepStrictEqual(inspect(parser('~~~figure [$group-name]\n!https://host\na\n~~~')), [['<figure data-type="invalid" data-label="group-name" data-group="group" class="invalid"><figcaption><span class="figindex"></span></figcaption><div><br></div></figure>'], '']);
|
|
17
17
|
assert.deepStrictEqual(inspect(parser('~~~figure [$group-name]\n!https://host\n\n\n\n~~~')), undefined);
|
|
18
|
-
assert.deepStrictEqual(inspect(parser('~~~figure [$group-name]\n !https://host\n~~~')),
|
|
18
|
+
assert.deepStrictEqual(inspect(parser('~~~figure [$group-name]\n !https://host\n~~~')), [['<figure data-type="invalid" data-label="group-name" data-group="group" class="invalid"><figcaption><span class="figindex"></span></figcaption><div><br></div></figure>'], '']);
|
|
19
19
|
assert.deepStrictEqual(inspect(parser('~~~figure [$group-name]\n\n!https://host\n~~~')), undefined);
|
|
20
20
|
assert.deepStrictEqual(inspect(parser('~~~figure [$group-name]\n!https://host\n~~~\n~~~')), undefined);
|
|
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
|
-
assert.deepStrictEqual(inspect(parser('~~~figure [$group-name]a\nhttps://host\n~~~')),
|
|
23
|
+
assert.deepStrictEqual(inspect(parser('~~~figure [$group-name]a\nhttps://host\n~~~')), [['<figure data-type="invalid" data-label="group-name" data-group="group" class="invalid"><figcaption><span class="figindex"></span></figcaption><div><br></div></figure>'], '']);
|
|
24
24
|
assert.deepStrictEqual(inspect(parser('~~~figure [$group-name]a\n!https://host\n~~~')), [['<figure data-type="media" data-label="group-name" data-group="group" class="invalid"><figcaption><span class="figindex"></span></figcaption><div><a href="https://host" target="_blank"><img class="media" data-src="https://host" alt=""></a></div></figure>'], '']);
|
|
25
|
-
assert.deepStrictEqual(inspect(parser('~~~figure [$group-name] a\nhttps://host\n~~~')),
|
|
25
|
+
assert.deepStrictEqual(inspect(parser('~~~figure [$group-name] a\nhttps://host\n~~~')), [['<figure data-type="invalid" data-label="group-name" data-group="group" class="invalid"><figcaption><span class="figindex"></span></figcaption><div><br></div></figure>'], '']);
|
|
26
26
|
assert.deepStrictEqual(inspect(parser('~~~figure [$group-name] a\n!https://host\n~~~')), [['<figure data-type="media" data-label="group-name" data-group="group" class="invalid"><figcaption><span class="figindex"></span></figcaption><div><a href="https://host" target="_blank"><img class="media" data-src="https://host" alt=""></a></div></figure>'], '']);
|
|
27
27
|
assert.deepStrictEqual(inspect(parser('~~~figure a[$group-name]\n!https://host\n~~~')), undefined);
|
|
28
28
|
assert.deepStrictEqual(inspect(parser('~~~figure a [$group-name]\n!https://host\n~~~')), undefined);
|
|
@@ -46,9 +46,9 @@ describe('Unit: parser/block/extension/figure', () => {
|
|
|
46
46
|
assert.deepStrictEqual(inspect(parser('~~~figure [$group-name]\n- a\n~~~')), [['<figure data-type="list" data-label="group-name" data-group="group"><figcaption><span class="figindex"></span></figcaption><div><ul><li>a</li></ul></div></figure>'], '']);
|
|
47
47
|
assert.deepStrictEqual(inspect(parser('~~~figure [$group-name]\n1. a\n~~~')), [['<figure data-type="list" data-label="group-name" data-group="group"><figcaption><span class="figindex"></span></figcaption><div><ol><li>a</li></ol></div></figure>'], '']);
|
|
48
48
|
assert.deepStrictEqual(inspect(parser('~~~figure [$group-name]\n|\n|-\n|\n~~~')), [['<figure data-type="table" data-label="group-name" data-group="group"><figcaption><span class="figindex"></span></figcaption><div><table><thead><tr></tr></thead><tbody><tr></tr></tbody></table></div></figure>'], '']);
|
|
49
|
-
assert.deepStrictEqual(inspect(parser('~~~figure [$group-name]\n```\n\n```\n~~~')), [['<figure data-type="text" data-label="group-name" data-group="group"><figcaption><span class="figindex"></span></figcaption><div><pre class="text"
|
|
50
|
-
assert.deepStrictEqual(inspect(parser('~~~figure [$group-name]\n```\n~~~\n```\n\n~~~')), [['<figure data-type="text" data-label="group-name" data-group="group"><figcaption><span class="figindex"></span></figcaption><div><pre class="text"
|
|
51
|
-
assert.deepStrictEqual(inspect(parser('~~~figure [$group-name]\n```\n```\n\ncaption\n~~~')), [['<figure data-type="text" data-label="group-name" data-group="group"><figcaption><span class="figindex"></span>caption</figcaption><div><pre class="text"
|
|
49
|
+
assert.deepStrictEqual(inspect(parser('~~~figure [$group-name]\n```\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>'], '']);
|
|
50
|
+
assert.deepStrictEqual(inspect(parser('~~~figure [$group-name]\n```\n~~~\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>'], '']);
|
|
51
|
+
assert.deepStrictEqual(inspect(parser('~~~figure [$group-name]\n```\n```\n\ncaption\n~~~')), [['<figure data-type="text" data-label="group-name" data-group="group"><figcaption><span class="figindex"></span>caption</figcaption><div><pre class="text"></pre></div></figure>'], '']);
|
|
52
52
|
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>'], '']);
|
|
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\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>'], '']);
|
|
@@ -6,16 +6,17 @@ import { 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';
|
|
9
10
|
import { codeblock, segment_ as seg_code } from '../codeblock';
|
|
10
11
|
import { mathblock, segment_ as seg_math } from '../mathblock';
|
|
11
|
-
import { blockquote, segment as seg_blockquote } from '../blockquote';
|
|
12
12
|
import { example } from './example';
|
|
13
13
|
import { table, segment_ as seg_table } from './table';
|
|
14
|
+
import { blockquote, segment as seg_blockquote } from '../blockquote';
|
|
14
15
|
import { placeholder, segment_ as seg_placeholder } from './placeholder';
|
|
15
16
|
import { inline, media, shortmedia } from '../../inline';
|
|
16
17
|
import { localize } from '../../locale';
|
|
17
18
|
import { visualize } from '../../util';
|
|
18
|
-
import { html, defrag } from 'typed-dom';
|
|
19
|
+
import { html, defrag } from 'typed-dom/dom';
|
|
19
20
|
import { memoize } from 'spica/memoize';
|
|
20
21
|
import { unshift } from 'spica/array';
|
|
21
22
|
|
|
@@ -33,8 +34,8 @@ export const segment: FigureParser.SegmentParser = block(match(
|
|
|
33
34
|
union([
|
|
34
35
|
seg_code,
|
|
35
36
|
seg_math,
|
|
36
|
-
seg_blockquote,
|
|
37
37
|
seg_table,
|
|
38
|
+
seg_blockquote,
|
|
38
39
|
seg_placeholder,
|
|
39
40
|
some(contentline, closer),
|
|
40
41
|
]),
|
|
@@ -57,14 +58,16 @@ export const figure: FigureParser = block(rewrite(segment, fmap(
|
|
|
57
58
|
ulist,
|
|
58
59
|
olist,
|
|
59
60
|
styled_table,
|
|
61
|
+
indentblock,
|
|
60
62
|
codeblock,
|
|
61
63
|
mathblock,
|
|
62
|
-
blockquote,
|
|
63
64
|
example,
|
|
64
65
|
table,
|
|
66
|
+
blockquote,
|
|
65
67
|
placeholder,
|
|
66
|
-
line(media),
|
|
67
|
-
line(shortmedia),
|
|
68
|
+
block(line(media)),
|
|
69
|
+
block(line(shortmedia)),
|
|
70
|
+
fmap(some(contentline), () => [html('br')]),
|
|
68
71
|
])),
|
|
69
72
|
emptyline,
|
|
70
73
|
block(localize(
|
|
@@ -101,6 +104,9 @@ function attributes(label: string, param: string, content: HTMLElement, caption:
|
|
|
101
104
|
case 'A':
|
|
102
105
|
type = 'media';
|
|
103
106
|
break;
|
|
107
|
+
case 'BR':
|
|
108
|
+
type = 'invalid';
|
|
109
|
+
break;
|
|
104
110
|
case 'text':
|
|
105
111
|
case 'code':
|
|
106
112
|
case 'math':
|
|
@@ -111,6 +117,10 @@ function attributes(label: string, param: string, content: HTMLElement, caption:
|
|
|
111
117
|
assert(false);
|
|
112
118
|
}
|
|
113
119
|
const invalid =
|
|
120
|
+
type === 'invalid' && content.tagName === 'BR' && {
|
|
121
|
+
'data-invalid-type': 'content',
|
|
122
|
+
'data-invalid-message': 'Invalid content',
|
|
123
|
+
} ||
|
|
114
124
|
/^[^-]+-(?:[0-9]+\.)*0$/.test(label) && {
|
|
115
125
|
'data-invalid-type': 'label',
|
|
116
126
|
'data-invalid-message': 'The last part of the fixed label numbers must not be 0',
|
|
@@ -15,13 +15,13 @@ describe('Unit: parser/block/extension/message', () => {
|
|
|
15
15
|
});
|
|
16
16
|
|
|
17
17
|
it('valid', () => {
|
|
18
|
-
assert.deepStrictEqual(inspect(parser('~~~message/note\n~~~')), [['<div class="message type
|
|
19
|
-
assert.deepStrictEqual(inspect(parser('~~~message/note\n\n~~~')), [['<div class="message type
|
|
20
|
-
assert.deepStrictEqual(inspect(parser('~~~message/note\na\n~~~')), [['<div class="message type
|
|
21
|
-
assert.deepStrictEqual(inspect(parser('~~~message/note\na\n\n- \n~~~')), [['<div class="message type
|
|
22
|
-
assert.deepStrictEqual(inspect(parser('~~~message/note\n# a\n~~~')), [['<div class="message type
|
|
23
|
-
assert.deepStrictEqual(inspect(parser('~~~message/caution\n~~~')), [['<div class="message type
|
|
24
|
-
assert.deepStrictEqual(inspect(parser('~~~message/warning\n~~~')), [['<div class="message type
|
|
18
|
+
assert.deepStrictEqual(inspect(parser('~~~message/note\n~~~')), [['<div class="message" data-type="note"><h6>Note</h6></div>'], '']);
|
|
19
|
+
assert.deepStrictEqual(inspect(parser('~~~message/note\n\n~~~')), [['<div class="message" data-type="note"><h6>Note</h6></div>'], '']);
|
|
20
|
+
assert.deepStrictEqual(inspect(parser('~~~message/note\na\n~~~')), [['<div class="message" data-type="note"><h6>Note</h6><p>a</p></div>'], '']);
|
|
21
|
+
assert.deepStrictEqual(inspect(parser('~~~message/note\na\n\n- \n~~~')), [['<div class="message" data-type="note"><h6>Note</h6><p>a</p><ul><li></li></ul></div>'], '']);
|
|
22
|
+
assert.deepStrictEqual(inspect(parser('~~~message/note\n# a\n~~~')), [['<div class="message" data-type="note"><h6>Note</h6><p># a</p></div>'], '']);
|
|
23
|
+
assert.deepStrictEqual(inspect(parser('~~~message/caution\n~~~')), [['<div class="message" data-type="caution"><h6>Caution!</h6></div>'], '']);
|
|
24
|
+
assert.deepStrictEqual(inspect(parser('~~~message/warning\n~~~')), [['<div class="message" data-type="warning"><h6>WARNING!!</h6></div>'], '']);
|
|
25
25
|
});
|
|
26
26
|
|
|
27
27
|
});
|
|
@@ -7,11 +7,13 @@ 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';
|
|
10
11
|
import { codeblock } from '../codeblock';
|
|
11
12
|
import { mathblock } from '../mathblock';
|
|
13
|
+
import { sidefence } from '../sidefence';
|
|
12
14
|
import { blockquote } from '../blockquote';
|
|
13
15
|
import { paragraph } from '../paragraph';
|
|
14
|
-
import { html } from 'typed-dom';
|
|
16
|
+
import { html } from 'typed-dom/dom';
|
|
15
17
|
import { unshift, push } from 'spica/array';
|
|
16
18
|
|
|
17
19
|
import MessageParser = ExtensionParser.MessageParser;
|
|
@@ -41,7 +43,7 @@ export const message: MessageParser = block(validate('~~~', fmap(
|
|
|
41
43
|
}, `${opener}${body}${closer}`)];
|
|
42
44
|
}
|
|
43
45
|
return [
|
|
44
|
-
html('div', { class: `message type
|
|
46
|
+
html('div', { class: `message`, 'data-type': type }, unshift(
|
|
45
47
|
[html('h6', title(type))],
|
|
46
48
|
[...segment(body)].reduce((acc, seg) => push(acc, eval(content(seg, context), [])), []))),
|
|
47
49
|
];
|
|
@@ -65,8 +67,10 @@ const content: MessageParser.ContentParser = union([
|
|
|
65
67
|
olist,
|
|
66
68
|
ilist,
|
|
67
69
|
table,
|
|
70
|
+
indentblock,
|
|
68
71
|
codeblock,
|
|
69
72
|
mathblock,
|
|
73
|
+
sidefence,
|
|
70
74
|
blockquote,
|
|
71
75
|
paragraph,
|
|
72
76
|
]);
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { ExtensionParser } from '../../block';
|
|
2
2
|
import { block, validate, fence, clear, fmap } from '../../../combinator';
|
|
3
|
-
import {
|
|
3
|
+
import { segment as label } from '../../inline/extension/label';
|
|
4
|
+
import { html } from 'typed-dom/dom';
|
|
4
5
|
|
|
5
6
|
const opener = /^(~{3,})(?!~)[^\n]*(?:$|\n)/;
|
|
6
7
|
|
|
@@ -12,12 +13,17 @@ export const segment_: ExtensionParser.PlaceholderParser.SegmentParser = block(v
|
|
|
12
13
|
|
|
13
14
|
export const placeholder: ExtensionParser.PlaceholderParser = block(validate('~~~', fmap(
|
|
14
15
|
fence(opener, Infinity),
|
|
15
|
-
([body, closer, opener, delim]) => [
|
|
16
|
+
([body, closer, opener, delim]: string[], _, context) => [
|
|
16
17
|
html('pre', {
|
|
17
18
|
class: 'invalid',
|
|
18
19
|
translate: 'no',
|
|
19
20
|
'data-invalid-syntax': 'extension',
|
|
20
21
|
'data-invalid-type': !closer ? 'fence' : 'syntax',
|
|
21
|
-
'data-invalid-message': !closer ? `Missing the closing delimiter "${delim}"` : 'Invalid
|
|
22
|
+
'data-invalid-message': !closer ? `Missing the closing delimiter "${delim}"` : 'Invalid extension name',
|
|
23
|
+
...closer && (opener.slice(delim.length).split(/\s/, 1)[0] === 'figure' || label(opener.slice(delim.length), context)) && {
|
|
24
|
+
'data-invalid-syntax': 'figure',
|
|
25
|
+
'data-invalid-type': 'content',
|
|
26
|
+
'data-invalid-message': 'Invalid content',
|
|
27
|
+
},
|
|
22
28
|
}, `${opener}${body}${closer}`)
|
|
23
29
|
])));
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { table } from './table';
|
|
2
2
|
import { some } from '../../../combinator';
|
|
3
3
|
import { inspect } from '../../../debug.test';
|
|
4
|
-
import { html } from 'typed-dom';
|
|
4
|
+
import { html } from 'typed-dom/dom';
|
|
5
5
|
|
|
6
6
|
describe('Unit: parser/block/extension/table', () => {
|
|
7
7
|
describe('table', () => {
|
|
@@ -7,7 +7,7 @@ import { inline } from '../../inline';
|
|
|
7
7
|
import { str, anyline, emptyline, contentline } from '../../source';
|
|
8
8
|
import { localize } from '../../locale';
|
|
9
9
|
import { visualize } from '../../util';
|
|
10
|
-
import { html, defrag } from 'typed-dom';
|
|
10
|
+
import { html, defrag } from 'typed-dom/dom';
|
|
11
11
|
import { unshift, splice } from 'spica/array';
|
|
12
12
|
|
|
13
13
|
import TableParser = ExtensionParser.TableParser;
|
|
@@ -3,7 +3,7 @@ import { union, some, block, line, validate, focus, rewrite, context, open, trim
|
|
|
3
3
|
import { inline, indexee, indexer } from '../inline';
|
|
4
4
|
import { str } from '../source';
|
|
5
5
|
import { visualize } from '../util';
|
|
6
|
-
import { html, defrag } from 'typed-dom';
|
|
6
|
+
import { html, defrag } from 'typed-dom/dom';
|
|
7
7
|
|
|
8
8
|
export const segment: HeadingParser.SegmentParser = block(validate('#', focus(
|
|
9
9
|
/^#+[^\S\n]+\S[^\n]*(?:\n#+(?!\S)[^\n]*)*(?:$|\n)/,
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { HorizontalRuleParser } from '../block';
|
|
2
2
|
import { block, line, focus } from '../../combinator';
|
|
3
|
-
import { html } from 'typed-dom';
|
|
3
|
+
import { html } from 'typed-dom/dom';
|
|
4
4
|
|
|
5
5
|
export const horizontalrule: HorizontalRuleParser = block(line(focus(
|
|
6
6
|
/^-{3,}[^\S\n]*(?:$|\n)/,
|
|
@@ -4,7 +4,7 @@ import { ulist_, fillFirstLine } from './ulist';
|
|
|
4
4
|
import { olist_ } from './olist';
|
|
5
5
|
import { inline } from '../inline';
|
|
6
6
|
import { contentline } from '../source';
|
|
7
|
-
import { html, defrag } from 'typed-dom';
|
|
7
|
+
import { html, defrag } from 'typed-dom/dom';
|
|
8
8
|
|
|
9
9
|
export const ilist: IListParser = lazy(() => block(validate(
|
|
10
10
|
/^[-+*](?=[^\S\n]|\n[^\S\n]*\S)/,
|