securemark 0.233.0 → 0.233.3
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 +17 -26
- package/markdown.d.ts +1 -1
- package/package-lock.json +12 -12
- package/package.json +1 -1
- package/src/parser/api/parse.ts +3 -2
- package/src/parser/block/blockquote.test.ts +4 -4
- package/src/parser/block/mathblock.ts +1 -1
- package/src/parser/block/paragraph.test.ts +14 -14
- package/src/parser/block/reply/cite.test.ts +11 -11
- package/src/parser/block/reply/cite.ts +3 -3
- package/src/parser/block/reply/quote.test.ts +2 -2
- package/src/parser/block/reply.test.ts +8 -8
- package/src/parser/inline/annotation.test.ts +2 -2
- package/src/parser/inline/autolink/anchor.test.ts +6 -6
- package/src/parser/inline/autolink/anchor.ts +4 -7
- package/src/parser/inline/deletion.test.ts +1 -1
- package/src/parser/inline/extension/index.test.ts +2 -2
- package/src/parser/inline/extension/indexee.ts +4 -3
- package/src/parser/inline/insertion.test.ts +1 -1
- package/src/parser/inline/link.ts +2 -2
- package/src/parser/inline/mark.test.ts +1 -1
- package/src/parser/inline/reference.test.ts +2 -2
- package/src/parser/inline/template.test.ts +1 -1
- package/src/parser/processor/footnote.ts +3 -2
- package/src/parser/util.ts +1 -5
package/CHANGELOG.md
CHANGED
package/dist/securemark.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! securemark v0.233.
|
|
1
|
+
/*! securemark v0.233.3 https://github.com/falsandtru/securemark | (c) 2017, falsandtru | UNLICENSED */
|
|
2
2
|
require = function () {
|
|
3
3
|
function r(e, n, t) {
|
|
4
4
|
function o(i, f) {
|
|
@@ -4467,22 +4467,19 @@ require = function () {
|
|
|
4467
4467
|
const typed_dom_1 = _dereq_('typed-dom');
|
|
4468
4468
|
const url_1 = _dereq_('spica/url');
|
|
4469
4469
|
function parse(source, opts = {}, context) {
|
|
4470
|
-
var _a, _b, _c, _d, _e, _f, _g, _h;
|
|
4470
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j;
|
|
4471
4471
|
if (!(0, segment_1.validate)(source, segment_1.MAX_SEGMENT_SIZE))
|
|
4472
4472
|
throw new Error(`Too large input over ${ segment_1.MAX_SEGMENT_SIZE.toLocaleString('en') } bytes.`);
|
|
4473
4473
|
const url = (_b = (_a = (0, header_2.headers)(source).find(field => field.toLowerCase().startsWith('url:'))) === null || _a === void 0 ? void 0 : _a.slice(4).trim()) !== null && _b !== void 0 ? _b : '';
|
|
4474
4474
|
source = !context ? (0, normalize_1.normalize)(source) : source;
|
|
4475
|
-
context = context && url === '' && context.id === opts.id ? context : (0, alias_1.ObjectAssign)({
|
|
4476
|
-
...context,
|
|
4477
|
-
...opts
|
|
4478
|
-
}, {
|
|
4475
|
+
context = context && url === '' && context.id === opts.id ? context : (0, alias_1.ObjectAssign)((0, alias_1.ObjectCreate)(context !== null && context !== void 0 ? context : {}), opts, {
|
|
4479
4476
|
host: (_d = (_c = opts.host) !== null && _c !== void 0 ? _c : context === null || context === void 0 ? void 0 : context.host) !== null && _d !== void 0 ? _d : new url_1.ReadonlyURL(global_1.location.pathname, global_1.location.origin),
|
|
4480
4477
|
url: url ? new url_1.ReadonlyURL(url) : context === null || context === void 0 ? void 0 : context.url,
|
|
4481
4478
|
id: (_e = opts.id) !== null && _e !== void 0 ? _e : context === null || context === void 0 ? void 0 : context.id,
|
|
4482
4479
|
footnotes: global_1.undefined,
|
|
4483
4480
|
test: global_1.undefined
|
|
4484
4481
|
});
|
|
4485
|
-
if (((
|
|
4482
|
+
if (((_g = context.host) === null || _g === void 0 ? void 0 : _g.origin) === 'null')
|
|
4486
4483
|
throw new Error(`Invalid host: ${ context.host.href }`);
|
|
4487
4484
|
const node = (0, typed_dom_1.frag)();
|
|
4488
4485
|
let index = 0;
|
|
@@ -5625,7 +5622,7 @@ require = function () {
|
|
|
5625
5622
|
} = {}
|
|
5626
5623
|
}) => {
|
|
5627
5624
|
var _a;
|
|
5628
|
-
return [delim.length === 2 && closer && param.trimStart() === '' ? ((_a = cache === null || cache === void 0 ? void 0 : cache.get(
|
|
5625
|
+
return [delim.length === 2 && closer && param.trimStart() === '' ? ((_a = cache === null || cache === void 0 ? void 0 : cache.get(`${ delim }\n${ body }${ delim }`)) === null || _a === void 0 ? void 0 : _a.cloneNode(true)) || (0, typed_dom_1.html)('div', {
|
|
5629
5626
|
class: 'math',
|
|
5630
5627
|
translate: 'no'
|
|
5631
5628
|
}, `${ delim }\n${ body }${ delim }`) : (0, typed_dom_1.html)('pre', {
|
|
@@ -5847,8 +5844,8 @@ require = function () {
|
|
|
5847
5844
|
const source_1 = _dereq_('../../source');
|
|
5848
5845
|
const typed_dom_1 = _dereq_('typed-dom');
|
|
5849
5846
|
exports.cite = (0, combinator_1.creator)((0, combinator_1.line)((0, combinator_1.fmap)((0, combinator_1.validate)('>>', (0, combinator_1.reverse)((0, combinator_1.tails)([
|
|
5850
|
-
(0, source_1.str)(/^>*(?=>>)/),
|
|
5851
|
-
|
|
5847
|
+
(0, source_1.str)(/^>*(?=>>[^>\s]+[^\S\n]*(?:$|\n))/),
|
|
5848
|
+
anchor_1.anchor
|
|
5852
5849
|
]))), ([el, quotes = '']) => [
|
|
5853
5850
|
(0, typed_dom_1.html)('span', { class: 'cite' }, (0, typed_dom_1.defrag)([
|
|
5854
5851
|
`${ quotes }>`,
|
|
@@ -6340,24 +6337,21 @@ require = function () {
|
|
|
6340
6337
|
function (_dereq_, module, exports) {
|
|
6341
6338
|
'use strict';
|
|
6342
6339
|
Object.defineProperty(exports, '__esModule', { value: true });
|
|
6343
|
-
exports.anchor =
|
|
6340
|
+
exports.anchor = void 0;
|
|
6344
6341
|
const combinator_1 = _dereq_('../../../combinator');
|
|
6345
6342
|
const link_1 = _dereq_('../link');
|
|
6346
|
-
const source_1 = _dereq_('../../source');
|
|
6347
6343
|
const typed_dom_1 = _dereq_('typed-dom');
|
|
6348
|
-
exports.
|
|
6349
|
-
exports.anchor = (0, combinator_1.lazy)(() => (0, combinator_1.validate)('>>', (0, combinator_1.fmap)((0, combinator_1.rewrite)((0, source_1.str)(exports.syntax), (0, combinator_1.context)({
|
|
6344
|
+
exports.anchor = (0, combinator_1.lazy)(() => (0, combinator_1.validate)('>>', (0, combinator_1.fmap)((0, combinator_1.focus)(/^>>[0-9a-z]+(?:-[0-9a-z]+)*(?![0-9A-Za-z@#:])/, (0, combinator_1.context)({
|
|
6350
6345
|
syntax: {
|
|
6351
6346
|
inline: {
|
|
6352
6347
|
link: true,
|
|
6353
6348
|
autolink: false
|
|
6354
6349
|
}
|
|
6355
6350
|
}
|
|
6356
|
-
}, (0, combinator_1.convert)(source => `[${ source }]{ ?
|
|
6351
|
+
}, (0, combinator_1.convert)(source => `[${ source }]{ ?at=${ source.slice(2) } }`, (0, combinator_1.union)([link_1.link])))), ([el]) => [(0, typed_dom_1.define)(el, { class: 'anchor' })])));
|
|
6357
6352
|
},
|
|
6358
6353
|
{
|
|
6359
6354
|
'../../../combinator': 27,
|
|
6360
|
-
'../../source': 128,
|
|
6361
6355
|
'../link': 114,
|
|
6362
6356
|
'typed-dom': 26
|
|
6363
6357
|
}
|
|
@@ -6907,8 +6901,9 @@ require = function () {
|
|
|
6907
6901
|
return (0, combinator_1.fmap)(parser, ([el], _, {id}) => [(0, typed_dom_1.define)(el, { id: id !== '' && identity(text(el)) || global_1.undefined })]);
|
|
6908
6902
|
}
|
|
6909
6903
|
exports.indexee = indexee;
|
|
6910
|
-
function identity(
|
|
6911
|
-
|
|
6904
|
+
function identity(text) {
|
|
6905
|
+
text && (text = text.trim());
|
|
6906
|
+
return text && `index:${ text.replace(/\s+/g, '_').slice(0, 101).replace(/^(.{97}).{4}$/, '$1...') }`;
|
|
6912
6907
|
}
|
|
6913
6908
|
exports.identity = identity;
|
|
6914
6909
|
function text(source) {
|
|
@@ -7283,13 +7278,13 @@ require = function () {
|
|
|
7283
7278
|
const url_1 = _dereq_('spica/url');
|
|
7284
7279
|
const optspec = { rel: ['nofollow'] };
|
|
7285
7280
|
(0, alias_1.ObjectSetPrototypeOf)(optspec, null);
|
|
7286
|
-
exports.link = (0, combinator_1.lazy)(() => (0, combinator_1.creator)(10, (0, combinator_1.bind)((0, combinator_1.
|
|
7281
|
+
exports.link = (0, combinator_1.lazy)(() => (0, combinator_1.creator)(10, (0, combinator_1.bind)((0, combinator_1.validate)([
|
|
7287
7282
|
'[',
|
|
7288
7283
|
'{'
|
|
7289
7284
|
], '}', '\n', (0, combinator_1.guard)(context => {
|
|
7290
7285
|
var _a, _b, _c;
|
|
7291
7286
|
return (_c = (_b = (_a = context.syntax) === null || _a === void 0 ? void 0 : _a.inline) === null || _b === void 0 ? void 0 : _b.link) !== null && _c !== void 0 ? _c : true;
|
|
7292
|
-
}, (0, combinator_1.tails)([
|
|
7287
|
+
}, (0, combinator_1.reverse)((0, combinator_1.tails)([
|
|
7293
7288
|
(0, combinator_1.context)({ syntax: { inline: { link: false } } }, (0, combinator_1.dup)((0, combinator_1.union)([
|
|
7294
7289
|
(0, combinator_1.surround)('[', inline_1.media, ']'),
|
|
7295
7290
|
(0, combinator_1.surround)('[', inline_1.shortmedia, ']'),
|
|
@@ -8159,7 +8154,7 @@ require = function () {
|
|
|
8159
8154
|
} else {
|
|
8160
8155
|
(_b = ref.lastChild) === null || _b === void 0 ? void 0 : _b.remove();
|
|
8161
8156
|
}
|
|
8162
|
-
const title = global_1.undefined || titles.get(identifier) || +identifier[0] && ref.title || (0, indexee_1.text)(content).trim() || global_1.undefined;
|
|
8157
|
+
const title = global_1.undefined || titles.get(identifier) || +identifier[0] && ref.title || (0, indexee_1.text)(content).trim() || content.textContent.trim() || global_1.undefined;
|
|
8163
8158
|
title ? !titles.has(identifier) && titles.set(identifier, title) : buffer.set(identifier, ref);
|
|
8164
8159
|
const blank = !!abbr && !content.firstChild;
|
|
8165
8160
|
const refIndex = i + 1;
|
|
@@ -8762,11 +8757,7 @@ require = function () {
|
|
|
8762
8757
|
function isEndTightNodes(nodes) {
|
|
8763
8758
|
if (nodes.length === 0)
|
|
8764
8759
|
return true;
|
|
8765
|
-
|
|
8766
|
-
const node = nodes[i];
|
|
8767
|
-
return isVisible(node, -1);
|
|
8768
|
-
}
|
|
8769
|
-
return false;
|
|
8760
|
+
return isVisible(nodes[nodes.length - 1], -1);
|
|
8770
8761
|
}
|
|
8771
8762
|
exports.isEndTightNodes = isEndTightNodes;
|
|
8772
8763
|
function isVisible(node, strpos) {
|
package/markdown.d.ts
CHANGED
package/package-lock.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "securemark",
|
|
3
|
-
"version": "0.233.
|
|
3
|
+
"version": "0.233.3",
|
|
4
4
|
"lockfileVersion": 1,
|
|
5
5
|
"requires": true,
|
|
6
6
|
"dependencies": {
|
|
@@ -3030,9 +3030,9 @@
|
|
|
3030
3030
|
"dev": true
|
|
3031
3031
|
},
|
|
3032
3032
|
"electron-to-chromium": {
|
|
3033
|
-
"version": "1.4.
|
|
3034
|
-
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.
|
|
3035
|
-
"integrity": "sha512-
|
|
3033
|
+
"version": "1.4.95",
|
|
3034
|
+
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.95.tgz",
|
|
3035
|
+
"integrity": "sha512-h2VAMV/hPtmAeiDkwA8c5sjS+cWt6GlQL4ERdrOUWu7cRIG5IRk9uwR9f0utP+hPJ9ZZsADTq9HpbuT46eBYAg==",
|
|
3036
3036
|
"dev": true
|
|
3037
3037
|
},
|
|
3038
3038
|
"elliptic": {
|
|
@@ -6359,9 +6359,9 @@
|
|
|
6359
6359
|
"dev": true
|
|
6360
6360
|
},
|
|
6361
6361
|
"isbinaryfile": {
|
|
6362
|
-
"version": "4.0.
|
|
6363
|
-
"resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-4.0.
|
|
6364
|
-
"integrity": "sha512-
|
|
6362
|
+
"version": "4.0.10",
|
|
6363
|
+
"resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-4.0.10.tgz",
|
|
6364
|
+
"integrity": "sha512-iHrqe5shvBUcFbmZq9zOQHBoeOhZJu6RQGrDpBgenUm/Am+F3JM2MgQj+rK3Z601fzrL5gLZWtAPH2OBaSVcyw==",
|
|
6365
6365
|
"dev": true
|
|
6366
6366
|
},
|
|
6367
6367
|
"isexe": {
|
|
@@ -7092,18 +7092,18 @@
|
|
|
7092
7092
|
}
|
|
7093
7093
|
},
|
|
7094
7094
|
"make-fetch-happen": {
|
|
7095
|
-
"version": "10.0
|
|
7096
|
-
"resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-10.0.
|
|
7097
|
-
"integrity": "sha512-
|
|
7095
|
+
"version": "10.1.0",
|
|
7096
|
+
"resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-10.1.0.tgz",
|
|
7097
|
+
"integrity": "sha512-HeP4QlkadP/Op+hE+Une1070kcyN85FshQObku3/rmzRh4zDcKXA19d2L3AQR6UoaX3uZmhSOpTLH15b1vOFvQ==",
|
|
7098
7098
|
"dev": true,
|
|
7099
7099
|
"requires": {
|
|
7100
7100
|
"agentkeepalive": "^4.2.1",
|
|
7101
|
-
"cacache": "^16.0.
|
|
7101
|
+
"cacache": "^16.0.2",
|
|
7102
7102
|
"http-cache-semantics": "^4.1.0",
|
|
7103
7103
|
"http-proxy-agent": "^5.0.0",
|
|
7104
7104
|
"https-proxy-agent": "^5.0.0",
|
|
7105
7105
|
"is-lambda": "^1.0.1",
|
|
7106
|
-
"lru-cache": "^7.
|
|
7106
|
+
"lru-cache": "^7.7.1",
|
|
7107
7107
|
"minipass": "^3.1.6",
|
|
7108
7108
|
"minipass-collect": "^1.0.2",
|
|
7109
7109
|
"minipass-fetch": "^2.0.3",
|
package/package.json
CHANGED
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;
|
|
@@ -25,13 +25,13 @@ describe('Unit: parser/block/blockquote', () => {
|
|
|
25
25
|
assert.deepStrictEqual(inspect(parser('> a\nb')), [['<blockquote><pre>a<br>b</pre></blockquote>'], '']);
|
|
26
26
|
assert.deepStrictEqual(inspect(parser('> a\n b ')), [['<blockquote><pre>a<br> b </pre></blockquote>'], '']);
|
|
27
27
|
assert.deepStrictEqual(inspect(parser('> a\n>')), [['<blockquote><pre>a<br></pre></blockquote>'], '']);
|
|
28
|
-
assert.deepStrictEqual(inspect(parser('> a\n>>1')), [['<blockquote><pre>a<br><a href="?
|
|
28
|
+
assert.deepStrictEqual(inspect(parser('> a\n>>1')), [['<blockquote><pre>a<br><a href="?at=1" class="anchor">>>1</a></pre></blockquote>'], '']);
|
|
29
29
|
assert.deepStrictEqual(inspect(parser('> a\n> b ')), [['<blockquote><pre>a<br>b </pre></blockquote>'], '']);
|
|
30
30
|
assert.deepStrictEqual(inspect(parser('> a\n>\n')), [['<blockquote><pre>a<br></pre></blockquote>'], '']);
|
|
31
31
|
assert.deepStrictEqual(inspect(parser('> a\n>\nb')), [['<blockquote><pre>a<br><br>b</pre></blockquote>'], '']);
|
|
32
32
|
assert.deepStrictEqual(inspect(parser('> a\n>\n b ')), [['<blockquote><pre>a<br><br> b </pre></blockquote>'], '']);
|
|
33
33
|
assert.deepStrictEqual(inspect(parser('> a\n>\n>')), [['<blockquote><pre>a<br><br></pre></blockquote>'], '']);
|
|
34
|
-
assert.deepStrictEqual(inspect(parser('> a\n>\n>>1')), [['<blockquote><pre>a<br><br><a href="?
|
|
34
|
+
assert.deepStrictEqual(inspect(parser('> a\n>\n>>1')), [['<blockquote><pre>a<br><br><a href="?at=1" class="anchor">>>1</a></pre></blockquote>'], '']);
|
|
35
35
|
assert.deepStrictEqual(inspect(parser('> a\n>\n> b ')), [['<blockquote><pre>a<br><br>b </pre></blockquote>'], '']);
|
|
36
36
|
assert.deepStrictEqual(inspect(parser('> a\\\nb')), [['<blockquote><pre>a\\<br>b</pre></blockquote>'], '']);
|
|
37
37
|
assert.deepStrictEqual(inspect(parser('> a ')), [['<blockquote><pre> a </pre></blockquote>'], '']);
|
|
@@ -44,8 +44,8 @@ describe('Unit: parser/block/blockquote', () => {
|
|
|
44
44
|
assert.deepStrictEqual(inspect(parser('> !http://host')), [['<blockquote><pre>!<a href="http://host" target="_blank">http://host</a></pre></blockquote>'], '']);
|
|
45
45
|
assert.deepStrictEqual(inspect(parser('> #a')), [['<blockquote><pre><a href="/hashtags/a" class="hashtag">#a</a></pre></blockquote>'], '']);
|
|
46
46
|
assert.deepStrictEqual(inspect(parser('> @a#b')), [['<blockquote><pre><a href="/@a?ch=b" class="channel">@a#b</a></pre></blockquote>'], '']);
|
|
47
|
-
assert.deepStrictEqual(inspect(parser('> >>1\n> > b')), [['<blockquote><pre><a href="?
|
|
48
|
-
assert.deepStrictEqual(inspect(parser('> >>1\n> > b\n> c')), [['<blockquote><pre><a href="?
|
|
47
|
+
assert.deepStrictEqual(inspect(parser('> >>1\n> > b')), [['<blockquote><pre><a href="?at=1" class="anchor">>>1</a><br>> b</pre></blockquote>'], '']);
|
|
48
|
+
assert.deepStrictEqual(inspect(parser('> >>1\n> > b\n> c')), [['<blockquote><pre><a href="?at=1" class="anchor">>>1</a><br>> b<br>c</pre></blockquote>'], '']);
|
|
49
49
|
});
|
|
50
50
|
|
|
51
51
|
it('nest', () => {
|
|
@@ -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',
|
|
@@ -29,21 +29,21 @@ describe('Unit: parser/block/paragraph', () => {
|
|
|
29
29
|
});
|
|
30
30
|
|
|
31
31
|
it('anchor', () => {
|
|
32
|
-
assert.deepStrictEqual(inspect(parser('>>1 a\nb')), [['<p><a href="?
|
|
33
|
-
assert.deepStrictEqual(inspect(parser('>>1 a\n>>2')), [['<p><a href="?
|
|
34
|
-
assert.deepStrictEqual(inspect(parser('>>1 a\n>>b')), [['<p><a href="?
|
|
35
|
-
assert.deepStrictEqual(inspect(parser('>>1 a\n>> b')), [['<p><a href="?
|
|
36
|
-
assert.deepStrictEqual(inspect(parser('>>11.')), [['<p><a href="?
|
|
37
|
-
assert.deepStrictEqual(inspect(parser('>>11 a')), [['<p><a href="?
|
|
38
|
-
assert.deepStrictEqual(inspect(parser('>>>11 a')), [['<p>><a href="?
|
|
39
|
-
assert.deepStrictEqual(inspect(parser('>> a\n>>1')), [['<p>>> a<br><a href="?
|
|
40
|
-
assert.deepStrictEqual(inspect(parser('a>>1')), [['<p>a<a href="?
|
|
41
|
-
assert.deepStrictEqual(inspect(parser('a >>1')), [['<p>a <a href="?
|
|
42
|
-
assert.deepStrictEqual(inspect(parser('a\n>>1')), [['<p>a<br><a href="?
|
|
43
|
-
assert.deepStrictEqual(inspect(parser('a\n>>1\nb')), [['<p>a<br><a href="?
|
|
32
|
+
assert.deepStrictEqual(inspect(parser('>>1 a\nb')), [['<p><a href="?at=1" class="anchor">>>1</a> a<br>b</p>'], '']);
|
|
33
|
+
assert.deepStrictEqual(inspect(parser('>>1 a\n>>2')), [['<p><a href="?at=1" class="anchor">>>1</a> a<br><a href="?at=2" class="anchor">>>2</a></p>'], '']);
|
|
34
|
+
assert.deepStrictEqual(inspect(parser('>>1 a\n>>b')), [['<p><a href="?at=1" class="anchor">>>1</a> a<br><a href="?at=b" class="anchor">>>b</a></p>'], '']);
|
|
35
|
+
assert.deepStrictEqual(inspect(parser('>>1 a\n>> b')), [['<p><a href="?at=1" class="anchor">>>1</a> a<br>>> b</p>'], '']);
|
|
36
|
+
assert.deepStrictEqual(inspect(parser('>>11.')), [['<p><a href="?at=11" class="anchor">>>11</a>.</p>'], '']);
|
|
37
|
+
assert.deepStrictEqual(inspect(parser('>>11 a')), [['<p><a href="?at=11" class="anchor">>>11</a> a</p>'], '']);
|
|
38
|
+
assert.deepStrictEqual(inspect(parser('>>>11 a')), [['<p>><a href="?at=11" class="anchor">>>11</a> a</p>'], '']);
|
|
39
|
+
assert.deepStrictEqual(inspect(parser('>> a\n>>1')), [['<p>>> a<br><a href="?at=1" class="anchor">>>1</a></p>'], '']);
|
|
40
|
+
assert.deepStrictEqual(inspect(parser('a>>1')), [['<p>a<a href="?at=1" class="anchor">>>1</a></p>'], '']);
|
|
41
|
+
assert.deepStrictEqual(inspect(parser('a >>1')), [['<p>a <a href="?at=1" class="anchor">>>1</a></p>'], '']);
|
|
42
|
+
assert.deepStrictEqual(inspect(parser('a\n>>1')), [['<p>a<br><a href="?at=1" class="anchor">>>1</a></p>'], '']);
|
|
43
|
+
assert.deepStrictEqual(inspect(parser('a\n>>1\nb')), [['<p>a<br><a href="?at=1" class="anchor">>>1</a><br>b</p>'], '']);
|
|
44
44
|
assert.deepStrictEqual(inspect(parser('a\n>> b\nc')), [['<p>a<br>>> b<br>c</p>'], '']);
|
|
45
|
-
assert.deepStrictEqual(inspect(parser(' >>1')), [['<p><a href="?
|
|
46
|
-
assert.deepStrictEqual(inspect(parser(' >>>1')), [['<p>><a href="?
|
|
45
|
+
assert.deepStrictEqual(inspect(parser(' >>1')), [['<p><a href="?at=1" class="anchor">>>1</a></p>'], '']);
|
|
46
|
+
assert.deepStrictEqual(inspect(parser(' >>>1')), [['<p>><a href="?at=1" class="anchor">>>1</a></p>'], '']);
|
|
47
47
|
});
|
|
48
48
|
|
|
49
49
|
it('comment', () => {
|
|
@@ -28,17 +28,17 @@ describe('Unit: parser/block/reply/cite', () => {
|
|
|
28
28
|
});
|
|
29
29
|
|
|
30
30
|
it('valid', () => {
|
|
31
|
-
assert.deepStrictEqual(inspect(parser('>>0')), [['<span class="cite">><a href="?
|
|
32
|
-
assert.deepStrictEqual(inspect(parser('>>0 ')), [['<span class="cite">><a href="?
|
|
33
|
-
assert.deepStrictEqual(inspect(parser('>>0\n')), [['<span class="cite">><a href="?
|
|
34
|
-
assert.deepStrictEqual(inspect(parser('>>>0')), [['<span class="cite">>><a href="?
|
|
35
|
-
assert.deepStrictEqual(inspect(parser('>>0\n1')), [['<span class="cite">><a href="?
|
|
36
|
-
assert.deepStrictEqual(inspect(parser('>>0\n>1')), [['<span class="cite">><a href="?
|
|
37
|
-
assert.deepStrictEqual(inspect(parser('>>0\n>>')), [['<span class="cite">><a href="?
|
|
38
|
-
assert.deepStrictEqual(inspect(parser('>>0\n>>1')), [['<span class="cite">><a href="?
|
|
39
|
-
assert.deepStrictEqual(inspect(parser('>>0\n>>>1')), [['<span class="cite">><a href="?
|
|
40
|
-
assert.deepStrictEqual(inspect(parser('>>>0\n>>')), [['<span class="cite">>><a href="?
|
|
41
|
-
assert.deepStrictEqual(inspect(parser('>>>0\n>>1')), [['<span class="cite">>><a href="?
|
|
31
|
+
assert.deepStrictEqual(inspect(parser('>>0')), [['<span class="cite">><a href="?at=0" class="anchor" data-depth="1">>0</a></span>', '<br>'], '']);
|
|
32
|
+
assert.deepStrictEqual(inspect(parser('>>0 ')), [['<span class="cite">><a href="?at=0" class="anchor" data-depth="1">>0</a></span>', '<br>'], '']);
|
|
33
|
+
assert.deepStrictEqual(inspect(parser('>>0\n')), [['<span class="cite">><a href="?at=0" class="anchor" data-depth="1">>0</a></span>', '<br>'], '']);
|
|
34
|
+
assert.deepStrictEqual(inspect(parser('>>>0')), [['<span class="cite">>><a href="?at=0" class="anchor" data-depth="2">>0</a></span>', '<br>'], '']);
|
|
35
|
+
assert.deepStrictEqual(inspect(parser('>>0\n1')), [['<span class="cite">><a href="?at=0" class="anchor" data-depth="1">>0</a></span>', '<br>'], '1']);
|
|
36
|
+
assert.deepStrictEqual(inspect(parser('>>0\n>1')), [['<span class="cite">><a href="?at=0" class="anchor" data-depth="1">>0</a></span>', '<br>'], '>1']);
|
|
37
|
+
assert.deepStrictEqual(inspect(parser('>>0\n>>')), [['<span class="cite">><a href="?at=0" class="anchor" data-depth="1">>0</a></span>', '<br>'], '>>']);
|
|
38
|
+
assert.deepStrictEqual(inspect(parser('>>0\n>>1')), [['<span class="cite">><a href="?at=0" class="anchor" data-depth="1">>0</a></span>', '<br>', '<span class="cite">><a href="?at=1" class="anchor" data-depth="1">>1</a></span>', '<br>'], '']);
|
|
39
|
+
assert.deepStrictEqual(inspect(parser('>>0\n>>>1')), [['<span class="cite">><a href="?at=0" class="anchor" data-depth="1">>0</a></span>', '<br>', '<span class="cite">>><a href="?at=1" class="anchor" data-depth="2">>1</a></span>', '<br>'], '']);
|
|
40
|
+
assert.deepStrictEqual(inspect(parser('>>>0\n>>')), [['<span class="cite">>><a href="?at=0" class="anchor" data-depth="2">>0</a></span>', '<br>'], '>>']);
|
|
41
|
+
assert.deepStrictEqual(inspect(parser('>>>0\n>>1')), [['<span class="cite">>><a href="?at=0" class="anchor" data-depth="2">>0</a></span>', '<br>', '<span class="cite">><a href="?at=1" class="anchor" data-depth="1">>1</a></span>', '<br>'], '']);
|
|
42
42
|
});
|
|
43
43
|
|
|
44
44
|
});
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
import { ReplyParser } from '../../block';
|
|
2
2
|
import { tails, line, validate, creator, reverse, fmap } from '../../../combinator';
|
|
3
|
-
import { anchor
|
|
3
|
+
import { anchor } from '../../inline/autolink/anchor';
|
|
4
4
|
import { str } from '../../source';
|
|
5
5
|
import { html, define, defrag } from 'typed-dom';
|
|
6
6
|
|
|
7
7
|
export const cite: ReplyParser.CiteParser = creator(line(fmap(validate(
|
|
8
8
|
'>>',
|
|
9
9
|
reverse(tails([
|
|
10
|
-
str(/^>*(?=>>)/),
|
|
11
|
-
|
|
10
|
+
str(/^>*(?=>>[^>\s]+[^\S\n]*(?:$|\n))/),
|
|
11
|
+
anchor,
|
|
12
12
|
]))),
|
|
13
13
|
([el, quotes = '']: [HTMLElement, string?]) => [
|
|
14
14
|
html('span', { class: 'cite' }, defrag([
|
|
@@ -47,8 +47,8 @@ describe('Unit: parser/block/reply/quote', () => {
|
|
|
47
47
|
assert.deepStrictEqual(inspect(parser('> 0\n>> 1')), [['<span class="quote">> 0<br>>> 1</span>', '<br>'], '']);
|
|
48
48
|
assert.deepStrictEqual(inspect(parser('>> 0\n> 1')), [['<span class="quote">>> 0<br>> 1</span>', '<br>'], '']);
|
|
49
49
|
assert.deepStrictEqual(inspect(parser('> \\')), [['<span class="quote">> \\</span>', '<br>'], '']);
|
|
50
|
-
assert.deepStrictEqual(inspect(parser('> >>0\n> > b')), [['<span class="quote">> <a href="?
|
|
51
|
-
assert.deepStrictEqual(inspect(parser('> >>0\n> > b\n> c')), [['<span class="quote">> <a href="?
|
|
50
|
+
assert.deepStrictEqual(inspect(parser('> >>0\n> > b')), [['<span class="quote">> <a href="?at=0" class="anchor">>>0</a><br>> > b</span>', '<br>'], '']);
|
|
51
|
+
assert.deepStrictEqual(inspect(parser('> >>0\n> > b\n> c')), [['<span class="quote">> <a href="?at=0" class="anchor">>>0</a><br>> > b<br>> c</span>', '<br>'], '']);
|
|
52
52
|
assert.deepStrictEqual(inspect(parser('> > a\n> > b\n> > c')), [['<span class="quote">> > a<br>> > b<br>> > c</span>', '<br>'], '']);
|
|
53
53
|
assert.deepStrictEqual(inspect(parser('> > > a\n> > > b')), [['<span class="quote">> > > a<br>> > > b</span>', '<br>'], '']);
|
|
54
54
|
assert.deepStrictEqual(inspect(parser('> #a')), [['<span class="quote">> <a href="/hashtags/a" class="hashtag">#a</a></span>', '<br>'], '']);
|
|
@@ -7,14 +7,14 @@ describe('Unit: parser/block/reply', () => {
|
|
|
7
7
|
const parser = (source: string) => some(reply)(source, {});
|
|
8
8
|
|
|
9
9
|
it('basic', () => {
|
|
10
|
-
assert.deepStrictEqual(inspect(parser('>>1')), [['<p><span class="cite">><a href="?
|
|
11
|
-
assert.deepStrictEqual(inspect(parser('>>1\na')), [['<p><span class="cite">><a href="?
|
|
12
|
-
assert.deepStrictEqual(inspect(parser('>>1\na\n>>2')), [['<p><span class="cite">><a href="?
|
|
13
|
-
assert.deepStrictEqual(inspect(parser('>>1\n>>2')), [['<p><span class="cite">><a href="?
|
|
14
|
-
assert.deepStrictEqual(inspect(parser('>>1\n> a')), [['<p><span class="cite">><a href="?
|
|
15
|
-
assert.deepStrictEqual(inspect(parser('>>1\n> a\nb')), [['<p><span class="cite">><a href="?
|
|
16
|
-
assert.deepStrictEqual(inspect(parser('>>1\n> a\n>>2')), [['<p><span class="cite">><a href="?
|
|
17
|
-
assert.deepStrictEqual(inspect(parser('>>1\n> a\n>> b')), [['<p><span class="cite">><a href="?
|
|
10
|
+
assert.deepStrictEqual(inspect(parser('>>1')), [['<p><span class="cite">><a href="?at=1" class="anchor" data-depth="1">>1</a></span></p>'], '']);
|
|
11
|
+
assert.deepStrictEqual(inspect(parser('>>1\na')), [['<p><span class="cite">><a href="?at=1" class="anchor" data-depth="1">>1</a></span><br>a</p>'], '']);
|
|
12
|
+
assert.deepStrictEqual(inspect(parser('>>1\na\n>>2')), [['<p><span class="cite">><a href="?at=1" class="anchor" data-depth="1">>1</a></span><br>a<br><a href="?at=2" class="anchor">>>2</a></p>'], '']);
|
|
13
|
+
assert.deepStrictEqual(inspect(parser('>>1\n>>2')), [['<p><span class="cite">><a href="?at=1" class="anchor" data-depth="1">>1</a></span><br><span class="cite">><a href="?at=2" class="anchor" data-depth="1">>2</a></span></p>'], '']);
|
|
14
|
+
assert.deepStrictEqual(inspect(parser('>>1\n> a')), [['<p><span class="cite">><a href="?at=1" class="anchor" data-depth="1">>1</a></span><br><span class="quote">> a</span></p>'], '']);
|
|
15
|
+
assert.deepStrictEqual(inspect(parser('>>1\n> a\nb')), [['<p><span class="cite">><a href="?at=1" class="anchor" data-depth="1">>1</a></span><br><span class="quote">> a</span><br>b</p>'], '']);
|
|
16
|
+
assert.deepStrictEqual(inspect(parser('>>1\n> a\n>>2')), [['<p><span class="cite">><a href="?at=1" class="anchor" data-depth="1">>1</a></span><br><span class="quote">> a</span><br><span class="cite">><a href="?at=2" class="anchor" data-depth="1">>2</a></span></p>'], '']);
|
|
17
|
+
assert.deepStrictEqual(inspect(parser('>>1\n> a\n>> b')), [['<p><span class="cite">><a href="?at=1" class="anchor" data-depth="1">>1</a></span><br><span class="quote">> a<br>>> b</span></p>'], '']);
|
|
18
18
|
});
|
|
19
19
|
|
|
20
20
|
});
|
|
@@ -18,14 +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
26
|
assert.deepStrictEqual(inspect(parser('((*a\nb*))')), undefined);
|
|
28
27
|
assert.deepStrictEqual(inspect(parser('((\\))')), undefined);
|
|
28
|
+
assert.deepStrictEqual(inspect(parser('((a)b))')), undefined);
|
|
29
29
|
assert.deepStrictEqual(inspect(parser('(((a))')), undefined);
|
|
30
30
|
assert.deepStrictEqual(inspect(parser(' ((a))')), undefined);
|
|
31
31
|
});
|
|
@@ -22,12 +22,12 @@ describe('Unit: parser/inline/autolink/anchor', () => {
|
|
|
22
22
|
});
|
|
23
23
|
|
|
24
24
|
it('valid', () => {
|
|
25
|
-
assert.deepStrictEqual(inspect(parser('>>0')), [['<a href="?
|
|
26
|
-
assert.deepStrictEqual(inspect(parser('>>a')), [['<a href="?
|
|
27
|
-
assert.deepStrictEqual(inspect(parser('>>0-')), [['<a href="?
|
|
28
|
-
assert.deepStrictEqual(inspect(parser('>>0-a')), [['<a href="?
|
|
29
|
-
assert.deepStrictEqual(inspect(parser('>>0-A')), [['<a href="?
|
|
30
|
-
assert.deepStrictEqual(inspect(parser('>>0--a')), [['<a href="?
|
|
25
|
+
assert.deepStrictEqual(inspect(parser('>>0')), [['<a href="?at=0" class="anchor">>>0</a>'], '']);
|
|
26
|
+
assert.deepStrictEqual(inspect(parser('>>a')), [['<a href="?at=a" class="anchor">>>a</a>'], '']);
|
|
27
|
+
assert.deepStrictEqual(inspect(parser('>>0-')), [['<a href="?at=0" class="anchor">>>0</a>'], '-']);
|
|
28
|
+
assert.deepStrictEqual(inspect(parser('>>0-a')), [['<a href="?at=0-a" class="anchor">>>0-a</a>'], '']);
|
|
29
|
+
assert.deepStrictEqual(inspect(parser('>>0-A')), [['<a href="?at=0" class="anchor">>>0</a>'], '-A']);
|
|
30
|
+
assert.deepStrictEqual(inspect(parser('>>0--a')), [['<a href="?at=0" class="anchor">>>0</a>'], '--a']);
|
|
31
31
|
});
|
|
32
32
|
|
|
33
33
|
});
|
|
@@ -1,18 +1,15 @@
|
|
|
1
1
|
import { AutolinkParser } from '../../inline';
|
|
2
|
-
import { union, validate,
|
|
2
|
+
import { union, validate, focus, context, convert, fmap, lazy } from '../../../combinator';
|
|
3
3
|
import { link } from '../link';
|
|
4
|
-
import { str } from '../../source';
|
|
5
4
|
import { define } from 'typed-dom';
|
|
6
5
|
|
|
7
|
-
export const
|
|
8
|
-
|
|
9
|
-
export const anchor: AutolinkParser.AnchorParser = lazy(() => validate('>>', fmap(rewrite(
|
|
10
|
-
str(syntax),
|
|
6
|
+
export const anchor: AutolinkParser.AnchorParser = lazy(() => validate('>>', fmap(focus(
|
|
7
|
+
/^>>[0-9a-z]+(?:-[0-9a-z]+)*(?![0-9A-Za-z@#:])/,
|
|
11
8
|
context({ syntax: { inline: {
|
|
12
9
|
link: true,
|
|
13
10
|
autolink: false,
|
|
14
11
|
}}},
|
|
15
12
|
convert(
|
|
16
|
-
source => `[${source}]{ ?
|
|
13
|
+
source => `[${source}]{ ?at=${source.slice(2)} }`,
|
|
17
14
|
union([link])))),
|
|
18
15
|
([el]) => [define(el, { class: 'anchor' })])));
|
|
@@ -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>'], '']);
|
|
@@ -54,8 +54,8 @@ describe('Unit: parser/inline/extension/index', () => {
|
|
|
54
54
|
assert.deepStrictEqual(inspect(parser('[#@a]')), [['<a class="index" href="#index:@a">@a</a>'], '']);
|
|
55
55
|
assert.deepStrictEqual(inspect(parser('[#http://host]')), [['<a class="index" href="#index:http://host">http://host</a>'], '']);
|
|
56
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"
|
|
58
|
-
assert.deepStrictEqual(inspect(parser('[#[# a #]]')), [['<a class="index"
|
|
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>'], '']);
|
|
59
59
|
assert.deepStrictEqual(inspect(parser('[#a((b))]')), [['<a class="index" href="#index:a((b))">a<span class="paren">((b))</span></a>'], '']);
|
|
60
60
|
assert.deepStrictEqual(inspect(parser('[#a[[b]]]')), [['<a class="index" href="#index:a[[b]]">a[[b]]</a>'], '']);
|
|
61
61
|
});
|
|
@@ -9,9 +9,10 @@ export function indexee(parser: Parser<HTMLElement, MarkdownParser.Context>): Pa
|
|
|
9
9
|
return fmap(parser, ([el], _, { id }) => [define(el, { id: id !== '' && identity(text(el)) || undefined })]);
|
|
10
10
|
}
|
|
11
11
|
|
|
12
|
-
export function identity(
|
|
13
|
-
assert(!
|
|
14
|
-
|
|
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...')}`;
|
|
15
16
|
}
|
|
16
17
|
assert(identity('0'.repeat(100)).slice(6) === '0'.repeat(100));
|
|
17
18
|
assert(identity('0'.repeat(101)).slice(6) === '0'.repeat(97) + '...');
|
|
@@ -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>'], '']);
|
|
@@ -16,10 +16,10 @@ const optspec = {
|
|
|
16
16
|
} as const;
|
|
17
17
|
ObjectSetPrototypeOf(optspec, null);
|
|
18
18
|
|
|
19
|
-
export const link: LinkParser = lazy(() => creator(10, bind(
|
|
19
|
+
export const link: LinkParser = lazy(() => creator(10, bind(
|
|
20
20
|
validate(['[', '{'], '}', '\n',
|
|
21
21
|
guard(context => context.syntax?.inline?.link ?? true,
|
|
22
|
-
tails([
|
|
22
|
+
reverse(tails([
|
|
23
23
|
context({ syntax: { inline: {
|
|
24
24
|
link: false,
|
|
25
25
|
}}},
|
|
@@ -27,7 +27,7 @@ describe('Unit: parser/inline/mark', () => {
|
|
|
27
27
|
|
|
28
28
|
it('basic', () => {
|
|
29
29
|
assert.deepStrictEqual(inspect(parser('==a==')), [['<mark>a</mark>'], '']);
|
|
30
|
-
assert.deepStrictEqual(inspect(parser('==
|
|
30
|
+
assert.deepStrictEqual(inspect(parser('==a=b==')), [['<mark>a=b</mark>'], '']);
|
|
31
31
|
assert.deepStrictEqual(inspect(parser('==a\nb==')), [['<mark>a<br>b</mark>'], '']);
|
|
32
32
|
assert.deepStrictEqual(inspect(parser('==a\\\nb==')), [['<mark>a<span class="linebreak"> </span>b</mark>'], '']);
|
|
33
33
|
assert.deepStrictEqual(inspect(parser('==\\===')), [['<mark>=</mark>'], '']);
|
|
@@ -18,14 +18,14 @@ describe('Unit: parser/inline/reference', () => {
|
|
|
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
26
|
assert.deepStrictEqual(inspect(parser('[[*a\nb*]]')), undefined);
|
|
28
27
|
assert.deepStrictEqual(inspect(parser('[[\\]]')), undefined);
|
|
28
|
+
assert.deepStrictEqual(inspect(parser('[[a]b]]')), undefined);
|
|
29
29
|
assert.deepStrictEqual(inspect(parser('[[[a]]')), undefined);
|
|
30
30
|
assert.deepStrictEqual(inspect(parser(' [[a]]')), undefined);
|
|
31
31
|
});
|
|
@@ -11,8 +11,8 @@ describe('Unit: parser/inline/template', () => {
|
|
|
11
11
|
assert.deepStrictEqual(inspect(parser('{')), undefined);
|
|
12
12
|
assert.deepStrictEqual(inspect(parser('{}')), undefined);
|
|
13
13
|
assert.deepStrictEqual(inspect(parser('{{')), undefined);
|
|
14
|
-
assert.deepStrictEqual(inspect(parser('{{a}b}}')), undefined);
|
|
15
14
|
assert.deepStrictEqual(inspect(parser('{{\\}}')), undefined);
|
|
15
|
+
assert.deepStrictEqual(inspect(parser('{{a}b}')), undefined);
|
|
16
16
|
assert.deepStrictEqual(inspect(parser('{{{a}}')), undefined);
|
|
17
17
|
assert.deepStrictEqual(inspect(parser(' {{}}')), undefined);
|
|
18
18
|
});
|
|
@@ -22,8 +22,8 @@ function build(
|
|
|
22
22
|
marker: (index: number, abbr: string | undefined) => string,
|
|
23
23
|
) {
|
|
24
24
|
assert(syntax.match(/^[a-z]+$/));
|
|
25
|
-
// Referenceを含むAnnotation
|
|
26
|
-
//
|
|
25
|
+
// Referenceを含むAnnotationの重複排除は両構文が互いに処理済みであることを必要とするため
|
|
26
|
+
// 構文ごとに各1回の処理では不可能
|
|
27
27
|
const identify = memoize<HTMLElement, string>(
|
|
28
28
|
ref => `${+!ref.querySelector('.label')}:${ref.getAttribute('data-abbr') || '_' + ref.innerHTML}`,
|
|
29
29
|
new WeakMap());
|
|
@@ -69,6 +69,7 @@ function build(
|
|
|
69
69
|
|| titles.get(identifier)
|
|
70
70
|
|| +identifier[0] && ref.title
|
|
71
71
|
|| text(content).trim()
|
|
72
|
+
|| content.textContent!.trim()
|
|
72
73
|
|| undefined;
|
|
73
74
|
title
|
|
74
75
|
? !titles.has(identifier) && titles.set(identifier, title)
|
package/src/parser/util.ts
CHANGED
|
@@ -126,11 +126,7 @@ export function isStartTightNodes(nodes: readonly (HTMLElement | string)[]): boo
|
|
|
126
126
|
}
|
|
127
127
|
export function isEndTightNodes(nodes: readonly (HTMLElement | string)[]): boolean {
|
|
128
128
|
if (nodes.length === 0) return true;
|
|
129
|
-
|
|
130
|
-
const node = nodes[i];
|
|
131
|
-
return isVisible(node, -1);
|
|
132
|
-
}
|
|
133
|
-
return false;
|
|
129
|
+
return isVisible(nodes[nodes.length - 1], -1);
|
|
134
130
|
}
|
|
135
131
|
function isVisible(node: HTMLElement | string, strpos?: number): boolean {
|
|
136
132
|
switch (typeof node) {
|