securemark 0.252.0 → 0.253.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.eslintrc.json +7 -1
- package/CHANGELOG.md +12 -0
- package/design.md +17 -11
- package/dist/index.js +121 -116
- package/index.d.ts +7 -8
- package/markdown.d.ts +6 -5
- package/package.json +9 -9
- package/src/combinator/data/parser.ts +1 -1
- package/src/parser/api/bind.test.ts +8 -8
- package/src/parser/api/bind.ts +1 -1
- package/src/parser/api/parse.test.ts +2 -1
- package/src/parser/api/parse.ts +0 -1
- package/src/parser/block/blockquote.test.ts +31 -31
- package/src/parser/block/blockquote.ts +1 -3
- package/src/parser/block/extension/aside.test.ts +3 -3
- package/src/parser/block/extension/aside.ts +0 -3
- package/src/parser/block/extension/example.test.ts +11 -11
- package/src/parser/block/extension/example.ts +1 -3
- package/src/parser/block/extension/fig.test.ts +5 -5
- package/src/parser/block/extension/figure.test.ts +2 -2
- package/src/parser/block/extension/message.test.ts +7 -7
- package/src/parser/block/extension/message.ts +2 -2
- package/src/parser/block/extension/table.ts +6 -2
- package/src/parser/block/ilist.ts +4 -5
- package/src/parser/block/olist.ts +24 -20
- package/src/parser/block/ulist.ts +3 -13
- package/src/parser/inline/annotation.test.ts +18 -18
- package/src/parser/inline/annotation.ts +1 -1
- package/src/parser/inline/autolink/hashnum.ts +1 -1
- package/src/parser/inline/autolink/hashtag.ts +5 -5
- package/src/parser/inline/autolink.ts +2 -2
- package/src/parser/inline/html.test.ts +9 -6
- package/src/parser/inline/html.ts +11 -13
- package/src/parser/inline/reference.test.ts +58 -58
- package/src/parser/inline/reference.ts +1 -1
- package/src/parser/inline.test.ts +20 -20
- package/src/parser/locale.test.ts +1 -1
- package/src/parser/processor/figure.test.ts +3 -3
- package/src/parser/processor/figure.ts +3 -6
- package/src/parser/processor/footnote.test.ts +60 -2
- package/src/parser/processor/footnote.ts +56 -26
- package/src/parser/util.ts +4 -4
- package/src/renderer/render/code.ts +2 -2
- package/src/renderer/render/math.ts +2 -2
- package/src/renderer/render/media/image.ts +2 -2
- package/src/renderer/render/media.ts +2 -2
- package/src/util/info.ts +4 -4
- package/src/util/toc.ts +12 -16
package/markdown.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Parser, Ctx } from './src/combinator/data/parser';
|
|
2
|
-
import {
|
|
2
|
+
import { Dict } from 'spica/dict';
|
|
3
3
|
|
|
4
4
|
declare abstract class Markdown<T> {
|
|
5
5
|
private parser?: T;
|
|
@@ -29,9 +29,9 @@ export namespace MarkdownParser {
|
|
|
29
29
|
};
|
|
30
30
|
};
|
|
31
31
|
readonly caches?: {
|
|
32
|
-
readonly code?:
|
|
33
|
-
readonly math?:
|
|
34
|
-
readonly media?:
|
|
32
|
+
readonly code?: Dict<string, HTMLElement>;
|
|
33
|
+
readonly math?: Dict<string, HTMLElement>;
|
|
34
|
+
readonly media?: Dict<string, HTMLElement>;
|
|
35
35
|
};
|
|
36
36
|
}
|
|
37
37
|
export interface SegmentParser extends
|
|
@@ -964,11 +964,12 @@ export namespace MarkdownParser {
|
|
|
964
964
|
}
|
|
965
965
|
}
|
|
966
966
|
export interface HTMLParser extends
|
|
967
|
-
// Allow: sup, sub, small, bdo, bdi
|
|
967
|
+
// Allow: wbr, sup, sub, small, bdo, bdi
|
|
968
968
|
// <small>abc</small>
|
|
969
969
|
Inline<'html'>,
|
|
970
970
|
Parser<HTMLElement | string, Context, [
|
|
971
971
|
HTMLParser.OpenTagParser,
|
|
972
|
+
SourceParser.StrParser,
|
|
972
973
|
HTMLParser.TagParser,
|
|
973
974
|
HTMLParser.TagParser,
|
|
974
975
|
]> {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "securemark",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.253.2",
|
|
4
4
|
"description": "Secure markdown renderer working on browsers for user input data.",
|
|
5
5
|
"private": false,
|
|
6
6
|
"homepage": "https://github.com/falsandtru/securemark",
|
|
@@ -34,29 +34,29 @@
|
|
|
34
34
|
"@types/mocha": "9.1.1",
|
|
35
35
|
"@types/power-assert": "1.5.8",
|
|
36
36
|
"@types/prismjs": "1.26.0",
|
|
37
|
-
"@typescript-eslint/parser": "^5.
|
|
37
|
+
"@typescript-eslint/parser": "^5.28.0",
|
|
38
38
|
"babel-loader": "^8.2.5",
|
|
39
39
|
"babel-plugin-unassert": "^3.2.0",
|
|
40
|
-
"concurrently": "^7.2.
|
|
40
|
+
"concurrently": "^7.2.2",
|
|
41
41
|
"eslint": "^8.17.0",
|
|
42
|
-
"eslint-plugin-redos": "^4.4.
|
|
42
|
+
"eslint-plugin-redos": "^4.4.1",
|
|
43
43
|
"eslint-webpack-plugin": "^3.1.1",
|
|
44
44
|
"glob": "^8.0.3",
|
|
45
|
-
"karma": "^6.
|
|
45
|
+
"karma": "^6.4.0",
|
|
46
46
|
"karma-chrome-launcher": "^3.1.1",
|
|
47
47
|
"karma-coverage": "^2.2.0",
|
|
48
48
|
"karma-firefox-launcher": "^2.1.2",
|
|
49
49
|
"karma-mocha": "^2.0.1",
|
|
50
50
|
"karma-power-assert": "^1.0.0",
|
|
51
51
|
"mocha": "^10.0.0",
|
|
52
|
-
"npm-check-updates": "^
|
|
52
|
+
"npm-check-updates": "^14.0.1",
|
|
53
53
|
"semver": "^7.3.7",
|
|
54
|
-
"spica": "0.0.
|
|
54
|
+
"spica": "0.0.570",
|
|
55
55
|
"ts-loader": "^9.3.0",
|
|
56
|
-
"typed-dom": "^0.0.
|
|
56
|
+
"typed-dom": "^0.0.299",
|
|
57
57
|
"typescript": "4.7.3",
|
|
58
58
|
"webpack": "^5.73.0",
|
|
59
|
-
"webpack-cli": "^4.
|
|
59
|
+
"webpack-cli": "^4.10.0",
|
|
60
60
|
"webpack-merge": "^5.8.0"
|
|
61
61
|
},
|
|
62
62
|
"scripts": {
|
|
@@ -14,7 +14,7 @@ export interface Ctx {
|
|
|
14
14
|
delimiters?: Delimiters;
|
|
15
15
|
}
|
|
16
16
|
export type Tree<P extends Parser<unknown>> = P extends Parser<infer T> ? T : never;
|
|
17
|
-
export type SubParsers<P extends Parser<unknown>> = P extends Parser<unknown,
|
|
17
|
+
export type SubParsers<P extends Parser<unknown>> = P extends Parser<unknown, Ctx, infer D> ? D : never;
|
|
18
18
|
export type Context<P extends Parser<unknown>> = P extends Parser<unknown, infer C> ? C : never;
|
|
19
19
|
export type SubTree<P extends Parser<unknown>> = ExtractSubTree<SubParsers<P>>;
|
|
20
20
|
export type IntermediateParser<P extends Parser<unknown>> = Parser<SubTree<P>, Context<P>, SubParsers<P>>;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { Progress } from '../../..';
|
|
2
2
|
import { bind } from './bind';
|
|
3
3
|
import { frag, html } from 'typed-dom/dom';
|
|
4
4
|
|
|
@@ -27,7 +27,7 @@ describe('Unit: parser/api/bind', () => {
|
|
|
27
27
|
return acc;
|
|
28
28
|
}
|
|
29
29
|
|
|
30
|
-
const cfgs
|
|
30
|
+
const cfgs = { footnotes: { annotations: html('ol'), references: html('ol') } };
|
|
31
31
|
|
|
32
32
|
it('huge input', () => {
|
|
33
33
|
const iter = bind(html('div'), { ...cfgs, id: '' }).parse(`${'\n'.repeat(10 * 1000 ** 2)}`);
|
|
@@ -175,17 +175,17 @@ describe('Unit: parser/api/bind', () => {
|
|
|
175
175
|
assert.deepStrictEqual(
|
|
176
176
|
[...el.children].map(el => el.outerHTML),
|
|
177
177
|
[
|
|
178
|
-
html('p', [html('sup', { class: "annotation" }, '1'),]).outerHTML,
|
|
179
|
-
html('p', [html('sup', { class: "annotation" }, '2'),]).outerHTML,
|
|
178
|
+
html('p', [html('sup', { class: "annotation" }, [html('span', '1')]),]).outerHTML,
|
|
179
|
+
html('p', [html('sup', { class: "annotation" }, [html('span', '2')]),]).outerHTML,
|
|
180
180
|
]);
|
|
181
181
|
inspect(iter, 1);
|
|
182
182
|
el.appendChild(chunk);
|
|
183
183
|
assert.deepStrictEqual(
|
|
184
184
|
[...el.children].map(el => el.outerHTML),
|
|
185
185
|
[
|
|
186
|
-
html('p', [html('sup', { class: "annotation" }, '1'),]).outerHTML,
|
|
187
|
-
html('p', [html('sup', { class: "annotation" }, '2'),]).outerHTML,
|
|
188
|
-
html('p', [html('sup', { class: "annotation" }, '3'),]).outerHTML,
|
|
186
|
+
html('p', [html('sup', { class: "annotation" }, [html('span', '1')]),]).outerHTML,
|
|
187
|
+
html('p', [html('sup', { class: "annotation" }, [html('span', '2')]),]).outerHTML,
|
|
188
|
+
html('p', [html('sup', { class: "annotation" }, [html('span', '3')]),]).outerHTML,
|
|
189
189
|
]);
|
|
190
190
|
inspect(iter);
|
|
191
191
|
assert.deepStrictEqual(
|
|
@@ -211,7 +211,7 @@ describe('Unit: parser/api/bind', () => {
|
|
|
211
211
|
]).outerHTML,
|
|
212
212
|
]);
|
|
213
213
|
assert.deepStrictEqual(
|
|
214
|
-
cfgs.footnotes.annotations
|
|
214
|
+
cfgs.footnotes.annotations?.outerHTML,
|
|
215
215
|
html('ol', [
|
|
216
216
|
html('li', { id: 'annotation:def:1' }, [
|
|
217
217
|
'1',
|
package/src/parser/api/bind.ts
CHANGED
|
@@ -122,7 +122,7 @@ export function bind(target: DocumentFragment | HTMLElement | ShadowRoot, settin
|
|
|
122
122
|
: yield { type: 'break' };
|
|
123
123
|
if (rev !== revision) return yield { type: 'cancel' };
|
|
124
124
|
}
|
|
125
|
-
for (const el of footnote(next(0)?.parentNode ?? target, settings.footnotes, context)) {
|
|
125
|
+
for (const el of footnote(next(0)?.parentNode ?? target, settings.footnotes, context, bottom)) {
|
|
126
126
|
assert(rev === revision);
|
|
127
127
|
el
|
|
128
128
|
? yield { type: 'footnote', value: el }
|
|
@@ -137,6 +137,7 @@ describe('Unit: parser/api/parse', () => {
|
|
|
137
137
|
'<p><a href="https://source/x/a" target="_blank"><img class="media" data-src="https://source/x/a" alt=""></a></p>',
|
|
138
138
|
'<p><a href="/z/a" target="_blank"><img class="media" data-src="/z/a" alt=""></a></p>',
|
|
139
139
|
'<p><a href="https://source/a" target="_blank"><img class="media" data-src="https://source/a" alt=""></a></p>',
|
|
140
|
+
'<ol class="annotations"><li id="annotation:def:1" data-marker="*1">a<sup><a href="#annotation:ref:1">^1</a></sup></li></ol>',
|
|
140
141
|
]);
|
|
141
142
|
assert.deepStrictEqual(
|
|
142
143
|
[...parse([
|
|
@@ -197,7 +198,7 @@ describe('Unit: parser/api/parse', () => {
|
|
|
197
198
|
[
|
|
198
199
|
`<aside class="header"><details open=""><summary>Header</summary><span class="field" data-name="url" data-value="https://example/x"><span class="field-name">URL</span>: <span class="field-value">https://example/x</span>\n</span></details></aside>`,
|
|
199
200
|
'<pre class="invalid" translate="no" data-invalid-syntax="header" data-invalid-type="syntax" data-invalid-message="Invalid syntax">---\nURL: https://example/y\n---\n</pre>',
|
|
200
|
-
'<aside class="example" data-type="markdown"><pre translate="no">---\nURL: https://example/y\n---\n\n{#}</pre><hr><section><aside class="header"><details open=""><summary>Header</summary><span class="field" data-name="url" data-value="https://example/y"><span class="field-name">URL</span>: <span class="field-value">https://example/y</span>\n</span></details></aside><p><a href="https://example/y#" target="_blank">#</a></p><ol class="
|
|
201
|
+
'<aside class="example" data-type="markdown"><pre translate="no">---\nURL: https://example/y\n---\n\n{#}</pre><hr><section><aside class="header"><details open=""><summary>Header</summary><span class="field" data-name="url" data-value="https://example/y"><span class="field-name">URL</span>: <span class="field-value">https://example/y</span>\n</span></details></aside><p><a href="https://example/y#" target="_blank">#</a></p><ol class="references"></ol></section></aside>',
|
|
201
202
|
'<p><a href="https://example/x#" target="_blank">#</a></p>',
|
|
202
203
|
]);
|
|
203
204
|
});
|
package/src/parser/api/parse.ts
CHANGED
|
@@ -40,7 +40,6 @@ export function parse(source: string, opts: Options = {}, context?: MarkdownPars
|
|
|
40
40
|
for (const _ of figure(node, opts.footnotes, context));
|
|
41
41
|
for (const _ of footnote(node, opts.footnotes, context));
|
|
42
42
|
assert(opts.id !== '' || !node.querySelector('[id], .index[href], .label[href], .annotation > a[href], .reference > a[href]'));
|
|
43
|
-
assert(opts.id !== '' || !opts.footnotes?.annotations.querySelector('[id], .index[href], .label[href]'));
|
|
44
43
|
assert(opts.id !== '' || !opts.footnotes?.references.querySelector('[id], .index[href], .label[href]'));
|
|
45
44
|
return node;
|
|
46
45
|
}
|
|
@@ -65,38 +65,38 @@ describe('Unit: parser/block/blockquote', () => {
|
|
|
65
65
|
assert.deepStrictEqual(inspect(parser('!')), undefined);
|
|
66
66
|
assert.deepStrictEqual(inspect(parser('!>')), undefined);
|
|
67
67
|
assert.deepStrictEqual(inspect(parser('!> ')), [['<blockquote></blockquote>'], '']);
|
|
68
|
-
assert.deepStrictEqual(inspect(parser('!> \\')), [['<blockquote><section><p>\\</p><ol class="
|
|
69
|
-
assert.deepStrictEqual(inspect(parser('!> \\\n')), [['<blockquote><section><p>\\</p><ol class="
|
|
70
|
-
assert.deepStrictEqual(inspect(parser('!> a')), [['<blockquote><section><p>a</p><ol class="
|
|
71
|
-
assert.deepStrictEqual(inspect(parser('!> a\n')), [['<blockquote><section><p>a</p><ol class="
|
|
72
|
-
assert.deepStrictEqual(inspect(parser('!> a\\\nb')), [['<blockquote><section><p>a<span class="linebreak"> </span>b</p><ol class="
|
|
73
|
-
assert.deepStrictEqual(inspect(parser('!> *a\nb*')), [['<blockquote><section><p><em>a<br>b</em></p><ol class="
|
|
74
|
-
assert.deepStrictEqual(inspect(parser('!> *a\n> b*')), [['<blockquote><section><p><em>a<br>b</em></p><ol class="
|
|
75
|
-
assert.deepStrictEqual(inspect(parser('!> a \n b c ')), [['<blockquote><section><p> a<br> b c</p><ol class="
|
|
76
|
-
assert.deepStrictEqual(inspect(parser('!>> a')), [['<blockquote><blockquote><section><p>a</p><ol class="
|
|
77
|
-
assert.deepStrictEqual(inspect(parser('!>> a\n> b')), [['<blockquote><blockquote><section><p>a</p><ol class="
|
|
78
|
-
assert.deepStrictEqual(inspect(parser('!> - a')), [['<blockquote><section><ul><li>a</li></ul><ol class="
|
|
79
|
-
assert.deepStrictEqual(inspect(parser('!> ```\na\n```')), [['<blockquote><section><pre class="text">a</pre><ol class="
|
|
80
|
-
assert.deepStrictEqual(inspect(parser('!> ```\n> a\n```')), [['<blockquote><section><pre class="text">a</pre><ol class="
|
|
81
|
-
assert.deepStrictEqual(inspect(parser('!> ```\n> a\n> ```')), [['<blockquote><section><pre class="text">a</pre><ol class="
|
|
82
|
-
assert.deepStrictEqual(inspect(parser('!> ```\n> a\n> \n> b\n> ```')), [['<blockquote><section><pre class="text">a<br><br>b</pre><ol class="
|
|
83
|
-
assert.deepStrictEqual(inspect(parser('!> a\n>\n> b')), [['<blockquote><section><p>a</p><p>b</p><ol class="
|
|
84
|
-
assert.deepStrictEqual(inspect(parser('!> > a')), [['<blockquote><section><blockquote><pre>a</pre></blockquote><ol class="
|
|
85
|
-
assert.deepStrictEqual(inspect(parser('!> > a\n> b')), [['<blockquote><section><blockquote><pre>a<br>b</pre></blockquote><ol class="
|
|
86
|
-
assert.deepStrictEqual(inspect(parser('!> > a\n> > b')), [['<blockquote><section><blockquote><pre>a<br>b</pre></blockquote><ol class="
|
|
87
|
-
assert.deepStrictEqual(inspect(parser('!> > a\n>> b')), [['<blockquote><section><blockquote><pre>a</pre></blockquote><ol class="
|
|
88
|
-
assert.deepStrictEqual(inspect(parser('!>> > a\n> b')), [['<blockquote><blockquote><section><blockquote><pre>a</pre></blockquote><ol class="
|
|
89
|
-
assert.deepStrictEqual(inspect(parser('!> !> a')), [['<blockquote><section><blockquote><section><p>a</p><ol class="
|
|
90
|
-
assert.deepStrictEqual(inspect(parser('!> \na')), [['<blockquote><section><p>a</p><ol class="
|
|
68
|
+
assert.deepStrictEqual(inspect(parser('!> \\')), [['<blockquote><section><p>\\</p><ol class="references"></ol></section></blockquote>'], '']);
|
|
69
|
+
assert.deepStrictEqual(inspect(parser('!> \\\n')), [['<blockquote><section><p>\\</p><ol class="references"></ol></section></blockquote>'], '']);
|
|
70
|
+
assert.deepStrictEqual(inspect(parser('!> a')), [['<blockquote><section><p>a</p><ol class="references"></ol></section></blockquote>'], '']);
|
|
71
|
+
assert.deepStrictEqual(inspect(parser('!> a\n')), [['<blockquote><section><p>a</p><ol class="references"></ol></section></blockquote>'], '']);
|
|
72
|
+
assert.deepStrictEqual(inspect(parser('!> a\\\nb')), [['<blockquote><section><p>a<span class="linebreak"> </span>b</p><ol class="references"></ol></section></blockquote>'], '']);
|
|
73
|
+
assert.deepStrictEqual(inspect(parser('!> *a\nb*')), [['<blockquote><section><p><em>a<br>b</em></p><ol class="references"></ol></section></blockquote>'], '']);
|
|
74
|
+
assert.deepStrictEqual(inspect(parser('!> *a\n> b*')), [['<blockquote><section><p><em>a<br>b</em></p><ol class="references"></ol></section></blockquote>'], '']);
|
|
75
|
+
assert.deepStrictEqual(inspect(parser('!> a \n b c ')), [['<blockquote><section><p> a<br> b c</p><ol class="references"></ol></section></blockquote>'], '']);
|
|
76
|
+
assert.deepStrictEqual(inspect(parser('!>> a')), [['<blockquote><blockquote><section><p>a</p><ol class="references"></ol></section></blockquote></blockquote>'], '']);
|
|
77
|
+
assert.deepStrictEqual(inspect(parser('!>> a\n> b')), [['<blockquote><blockquote><section><p>a</p><ol class="references"></ol></section></blockquote><section><p>b</p><ol class="references"></ol></section></blockquote>'], '']);
|
|
78
|
+
assert.deepStrictEqual(inspect(parser('!> - a')), [['<blockquote><section><ul><li>a</li></ul><ol class="references"></ol></section></blockquote>'], '']);
|
|
79
|
+
assert.deepStrictEqual(inspect(parser('!> ```\na\n```')), [['<blockquote><section><pre class="text">a</pre><ol class="references"></ol></section></blockquote>'], '']);
|
|
80
|
+
assert.deepStrictEqual(inspect(parser('!> ```\n> a\n```')), [['<blockquote><section><pre class="text">a</pre><ol class="references"></ol></section></blockquote>'], '']);
|
|
81
|
+
assert.deepStrictEqual(inspect(parser('!> ```\n> a\n> ```')), [['<blockquote><section><pre class="text">a</pre><ol class="references"></ol></section></blockquote>'], '']);
|
|
82
|
+
assert.deepStrictEqual(inspect(parser('!> ```\n> a\n> \n> b\n> ```')), [['<blockquote><section><pre class="text">a<br><br>b</pre><ol class="references"></ol></section></blockquote>'], '']);
|
|
83
|
+
assert.deepStrictEqual(inspect(parser('!> a\n>\n> b')), [['<blockquote><section><p>a</p><p>b</p><ol class="references"></ol></section></blockquote>'], '']);
|
|
84
|
+
assert.deepStrictEqual(inspect(parser('!> > a')), [['<blockquote><section><blockquote><pre>a</pre></blockquote><ol class="references"></ol></section></blockquote>'], '']);
|
|
85
|
+
assert.deepStrictEqual(inspect(parser('!> > a\n> b')), [['<blockquote><section><blockquote><pre>a<br>b</pre></blockquote><ol class="references"></ol></section></blockquote>'], '']);
|
|
86
|
+
assert.deepStrictEqual(inspect(parser('!> > a\n> > b')), [['<blockquote><section><blockquote><pre>a<br>b</pre></blockquote><ol class="references"></ol></section></blockquote>'], '']);
|
|
87
|
+
assert.deepStrictEqual(inspect(parser('!> > a\n>> b')), [['<blockquote><section><blockquote><pre>a</pre></blockquote><ol class="references"></ol></section><blockquote><section><p>b</p><ol class="references"></ol></section></blockquote></blockquote>'], '']);
|
|
88
|
+
assert.deepStrictEqual(inspect(parser('!>> > a\n> b')), [['<blockquote><blockquote><section><blockquote><pre>a</pre></blockquote><ol class="references"></ol></section></blockquote><section><p>b</p><ol class="references"></ol></section></blockquote>'], '']);
|
|
89
|
+
assert.deepStrictEqual(inspect(parser('!> !> a')), [['<blockquote><section><blockquote><section><p>a</p><ol class="references"></ol></section></blockquote><ol class="references"></ol></section></blockquote>'], '']);
|
|
90
|
+
assert.deepStrictEqual(inspect(parser('!> \na')), [['<blockquote><section><p>a</p><ol class="references"></ol></section></blockquote>'], '']);
|
|
91
91
|
assert.deepStrictEqual(inspect(parser('!>\n')), undefined);
|
|
92
|
-
assert.deepStrictEqual(inspect(parser('!>\na')), [['<blockquote><section><p>a</p><ol class="
|
|
93
|
-
assert.deepStrictEqual(inspect(parser('!>\n a')), [['<blockquote><section><p> a</p><ol class="
|
|
94
|
-
assert.deepStrictEqual(inspect(parser('!>\n>')), [['<blockquote><section><ol class="
|
|
95
|
-
assert.deepStrictEqual(inspect(parser('!>\n> a')), [['<blockquote><section><p>a</p><ol class="
|
|
96
|
-
assert.deepStrictEqual(inspect(parser('!>> ## a\n> ## a')), [['<blockquote><blockquote><section><h2>a</h2><ol class="
|
|
97
|
-
assert.deepStrictEqual(inspect(parser('!>> ~ a\n> ~ a')), [['<blockquote><blockquote><section><dl><dt>a</dt><dd></dd></dl><ol class="
|
|
98
|
-
assert.deepStrictEqual(inspect(parser('!>> ~~~figure $test-a\n>> > \n>>\n~~~\n> ~~~figure $test-a\n> > \n>\n[#a]\n~~~')), [['<blockquote><blockquote><section><figure data-type="quote" data-label="test-a" data-group="test" data-number="1"><figcaption><span class="figindex">Test 1. </span></figcaption><div><blockquote></blockquote></div></figure><ol class="
|
|
99
|
-
assert.deepStrictEqual(inspect(parser('!>> ((a))\n> ((a))')), [['<blockquote><blockquote><section><p><sup class="annotation disabled" title="a"><span hidden="">a</span><a>*1</a></sup></p><ol class="annotations"><li>a<sup><a>^1</a></sup></li></ol><ol class="references"></ol></section></blockquote><section><p><sup class="annotation disabled" title="a"><span hidden="">a</span><a>*1</a></sup></p><ol class="annotations"><li>a<sup><a>^1</a></sup></li></ol><ol class="references"></ol></section></blockquote>'], '']);
|
|
92
|
+
assert.deepStrictEqual(inspect(parser('!>\na')), [['<blockquote><section><p>a</p><ol class="references"></ol></section></blockquote>'], '']);
|
|
93
|
+
assert.deepStrictEqual(inspect(parser('!>\n a')), [['<blockquote><section><p> a</p><ol class="references"></ol></section></blockquote>'], '']);
|
|
94
|
+
assert.deepStrictEqual(inspect(parser('!>\n>')), [['<blockquote><section><ol class="references"></ol></section></blockquote>'], '']);
|
|
95
|
+
assert.deepStrictEqual(inspect(parser('!>\n> a')), [['<blockquote><section><p>a</p><ol class="references"></ol></section></blockquote>'], '']);
|
|
96
|
+
assert.deepStrictEqual(inspect(parser('!>> ## a\n> ## a')), [['<blockquote><blockquote><section><h2>a</h2><ol class="references"></ol></section></blockquote><section><h2>a</h2><ol class="references"></ol></section></blockquote>'], '']);
|
|
97
|
+
assert.deepStrictEqual(inspect(parser('!>> ~ a\n> ~ a')), [['<blockquote><blockquote><section><dl><dt>a</dt><dd></dd></dl><ol class="references"></ol></section></blockquote><section><dl><dt>a</dt><dd></dd></dl><ol class="references"></ol></section></blockquote>'], '']);
|
|
98
|
+
assert.deepStrictEqual(inspect(parser('!>> ~~~figure $test-a\n>> > \n>>\n~~~\n> ~~~figure $test-a\n> > \n>\n[#a]\n~~~')), [['<blockquote><blockquote><section><figure data-type="quote" data-label="test-a" data-group="test" data-number="1"><figcaption><span class="figindex">Test 1. </span></figcaption><div><blockquote></blockquote></div></figure><ol class="references"></ol></section></blockquote><section><figure data-type="quote" data-label="test-a" data-group="test" data-number="1"><figcaption><span class="figindex">Test 1. </span><a class="index">a</a></figcaption><div><blockquote></blockquote></div></figure><ol class="references"></ol></section></blockquote>'], '']);
|
|
99
|
+
assert.deepStrictEqual(inspect(parser('!>> ((a))\n> ((a))')), [['<blockquote><blockquote><section><p><sup class="annotation disabled" title="a"><span hidden="">a</span><a>*1</a></sup></p><ol class="annotations"><li data-marker="*1">a<sup><a>^1</a></sup></li></ol><ol class="references"></ol></section></blockquote><section><p><sup class="annotation disabled" title="a"><span hidden="">a</span><a>*1</a></sup></p><ol class="annotations"><li data-marker="*1">a<sup><a>^1</a></sup></li></ol><ol class="references"></ol></section></blockquote>'], '']);
|
|
100
100
|
});
|
|
101
101
|
|
|
102
102
|
});
|
|
@@ -38,16 +38,14 @@ const markdown: BlockquoteParser.MarkdownParser = lazy(() => fmap(
|
|
|
38
38
|
rewrite(
|
|
39
39
|
some(contentline, opener),
|
|
40
40
|
convert(unindent, (source, context) => {
|
|
41
|
-
const annotations = html('ol', { class: 'annotations' });
|
|
42
41
|
const references = html('ol', { class: 'references' });
|
|
43
42
|
const document = parse(source, {
|
|
44
43
|
id: '',
|
|
45
44
|
footnotes: {
|
|
46
|
-
annotations,
|
|
47
45
|
references,
|
|
48
46
|
},
|
|
49
47
|
}, context);
|
|
50
|
-
return [[html('section', [document,
|
|
48
|
+
return [[html('section', [document, references])], ''];
|
|
51
49
|
}))),
|
|
52
50
|
]))),
|
|
53
51
|
ns => [html('blockquote', ns)]));
|
|
@@ -14,9 +14,9 @@ describe('Unit: parser/block/extension/aside', () => {
|
|
|
14
14
|
});
|
|
15
15
|
|
|
16
16
|
it('valid', () => {
|
|
17
|
-
assert.deepStrictEqual(inspect(parser('~~~aside\n# 0\n~~~')), [['<aside id="index:0" class="aside"><h1>0</h1><ol class="
|
|
18
|
-
assert.deepStrictEqual(inspect(parser('~~~aside\n## 0\n~~~')), [['<aside id="index:0" class="aside"><h2>0</h2><ol class="
|
|
19
|
-
assert.deepStrictEqual(inspect(parser('~~~aside\n# 0\n\n$-0.0\n\n## 1\n\n$test-a\n> \n~~~')), [['<aside id="index:0" class="aside"><h1>0</h1><figure data-label="$-0.0" data-group="$" hidden="" data-number="0.0"></figure><h2>1</h2><figure data-type="quote" data-label="test-a" data-group="test" data-number="1.1"><figcaption><span class="figindex">Test 1.1. </span></figcaption><div><blockquote></blockquote></div></figure><ol class="
|
|
17
|
+
assert.deepStrictEqual(inspect(parser('~~~aside\n# 0\n~~~')), [['<aside id="index:0" class="aside"><h1>0</h1><ol class="references"></ol></aside>'], '']);
|
|
18
|
+
assert.deepStrictEqual(inspect(parser('~~~aside\n## 0\n~~~')), [['<aside id="index:0" class="aside"><h2>0</h2><ol class="references"></ol></aside>'], '']);
|
|
19
|
+
assert.deepStrictEqual(inspect(parser('~~~aside\n# 0\n\n$-0.0\n\n## 1\n\n$test-a\n> \n~~~')), [['<aside id="index:0" class="aside"><h1>0</h1><figure data-label="$-0.0" data-group="$" hidden="" data-number="0.0"></figure><h2>1</h2><figure data-type="quote" data-label="test-a" data-group="test" data-number="1.1"><figcaption><span class="figindex">Test 1.1. </span></figcaption><div><blockquote></blockquote></div></figure><ol class="references"></ol></aside>'], '']);
|
|
20
20
|
});
|
|
21
21
|
|
|
22
22
|
});
|
|
@@ -18,12 +18,10 @@ export const aside: ExtensionParser.AsideParser = creator(100, block(validate('~
|
|
|
18
18
|
overflow ? `Invalid trailing line after the closing delimiter "${delim}"` :
|
|
19
19
|
'Invalid argument',
|
|
20
20
|
}, `${opener}${body}${overflow || closer}`)];
|
|
21
|
-
const annotations = html('ol', { class: 'annotations' });
|
|
22
21
|
const references = html('ol', { class: 'references' });
|
|
23
22
|
const document = parse(body.slice(0, -1), {
|
|
24
23
|
id: '',
|
|
25
24
|
footnotes: {
|
|
26
|
-
annotations,
|
|
27
25
|
references,
|
|
28
26
|
},
|
|
29
27
|
}, context);
|
|
@@ -42,7 +40,6 @@ export const aside: ExtensionParser.AsideParser = creator(100, block(validate('~
|
|
|
42
40
|
return [
|
|
43
41
|
html('aside', { id: identity(text(heading)), class: 'aside' }, [
|
|
44
42
|
document,
|
|
45
|
-
annotations,
|
|
46
43
|
references,
|
|
47
44
|
]),
|
|
48
45
|
];
|
|
@@ -14,17 +14,17 @@ describe('Unit: parser/block/extension/example', () => {
|
|
|
14
14
|
});
|
|
15
15
|
|
|
16
16
|
it('valid', () => {
|
|
17
|
-
assert.deepStrictEqual(inspect(parser('~~~\n~~~')), [['<aside class="example" data-type="markdown"><pre translate="no"></pre><hr><section><ol class="
|
|
18
|
-
assert.deepStrictEqual(inspect(parser('~~~example/markdown\n~~~')), [['<aside class="example" data-type="markdown"><pre translate="no"></pre><hr><section><ol class="
|
|
19
|
-
assert.deepStrictEqual(inspect(parser('~~~example/markdown\n\n~~~')), [['<aside class="example" data-type="markdown"><pre translate="no"></pre><hr><section><ol class="
|
|
20
|
-
assert.deepStrictEqual(inspect(parser('~~~example/markdown\na\n~~~')), [['<aside class="example" data-type="markdown"><pre translate="no">a</pre><hr><section><p>a</p><ol class="
|
|
21
|
-
assert.deepStrictEqual(inspect(parser('~~~example/markdown\n*a\nb*\n~~~')), [['<aside class="example" data-type="markdown"><pre translate="no">*a\nb*</pre><hr><section><p><em>a<br>b</em></p><ol class="
|
|
22
|
-
assert.deepStrictEqual(inspect(parser('~~~example/markdown\n$fig-a\n!https://host\n~~~')), [['<aside class="example" data-type="markdown"><pre translate="no">$fig-a\n!https://host</pre><hr><section><figure data-type="media" data-label="fig-a" data-group="fig" data-number="1"><figcaption><span class="figindex">Fig. 1. </span></figcaption><div><a href="https://host" target="_blank"><img class="media" data-src="https://host" alt=""></a></div></figure><ol class="
|
|
23
|
-
assert.deepStrictEqual(inspect(parser('~~~example/markdown\n[$fig-a]\n!https://host\n~~~')), [['<aside class="example" data-type="markdown"><pre translate="no">[$fig-a]\n!https://host</pre><hr><section><figure data-type="media" data-label="fig-a" data-group="fig" data-number="1"><figcaption><span class="figindex">Fig. 1. </span></figcaption><div><a href="https://host" target="_blank"><img class="media" data-src="https://host" alt=""></a></div></figure><ol class="
|
|
24
|
-
assert.deepStrictEqual(inspect(parser('~~~example/markdown\n## a\n~~~')), [['<aside class="example" data-type="markdown"><pre translate="no">## a</pre><hr><section><h2>a</h2><ol class="
|
|
25
|
-
assert.deepStrictEqual(inspect(parser('~~~example/markdown\n~ a\n~~~')), [['<aside class="example" data-type="markdown"><pre translate="no">~ a</pre><hr><section><dl><dt>a</dt><dd></dd></dl><ol class="
|
|
26
|
-
assert.deepStrictEqual(inspect(parser('~~~example/markdown\n((a))[[b]]\n~~~')), [['<aside class="example" data-type="markdown"><pre translate="no">((a))[[b]]</pre><hr><section><p><sup class="annotation disabled" title="a"><span hidden="">a</span><a>*1</a></sup><sup class="reference disabled" title="b"><span hidden="">b</span><a>[1]</a></sup></p><ol class="annotations"><li>a<sup><a>^1</a></sup></li></ol><ol class="references"><li>b<sup><a>^1</a></sup></li></ol></section></aside>'], '']);
|
|
27
|
-
assert.deepStrictEqual(inspect(parser('~~~~example/markdown\na\n~~~~')), [['<aside class="example" data-type="markdown"><pre translate="no">a</pre><hr><section><p>a</p><ol class="
|
|
17
|
+
assert.deepStrictEqual(inspect(parser('~~~\n~~~')), [['<aside class="example" data-type="markdown"><pre translate="no"></pre><hr><section><ol class="references"></ol></section></aside>'], '']);
|
|
18
|
+
assert.deepStrictEqual(inspect(parser('~~~example/markdown\n~~~')), [['<aside class="example" data-type="markdown"><pre translate="no"></pre><hr><section><ol class="references"></ol></section></aside>'], '']);
|
|
19
|
+
assert.deepStrictEqual(inspect(parser('~~~example/markdown\n\n~~~')), [['<aside class="example" data-type="markdown"><pre translate="no"></pre><hr><section><ol class="references"></ol></section></aside>'], '']);
|
|
20
|
+
assert.deepStrictEqual(inspect(parser('~~~example/markdown\na\n~~~')), [['<aside class="example" data-type="markdown"><pre translate="no">a</pre><hr><section><p>a</p><ol class="references"></ol></section></aside>'], '']);
|
|
21
|
+
assert.deepStrictEqual(inspect(parser('~~~example/markdown\n*a\nb*\n~~~')), [['<aside class="example" data-type="markdown"><pre translate="no">*a\nb*</pre><hr><section><p><em>a<br>b</em></p><ol class="references"></ol></section></aside>'], '']);
|
|
22
|
+
assert.deepStrictEqual(inspect(parser('~~~example/markdown\n$fig-a\n!https://host\n~~~')), [['<aside class="example" data-type="markdown"><pre translate="no">$fig-a\n!https://host</pre><hr><section><figure data-type="media" data-label="fig-a" data-group="fig" data-number="1"><figcaption><span class="figindex">Fig. 1. </span></figcaption><div><a href="https://host" target="_blank"><img class="media" data-src="https://host" alt=""></a></div></figure><ol class="references"></ol></section></aside>'], '']);
|
|
23
|
+
assert.deepStrictEqual(inspect(parser('~~~example/markdown\n[$fig-a]\n!https://host\n~~~')), [['<aside class="example" data-type="markdown"><pre translate="no">[$fig-a]\n!https://host</pre><hr><section><figure data-type="media" data-label="fig-a" data-group="fig" data-number="1"><figcaption><span class="figindex">Fig. 1. </span></figcaption><div><a href="https://host" target="_blank"><img class="media" data-src="https://host" alt=""></a></div></figure><ol class="references"></ol></section></aside>'], '']);
|
|
24
|
+
assert.deepStrictEqual(inspect(parser('~~~example/markdown\n## a\n~~~')), [['<aside class="example" data-type="markdown"><pre translate="no">## a</pre><hr><section><h2>a</h2><ol class="references"></ol></section></aside>'], '']);
|
|
25
|
+
assert.deepStrictEqual(inspect(parser('~~~example/markdown\n~ a\n~~~')), [['<aside class="example" data-type="markdown"><pre translate="no">~ a</pre><hr><section><dl><dt>a</dt><dd></dd></dl><ol class="references"></ol></section></aside>'], '']);
|
|
26
|
+
assert.deepStrictEqual(inspect(parser('~~~example/markdown\n((a))[[b]]\n~~~')), [['<aside class="example" data-type="markdown"><pre translate="no">((a))[[b]]</pre><hr><section><p><sup class="annotation disabled" title="a"><span hidden="">a</span><a>*1</a></sup><sup class="reference disabled" title="b"><span hidden="">b</span><a>[1]</a></sup></p><ol class="annotations"><li data-marker="*1">a<sup><a>^1</a></sup></li></ol><ol class="references"><li>b<sup><a>^1</a></sup></li></ol></section></aside>'], '']);
|
|
27
|
+
assert.deepStrictEqual(inspect(parser('~~~~example/markdown\na\n~~~~')), [['<aside class="example" data-type="markdown"><pre translate="no">a</pre><hr><section><p>a</p><ol class="references"></ol></section></aside>'], '']);
|
|
28
28
|
assert.deepStrictEqual(inspect(parser('~~~example/math\na\n~~~')), [['<aside class="example" data-type="math"><pre translate="no">a</pre><hr><div class="math" translate="no">$$\na\n$$</div></aside>'], '']);
|
|
29
29
|
assert.deepStrictEqual(inspect(parser(`~~~example/math\n0${'\n'.repeat(100)}~~~`), '>'), [['<aside class="example" data-type="math">'], '']);
|
|
30
30
|
});
|
|
@@ -23,12 +23,10 @@ export const example: ExtensionParser.ExampleParser = creator(100, block(validat
|
|
|
23
23
|
}, `${opener}${body}${overflow || closer}`)];
|
|
24
24
|
switch (type) {
|
|
25
25
|
case 'markdown': {
|
|
26
|
-
const annotations = html('ol', { class: 'annotations' });
|
|
27
26
|
const references = html('ol', { class: 'references' });
|
|
28
27
|
const document = parse(body.slice(0, -1), {
|
|
29
28
|
id: '',
|
|
30
29
|
footnotes: {
|
|
31
|
-
annotations,
|
|
32
30
|
references,
|
|
33
31
|
},
|
|
34
32
|
}, context);
|
|
@@ -37,7 +35,7 @@ export const example: ExtensionParser.ExampleParser = creator(100, block(validat
|
|
|
37
35
|
html('aside', { class: 'example', 'data-type': 'markdown' }, [
|
|
38
36
|
html('pre', { translate: 'no' }, body.slice(0, -1)),
|
|
39
37
|
html('hr'),
|
|
40
|
-
html('section', [document,
|
|
38
|
+
html('section', [document, references]),
|
|
41
39
|
]),
|
|
42
40
|
];
|
|
43
41
|
}
|
|
@@ -31,16 +31,16 @@ describe('Unit: parser/block/extension/fig', () => {
|
|
|
31
31
|
assert.deepStrictEqual(inspect(parser('[$group-name]\n```\n~~~\n```')), [['<figure data-type="text" data-label="group-name" data-group="group"><figcaption><span class="figindex"></span></figcaption><div><pre class="text">~~~</pre></div></figure>'], '']);
|
|
32
32
|
assert.deepStrictEqual(inspect(parser('[$group-name]\n$$\n\n$$')), [['<figure data-type="math" data-label="group-name" data-group="group"><figcaption><span class="figindex"></span></figcaption><div><div class="math" translate="no">$$\n\n$$</div></div></figure>'], '']);
|
|
33
33
|
assert.deepStrictEqual(inspect(parser('[$group-name]\n$$\n\n$$\n')), [['<figure data-type="math" data-label="group-name" data-group="group"><figcaption><span class="figindex"></span></figcaption><div><div class="math" translate="no">$$\n\n$$</div></div></figure>'], '']);
|
|
34
|
-
assert.deepStrictEqual(inspect(parser('[$group-name]\n~~~\n~~~')), [['<figure data-type="example" data-label="group-name" data-group="group"><figcaption><span class="figindex"></span></figcaption><div><aside class="example" data-type="markdown"><pre translate="no"></pre><hr><section><ol class="
|
|
35
|
-
assert.deepStrictEqual(inspect(parser('[$group-name]\n~~~\n~~~\n')), [['<figure data-type="example" data-label="group-name" data-group="group"><figcaption><span class="figindex"></span></figcaption><div><aside class="example" data-type="markdown"><pre translate="no"></pre><hr><section><ol class="
|
|
36
|
-
assert.deepStrictEqual(inspect(parser('[$group-name]\n~~~example/markdown\n~~~')), [['<figure data-type="example" data-label="group-name" data-group="group"><figcaption><span class="figindex"></span></figcaption><div><aside class="example" data-type="markdown"><pre translate="no"></pre><hr><section><ol class="
|
|
37
|
-
assert.deepStrictEqual(inspect(parser('[$group-name]\n~~~example/markdown\n~~~\n')), [['<figure data-type="example" data-label="group-name" data-group="group"><figcaption><span class="figindex"></span></figcaption><div><aside class="example" data-type="markdown"><pre translate="no"></pre><hr><section><ol class="
|
|
34
|
+
assert.deepStrictEqual(inspect(parser('[$group-name]\n~~~\n~~~')), [['<figure data-type="example" data-label="group-name" data-group="group"><figcaption><span class="figindex"></span></figcaption><div><aside class="example" data-type="markdown"><pre translate="no"></pre><hr><section><ol class="references"></ol></section></aside></div></figure>'], '']);
|
|
35
|
+
assert.deepStrictEqual(inspect(parser('[$group-name]\n~~~\n~~~\n')), [['<figure data-type="example" data-label="group-name" data-group="group"><figcaption><span class="figindex"></span></figcaption><div><aside class="example" data-type="markdown"><pre translate="no"></pre><hr><section><ol class="references"></ol></section></aside></div></figure>'], '']);
|
|
36
|
+
assert.deepStrictEqual(inspect(parser('[$group-name]\n~~~example/markdown\n~~~')), [['<figure data-type="example" data-label="group-name" data-group="group"><figcaption><span class="figindex"></span></figcaption><div><aside class="example" data-type="markdown"><pre translate="no"></pre><hr><section><ol class="references"></ol></section></aside></div></figure>'], '']);
|
|
37
|
+
assert.deepStrictEqual(inspect(parser('[$group-name]\n~~~example/markdown\n~~~\n')), [['<figure data-type="example" data-label="group-name" data-group="group"><figcaption><span class="figindex"></span></figcaption><div><aside class="example" data-type="markdown"><pre translate="no"></pre><hr><section><ol class="references"></ol></section></aside></div></figure>'], '']);
|
|
38
38
|
assert.deepStrictEqual(inspect(parser('[$group-name]\n~~~table\n~~~')), [['<figure data-type="table" data-label="group-name" data-group="group"><figcaption><span class="figindex"></span></figcaption><div><table></table></div></figure>'], '']);
|
|
39
39
|
assert.deepStrictEqual(inspect(parser('[$group-name]\n~~~table\n~~~\n')), [['<figure data-type="table" data-label="group-name" data-group="group"><figcaption><span class="figindex"></span></figcaption><div><table></table></div></figure>'], '']);
|
|
40
40
|
assert.deepStrictEqual(inspect(parser('[$group-name]\n> ')), [['<figure data-type="quote" data-label="group-name" data-group="group"><figcaption><span class="figindex"></span></figcaption><div><blockquote></blockquote></div></figure>'], '']);
|
|
41
41
|
assert.deepStrictEqual(inspect(parser('[$group-name]\n> \n')), [['<figure data-type="quote" data-label="group-name" data-group="group"><figcaption><span class="figindex"></span></figcaption><div><blockquote></blockquote></div></figure>'], '']);
|
|
42
42
|
assert.deepStrictEqual(inspect(parser('[$group-name]\n>\n~~~')), [['<figure data-type="quote" data-label="group-name" data-group="group"><figcaption><span class="figindex"></span></figcaption><div><blockquote><pre><br>~~~</pre></blockquote></div></figure>'], '']);
|
|
43
|
-
assert.deepStrictEqual(inspect(parser('[$group-name]\n!> *a*')), [['<figure data-type="quote" data-label="group-name" data-group="group"><figcaption><span class="figindex"></span></figcaption><div><blockquote><section><p><em>a</em></p><ol class="
|
|
43
|
+
assert.deepStrictEqual(inspect(parser('[$group-name]\n!> *a*')), [['<figure data-type="quote" data-label="group-name" data-group="group"><figcaption><span class="figindex"></span></figcaption><div><blockquote><section><p><em>a</em></p><ol class="references"></ol></section></blockquote></div></figure>'], '']);
|
|
44
44
|
assert.deepStrictEqual(inspect(parser('[$group-name]\n![]{https://host}')), [['<figure data-type="media" data-label="group-name" data-group="group"><figcaption><span class="figindex"></span></figcaption><div><a href="https://host" target="_blank"><img class="media" data-src="https://host" alt=""></a></div></figure>'], '']);
|
|
45
45
|
assert.deepStrictEqual(inspect(parser('[$group-name]\n![]{https://host}\n')), [['<figure data-type="media" data-label="group-name" data-group="group"><figcaption><span class="figindex"></span></figcaption><div><a href="https://host" target="_blank"><img class="media" data-src="https://host" alt=""></a></div></figure>'], '']);
|
|
46
46
|
assert.deepStrictEqual(inspect(parser('$group-name\n!https://host')), [['<figure data-type="media" data-label="group-name" data-group="group"><figcaption><span class="figindex"></span></figcaption><div><a href="https://host" target="_blank"><img class="media" data-src="https://host" alt=""></a></div></figure>'], '']);
|
|
@@ -53,8 +53,8 @@ describe('Unit: parser/block/extension/figure', () => {
|
|
|
53
53
|
assert.deepStrictEqual(inspect(parser('~~~figure [$group-name]\n$$\n\n$$\n~~~')), [['<figure data-type="math" data-label="group-name" data-group="group"><figcaption><span class="figindex"></span></figcaption><div><div class="math" translate="no">$$\n\n$$</div></div></figure>'], '']);
|
|
54
54
|
assert.deepStrictEqual(inspect(parser('~~~figure [$group-name]\n$$\n~~~\n$$\n~~~')), [['<figure data-type="math" data-label="group-name" data-group="group"><figcaption><span class="figindex"></span></figcaption><div><div class="math" translate="no">$$\n~~~\n$$</div></div></figure>'], '']);
|
|
55
55
|
assert.deepStrictEqual(inspect(parser('~~~figure [$group-name]\n$$\n\n$$\n\ncaption\n~~~')), [['<figure data-type="math" data-label="group-name" data-group="group"><figcaption><span class="figindex"></span>caption</figcaption><div><div class="math" translate="no">$$\n\n$$</div></div></figure>'], '']);
|
|
56
|
-
assert.deepStrictEqual(inspect(parser('~~~figure [$group-name]\n~~~\n~~~\n\ncaption\n~~~')), [['<figure data-type="example" data-label="group-name" data-group="group"><figcaption><span class="figindex"></span>caption</figcaption><div><aside class="example" data-type="markdown"><pre translate="no"></pre><hr><section><ol class="
|
|
57
|
-
assert.deepStrictEqual(inspect(parser('~~~figure [$group-name]\n~~~example/markdown\n~~~\n\ncaption\n~~~')), [['<figure data-type="example" data-label="group-name" data-group="group"><figcaption><span class="figindex"></span>caption</figcaption><div><aside class="example" data-type="markdown"><pre translate="no"></pre><hr><section><ol class="
|
|
56
|
+
assert.deepStrictEqual(inspect(parser('~~~figure [$group-name]\n~~~\n~~~\n\ncaption\n~~~')), [['<figure data-type="example" data-label="group-name" data-group="group"><figcaption><span class="figindex"></span>caption</figcaption><div><aside class="example" data-type="markdown"><pre translate="no"></pre><hr><section><ol class="references"></ol></section></aside></div></figure>'], '']);
|
|
57
|
+
assert.deepStrictEqual(inspect(parser('~~~figure [$group-name]\n~~~example/markdown\n~~~\n\ncaption\n~~~')), [['<figure data-type="example" data-label="group-name" data-group="group"><figcaption><span class="figindex"></span>caption</figcaption><div><aside class="example" data-type="markdown"><pre translate="no"></pre><hr><section><ol class="references"></ol></section></aside></div></figure>'], '']);
|
|
58
58
|
assert.deepStrictEqual(inspect(parser('~~~figure [$group-name]\n~~~table\n~~~\n\ncaption\n~~~')), [['<figure data-type="table" data-label="group-name" data-group="group"><figcaption><span class="figindex"></span>caption</figcaption><div><table></table></div></figure>'], '']);
|
|
59
59
|
assert.deepStrictEqual(inspect(parser('~~~figure [$group-name]\n> \n~~~\n\n~~~')), [['<figure data-type="quote" data-label="group-name" data-group="group"><figcaption><span class="figindex"></span></figcaption><div><blockquote><pre><br>~~~</pre></blockquote></div></figure>'], '']);
|
|
60
60
|
assert.deepStrictEqual(inspect(parser('~~~figure [$group-name]\n> \n~~~\n\ncaption\n~~~')), [['<figure data-type="quote" data-label="group-name" data-group="group"><figcaption><span class="figindex"></span>caption</figcaption><div><blockquote><pre><br>~~~</pre></blockquote></div></figure>'], '']);
|
|
@@ -15,13 +15,13 @@ describe('Unit: parser/block/extension/message', () => {
|
|
|
15
15
|
});
|
|
16
16
|
|
|
17
17
|
it('valid', () => {
|
|
18
|
-
assert.deepStrictEqual(inspect(parser('~~~message/note\n~~~')), [['<
|
|
19
|
-
assert.deepStrictEqual(inspect(parser('~~~message/note\n\n~~~')), [['<
|
|
20
|
-
assert.deepStrictEqual(inspect(parser('~~~message/note\na\n~~~')), [['<
|
|
21
|
-
assert.deepStrictEqual(inspect(parser('~~~message/note\na\n\n- \n~~~')), [['<
|
|
22
|
-
assert.deepStrictEqual(inspect(parser('~~~message/note\n# a\n~~~')), [['<
|
|
23
|
-
assert.deepStrictEqual(inspect(parser('~~~message/caution\n~~~')), [['<
|
|
24
|
-
assert.deepStrictEqual(inspect(parser('~~~message/warning\n~~~')), [['<
|
|
18
|
+
assert.deepStrictEqual(inspect(parser('~~~message/note\n~~~')), [['<section class="message" data-type="note"><h1>Note</h1></section>'], '']);
|
|
19
|
+
assert.deepStrictEqual(inspect(parser('~~~message/note\n\n~~~')), [['<section class="message" data-type="note"><h1>Note</h1></section>'], '']);
|
|
20
|
+
assert.deepStrictEqual(inspect(parser('~~~message/note\na\n~~~')), [['<section class="message" data-type="note"><h1>Note</h1><p>a</p></section>'], '']);
|
|
21
|
+
assert.deepStrictEqual(inspect(parser('~~~message/note\na\n\n- \n~~~')), [['<section class="message" data-type="note"><h1>Note</h1><p>a</p><ul><li></li></ul></section>'], '']);
|
|
22
|
+
assert.deepStrictEqual(inspect(parser('~~~message/note\n# a\n~~~')), [['<section class="message" data-type="note"><h1>Note</h1><p># a</p></section>'], '']);
|
|
23
|
+
assert.deepStrictEqual(inspect(parser('~~~message/caution\n~~~')), [['<section class="message" data-type="caution"><h1>Caution!</h1></section>'], '']);
|
|
24
|
+
assert.deepStrictEqual(inspect(parser('~~~message/warning\n~~~')), [['<section class="message" data-type="warning"><h1>WARNING!!</h1></section>'], '']);
|
|
25
25
|
});
|
|
26
26
|
|
|
27
27
|
});
|
|
@@ -46,8 +46,8 @@ export const message: MessageParser = block(validate('~~~', fmap(
|
|
|
46
46
|
}, `${opener}${body}${closer}`)];
|
|
47
47
|
}
|
|
48
48
|
return [
|
|
49
|
-
html('
|
|
50
|
-
[html('
|
|
49
|
+
html('section', { class: `message`, 'data-type': type }, unshift(
|
|
50
|
+
[html('h1', title(type))],
|
|
51
51
|
[...segment(body)].reduce((acc, seg) => push(acc, eval(content(seg, context), [])), []))),
|
|
52
52
|
];
|
|
53
53
|
})));
|
|
@@ -248,8 +248,12 @@ function format(rows: Tree<RowParser>[]): HTMLTableSectionElement[] {
|
|
|
248
248
|
assert(colSpan > 0);
|
|
249
249
|
if (colSpan > 1) {
|
|
250
250
|
splice(cells, j + 1, 0, ...Array(colSpan - 1));
|
|
251
|
-
heads |=
|
|
252
|
-
|
|
251
|
+
heads |= heads & 1n << jn
|
|
252
|
+
? ~(~0n << BigInt(colSpan)) << jn
|
|
253
|
+
: 0n;
|
|
254
|
+
highlights |= highlights & 1n << jn
|
|
255
|
+
? ~(~0n << BigInt(colSpan)) << jn
|
|
256
|
+
: 0n;
|
|
253
257
|
j += colSpan - 1;
|
|
254
258
|
}
|
|
255
259
|
if (target === thead) {
|
|
@@ -1,9 +1,8 @@
|
|
|
1
1
|
import { IListParser } from '../block';
|
|
2
|
-
import { union, inits, some, block, line, validate, indent,
|
|
2
|
+
import { union, inits, some, block, line, validate, indent, context, creator, open, fallback, lazy, fmap } from '../../combinator';
|
|
3
3
|
import { ulist_, fillFirstLine } from './ulist';
|
|
4
|
-
import { olist_ } from './olist';
|
|
4
|
+
import { olist_, invalid } from './olist';
|
|
5
5
|
import { inline } from '../inline';
|
|
6
|
-
import { contentline } from '../source';
|
|
7
6
|
import { html, defrag } from 'typed-dom/dom';
|
|
8
7
|
|
|
9
8
|
export const ilist: IListParser = lazy(() => block(validate(
|
|
@@ -16,10 +15,10 @@ export const ilist_: IListParser = lazy(() => block(fmap(validate(
|
|
|
16
15
|
some(creator(union([
|
|
17
16
|
fmap(fallback(
|
|
18
17
|
inits([
|
|
19
|
-
line(open(/^[-+*](?:$|\s)/,
|
|
18
|
+
line(open(/^[-+*](?:$|\s)/, some(inline), true)),
|
|
20
19
|
indent(union([ulist_, olist_, ilist_])),
|
|
21
20
|
]),
|
|
22
|
-
|
|
21
|
+
invalid),
|
|
23
22
|
ns => [html('li', defrag(fillFirstLine(ns)))]),
|
|
24
23
|
])))),
|
|
25
24
|
es => [
|