securemark 0.289.6 → 0.290.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 +8 -0
- package/dist/index.js +107 -352
- package/markdown.d.ts +12 -13
- package/package.json +1 -1
- package/src/combinator/control/manipulation/surround.ts +3 -3
- package/src/parser/api/parse.test.ts +5 -5
- package/src/parser/block/extension/example.test.ts +2 -2
- package/src/parser/block/extension/fig.test.ts +8 -8
- package/src/parser/block/extension/figure.test.ts +14 -14
- package/src/parser/block/paragraph.test.ts +4 -0
- package/src/parser/inline/autolink/url.test.ts +2 -2
- package/src/parser/inline/bracket.test.ts +1 -0
- package/src/parser/inline/code.ts +1 -1
- package/src/parser/inline/extension/index.ts +8 -9
- package/src/parser/inline/html.test.ts +4 -4
- package/src/parser/inline/html.ts +12 -25
- package/src/parser/inline/htmlentity.ts +6 -6
- package/src/parser/inline/link.test.ts +17 -17
- package/src/parser/inline/link.ts +18 -6
- package/src/parser/inline/media.test.ts +45 -46
- package/src/parser/inline/media.ts +39 -30
- package/src/parser/inline/ruby.test.ts +2 -2
- package/src/parser/inline/ruby.ts +32 -35
- package/src/parser/inline/shortmedia.test.ts +2 -2
- package/src/parser/inline/template.test.ts +2 -2
- package/src/parser/inline/template.ts +18 -10
- package/src/parser/inline.test.ts +1 -0
- package/src/parser/source/escapable.test.ts +5 -5
- package/src/parser/source/escapable.ts +2 -2
- package/src/parser/source/unescapable.test.ts +5 -5
- package/src/parser/source/unescapable.ts +2 -2
- package/src/renderer/render/media.test.ts +3 -3
package/markdown.d.ts
CHANGED
|
@@ -686,16 +686,16 @@ export namespace MarkdownParser {
|
|
|
686
686
|
export namespace TemplateParser {
|
|
687
687
|
export interface BracketParser extends
|
|
688
688
|
Inline<'template/bracket'>,
|
|
689
|
-
Parser<string, Context, [
|
|
690
|
-
Parser<string, Context, [
|
|
689
|
+
Parser<string | HTMLBRElement, Context, [
|
|
690
|
+
Parser<string | HTMLBRElement, Context, [
|
|
691
691
|
BracketParser,
|
|
692
692
|
SourceParser.EscapableSourceParser,
|
|
693
693
|
]>,
|
|
694
|
-
Parser<string, Context, [
|
|
694
|
+
Parser<string | HTMLBRElement, Context, [
|
|
695
695
|
BracketParser,
|
|
696
696
|
SourceParser.EscapableSourceParser,
|
|
697
697
|
]>,
|
|
698
|
-
Parser<string, Context, [
|
|
698
|
+
Parser<string | HTMLBRElement, Context, [
|
|
699
699
|
BracketParser,
|
|
700
700
|
SourceParser.EscapableSourceParser,
|
|
701
701
|
]>,
|
|
@@ -951,7 +951,7 @@ export namespace MarkdownParser {
|
|
|
951
951
|
export namespace RubyParser {
|
|
952
952
|
export interface TextParser extends
|
|
953
953
|
Inline<'ruby/text'>,
|
|
954
|
-
Parser<string
|
|
954
|
+
Parser<string, Context, []> {
|
|
955
955
|
}
|
|
956
956
|
}
|
|
957
957
|
export interface HTMLParser extends
|
|
@@ -959,10 +959,9 @@ export namespace MarkdownParser {
|
|
|
959
959
|
// <bdi>abc</bdi>
|
|
960
960
|
Inline<'html'>,
|
|
961
961
|
Parser<HTMLElement | string, Context, [
|
|
962
|
-
HTMLParser.VoidTagParser,
|
|
963
962
|
HTMLParser.VoidTagParser,
|
|
964
963
|
HTMLParser.TagParser,
|
|
965
|
-
HTMLParser.
|
|
964
|
+
HTMLParser.VoidTagParser,
|
|
966
965
|
]> {
|
|
967
966
|
}
|
|
968
967
|
export namespace HTMLParser {
|
|
@@ -1165,16 +1164,16 @@ export namespace MarkdownParser {
|
|
|
1165
1164
|
}
|
|
1166
1165
|
export interface BracketParser extends
|
|
1167
1166
|
Inline<'url/bracket'>,
|
|
1168
|
-
Parser<string, Context, [
|
|
1169
|
-
Parser<string, Context, [
|
|
1167
|
+
Parser<string | HTMLBRElement, Context, [
|
|
1168
|
+
Parser<string | HTMLBRElement, Context, [
|
|
1170
1169
|
BracketParser,
|
|
1171
1170
|
SourceParser.UnescapableSourceParser,
|
|
1172
1171
|
]>,
|
|
1173
|
-
Parser<string, Context, [
|
|
1172
|
+
Parser<string | HTMLBRElement, Context, [
|
|
1174
1173
|
BracketParser,
|
|
1175
1174
|
SourceParser.UnescapableSourceParser,
|
|
1176
1175
|
]>,
|
|
1177
|
-
Parser<string, Context, [
|
|
1176
|
+
Parser<string | HTMLBRElement, Context, [
|
|
1178
1177
|
BracketParser,
|
|
1179
1178
|
SourceParser.UnescapableSourceParser,
|
|
1180
1179
|
]>,
|
|
@@ -1264,12 +1263,12 @@ export namespace MarkdownParser {
|
|
|
1264
1263
|
export interface EscapableSourceParser extends
|
|
1265
1264
|
// abc
|
|
1266
1265
|
Source<'escsource'>,
|
|
1267
|
-
Parser<string, Context, []> {
|
|
1266
|
+
Parser<string | HTMLBRElement, Context, []> {
|
|
1268
1267
|
}
|
|
1269
1268
|
export interface UnescapableSourceParser extends
|
|
1270
1269
|
// abc
|
|
1271
1270
|
Source<'unescsource'>,
|
|
1272
|
-
Parser<string, Context, []> {
|
|
1271
|
+
Parser<string | HTMLBRElement, Context, []> {
|
|
1273
1272
|
}
|
|
1274
1273
|
export interface StrParser extends
|
|
1275
1274
|
Source<'str'>,
|
package/package.json
CHANGED
|
@@ -123,9 +123,9 @@ export function getBacktrack(
|
|
|
123
123
|
context: Ctx,
|
|
124
124
|
backtracks: readonly number[],
|
|
125
125
|
source: string,
|
|
126
|
-
length: number,
|
|
126
|
+
length: number = 1,
|
|
127
127
|
): boolean {
|
|
128
|
-
for (const backtrack of backtracks) {
|
|
128
|
+
if (length > 0) for (const backtrack of backtracks) {
|
|
129
129
|
if (backtrack & 1) {
|
|
130
130
|
const { backtracks = {}, offset = 0 } = context;
|
|
131
131
|
for (let i = 0; i < length; ++i) {
|
|
@@ -145,7 +145,7 @@ export function setBacktrack(
|
|
|
145
145
|
position: number,
|
|
146
146
|
length: number = 1,
|
|
147
147
|
): void {
|
|
148
|
-
for (const backtrack of backtracks) {
|
|
148
|
+
if (length > 0) for (const backtrack of backtracks) {
|
|
149
149
|
if (backtrack & 2) {
|
|
150
150
|
const { backtracks = {}, offset = 0 } = context;
|
|
151
151
|
for (let i = 0; i < length; ++i) {
|
|
@@ -132,9 +132,9 @@ describe('Unit: parser/api/parse', () => {
|
|
|
132
132
|
'<p><a class="url" href="https://source/a" target="_blank">../a</a></p>',
|
|
133
133
|
'<p><a class="url" href="https://source/a" target="_blank">../../a</a></p>',
|
|
134
134
|
'<p><a class="url" href="//domain/a" target="_blank">//domain/a</a></p>',
|
|
135
|
-
'<div><a href="https://source/x/a" target="_blank"><img class="media" data-src="https://source/x/a" alt=""></a></div>',
|
|
136
|
-
'<div><a href="/z/a" target="_blank"><img class="media" data-src="/z/a" alt=""></a></div>',
|
|
137
|
-
'<div><a href="https://source/a" target="_blank"><img class="media" data-src="https://source/a" alt=""></a></div>',
|
|
135
|
+
'<div><a href="https://source/x/a" target="_blank"><img class="media" data-src="https://source/x/a" alt="a"></a></div>',
|
|
136
|
+
'<div><a href="/z/a" target="_blank"><img class="media" data-src="/z/a" alt="^/a"></a></div>',
|
|
137
|
+
'<div><a href="https://source/a" target="_blank"><img class="media" data-src="https://source/a" alt="../../a"></a></div>',
|
|
138
138
|
'<ol class="annotations"><li id="annotation::def:a:1" data-marker="*1"><span>a</span><sup><a href="#annotation::ref:a:1">^1</a></sup></li></ol>',
|
|
139
139
|
]);
|
|
140
140
|
assert.deepStrictEqual(
|
|
@@ -351,7 +351,7 @@ describe('Unit: parser/api/parse', () => {
|
|
|
351
351
|
it('backtrack', function () {
|
|
352
352
|
this.timeout(5000);
|
|
353
353
|
// 8n = template + link + annotation/reference + link + code + url + ruby + text
|
|
354
|
-
const source = `${'.'.repeat(
|
|
354
|
+
const source = `${'.'.repeat(0 + 0)}{{{((([[[\`http://[${'.'.repeat(12493)}`;
|
|
355
355
|
assert.deepStrictEqual(
|
|
356
356
|
[...parse(source).children].map(el => el.outerHTML.replace(/:\w+/, ':rnd')),
|
|
357
357
|
[`<p>${source}</p>`]);
|
|
@@ -359,7 +359,7 @@ describe('Unit: parser/api/parse', () => {
|
|
|
359
359
|
|
|
360
360
|
it('backtrack error', function () {
|
|
361
361
|
this.timeout(5000);
|
|
362
|
-
const source = `${'.'.repeat(
|
|
362
|
+
const source = `${'.'.repeat(0 + 1)}{{{((([[[\`http://[${'.'.repeat(12493)}`;
|
|
363
363
|
assert.deepStrictEqual(
|
|
364
364
|
[...parse(source).children].map(el => el.outerHTML.replace(/:\w+/, ':rnd')),
|
|
365
365
|
[
|
|
@@ -19,8 +19,8 @@ describe('Unit: parser/block/extension/example', () => {
|
|
|
19
19
|
assert.deepStrictEqual(inspect(parser('~~~example/markdown\n\n~~~')), [['<aside class="example" data-type="markdown"><pre translate="no"></pre><hr><section><h2>References</h2><ol class="references"></ol></section></aside>'], '']);
|
|
20
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><h2>References</h2><ol class="references"></ol></section></aside>'], '']);
|
|
21
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><ins>a<br>b</ins></p><h2>References</h2><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><span class="figtext"></span></figcaption><div><a href="https://host" target="_blank"><img class="media" data-src="https://host" alt=""></a></div></figure><h2>References</h2><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><span class="figtext"></span></figcaption><div><a href="https://host" target="_blank"><img class="media" data-src="https://host" alt=""></a></div></figure><h2>References</h2><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><span class="figtext"></span></figcaption><div><a href="https://host" target="_blank"><img class="media" data-src="https://host" alt="https://host"></a></div></figure><h2>References</h2><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><span class="figtext"></span></figcaption><div><a href="https://host" target="_blank"><img class="media" data-src="https://host" alt="https://host"></a></div></figure><h2>References</h2><ol class="references"></ol></section></aside>'], '']);
|
|
24
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><h2>References</h2><ol class="references"></ol></section></aside>'], '']);
|
|
25
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><h2>References</h2><ol class="references"></ol></section></aside>'], '']);
|
|
26
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></span><a>*1</a></sup><sup class="reference disabled" title="b"><span></span><a>[1]</a></sup></p><ol class="annotations"><li data-marker="*1"><span>a</span><sup><a>^1</a></sup></li></ol><h2>References</h2><ol class="references"><li><span>b</span><sup><a>^1</a></sup></li></ol></section></aside>'], '']);
|
|
@@ -15,14 +15,14 @@ describe('Unit: parser/block/extension/fig', () => {
|
|
|
15
15
|
assert.deepStrictEqual(inspect(parser('[$group-name]a\nhttps://host')), undefined);
|
|
16
16
|
assert.deepStrictEqual(inspect(parser('[$group-name]a\n!https://host')), undefined);
|
|
17
17
|
assert.deepStrictEqual(inspect(parser('[$group-name] a\nhttps://host')), undefined);
|
|
18
|
-
assert.deepStrictEqual(inspect(parser('[$group-name] a\n!https://host')), [['<figure data-type="media" data-label="group-name" data-group="group" class="invalid"><figcaption><span class="figindex"></span><span class="figtext"></span></figcaption><div><a href="https://host" target="_blank"><img class="media" data-src="https://host" alt=""></a></div></figure>'], '']);
|
|
18
|
+
assert.deepStrictEqual(inspect(parser('[$group-name] a\n!https://host')), [['<figure data-type="media" data-label="group-name" data-group="group" class="invalid"><figcaption><span class="figindex"></span><span class="figtext"></span></figcaption><div><a href="https://host" target="_blank"><img class="media" data-src="https://host" alt="https://host"></a></div></figure>'], '']);
|
|
19
19
|
assert.deepStrictEqual(inspect(parser('$-a\n$-b')), undefined);
|
|
20
20
|
assert.deepStrictEqual(inspect(parser(' [$group-name]\n!https://host\n')), undefined);
|
|
21
21
|
});
|
|
22
22
|
|
|
23
23
|
it('valid', () => {
|
|
24
|
-
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><span class="figtext"></span></figcaption><div><a href="https://host" target="_blank"><img class="media" data-src="https://host" alt=""></a></div></figure>'], '']);
|
|
25
|
-
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><span class="figtext"></span></figcaption><div><a href="https://host" target="_blank"><img class="media" data-src="https://host" alt=""></a></div></figure>'], '']);
|
|
24
|
+
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><span class="figtext"></span></figcaption><div><a href="https://host" target="_blank"><img class="media" data-src="https://host" alt="https://host"></a></div></figure>'], '']);
|
|
25
|
+
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><span class="figtext"></span></figcaption><div><a href="https://host" target="_blank"><img class="media" data-src="https://host" alt="https://host"></a></div></figure>'], '']);
|
|
26
26
|
assert.deepStrictEqual(inspect(parser('[$group-name]\n|\n|-\n|')), [['<figure data-type="table" data-label="group-name" data-group="group"><figcaption><span class="figindex"></span><span class="figtext"></span></figcaption><div><table><thead><tr></tr></thead><tbody><tr></tr></tbody></table></div></figure>'], '']);
|
|
27
27
|
assert.deepStrictEqual(inspect(parser('[$group-name]\n|\n|-\n|\n')), [['<figure data-type="table" data-label="group-name" data-group="group"><figcaption><span class="figindex"></span><span class="figtext"></span></figcaption><div><table><thead><tr></tr></thead><tbody><tr></tr></tbody></table></div></figure>'], '']);
|
|
28
28
|
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><span class="figtext"></span></figcaption><div><pre class="text"></pre></div></figure>'], '']);
|
|
@@ -40,11 +40,11 @@ describe('Unit: parser/block/extension/fig', () => {
|
|
|
40
40
|
assert.deepStrictEqual(inspect(parser('[$group-name]\n> \n')), [['<figure data-type="quote" data-label="group-name" data-group="group"><figcaption><span class="figindex"></span><span class="figtext"></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><span class="figtext"></span></figcaption><div><blockquote><pre><br>~~~</pre></blockquote></div></figure>'], '']);
|
|
42
42
|
assert.deepStrictEqual(inspect(parser('[$group-name]\n!> *a*')), [['<figure data-type="quote" data-label="group-name" data-group="group"><figcaption><span class="figindex"></span><span class="figtext"></span></figcaption><div><blockquote><section><p><em>a</em></p><h2>References</h2><ol class="references"></ol></section></blockquote></div></figure>'], '']);
|
|
43
|
-
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><span class="figtext"></span></figcaption><div><a href="https://host" target="_blank"><img class="media" data-src="https://host" alt=""></a></div></figure>'], '']);
|
|
44
|
-
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><span class="figtext"></span></figcaption><div><a href="https://host" target="_blank"><img class="media" data-src="https://host" alt=""></a></div></figure>'], '']);
|
|
45
|
-
assert.deepStrictEqual(inspect(parser('[$group-name]\n!https://host\ncaption')), [['<figure data-type="media" data-label="group-name" data-group="group"><figcaption><span class="figindex"></span><span class="figtext">caption</span></figcaption><div><a href="https://host" target="_blank"><img class="media" data-src="https://host" alt=""></a></div></figure>'], '']);
|
|
46
|
-
assert.deepStrictEqual(inspect(parser('[$group-name]\n!https://host\ncaption\n')), [['<figure data-type="media" data-label="group-name" data-group="group"><figcaption><span class="figindex"></span><span class="figtext">caption</span></figcaption><div><a href="https://host" target="_blank"><img class="media" data-src="https://host" alt=""></a></div></figure>'], '']);
|
|
47
|
-
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><span class="figtext"></span></figcaption><div><a href="https://host" target="_blank"><img class="media" data-src="https://host" alt=""></a></div></figure>'], '']);
|
|
43
|
+
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><span class="figtext"></span></figcaption><div><a href="https://host" target="_blank"><img class="media" data-src="https://host" alt="https://host"></a></div></figure>'], '']);
|
|
44
|
+
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><span class="figtext"></span></figcaption><div><a href="https://host" target="_blank"><img class="media" data-src="https://host" alt="https://host"></a></div></figure>'], '']);
|
|
45
|
+
assert.deepStrictEqual(inspect(parser('[$group-name]\n!https://host\ncaption')), [['<figure data-type="media" data-label="group-name" data-group="group"><figcaption><span class="figindex"></span><span class="figtext">caption</span></figcaption><div><a href="https://host" target="_blank"><img class="media" data-src="https://host" alt="https://host"></a></div></figure>'], '']);
|
|
46
|
+
assert.deepStrictEqual(inspect(parser('[$group-name]\n!https://host\ncaption\n')), [['<figure data-type="media" data-label="group-name" data-group="group"><figcaption><span class="figindex"></span><span class="figtext">caption</span></figcaption><div><a href="https://host" target="_blank"><img class="media" data-src="https://host" alt="https://host"></a></div></figure>'], '']);
|
|
47
|
+
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><span class="figtext"></span></figcaption><div><a href="https://host" target="_blank"><img class="media" data-src="https://host" alt="https://host"></a></div></figure>'], '']);
|
|
48
48
|
});
|
|
49
49
|
|
|
50
50
|
});
|
|
@@ -23,13 +23,13 @@ describe('Unit: parser/block/extension/figure', () => {
|
|
|
23
23
|
assert.deepStrictEqual(inspect(parser('~~~figure [$group-name]a\nhttps://host\n~~~')), [['<pre class="invalid" translate="no">~~~figure [$group-name]a\nhttps://host\n~~~</pre>'], '']);
|
|
24
24
|
assert.deepStrictEqual(inspect(parser('~~~figure [$group-name]a\n!https://host\n~~~')), [['<pre class="invalid" translate="no">~~~figure [$group-name]a\n!https://host\n~~~</pre>'], '']);
|
|
25
25
|
assert.deepStrictEqual(inspect(parser('~~~figure [$group-name] a\nhttps://host\n~~~')), [['<pre class="invalid" translate="no">~~~figure [$group-name] a\nhttps://host\n~~~</pre>'], '']);
|
|
26
|
-
assert.deepStrictEqual(inspect(parser('~~~figure [$group-name] a\n!https://host\n~~~')), [['<figure data-type="media" data-label="group-name" data-group="group" class="invalid"><figcaption><span class="figindex"></span><span class="figtext"></span></figcaption><div><a href="https://host" target="_blank"><img class="media" data-src="https://host" alt=""></a></div></figure>'], '']);
|
|
26
|
+
assert.deepStrictEqual(inspect(parser('~~~figure [$group-name] a\n!https://host\n~~~')), [['<figure data-type="media" data-label="group-name" data-group="group" class="invalid"><figcaption><span class="figindex"></span><span class="figtext"></span></figcaption><div><a href="https://host" target="_blank"><img class="media" data-src="https://host" alt="https://host"></a></div></figure>'], '']);
|
|
27
27
|
assert.deepStrictEqual(inspect(parser('~~~figure a[$group-name]\n!https://host\n~~~')), [['<pre class="invalid" translate="no">~~~figure a[$group-name]\n!https://host\n~~~</pre>'], '']);
|
|
28
28
|
assert.deepStrictEqual(inspect(parser('~~~figure a [$group-name]\n!https://host\n~~~')), [['<pre class="invalid" translate="no">~~~figure a [$group-name]\n!https://host\n~~~</pre>'], '']);
|
|
29
29
|
assert.deepStrictEqual(inspect(parser('~~~ [$group-name]\n!https://host\n~~~')), undefined);
|
|
30
30
|
assert.deepStrictEqual(inspect(parser('~~~ $group-name\n!https://host\n~~~')), undefined);
|
|
31
31
|
assert.deepStrictEqual(inspect(parser(' ~~~figure [$group-name]\n!https://host\n~~~')), undefined);
|
|
32
|
-
assert.deepStrictEqual(inspect(parser('~~~figure [$-name]\n!https://host\n~~~')), [['<figure data-type="media" data-label="$-name" data-group="$" class="invalid"><figcaption><span class="figindex"></span><span class="figtext"></span></figcaption><div><a href="https://host" target="_blank"><img class="media" data-src="https://host" alt=""></a></div></figure>'], '']);
|
|
32
|
+
assert.deepStrictEqual(inspect(parser('~~~figure [$-name]\n!https://host\n~~~')), [['<figure data-type="media" data-label="$-name" data-group="$" class="invalid"><figcaption><span class="figindex"></span><span class="figtext"></span></figcaption><div><a href="https://host" target="_blank"><img class="media" data-src="https://host" alt="https://host"></a></div></figure>'], '']);
|
|
33
33
|
assert.deepStrictEqual(inspect(parser('~~~figure [$fig-name]\n> \n\n~~~')), [['<figure data-type="quote" data-label="fig-name" data-group="fig" class="invalid"><figcaption><span class="figindex"></span><span class="figtext"></span></figcaption><div><blockquote></blockquote></div></figure>'], '']);
|
|
34
34
|
assert.deepStrictEqual(inspect(parser('~~~figure [$figure-name]\n> \n\n~~~')), [['<figure data-type="quote" data-label="figure-name" data-group="figure" class="invalid"><figcaption><span class="figindex"></span><span class="figtext"></span></figcaption><div><blockquote></blockquote></div></figure>'], '']);
|
|
35
35
|
assert.deepStrictEqual(inspect(parser('~~~figure [$table-name]\n> \n\n~~~')), [['<figure data-type="quote" data-label="table-name" data-group="table" class="invalid"><figcaption><span class="figindex"></span><span class="figtext"></span></figcaption><div><blockquote></blockquote></div></figure>'], '']);
|
|
@@ -38,12 +38,12 @@ describe('Unit: parser/block/extension/figure', () => {
|
|
|
38
38
|
});
|
|
39
39
|
|
|
40
40
|
it('valid', () => {
|
|
41
|
-
assert.deepStrictEqual(inspect(parser('~~~figure [$group-name]\n!https://host\n~~~')), [['<figure data-type="media" data-label="group-name" data-group="group"><figcaption><span class="figindex"></span><span class="figtext"></span></figcaption><div><a href="https://host" target="_blank"><img class="media" data-src="https://host" alt=""></a></div></figure>'], '']);
|
|
42
|
-
assert.deepStrictEqual(inspect(parser('~~~figure [$group-name]\n!https://host\n~~~\n')), [['<figure data-type="media" data-label="group-name" data-group="group"><figcaption><span class="figindex"></span><span class="figtext"></span></figcaption><div><a href="https://host" target="_blank"><img class="media" data-src="https://host" alt=""></a></div></figure>'], '']);
|
|
43
|
-
assert.deepStrictEqual(inspect(parser('~~~figure [$group-name]\n!https://host\n\n~~~')), [['<figure data-type="media" data-label="group-name" data-group="group"><figcaption><span class="figindex"></span><span class="figtext"></span></figcaption><div><a href="https://host" target="_blank"><img class="media" data-src="https://host" alt=""></a></div></figure>'], '']);
|
|
44
|
-
assert.deepStrictEqual(inspect(parser('~~~figure [$group-name]\n!https://host\n\n\n~~~')), [['<figure data-type="media" data-label="group-name" data-group="group"><figcaption><span class="figindex"></span><span class="figtext"></span></figcaption><div><a href="https://host" target="_blank"><img class="media" data-src="https://host" alt=""></a></div></figure>'], '']);
|
|
45
|
-
assert.deepStrictEqual(inspect(parser('~~~figure [$group-name]\n!https://host\n\n\\\n~~~')), [['<figure data-type="media" data-label="group-name" data-group="group"><figcaption><span class="figindex"></span><span class="figtext">\\</span></figcaption><div><a href="https://host" target="_blank"><img class="media" data-src="https://host" alt=""></a></div></figure>'], '']);
|
|
46
|
-
assert.deepStrictEqual(inspect(parser('~~~figure [$group-name]\n!https://host\n\n!https://caption\n~~~')), [['<figure data-type="media" data-label="group-name" data-group="group"><figcaption><span class="figindex"></span><span class="figtext">!<a class="url" href="https://caption" target="_blank">https://caption</a></span></figcaption><div><a href="https://host" target="_blank"><img class="media" data-src="https://host" alt=""></a></div></figure>'], '']);
|
|
41
|
+
assert.deepStrictEqual(inspect(parser('~~~figure [$group-name]\n!https://host\n~~~')), [['<figure data-type="media" data-label="group-name" data-group="group"><figcaption><span class="figindex"></span><span class="figtext"></span></figcaption><div><a href="https://host" target="_blank"><img class="media" data-src="https://host" alt="https://host"></a></div></figure>'], '']);
|
|
42
|
+
assert.deepStrictEqual(inspect(parser('~~~figure [$group-name]\n!https://host\n~~~\n')), [['<figure data-type="media" data-label="group-name" data-group="group"><figcaption><span class="figindex"></span><span class="figtext"></span></figcaption><div><a href="https://host" target="_blank"><img class="media" data-src="https://host" alt="https://host"></a></div></figure>'], '']);
|
|
43
|
+
assert.deepStrictEqual(inspect(parser('~~~figure [$group-name]\n!https://host\n\n~~~')), [['<figure data-type="media" data-label="group-name" data-group="group"><figcaption><span class="figindex"></span><span class="figtext"></span></figcaption><div><a href="https://host" target="_blank"><img class="media" data-src="https://host" alt="https://host"></a></div></figure>'], '']);
|
|
44
|
+
assert.deepStrictEqual(inspect(parser('~~~figure [$group-name]\n!https://host\n\n\n~~~')), [['<figure data-type="media" data-label="group-name" data-group="group"><figcaption><span class="figindex"></span><span class="figtext"></span></figcaption><div><a href="https://host" target="_blank"><img class="media" data-src="https://host" alt="https://host"></a></div></figure>'], '']);
|
|
45
|
+
assert.deepStrictEqual(inspect(parser('~~~figure [$group-name]\n!https://host\n\n\\\n~~~')), [['<figure data-type="media" data-label="group-name" data-group="group"><figcaption><span class="figindex"></span><span class="figtext">\\</span></figcaption><div><a href="https://host" target="_blank"><img class="media" data-src="https://host" alt="https://host"></a></div></figure>'], '']);
|
|
46
|
+
assert.deepStrictEqual(inspect(parser('~~~figure [$group-name]\n!https://host\n\n!https://caption\n~~~')), [['<figure data-type="media" data-label="group-name" data-group="group"><figcaption><span class="figindex"></span><span class="figtext">!<a class="url" href="https://caption" target="_blank">https://caption</a></span></figcaption><div><a href="https://host" target="_blank"><img class="media" data-src="https://host" alt="https://host"></a></div></figure>'], '']);
|
|
47
47
|
assert.deepStrictEqual(inspect(parser('~~~figure [$group-name]\n- a\n~~~')), [['<figure data-type="list" data-label="group-name" data-group="group"><figcaption><span class="figindex"></span><span class="figtext"></span></figcaption><div><ul><li id="index::a">a</li></ul></div></figure>'], '']);
|
|
48
48
|
assert.deepStrictEqual(inspect(parser('~~~figure [$group-name]\n1. a\n~~~')), [['<figure data-type="list" data-label="group-name" data-group="group"><figcaption><span class="figindex"></span><span class="figtext"></span></figcaption><div><ol><li id="index::a">a</li></ol></div></figure>'], '']);
|
|
49
49
|
assert.deepStrictEqual(inspect(parser('~~~figure [$group-name]\n|\n|-\n|\n~~~')), [['<figure data-type="table" data-label="group-name" data-group="group"><figcaption><span class="figindex"></span><span class="figtext"></span></figcaption><div><table><thead><tr></tr></thead><tbody><tr></tr></tbody></table></div></figure>'], '']);
|
|
@@ -58,16 +58,16 @@ describe('Unit: parser/block/extension/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><span class="figtext">caption</span></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><span class="figtext"></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><span class="figtext">caption</span></figcaption><div><blockquote><pre><br>~~~</pre></blockquote></div></figure>'], '']);
|
|
61
|
-
assert.deepStrictEqual(inspect(parser('~~~figure [$group-name]\n![]{https://host}\n~~~')), [['<figure data-type="media" data-label="group-name" data-group="group"><figcaption><span class="figindex"></span><span class="figtext"></span></figcaption><div><a href="https://host" target="_blank"><img class="media" data-src="https://host" alt=""></a></div></figure>'], '']);
|
|
62
|
-
assert.deepStrictEqual(inspect(parser('~~~~figure [$group-name]\n!https://host\n~~~~')), [['<figure data-type="media" data-label="group-name" data-group="group"><figcaption><span class="figindex"></span><span class="figtext"></span></figcaption><div><a href="https://host" target="_blank"><img class="media" data-src="https://host" alt=""></a></div></figure>'], '']);
|
|
63
|
-
assert.deepStrictEqual(inspect(parser('~~~figure $group-name\n!https://host\n~~~')), [['<figure data-type="media" data-label="group-name" data-group="group"><figcaption><span class="figindex"></span><span class="figtext"></span></figcaption><div><a href="https://host" target="_blank"><img class="media" data-src="https://host" alt=""></a></div></figure>'], '']);
|
|
64
|
-
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><span class="figtext"></span></figcaption><div><a href="https://host" target="_blank"><img class="media" data-src="https://host" alt=""></a></div></figure>'], '']);
|
|
65
|
-
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><span class="figtext"></span></figcaption><div><a href="https://host" target="_blank"><img class="media" data-src="https://host" alt=""></a></div></figure>'], '']);
|
|
61
|
+
assert.deepStrictEqual(inspect(parser('~~~figure [$group-name]\n![]{https://host}\n~~~')), [['<figure data-type="media" data-label="group-name" data-group="group"><figcaption><span class="figindex"></span><span class="figtext"></span></figcaption><div><a href="https://host" target="_blank"><img class="media" data-src="https://host" alt="https://host"></a></div></figure>'], '']);
|
|
62
|
+
assert.deepStrictEqual(inspect(parser('~~~~figure [$group-name]\n!https://host\n~~~~')), [['<figure data-type="media" data-label="group-name" data-group="group"><figcaption><span class="figindex"></span><span class="figtext"></span></figcaption><div><a href="https://host" target="_blank"><img class="media" data-src="https://host" alt="https://host"></a></div></figure>'], '']);
|
|
63
|
+
assert.deepStrictEqual(inspect(parser('~~~figure $group-name\n!https://host\n~~~')), [['<figure data-type="media" data-label="group-name" data-group="group"><figcaption><span class="figindex"></span><span class="figtext"></span></figcaption><div><a href="https://host" target="_blank"><img class="media" data-src="https://host" alt="https://host"></a></div></figure>'], '']);
|
|
64
|
+
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><span class="figtext"></span></figcaption><div><a href="https://host" target="_blank"><img class="media" data-src="https://host" alt="https://host"></a></div></figure>'], '']);
|
|
65
|
+
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><span class="figtext"></span></figcaption><div><a href="https://host" target="_blank"><img class="media" data-src="https://host" alt="https://host"></a></div></figure>'], '']);
|
|
66
66
|
assert.deepStrictEqual(inspect(parser('~~~figure [$group-0]\n> \n\n~~~')), [['<figure data-type="quote" data-label="group-0" data-group="group" class="invalid"><figcaption><span class="figindex"></span><span class="figtext"></span></figcaption><div><blockquote></blockquote></div></figure>'], '']);
|
|
67
67
|
assert.deepStrictEqual(inspect(parser('~~~figure [$group-0.0]\n> \n\n~~~')), [['<figure data-type="quote" data-label="group-0.0" data-group="group" class="invalid"><figcaption><span class="figindex"></span><span class="figtext"></span></figcaption><div><blockquote></blockquote></div></figure>'], '']);
|
|
68
68
|
assert.deepStrictEqual(inspect(parser('~~~figure [$-0]\n$$\n\n$$\n~~~')), [['<figure data-type="math" data-label="$-0" data-group="$" class="invalid"><figcaption><span class="figindex"></span><span class="figtext"></span></figcaption><div><div class="math" translate="no">$$\n\n$$</div></div></figure>'], '']);
|
|
69
69
|
assert.deepStrictEqual(inspect(parser('~~~figure [$-0.0]\n$$\n\n$$\n~~~')), [['<figure data-type="math" data-label="$-0.0" data-group="$" class="invalid"><figcaption><span class="figindex"></span><span class="figtext"></span></figcaption><div><div class="math" translate="no">$$\n\n$$</div></div></figure>'], '']);
|
|
70
|
-
assert.deepStrictEqual(inspect(parser('~~~figure [$-name]\n!https://host\n~~~')), [['<figure data-type="media" data-label="$-name" data-group="$" class="invalid"><figcaption><span class="figindex"></span><span class="figtext"></span></figcaption><div><a href="https://host" target="_blank"><img class="media" data-src="https://host" alt=""></a></div></figure>'], '']);
|
|
70
|
+
assert.deepStrictEqual(inspect(parser('~~~figure [$-name]\n!https://host\n~~~')), [['<figure data-type="media" data-label="$-name" data-group="$" class="invalid"><figcaption><span class="figindex"></span><span class="figtext"></span></figcaption><div><a href="https://host" target="_blank"><img class="media" data-src="https://host" alt="https://host"></a></div></figure>'], '']);
|
|
71
71
|
assert.deepStrictEqual(inspect(parser('~~~figure [$-name]\n$$\n\n$$\n\ncaption\n~~~')), [['<figure data-type="math" data-label="$-name" data-group="$" class="invalid"><figcaption><span class="figindex"></span><span class="figtext">caption</span></figcaption><div><div class="math" translate="no">$$\n\n$$</div></div></figure>'], '']);
|
|
72
72
|
assert.deepStrictEqual(inspect(parser(`~~~figure [$group-name]\n${'>\n'.repeat(500)}\n~~~`), '>'), [['<figure data-type="quote" data-label="group-name" data-group="group">'], '']);
|
|
73
73
|
assert.deepStrictEqual(inspect(parser(`~~~figure [$group-name]\n~~~\n0${'\n'.repeat(300)}~~~\n~~~`), '>'), [['<figure data-type="example" data-label="group-name" data-group="group">'], '']);
|
|
@@ -70,6 +70,10 @@ describe('Unit: parser/block/paragraph', () => {
|
|
|
70
70
|
assert.deepStrictEqual(inspect(parser('[%\n<wbr>\n%]\na')), [['<p><span class="remark"><input type="checkbox"><span>[%<br><wbr><br>%]</span></span><br>a</p>'], '']);
|
|
71
71
|
});
|
|
72
72
|
|
|
73
|
+
it('template', () => {
|
|
74
|
+
assert.deepStrictEqual(inspect(parser('{{\n\\\n}}')), [['<p><span class="template">{{<br>\\<br>}}</span></p>'], '']);
|
|
75
|
+
});
|
|
76
|
+
|
|
73
77
|
});
|
|
74
78
|
|
|
75
79
|
});
|
|
@@ -14,8 +14,8 @@ describe('Unit: parser/inline/autolink/url', () => {
|
|
|
14
14
|
assert.deepStrictEqual(inspect(parser('http://[')), [['http'], '://[']);
|
|
15
15
|
assert.deepStrictEqual(inspect(parser('http://]')), [['http'], '://]']);
|
|
16
16
|
assert.deepStrictEqual(inspect(parser('Http://host')), [['Http'], '://host']);
|
|
17
|
-
|
|
18
|
-
|
|
17
|
+
assert.deepStrictEqual(inspect(parser('http://[::ffff:0:0%1]')), [['<a class="invalid">http://[::ffff:0:0%1]</a>'], '']);
|
|
18
|
+
assert.deepStrictEqual(inspect(parser('http://[::ffff:0:0/96]')), [['<a class="invalid">http://[::ffff:0:0/96]</a>'], '']);
|
|
19
19
|
assert.deepStrictEqual(inspect(parser(' http://host')), undefined);
|
|
20
20
|
});
|
|
21
21
|
|
|
@@ -50,6 +50,7 @@ describe('Unit: parser/inline/bracket', () => {
|
|
|
50
50
|
assert.deepStrictEqual(inspect(parser('(A、B)')), [['(', 'A、B', ')'], '']);
|
|
51
51
|
assert.deepStrictEqual(inspect(parser('(<bdi>a\\\nb</bdi>)')), [['<span class="paren">(<bdi>a<br>b</bdi>)</span>'], '']);
|
|
52
52
|
assert.deepStrictEqual(inspect(parser('([% a\\\nb %])')), [['<span class="paren">(<span class="remark"><input type="checkbox"><span>[% a<br>b %]</span></span>)</span>'], '']);
|
|
53
|
+
assert.deepStrictEqual(inspect(parser('({{\\\n}})')), [['<span class="paren">(<span class="template">{{\\<br>}}</span>)</span>'], '']);
|
|
53
54
|
});
|
|
54
55
|
|
|
55
56
|
it('[', () => {
|
|
@@ -6,7 +6,7 @@ import { html } from 'typed-dom/dom';
|
|
|
6
6
|
export const code: CodeParser = validate(
|
|
7
7
|
({ source, context }) =>
|
|
8
8
|
source[0] === '`' &&
|
|
9
|
-
!getBacktrack(context, [1 | Backtrack.bracket], source
|
|
9
|
+
!getBacktrack(context, [1 | Backtrack.bracket], source),
|
|
10
10
|
match(
|
|
11
11
|
/^(`+)(?!`)([^\n]*?)(?:((?<!`)\1(?!`))|$|\n)/,
|
|
12
12
|
([whole, , body, closer]) => ({ source, context }) =>
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { ExtensionParser } from '../../inline';
|
|
2
|
-
import { State, Backtrack
|
|
2
|
+
import { State, Backtrack } from '../../context';
|
|
3
3
|
import { eval } from '../../../combinator/data/parser';
|
|
4
4
|
import { union, inits, some, precedence, state, constraint, validate, surround, lazy, fmap } from '../../../combinator';
|
|
5
5
|
import { inline } from '../../inline';
|
|
@@ -43,14 +43,13 @@ export const signature: IndexParser.SignatureParser = lazy(() => validate('|', s
|
|
|
43
43
|
tightStart(some(union([inline]), ']')),
|
|
44
44
|
/^(?=])/,
|
|
45
45
|
false,
|
|
46
|
-
(
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
: [unshift(as, bs), rest];
|
|
46
|
+
(_, rest, context) => {
|
|
47
|
+
//context.offset ??= 0;
|
|
48
|
+
//context.offset += rest.length;
|
|
49
|
+
const sig = eval(parser({ source: context.recent![1], context }), []).join('');
|
|
50
|
+
//context.offset -= rest.length;
|
|
51
|
+
const index = identity('index', undefined, sig)?.slice(7);
|
|
52
|
+
return [[html('span', { class: 'indexer', 'data-index': index })], rest];
|
|
54
53
|
},
|
|
55
54
|
([as, bs], rest) => [unshift(as, bs), rest])));
|
|
56
55
|
|
|
@@ -36,16 +36,16 @@ describe('Unit: parser/inline/html', () => {
|
|
|
36
36
|
assert.deepStrictEqual(inspect(parser('<bdi>\na</bdi>')), [['<span class="invalid"><bdi><br>a</bdi></span>'], '']);
|
|
37
37
|
assert.deepStrictEqual(inspect(parser('<bdi>\\\na</bdi>')), [['<span class="invalid"><bdi><br>a</bdi></span>'], '']);
|
|
38
38
|
assert.deepStrictEqual(inspect(parser('<bdi>a')), [['<span class="invalid"><bdi>a</span>'], '']);
|
|
39
|
-
assert.deepStrictEqual(inspect(parser('<bdi>a</
|
|
40
|
-
assert.deepStrictEqual(inspect(parser('<BDI>a</BDI>')), [['<span class="invalid"><BDI>
|
|
41
|
-
assert.deepStrictEqual(inspect(parser('<BDI>a</
|
|
39
|
+
assert.deepStrictEqual(inspect(parser('<bdi>a</BDI>')), [['<span class="invalid"><bdi>a</BDI></span>'], '']);
|
|
40
|
+
assert.deepStrictEqual(inspect(parser('<BDI>a</BDI>')), [['<span class="invalid"><BDI></span>'], 'a</BDI>']);
|
|
41
|
+
assert.deepStrictEqual(inspect(parser('<BDI>a</bdi>')), [['<span class="invalid"><BDI></span>'], 'a</bdi>']);
|
|
42
42
|
assert.deepStrictEqual(inspect(parser('</bdi>')), undefined);
|
|
43
43
|
assert.deepStrictEqual(inspect(parser('<bdi/>')), undefined);
|
|
44
44
|
assert.deepStrictEqual(inspect(parser('<b><b><b>a</b></b></b>')), [['<span class="invalid"><b><span class="invalid"><b><span class="invalid"><b>a</b></span></b></span></b></span>'], '']);
|
|
45
45
|
assert.deepStrictEqual(inspect(parser('<bdi><bdi><bdi>a</bdi></bdi></bdi>')), [['<bdi><bdi><bdi>a</bdi></bdi></bdi>'], '']);
|
|
46
46
|
assert.deepStrictEqual(inspect(parser('<x a="*b*"')), undefined);
|
|
47
47
|
assert.deepStrictEqual(inspect(parser('<x a="*b*">')), [['<span class="invalid"><x a="*b*"></span>'], '']);
|
|
48
|
-
assert.deepStrictEqual(inspect(parser('<x a="*b*">c')), [['<span class="invalid"><x a="*b*">
|
|
48
|
+
assert.deepStrictEqual(inspect(parser('<x a="*b*">c')), [['<span class="invalid"><x a="*b*"></span>'], 'c']);
|
|
49
49
|
assert.deepStrictEqual(inspect(parser('<bdi a="*b*"')), undefined);
|
|
50
50
|
assert.deepStrictEqual(inspect(parser('<bdi a="*b*">')), [['<span class="invalid"><bdi a="*b*"></span>'], '']);
|
|
51
51
|
assert.deepStrictEqual(inspect(parser('<bdi a="*b*">c')), [['<span class="invalid"><bdi a="*b*">c</span>'], '']);
|
|
@@ -6,7 +6,6 @@ import { str } from '../source';
|
|
|
6
6
|
import { isLooseNodeStart, blankWith } from '../visibility';
|
|
7
7
|
import { invalid } from '../util';
|
|
8
8
|
import { memoize } from 'spica/memoize';
|
|
9
|
-
import { Clock } from 'spica/clock';
|
|
10
9
|
import { unshift, push, splice } from 'spica/array';
|
|
11
10
|
import { html as h, defrag } from 'typed-dom/dom';
|
|
12
11
|
|
|
@@ -21,16 +20,15 @@ Object.values(attrspecs).forEach(o => Object.setPrototypeOf(o, null));
|
|
|
21
20
|
|
|
22
21
|
export const html: HTMLParser = lazy(() => validate(/^<[a-z]+(?=[^\S\n]|>)/i,
|
|
23
22
|
union([
|
|
24
|
-
focus(
|
|
25
|
-
/^<wbr[^\S\n]*>/i,
|
|
26
|
-
() => [[h('wbr')], '']),
|
|
27
23
|
surround(
|
|
28
24
|
// https://html.spec.whatwg.org/multipage/syntax.html#void-elements
|
|
29
25
|
str(/^<(?:area|base|br|col|embed|hr|img|input|link|meta|source|track|wbr)(?=[^\S\n]|>)/i),
|
|
30
26
|
some(union([attribute])),
|
|
31
27
|
str(/^[^\S\n]*>/), true,
|
|
32
28
|
([as, bs = [], cs], rest) =>
|
|
33
|
-
|
|
29
|
+
as[0].slice(1) === 'wbr' && bs.length === 0
|
|
30
|
+
? [[h(as[0].slice(1) as 'wbr')], rest]
|
|
31
|
+
: [[elem(as[0].slice(1), push(unshift(as, bs), cs), [], [])], rest],
|
|
34
32
|
undefined,
|
|
35
33
|
[3 | Backtrack.bracket]),
|
|
36
34
|
match(
|
|
@@ -53,26 +51,15 @@ export const html: HTMLParser = lazy(() => validate(/^<[a-z]+(?=[^\S\n]|>)/i,
|
|
|
53
51
|
[[elem(tag, as, bs, [])], rest]),
|
|
54
52
|
([, tag]) => tag,
|
|
55
53
|
new Map())),
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
([
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
subsequence([
|
|
66
|
-
focus(/^[^\S\n]*\n/, some(inline)),
|
|
67
|
-
some(inline, `</${tag}>`, [[`</${tag}>`, 3]]),
|
|
68
|
-
]))),
|
|
69
|
-
str(`</${tag}>`), true,
|
|
70
|
-
([as, bs = [], cs], rest) =>
|
|
71
|
-
[[elem(tag, as, bs, cs)], rest],
|
|
72
|
-
([as, bs = []], rest) =>
|
|
73
|
-
[[elem(tag, as, bs, [])], rest]),
|
|
74
|
-
([, tag]) => tag,
|
|
75
|
-
new Clock(10000))),
|
|
54
|
+
surround(
|
|
55
|
+
// https://html.spec.whatwg.org/multipage/syntax.html#void-elements
|
|
56
|
+
str(/^<[a-z]+(?=[^\S\n]|>)/i),
|
|
57
|
+
some(union([attribute])),
|
|
58
|
+
str(/^[^\S\n]*>/), true,
|
|
59
|
+
([as, bs = [], cs], rest) =>
|
|
60
|
+
[[elem(as[0].slice(1), push(unshift(as, bs), cs), [], [])], rest],
|
|
61
|
+
undefined,
|
|
62
|
+
[3 | Backtrack.bracket]),
|
|
76
63
|
])));
|
|
77
64
|
|
|
78
65
|
export const attribute: HTMLParser.AttributeParser = union([
|
|
@@ -1,22 +1,22 @@
|
|
|
1
1
|
import { HTMLEntityParser, UnsafeHTMLEntityParser } from '../inline';
|
|
2
|
-
import { Command } from '../context';
|
|
3
2
|
import { union, validate, focus, fmap } from '../../combinator';
|
|
4
3
|
import { invalid } from '../util';
|
|
5
4
|
import { html } from 'typed-dom/dom';
|
|
6
5
|
|
|
7
6
|
export const unsafehtmlentity: UnsafeHTMLEntityParser = validate('&', focus(
|
|
8
7
|
/^&[0-9A-Za-z]{1,99};/,
|
|
9
|
-
({ source }) => [[parser(source) ?? `${Command.Error}${source}`], '']));
|
|
8
|
+
//({ source }) => [[parser(source) ?? `${Command.Error}${source}`], '']));
|
|
9
|
+
({ source }) => [[parser(source) ?? source], '']));
|
|
10
10
|
|
|
11
11
|
export const htmlentity: HTMLEntityParser = fmap(
|
|
12
12
|
union([unsafehtmlentity]),
|
|
13
13
|
([text]) => [
|
|
14
|
-
text[0]
|
|
15
|
-
?
|
|
14
|
+
text.length === 1 || text[0] !== '&'
|
|
15
|
+
? text
|
|
16
|
+
: html('span', {
|
|
16
17
|
class: 'invalid',
|
|
17
18
|
...invalid('htmlentity', 'syntax', 'Invalid HTML entity'),
|
|
18
|
-
|
|
19
|
-
: text,
|
|
19
|
+
}, text)
|
|
20
20
|
]);
|
|
21
21
|
|
|
22
22
|
const parser = (el => (entity: string): string | undefined => {
|