securemark 0.233.3 → 0.234.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +5 -0
- package/dist/securemark.js +17 -10
- package/markdown.d.ts +4 -1
- package/package-lock.json +7 -7
- package/package.json +1 -1
- package/src/parser/api/parse.test.ts +2 -2
- package/src/parser/block/paragraph.test.ts +7 -7
- package/src/parser/block/reply/cite.test.ts +2 -2
- package/src/parser/block/reply/cite.ts +7 -2
- package/src/parser/block/reply.ts +10 -4
- package/src/parser/inline/autolink/anchor.test.ts +4 -3
- package/src/parser/inline/autolink/anchor.ts +16 -2
- package/src/parser/inline/comment.test.ts +37 -38
- package/src/parser/inline/comment.ts +12 -12
- package/src/parser/inline/extension/index.test.ts +4 -4
- package/src/parser/inline/extension/placeholder.test.ts +4 -4
package/CHANGELOG.md
CHANGED
package/dist/securemark.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! securemark v0.
|
|
1
|
+
/*! securemark v0.234.0 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) {
|
|
@@ -5845,7 +5845,13 @@ require = function () {
|
|
|
5845
5845
|
const typed_dom_1 = _dereq_('typed-dom');
|
|
5846
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)([
|
|
5847
5847
|
(0, source_1.str)(/^>*(?=>>[^>\s]+[^\S\n]*(?:$|\n))/),
|
|
5848
|
-
|
|
5848
|
+
(0, combinator_1.union)([
|
|
5849
|
+
anchor_1.anchor,
|
|
5850
|
+
(0, combinator_1.focus)(/^>>\.[^\S\n]*(?:$|\n)/, () => [
|
|
5851
|
+
[(0, typed_dom_1.html)('a', { class: 'anchor' }, '>>.')],
|
|
5852
|
+
''
|
|
5853
|
+
])
|
|
5854
|
+
])
|
|
5849
5855
|
]))), ([el, quotes = '']) => [
|
|
5850
5856
|
(0, typed_dom_1.html)('span', { class: 'cite' }, (0, typed_dom_1.defrag)([
|
|
5851
5857
|
`${ quotes }>`,
|
|
@@ -6341,14 +6347,14 @@ require = function () {
|
|
|
6341
6347
|
const combinator_1 = _dereq_('../../../combinator');
|
|
6342
6348
|
const link_1 = _dereq_('../link');
|
|
6343
6349
|
const typed_dom_1 = _dereq_('typed-dom');
|
|
6344
|
-
exports.anchor = (0, combinator_1.lazy)(() => (0, combinator_1.validate)('>>', (0, combinator_1.fmap)((0, combinator_1.focus)(/^>>[0-
|
|
6350
|
+
exports.anchor = (0, combinator_1.lazy)(() => (0, combinator_1.validate)('>>', (0, combinator_1.fmap)((0, combinator_1.focus)(/^>>(?:[A-Za-z][0-9A-Za-z]*(?:-[0-9A-Za-z]+)*\/)?[0-9A-Za-z]+(?:-[0-9A-Za-z]+)*(?![0-9A-Za-z@#:])/, (0, combinator_1.context)({
|
|
6345
6351
|
syntax: {
|
|
6346
6352
|
inline: {
|
|
6347
6353
|
link: true,
|
|
6348
6354
|
autolink: false
|
|
6349
6355
|
}
|
|
6350
6356
|
}
|
|
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
|
+
}, (0, combinator_1.convert)(source => `[${ source }]{ ${ source.includes('/') ? `/@${ source.slice(2).replace('/', '/timeline/') }` : `?at=${ source.slice(2) }` } }`, (0, combinator_1.union)([link_1.link])))), ([el]) => [(0, typed_dom_1.define)(el, { class: 'anchor' })])));
|
|
6352
6358
|
},
|
|
6353
6359
|
{
|
|
6354
6360
|
'../../../combinator': 27,
|
|
@@ -6600,24 +6606,25 @@ require = function () {
|
|
|
6600
6606
|
'use strict';
|
|
6601
6607
|
Object.defineProperty(exports, '__esModule', { value: true });
|
|
6602
6608
|
exports.comment = void 0;
|
|
6603
|
-
const parser_1 = _dereq_('../../combinator/data/parser');
|
|
6604
6609
|
const combinator_1 = _dereq_('../../combinator');
|
|
6605
6610
|
const inline_1 = _dereq_('../inline');
|
|
6606
6611
|
const source_1 = _dereq_('../source');
|
|
6607
6612
|
const typed_dom_1 = _dereq_('typed-dom');
|
|
6608
6613
|
const memoize_1 = _dereq_('spica/memoize');
|
|
6609
6614
|
const array_1 = _dereq_('spica/array');
|
|
6610
|
-
exports.comment = (0, combinator_1.lazy)(() => (0, combinator_1.creator)((0, combinator_1.validate)('[#', (0, combinator_1.match)(/^(?=\[(#+)\s)/, (0, memoize_1.memoize)(([, fence],
|
|
6611
|
-
[(0, typed_dom_1.html)('span', { class: 'comment' },
|
|
6615
|
+
exports.comment = (0, combinator_1.lazy)(() => (0, combinator_1.creator)((0, combinator_1.validate)('[#', (0, combinator_1.match)(/^(?=\[(#+)\s)/, (0, memoize_1.memoize)(([, fence]) => (0, combinator_1.surround)((0, combinator_1.open)((0, source_1.str)(`[${ fence }`), (0, combinator_1.some)(source_1.text, new RegExp(String.raw`^\s+${ fence }\]|^\S`)), true), (0, combinator_1.union)([(0, combinator_1.some)(inline_1.inline, new RegExp(String.raw`^\s+${ fence }\]`))]), (0, combinator_1.close)((0, combinator_1.some)(source_1.text, /^\S/), (0, source_1.str)(`${ fence }]`)), true, ([as, bs = [], cs], rest) => [
|
|
6616
|
+
[(0, typed_dom_1.html)('span', { class: 'comment' }, [
|
|
6617
|
+
(0, typed_dom_1.html)('input', { type: 'checkbox' }),
|
|
6618
|
+
(0, typed_dom_1.html)('span', (0, typed_dom_1.defrag)((0, array_1.push)((0, array_1.unshift)(as, bs), cs)))
|
|
6619
|
+
])],
|
|
6612
6620
|
rest
|
|
6613
|
-
], ([as, bs = []], rest
|
|
6614
|
-
(0, array_1.unshift)(
|
|
6621
|
+
], ([as, bs = []], rest) => [
|
|
6622
|
+
(0, array_1.unshift)(as, bs),
|
|
6615
6623
|
rest
|
|
6616
6624
|
]), ([, fence]) => fence)))));
|
|
6617
6625
|
},
|
|
6618
6626
|
{
|
|
6619
6627
|
'../../combinator': 27,
|
|
6620
|
-
'../../combinator/data/parser': 47,
|
|
6621
6628
|
'../inline': 88,
|
|
6622
6629
|
'../source': 128,
|
|
6623
6630
|
'spica/array': 6,
|
package/markdown.d.ts
CHANGED
|
@@ -572,7 +572,10 @@ export namespace MarkdownParser {
|
|
|
572
572
|
Block<'reply/cite'>,
|
|
573
573
|
Parser<HTMLSpanElement | HTMLBRElement, Context, [
|
|
574
574
|
SourceParser.StrParser,
|
|
575
|
-
|
|
575
|
+
Parser<HTMLAnchorElement, Context, [
|
|
576
|
+
InlineParser.AutolinkParser.AnchorParser,
|
|
577
|
+
Parser<HTMLAnchorElement, Context, []>,
|
|
578
|
+
]>,
|
|
576
579
|
]> {
|
|
577
580
|
}
|
|
578
581
|
export interface QuoteParser extends
|
package/package-lock.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "securemark",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.234.0",
|
|
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.96",
|
|
3034
|
+
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.96.tgz",
|
|
3035
|
+
"integrity": "sha512-DPNjvNGPabv6FcyjzLAN4C0psN/GgD9rSGvMTuv81SeXG/EX3mCz0wiw9N1tUEnfQXYCJi3H8M0oFPRziZh7rw==",
|
|
3036
3036
|
"dev": true
|
|
3037
3037
|
},
|
|
3038
3038
|
"elliptic": {
|
|
@@ -11500,9 +11500,9 @@
|
|
|
11500
11500
|
},
|
|
11501
11501
|
"dependencies": {
|
|
11502
11502
|
"ansi-regex": {
|
|
11503
|
-
"version": "3.0.
|
|
11504
|
-
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.
|
|
11505
|
-
"integrity": "
|
|
11503
|
+
"version": "3.0.1",
|
|
11504
|
+
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz",
|
|
11505
|
+
"integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==",
|
|
11506
11506
|
"dev": true
|
|
11507
11507
|
},
|
|
11508
11508
|
"is-fullwidth-code-point": {
|
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><span class="comment">[
|
|
56
|
+
['<p><span class="comment"><input type="checkbox"><span>[#<br><wbr><br>#]</span></span></p>']);
|
|
57
57
|
assert.deepStrictEqual(
|
|
58
58
|
[...parse('[#\n<wbr>\n#]\na').children].map(el => el.outerHTML),
|
|
59
|
-
['<p><span class="comment">[
|
|
59
|
+
['<p><span class="comment"><input type="checkbox"><span>[#<br><wbr><br>#]</span></span><br>a</p>']);
|
|
60
60
|
});
|
|
61
61
|
|
|
62
62
|
it('linebreak', () => {
|
|
@@ -47,13 +47,13 @@ describe('Unit: parser/block/paragraph', () => {
|
|
|
47
47
|
});
|
|
48
48
|
|
|
49
49
|
it('comment', () => {
|
|
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">[
|
|
55
|
-
assert.deepStrictEqual(inspect(parser('[#\n<wbr>\n#]a')), [['<p><span class="comment">[
|
|
56
|
-
assert.deepStrictEqual(inspect(parser('[#\n<wbr>\n#]\na')), [['<p><span class="comment">[
|
|
50
|
+
assert.deepStrictEqual(inspect(parser('[# a #]')), [['<p><span class="comment"><input type="checkbox"><span>[# a #]</span></span></p>'], '']);
|
|
51
|
+
assert.deepStrictEqual(inspect(parser('[# a #]b')), [['<p><span class="comment"><input type="checkbox"><span>[# a #]</span></span>b</p>'], '']);
|
|
52
|
+
assert.deepStrictEqual(inspect(parser('[# a #]\nb')), [['<p><span class="comment"><input type="checkbox"><span>[# a #]</span></span><br>b</p>'], '']);
|
|
53
|
+
assert.deepStrictEqual(inspect(parser('[## a ##]')), [['<p><span class="comment"><input type="checkbox"><span>[## a ##]</span></span></p>'], '']);
|
|
54
|
+
assert.deepStrictEqual(inspect(parser('[#\n<wbr>\n#]')), [['<p><span class="comment"><input type="checkbox"><span>[#<br><wbr><br>#]</span></span></p>'], '']);
|
|
55
|
+
assert.deepStrictEqual(inspect(parser('[#\n<wbr>\n#]a')), [['<p><span class="comment"><input type="checkbox"><span>[#<br><wbr><br>#]</span></span>a</p>'], '']);
|
|
56
|
+
assert.deepStrictEqual(inspect(parser('[#\n<wbr>\n#]\na')), [['<p><span class="comment"><input type="checkbox"><span>[#<br><wbr><br>#]</span></span><br>a</p>'], '']);
|
|
57
57
|
});
|
|
58
58
|
|
|
59
59
|
it('template', () => {
|
|
@@ -13,15 +13,14 @@ describe('Unit: parser/block/reply/cite', () => {
|
|
|
13
13
|
assert.deepStrictEqual(inspect(parser('>\n')), undefined);
|
|
14
14
|
assert.deepStrictEqual(inspect(parser('>>')), undefined);
|
|
15
15
|
assert.deepStrictEqual(inspect(parser('>> ')), undefined);
|
|
16
|
-
assert.deepStrictEqual(inspect(parser('>>0A')), undefined);
|
|
17
16
|
assert.deepStrictEqual(inspect(parser('>>0 a')), undefined);
|
|
18
|
-
assert.deepStrictEqual(inspect(parser('>>A')), undefined);
|
|
19
17
|
assert.deepStrictEqual(inspect(parser('>>/')), undefined);
|
|
20
18
|
assert.deepStrictEqual(inspect(parser('>>\\')), undefined);
|
|
21
19
|
assert.deepStrictEqual(inspect(parser('>>01#')), undefined);
|
|
22
20
|
assert.deepStrictEqual(inspect(parser('>>01@')), undefined);
|
|
23
21
|
assert.deepStrictEqual(inspect(parser('>>https://host')), undefined);
|
|
24
22
|
assert.deepStrictEqual(inspect(parser('>>tel:1234567890')), undefined);
|
|
23
|
+
assert.deepStrictEqual(inspect(parser('>>..')), undefined);
|
|
25
24
|
assert.deepStrictEqual(inspect(parser('>> 0')), undefined);
|
|
26
25
|
assert.deepStrictEqual(inspect(parser(' >>0')), undefined);
|
|
27
26
|
assert.deepStrictEqual(inspect(parser('\\>>0')), undefined);
|
|
@@ -39,6 +38,7 @@ describe('Unit: parser/block/reply/cite', () => {
|
|
|
39
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="2">>1</a></span>', '<br>'], '']);
|
|
40
39
|
assert.deepStrictEqual(inspect(parser('>>>0\n>>')), [['<span class="cite">>><a href="?at=0" class="anchor" data-depth="2">>0</a></span>', '<br>'], '>>']);
|
|
41
40
|
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>'], '']);
|
|
41
|
+
assert.deepStrictEqual(inspect(parser('>>.')), [['<span class="cite">><a class="anchor" data-depth="1">>.</a></span>', '<br>'], '']);
|
|
42
42
|
});
|
|
43
43
|
|
|
44
44
|
});
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { ReplyParser } from '../../block';
|
|
2
|
-
import { tails, line, validate, creator, reverse, fmap } from '../../../combinator';
|
|
2
|
+
import { union, tails, line, validate, focus, creator, reverse, fmap } from '../../../combinator';
|
|
3
3
|
import { anchor } from '../../inline/autolink/anchor';
|
|
4
4
|
import { str } from '../../source';
|
|
5
5
|
import { html, define, defrag } from 'typed-dom';
|
|
@@ -8,7 +8,12 @@ export const cite: ReplyParser.CiteParser = creator(line(fmap(validate(
|
|
|
8
8
|
'>>',
|
|
9
9
|
reverse(tails([
|
|
10
10
|
str(/^>*(?=>>[^>\s]+[^\S\n]*(?:$|\n))/),
|
|
11
|
-
|
|
11
|
+
union([
|
|
12
|
+
anchor,
|
|
13
|
+
// Subject page representation.
|
|
14
|
+
// リンクの実装は後で検討
|
|
15
|
+
focus(/^>>\.[^\S\n]*(?:$|\n)/, () => [[html('a', { class: 'anchor' }, '>>.')], '']),
|
|
16
|
+
]),
|
|
12
17
|
]))),
|
|
13
18
|
([el, quotes = '']: [HTMLElement, string?]) => [
|
|
14
19
|
html('span', { class: 'cite' }, defrag([
|
|
@@ -9,6 +9,13 @@ import { visualize } from '../util';
|
|
|
9
9
|
import { html, defrag } from 'typed-dom';
|
|
10
10
|
import { push, pop } from 'spica/array';
|
|
11
11
|
|
|
12
|
+
/*
|
|
13
|
+
必ず対象指定から始まる
|
|
14
|
+
対象がページである場合>>.を表現方法とする
|
|
15
|
+
対象をURLで指定すべき(引用ツリーにルートを追加する)場合はない
|
|
16
|
+
対象と引用は1:N(分割)、N:1(統合)のみ可能、N:N(混合)は不可能
|
|
17
|
+
*/
|
|
18
|
+
|
|
12
19
|
export const reply: ReplyParser = block(validate('>', localize(fmap(
|
|
13
20
|
inits([
|
|
14
21
|
some(inits([
|
|
@@ -17,10 +24,9 @@ export const reply: ReplyParser = block(validate('>', localize(fmap(
|
|
|
17
24
|
])),
|
|
18
25
|
some(subsequence([
|
|
19
26
|
some(quote),
|
|
20
|
-
fmap(
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
trim(visualize(some(inline)))),
|
|
27
|
+
fmap(rewrite(
|
|
28
|
+
some(anyline, delimiter),
|
|
29
|
+
trim(visualize(some(inline)))),
|
|
24
30
|
ns => push(ns, [html('br')])),
|
|
25
31
|
])),
|
|
26
32
|
]),
|
|
@@ -10,8 +10,6 @@ describe('Unit: parser/inline/autolink/anchor', () => {
|
|
|
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('>>0A')), undefined);
|
|
14
|
-
assert.deepStrictEqual(inspect(parser('>>A')), undefined);
|
|
15
13
|
assert.deepStrictEqual(inspect(parser('>>-0')), undefined);
|
|
16
14
|
assert.deepStrictEqual(inspect(parser('>>01#')), undefined);
|
|
17
15
|
assert.deepStrictEqual(inspect(parser('>>01@')), undefined);
|
|
@@ -24,10 +22,13 @@ describe('Unit: parser/inline/autolink/anchor', () => {
|
|
|
24
22
|
it('valid', () => {
|
|
25
23
|
assert.deepStrictEqual(inspect(parser('>>0')), [['<a href="?at=0" class="anchor">>>0</a>'], '']);
|
|
26
24
|
assert.deepStrictEqual(inspect(parser('>>a')), [['<a href="?at=a" class="anchor">>>a</a>'], '']);
|
|
25
|
+
assert.deepStrictEqual(inspect(parser('>>A')), [['<a href="?at=A" class="anchor">>>A</a>'], '']);
|
|
27
26
|
assert.deepStrictEqual(inspect(parser('>>0-')), [['<a href="?at=0" class="anchor">>>0</a>'], '-']);
|
|
28
27
|
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>'], '
|
|
28
|
+
assert.deepStrictEqual(inspect(parser('>>0-A')), [['<a href="?at=0-A" class="anchor">>>0-A</a>'], '']);
|
|
30
29
|
assert.deepStrictEqual(inspect(parser('>>0--a')), [['<a href="?at=0" class="anchor">>>0</a>'], '--a']);
|
|
30
|
+
assert.deepStrictEqual(inspect(parser('>>2000-01-31-23-59-59-999-JST')), [['<a href="?at=2000-01-31-23-59-59-999-JST" class="anchor">>>2000-01-31-23-59-59-999-JST</a>'], '']);
|
|
31
|
+
assert.deepStrictEqual(inspect(parser('>>A/2000-01-31-23-59-59-JST')), [['<a href="/@A/timeline/2000-01-31-23-59-59-JST" class="anchor">>>A/2000-01-31-23-59-59-JST</a>'], '']);
|
|
31
32
|
});
|
|
32
33
|
|
|
33
34
|
});
|
|
@@ -3,13 +3,27 @@ import { union, validate, focus, context, convert, fmap, lazy } from '../../../c
|
|
|
3
3
|
import { link } from '../link';
|
|
4
4
|
import { define } from 'typed-dom';
|
|
5
5
|
|
|
6
|
+
// Timeline(pseudonym): user/tid
|
|
7
|
+
// Thread(anonymous): cid
|
|
8
|
+
|
|
9
|
+
// tid: YYYY-MM-DD-HH-MM-SS-TMZ
|
|
10
|
+
// cid: YYYY-MM-DD-HH-MM-SS-mmm-TMZ
|
|
11
|
+
|
|
12
|
+
// 内部表現はUnixTimeに統一する(時系列順)
|
|
13
|
+
// 外部表現は投稿ごとに投稿者の投稿時のタイムゾーンに統一する(非時系列順)
|
|
14
|
+
|
|
6
15
|
export const anchor: AutolinkParser.AnchorParser = lazy(() => validate('>>', fmap(focus(
|
|
7
|
-
/^>>[0-
|
|
16
|
+
/^>>(?:[A-Za-z][0-9A-Za-z]*(?:-[0-9A-Za-z]+)*\/)?[0-9A-Za-z]+(?:-[0-9A-Za-z]+)*(?![0-9A-Za-z@#:])/,
|
|
8
17
|
context({ syntax: { inline: {
|
|
9
18
|
link: true,
|
|
10
19
|
autolink: false,
|
|
11
20
|
}}},
|
|
12
21
|
convert(
|
|
13
|
-
source =>
|
|
22
|
+
source =>
|
|
23
|
+
`[${source}]{ ${
|
|
24
|
+
source.includes('/')
|
|
25
|
+
? `/@${source.slice(2).replace('/', '/timeline/')}`
|
|
26
|
+
: `?at=${source.slice(2)}`
|
|
27
|
+
} }`,
|
|
14
28
|
union([link])))),
|
|
15
29
|
([el]) => [define(el, { class: 'anchor' })])));
|
|
@@ -13,50 +13,49 @@ describe('Unit: parser/inline/comment', () => {
|
|
|
13
13
|
assert.deepStrictEqual(inspect(parser('[#[#')), undefined);
|
|
14
14
|
assert.deepStrictEqual(inspect(parser('[#a#]')), undefined);
|
|
15
15
|
assert.deepStrictEqual(inspect(parser('[#a b#]')), undefined);
|
|
16
|
-
assert.deepStrictEqual(inspect(parser('[# ')), [['[
|
|
17
|
-
assert.deepStrictEqual(inspect(parser('[# \n a')), [['[
|
|
16
|
+
assert.deepStrictEqual(inspect(parser('[# ')), [['[#'], '']);
|
|
17
|
+
assert.deepStrictEqual(inspect(parser('[# \n a')), [['[#', '<br>', ' ', 'a'], '']);
|
|
18
18
|
assert.deepStrictEqual(inspect(parser('[##]')), undefined);
|
|
19
|
-
assert.deepStrictEqual(inspect(parser('[# #
|
|
20
|
-
assert.deepStrictEqual(inspect(parser('[# #
|
|
21
|
-
assert.deepStrictEqual(inspect(parser('[# [#')), [['[', '
|
|
22
|
-
assert.deepStrictEqual(inspect(parser('[# [# ')), [['[', '
|
|
23
|
-
assert.deepStrictEqual(inspect(parser('[# [#
|
|
24
|
-
assert.deepStrictEqual(inspect(parser('[#
|
|
25
|
-
assert.deepStrictEqual(inspect(parser('[# a[#')), [['[
|
|
26
|
-
assert.deepStrictEqual(inspect(parser('[# a [#')), [['[
|
|
27
|
-
assert.deepStrictEqual(inspect(parser('[# a [
|
|
28
|
-
assert.deepStrictEqual(inspect(parser('[
|
|
29
|
-
assert.deepStrictEqual(inspect(parser('[# a [## b')), [['[', '#', ' ', 'a', ' ', '[', '#', '#', ' ', 'b'], '']);
|
|
30
|
-
assert.deepStrictEqual(inspect(parser('[## a [# b')), [['[', '#', '#', ' ', 'a', ' ', '[', '#', ' ', 'b'], '']);
|
|
19
|
+
assert.deepStrictEqual(inspect(parser('[# [#')), [['[#', ' ', '[', '#'], '']);
|
|
20
|
+
assert.deepStrictEqual(inspect(parser('[# [# ')), [['[#', ' ', '[#'], '']);
|
|
21
|
+
assert.deepStrictEqual(inspect(parser('[# [# a')), [['[#', ' ', '[#', ' ', 'a'], '']);
|
|
22
|
+
assert.deepStrictEqual(inspect(parser('[# [# a #]')), [['[#', ' ', '<span class="comment"><input type="checkbox"><span>[# a #]</span></span>'], '']);
|
|
23
|
+
assert.deepStrictEqual(inspect(parser('[# a[#')), [['[#', ' ', 'a', '[', '#'], '']);
|
|
24
|
+
assert.deepStrictEqual(inspect(parser('[# a [#')), [['[#', ' ', 'a', ' ', '[', '#'], '']);
|
|
25
|
+
assert.deepStrictEqual(inspect(parser('[# a [# ')), [['[#', ' ', 'a', ' ', '[#'], '']);
|
|
26
|
+
assert.deepStrictEqual(inspect(parser('[# a [# b')), [['[#', ' ', 'a', ' ', '[#', ' ', 'b'], '']);
|
|
27
|
+
assert.deepStrictEqual(inspect(parser('[# a [## b')), [['[#', ' ', 'a', ' ', '[##', ' ', 'b'], '']);
|
|
28
|
+
assert.deepStrictEqual(inspect(parser('[## a [# b')), [['[##', ' ', 'a', ' ', '[#', ' ', 'b'], '']);
|
|
31
29
|
assert.deepStrictEqual(inspect(parser('[#\\ a #]')), undefined);
|
|
32
|
-
assert.deepStrictEqual(inspect(parser('[# a\\ #]')), [['[
|
|
33
|
-
assert.deepStrictEqual(inspect(parser('[# a#]')), [['[
|
|
34
|
-
assert.deepStrictEqual(inspect(parser('[# a ##]')), [['[
|
|
35
|
-
assert.deepStrictEqual(inspect(parser('[# [## #]')), [['[
|
|
36
|
-
assert.deepStrictEqual(inspect(parser('[## [# ##]')), [['[', '
|
|
37
|
-
assert.deepStrictEqual(inspect(parser('[## a #]')), [['[', '
|
|
30
|
+
assert.deepStrictEqual(inspect(parser('[# a\\ #]')), [['[#', ' ', 'a', ' ', '#', ']'], '']);
|
|
31
|
+
assert.deepStrictEqual(inspect(parser('[# a#]')), [['[#', ' ', 'a#', ']'], '']);
|
|
32
|
+
assert.deepStrictEqual(inspect(parser('[# a ##]')), [['[#', ' ', 'a', ' ', '##', ']'], '']);
|
|
33
|
+
assert.deepStrictEqual(inspect(parser('[# [## #]')), [['[#', ' ', '[##', ' ', '#', ']'], '']);
|
|
34
|
+
assert.deepStrictEqual(inspect(parser('[## [# ##]')), [['[##', ' ', '[#', ' ', '##', ']'], '']);
|
|
35
|
+
assert.deepStrictEqual(inspect(parser('[## a #]')), [['[##', ' ', 'a', ' ', '#', ']'], '']);
|
|
38
36
|
assert.deepStrictEqual(inspect(parser(' [# a #]')), undefined);
|
|
39
37
|
});
|
|
40
38
|
|
|
41
39
|
it('basic', () => {
|
|
42
|
-
assert.deepStrictEqual(inspect(parser('[#
|
|
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 ##]')), [['<span class="comment">[## a ##]</span>'], '']);
|
|
52
|
-
assert.deepStrictEqual(inspect(parser('[##
|
|
53
|
-
assert.deepStrictEqual(inspect(parser('[##
|
|
54
|
-
assert.deepStrictEqual(inspect(parser('[# a #]
|
|
55
|
-
assert.deepStrictEqual(inspect(parser('[
|
|
56
|
-
assert.deepStrictEqual(inspect(parser('[#
|
|
57
|
-
assert.deepStrictEqual(inspect(parser('[# &
|
|
58
|
-
assert.deepStrictEqual(inspect(parser('[# &
|
|
59
|
-
assert.deepStrictEqual(inspect(parser('[#
|
|
40
|
+
assert.deepStrictEqual(inspect(parser('[# #]')), [['<span class="comment"><input type="checkbox"><span>[# #]</span></span>'], '']);
|
|
41
|
+
assert.deepStrictEqual(inspect(parser('[# #]')), [['<span class="comment"><input type="checkbox"><span>[# #]</span></span>'], '']);
|
|
42
|
+
assert.deepStrictEqual(inspect(parser('[# #]')), [['<span class="comment"><input type="checkbox"><span>[# #]</span></span>'], '']);
|
|
43
|
+
assert.deepStrictEqual(inspect(parser('[# a #]')), [['<span class="comment"><input type="checkbox"><span>[# a #]</span></span>'], '']);
|
|
44
|
+
assert.deepStrictEqual(inspect(parser('[# a b #]')), [['<span class="comment"><input type="checkbox"><span>[# a b #]</span></span>'], '']);
|
|
45
|
+
assert.deepStrictEqual(inspect(parser('[# a\nb #]')), [['<span class="comment"><input type="checkbox"><span>[# a<br>b #]</span></span>'], '']);
|
|
46
|
+
assert.deepStrictEqual(inspect(parser('[# a #] #]')), [['<span class="comment"><input type="checkbox"><span>[# a #]</span></span>'], ' #]']);
|
|
47
|
+
assert.deepStrictEqual(inspect(parser('[# ##] #]')), [['<span class="comment"><input type="checkbox"><span>[# ##] #]</span></span>'], '']);
|
|
48
|
+
assert.deepStrictEqual(inspect(parser('[# [# a #] #]')), [['<span class="comment"><input type="checkbox"><span>[# <span class="comment"><input type="checkbox"><span>[# a #]</span></span> #]</span></span>'], '']);
|
|
49
|
+
assert.deepStrictEqual(inspect(parser('[# [## a ##] #]')), [['<span class="comment"><input type="checkbox"><span>[# <span class="comment"><input type="checkbox"><span>[## a ##]</span></span> #]</span></span>'], '']);
|
|
50
|
+
assert.deepStrictEqual(inspect(parser('[## a ##]')), [['<span class="comment"><input type="checkbox"><span>[## a ##]</span></span>'], '']);
|
|
51
|
+
assert.deepStrictEqual(inspect(parser('[## #] ##]')), [['<span class="comment"><input type="checkbox"><span>[## #] ##]</span></span>'], '']);
|
|
52
|
+
assert.deepStrictEqual(inspect(parser('[## [# a #] ##]')), [['<span class="comment"><input type="checkbox"><span>[## <span class="comment"><input type="checkbox"><span>[# a #]</span></span> ##]</span></span>'], '']);
|
|
53
|
+
assert.deepStrictEqual(inspect(parser('[# a #]b')), [['<span class="comment"><input type="checkbox"><span>[# a #]</span></span>'], 'b']);
|
|
54
|
+
assert.deepStrictEqual(inspect(parser('[#\na\n#]')), [['<span class="comment"><input type="checkbox"><span>[#<br>a<br>#]</span></span>'], '']);
|
|
55
|
+
assert.deepStrictEqual(inspect(parser('[# &a; #]')), [['<span class="comment"><input type="checkbox"><span>[# <span class="invalid">&a;</span> #]</span></span>'], '']);
|
|
56
|
+
assert.deepStrictEqual(inspect(parser('[# © #]')), [['<span class="comment"><input type="checkbox"><span>[# © #]</span></span>'], '']);
|
|
57
|
+
assert.deepStrictEqual(inspect(parser('[# &copy; #]')), [['<span class="comment"><input type="checkbox"><span>[# &copy; #]</span></span>'], '']);
|
|
58
|
+
assert.deepStrictEqual(inspect(parser('[# \\ a #]')), [['<span class="comment"><input type="checkbox"><span>[# a #]</span></span>'], '']);
|
|
60
59
|
});
|
|
61
60
|
|
|
62
61
|
});
|
|
@@ -1,24 +1,24 @@
|
|
|
1
1
|
import { CommentParser } from '../inline';
|
|
2
|
-
import {
|
|
3
|
-
import { union, some, validate, creator, surround, match, lazy } from '../../combinator';
|
|
2
|
+
import { union, some, validate, creator, surround, open, close, match, lazy } from '../../combinator';
|
|
4
3
|
import { inline } from '../inline';
|
|
5
4
|
import { text, str } from '../source';
|
|
6
5
|
import { html, defrag } from 'typed-dom';
|
|
7
6
|
import { memoize } from 'spica/memoize';
|
|
8
|
-
import { unshift, push
|
|
7
|
+
import { unshift, push } from 'spica/array';
|
|
9
8
|
|
|
10
9
|
export const comment: CommentParser = lazy(() => creator(validate('[#', match(
|
|
11
10
|
/^(?=\[(#+)\s)/,
|
|
12
11
|
memoize(
|
|
13
|
-
([, fence]
|
|
12
|
+
([, fence]) =>
|
|
14
13
|
surround(
|
|
15
|
-
str(
|
|
16
|
-
union([some(inline,
|
|
17
|
-
str(
|
|
18
|
-
([, bs = []], rest) => [[
|
|
19
|
-
html('span',
|
|
20
|
-
{
|
|
21
|
-
defrag(push(unshift(
|
|
14
|
+
open(str(`[${fence}`), some(text, new RegExp(String.raw`^\s+${fence}\]|^\S`)), true),
|
|
15
|
+
union([some(inline, new RegExp(String.raw`^\s+${fence}\]`))]),
|
|
16
|
+
close(some(text, /^\S/), str(`${fence}]`)), true,
|
|
17
|
+
([as, bs = [], cs], rest) => [[
|
|
18
|
+
html('span', { class: 'comment' }, [
|
|
19
|
+
html('input', { type: 'checkbox' }),
|
|
20
|
+
html('span', defrag(push(unshift(as, bs), cs))),
|
|
21
|
+
]),
|
|
22
22
|
], rest],
|
|
23
|
-
([as, bs = []], rest
|
|
23
|
+
([as, bs = []], rest) => [unshift(as, bs), rest]),
|
|
24
24
|
([, fence]) => fence)))));
|
|
@@ -38,7 +38,7 @@ describe('Unit: parser/inline/extension/index', () => {
|
|
|
38
38
|
assert.deepStrictEqual(inspect(parser('[#a b]')), [['<a class="index" href="#index:a_b">a b</a>'], '']);
|
|
39
39
|
assert.deepStrictEqual(inspect(parser('[#a ]')), [['<a class="index" href="#index:a">a</a>'], '']);
|
|
40
40
|
assert.deepStrictEqual(inspect(parser('[#a <wbr>]')), [['<a class="index" href="#index:a">a</a>'], '']);
|
|
41
|
-
assert.deepStrictEqual(inspect(parser('[#a [# b #]]')), [['<a class="index" href="#index:a">a <span class="comment">[# b #]</span></a>'], '']);
|
|
41
|
+
assert.deepStrictEqual(inspect(parser('[#a [# b #]]')), [['<a class="index" href="#index:a">a <span class="comment"><input type="checkbox"><span>[# b #]</span></span></a>'], '']);
|
|
42
42
|
assert.deepStrictEqual(inspect(parser('[#a\\ ]')), [['<a class="index" href="#index:a">a</a>'], '']);
|
|
43
43
|
assert.deepStrictEqual(inspect(parser('[#a\\ b]')), [['<a class="index" href="#index:a_b">a b</a>'], '']);
|
|
44
44
|
assert.deepStrictEqual(inspect(parser('[#[]]')), [['<a class="index" href="#index:[]">[]</a>'], '']);
|
|
@@ -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"><span class="comment">[# #]</span></a>'], '']);
|
|
58
|
-
assert.deepStrictEqual(inspect(parser('[#[# a #]]')), [['<a class="index"><span class="comment">[# a #]</span></a>'], '']);
|
|
57
|
+
assert.deepStrictEqual(inspect(parser('[#[# #]]')), [['<a class="index"><span class="comment"><input type="checkbox"><span>[# #]</span></span></a>'], '']);
|
|
58
|
+
assert.deepStrictEqual(inspect(parser('[#[# a #]]')), [['<a class="index"><span class="comment"><input type="checkbox"><span>[# a #]</span></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
|
});
|
|
@@ -83,7 +83,7 @@ describe('Unit: parser/inline/extension/index', () => {
|
|
|
83
83
|
assert.deepStrictEqual(inspect(parser('[#a |#b]')), [['<a class="index" href="#index:b">a<span class="indexer" data-index="b"></span></a>'], '']);
|
|
84
84
|
assert.deepStrictEqual(inspect(parser('[#a |#b]')), [['<a class="index" href="#index:b">a<span class="indexer" data-index="b"></span></a>'], '']);
|
|
85
85
|
assert.deepStrictEqual(inspect(parser('[#a <wbr>|#b]')), [['<a class="index" href="#index:b">a<span class="indexer" data-index="b"></span></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
|
+
assert.deepStrictEqual(inspect(parser('[#a [# b #]|#b]')), [['<a class="index" href="#index:b">a <span class="comment"><input type="checkbox"><span>[# b #]</span></span><span class="indexer" data-index="b"></span></a>'], '']);
|
|
87
87
|
});
|
|
88
88
|
|
|
89
89
|
});
|
|
@@ -45,13 +45,13 @@ describe('Unit: parser/inline/extension/placeholder', () => {
|
|
|
45
45
|
assert.deepStrictEqual(inspect(parser('[^a\\ \\ ]')), [['<span class="invalid">a </span>'], '']);
|
|
46
46
|
assert.deepStrictEqual(inspect(parser('[^a<wbr>]')), [['<span class="invalid">a<wbr></span>'], '']);
|
|
47
47
|
assert.deepStrictEqual(inspect(parser('[^a<wbr><wbr>]')), [['<span class="invalid">a<wbr><wbr></span>'], '']);
|
|
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>'], '']);
|
|
48
|
+
assert.deepStrictEqual(inspect(parser('[^a[# b #]]')), [['<span class="invalid">a<span class="comment"><input type="checkbox"><span>[# b #]</span></span></span>'], '']);
|
|
49
|
+
assert.deepStrictEqual(inspect(parser('[^a[# b #][# c #]]')), [['<span class="invalid">a<span class="comment"><input type="checkbox"><span>[# b #]</span></span><span class="comment"><input type="checkbox"><span>[# c #]</span></span></span>'], '']);
|
|
50
50
|
assert.deepStrictEqual(inspect(parser('[^\\]]')), [['<span class="invalid">]</span>'], '']);
|
|
51
51
|
assert.deepStrictEqual(inspect(parser('[^(])]')), [['<span class="invalid"><span class="paren">(])</span></span>'], '']);
|
|
52
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>'], '']);
|
|
53
|
+
assert.deepStrictEqual(inspect(parser('[^[# a #]]')), [['<span class="invalid"><span class="comment"><input type="checkbox"><span>[# a #]</span></span></span>'], '']);
|
|
54
|
+
assert.deepStrictEqual(inspect(parser('[^[# a #]b]')), [['<span class="invalid"><span class="comment"><input type="checkbox"><span>[# a #]</span></span>b</span>'], '']);
|
|
55
55
|
});
|
|
56
56
|
|
|
57
57
|
});
|