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/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[], Context, []> {
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.TagParser,
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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "securemark",
3
- "version": "0.289.6",
3
+ "version": "0.290.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",
@@ -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(1 + 0)}{{(([[[\`http://[${'.'.repeat(12493)}`;
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(1 + 1)}{{(([[[\`http://[${'.'.repeat(12493)}`;
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>&lt;wbr&gt;<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
- //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>'], '']);
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, source.length - 1),
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, Command } from '../../context';
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
- ([as, bs], rest, { recent = [] }) => {
47
- const sig = eval(parser({ source: recent[1], context: {} }), []).join('');
48
- const index = sig.includes(Command.Error)
49
- ? undefined
50
- : identity('index', undefined, sig)?.slice(7);
51
- return index
52
- ? [[html('span', { class: 'indexer', 'data-index': index })], rest]
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">&lt;bdi&gt;<br>a&lt;/bdi&gt;</span>'], '']);
37
37
  assert.deepStrictEqual(inspect(parser('<bdi>\\\na</bdi>')), [['<span class="invalid">&lt;bdi&gt;<br>a&lt;/bdi&gt;</span>'], '']);
38
38
  assert.deepStrictEqual(inspect(parser('<bdi>a')), [['<span class="invalid">&lt;bdi&gt;a</span>'], '']);
39
- assert.deepStrictEqual(inspect(parser('<bdi>a</BDO>')), [['<span class="invalid">&lt;bdi&gt;a&lt;/BDO&gt;</span>'], '']);
40
- assert.deepStrictEqual(inspect(parser('<BDI>a</BDI>')), [['<span class="invalid">&lt;BDI&gt;a&lt;/BDI&gt;</span>'], '']);
41
- assert.deepStrictEqual(inspect(parser('<BDI>a</bdo>')), [['<span class="invalid">&lt;BDI&gt;a&lt;/bdo&gt;</span>'], '']);
39
+ assert.deepStrictEqual(inspect(parser('<bdi>a</BDI>')), [['<span class="invalid">&lt;bdi&gt;a&lt;/BDI&gt;</span>'], '']);
40
+ assert.deepStrictEqual(inspect(parser('<BDI>a</BDI>')), [['<span class="invalid">&lt;BDI&gt;</span>'], 'a</BDI>']);
41
+ assert.deepStrictEqual(inspect(parser('<BDI>a</bdi>')), [['<span class="invalid">&lt;BDI&gt;</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">&lt;b&gt;<span class="invalid">&lt;b&gt;<span class="invalid">&lt;b&gt;a&lt;/b&gt;</span>&lt;/b&gt;</span>&lt;/b&gt;</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">&lt;x a="*b*"&gt;</span>'], '']);
48
- assert.deepStrictEqual(inspect(parser('<x a="*b*">c')), [['<span class="invalid">&lt;x a="*b*"&gt;c</span>'], '']);
48
+ assert.deepStrictEqual(inspect(parser('<x a="*b*">c')), [['<span class="invalid">&lt;x a="*b*"&gt;</span>'], 'c']);
49
49
  assert.deepStrictEqual(inspect(parser('<bdi a="*b*"')), undefined);
50
50
  assert.deepStrictEqual(inspect(parser('<bdi a="*b*">')), [['<span class="invalid">&lt;bdi a="*b*"&gt;</span>'], '']);
51
51
  assert.deepStrictEqual(inspect(parser('<bdi a="*b*">c')), [['<span class="invalid">&lt;bdi a="*b*"&gt;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
- [[elem(as[0].slice(1), push(unshift(as, bs), cs), [], [])], rest],
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
- match(
57
- /^<([a-z]+)(?=[^\S\n]|>)/i,
58
- memoize(
59
- ([, tag]) =>
60
- surround<HTMLParser.TagParser, string>(
61
- surround(
62
- str(`<${tag}`), some(attribute), str(/^[^\S\n]*>/), true,
63
- undefined, undefined, [3 | Backtrack.bracket]),
64
- precedence(3, recursion(Recursion.inline,
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] === Command.Error
15
- ? html('span', {
14
+ text.length === 1 || text[0] !== '&'
15
+ ? text
16
+ : html('span', {
16
17
  class: 'invalid',
17
18
  ...invalid('htmlentity', 'syntax', 'Invalid HTML entity'),
18
- }, text.slice(1))
19
- : text,
19
+ }, text)
20
20
  ]);
21
21
 
22
22
  const parser = (el => (entity: string): string | undefined => {