securemark 0.232.2 → 0.233.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +12 -0
- package/dist/securemark.js +51 -88
- package/markdown.d.ts +13 -22
- package/package-lock.json +45 -45
- package/package.json +1 -1
- package/src/parser/api/parse.test.ts +6 -6
- package/src/parser/api/parse.ts +3 -2
- package/src/parser/block/extension/aside.ts +3 -3
- package/src/parser/block/extension/table.ts +3 -3
- package/src/parser/block/mathblock.ts +1 -1
- package/src/parser/block/paragraph.test.ts +7 -6
- package/src/parser/block/reply/cite.ts +1 -1
- package/src/parser/inline/annotation.test.ts +2 -4
- package/src/parser/inline/comment.test.ts +39 -38
- package/src/parser/inline/comment.ts +21 -28
- package/src/parser/inline/deletion.test.ts +1 -2
- package/src/parser/inline/emphasis.test.ts +0 -3
- package/src/parser/inline/extension/index.test.ts +4 -3
- package/src/parser/inline/extension/index.ts +2 -2
- package/src/parser/inline/extension/indexee.ts +22 -19
- package/src/parser/inline/extension/placeholder.test.ts +7 -7
- package/src/parser/inline/insertion.test.ts +1 -2
- package/src/parser/inline/link.test.ts +0 -1
- package/src/parser/inline/mark.test.ts +1 -4
- package/src/parser/inline/reference.test.ts +19 -21
- package/src/parser/inline/reference.ts +1 -1
- package/src/parser/inline/strong.test.ts +0 -3
- package/src/parser/inline/template.test.ts +1 -1
- package/src/parser/inline.ts +3 -3
- package/src/parser/processor/footnote.ts +3 -2
- package/src/parser/util.ts +2 -17
- package/src/parser/util.test.ts +0 -14
package/package.json
CHANGED
|
@@ -53,10 +53,10 @@ describe('Unit: parser/api/parse', () => {
|
|
|
53
53
|
['<p><wbr><br>a</p>']);
|
|
54
54
|
assert.deepStrictEqual(
|
|
55
55
|
[...parse('[#\n<wbr>\n#]').children].map(el => el.outerHTML),
|
|
56
|
-
['<p>[
|
|
56
|
+
['<p><span class="comment">[# <wbr> #]</span></p>']);
|
|
57
57
|
assert.deepStrictEqual(
|
|
58
58
|
[...parse('[#\n<wbr>\n#]\na').children].map(el => el.outerHTML),
|
|
59
|
-
['<p>[
|
|
59
|
+
['<p><span class="comment">[# <wbr> #]</span><br>a</p>']);
|
|
60
60
|
});
|
|
61
61
|
|
|
62
62
|
it('linebreak', () => {
|
|
@@ -199,17 +199,17 @@ describe('Unit: parser/api/parse', () => {
|
|
|
199
199
|
it('footnote', () => {
|
|
200
200
|
const footnotes = { annotations: html('ol'), references: html('ol') };
|
|
201
201
|
assert.deepStrictEqual(
|
|
202
|
-
[...parse('$-a\n$$\n$$\n\n(($-a[[b]][[c]]))', { footnotes }).children].map(el => el.outerHTML),
|
|
202
|
+
[...parse('$-a\n$$\n$$\n\n(($-a[[b]][[c*d*]]))', { footnotes }).children].map(el => el.outerHTML),
|
|
203
203
|
[
|
|
204
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>',
|
|
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="
|
|
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(
|
|
208
208
|
footnotes.annotations.outerHTML,
|
|
209
|
-
'<ol><li id="annotation:def:1"><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="
|
|
209
|
+
'<ol><li id="annotation:def:1"><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><sup><a href="#annotation:ref:1">^1</a></sup></li></ol>');
|
|
210
210
|
assert.deepStrictEqual(
|
|
211
211
|
footnotes.references.outerHTML,
|
|
212
|
-
'<ol><li id="reference:def:1">b<sup><a href="#reference:ref:1">^1</a></sup></li><li id="reference:def:2">c<sup><a href="#reference:ref:2">^2</a></sup></li></ol>');
|
|
212
|
+
'<ol><li id="reference:def:1">b<sup><a href="#reference:ref:1">^1</a></sup></li><li id="reference:def:2">c<em>d</em><sup><a href="#reference:ref:2">^2</a></sup></li></ol>');
|
|
213
213
|
});
|
|
214
214
|
|
|
215
215
|
it('normalize', () => {
|
package/src/parser/api/parse.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { undefined, location } from 'spica/global';
|
|
2
|
-
import { ObjectAssign } from 'spica/alias';
|
|
2
|
+
import { ObjectAssign, ObjectCreate } from 'spica/alias';
|
|
3
3
|
import { ParserOptions } from '../../..';
|
|
4
4
|
import { MarkdownParser } from '../../../markdown';
|
|
5
5
|
import { eval } from '../../combinator/data/parser';
|
|
@@ -24,13 +24,14 @@ export function parse(source: string, opts: Options = {}, context?: MarkdownPars
|
|
|
24
24
|
assert(!context?.delimiters);
|
|
25
25
|
context = context && url === '' && context.id === opts.id
|
|
26
26
|
? context
|
|
27
|
-
: ObjectAssign(
|
|
27
|
+
: ObjectAssign(ObjectCreate(context ?? {}), opts, {
|
|
28
28
|
host: opts.host ?? context?.host ?? new ReadonlyURL(location.pathname, location.origin),
|
|
29
29
|
url: url ? new ReadonlyURL(url as ':') : context?.url,
|
|
30
30
|
id: opts.id ?? context?.id,
|
|
31
31
|
footnotes: undefined,
|
|
32
32
|
test: undefined,
|
|
33
33
|
});
|
|
34
|
+
assert(context.caches === arguments[2]?.caches);
|
|
34
35
|
if (context.host?.origin === 'null') throw new Error(`Invalid host: ${context.host.href}`);
|
|
35
36
|
const node = frag();
|
|
36
37
|
let index = 0;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { ExtensionParser } from '../../block';
|
|
2
2
|
import { block, validate, fence, creator, fmap } from '../../../combinator';
|
|
3
|
-
import { identity } from '../../inline/extension/indexee';
|
|
3
|
+
import { identity, text } from '../../inline/extension/indexee';
|
|
4
4
|
import { parse } from '../../api/parse';
|
|
5
5
|
import { html } from 'typed-dom';
|
|
6
6
|
|
|
@@ -35,9 +35,9 @@ export const aside: ExtensionParser.AsideParser = creator(100, block(validate('~
|
|
|
35
35
|
'data-invalid-type': 'content',
|
|
36
36
|
'data-invalid-description': 'Missing the title at the first line.',
|
|
37
37
|
}, `${opener}${body}${closer}`)];
|
|
38
|
-
assert(identity(heading));
|
|
38
|
+
assert(identity(text(heading)));
|
|
39
39
|
return [
|
|
40
|
-
html('aside', { id: identity(heading), class: 'aside' }, [
|
|
40
|
+
html('aside', { id: identity(text(heading)), class: 'aside' }, [
|
|
41
41
|
document,
|
|
42
42
|
annotations,
|
|
43
43
|
references,
|
|
@@ -113,9 +113,9 @@ function attributes(source: string) {
|
|
|
113
113
|
assert(colspan?.[0] !== '0');
|
|
114
114
|
rowspan === '1' ? rowspan = undefined : undefined;
|
|
115
115
|
colspan === '1' ? colspan = undefined : undefined;
|
|
116
|
-
rowspan &&= max(0, min(+rowspan, 65534))
|
|
117
|
-
colspan &&= max(0, min(+colspan, 1000))
|
|
118
|
-
highlight &&= highlight.length > 0 ? highlight.length
|
|
116
|
+
rowspan &&= `${max(0, min(+rowspan, 65534))}`;
|
|
117
|
+
colspan &&= `${max(0, min(+colspan, 1000))}`;
|
|
118
|
+
highlight &&= highlight.length > 0 ? `${highlight.length}` : undefined;
|
|
119
119
|
const valid = !highlight
|
|
120
120
|
|| source[0] === '#' && +highlight <= 1
|
|
121
121
|
|| source[0] === ':' && +highlight <= 6;
|
|
@@ -16,7 +16,7 @@ export const mathblock: MathBlockParser = block(validate('$$', fmap(
|
|
|
16
16
|
// Bug: Type mismatch between outer and inner.
|
|
17
17
|
([body, closer, opener, delim, param]: string[], _, { caches: { math: cache = undefined } = {} }) => [
|
|
18
18
|
delim.length === 2 && closer && param.trimStart() === ''
|
|
19
|
-
? cache?.get(
|
|
19
|
+
? cache?.get(`${delim}\n${body}${delim}`)?.cloneNode(true) as HTMLDivElement ||
|
|
20
20
|
html('div', { class: 'math', translate: 'no' }, `${delim}\n${body}${delim}`)
|
|
21
21
|
: html('pre', {
|
|
22
22
|
class: 'invalid',
|
|
@@ -47,12 +47,13 @@ describe('Unit: parser/block/paragraph', () => {
|
|
|
47
47
|
});
|
|
48
48
|
|
|
49
49
|
it('comment', () => {
|
|
50
|
-
assert.deepStrictEqual(inspect(parser('[# a #]')), [['<p>[# a #]</p>'], '']);
|
|
51
|
-
assert.deepStrictEqual(inspect(parser('[# a #]b')), [['<p><
|
|
52
|
-
assert.deepStrictEqual(inspect(parser('[# a #]\nb')), [['<p>[# a #]
|
|
53
|
-
assert.deepStrictEqual(inspect(parser('[
|
|
54
|
-
assert.deepStrictEqual(inspect(parser('[#\n<wbr>\n#]
|
|
55
|
-
assert.deepStrictEqual(inspect(parser('[#\n<wbr>\n#]
|
|
50
|
+
assert.deepStrictEqual(inspect(parser('[# a #]')), [['<p><span class="comment">[# a #]</span></p>'], '']);
|
|
51
|
+
assert.deepStrictEqual(inspect(parser('[# a #]b')), [['<p><span class="comment">[# a #]</span>b</p>'], '']);
|
|
52
|
+
assert.deepStrictEqual(inspect(parser('[# a #]\nb')), [['<p><span class="comment">[# a #]</span><br>b</p>'], '']);
|
|
53
|
+
assert.deepStrictEqual(inspect(parser('[## a ##]')), [['<p><span class="comment">[## a ##]</span></p>'], '']);
|
|
54
|
+
assert.deepStrictEqual(inspect(parser('[#\n<wbr>\n#]')), [['<p><span class="comment">[# <wbr> #]</span></p>'], '']);
|
|
55
|
+
assert.deepStrictEqual(inspect(parser('[#\n<wbr>\n#]a')), [['<p><span class="comment">[# <wbr> #]</span>a</p>'], '']);
|
|
56
|
+
assert.deepStrictEqual(inspect(parser('[#\n<wbr>\n#]\na')), [['<p><span class="comment">[# <wbr> #]</span><br>a</p>'], '']);
|
|
56
57
|
});
|
|
57
58
|
|
|
58
59
|
it('template', () => {
|
|
@@ -12,7 +12,7 @@ export const cite: ReplyParser.CiteParser = creator(line(fmap(validate(
|
|
|
12
12
|
]))),
|
|
13
13
|
([el, quotes = '']: [HTMLElement, string?]) => [
|
|
14
14
|
html('span', { class: 'cite' }, defrag([
|
|
15
|
-
quotes
|
|
15
|
+
`${quotes}>`,
|
|
16
16
|
define(el, { 'data-depth': `${quotes.length + 1}` }, el.innerText.slice(1)),
|
|
17
17
|
])),
|
|
18
18
|
html('br'),
|
|
@@ -18,15 +18,14 @@ describe('Unit: parser/inline/annotation', () => {
|
|
|
18
18
|
assert.deepStrictEqual(inspect(parser('((\na))')), undefined);
|
|
19
19
|
assert.deepStrictEqual(inspect(parser('((\\ a))')), undefined);
|
|
20
20
|
assert.deepStrictEqual(inspect(parser('((\\\na))')), undefined);
|
|
21
|
+
assert.deepStrictEqual(inspect(parser('((<wbr>a))')), undefined);
|
|
21
22
|
assert.deepStrictEqual(inspect(parser('((a\n))')), undefined);
|
|
22
23
|
assert.deepStrictEqual(inspect(parser('((a\\\n))')), undefined);
|
|
23
24
|
assert.deepStrictEqual(inspect(parser('((a\nb))')), undefined);
|
|
24
25
|
assert.deepStrictEqual(inspect(parser('((a\\\nb))')), undefined);
|
|
25
|
-
assert.deepStrictEqual(inspect(parser('((<wbr>a))')), undefined);
|
|
26
|
-
assert.deepStrictEqual(inspect(parser('(([# a #]b))')), undefined);
|
|
27
|
-
assert.deepStrictEqual(inspect(parser('((a)b))')), undefined);
|
|
28
26
|
assert.deepStrictEqual(inspect(parser('((*a\nb*))')), undefined);
|
|
29
27
|
assert.deepStrictEqual(inspect(parser('((\\))')), undefined);
|
|
28
|
+
assert.deepStrictEqual(inspect(parser('((a)b))')), undefined);
|
|
30
29
|
assert.deepStrictEqual(inspect(parser('(((a))')), undefined);
|
|
31
30
|
assert.deepStrictEqual(inspect(parser(' ((a))')), undefined);
|
|
32
31
|
});
|
|
@@ -39,7 +38,6 @@ describe('Unit: parser/inline/annotation', () => {
|
|
|
39
38
|
assert.deepStrictEqual(inspect(parser('((a ))')), [['<sup class="annotation">a</sup>'], '']);
|
|
40
39
|
assert.deepStrictEqual(inspect(parser('((a ))')), [['<sup class="annotation">a</sup>'], '']);
|
|
41
40
|
assert.deepStrictEqual(inspect(parser('((a <wbr>))')), [['<sup class="annotation">a</sup>'], '']);
|
|
42
|
-
assert.deepStrictEqual(inspect(parser('((a [# b #]))')), [['<sup class="annotation">a <sup class="comment" title="b"></sup></sup>'], '']);
|
|
43
41
|
assert.deepStrictEqual(inspect(parser('((ab))')), [['<sup class="annotation">ab</sup>'], '']);
|
|
44
42
|
});
|
|
45
43
|
|
|
@@ -10,52 +10,53 @@ describe('Unit: parser/inline/comment', () => {
|
|
|
10
10
|
assert.deepStrictEqual(inspect(parser('')), undefined);
|
|
11
11
|
assert.deepStrictEqual(inspect(parser('<')), undefined);
|
|
12
12
|
assert.deepStrictEqual(inspect(parser('[#')), undefined);
|
|
13
|
-
assert.deepStrictEqual(inspect(parser('[##]')), undefined);
|
|
14
|
-
assert.deepStrictEqual(inspect(parser('[# #]')), undefined);
|
|
15
|
-
assert.deepStrictEqual(inspect(parser('[# #]')), undefined);
|
|
16
|
-
assert.deepStrictEqual(inspect(parser('[# #]')), undefined);
|
|
17
|
-
assert.deepStrictEqual(inspect(parser('[# #] #]')), undefined);
|
|
18
|
-
assert.deepStrictEqual(inspect(parser('[# #] #]')), undefined);
|
|
19
|
-
assert.deepStrictEqual(inspect(parser('[# [#')), undefined);
|
|
20
13
|
assert.deepStrictEqual(inspect(parser('[#[#')), undefined);
|
|
21
|
-
assert.deepStrictEqual(inspect(parser('[# [# ')), undefined);
|
|
22
|
-
assert.deepStrictEqual(inspect(parser('[# [# a')), undefined);
|
|
23
|
-
assert.deepStrictEqual(inspect(parser('[# a[#')), [['<sup class="comment invalid">[# a</sup>'], '[#']);
|
|
24
|
-
assert.deepStrictEqual(inspect(parser('[# a [#')), [['<sup class="comment invalid">[# a </sup>'], '[#']);
|
|
25
|
-
assert.deepStrictEqual(inspect(parser('[# a [# ')), [['<sup class="comment invalid">[# a </sup>'], '[# ']);
|
|
26
|
-
assert.deepStrictEqual(inspect(parser('[# a [#\n')), [['<sup class="comment invalid">[# a </sup>'], '[#\n']);
|
|
27
|
-
assert.deepStrictEqual(inspect(parser('[# a [#b')), undefined);
|
|
28
|
-
assert.deepStrictEqual(inspect(parser('[# a [# b')), [['<sup class="comment invalid">[# a </sup>'], '[# b']);
|
|
29
|
-
assert.deepStrictEqual(inspect(parser('[# a [## b')), undefined);
|
|
30
|
-
assert.deepStrictEqual(inspect(parser('[## a [# b')), undefined);
|
|
31
14
|
assert.deepStrictEqual(inspect(parser('[#a#]')), undefined);
|
|
32
15
|
assert.deepStrictEqual(inspect(parser('[#a b#]')), undefined);
|
|
16
|
+
assert.deepStrictEqual(inspect(parser('[# ')), [['[', '#', ' '], '']);
|
|
17
|
+
assert.deepStrictEqual(inspect(parser('[# \n a')), [['[', '#', '<br>', ' ', 'a'], '']);
|
|
18
|
+
assert.deepStrictEqual(inspect(parser('[##]')), undefined);
|
|
19
|
+
assert.deepStrictEqual(inspect(parser('[# #]')), undefined);
|
|
20
|
+
assert.deepStrictEqual(inspect(parser('[# #] #]')), undefined);
|
|
21
|
+
assert.deepStrictEqual(inspect(parser('[# [#')), [['[', '#', ' ', '[', '#'], '']);
|
|
22
|
+
assert.deepStrictEqual(inspect(parser('[# [# ')), [['[', '#', ' ', '[', '#', ' '], '']);
|
|
23
|
+
assert.deepStrictEqual(inspect(parser('[# [# a')), [['[', '#', ' ', '[', '#', ' ', 'a'], '']);
|
|
24
|
+
assert.deepStrictEqual(inspect(parser('[# [# a #]')), [['[', '#', ' ', '<span class="comment">[# a #]</span>'], '']);
|
|
25
|
+
assert.deepStrictEqual(inspect(parser('[# a[#')), [['[', '#', ' ', 'a', '[', '#'], '']);
|
|
26
|
+
assert.deepStrictEqual(inspect(parser('[# a [#')), [['[', '#', ' ', 'a', ' ', '[', '#'], '']);
|
|
27
|
+
assert.deepStrictEqual(inspect(parser('[# a [# ')), [['[', '#', ' ', 'a', ' ', '[', '#', ' '], '']);
|
|
28
|
+
assert.deepStrictEqual(inspect(parser('[# a [# b')), [['[', '#', ' ', 'a', ' ', '[', '#', ' ', 'b'], '']);
|
|
29
|
+
assert.deepStrictEqual(inspect(parser('[# a [## b')), [['[', '#', ' ', 'a', ' ', '[', '#', '#', ' ', 'b'], '']);
|
|
30
|
+
assert.deepStrictEqual(inspect(parser('[## a [# b')), [['[', '#', '#', ' ', 'a', ' ', '[', '#', ' ', 'b'], '']);
|
|
33
31
|
assert.deepStrictEqual(inspect(parser('[#\\ a #]')), undefined);
|
|
34
|
-
assert.deepStrictEqual(inspect(parser('[# a#]')),
|
|
35
|
-
assert.deepStrictEqual(inspect(parser('[# a
|
|
36
|
-
assert.deepStrictEqual(inspect(parser('[# a ##]')),
|
|
37
|
-
assert.deepStrictEqual(inspect(parser('[##
|
|
38
|
-
assert.deepStrictEqual(inspect(parser('[#
|
|
32
|
+
assert.deepStrictEqual(inspect(parser('[# a\\ #]')), [['[', '#', ' ', 'a', ' ', '#', ']'], '']);
|
|
33
|
+
assert.deepStrictEqual(inspect(parser('[# a#]')), [['[', '#', ' ', 'a#', ']'], '']);
|
|
34
|
+
assert.deepStrictEqual(inspect(parser('[# a ##]')), [['[', '#', ' ', 'a', ' ', '##', ']'], '']);
|
|
35
|
+
assert.deepStrictEqual(inspect(parser('[# [## #]')), [['[', '#', ' ', '[', '#', '#', ' ', '#', ']'], '']);
|
|
36
|
+
assert.deepStrictEqual(inspect(parser('[## [# ##]')), [['[', '#', '#', ' ', '[', '#', ' ', '##', ']'], '']);
|
|
37
|
+
assert.deepStrictEqual(inspect(parser('[## a #]')), [['[', '#', '#', ' ', 'a', ' ', '#', ']'], '']);
|
|
39
38
|
assert.deepStrictEqual(inspect(parser(' [# a #]')), undefined);
|
|
40
39
|
});
|
|
41
40
|
|
|
42
41
|
it('basic', () => {
|
|
43
|
-
assert.deepStrictEqual(inspect(parser('[#
|
|
44
|
-
assert.deepStrictEqual(inspect(parser('[#
|
|
45
|
-
assert.deepStrictEqual(inspect(parser('[# a
|
|
46
|
-
assert.deepStrictEqual(inspect(parser('[# a
|
|
47
|
-
assert.deepStrictEqual(inspect(parser('[# a #]
|
|
48
|
-
assert.deepStrictEqual(inspect(parser('[#
|
|
49
|
-
assert.deepStrictEqual(inspect(parser('[#
|
|
50
|
-
assert.deepStrictEqual(inspect(parser('[# [
|
|
51
|
-
assert.deepStrictEqual(inspect(parser('[## a ##]')), [['<
|
|
52
|
-
assert.deepStrictEqual(inspect(parser('[##
|
|
53
|
-
assert.deepStrictEqual(inspect(parser('[##
|
|
54
|
-
assert.deepStrictEqual(inspect(parser('[## [# a #] ##]')), [['<
|
|
55
|
-
assert.deepStrictEqual(inspect(parser('[# a #]b')), [['<
|
|
56
|
-
assert.deepStrictEqual(inspect(parser('[#\na\n#]')), [['<
|
|
57
|
-
assert.deepStrictEqual(inspect(parser('[# &
|
|
58
|
-
assert.deepStrictEqual(inspect(parser('[# &
|
|
42
|
+
assert.deepStrictEqual(inspect(parser('[# #]')), [['<span class="comment">[# #]</span>'], '']);
|
|
43
|
+
assert.deepStrictEqual(inspect(parser('[# #]')), [['<span class="comment">[# #]</span>'], '']);
|
|
44
|
+
assert.deepStrictEqual(inspect(parser('[# a #]')), [['<span class="comment">[# a #]</span>'], '']);
|
|
45
|
+
assert.deepStrictEqual(inspect(parser('[# a b #]')), [['<span class="comment">[# a b #]</span>'], '']);
|
|
46
|
+
assert.deepStrictEqual(inspect(parser('[# a\nb #]')), [['<span class="comment">[# a<br>b #]</span>'], '']);
|
|
47
|
+
assert.deepStrictEqual(inspect(parser('[# a #] #]')), [['<span class="comment">[# a #]</span>'], ' #]']);
|
|
48
|
+
assert.deepStrictEqual(inspect(parser('[# ##] #]')), [['<span class="comment">[# ##] #]</span>'], '']);
|
|
49
|
+
assert.deepStrictEqual(inspect(parser('[# [# a #] #]')), [['<span class="comment">[# <span class="comment">[# a #]</span> #]</span>'], '']);
|
|
50
|
+
assert.deepStrictEqual(inspect(parser('[# [## a ##] #]')), [['<span class="comment">[# <span class="comment">[## a ##]</span> #]</span>'], '']);
|
|
51
|
+
assert.deepStrictEqual(inspect(parser('[## a ##]')), [['<span class="comment">[## a ##]</span>'], '']);
|
|
52
|
+
assert.deepStrictEqual(inspect(parser('[## #] ##]')), [['<span class="comment">[## #] ##]</span>'], '']);
|
|
53
|
+
assert.deepStrictEqual(inspect(parser('[## [# a #] ##]')), [['<span class="comment">[## <span class="comment">[# a #]</span> ##]</span>'], '']);
|
|
54
|
+
assert.deepStrictEqual(inspect(parser('[# a #]b')), [['<span class="comment">[# a #]</span>'], 'b']);
|
|
55
|
+
assert.deepStrictEqual(inspect(parser('[#\na\n#]')), [['<span class="comment">[# a #]</span>'], '']);
|
|
56
|
+
assert.deepStrictEqual(inspect(parser('[# &a; #]')), [['<span class="comment">[# <span class="invalid">&a;</span> #]</span>'], '']);
|
|
57
|
+
assert.deepStrictEqual(inspect(parser('[# © #]')), [['<span class="comment">[# © #]</span>'], '']);
|
|
58
|
+
assert.deepStrictEqual(inspect(parser('[# &copy; #]')), [['<span class="comment">[# &copy; #]</span>'], '']);
|
|
59
|
+
assert.deepStrictEqual(inspect(parser('[# \\ a #]')), [['<span class="comment">[# a #]</span>'], '']);
|
|
59
60
|
});
|
|
60
61
|
|
|
61
62
|
});
|
|
@@ -1,31 +1,24 @@
|
|
|
1
1
|
import { CommentParser } from '../inline';
|
|
2
|
-
import { union, some, validate, creator, match } from '../../combinator';
|
|
3
2
|
import { eval } from '../../combinator/data/parser';
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
3
|
+
import { union, some, validate, creator, surround, match, lazy } from '../../combinator';
|
|
4
|
+
import { inline } from '../inline';
|
|
5
|
+
import { text, str } from '../source';
|
|
6
|
+
import { html, defrag } from 'typed-dom';
|
|
7
|
+
import { memoize } from 'spica/memoize';
|
|
8
|
+
import { unshift, push, pop } from 'spica/array';
|
|
7
9
|
|
|
8
|
-
export const comment: CommentParser = creator(validate('[#', match(
|
|
9
|
-
|
|
10
|
-
(
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
'data-invalid-description': `Invalid HTML entitiy "${title.match(/\0&[0-9A-Za-z]+;/)![0].slice(1)}".`,
|
|
24
|
-
}, whole)], rest];
|
|
25
|
-
return [[html('sup', { class: 'comment', title })], rest];
|
|
26
|
-
})));
|
|
27
|
-
|
|
28
|
-
const text: CommentParser.TextParser = union([
|
|
29
|
-
unsafehtmlentity,
|
|
30
|
-
unescsource,
|
|
31
|
-
]);
|
|
10
|
+
export const comment: CommentParser = lazy(() => creator(validate('[#', match(
|
|
11
|
+
/^(?=\[(#+)\s)/,
|
|
12
|
+
memoize(
|
|
13
|
+
([, fence], closer = new RegExp(String.raw`^\s+${fence}\]`)) =>
|
|
14
|
+
surround(
|
|
15
|
+
str(/^\[(\S+)\s+(?!\1\])/),
|
|
16
|
+
union([some(inline, closer)]),
|
|
17
|
+
str(closer), true,
|
|
18
|
+
([, bs = []], rest) => [[
|
|
19
|
+
html('span',
|
|
20
|
+
{ class: 'comment' },
|
|
21
|
+
defrag(push(unshift([`[${fence} `], bs), [` ${fence}]`]))),
|
|
22
|
+
], rest],
|
|
23
|
+
([as, bs = []], rest, context) => [unshift(pop(eval(some(text)(`${as[0]}!`, context))!)[0], bs), rest]),
|
|
24
|
+
([, fence]) => fence)))));
|
|
@@ -17,7 +17,7 @@ describe('Unit: parser/inline/deletion', () => {
|
|
|
17
17
|
|
|
18
18
|
it('basic', () => {
|
|
19
19
|
assert.deepStrictEqual(inspect(parser('~~a~~')), [['<del>a</del>'], '']);
|
|
20
|
-
assert.deepStrictEqual(inspect(parser('~~
|
|
20
|
+
assert.deepStrictEqual(inspect(parser('~~a~b~~')), [['<del>a~b</del>'], '']);
|
|
21
21
|
assert.deepStrictEqual(inspect(parser('~~a ~~')), [['<del>a </del>'], '']);
|
|
22
22
|
assert.deepStrictEqual(inspect(parser('~~ ~~')), [['<del> </del>'], '']);
|
|
23
23
|
assert.deepStrictEqual(inspect(parser('~~ a~~')), [['<del> a</del>'], '']);
|
|
@@ -26,7 +26,6 @@ describe('Unit: parser/inline/deletion', () => {
|
|
|
26
26
|
assert.deepStrictEqual(inspect(parser('~~\na~~')), [['<del><br>a</del>'], '']);
|
|
27
27
|
assert.deepStrictEqual(inspect(parser('~~\\\na~~')), [['<del><span class="linebreak"> </span>a</del>'], '']);
|
|
28
28
|
assert.deepStrictEqual(inspect(parser('~~<wbr>a~~')), [['<del><wbr>a</del>'], '']);
|
|
29
|
-
assert.deepStrictEqual(inspect(parser('~~[# a #]b~~')), [['<del><sup class="comment" title="a"></sup>b</del>'], '']);
|
|
30
29
|
assert.deepStrictEqual(inspect(parser('~~a\n~~')), [['<del>a</del>'], '']);
|
|
31
30
|
assert.deepStrictEqual(inspect(parser('~~a\nb~~')), [['<del>a<br>b</del>'], '']);
|
|
32
31
|
assert.deepStrictEqual(inspect(parser('~~a\\\nb~~')), [['<del>a<span class="linebreak"> </span>b</del>'], '']);
|
|
@@ -15,7 +15,6 @@ describe('Unit: parser/inline/emphasis', () => {
|
|
|
15
15
|
assert.deepStrictEqual(inspect(parser('*a\\\n*')), [['*', 'a', '<span class="linebreak"> </span>'], '*']);
|
|
16
16
|
assert.deepStrictEqual(inspect(parser('*a**b')), [['*', 'a', '**', 'b'], '']);
|
|
17
17
|
assert.deepStrictEqual(inspect(parser('*a**b*')), [['*', 'a', '**', 'b', '*'], '']);
|
|
18
|
-
assert.deepStrictEqual(inspect(parser('*a [# b #]*')), [['*', 'a', ' ', '<sup class="comment" title="b"></sup>'], '*']);
|
|
19
18
|
assert.deepStrictEqual(inspect(parser('* *')), undefined);
|
|
20
19
|
assert.deepStrictEqual(inspect(parser('* a*')), undefined);
|
|
21
20
|
assert.deepStrictEqual(inspect(parser('* a *')), undefined);
|
|
@@ -24,7 +23,6 @@ describe('Unit: parser/inline/emphasis', () => {
|
|
|
24
23
|
assert.deepStrictEqual(inspect(parser('*\\ a*')), undefined);
|
|
25
24
|
assert.deepStrictEqual(inspect(parser('*\\\na*')), undefined);
|
|
26
25
|
assert.deepStrictEqual(inspect(parser('*<wbr>a*')), undefined);
|
|
27
|
-
assert.deepStrictEqual(inspect(parser('*[# a #]b*')), undefined);
|
|
28
26
|
assert.deepStrictEqual(inspect(parser('**a**')), undefined);
|
|
29
27
|
assert.deepStrictEqual(inspect(parser('***a***')), undefined);
|
|
30
28
|
assert.deepStrictEqual(inspect(parser(' *a*')), undefined);
|
|
@@ -41,7 +39,6 @@ describe('Unit: parser/inline/emphasis', () => {
|
|
|
41
39
|
it('nest', () => {
|
|
42
40
|
assert.deepStrictEqual(inspect(parser('*a**b**c*')), [['<em>a<strong>b</strong>c</em>'], '']);
|
|
43
41
|
assert.deepStrictEqual(inspect(parser('*a**b**c*d')), [['<em>a<strong>b</strong>c</em>'], 'd']);
|
|
44
|
-
assert.deepStrictEqual(inspect(parser('*a[# b #]*')), [['<em>a<sup class="comment" title="b"></sup></em>'], '']);
|
|
45
42
|
assert.deepStrictEqual(inspect(parser('*`a`*')), [['<em><code data-src="`a`">a</code></em>'], '']);
|
|
46
43
|
assert.deepStrictEqual(inspect(parser('*<small>*')), [['<em><small></em>'], '']);
|
|
47
44
|
assert.deepStrictEqual(inspect(parser('*(*a*)*')), [['<em><span class="paren">(<em>a</em>)</span></em>'], '']);
|
|
@@ -19,7 +19,6 @@ describe('Unit: parser/inline/extension/index', () => {
|
|
|
19
19
|
assert.deepStrictEqual(inspect(parser('[#\\\n]')), undefined);
|
|
20
20
|
assert.deepStrictEqual(inspect(parser('[#\\]')), undefined);
|
|
21
21
|
assert.deepStrictEqual(inspect(parser('[#a')), undefined);
|
|
22
|
-
assert.deepStrictEqual(inspect(parser('[#[# a #]]')), undefined);
|
|
23
22
|
assert.deepStrictEqual(inspect(parser('[#*a\nb*]')), undefined);
|
|
24
23
|
assert.deepStrictEqual(inspect(parser('[#a|#\n]')), undefined);
|
|
25
24
|
assert.deepStrictEqual(inspect(parser('[#a|#\\\n]')), undefined);
|
|
@@ -39,7 +38,7 @@ describe('Unit: parser/inline/extension/index', () => {
|
|
|
39
38
|
assert.deepStrictEqual(inspect(parser('[#a b]')), [['<a class="index" href="#index:a_b">a b</a>'], '']);
|
|
40
39
|
assert.deepStrictEqual(inspect(parser('[#a ]')), [['<a class="index" href="#index:a">a</a>'], '']);
|
|
41
40
|
assert.deepStrictEqual(inspect(parser('[#a <wbr>]')), [['<a class="index" href="#index:a">a</a>'], '']);
|
|
42
|
-
assert.deepStrictEqual(inspect(parser('[#a [# b #]]')), [['<a class="index" href="#index:a">a <
|
|
41
|
+
assert.deepStrictEqual(inspect(parser('[#a [# b #]]')), [['<a class="index" href="#index:a">a <span class="comment">[# b #]</span></a>'], '']);
|
|
43
42
|
assert.deepStrictEqual(inspect(parser('[#a\\ ]')), [['<a class="index" href="#index:a">a</a>'], '']);
|
|
44
43
|
assert.deepStrictEqual(inspect(parser('[#a\\ b]')), [['<a class="index" href="#index:a_b">a b</a>'], '']);
|
|
45
44
|
assert.deepStrictEqual(inspect(parser('[#[]]')), [['<a class="index" href="#index:[]">[]</a>'], '']);
|
|
@@ -55,6 +54,8 @@ describe('Unit: parser/inline/extension/index', () => {
|
|
|
55
54
|
assert.deepStrictEqual(inspect(parser('[#@a]')), [['<a class="index" href="#index:@a">@a</a>'], '']);
|
|
56
55
|
assert.deepStrictEqual(inspect(parser('[#http://host]')), [['<a class="index" href="#index:http://host">http://host</a>'], '']);
|
|
57
56
|
assert.deepStrictEqual(inspect(parser('[#!http://host]')), [['<a class="index" href="#index:!http://host">!http://host</a>'], '']);
|
|
57
|
+
assert.deepStrictEqual(inspect(parser('[#[# #]]')), [['<a class="index"><span class="comment">[# #]</span></a>'], '']);
|
|
58
|
+
assert.deepStrictEqual(inspect(parser('[#[# a #]]')), [['<a class="index"><span class="comment">[# a #]</span></a>'], '']);
|
|
58
59
|
assert.deepStrictEqual(inspect(parser('[#a((b))]')), [['<a class="index" href="#index:a((b))">a<span class="paren">((b))</span></a>'], '']);
|
|
59
60
|
assert.deepStrictEqual(inspect(parser('[#a[[b]]]')), [['<a class="index" href="#index:a[[b]]">a[[b]]</a>'], '']);
|
|
60
61
|
});
|
|
@@ -82,7 +83,7 @@ describe('Unit: parser/inline/extension/index', () => {
|
|
|
82
83
|
assert.deepStrictEqual(inspect(parser('[#a |#b]')), [['<a class="index" href="#index:b">a<span class="indexer" data-index="b"></span></a>'], '']);
|
|
83
84
|
assert.deepStrictEqual(inspect(parser('[#a |#b]')), [['<a class="index" href="#index:b">a<span class="indexer" data-index="b"></span></a>'], '']);
|
|
84
85
|
assert.deepStrictEqual(inspect(parser('[#a <wbr>|#b]')), [['<a class="index" href="#index:b">a<span class="indexer" data-index="b"></span></a>'], '']);
|
|
85
|
-
assert.deepStrictEqual(inspect(parser('[#a [# b #]|#b]')), [['<a class="index" href="#index:b">a <
|
|
86
|
+
assert.deepStrictEqual(inspect(parser('[#a [# b #]|#b]')), [['<a class="index" href="#index:b">a <span class="comment">[# b #]</span><span class="indexer" data-index="b"></span></a>'], '']);
|
|
86
87
|
});
|
|
87
88
|
|
|
88
89
|
});
|
|
@@ -2,7 +2,7 @@ import { undefined } from 'spica/global';
|
|
|
2
2
|
import { ExtensionParser } from '../../inline';
|
|
3
3
|
import { union, some, validate, guard, context, creator, surround, open, lazy, fmap } from '../../../combinator';
|
|
4
4
|
import { inline } from '../../inline';
|
|
5
|
-
import { indexee,
|
|
5
|
+
import { indexee, identity } from './indexee';
|
|
6
6
|
import { txt, str } from '../../source';
|
|
7
7
|
import { startTight, trimNodeEnd } from '../../util';
|
|
8
8
|
import { html, define, defrag } from 'typed-dom';
|
|
@@ -44,7 +44,7 @@ const signature: IndexParser.SignatureParser = lazy(() => creator(fmap(open(
|
|
|
44
44
|
'|#',
|
|
45
45
|
startTight(some(union([bracket, txt]), ']', /^\\?\n/))),
|
|
46
46
|
ns => [
|
|
47
|
-
html('span', { class: 'indexer', 'data-index':
|
|
47
|
+
html('span', { class: 'indexer', 'data-index': identity(join(ns)).slice(6) }),
|
|
48
48
|
])));
|
|
49
49
|
|
|
50
50
|
const bracket: IndexParser.SignatureParser.BracketParser = lazy(() => creator(union([
|
|
@@ -6,12 +6,17 @@ import { define } from 'typed-dom';
|
|
|
6
6
|
|
|
7
7
|
export function indexee<P extends Parser<unknown, MarkdownParser.Context>>(parser: P): P;
|
|
8
8
|
export function indexee(parser: Parser<HTMLElement, MarkdownParser.Context>): Parser<HTMLElement> {
|
|
9
|
-
return fmap(parser, ([el], _, { id }) => [define(el, { id: id !== '' && identity(el) || undefined })]);
|
|
9
|
+
return fmap(parser, ([el], _, { id }) => [define(el, { id: id !== '' && identity(text(el)) || undefined })]);
|
|
10
10
|
}
|
|
11
11
|
|
|
12
|
-
export function identity(
|
|
13
|
-
|
|
12
|
+
export function identity(text: string): string {
|
|
13
|
+
assert(!text.includes('\n'));
|
|
14
|
+
text &&= text.trim();
|
|
15
|
+
return text && `index:${text.replace(/\s+/g, '_').slice(0, 101).replace(/^(.{97}).{4}$/, '$1...')}`;
|
|
14
16
|
}
|
|
17
|
+
assert(identity('0'.repeat(100)).slice(6) === '0'.repeat(100));
|
|
18
|
+
assert(identity('0'.repeat(101)).slice(6) === '0'.repeat(97) + '...');
|
|
19
|
+
assert(identity('0'.repeat(200)).slice(6) === '0'.repeat(97) + '...');
|
|
15
20
|
|
|
16
21
|
export function text(source: HTMLElement | DocumentFragment): string {
|
|
17
22
|
assert(source instanceof DocumentFragment || !source.matches('.indexer'));
|
|
@@ -22,34 +27,32 @@ export function text(source: HTMLElement | DocumentFragment): string {
|
|
|
22
27
|
if (indexer) return indexer.getAttribute('data-index')!;
|
|
23
28
|
const target = source.cloneNode(true) as typeof source;
|
|
24
29
|
for (
|
|
25
|
-
let es = target.querySelectorAll('code[data-src], .math[data-src], rt, rp, .reference'),
|
|
30
|
+
let es = target.querySelectorAll('code[data-src], .math[data-src], .comment, rt, rp, .reference'),
|
|
26
31
|
i = 0, len = es.length; i < len; ++i) {
|
|
27
32
|
const el = es[i];
|
|
28
33
|
switch (el.tagName) {
|
|
34
|
+
case 'CODE':
|
|
35
|
+
define(el, el.getAttribute('data-src')!);
|
|
36
|
+
continue;
|
|
29
37
|
case 'RT':
|
|
30
38
|
case 'RP':
|
|
31
39
|
el.remove();
|
|
32
40
|
continue;
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
default:
|
|
41
|
+
}
|
|
42
|
+
switch (el.className) {
|
|
43
|
+
case 'math':
|
|
37
44
|
define(el, el.getAttribute('data-src')!);
|
|
38
45
|
continue;
|
|
46
|
+
case 'comment':
|
|
47
|
+
el.remove();
|
|
48
|
+
continue;
|
|
49
|
+
case 'reference':
|
|
50
|
+
assert(el.firstElementChild?.hasAttribute('hidden'));
|
|
51
|
+
el.firstChild!.remove();
|
|
52
|
+
continue;
|
|
39
53
|
}
|
|
40
54
|
}
|
|
41
55
|
// Better:
|
|
42
56
|
//return target.innerText;
|
|
43
57
|
return target.textContent!;
|
|
44
58
|
}
|
|
45
|
-
|
|
46
|
-
export function identify(index: string): string {
|
|
47
|
-
assert(!index.includes('\n'));
|
|
48
|
-
assert(index === index.trim());
|
|
49
|
-
return index
|
|
50
|
-
? `index:${index.replace(/\s+/g, '_').slice(0, 101).replace(/^(.{97}).{4}$/, '$1...')}`
|
|
51
|
-
: '';
|
|
52
|
-
}
|
|
53
|
-
assert(identify('0'.repeat(100)).slice(6) === '0'.repeat(100));
|
|
54
|
-
assert(identify('0'.repeat(101)).slice(6) === '0'.repeat(97) + '...');
|
|
55
|
-
assert(identify('0'.repeat(200)).slice(6) === '0'.repeat(97) + '...');
|
|
@@ -20,8 +20,6 @@ describe('Unit: parser/inline/extension/placeholder', () => {
|
|
|
20
20
|
assert.deepStrictEqual(inspect(parser('[^\n]')), undefined);
|
|
21
21
|
assert.deepStrictEqual(inspect(parser('[^\na]')), undefined);
|
|
22
22
|
assert.deepStrictEqual(inspect(parser('[^\\\na]')), undefined);
|
|
23
|
-
assert.deepStrictEqual(inspect(parser('[^[# a #]]')), undefined);
|
|
24
|
-
assert.deepStrictEqual(inspect(parser('[^[# a #]b]')), undefined);
|
|
25
23
|
assert.deepStrictEqual(inspect(parser('[^ !http://host]')), undefined);
|
|
26
24
|
assert.deepStrictEqual(inspect(parser('[^a')), undefined);
|
|
27
25
|
assert.deepStrictEqual(inspect(parser('[^a\n]')), undefined);
|
|
@@ -41,17 +39,19 @@ describe('Unit: parser/inline/extension/placeholder', () => {
|
|
|
41
39
|
it('valid', () => {
|
|
42
40
|
assert.deepStrictEqual(inspect(parser('[^a]')), [['<span class="invalid">a</span>'], '']);
|
|
43
41
|
assert.deepStrictEqual(inspect(parser('[^a b]')), [['<span class="invalid">a b</span>'], '']);
|
|
44
|
-
assert.deepStrictEqual(inspect(parser('[^\\]]')), [['<span class="invalid">]</span>'], '']);
|
|
45
|
-
assert.deepStrictEqual(inspect(parser('[^(])]')), [['<span class="invalid"><span class="paren">(])</span></span>'], '']);
|
|
46
|
-
assert.deepStrictEqual(inspect(parser('[^!http://host]')), [['<span class="invalid"><a href="http://host" target="_blank"><img class="media" data-src="http://host" alt=""></a></span>'], '']);
|
|
47
42
|
assert.deepStrictEqual(inspect(parser('[^a ]')), [['<span class="invalid">a </span>'], '']);
|
|
48
43
|
assert.deepStrictEqual(inspect(parser('[^a ]')), [['<span class="invalid">a </span>'], '']);
|
|
49
44
|
assert.deepStrictEqual(inspect(parser('[^a\\ ]')), [['<span class="invalid">a </span>'], '']);
|
|
50
45
|
assert.deepStrictEqual(inspect(parser('[^a\\ \\ ]')), [['<span class="invalid">a </span>'], '']);
|
|
51
46
|
assert.deepStrictEqual(inspect(parser('[^a<wbr>]')), [['<span class="invalid">a<wbr></span>'], '']);
|
|
52
47
|
assert.deepStrictEqual(inspect(parser('[^a<wbr><wbr>]')), [['<span class="invalid">a<wbr><wbr></span>'], '']);
|
|
53
|
-
assert.deepStrictEqual(inspect(parser('[^a[# b #]]')), [['<span class="invalid">a<
|
|
54
|
-
assert.deepStrictEqual(inspect(parser('[^a[# b #][# c #]]')), [['<span class="invalid">a<
|
|
48
|
+
assert.deepStrictEqual(inspect(parser('[^a[# b #]]')), [['<span class="invalid">a<span class="comment">[# b #]</span></span>'], '']);
|
|
49
|
+
assert.deepStrictEqual(inspect(parser('[^a[# b #][# c #]]')), [['<span class="invalid">a<span class="comment">[# b #]</span><span class="comment">[# c #]</span></span>'], '']);
|
|
50
|
+
assert.deepStrictEqual(inspect(parser('[^\\]]')), [['<span class="invalid">]</span>'], '']);
|
|
51
|
+
assert.deepStrictEqual(inspect(parser('[^(])]')), [['<span class="invalid"><span class="paren">(])</span></span>'], '']);
|
|
52
|
+
assert.deepStrictEqual(inspect(parser('[^!http://host]')), [['<span class="invalid"><a href="http://host" target="_blank"><img class="media" data-src="http://host" alt=""></a></span>'], '']);
|
|
53
|
+
assert.deepStrictEqual(inspect(parser('[^[# a #]]')), [['<span class="invalid"><span class="comment">[# a #]</span></span>'], '']);
|
|
54
|
+
assert.deepStrictEqual(inspect(parser('[^[# a #]b]')), [['<span class="invalid"><span class="comment">[# a #]</span>b</span>'], '']);
|
|
55
55
|
});
|
|
56
56
|
|
|
57
57
|
});
|
|
@@ -17,7 +17,7 @@ describe('Unit: parser/inline/insertion', () => {
|
|
|
17
17
|
|
|
18
18
|
it('basic', () => {
|
|
19
19
|
assert.deepStrictEqual(inspect(parser('++a++')), [['<ins>a</ins>'], '']);
|
|
20
|
-
assert.deepStrictEqual(inspect(parser('++
|
|
20
|
+
assert.deepStrictEqual(inspect(parser('++a+b++')), [['<ins>a+b</ins>'], '']);
|
|
21
21
|
assert.deepStrictEqual(inspect(parser('++a ++')), [['<ins>a </ins>'], '']);
|
|
22
22
|
assert.deepStrictEqual(inspect(parser('++ ++')), [['<ins> </ins>'], '']);
|
|
23
23
|
assert.deepStrictEqual(inspect(parser('++ a++')), [['<ins> a</ins>'], '']);
|
|
@@ -26,7 +26,6 @@ describe('Unit: parser/inline/insertion', () => {
|
|
|
26
26
|
assert.deepStrictEqual(inspect(parser('++\na++')), [['<ins><br>a</ins>'], '']);
|
|
27
27
|
assert.deepStrictEqual(inspect(parser('++\\\na++')), [['<ins><span class="linebreak"> </span>a</ins>'], '']);
|
|
28
28
|
assert.deepStrictEqual(inspect(parser('++<wbr>a++')), [['<ins><wbr>a</ins>'], '']);
|
|
29
|
-
assert.deepStrictEqual(inspect(parser('++[# a #]b++')), [['<ins><sup class="comment" title="a"></sup>b</ins>'], '']);
|
|
30
29
|
assert.deepStrictEqual(inspect(parser('++a\n++')), [['<ins>a</ins>'], '']);
|
|
31
30
|
assert.deepStrictEqual(inspect(parser('++a\nb++')), [['<ins>a<br>b</ins>'], '']);
|
|
32
31
|
assert.deepStrictEqual(inspect(parser('++a\\\nb++')), [['<ins>a<span class="linebreak"> </span>b</ins>'], '']);
|
|
@@ -72,7 +72,6 @@ describe('Unit: parser/inline/link', () => {
|
|
|
72
72
|
assert.deepStrictEqual(inspect(parser('[a\nb]{b}')), undefined);
|
|
73
73
|
assert.deepStrictEqual(inspect(parser('[a\\\nb]{b}')), undefined);
|
|
74
74
|
assert.deepStrictEqual(inspect(parser('[<wbr>]{b}')), undefined);
|
|
75
|
-
assert.deepStrictEqual(inspect(parser('[[# a #]]{b}')), undefined);
|
|
76
75
|
assert.deepStrictEqual(inspect(parser('[*a\nb*]{/}')), undefined);
|
|
77
76
|
assert.deepStrictEqual(inspect(parser('[http://host]{http://host}')), undefined);
|
|
78
77
|
assert.deepStrictEqual(inspect(parser('[]{ttp://host}')), [['<a class="invalid">ttp://host</a>'], '']);
|