securemark 0.297.6 → 0.297.7
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 +4 -0
- package/dist/index.js +48 -32
- package/package.json +1 -1
- package/src/parser/api/parse.test.ts +1 -1
- package/src/parser/block/table.test.ts +1 -1
- package/src/parser/inline/annotation.test.ts +11 -5
- package/src/parser/inline/annotation.ts +27 -13
- package/src/parser/inline/bracket.test.ts +7 -6
- package/src/parser/inline/bracket.ts +4 -4
- package/src/parser/inline/extension/indexee.ts +1 -0
- package/src/parser/inline/reference.test.ts +4 -0
- package/src/parser/inline/reference.ts +4 -5
- package/src/parser/inline.test.ts +3 -3
- package/src/parser/processor/note.ts +3 -0
package/CHANGELOG.md
CHANGED
package/dist/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! securemark v0.297.
|
|
1
|
+
/*! securemark v0.297.7 https://github.com/falsandtru/securemark | (c) 2017, falsandtru | UNLICENSED License */
|
|
2
2
|
(function webpackUniversalModuleDefinition(root, factory) {
|
|
3
3
|
if(typeof exports === 'object' && typeof module === 'object')
|
|
4
4
|
module.exports = factory(require("Prism"), require("DOMPurify"));
|
|
@@ -6396,21 +6396,21 @@ exports.annotation = (0, combinator_1.lazy)(() => (0, combinator_1.constraint)(1
|
|
|
6396
6396
|
recursion,
|
|
6397
6397
|
resources
|
|
6398
6398
|
} = context;
|
|
6399
|
+
if (linebreak !== 0) {
|
|
6400
|
+
ns.unshift(new parser_1.Node('('));
|
|
6401
|
+
ns.push(new parser_1.Node(')'));
|
|
6402
|
+
return new parser_1.List([new parser_1.Node((0, dom_1.html)('span', {
|
|
6403
|
+
class: 'bracket'
|
|
6404
|
+
}, ['(', (0, dom_1.html)('span', {
|
|
6405
|
+
class: 'bracket'
|
|
6406
|
+
}, (0, dom_1.defrag)((0, util_1.unwrap)(ns))), ')']))]);
|
|
6407
|
+
}
|
|
6399
6408
|
const depth = MAX_DEPTH - (resources?.recursions[4 /* Recursion.annotation */] ?? resources?.recursions.at(-1) ?? MAX_DEPTH);
|
|
6400
|
-
|
|
6401
|
-
|
|
6402
|
-
|
|
6403
|
-
|
|
6404
|
-
|
|
6405
|
-
}
|
|
6406
|
-
ns.unshift(new parser_1.Node('('));
|
|
6407
|
-
ns.push(new parser_1.Node(')'));
|
|
6408
|
-
return new parser_1.List([new parser_1.Node((0, dom_1.html)('span', {
|
|
6409
|
-
class: 'bracket'
|
|
6410
|
-
}, ['(', (0, dom_1.html)('span', {
|
|
6411
|
-
class: 'bracket'
|
|
6412
|
-
}, (0, dom_1.defrag)((0, util_1.unwrap)(ns))), ')']))]);
|
|
6413
|
-
}, ([, bs = new parser_1.List()], context) => {
|
|
6409
|
+
recursion.add(depth);
|
|
6410
|
+
return new parser_1.List([new parser_1.Node((0, dom_1.html)('sup', {
|
|
6411
|
+
class: 'annotation'
|
|
6412
|
+
}, [(0, dom_1.html)('span', (0, dom_1.defrag)((0, util_1.unwrap)((0, visibility_1.trimBlankNodeEnd)(ns))))]))]);
|
|
6413
|
+
}, ([, bs], context) => {
|
|
6414
6414
|
const {
|
|
6415
6415
|
source,
|
|
6416
6416
|
position,
|
|
@@ -6420,7 +6420,7 @@ exports.annotation = (0, combinator_1.lazy)(() => (0, combinator_1.constraint)(1
|
|
|
6420
6420
|
resources
|
|
6421
6421
|
} = context;
|
|
6422
6422
|
const depth = MAX_DEPTH - (resources?.recursions[4 /* Recursion.annotation */] ?? resources?.recursions.at(-1) ?? MAX_DEPTH);
|
|
6423
|
-
if (linebreak === 0 && bs.length === 1 && source[position] === ')' && typeof bs.head?.value === 'object') {
|
|
6423
|
+
if (linebreak === 0 && bs && bs.length === 1 && source[position] === ')' && typeof bs.head?.value === 'object') {
|
|
6424
6424
|
const {
|
|
6425
6425
|
className
|
|
6426
6426
|
} = bs.head.value;
|
|
@@ -6457,19 +6457,32 @@ exports.annotation = (0, combinator_1.lazy)(() => (0, combinator_1.constraint)(1
|
|
|
6457
6457
|
}, [(0, dom_1.html)('span', [bs.head.value])])]))]);
|
|
6458
6458
|
}
|
|
6459
6459
|
}
|
|
6460
|
-
|
|
6461
|
-
|
|
6462
|
-
|
|
6463
|
-
|
|
6464
|
-
|
|
6460
|
+
bs ??= new parser_1.List();
|
|
6461
|
+
bs.unshift(new parser_1.Node('('));
|
|
6462
|
+
if (source[context.position] === ')') {
|
|
6463
|
+
bs.push(new parser_1.Node(')'));
|
|
6464
|
+
context.position += 1;
|
|
6465
6465
|
}
|
|
6466
|
+
const str = linebreak === 0 ? source.slice(position - range + 2, position) : '';
|
|
6467
|
+
bs = linebreak === 0 && (str === '' || bracket_1.indexA.test(str)) ? new parser_1.List([new parser_1.Node((0, dom_1.html)('span', {
|
|
6468
|
+
class: 'paren'
|
|
6469
|
+
}, (0, dom_1.defrag)((0, util_1.unwrap)(bs))))]) : new parser_1.List([new parser_1.Node((0, dom_1.html)('span', {
|
|
6470
|
+
class: 'bracket'
|
|
6471
|
+
}, (0, dom_1.defrag)((0, util_1.unwrap)(bs))))]);
|
|
6466
6472
|
bs.unshift(new parser_1.Node('('));
|
|
6473
|
+
const cs = parser({
|
|
6474
|
+
context
|
|
6475
|
+
});
|
|
6476
|
+
if (source[context.position] === ')') {
|
|
6477
|
+
cs && bs.import(cs);
|
|
6478
|
+
bs.push(new parser_1.Node(')'));
|
|
6479
|
+
context.position += 1;
|
|
6480
|
+
}
|
|
6467
6481
|
return new parser_1.List([new parser_1.Node((0, dom_1.html)('span', {
|
|
6468
6482
|
class: 'bracket'
|
|
6469
|
-
},
|
|
6470
|
-
class: 'bracket'
|
|
6471
|
-
}, (0, dom_1.defrag)((0, util_1.unwrap)(bs)))]))]);
|
|
6483
|
+
}, (0, dom_1.defrag)((0, util_1.unwrap)(bs))))]);
|
|
6472
6484
|
})));
|
|
6485
|
+
const parser = (0, combinator_1.lazy)(() => (0, combinator_1.precedence)(1, (0, combinator_1.some)(inline_1.inline, ')', [[')', 1]])));
|
|
6473
6486
|
function deepunwrap(list) {
|
|
6474
6487
|
let bottom = list.head.value;
|
|
6475
6488
|
for (; bottom;) {
|
|
@@ -6800,7 +6813,7 @@ const p1 = (0, combinator_1.lazy)(() => (0, combinator_1.surround)((0, source_1.
|
|
|
6800
6813
|
linebreak
|
|
6801
6814
|
}) => {
|
|
6802
6815
|
const str = linebreak === 0 ? source.slice(position - range + 1, position - 1) : '';
|
|
6803
|
-
return linebreak === 0 && exports.indexA.test(str) ? new parser_1.List([new parser_1.Node((0, dom_1.html)('span', {
|
|
6816
|
+
return linebreak === 0 && (str === '' || exports.indexA.test(str)) ? new parser_1.List([new parser_1.Node((0, dom_1.html)('span', {
|
|
6804
6817
|
class: 'paren'
|
|
6805
6818
|
}, `(${str})`))]) : new parser_1.List([new parser_1.Node((0, dom_1.html)('span', {
|
|
6806
6819
|
class: 'bracket'
|
|
@@ -6813,7 +6826,7 @@ const p1 = (0, combinator_1.lazy)(() => (0, combinator_1.surround)((0, source_1.
|
|
|
6813
6826
|
linebreak
|
|
6814
6827
|
} = context;
|
|
6815
6828
|
const str = linebreak === 0 ? source.slice(position - range + 1, position) : '';
|
|
6816
|
-
return linebreak === 0 && exports.indexA.test(str) ? new parser_1.List([new parser_1.Node((0, dom_1.html)('span', {
|
|
6829
|
+
return linebreak === 0 && (str === '' || exports.indexA.test(str)) ? new parser_1.List([new parser_1.Node((0, dom_1.html)('span', {
|
|
6817
6830
|
class: 'paren'
|
|
6818
6831
|
}, `(${str}`))]) : new parser_1.List([new parser_1.Node((0, dom_1.html)('span', {
|
|
6819
6832
|
class: 'bracket'
|
|
@@ -6826,7 +6839,7 @@ const p2 = (0, combinator_1.lazy)(() => (0, combinator_1.surround)((0, source_1.
|
|
|
6826
6839
|
linebreak
|
|
6827
6840
|
}) => {
|
|
6828
6841
|
const str = linebreak === 0 ? source.slice(position - range + 1, position - 1) : '';
|
|
6829
|
-
return linebreak === 0 && indexF.test(str) ? new parser_1.List([new parser_1.Node((0, dom_1.html)('span', {
|
|
6842
|
+
return linebreak === 0 && (str === '' || indexF.test(str)) ? new parser_1.List([new parser_1.Node((0, dom_1.html)('span', {
|
|
6830
6843
|
class: 'paren'
|
|
6831
6844
|
}, `(${str})`))]) : new parser_1.List([new parser_1.Node((0, dom_1.html)('span', {
|
|
6832
6845
|
class: 'bracket'
|
|
@@ -6839,7 +6852,7 @@ const p2 = (0, combinator_1.lazy)(() => (0, combinator_1.surround)((0, source_1.
|
|
|
6839
6852
|
linebreak
|
|
6840
6853
|
} = context;
|
|
6841
6854
|
const str = linebreak === 0 ? source.slice(position - range + 1, position) : '';
|
|
6842
|
-
return linebreak === 0 && indexF.test(str) ? new parser_1.List([new parser_1.Node((0, dom_1.html)('span', {
|
|
6855
|
+
return linebreak === 0 && (str === '' || indexF.test(str)) ? new parser_1.List([new parser_1.Node((0, dom_1.html)('span', {
|
|
6843
6856
|
class: 'paren'
|
|
6844
6857
|
}, `(${str}`))]) : new parser_1.List([new parser_1.Node((0, dom_1.html)('span', {
|
|
6845
6858
|
class: 'bracket'
|
|
@@ -7960,12 +7973,12 @@ exports.reference = (0, combinator_1.lazy)(() => (0, combinator_1.constraint)(64
|
|
|
7960
7973
|
range,
|
|
7961
7974
|
linebreak
|
|
7962
7975
|
} = context;
|
|
7963
|
-
|
|
7964
|
-
|
|
7965
|
-
} else {
|
|
7966
|
-
const head = position - range;
|
|
7976
|
+
const head = position - range;
|
|
7977
|
+
if (linebreak !== 0) {
|
|
7967
7978
|
(0, combinator_1.setBacktrack)(context, 2 | 64 /* Backtrack.link */, head, 2);
|
|
7979
|
+
return;
|
|
7968
7980
|
}
|
|
7981
|
+
return new parser_1.List([new parser_1.Node((0, dom_1.html)('sup', attributes(ns), [(0, dom_1.html)('span', (0, dom_1.defrag)((0, util_1.unwrap)((0, visibility_1.trimBlankNodeEnd)(ns))))]))]);
|
|
7969
7982
|
}, (_, context) => {
|
|
7970
7983
|
const {
|
|
7971
7984
|
source,
|
|
@@ -8480,6 +8493,9 @@ function build(syntax, list, query, marker, splitter = '') {
|
|
|
8480
8493
|
'data-marker': note ? undefined : marker(total + defs.size + 1, abbr)
|
|
8481
8494
|
}, [content, (0, dom_1.html)('sup')]) : defs.get(identifier);
|
|
8482
8495
|
initial && defs.set(identifier, def);
|
|
8496
|
+
if (!initial && content.innerHTML.length > def.firstElementChild.innerHTML.length) {
|
|
8497
|
+
def.firstElementChild.replaceWith(content);
|
|
8498
|
+
}
|
|
8483
8499
|
const defIndex = initial ? info.defIndex = total + defs.size : info.defIndex;
|
|
8484
8500
|
const title = info.title ||= text;
|
|
8485
8501
|
(0, dom_1.define)(ref, {
|
package/package.json
CHANGED
|
@@ -307,7 +307,7 @@ describe('Unit: parser/api/parse', () => {
|
|
|
307
307
|
// ]);
|
|
308
308
|
assert.deepStrictEqual(
|
|
309
309
|
[...parse(`${'('.repeat(20)}0`).children].map(el => el.outerHTML),
|
|
310
|
-
[`<p>${'<span class="bracket">('.repeat(19)}(0
|
|
310
|
+
[`<p>${'<span class="bracket">('.repeat(19)}<span class="paren">(0</span>${'</span>'.repeat(19)}</p>`]);
|
|
311
311
|
assert.deepStrictEqual(
|
|
312
312
|
[...parse(`${'('.repeat(21)}0`).children].map(el => el.outerHTML.replace(/:\w+/, ':rnd')),
|
|
313
313
|
[
|
|
@@ -33,7 +33,7 @@ describe('Unit: parser/block/table', () => {
|
|
|
33
33
|
assert.deepStrictEqual(inspect(parser, input('|||\n|-|-|\n|||', new Context())), [['<table><thead><tr><th></th><th></th></tr></thead><tbody><tr><td></td><td></td></tr></tbody></table>'], '']);
|
|
34
34
|
assert.deepStrictEqual(inspect(parser, input('|"|\n|-\n|', new Context())), [['<table><thead><tr><th>"</th></tr></thead><tbody><tr></tr></tbody></table>'], '']);
|
|
35
35
|
assert.deepStrictEqual(inspect(parser, input('|`|`|\n|-\n|', new Context())), [['<table><thead><tr><th><code data-src="`|`">|</code></th></tr></thead><tbody><tr></tr></tbody></table>'], '']);
|
|
36
|
-
assert.deepStrictEqual(inspect(parser, input('|((|\n|-\n|', new Context())), [['<table><thead><tr><th><span class="bracket">(<span class="
|
|
36
|
+
assert.deepStrictEqual(inspect(parser, input('|((|\n|-\n|', new Context())), [['<table><thead><tr><th><span class="bracket">(<span class="paren">(</span></span></th></tr></thead><tbody><tr></tr></tbody></table>'], '']);
|
|
37
37
|
assert.deepStrictEqual(inspect(parser, input('|a|b|\n|-|-|\n|1|2|', new Context())), [['<table><thead><tr><th>a</th><th>b</th></tr></thead><tbody><tr><td>1</td><td>2</td></tr></tbody></table>'], '']);
|
|
38
38
|
assert.deepStrictEqual(inspect(parser, input('|a|b\n|-|-\n|1|2', new Context())), [['<table><thead><tr><th>a</th><th>b</th></tr></thead><tbody><tr><td>1</td><td>2</td></tr></tbody></table>'], '']);
|
|
39
39
|
assert.deepStrictEqual(inspect(parser, input('|a|\n|-|\n|1|', new Context())), [['<table><thead><tr><th>a</th></tr></thead><tbody><tr><td>1</td></tr></tbody></table>'], '']);
|
|
@@ -13,9 +13,15 @@ describe('Unit: parser/inline/annotation', () => {
|
|
|
13
13
|
assert.deepStrictEqual(inspect(parser, input('(', new Context())), undefined);
|
|
14
14
|
assert.deepStrictEqual(inspect(parser, input('()', new Context())), undefined);
|
|
15
15
|
assert.deepStrictEqual(inspect(parser, input('((', new Context())), undefined);
|
|
16
|
-
assert.deepStrictEqual(inspect(parser, input('(())', new Context())), [['<span class="bracket">(<span class="
|
|
17
|
-
assert.deepStrictEqual(inspect(parser, input('(()))', new Context())), [['<span class="bracket">(<span class="
|
|
16
|
+
assert.deepStrictEqual(inspect(parser, input('(())', new Context())), [['<span class="bracket">(<span class="paren">()</span>)</span>'], '']);
|
|
17
|
+
assert.deepStrictEqual(inspect(parser, input('(()))', new Context())), [['<span class="bracket">(<span class="paren">()</span>)</span>'], ')']);
|
|
18
18
|
assert.deepStrictEqual(inspect(parser, input('(("))', new Context())), [['<span class="bracket">(<span class="bracket">("))</span></span>'], '']);
|
|
19
|
+
assert.deepStrictEqual(inspect(parser, input('((a', new Context())), [['<span class="bracket">(<span class="paren">(a</span></span>'], '']);
|
|
20
|
+
assert.deepStrictEqual(inspect(parser, input('((!', new Context())), [['<span class="bracket">(<span class="bracket">(!</span></span>'], '']);
|
|
21
|
+
assert.deepStrictEqual(inspect(parser, input('((a)', new Context())), [['<span class="bracket">(<span class="paren">(a)</span></span>'], '']);
|
|
22
|
+
assert.deepStrictEqual(inspect(parser, input('((!)', new Context())), [['<span class="bracket">(<span class="bracket">(!)</span></span>'], '']);
|
|
23
|
+
assert.deepStrictEqual(inspect(parser, input('((a)b)', new Context())), [['<span class="bracket">(<span class="paren">(a)</span>b)</span>'], '']);
|
|
24
|
+
assert.deepStrictEqual(inspect(parser, input('((!)b)', new Context())), [['<span class="bracket">(<span class="bracket">(!)</span>b)</span>'], '']);
|
|
19
25
|
assert.deepStrictEqual(inspect(parser, input('(([))', new Context())), [['<span class="bracket">(<span class="bracket">([))</span></span>'], '']);
|
|
20
26
|
assert.deepStrictEqual(inspect(parser, input('(([%))', new Context())), [['<span class="bracket">(<span class="bracket">([%))</span></span>'], '']);
|
|
21
27
|
assert.deepStrictEqual(inspect(parser, input('(( ))', new Context())), undefined);
|
|
@@ -31,9 +37,7 @@ describe('Unit: parser/inline/annotation', () => {
|
|
|
31
37
|
assert.deepStrictEqual(inspect(parser, input('((a\nb))', new Context())), [['<span class="bracket">(<span class="bracket">(a<br>b)</span>)</span>'], '']);
|
|
32
38
|
assert.deepStrictEqual(inspect(parser, input('((a\\\nb))', new Context())), [['<span class="bracket">(<span class="bracket">(a<br>b)</span>)</span>'], '']);
|
|
33
39
|
assert.deepStrictEqual(inspect(parser, input('((*a\nb*))', new Context())), [['<span class="bracket">(<span class="bracket">(<em>a<br>b</em>)</span>)</span>'], '']);
|
|
34
|
-
assert.deepStrictEqual(inspect(parser, input('((\\))', new Context())), [['<span class="bracket">(<span class="bracket">()</span></span>'], '
|
|
35
|
-
assert.deepStrictEqual(inspect(parser, input('((a)b))', new Context())), [['<span class="bracket">((a</span>'], ')b))']);
|
|
36
|
-
assert.deepStrictEqual(inspect(parser, input('((!)b))', new Context())), [['<span class="bracket">(<span class="bracket">(!</span></span>'], ')b))']);
|
|
40
|
+
assert.deepStrictEqual(inspect(parser, input('((\\))', new Context())), [['<span class="bracket">(<span class="bracket">())</span></span>'], '']);
|
|
37
41
|
assert.deepStrictEqual(inspect(parser, input('(((a))', new Context())), [['<span class="bracket">(<sup class="annotation"><span>a</span></sup></span>'], '']);
|
|
38
42
|
assert.deepStrictEqual(inspect(parser, input('(((!))', new Context())), [['<span class="bracket">(<sup class="annotation"><span>!</span></sup></span>'], '']);
|
|
39
43
|
assert.deepStrictEqual(inspect(parser, input('(((*a*))', new Context())), [['<span class="bracket">(<sup class="annotation"><span><em>a</em></span></sup></span>'], '']);
|
|
@@ -57,6 +61,8 @@ describe('Unit: parser/inline/annotation', () => {
|
|
|
57
61
|
assert.deepStrictEqual(inspect(parser, input('((@a))', new Context())), [['<sup class="annotation"><span><a class="account" href="/@a">@a</a></span></sup>'], '']);
|
|
58
62
|
assert.deepStrictEqual(inspect(parser, input('((http://host))', new Context())), [['<sup class="annotation"><span><a class="url" href="http://host" target="_blank">http://host</a></span></sup>'], '']);
|
|
59
63
|
assert.deepStrictEqual(inspect(parser, input('((![]{a}))', new Context())), [['<sup class="annotation"><span>!<a class="url" href="a">a</a></span></sup>'], '']);
|
|
64
|
+
assert.deepStrictEqual(inspect(parser, input('((a(())))', new Context())), [['<sup class="annotation"><span>a<span class="bracket">(<span class="paren">()</span>)</span></span></sup>'], '']);
|
|
65
|
+
assert.deepStrictEqual(inspect(parser, input('((a[[]]))', new Context())), [['<sup class="annotation"><span>a[[]]</span></sup>'], '']);
|
|
60
66
|
assert.deepStrictEqual(inspect(parser, input('(([[a] ]))', new Context())), [['<sup class="annotation"><span>[[a] ]</span></sup>'], '']);
|
|
61
67
|
assert.deepStrictEqual(inspect(parser, input('(((a)))', new Context())), [['<sup class="annotation"><span><span class="paren">(a)</span></span></sup>'], '']);
|
|
62
68
|
assert.deepStrictEqual(inspect(parser, input('((((a))))', new Context())), [['<sup class="annotation"><span><sup class="annotation"><span>a</span></sup></span></sup>'], '']);
|
|
@@ -31,19 +31,19 @@ export const annotation: AnnotationParser = lazy(() => constraint(State.annotati
|
|
|
31
31
|
false, [],
|
|
32
32
|
([, ns], context) => {
|
|
33
33
|
const { linebreak, recursion, resources } = context;
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
return new List([new Node(html('
|
|
34
|
+
if (linebreak !== 0) {
|
|
35
|
+
ns.unshift(new Node('('));
|
|
36
|
+
ns.push(new Node(')'));
|
|
37
|
+
return new List([new Node(html('span', { class: 'bracket' }, ['(', html('span', { class: 'bracket' }, defrag(unwrap(ns))), ')']))]);
|
|
38
38
|
}
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
return new List([new Node(html('
|
|
39
|
+
const depth = MAX_DEPTH - (resources?.recursions[Recursion.annotation] ?? resources?.recursions.at(-1) ?? MAX_DEPTH);
|
|
40
|
+
recursion.add(depth);
|
|
41
|
+
return new List([new Node(html('sup', { class: 'annotation' }, [html('span', defrag(unwrap(trimBlankNodeEnd(ns))))]))]);
|
|
42
42
|
},
|
|
43
|
-
([, bs
|
|
43
|
+
([, bs], context) => {
|
|
44
44
|
const { source, position, range, linebreak, recursion, resources } = context;
|
|
45
45
|
const depth = MAX_DEPTH - (resources?.recursions[Recursion.annotation] ?? resources?.recursions.at(-1) ?? MAX_DEPTH);
|
|
46
|
-
if (linebreak === 0 && bs.length === 1 && source[position] === ')' && typeof bs.head?.value === 'object') {
|
|
46
|
+
if (linebreak === 0 && bs && bs.length === 1 && source[position] === ')' && typeof bs.head?.value === 'object') {
|
|
47
47
|
const { className } = bs.head.value;
|
|
48
48
|
if (className === 'paren' || className === 'bracket') {
|
|
49
49
|
const { firstChild, lastChild } = bs.head.value;
|
|
@@ -71,14 +71,28 @@ export const annotation: AnnotationParser = lazy(() => constraint(State.annotati
|
|
|
71
71
|
return new List([new Node(html('span', { class: 'bracket' }, ['(', html('sup', { class: 'annotation' }, [html('span', [bs.head.value])])]))]);
|
|
72
72
|
}
|
|
73
73
|
}
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
74
|
+
bs ??= new List();
|
|
75
|
+
bs.unshift(new Node('('));
|
|
76
|
+
if (source[context.position] === ')') {
|
|
77
|
+
bs.push(new Node(')'));
|
|
78
|
+
context.position += 1;
|
|
77
79
|
}
|
|
80
|
+
const str = linebreak === 0 ? source.slice(position - range + 2, position) : '';
|
|
81
|
+
bs = linebreak === 0 && (str === '' || indexA.test(str))
|
|
82
|
+
? new List([new Node(html('span', { class: 'paren' }, defrag(unwrap(bs))))])
|
|
83
|
+
: new List([new Node(html('span', { class: 'bracket' }, defrag(unwrap(bs))))]);
|
|
78
84
|
bs.unshift(new Node('('));
|
|
79
|
-
|
|
85
|
+
const cs = parser({ context });
|
|
86
|
+
if (source[context.position] === ')') {
|
|
87
|
+
cs && bs.import(cs);
|
|
88
|
+
bs.push(new Node(')'));
|
|
89
|
+
context.position += 1;
|
|
90
|
+
}
|
|
91
|
+
return new List([new Node(html('span', { class: 'bracket' }, defrag(unwrap(bs))))]);
|
|
80
92
|
})));
|
|
81
93
|
|
|
94
|
+
const parser = lazy(() => precedence(1, some(inline, ')', [[')', 1]])));
|
|
95
|
+
|
|
82
96
|
function deepunwrap(list: List<Node<string | HTMLElement>>): boolean {
|
|
83
97
|
let bottom = list.head!.value as HTMLElement;
|
|
84
98
|
for (; bottom;) {
|
|
@@ -9,8 +9,8 @@ describe('Unit: parser/inline/bracket', () => {
|
|
|
9
9
|
const parser = some(bracket);
|
|
10
10
|
|
|
11
11
|
it('(', () => {
|
|
12
|
-
assert.deepStrictEqual(inspect(parser, input('(', new Context())), [['<span class="
|
|
13
|
-
assert.deepStrictEqual(inspect(parser, input('()', new Context())), [['<span class="
|
|
12
|
+
assert.deepStrictEqual(inspect(parser, input('(', new Context())), [['<span class="paren">(</span>'], '']);
|
|
13
|
+
assert.deepStrictEqual(inspect(parser, input('()', new Context())), [['<span class="paren">()</span>'], '']);
|
|
14
14
|
assert.deepStrictEqual(inspect(parser, input('(a', new Context())), [['<span class="paren">(a</span>'], '']);
|
|
15
15
|
assert.deepStrictEqual(inspect(parser, input('(0)', new Context())), [['<span class="paren">(0)</span>'], '']);
|
|
16
16
|
assert.deepStrictEqual(inspect(parser, input('(1)', new Context())), [['<span class="paren">(1)</span>'], '']);
|
|
@@ -41,7 +41,8 @@ describe('Unit: parser/inline/bracket', () => {
|
|
|
41
41
|
assert.deepStrictEqual(inspect(parser, input('(ABBR, ABBR)', new Context())), [['<span class="paren">(ABBR, ABBR)</span>'], '']);
|
|
42
42
|
assert.deepStrictEqual(inspect(parser, input('(\\a)', new Context())), [['<span class="bracket">(a)</span>'], '']);
|
|
43
43
|
assert.deepStrictEqual(inspect(parser, input('(==)', new Context())), [['<span class="bracket">(==)</span>'], '']);
|
|
44
|
-
assert.deepStrictEqual(inspect(parser, input('(
|
|
44
|
+
assert.deepStrictEqual(inspect(parser, input('(()', new Context())), [['<span class="bracket">(<span class="paren">()</span></span>'], '']);
|
|
45
|
+
assert.deepStrictEqual(inspect(parser, input('("(\n))"(")', new Context())), [['<span class="bracket">("<span class="paren">(</span><br>)</span>'], ')"(")']);
|
|
45
46
|
assert.deepStrictEqual(inspect(parser, input('($)$', new Context())), [['<span class="bracket">(<span class="math" translate="no" data-src="$)$">$)$</span></span>'], '']);
|
|
46
47
|
assert.deepStrictEqual(inspect(parser, input(')', new Context())), undefined);
|
|
47
48
|
assert.deepStrictEqual(inspect(parser, input('(1,2)', new Context())), [['<span class="paren">(1,2)</span>'], '']);
|
|
@@ -80,10 +81,10 @@ describe('Unit: parser/inline/bracket', () => {
|
|
|
80
81
|
assert.deepStrictEqual(inspect(parser, input('""', new Context())), [['"', '"'], '']);
|
|
81
82
|
assert.deepStrictEqual(inspect(parser, input('"a', new Context())), [['"', 'a'], '']);
|
|
82
83
|
assert.deepStrictEqual(inspect(parser, input('"a"', new Context())), [['"', 'a', '"'], '']);
|
|
83
|
-
assert.deepStrictEqual(inspect(parser, input('"(")"', new Context())), [['"', '<span class="
|
|
84
|
-
assert.deepStrictEqual(inspect(parser, input('"(("', new Context())), [['"', '<span class="bracket">(<span class="
|
|
84
|
+
assert.deepStrictEqual(inspect(parser, input('"(")"', new Context())), [['"', '<span class="paren">(</span>', '"'], ')"']);
|
|
85
|
+
assert.deepStrictEqual(inspect(parser, input('"(("', new Context())), [['"', '<span class="bracket">(<span class="paren">(</span></span>', '"'], '']);
|
|
85
86
|
assert.deepStrictEqual(inspect(parser, input('"(\\")"', new Context())), [['"', '<span class="bracket">(")</span>', '"'], '']);
|
|
86
|
-
assert.deepStrictEqual(inspect(parser, input('"(\n)"(")', new Context())), [['"', '<span class="
|
|
87
|
+
assert.deepStrictEqual(inspect(parser, input('"(\n)"(")', new Context())), [['"', '<span class="paren">(</span>'], '\n)"(")']);
|
|
87
88
|
assert.deepStrictEqual(inspect(parser, input('"\n"', new Context())), [['"'], '\n"']);
|
|
88
89
|
assert.deepStrictEqual(inspect(parser, input('"\n"(")', new Context())), [['"'], '\n"(")']);
|
|
89
90
|
});
|
|
@@ -41,14 +41,14 @@ const p1 = lazy(() => surround(
|
|
|
41
41
|
true, [],
|
|
42
42
|
([as, bs = [], cs], { source, position, range, linebreak }) => {
|
|
43
43
|
const str = linebreak === 0 ? source.slice(position - range + 1, position - 1) : '';
|
|
44
|
-
return linebreak === 0 && indexA.test(str)
|
|
44
|
+
return linebreak === 0 && (str === '' || indexA.test(str))
|
|
45
45
|
? new List([new Node(html('span', { class: 'paren' }, `(${str})`))])
|
|
46
46
|
: new List([new Node(html('span', { class: 'bracket' }, defrag(unwrap(as.import(bs as List<Node<string>>).import(cs)))))]);
|
|
47
47
|
},
|
|
48
48
|
([as, bs = new List()], context) => {
|
|
49
49
|
const { source, position, range, linebreak } = context;
|
|
50
50
|
const str = linebreak === 0 ? source.slice(position - range + 1, position) : '';
|
|
51
|
-
return linebreak === 0 && indexA.test(str)
|
|
51
|
+
return linebreak === 0 && (str === '' || indexA.test(str))
|
|
52
52
|
? new List([new Node(html('span', { class: 'paren' }, `(${str}`))])
|
|
53
53
|
: new List([new Node(html('span', { class: 'bracket' }, defrag(unwrap(as.import(bs as List<Node<string>>)))))]);
|
|
54
54
|
}));
|
|
@@ -60,14 +60,14 @@ const p2 = lazy(() => surround(
|
|
|
60
60
|
true, [],
|
|
61
61
|
([as, bs = [], cs], { source, position, range, linebreak }) => {
|
|
62
62
|
const str = linebreak === 0 ? source.slice(position - range + 1, position - 1) : '';
|
|
63
|
-
return linebreak === 0 && indexF.test(str)
|
|
63
|
+
return linebreak === 0 && (str === '' || indexF.test(str))
|
|
64
64
|
? new List([new Node(html('span', { class: 'paren' }, `(${str})`))])
|
|
65
65
|
: new List([new Node(html('span', { class: 'bracket' }, defrag(unwrap(as.import(bs as List<Node<string>>).import(cs)))))]);
|
|
66
66
|
},
|
|
67
67
|
([as, bs = new List()], context) => {
|
|
68
68
|
const { source, position, range, linebreak } = context;
|
|
69
69
|
const str = linebreak === 0 ? source.slice(position - range + 1, position) : '';
|
|
70
|
-
return linebreak === 0 && indexF.test(str)
|
|
70
|
+
return linebreak === 0 && (str === '' || indexF.test(str))
|
|
71
71
|
? new List([new Node(html('span', { class: 'paren' }, `(${str}`))])
|
|
72
72
|
: new List([new Node(html('span', { class: 'bracket' }, defrag(unwrap(as.import(bs as List<Node<string>>)))))]);
|
|
73
73
|
}));
|
|
@@ -15,6 +15,7 @@ const MAX = 60;
|
|
|
15
15
|
const ELLIPSIS = '...';
|
|
16
16
|
const PART = (MAX - ELLIPSIS.length) / 2 | 0;
|
|
17
17
|
const REM = MAX - PART * 2 - ELLIPSIS.length;
|
|
18
|
+
assert(PART * 2 + REM + ELLIPSIS.length === MAX);
|
|
18
19
|
const table = [
|
|
19
20
|
...[...Array(36)].map((_, i) => i.toString(36)),
|
|
20
21
|
...[...Array(36)].map((_, i) => i.toString(36).toUpperCase()).slice(-26),
|
|
@@ -15,6 +15,9 @@ describe('Unit: parser/inline/reference', () => {
|
|
|
15
15
|
assert.deepStrictEqual(inspect(parser, input('[[', new Context())), undefined);
|
|
16
16
|
assert.deepStrictEqual(inspect(parser, input('[[]]', new Context())), undefined);
|
|
17
17
|
assert.deepStrictEqual(inspect(parser, input('[[]]]', new Context())), undefined);
|
|
18
|
+
assert.deepStrictEqual(inspect(parser, input('[[a', new Context())), undefined);
|
|
19
|
+
assert.deepStrictEqual(inspect(parser, input('[[a]', new Context())), undefined);
|
|
20
|
+
assert.deepStrictEqual(inspect(parser, input('[[a]b]', new Context())), undefined);
|
|
18
21
|
assert.deepStrictEqual(inspect(parser, input('[["]]', new Context())), undefined);
|
|
19
22
|
assert.deepStrictEqual(inspect(parser, input('[[(]]', new Context())), undefined);
|
|
20
23
|
assert.deepStrictEqual(inspect(parser, input('[[[%]]', new Context())), undefined);
|
|
@@ -51,6 +54,7 @@ describe('Unit: parser/inline/reference', () => {
|
|
|
51
54
|
assert.deepStrictEqual(inspect(parser, input('[[@a]]', new Context())), [['<sup class="reference"><span><a class="account" href="/@a">@a</a></span></sup>'], '']);
|
|
52
55
|
assert.deepStrictEqual(inspect(parser, input('[[http://host]]', new Context())), [['<sup class="reference"><span><a class="url" href="http://host" target="_blank">http://host</a></span></sup>'], '']);
|
|
53
56
|
assert.deepStrictEqual(inspect(parser, input('[[![]{a}]]', new Context())), [['<sup class="reference"><span>!<a class="url" href="a">a</a></span></sup>'], '']);
|
|
57
|
+
assert.deepStrictEqual(inspect(parser, input('[[a[[]]]]', new Context())), [['<sup class="reference"><span>a[[]]</span></sup>'], '']);
|
|
54
58
|
assert.deepStrictEqual(inspect(parser, input('[[[a]]]', new Context())), [['<sup class="reference"><span>[a]</span></sup>'], '']);
|
|
55
59
|
assert.deepStrictEqual(inspect(parser, input('[[[[a]]]]', new Context())), [['<sup class="reference"><span>[[a]]</span></sup>'], '']);
|
|
56
60
|
assert.deepStrictEqual(inspect(parser, input('[[((a))]]', new Context())), [['<sup class="reference"><span><span class="bracket">(<span class="paren">(a)</span>)</span></span></sup>'], '']);
|
|
@@ -21,13 +21,12 @@ export const reference: ReferenceParser = lazy(() => constraint(State.reference,
|
|
|
21
21
|
[2, 1 | Backtrack.common, 3 | Backtrack.doublebracket],
|
|
22
22
|
([, ns], context) => {
|
|
23
23
|
const { position, range, linebreak } = context;
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
}
|
|
27
|
-
else {
|
|
28
|
-
const head = position - range;
|
|
24
|
+
const head = position - range;
|
|
25
|
+
if (linebreak !== 0) {
|
|
29
26
|
setBacktrack(context, 2 | Backtrack.link, head, 2);
|
|
27
|
+
return;
|
|
30
28
|
}
|
|
29
|
+
return new List([new Node(html('sup', attributes(ns), [html('span', defrag(unwrap(trimBlankNodeEnd(ns))))]))]);
|
|
31
30
|
},
|
|
32
31
|
(_, context): undefined => {
|
|
33
32
|
const { source, position, range, linebreak } = context;
|
|
@@ -83,11 +83,11 @@ describe('Unit: parser/inline', () => {
|
|
|
83
83
|
assert.deepStrictEqual(inspect(parser, input('*++ a ++*', new Context())), [['<em><ins> a </ins></em>'], '']);
|
|
84
84
|
assert.deepStrictEqual(inspect(parser, input('*<bdi>`a`</bdi>*', new Context())), [['<em><bdi><code data-src="`a`">a</code></bdi></em>'], '']);
|
|
85
85
|
assert.deepStrictEqual(inspect(parser, input('*a"\nb*', new Context())), [['<em>a"<br>b</em>'], '']);
|
|
86
|
-
assert.deepStrictEqual(inspect(parser, input('*a"\n"("b*', new Context())), [['<em>a"<br>"<span class="
|
|
86
|
+
assert.deepStrictEqual(inspect(parser, input('*a"\n"("b*', new Context())), [['<em>a"<br>"<span class="paren">(</span>"b</em>'], '']);
|
|
87
87
|
assert.deepStrictEqual(inspect(parser, input('"*a\nb*', new Context())), [['"', '*', 'a', '<br>', 'b', '*'], '']);
|
|
88
88
|
assert.deepStrictEqual(inspect(parser, input('"*a\n""b*', new Context())), [['"', '*', 'a', '<br>', '"', '"', 'b', '*'], '']);
|
|
89
89
|
assert.deepStrictEqual(inspect(parser, input('"a\n"*b"c*', new Context())), [['"', 'a', '<br>', '"', '*', 'b', '"', 'c', '*'], '']);
|
|
90
|
-
assert.deepStrictEqual(inspect(parser, input('"*a**b\nc**"("*', new Context())), [['"', '*', 'a', '**', 'b', '<br>', 'c', '**', '"', '<span class="
|
|
90
|
+
assert.deepStrictEqual(inspect(parser, input('"*a**b\nc**"("*', new Context())), [['"', '*', 'a', '**', 'b', '<br>', 'c', '**', '"', '<span class="paren">(</span>', '"', '*'], '']);
|
|
91
91
|
assert.deepStrictEqual(inspect(parser, input('[% a"\nb %]', new Context())), [['<span class="remark"><input type="checkbox"><span>[% a"<br>b %]</span></span>'], '']);
|
|
92
92
|
assert.deepStrictEqual(inspect(parser, input('"<bdi>"a\n""b</bdi>"', new Context())), [['"', '<span class="invalid"><bdi></span>', '"', 'a', '<br>', '"', '"', 'b', '</bdi', '>', '"'], '']);
|
|
93
93
|
assert.deepStrictEqual(inspect(parser, input('<bdi>*<bdi>a</bdi>*</bdi>', new Context())), [['<bdi><em><bdi>a</bdi></em></bdi>'], '']);
|
|
@@ -140,7 +140,7 @@ describe('Unit: parser/inline', () => {
|
|
|
140
140
|
assert.deepStrictEqual(inspect(parser, input('(([["*(*"] ]))', new Context())), [['<sup class="annotation"><span>[["*<span class="bracket">(*</span>"] ]</span></sup>'], '']);
|
|
141
141
|
assert.deepStrictEqual(inspect(parser, input('(([:a\n]', new Context())), [['<span class="bracket">(<span class="bracket">(<span class="invalid">[:a\n]</span></span></span>'], '']);
|
|
142
142
|
assert.deepStrictEqual(inspect(parser, input('(({{\n}}', new Context())), [['<span class="bracket">(<span class="bracket">(<span class="template">{{<br>}}</span></span></span>'], '']);
|
|
143
|
-
assert.deepStrictEqual(inspect(parser, input('"((""))', new Context())), [['"', '<span class="bracket">(<span class="
|
|
143
|
+
assert.deepStrictEqual(inspect(parser, input('"((""))', new Context())), [['"', '<span class="bracket">(<span class="paren">(</span></span>', '"', '"', ')', ')'], '']);
|
|
144
144
|
assert.deepStrictEqual(inspect(parser, input('[[[a]]', new Context())), [['[', '<sup class="reference"><span>a</span></sup>'], '']);
|
|
145
145
|
assert.deepStrictEqual(inspect(parser, input('[[[[a]]', new Context())), [['[', '[', '<sup class="reference"><span>a</span></sup>'], '']);
|
|
146
146
|
assert.deepStrictEqual(inspect(parser, input('[[[[a]]]]', new Context())), [['<sup class="reference"><span>[[a]]</span></sup>'], '']);
|
|
@@ -154,6 +154,9 @@ function build(
|
|
|
154
154
|
: defs.get(identifier)!;
|
|
155
155
|
initial && defs.set(identifier, def);
|
|
156
156
|
assert(def.lastElementChild?.matches('sup'));
|
|
157
|
+
if (!initial && content.innerHTML.length > def.firstElementChild!.innerHTML.length) {
|
|
158
|
+
def.firstElementChild!.replaceWith(content);
|
|
159
|
+
}
|
|
157
160
|
const defIndex = initial
|
|
158
161
|
? info.defIndex = total + defs.size
|
|
159
162
|
: info.defIndex;
|