securemark 0.251.0 → 0.253.1
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/design.md +17 -11
- package/dist/index.js +137 -157
- package/index.d.ts +7 -8
- package/markdown.d.ts +12 -22
- package/package.json +8 -8
- package/src/combinator/control/manipulation/indent.ts +8 -8
- 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 +4 -3
- 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/figure.ts +0 -2
- package/src/parser/block/extension/message.test.ts +7 -7
- package/src/parser/block/extension/message.ts +2 -4
- package/src/parser/block/ilist.ts +4 -5
- package/src/parser/block/olist.ts +24 -20
- package/src/parser/block/paragraph.test.ts +3 -3
- package/src/parser/block/ulist.ts +3 -13
- package/src/parser/block.ts +0 -3
- 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/extension/index.ts +4 -5
- package/src/parser/inline/reference.test.ts +58 -58
- package/src/parser/inline/reference.ts +4 -4
- 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/source/str.ts +2 -2
- package/src/parser/util.ts +14 -10
- 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/src/parser/block/indentblock.test.ts +0 -37
- package/src/parser/block/indentblock.ts +0 -13
package/index.d.ts
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* @author falsandtru https://github.com/falsandtru/securemark
|
|
6
6
|
*/
|
|
7
7
|
|
|
8
|
-
import {
|
|
8
|
+
import { Dict } from 'spica/dict';
|
|
9
9
|
|
|
10
10
|
export function parse(source: string, options?: ParserOptions): DocumentFragment;
|
|
11
11
|
export function bind(target: DocumentFragment | HTMLElement | ShadowRoot, settings: ParserSettings): {
|
|
@@ -33,7 +33,6 @@ export interface ParserSettings {
|
|
|
33
33
|
// For editing.
|
|
34
34
|
readonly caches?: Partial<Caches>;
|
|
35
35
|
readonly footnotes: {
|
|
36
|
-
readonly annotations: HTMLOListElement;
|
|
37
36
|
readonly references: HTMLOListElement;
|
|
38
37
|
};
|
|
39
38
|
readonly chunk?: boolean;
|
|
@@ -48,23 +47,23 @@ export type Progress =
|
|
|
48
47
|
| { type: 'cancel' };
|
|
49
48
|
|
|
50
49
|
export interface RenderingOptions {
|
|
51
|
-
readonly code?: (target: HTMLElement, cache?:
|
|
52
|
-
readonly math?: (target: HTMLElement, cache?:
|
|
50
|
+
readonly code?: (target: HTMLElement, cache?: Dict<string, HTMLElement>) => void;
|
|
51
|
+
readonly math?: (target: HTMLElement, cache?: Dict<string, HTMLElement>) => void;
|
|
53
52
|
readonly media?: {
|
|
54
53
|
readonly twitter?: (source: HTMLImageElement, url: URL) => HTMLElement | undefined;
|
|
55
54
|
readonly youtube?: (source: HTMLImageElement, url: URL) => HTMLElement | undefined;
|
|
56
55
|
readonly pdf?: (source: HTMLImageElement, url: URL) => HTMLElement | undefined;
|
|
57
56
|
readonly video?: (source: HTMLImageElement, url: URL) => HTMLVideoElement | undefined;
|
|
58
57
|
readonly audio?: (source: HTMLImageElement, url: URL) => HTMLAudioElement | undefined;
|
|
59
|
-
readonly image?: (source: HTMLImageElement, url: URL, cache?:
|
|
58
|
+
readonly image?: (source: HTMLImageElement, url: URL, cache?: Dict<string, HTMLElement>) => HTMLImageElement;
|
|
60
59
|
};
|
|
61
60
|
readonly caches?: Partial<Caches>;
|
|
62
61
|
}
|
|
63
62
|
|
|
64
63
|
export interface Caches {
|
|
65
|
-
readonly code:
|
|
66
|
-
readonly math:
|
|
67
|
-
readonly media:
|
|
64
|
+
readonly code: Dict<string, HTMLElement>;
|
|
65
|
+
readonly math: Dict<string, HTMLElement>;
|
|
66
|
+
readonly media: Dict<string, HTMLElement>;
|
|
68
67
|
}
|
|
69
68
|
|
|
70
69
|
export interface Info {
|
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
|
|
@@ -77,7 +77,6 @@ export namespace MarkdownParser {
|
|
|
77
77
|
BlockParser.IListParser,
|
|
78
78
|
BlockParser.DListParser,
|
|
79
79
|
BlockParser.TableParser,
|
|
80
|
-
BlockParser.IndentBlockParser,
|
|
81
80
|
BlockParser.CodeBlockParser,
|
|
82
81
|
BlockParser.MathBlockParser,
|
|
83
82
|
BlockParser.ExtensionParser,
|
|
@@ -283,13 +282,6 @@ export namespace MarkdownParser {
|
|
|
283
282
|
}
|
|
284
283
|
}
|
|
285
284
|
}
|
|
286
|
-
export interface IndentBlockParser extends
|
|
287
|
-
// abc
|
|
288
|
-
Block<'indentblock'>,
|
|
289
|
-
Parser<HTMLPreElement, Context, [
|
|
290
|
-
CodeBlockParser,
|
|
291
|
-
]> {
|
|
292
|
-
}
|
|
293
285
|
export interface CodeBlockParser extends
|
|
294
286
|
// ```js index.js
|
|
295
287
|
// abc
|
|
@@ -358,7 +350,6 @@ export namespace MarkdownParser {
|
|
|
358
350
|
UListParser,
|
|
359
351
|
OListParser,
|
|
360
352
|
BlockParser.TableParser,
|
|
361
|
-
IndentBlockParser,
|
|
362
353
|
CodeBlockParser,
|
|
363
354
|
MathBlockParser,
|
|
364
355
|
ExampleParser,
|
|
@@ -503,7 +494,6 @@ export namespace MarkdownParser {
|
|
|
503
494
|
BlockParser.OListParser,
|
|
504
495
|
BlockParser.IListParser,
|
|
505
496
|
BlockParser.TableParser,
|
|
506
|
-
BlockParser.IndentBlockParser,
|
|
507
497
|
BlockParser.CodeBlockParser,
|
|
508
498
|
BlockParser.MathBlockParser,
|
|
509
499
|
BlockParser.SidefenceParser,
|
|
@@ -668,13 +658,6 @@ export namespace MarkdownParser {
|
|
|
668
658
|
}
|
|
669
659
|
export namespace InlineParser {
|
|
670
660
|
interface Inline<T extends string> extends Markdown<`inline/${T}`> { }
|
|
671
|
-
export interface AnnotationParser extends
|
|
672
|
-
// ((abc))
|
|
673
|
-
Inline<'annotation'>,
|
|
674
|
-
Parser<HTMLElement, Context, [
|
|
675
|
-
InlineParser,
|
|
676
|
-
]> {
|
|
677
|
-
}
|
|
678
661
|
export interface EscapeParser extends
|
|
679
662
|
// ****
|
|
680
663
|
// +++
|
|
@@ -685,6 +668,13 @@ export namespace MarkdownParser {
|
|
|
685
668
|
SourceParser.StrParser,
|
|
686
669
|
]> {
|
|
687
670
|
}
|
|
671
|
+
export interface AnnotationParser extends
|
|
672
|
+
// ((abc))
|
|
673
|
+
Inline<'annotation'>,
|
|
674
|
+
Parser<HTMLElement, Context, [
|
|
675
|
+
InlineParser,
|
|
676
|
+
]> {
|
|
677
|
+
}
|
|
688
678
|
export interface ReferenceParser extends
|
|
689
679
|
// [[abc]]
|
|
690
680
|
// [[^abbr]]
|
|
@@ -692,7 +682,7 @@ export namespace MarkdownParser {
|
|
|
692
682
|
Inline<'reference'>,
|
|
693
683
|
Parser<HTMLElement, Context, [
|
|
694
684
|
ReferenceParser.AbbrParser,
|
|
695
|
-
|
|
685
|
+
InlineParser,
|
|
696
686
|
InlineParser,
|
|
697
687
|
]> {
|
|
698
688
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "securemark",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.253.1",
|
|
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
42
|
"eslint-plugin-redos": "^4.4.0",
|
|
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": "^13.1.
|
|
52
|
+
"npm-check-updates": "^13.1.5",
|
|
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": {
|
|
@@ -17,20 +17,20 @@ export function indent<T>(opener: RegExp | Parser<T>, parser?: Parser<T> | boole
|
|
|
17
17
|
opener,
|
|
18
18
|
memoize(
|
|
19
19
|
([indent]) =>
|
|
20
|
-
some(line(open(indent, source => [[
|
|
20
|
+
some(line(open(indent, source => [[source], '']))),
|
|
21
21
|
([indent]) => indent.length * 2 + +(indent[0] === ' '), [])), separation),
|
|
22
|
-
(
|
|
22
|
+
(lines, rest, context) => {
|
|
23
23
|
assert(parser = parser as Parser<T>);
|
|
24
|
-
const result = parser(
|
|
24
|
+
const result = parser(trimBlockEnd(lines.join('')), context);
|
|
25
25
|
return result && exec(result) === ''
|
|
26
26
|
? [eval(result), rest]
|
|
27
27
|
: undefined;
|
|
28
28
|
});
|
|
29
29
|
}
|
|
30
30
|
|
|
31
|
-
function
|
|
32
|
-
return
|
|
33
|
-
||
|
|
34
|
-
?
|
|
35
|
-
:
|
|
31
|
+
function trimBlockEnd(block: string): string {
|
|
32
|
+
return block === ''
|
|
33
|
+
|| block[block.length - 1] !== '\n'
|
|
34
|
+
? block
|
|
35
|
+
: block.slice(0, -1);
|
|
36
36
|
}
|
|
@@ -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 }
|
|
@@ -82,8 +82,8 @@ describe('Unit: parser/api/parse', () => {
|
|
|
82
82
|
|
|
83
83
|
it('indent', () => {
|
|
84
84
|
assert.deepStrictEqual(
|
|
85
|
-
[...parse('
|
|
86
|
-
['<p
|
|
85
|
+
[...parse('\ta').children].map(el => el.outerHTML),
|
|
86
|
+
['<p>\ta</p>']);
|
|
87
87
|
});
|
|
88
88
|
|
|
89
89
|
it('url', () => {
|
|
@@ -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>'], '']);
|