securemark 0.276.5 → 0.277.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 +5 -0
- package/README.md +12 -12
- package/design.md +4 -0
- package/dist/index.js +72 -37
- package/markdown.d.ts +25 -8
- package/package.json +1 -1
- package/src/parser/api/parse.test.ts +2 -2
- package/src/parser/block/dlist.test.ts +1 -1
- package/src/parser/block/extension/fig.test.ts +1 -1
- package/src/parser/block/heading.test.ts +2 -2
- package/src/parser/block/paragraph.test.ts +12 -9
- package/src/parser/inline/autolink/email.test.ts +0 -3
- package/src/parser/inline/autolink/hashnum.test.ts +4 -4
- package/src/parser/inline/autolink/hashnum.ts +1 -1
- package/src/parser/inline/autolink/hashtag.test.ts +8 -7
- package/src/parser/inline/autolink/hashtag.ts +2 -2
- package/src/parser/inline/autolink.ts +5 -12
- package/src/parser/inline/deletion.test.ts +2 -2
- package/src/parser/inline/emphasis.test.ts +35 -26
- package/src/parser/inline/emphasis.ts +11 -4
- package/src/parser/inline/emstrong.ts +62 -0
- package/src/parser/inline/extension/index.test.ts +6 -6
- package/src/parser/inline/extension/indexee.ts +4 -4
- package/src/parser/inline/extension/placeholder.test.ts +4 -4
- package/src/parser/inline/insertion.test.ts +2 -2
- package/src/parser/inline/link.test.ts +1 -1
- package/src/parser/inline/mark.test.ts +1 -1
- package/src/parser/inline/{comment.test.ts → remark.test.ts} +26 -26
- package/src/parser/inline/{comment.ts → remark.ts} +3 -3
- package/src/parser/inline/strong.test.ts +32 -25
- package/src/parser/inline/strong.ts +8 -4
- package/src/parser/inline.test.ts +102 -22
- package/src/parser/inline.ts +6 -3
- package/src/parser/source/text.test.ts +0 -1
- package/src/parser/source/text.ts +0 -1
|
@@ -15,8 +15,8 @@ export const hashtag: AutolinkParser.HashtagParser = lazy(() => fmap(rewrite(
|
|
|
15
15
|
open(
|
|
16
16
|
'#',
|
|
17
17
|
str(new RegExp([
|
|
18
|
-
/^(?=(?:[0-9]{1,
|
|
19
|
-
/(?:[^\p{C}\p{S}\p{P}\s]|emoji|
|
|
18
|
+
/^(?!['_])(?=(?:[0-9]{1,9})?(?:[^\d\p{C}\p{S}\p{P}\s]|emoji|'|_(?=[^\p{C}\p{S}\p{P}\s]|emoji|')))/u.source,
|
|
19
|
+
/(?:[^\p{C}\p{S}\p{P}\s]|emoji|'|_(?=[^\p{C}\p{S}\p{P}\s]|emoji|'))+/u.source,
|
|
20
20
|
].join('').replace(/emoji/g, emoji), 'u')))),
|
|
21
21
|
convert(
|
|
22
22
|
source => `[${source}]{ ${`/hashtags/${source.slice(1)}`} }`,
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { AutolinkParser } from '../inline';
|
|
2
|
-
import { union, some, syntax, constraint, validate,
|
|
2
|
+
import { union, some, syntax, constraint, validate, lazy, fmap } from '../../combinator';
|
|
3
3
|
import { url, lineurl } from './autolink/url';
|
|
4
4
|
import { email } from './autolink/email';
|
|
5
5
|
import { channel } from './autolink/channel';
|
|
@@ -12,7 +12,7 @@ import { Syntax, State } from '../context';
|
|
|
12
12
|
import { stringify } from '../util';
|
|
13
13
|
|
|
14
14
|
export const autolink: AutolinkParser = lazy(() =>
|
|
15
|
-
validate(/^(?:[@#>0-9a-z\r\n]|\S[#>])/
|
|
15
|
+
validate(/^(?:[@#>0-9a-z\r\n]|\S[#>])/iu,
|
|
16
16
|
constraint(State.autolink, false,
|
|
17
17
|
syntax(Syntax.autolink, 1, 1, ~State.shortcut,
|
|
18
18
|
union([
|
|
@@ -21,24 +21,17 @@ export const autolink: AutolinkParser = lazy(() =>
|
|
|
21
21
|
url,
|
|
22
22
|
email,
|
|
23
23
|
// Escape unmatched email-like strings.
|
|
24
|
-
|
|
25
|
-
/^[0-9a-z](?:[_.+-](?=[0-9a-z])|[0-9a-z])*(?:@(?:[0-9a-z]+(?:[.-][0-9a-z]+)*)?)*/i,
|
|
26
|
-
({ source }) => {
|
|
27
|
-
if (source.length > 255 || source.includes('@')) return [[source], ''];
|
|
28
|
-
const i = source.indexOf('_');
|
|
29
|
-
if (i === -1) return [[source], ''];
|
|
30
|
-
return [[source.slice(0, i)], source.slice(i)];
|
|
31
|
-
}),
|
|
24
|
+
str(/^[0-9a-z]+(?:[_.+-][0-9a-z]+)*(?:@(?:[0-9a-z]+(?:[.-][0-9a-z]+)*)?)*/i),
|
|
32
25
|
channel,
|
|
33
26
|
account,
|
|
34
27
|
// Escape unmatched account-like strings.
|
|
35
28
|
str(/^@+[0-9a-z]*(?:-[0-9a-z]+)*/i),
|
|
36
29
|
// Escape invalid leading characters.
|
|
37
|
-
str(new RegExp(/^(?:[^\p{C}\p{S}\p{P}\s]|emoji)(?=#)/u.source.replace('emoji', emoji), 'u')),
|
|
30
|
+
str(new RegExp(/^(?:[^\p{C}\p{S}\p{P}\s]|emoji|['_])(?=#)/u.source.replace('emoji', emoji), 'u')),
|
|
38
31
|
hashtag,
|
|
39
32
|
hashnum,
|
|
40
33
|
// Escape unmatched hashtag-like strings.
|
|
41
|
-
str(new RegExp(/^#+(?:[^\p{C}\p{S}\p{P}\s]|emoji|')*/u.source.replace('emoji', emoji), 'u')),
|
|
34
|
+
str(new RegExp(/^#+(?:[^\p{C}\p{S}\p{P}\s]|emoji|['_])*/u.source.replace('emoji', emoji), 'u')),
|
|
42
35
|
// Escape invalid leading characters.
|
|
43
36
|
str(/^[0-9\p{Sc}](?=>)/u),
|
|
44
37
|
anchor,
|
|
@@ -37,8 +37,8 @@ describe('Unit: parser/inline/deletion', () => {
|
|
|
37
37
|
});
|
|
38
38
|
|
|
39
39
|
it('nest', () => {
|
|
40
|
-
assert.deepStrictEqual(inspect(parser('
|
|
41
|
-
assert.deepStrictEqual(inspect(parser('
|
|
40
|
+
assert.deepStrictEqual(inspect(parser('~~*~~a~~*~~')), [['<del><em><del>a</del></em></del>'], '']);
|
|
41
|
+
assert.deepStrictEqual(inspect(parser('~~*++a++*~~')), [['<del><em><ins>a</ins></em></del>'], '']);
|
|
42
42
|
});
|
|
43
43
|
|
|
44
44
|
});
|
|
@@ -7,38 +7,47 @@ describe('Unit: parser/inline/emphasis', () => {
|
|
|
7
7
|
const parser = (source: string) => some(emphasis)({ source, context: {} });
|
|
8
8
|
|
|
9
9
|
it('invalid', () => {
|
|
10
|
-
assert.deepStrictEqual(inspect(parser('
|
|
11
|
-
assert.deepStrictEqual(inspect(parser('
|
|
12
|
-
assert.deepStrictEqual(inspect(parser('
|
|
13
|
-
assert.deepStrictEqual(inspect(parser('
|
|
14
|
-
assert.deepStrictEqual(inspect(parser('
|
|
15
|
-
assert.deepStrictEqual(inspect(parser('
|
|
16
|
-
assert.deepStrictEqual(inspect(parser('
|
|
17
|
-
assert.deepStrictEqual(inspect(parser('
|
|
18
|
-
assert.deepStrictEqual(inspect(parser('
|
|
19
|
-
assert.deepStrictEqual(inspect(parser('
|
|
20
|
-
assert.deepStrictEqual(inspect(parser('
|
|
21
|
-
assert.deepStrictEqual(inspect(parser('
|
|
22
|
-
assert.deepStrictEqual(inspect(parser('
|
|
23
|
-
assert.deepStrictEqual(inspect(parser('
|
|
24
|
-
assert.deepStrictEqual(inspect(parser('
|
|
25
|
-
assert.deepStrictEqual(inspect(parser('
|
|
26
|
-
assert.deepStrictEqual(inspect(parser('
|
|
27
|
-
assert.deepStrictEqual(inspect(parser('
|
|
10
|
+
assert.deepStrictEqual(inspect(parser('*')), undefined);
|
|
11
|
+
assert.deepStrictEqual(inspect(parser('*a')), [['*', 'a'], '']);
|
|
12
|
+
assert.deepStrictEqual(inspect(parser('*a *')), [['*', 'a'], ' *']);
|
|
13
|
+
assert.deepStrictEqual(inspect(parser('*a *')), [['*', 'a', ' '], ' *']);
|
|
14
|
+
assert.deepStrictEqual(inspect(parser('*a\n*')), [['*', 'a'], '\n*']);
|
|
15
|
+
assert.deepStrictEqual(inspect(parser('*a\nb*')), [['*', 'a'], '\nb*']);
|
|
16
|
+
assert.deepStrictEqual(inspect(parser('*a\\ *')), [['*', 'a'], '\\ *']);
|
|
17
|
+
assert.deepStrictEqual(inspect(parser('*a\\\n*')), [['*', 'a'], '\\\n*']);
|
|
18
|
+
assert.deepStrictEqual(inspect(parser('*a\\\nb*')), [['*', 'a'], '\\\nb*']);
|
|
19
|
+
assert.deepStrictEqual(inspect(parser('*a**b')), [['*', 'a', '**', 'b'], '']);
|
|
20
|
+
assert.deepStrictEqual(inspect(parser('*a**b*')), [['*', 'a', '**', 'b', '*'], '']);
|
|
21
|
+
assert.deepStrictEqual(inspect(parser('* *')), undefined);
|
|
22
|
+
assert.deepStrictEqual(inspect(parser('* a*')), undefined);
|
|
23
|
+
assert.deepStrictEqual(inspect(parser('* a *')), undefined);
|
|
24
|
+
assert.deepStrictEqual(inspect(parser('*\n*')), undefined);
|
|
25
|
+
assert.deepStrictEqual(inspect(parser('*\na*')), undefined);
|
|
26
|
+
assert.deepStrictEqual(inspect(parser('*\\ a*')), undefined);
|
|
27
|
+
assert.deepStrictEqual(inspect(parser('*\\\na*')), undefined);
|
|
28
|
+
assert.deepStrictEqual(inspect(parser('*<wbr>a*')), undefined);
|
|
29
|
+
assert.deepStrictEqual(inspect(parser('**a**')), undefined);
|
|
30
|
+
assert.deepStrictEqual(inspect(parser('***a***')), undefined);
|
|
31
|
+
assert.deepStrictEqual(inspect(parser(' *a*')), undefined);
|
|
28
32
|
});
|
|
29
33
|
|
|
30
34
|
it('basic', () => {
|
|
31
|
-
assert.deepStrictEqual(inspect(parser('
|
|
32
|
-
assert.deepStrictEqual(inspect(parser('
|
|
35
|
+
assert.deepStrictEqual(inspect(parser('*a*')), [['<em>a</em>'], '']);
|
|
36
|
+
assert.deepStrictEqual(inspect(parser('*ab*')), [['<em>ab</em>'], '']);
|
|
37
|
+
assert.deepStrictEqual(inspect(parser('*a**')), [['<em>a</em>'], '*']);
|
|
33
38
|
});
|
|
34
39
|
|
|
35
40
|
it('nest', () => {
|
|
36
|
-
assert.deepStrictEqual(inspect(parser('
|
|
37
|
-
assert.deepStrictEqual(inspect(parser('
|
|
38
|
-
assert.deepStrictEqual(inspect(parser('
|
|
39
|
-
assert.deepStrictEqual(inspect(parser('
|
|
40
|
-
assert.deepStrictEqual(inspect(parser('
|
|
41
|
-
assert.deepStrictEqual(inspect(parser('
|
|
41
|
+
assert.deepStrictEqual(inspect(parser('*a *b**')), [['<em>a <em>b</em></em>'], '']);
|
|
42
|
+
assert.deepStrictEqual(inspect(parser('*a **b***')), [['<em>a <strong>b</strong></em>'], '']);
|
|
43
|
+
assert.deepStrictEqual(inspect(parser('*a\\ *b**')), [['<em>a <em>b</em></em>'], '']);
|
|
44
|
+
assert.deepStrictEqual(inspect(parser('*a	*b**')), [['<em>a\t<em>b</em></em>'], '']);
|
|
45
|
+
assert.deepStrictEqual(inspect(parser('*a<wbr>*b**')), [['<em>a<wbr><em>b</em></em>'], '']);
|
|
46
|
+
assert.deepStrictEqual(inspect(parser('*a**b**c*')), [['<em>a<strong>b</strong>c</em>'], '']);
|
|
47
|
+
assert.deepStrictEqual(inspect(parser('*a**b**c*d')), [['<em>a<strong>b</strong>c</em>'], 'd']);
|
|
48
|
+
assert.deepStrictEqual(inspect(parser('*`a`*')), [['<em><code data-src="`a`">a</code></em>'], '']);
|
|
49
|
+
assert.deepStrictEqual(inspect(parser('*(*a*)*')), [['<em><span class="paren">(<em>a</em>)</span></em>'], '']);
|
|
50
|
+
assert.deepStrictEqual(inspect(parser('*(**a**)*')), [['<em><span class="paren">(<strong>a</strong>)</span></em>'], '']);
|
|
42
51
|
});
|
|
43
52
|
|
|
44
53
|
});
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import { EmphasisParser } from '../inline';
|
|
2
2
|
import { union, some, syntax, surround, open, lazy } from '../../combinator';
|
|
3
3
|
import { inline } from '../inline';
|
|
4
|
+
import { emstrong } from './emstrong';
|
|
5
|
+
import { strong } from './strong';
|
|
4
6
|
import { str } from '../source';
|
|
5
7
|
import { Syntax, State } from '../context';
|
|
6
8
|
import { startTight, blankWith } from '../visibility';
|
|
@@ -8,12 +10,17 @@ import { unshift } from 'spica/array';
|
|
|
8
10
|
import { html, defrag } from 'typed-dom/dom';
|
|
9
11
|
|
|
10
12
|
export const emphasis: EmphasisParser = lazy(() => surround(
|
|
11
|
-
str('
|
|
13
|
+
str('*', '*'),
|
|
12
14
|
syntax(Syntax.none, 1, 1, State.none,
|
|
13
15
|
startTight(some(union([
|
|
14
|
-
|
|
15
|
-
|
|
16
|
+
strong,
|
|
17
|
+
some(inline, blankWith('*'), [[/^\\?\n/, 9]]),
|
|
18
|
+
open(some(inline, '*', [[/^\\?\n/, 9]]), union([
|
|
19
|
+
emstrong,
|
|
20
|
+
strong,
|
|
21
|
+
emphasis,
|
|
22
|
+
])),
|
|
16
23
|
])))),
|
|
17
|
-
str('
|
|
24
|
+
str('*'), false,
|
|
18
25
|
([, bs], rest) => [[html('em', defrag(bs))], rest],
|
|
19
26
|
([as, bs], rest) => [unshift(as, bs), rest]));
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { EmStrongParser, EmphasisParser, StrongParser } from '../inline';
|
|
2
|
+
import { Result, IntermediateParser } from '../../combinator/data/parser';
|
|
3
|
+
import { union, syntax, some, surround, open, lazy, bind } from '../../combinator';
|
|
4
|
+
import { inline } from '../inline';
|
|
5
|
+
import { strong } from './strong';
|
|
6
|
+
import { emphasis } from './emphasis';
|
|
7
|
+
import { str } from '../source';
|
|
8
|
+
import { Syntax, State } from '../context';
|
|
9
|
+
import { startTight, blankWith } from '../visibility';
|
|
10
|
+
import { html, defrag } from 'typed-dom/dom';
|
|
11
|
+
import { unshift } from 'spica/array';
|
|
12
|
+
|
|
13
|
+
const substrong: IntermediateParser<StrongParser> = lazy(() => some(union([
|
|
14
|
+
some(inline, blankWith('**'), [[/^\\?\n/, 9]]),
|
|
15
|
+
open(some(inline, '*', [[/^\\?\n/, 9]]), union([
|
|
16
|
+
emstrong,
|
|
17
|
+
strong,
|
|
18
|
+
])),
|
|
19
|
+
])));
|
|
20
|
+
const subemphasis: IntermediateParser<EmphasisParser> = lazy(() => some(union([
|
|
21
|
+
strong,
|
|
22
|
+
some(inline, blankWith('*'), [[/^\\?\n/, 9]]),
|
|
23
|
+
open(some(inline, '*', [[/^\\?\n/, 9]]), union([
|
|
24
|
+
emstrong,
|
|
25
|
+
strong,
|
|
26
|
+
emphasis,
|
|
27
|
+
])),
|
|
28
|
+
])));
|
|
29
|
+
|
|
30
|
+
export const emstrong: EmStrongParser = lazy(() => surround(
|
|
31
|
+
str('***'),
|
|
32
|
+
syntax(Syntax.none, 1, 1, State.none,
|
|
33
|
+
startTight(some(union([
|
|
34
|
+
some(inline, blankWith('*'), [[/^\\?\n/, 9]]),
|
|
35
|
+
open(some(inline, '*', [[/^\\?\n/, 9]]), inline),
|
|
36
|
+
])))),
|
|
37
|
+
str(/^\*{1,3}/), false,
|
|
38
|
+
([, bs, cs], rest, context): Result<HTMLElement | string, typeof context> => {
|
|
39
|
+
assert(cs.length === 1);
|
|
40
|
+
switch (cs[0]) {
|
|
41
|
+
case '***':
|
|
42
|
+
return [[html('em', [html('strong', defrag(bs))])], rest];
|
|
43
|
+
case '**':
|
|
44
|
+
return bind<EmphasisParser>(
|
|
45
|
+
subemphasis,
|
|
46
|
+
(ds, rest) =>
|
|
47
|
+
rest.slice(0, 1) === '*'
|
|
48
|
+
? [[html('em', unshift([html('strong', defrag(bs))], defrag(ds)))], rest.slice(1)]
|
|
49
|
+
: [unshift(['*', html('strong', defrag(bs))], ds), rest])
|
|
50
|
+
({ source: rest, context }) ?? [['*', html('strong', defrag(bs))], rest];
|
|
51
|
+
case '*':
|
|
52
|
+
return bind<StrongParser>(
|
|
53
|
+
substrong,
|
|
54
|
+
(ds, rest) =>
|
|
55
|
+
rest.slice(0, 2) === '**'
|
|
56
|
+
? [[html('strong', unshift([html('em', defrag(bs))], defrag(ds)))], rest.slice(2)]
|
|
57
|
+
: [unshift(['**', html('em', defrag(bs))], ds), rest])
|
|
58
|
+
({ source: rest, context }) ?? [['**', html('em', defrag(bs))], rest];
|
|
59
|
+
}
|
|
60
|
+
assert(false);
|
|
61
|
+
},
|
|
62
|
+
([as, bs], rest) => [unshift(as, bs), rest]));
|
|
@@ -43,7 +43,7 @@ describe('Unit: parser/inline/extension/index', () => {
|
|
|
43
43
|
assert.deepStrictEqual(inspect(parser('[#a \\ ]')), [['<a class="index" href="#index::a">a</a>'], '']);
|
|
44
44
|
assert.deepStrictEqual(inspect(parser('[#a ]')), [['<a class="index" href="#index::a">a</a>'], '']);
|
|
45
45
|
assert.deepStrictEqual(inspect(parser('[#a <wbr>]')), [['<a class="index" href="#index::a">a</a>'], '']);
|
|
46
|
-
assert.deepStrictEqual(inspect(parser('[#a [% b %]]')), [['<a class="index" href="#index::a">a <span class="
|
|
46
|
+
assert.deepStrictEqual(inspect(parser('[#a [% b %]]')), [['<a class="index" href="#index::a">a <span class="remark"><input type="checkbox"><span>[% b %]</span></span></a>'], '']);
|
|
47
47
|
assert.deepStrictEqual(inspect(parser('[#a\\ ]')), [['<a class="index" href="#index::a">a</a>'], '']);
|
|
48
48
|
assert.deepStrictEqual(inspect(parser('[#a\\ b]')), [['<a class="index" href="#index::a_b">a b</a>'], '']);
|
|
49
49
|
assert.deepStrictEqual(inspect(parser('[#[]]')), [['<a class="index" href="#index::[]">[]</a>'], '']);
|
|
@@ -51,7 +51,7 @@ describe('Unit: parser/inline/extension/index', () => {
|
|
|
51
51
|
assert.deepStrictEqual(inspect(parser('[#\\\\]')), [['<a class="index" href="#index::\\">\\</a>'], '']);
|
|
52
52
|
assert.deepStrictEqual(inspect(parser('[#A]')), [['<a class="index" href="#index::A">A</a>'], '']);
|
|
53
53
|
assert.deepStrictEqual(inspect(parser('[#==]')), [['<a class="index" href="#index::==">==</a>'], '']);
|
|
54
|
-
assert.deepStrictEqual(inspect(parser('[
|
|
54
|
+
assert.deepStrictEqual(inspect(parser('[#*A*]')), [['<a class="index" href="#index::A"><em>A</em></a>'], '']);
|
|
55
55
|
assert.deepStrictEqual(inspect(parser('[#`A`]')), [['<a class="index" href="#index::`A`"><code data-src="`A`">A</code></a>'], '']);
|
|
56
56
|
assert.deepStrictEqual(inspect(parser('[#${A}$]')), [['<a class="index" href="#index::${A}$"><span class="math" translate="no" data-src="${A}$">${A}$</span></a>'], '']);
|
|
57
57
|
assert.deepStrictEqual(inspect(parser('[#[A](a)]')), [['<a class="index" href="#index::A"><ruby>A<rp>(</rp><rt>a</rt><rp>)</rp></ruby></a>'], '']);
|
|
@@ -60,8 +60,8 @@ describe('Unit: parser/inline/extension/index', () => {
|
|
|
60
60
|
assert.deepStrictEqual(inspect(parser('[#@a]')), [['<a class="index" href="#index::@a">@a</a>'], '']);
|
|
61
61
|
assert.deepStrictEqual(inspect(parser('[#http://host]')), [['<a class="index" href="#index::http://host">http://host</a>'], '']);
|
|
62
62
|
assert.deepStrictEqual(inspect(parser('[#!http://host]')), [['<a class="index" href="#index::!http://host">!http://host</a>'], '']);
|
|
63
|
-
assert.deepStrictEqual(inspect(parser('[#[% %]]')), [['<a class="index"><span class="
|
|
64
|
-
assert.deepStrictEqual(inspect(parser('[#[% a %]]')), [['<a class="index"><span class="
|
|
63
|
+
assert.deepStrictEqual(inspect(parser('[#[% %]]')), [['<a class="index"><span class="remark"><input type="checkbox"><span>[% %]</span></span></a>'], '']);
|
|
64
|
+
assert.deepStrictEqual(inspect(parser('[#[% a %]]')), [['<a class="index"><span class="remark"><input type="checkbox"><span>[% a %]</span></span></a>'], '']);
|
|
65
65
|
assert.deepStrictEqual(inspect(parser('[#a((b))]')), [['<a class="index" href="#index::a((b))">a<span class="paren">((b))</span></a>'], '']);
|
|
66
66
|
assert.deepStrictEqual(inspect(parser('[#a[[b]]]')), [['<a class="index" href="#index::a[[b]]">a[[b]]</a>'], '']);
|
|
67
67
|
});
|
|
@@ -76,7 +76,7 @@ describe('Unit: parser/inline/extension/index', () => {
|
|
|
76
76
|
assert.deepStrictEqual(inspect(parser('[#a|b ]')), [['<a class="index" href="#index::b">a<span class="indexer" data-index="b"></span></a>'], '']);
|
|
77
77
|
assert.deepStrictEqual(inspect(parser('[#a|b ]')), [['<a class="index" href="#index::b">a<span class="indexer" data-index="b"></span></a>'], '']);
|
|
78
78
|
assert.deepStrictEqual(inspect(parser('[#a|\\b]')), [['<a class="index" href="#index::b">a<span class="indexer" data-index="b"></span></a>'], '']);
|
|
79
|
-
assert.deepStrictEqual(inspect(parser('[#a
|
|
79
|
+
assert.deepStrictEqual(inspect(parser('[#a|*b*]')), [['<a class="index" href="#index::*b*">a<span class="indexer" data-index="*b*"></span></a>'], '']);
|
|
80
80
|
assert.deepStrictEqual(inspect(parser('[#a|b c]')), [['<a class="index" href="#index::b_c">a<span class="indexer" data-index="b_c"></span></a>'], '']);
|
|
81
81
|
assert.deepStrictEqual(inspect(parser('[#a|b c]')), [['<a class="index" href="#index::b_c">a<span class="indexer" data-index="b_c"></span></a>'], '']);
|
|
82
82
|
assert.deepStrictEqual(inspect(parser('[#a|[]]')), [['<a class="index" href="#index::[]">a<span class="indexer" data-index="[]"></span></a>'], '']);
|
|
@@ -86,7 +86,7 @@ describe('Unit: parser/inline/extension/index', () => {
|
|
|
86
86
|
assert.deepStrictEqual(inspect(parser('[#a \\ |b]')), [['<a class="index" href="#index::b">a<span class="indexer" data-index="b"></span></a>'], '']);
|
|
87
87
|
assert.deepStrictEqual(inspect(parser('[#a |b]')), [['<a class="index" href="#index::b">a<span class="indexer" data-index="b"></span></a>'], '']);
|
|
88
88
|
assert.deepStrictEqual(inspect(parser('[#a <wbr>|b]')), [['<a class="index" href="#index::b">a<span class="indexer" data-index="b"></span></a>'], '']);
|
|
89
|
-
assert.deepStrictEqual(inspect(parser('[#a [% b %]|c]')), [['<a class="index" href="#index::c">a <span class="
|
|
89
|
+
assert.deepStrictEqual(inspect(parser('[#a [% b %]|c]')), [['<a class="index" href="#index::c">a <span class="remark"><input type="checkbox"><span>[% b %]</span></span><span class="indexer" data-index="c"></span></a>'], '']);
|
|
90
90
|
assert.deepStrictEqual(inspect(parser('[#a\\ |b]')), [['<a class="index" href="#index::b">a<span class="indexer" data-index="b"></span></a>'], '']);
|
|
91
91
|
});
|
|
92
92
|
|
|
@@ -47,7 +47,7 @@ export function index(source: Element, optional = false): string {
|
|
|
47
47
|
export function signature(source: Element | DocumentFragment): string {
|
|
48
48
|
assert(!navigator.userAgent.includes('Chrome') || !source.querySelector('br:not(:has(+ :is(ul, ol)))'));
|
|
49
49
|
const target = source.cloneNode(true) as typeof source;
|
|
50
|
-
for (let es = target.querySelectorAll('code[data-src], .math[data-src], .label[data-label], .
|
|
50
|
+
for (let es = target.querySelectorAll('code[data-src], .math[data-src], .label[data-label], .remark, rt, rp, br, .annotation, .reference, .checkbox, ul, ol'),
|
|
51
51
|
len = es.length, i = 0; i < len; ++i) {
|
|
52
52
|
const el = es[i];
|
|
53
53
|
switch (el.tagName) {
|
|
@@ -69,7 +69,7 @@ export function signature(source: Element | DocumentFragment): string {
|
|
|
69
69
|
case 'label':
|
|
70
70
|
el.replaceWith(`[$${el.getAttribute('data-label')!.replace('$', '')}]`);
|
|
71
71
|
continue;
|
|
72
|
-
case '
|
|
72
|
+
case 'remark':
|
|
73
73
|
case 'checkbox':
|
|
74
74
|
case 'annotation':
|
|
75
75
|
case 'reference':
|
|
@@ -83,7 +83,7 @@ export function signature(source: Element | DocumentFragment): string {
|
|
|
83
83
|
export const text = reduce((source: Element | DocumentFragment): string => {
|
|
84
84
|
assert(!navigator.userAgent.includes('Chrome') || !source.querySelector('br:not(:has(+ :is(ul, ol)))'));
|
|
85
85
|
const target = source.cloneNode(true) as typeof source;
|
|
86
|
-
for (let es = target.querySelectorAll('code[data-src], .math[data-src], .
|
|
86
|
+
for (let es = target.querySelectorAll('code[data-src], .math[data-src], .remark, rt, rp, br, .annotation, .reference, .checkbox, ul, ol'),
|
|
87
87
|
len = es.length, i = 0; i < len; ++i) {
|
|
88
88
|
const el = es[i];
|
|
89
89
|
switch (el.tagName) {
|
|
@@ -102,7 +102,7 @@ export const text = reduce((source: Element | DocumentFragment): string => {
|
|
|
102
102
|
case 'math':
|
|
103
103
|
el.replaceWith(el.getAttribute('data-src')!);
|
|
104
104
|
continue;
|
|
105
|
-
case '
|
|
105
|
+
case 'remark':
|
|
106
106
|
case 'checkbox':
|
|
107
107
|
case 'annotation':
|
|
108
108
|
case 'reference':
|
|
@@ -44,13 +44,13 @@ describe('Unit: parser/inline/extension/placeholder', () => {
|
|
|
44
44
|
assert.deepStrictEqual(inspect(parser('[^a<wbr>]')), [['<span class="invalid">a<wbr></span>'], '']);
|
|
45
45
|
assert.deepStrictEqual(inspect(parser('[^a<wbr><wbr>]')), [['<span class="invalid">a<wbr><wbr></span>'], '']);
|
|
46
46
|
assert.deepStrictEqual(inspect(parser('[^==]')), [['<span class="invalid">==</span>'], '']);
|
|
47
|
-
assert.deepStrictEqual(inspect(parser('[^a[% b %]]')), [['<span class="invalid">a<span class="
|
|
48
|
-
assert.deepStrictEqual(inspect(parser('[^a[% b %][% c %]]')), [['<span class="invalid">a<span class="
|
|
47
|
+
assert.deepStrictEqual(inspect(parser('[^a[% b %]]')), [['<span class="invalid">a<span class="remark"><input type="checkbox"><span>[% b %]</span></span></span>'], '']);
|
|
48
|
+
assert.deepStrictEqual(inspect(parser('[^a[% b %][% c %]]')), [['<span class="invalid">a<span class="remark"><input type="checkbox"><span>[% b %]</span></span><span class="remark"><input type="checkbox"><span>[% c %]</span></span></span>'], '']);
|
|
49
49
|
assert.deepStrictEqual(inspect(parser('[^\\]]')), [['<span class="invalid">]</span>'], '']);
|
|
50
50
|
assert.deepStrictEqual(inspect(parser('[^(])]')), [['<span class="invalid"><span class="paren">(])</span></span>'], '']);
|
|
51
51
|
assert.deepStrictEqual(inspect(parser('[^!http://host]')), [['<span class="invalid">!<a class="url" href="http://host" target="_blank">http://host</a></span>'], '']);
|
|
52
|
-
assert.deepStrictEqual(inspect(parser('[^[% a %]]')), [['<span class="invalid"><span class="
|
|
53
|
-
assert.deepStrictEqual(inspect(parser('[^[% a %]b]')), [['<span class="invalid"><span class="
|
|
52
|
+
assert.deepStrictEqual(inspect(parser('[^[% a %]]')), [['<span class="invalid"><span class="remark"><input type="checkbox"><span>[% a %]</span></span></span>'], '']);
|
|
53
|
+
assert.deepStrictEqual(inspect(parser('[^[% a %]b]')), [['<span class="invalid"><span class="remark"><input type="checkbox"><span>[% a %]</span></span>b</span>'], '']);
|
|
54
54
|
});
|
|
55
55
|
|
|
56
56
|
});
|
|
@@ -37,8 +37,8 @@ describe('Unit: parser/inline/insertion', () => {
|
|
|
37
37
|
});
|
|
38
38
|
|
|
39
39
|
it('nest', () => {
|
|
40
|
-
assert.deepStrictEqual(inspect(parser('
|
|
41
|
-
assert.deepStrictEqual(inspect(parser('
|
|
40
|
+
assert.deepStrictEqual(inspect(parser('++*++a++*++')), [['<ins><em><ins>a</ins></em></ins>'], '']);
|
|
41
|
+
assert.deepStrictEqual(inspect(parser('++*~~a~~*++')), [['<ins><em><del>a</del></em></ins>'], '']);
|
|
42
42
|
});
|
|
43
43
|
|
|
44
44
|
});
|
|
@@ -175,7 +175,7 @@ describe('Unit: parser/inline/link', () => {
|
|
|
175
175
|
assert.deepStrictEqual(inspect(parser('[@a]{b}')), [['<a class="link" href="b">@a</a>'], '']);
|
|
176
176
|
assert.deepStrictEqual(inspect(parser('[@a@b]{c}')), [['<a class="link" href="c">@a@b</a>'], '']);
|
|
177
177
|
assert.deepStrictEqual(inspect(parser('[a@b]{c}')), [['<a class="link" href="c">a@b</a>'], '']);
|
|
178
|
-
assert.deepStrictEqual(inspect(parser('[*a*]{b}')), [['<a class="link" href="b"><
|
|
178
|
+
assert.deepStrictEqual(inspect(parser('[*a*]{b}')), [['<a class="link" href="b"><em>a</em></a>'], '']);
|
|
179
179
|
});
|
|
180
180
|
|
|
181
181
|
it('external', () => {
|
|
@@ -40,7 +40,7 @@ describe('Unit: parser/inline/mark', () => {
|
|
|
40
40
|
assert.deepStrictEqual(inspect(parser('==a\\ ==b====')), [['<mark id="mark::a_b">a <mark id="mark::b">b</mark><a href="#mark::b"></a></mark>', '<a href="#mark::a_b"></a>'], '']);
|
|
41
41
|
assert.deepStrictEqual(inspect(parser('==a	==b====')), [['<mark id="mark::a_b">a\t<mark id="mark::b">b</mark><a href="#mark::b"></a></mark>', '<a href="#mark::a_b"></a>'], '']);
|
|
42
42
|
assert.deepStrictEqual(inspect(parser('==a<wbr>==b====')), [['<mark id="mark::ab">a<wbr><mark id="mark::b">b</mark><a href="#mark::b"></a></mark>', '<a href="#mark::ab"></a>'], '']);
|
|
43
|
-
assert.deepStrictEqual(inspect(parser('
|
|
43
|
+
assert.deepStrictEqual(inspect(parser('==*==a==*==')), [['<mark id="mark::a"><em><mark id="mark::a">a</mark><a href="#mark::a"></a></em></mark>', '<a href="#mark::a"></a>'], '']);
|
|
44
44
|
});
|
|
45
45
|
|
|
46
46
|
});
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { remark } from './remark';
|
|
2
2
|
import { some } from '../../combinator';
|
|
3
3
|
import { inspect } from '../../debug.test';
|
|
4
4
|
|
|
5
|
-
describe('Unit: parser/inline/
|
|
6
|
-
describe('
|
|
7
|
-
const parser = (source: string) => some(
|
|
5
|
+
describe('Unit: parser/inline/remark', () => {
|
|
6
|
+
describe('remark', () => {
|
|
7
|
+
const parser = (source: string) => some(remark)({ source, context: {} });
|
|
8
8
|
|
|
9
9
|
it('invalid', () => {
|
|
10
10
|
assert.deepStrictEqual(inspect(parser('')), undefined);
|
|
@@ -19,7 +19,7 @@ describe('Unit: parser/inline/comment', () => {
|
|
|
19
19
|
assert.deepStrictEqual(inspect(parser('[% [%')), [['[%', ' ', '', '[', '%'], '']);
|
|
20
20
|
assert.deepStrictEqual(inspect(parser('[% [% ')), [['[%', ' ', '[%'], '']);
|
|
21
21
|
assert.deepStrictEqual(inspect(parser('[% [% a')), [['[%', ' ', '[%', ' ', 'a'], '']);
|
|
22
|
-
assert.deepStrictEqual(inspect(parser('[% [% a %]')), [['[%', ' ', '<span class="
|
|
22
|
+
assert.deepStrictEqual(inspect(parser('[% [% a %]')), [['[%', ' ', '<span class="remark"><input type="checkbox"><span>[% a %]</span></span>'], '']);
|
|
23
23
|
assert.deepStrictEqual(inspect(parser('[% a[%')), [['[%', ' ', 'a', '', '[', '%'], '']);
|
|
24
24
|
assert.deepStrictEqual(inspect(parser('[% a [%')), [['[%', ' ', 'a', ' ', '', '[', '%'], '']);
|
|
25
25
|
assert.deepStrictEqual(inspect(parser('[% a [% ')), [['[%', ' ', 'a', ' ', '[%'], '']);
|
|
@@ -37,27 +37,27 @@ describe('Unit: parser/inline/comment', () => {
|
|
|
37
37
|
});
|
|
38
38
|
|
|
39
39
|
it('basic', () => {
|
|
40
|
-
assert.deepStrictEqual(inspect(parser('[% %]')), [['<span class="
|
|
41
|
-
assert.deepStrictEqual(inspect(parser('[% %]')), [['<span class="
|
|
42
|
-
assert.deepStrictEqual(inspect(parser('[% %]')), [['<span class="
|
|
43
|
-
assert.deepStrictEqual(inspect(parser('[% a %]')), [['<span class="
|
|
44
|
-
assert.deepStrictEqual(inspect(parser('[% a b %]')), [['<span class="
|
|
45
|
-
assert.deepStrictEqual(inspect(parser('[% a\nb %]')), [['<span class="
|
|
46
|
-
assert.deepStrictEqual(inspect(parser('[% a %] %]')), [['<span class="
|
|
47
|
-
assert.deepStrictEqual(inspect(parser('[% %%] %]')), [['<span class="
|
|
48
|
-
assert.deepStrictEqual(inspect(parser('[% [% a %] %]')), [['<span class="
|
|
49
|
-
assert.deepStrictEqual(inspect(parser('[% [%% a %%] %]')), [['<span class="
|
|
50
|
-
assert.deepStrictEqual(inspect(parser('[%% a %%]')), [['<span class="
|
|
51
|
-
assert.deepStrictEqual(inspect(parser('[%% %] %%]')), [['<span class="
|
|
52
|
-
assert.deepStrictEqual(inspect(parser('[%% [% a %] %%]')), [['<span class="
|
|
53
|
-
assert.deepStrictEqual(inspect(parser('[% a %]b')), [['<span class="
|
|
54
|
-
assert.deepStrictEqual(inspect(parser('[%\na\n%]')), [['<span class="
|
|
55
|
-
assert.deepStrictEqual(inspect(parser('[% &a; %]')), [['<span class="
|
|
56
|
-
assert.deepStrictEqual(inspect(parser('[% © %]')), [['<span class="
|
|
57
|
-
assert.deepStrictEqual(inspect(parser('[% &copy; %]')), [['<span class="
|
|
58
|
-
assert.deepStrictEqual(inspect(parser('[% [ %]')), [['<span class="
|
|
59
|
-
assert.deepStrictEqual(inspect(parser('[% \\ a %]')), [['<span class="
|
|
60
|
-
assert.deepStrictEqual(inspect(parser('[% $-a %]$')), [['<span class="
|
|
40
|
+
assert.deepStrictEqual(inspect(parser('[% %]')), [['<span class="remark"><input type="checkbox"><span>[% %]</span></span>'], '']);
|
|
41
|
+
assert.deepStrictEqual(inspect(parser('[% %]')), [['<span class="remark"><input type="checkbox"><span>[% %]</span></span>'], '']);
|
|
42
|
+
assert.deepStrictEqual(inspect(parser('[% %]')), [['<span class="remark"><input type="checkbox"><span>[% %]</span></span>'], '']);
|
|
43
|
+
assert.deepStrictEqual(inspect(parser('[% a %]')), [['<span class="remark"><input type="checkbox"><span>[% a %]</span></span>'], '']);
|
|
44
|
+
assert.deepStrictEqual(inspect(parser('[% a b %]')), [['<span class="remark"><input type="checkbox"><span>[% a b %]</span></span>'], '']);
|
|
45
|
+
assert.deepStrictEqual(inspect(parser('[% a\nb %]')), [['<span class="remark"><input type="checkbox"><span>[% a<br>b %]</span></span>'], '']);
|
|
46
|
+
assert.deepStrictEqual(inspect(parser('[% a %] %]')), [['<span class="remark"><input type="checkbox"><span>[% a %]</span></span>'], ' %]']);
|
|
47
|
+
assert.deepStrictEqual(inspect(parser('[% %%] %]')), [['<span class="remark"><input type="checkbox"><span>[% %%] %]</span></span>'], '']);
|
|
48
|
+
assert.deepStrictEqual(inspect(parser('[% [% a %] %]')), [['<span class="remark"><input type="checkbox"><span>[% <span class="remark"><input type="checkbox"><span>[% a %]</span></span> %]</span></span>'], '']);
|
|
49
|
+
assert.deepStrictEqual(inspect(parser('[% [%% a %%] %]')), [['<span class="remark"><input type="checkbox"><span>[% <span class="remark"><input type="checkbox"><span>[%% a %%]</span></span> %]</span></span>'], '']);
|
|
50
|
+
assert.deepStrictEqual(inspect(parser('[%% a %%]')), [['<span class="remark"><input type="checkbox"><span>[%% a %%]</span></span>'], '']);
|
|
51
|
+
assert.deepStrictEqual(inspect(parser('[%% %] %%]')), [['<span class="remark"><input type="checkbox"><span>[%% %] %%]</span></span>'], '']);
|
|
52
|
+
assert.deepStrictEqual(inspect(parser('[%% [% a %] %%]')), [['<span class="remark"><input type="checkbox"><span>[%% <span class="remark"><input type="checkbox"><span>[% a %]</span></span> %%]</span></span>'], '']);
|
|
53
|
+
assert.deepStrictEqual(inspect(parser('[% a %]b')), [['<span class="remark"><input type="checkbox"><span>[% a %]</span></span>'], 'b']);
|
|
54
|
+
assert.deepStrictEqual(inspect(parser('[%\na\n%]')), [['<span class="remark"><input type="checkbox"><span>[%<br>a<br>%]</span></span>'], '']);
|
|
55
|
+
assert.deepStrictEqual(inspect(parser('[% &a; %]')), [['<span class="remark"><input type="checkbox"><span>[% <span class="invalid">&a;</span> %]</span></span>'], '']);
|
|
56
|
+
assert.deepStrictEqual(inspect(parser('[% © %]')), [['<span class="remark"><input type="checkbox"><span>[% © %]</span></span>'], '']);
|
|
57
|
+
assert.deepStrictEqual(inspect(parser('[% &copy; %]')), [['<span class="remark"><input type="checkbox"><span>[% &copy; %]</span></span>'], '']);
|
|
58
|
+
assert.deepStrictEqual(inspect(parser('[% [ %]')), [['<span class="remark"><input type="checkbox"><span>[% [ %]</span></span>'], '']);
|
|
59
|
+
assert.deepStrictEqual(inspect(parser('[% \\ a %]')), [['<span class="remark"><input type="checkbox"><span>[% a %]</span></span>'], '']);
|
|
60
|
+
assert.deepStrictEqual(inspect(parser('[% $-a %]$')), [['<span class="remark"><input type="checkbox"><span>[% <a class="label" data-label="$-a">$-a</a> %]</span></span>'], '$']);
|
|
61
61
|
});
|
|
62
62
|
|
|
63
63
|
});
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { RemarkParser } from '../inline';
|
|
2
2
|
import { union, some, syntax, validate, surround, open, close, match, lazy } from '../../combinator';
|
|
3
3
|
import { inline } from '../inline';
|
|
4
4
|
import { text, str } from '../source';
|
|
@@ -7,7 +7,7 @@ import { memoize } from 'spica/memoize';
|
|
|
7
7
|
import { unshift, push } from 'spica/array';
|
|
8
8
|
import { html, defrag } from 'typed-dom/dom';
|
|
9
9
|
|
|
10
|
-
export const
|
|
10
|
+
export const remark: RemarkParser = lazy(() => validate('[%', syntax(Syntax.none, 4, 1, State.none, match(
|
|
11
11
|
/^\[(%+)\s/,
|
|
12
12
|
memoize(
|
|
13
13
|
([, fence]) =>
|
|
@@ -16,7 +16,7 @@ export const comment: CommentParser = lazy(() => validate('[%', syntax(Syntax.no
|
|
|
16
16
|
some(union([inline]), new RegExp(String.raw`^\s+${fence}\]`), [[new RegExp(String.raw`^\s+${fence}\]`), 4]]),
|
|
17
17
|
close(some(text, /^\S/), str(`${fence}]`)), true,
|
|
18
18
|
([as, bs = [], cs], rest) => [[
|
|
19
|
-
html('span', { class: '
|
|
19
|
+
html('span', { class: 'remark' }, [
|
|
20
20
|
html('input', { type: 'checkbox' }),
|
|
21
21
|
html('span', defrag(push(unshift(as, bs), cs))),
|
|
22
22
|
]),
|
|
@@ -7,37 +7,44 @@ describe('Unit: parser/inline/strong', () => {
|
|
|
7
7
|
const parser = (source: string) => some(strong)({ source, context: {} });
|
|
8
8
|
|
|
9
9
|
it('invalid', () => {
|
|
10
|
-
assert.deepStrictEqual(inspect(parser('
|
|
11
|
-
assert.deepStrictEqual(inspect(parser('
|
|
12
|
-
assert.deepStrictEqual(inspect(parser('
|
|
13
|
-
assert.deepStrictEqual(inspect(parser('
|
|
14
|
-
assert.deepStrictEqual(inspect(parser('
|
|
15
|
-
assert.deepStrictEqual(inspect(parser('
|
|
16
|
-
assert.deepStrictEqual(inspect(parser('
|
|
17
|
-
assert.deepStrictEqual(inspect(parser('
|
|
18
|
-
assert.deepStrictEqual(inspect(parser('
|
|
19
|
-
assert.deepStrictEqual(inspect(parser('*
|
|
20
|
-
assert.deepStrictEqual(inspect(parser('
|
|
21
|
-
assert.deepStrictEqual(inspect(parser('
|
|
22
|
-
assert.deepStrictEqual(inspect(parser('
|
|
23
|
-
assert.deepStrictEqual(inspect(parser('
|
|
24
|
-
assert.deepStrictEqual(inspect(parser('
|
|
25
|
-
assert.deepStrictEqual(inspect(parser('
|
|
26
|
-
assert.deepStrictEqual(inspect(parser('
|
|
27
|
-
assert.deepStrictEqual(inspect(parser('
|
|
10
|
+
assert.deepStrictEqual(inspect(parser('**')), undefined);
|
|
11
|
+
assert.deepStrictEqual(inspect(parser('**a')), [['**', 'a'], '']);
|
|
12
|
+
assert.deepStrictEqual(inspect(parser('**a **')), [['**', 'a'], ' **']);
|
|
13
|
+
assert.deepStrictEqual(inspect(parser('**a **')), [['**', 'a', ' '], ' **']);
|
|
14
|
+
assert.deepStrictEqual(inspect(parser('**a\n**')), [['**', 'a'], '\n**']);
|
|
15
|
+
assert.deepStrictEqual(inspect(parser('**a\nb**')), [['**', 'a'], '\nb**']);
|
|
16
|
+
assert.deepStrictEqual(inspect(parser('**a\\ **')), [['**', 'a'], '\\ **']);
|
|
17
|
+
assert.deepStrictEqual(inspect(parser('**a\\\n**')), [['**', 'a'], '\\\n**']);
|
|
18
|
+
assert.deepStrictEqual(inspect(parser('**a\\\nb**')), [['**', 'a'], '\\\nb**']);
|
|
19
|
+
assert.deepStrictEqual(inspect(parser('**a*')), [['**', 'a', '*'], '']);
|
|
20
|
+
assert.deepStrictEqual(inspect(parser('**a*b**')), [['**', 'a', '<em>b</em>', '*'], '']);
|
|
21
|
+
assert.deepStrictEqual(inspect(parser('** **')), undefined);
|
|
22
|
+
assert.deepStrictEqual(inspect(parser('** a**')), undefined);
|
|
23
|
+
assert.deepStrictEqual(inspect(parser('** a **')), undefined);
|
|
24
|
+
assert.deepStrictEqual(inspect(parser('**\n**')), undefined);
|
|
25
|
+
assert.deepStrictEqual(inspect(parser('**\na**')), undefined);
|
|
26
|
+
assert.deepStrictEqual(inspect(parser('**\\ a**')), undefined);
|
|
27
|
+
assert.deepStrictEqual(inspect(parser('**\\\na**')), undefined);
|
|
28
|
+
assert.deepStrictEqual(inspect(parser('**<wbr>a**')), undefined);
|
|
29
|
+
assert.deepStrictEqual(inspect(parser('***a***')), undefined);
|
|
30
|
+
assert.deepStrictEqual(inspect(parser(' **a**')), undefined);
|
|
28
31
|
});
|
|
29
32
|
|
|
30
33
|
it('basic', () => {
|
|
31
|
-
assert.deepStrictEqual(inspect(parser('
|
|
32
|
-
assert.deepStrictEqual(inspect(parser('
|
|
34
|
+
assert.deepStrictEqual(inspect(parser('**a**')), [['<strong>a</strong>'], '']);
|
|
35
|
+
assert.deepStrictEqual(inspect(parser('**ab**')), [['<strong>ab</strong>'], '']);
|
|
33
36
|
});
|
|
34
37
|
|
|
35
38
|
it('nest', () => {
|
|
36
|
-
assert.deepStrictEqual(inspect(parser('
|
|
37
|
-
assert.deepStrictEqual(inspect(parser('
|
|
38
|
-
assert.deepStrictEqual(inspect(parser('
|
|
39
|
-
assert.deepStrictEqual(inspect(parser('
|
|
40
|
-
assert.deepStrictEqual(inspect(parser('
|
|
39
|
+
assert.deepStrictEqual(inspect(parser('**a *b***')), [['<strong>a <em>b</em></strong>'], '']);
|
|
40
|
+
assert.deepStrictEqual(inspect(parser('**a **b****')), [['<strong>a <strong>b</strong></strong>'], '']);
|
|
41
|
+
assert.deepStrictEqual(inspect(parser('**a	**b****')), [['<strong>a\t<strong>b</strong></strong>'], '']);
|
|
42
|
+
assert.deepStrictEqual(inspect(parser('**a<wbr>**b****')), [['<strong>a<wbr><strong>b</strong></strong>'], '']);
|
|
43
|
+
assert.deepStrictEqual(inspect(parser('**a*b*c**')), [['<strong>a<em>b</em>c</strong>'], '']);
|
|
44
|
+
assert.deepStrictEqual(inspect(parser('**a*b*c**d')), [['<strong>a<em>b</em>c</strong>'], 'd']);
|
|
45
|
+
assert.deepStrictEqual(inspect(parser('**`a`**')), [['<strong><code data-src="`a`">a</code></strong>'], '']);
|
|
46
|
+
assert.deepStrictEqual(inspect(parser('**(*a*)**')), [['<strong><span class="paren">(<em>a</em>)</span></strong>'], '']);
|
|
47
|
+
assert.deepStrictEqual(inspect(parser('**(**a**)**')), [['<strong><span class="paren">(<strong>a</strong>)</span></strong>'], '']);
|
|
41
48
|
});
|
|
42
49
|
|
|
43
50
|
});
|