securemark 0.295.0 → 0.295.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +8 -0
- package/design.md +4 -3
- package/dist/index.js +529 -484
- package/markdown.d.ts +13 -28
- package/package.json +1 -1
- package/src/combinator/control/constraint/block.test.ts +6 -8
- package/src/combinator/control/constraint/contract.ts +7 -7
- package/src/combinator/control/constraint/line.test.ts +7 -9
- package/src/combinator/control/constraint/line.ts +0 -1
- package/src/combinator/control/manipulation/clear.ts +2 -2
- package/src/combinator/control/manipulation/convert.ts +3 -3
- package/src/combinator/control/manipulation/duplicate.ts +4 -4
- package/src/combinator/control/manipulation/fallback.ts +2 -2
- package/src/combinator/control/manipulation/fence.ts +3 -3
- package/src/combinator/control/manipulation/indent.test.ts +20 -22
- package/src/combinator/control/manipulation/indent.ts +2 -2
- package/src/combinator/control/manipulation/recovery.ts +3 -3
- package/src/combinator/control/manipulation/reverse.ts +2 -2
- package/src/combinator/control/manipulation/scope.ts +2 -4
- package/src/combinator/control/manipulation/surround.ts +66 -66
- package/src/combinator/control/monad/bind.ts +6 -6
- package/src/combinator/control/monad/fmap.ts +6 -6
- package/src/combinator/data/data.ts +2 -2
- package/src/combinator/data/{parser/context/delimiter.ts → delimiter.ts} +4 -4
- package/src/combinator/data/parser/context.test.ts +12 -11
- package/src/combinator/data/parser/context.ts +13 -14
- package/src/combinator/data/parser/inits.ts +5 -5
- package/src/combinator/data/parser/sequence.test.ts +12 -13
- package/src/combinator/data/parser/sequence.ts +5 -5
- package/src/combinator/data/parser/some.test.ts +15 -16
- package/src/combinator/data/parser/some.ts +5 -6
- package/src/combinator/data/parser/subsequence.test.ts +16 -17
- package/src/combinator/data/parser/subsequence.ts +3 -3
- package/src/combinator/data/parser/tails.ts +3 -3
- package/src/combinator/data/parser/union.test.ts +12 -13
- package/src/combinator/data/parser/union.ts +3 -3
- package/src/combinator/data/parser.ts +55 -32
- package/src/debug.test.ts +5 -3
- package/src/parser/api/bind.ts +8 -6
- package/src/parser/api/header.ts +4 -4
- package/src/parser/api/normalize.ts +2 -1
- package/src/parser/api/parse.test.ts +7 -6
- package/src/parser/api/parse.ts +9 -8
- package/src/parser/autolink.test.ts +18 -18
- package/src/parser/block/blockquote.test.ts +79 -79
- package/src/parser/block/blockquote.ts +5 -5
- package/src/parser/block/codeblock.test.ts +57 -57
- package/src/parser/block/codeblock.ts +3 -3
- package/src/parser/block/dlist.test.ts +57 -57
- package/src/parser/block/dlist.ts +6 -6
- package/src/parser/block/extension/aside.test.ts +9 -9
- package/src/parser/block/extension/aside.ts +5 -5
- package/src/parser/block/extension/example.test.ts +19 -19
- package/src/parser/block/extension/example.ts +6 -6
- package/src/parser/block/extension/fig.test.ts +36 -36
- package/src/parser/block/extension/figbase.test.ts +16 -16
- package/src/parser/block/extension/figbase.ts +2 -2
- package/src/parser/block/extension/figure.test.ts +63 -63
- package/src/parser/block/extension/figure.ts +3 -3
- package/src/parser/block/extension/message.test.ts +14 -14
- package/src/parser/block/extension/message.ts +5 -5
- package/src/parser/block/extension/placeholder.test.ts +13 -13
- package/src/parser/block/extension/placeholder.ts +2 -2
- package/src/parser/block/extension/table.test.ts +76 -76
- package/src/parser/block/extension/table.ts +14 -14
- package/src/parser/block/extension.test.ts +24 -24
- package/src/parser/block/heading.test.ts +59 -59
- package/src/parser/block/heading.ts +7 -7
- package/src/parser/block/ilist.test.ts +8 -12
- package/src/parser/block/ilist.ts +6 -6
- package/src/parser/block/mathblock.test.ts +32 -32
- package/src/parser/block/mathblock.ts +3 -3
- package/src/parser/block/mediablock.ts +3 -3
- package/src/parser/block/olist.test.ts +103 -103
- package/src/parser/block/olist.ts +5 -5
- package/src/parser/block/pagebreak.test.ts +16 -16
- package/src/parser/block/pagebreak.ts +2 -2
- package/src/parser/block/paragraph.test.ts +58 -58
- package/src/parser/block/paragraph.ts +2 -2
- package/src/parser/block/reply/cite.test.ts +40 -40
- package/src/parser/block/reply/cite.ts +6 -6
- package/src/parser/block/reply/quote.test.ts +51 -51
- package/src/parser/block/reply/quote.ts +3 -3
- package/src/parser/block/reply.test.ts +20 -20
- package/src/parser/block/reply.ts +3 -3
- package/src/parser/block/sidefence.test.ts +48 -48
- package/src/parser/block/sidefence.ts +4 -4
- package/src/parser/block/table.test.ts +50 -50
- package/src/parser/block/table.ts +12 -12
- package/src/parser/block/ulist.test.ts +53 -53
- package/src/parser/block/ulist.ts +6 -6
- package/src/parser/block.ts +6 -4
- package/src/parser/context.ts +39 -0
- package/src/parser/header.test.ts +23 -23
- package/src/parser/header.ts +5 -5
- package/src/parser/inline/annotation.test.ts +43 -43
- package/src/parser/inline/annotation.ts +15 -5
- package/src/parser/inline/autolink/account.test.ts +33 -33
- package/src/parser/inline/autolink/account.ts +9 -9
- package/src/parser/inline/autolink/anchor.test.ts +22 -22
- package/src/parser/inline/autolink/anchor.ts +4 -4
- package/src/parser/inline/autolink/channel.test.ts +15 -15
- package/src/parser/inline/autolink/email.test.ts +37 -37
- package/src/parser/inline/autolink/email.ts +2 -2
- package/src/parser/inline/autolink/hashnum.test.ts +33 -33
- package/src/parser/inline/autolink/hashnum.ts +6 -5
- package/src/parser/inline/autolink/hashtag.test.ts +60 -60
- package/src/parser/inline/autolink/hashtag.ts +4 -4
- package/src/parser/inline/autolink/url.test.ts +75 -75
- package/src/parser/inline/autolink/url.ts +4 -4
- package/src/parser/inline/bracket.test.ts +70 -70
- package/src/parser/inline/bracket.ts +35 -32
- package/src/parser/inline/code.test.ts +31 -31
- package/src/parser/inline/code.ts +4 -4
- package/src/parser/inline/deletion.test.ts +28 -28
- package/src/parser/inline/deletion.ts +4 -4
- package/src/parser/inline/emphasis.test.ts +40 -40
- package/src/parser/inline/emphasis.ts +3 -3
- package/src/parser/inline/emstrong.test.ts +101 -101
- package/src/parser/inline/emstrong.ts +23 -23
- package/src/parser/inline/extension/index.test.ts +92 -92
- package/src/parser/inline/extension/index.ts +5 -5
- package/src/parser/inline/extension/indexee.ts +5 -5
- package/src/parser/inline/extension/indexer.test.ts +24 -24
- package/src/parser/inline/extension/indexer.ts +2 -2
- package/src/parser/inline/extension/label.test.ts +33 -33
- package/src/parser/inline/extension/label.ts +2 -2
- package/src/parser/inline/extension/placeholder.test.ts +43 -43
- package/src/parser/inline/extension/placeholder.ts +4 -4
- package/src/parser/inline/html.test.ts +108 -108
- package/src/parser/inline/html.ts +10 -10
- package/src/parser/inline/htmlentity.test.ts +38 -38
- package/src/parser/inline/htmlentity.ts +5 -5
- package/src/parser/inline/insertion.test.ts +28 -28
- package/src/parser/inline/insertion.ts +4 -4
- package/src/parser/inline/italic.test.ts +55 -55
- package/src/parser/inline/italic.ts +4 -4
- package/src/parser/inline/link.test.ts +186 -187
- package/src/parser/inline/link.ts +16 -17
- package/src/parser/inline/mark.test.ts +31 -31
- package/src/parser/inline/mark.ts +5 -5
- package/src/parser/inline/math.test.ts +132 -132
- package/src/parser/inline/math.ts +2 -2
- package/src/parser/inline/media.test.ts +91 -91
- package/src/parser/inline/media.ts +15 -15
- package/src/parser/inline/reference.test.ts +109 -109
- package/src/parser/inline/reference.ts +16 -55
- package/src/parser/inline/remark.test.ts +50 -50
- package/src/parser/inline/remark.ts +5 -5
- package/src/parser/inline/ruby.test.ts +45 -45
- package/src/parser/inline/ruby.ts +17 -17
- package/src/parser/inline/shortmedia.test.ts +10 -10
- package/src/parser/inline/strong.test.ts +37 -37
- package/src/parser/inline/strong.ts +3 -3
- package/src/parser/inline/template.test.ts +23 -23
- package/src/parser/inline/template.ts +5 -5
- package/src/parser/inline.test.ts +224 -223
- package/src/parser/segment.ts +2 -2
- package/src/parser/source/escapable.test.ts +24 -24
- package/src/parser/source/escapable.ts +8 -8
- package/src/parser/source/line.test.ts +18 -18
- package/src/parser/source/str.ts +2 -2
- package/src/parser/source/text.test.ts +85 -85
- package/src/parser/source/text.ts +5 -5
- package/src/parser/source/unescapable.test.ts +24 -24
- package/src/parser/source/unescapable.ts +5 -5
- package/src/parser/util.ts +10 -11
- package/src/parser/visibility.ts +8 -9
- package/src/util/quote.ts +2 -1
|
@@ -1,58 +1,58 @@
|
|
|
1
1
|
import { placeholder } from './placeholder';
|
|
2
2
|
import { some } from '../../../combinator';
|
|
3
3
|
import { input } from '../../../combinator/data/parser';
|
|
4
|
+
import { Context } from '../../context';
|
|
4
5
|
import { inspect } from '../../../debug.test';
|
|
5
6
|
|
|
6
7
|
describe('Unit: parser/inline/extension/placeholder', () => {
|
|
7
8
|
describe('placeholder', () => {
|
|
8
|
-
const parser =
|
|
9
|
-
const { context: ctx } = input('', {});
|
|
9
|
+
const parser = some(placeholder);
|
|
10
10
|
|
|
11
11
|
it('invalid', () => {
|
|
12
|
-
assert.deepStrictEqual(inspect(parser('[]'
|
|
13
|
-
assert.deepStrictEqual(inspect(parser('[a]'
|
|
14
|
-
assert.deepStrictEqual(inspect(parser('[ab]'
|
|
15
|
-
assert.deepStrictEqual(inspect(parser('[^]'
|
|
16
|
-
assert.deepStrictEqual(inspect(parser('[^]]'
|
|
17
|
-
assert.deepStrictEqual(inspect(parser('[^\\]'
|
|
18
|
-
assert.deepStrictEqual(inspect(parser('[^ ]'
|
|
19
|
-
assert.deepStrictEqual(inspect(parser('[^ a]'
|
|
20
|
-
assert.deepStrictEqual(inspect(parser('[^\\ ]'
|
|
21
|
-
assert.deepStrictEqual(inspect(parser('[^\\ a]'
|
|
22
|
-
assert.deepStrictEqual(inspect(parser('[^\n]'
|
|
23
|
-
assert.deepStrictEqual(inspect(parser('[^\na]'
|
|
24
|
-
assert.deepStrictEqual(inspect(parser('[^\\\na]'
|
|
25
|
-
assert.deepStrictEqual(inspect(parser('[^ !http://host]'
|
|
26
|
-
assert.deepStrictEqual(inspect(parser('[^a'
|
|
27
|
-
assert.deepStrictEqual(inspect(parser('[[]'
|
|
28
|
-
assert.deepStrictEqual(inspect(parser('[]]'
|
|
29
|
-
assert.deepStrictEqual(inspect(parser('[[]]'
|
|
30
|
-
assert.deepStrictEqual(inspect(parser('[[ ]]'
|
|
31
|
-
assert.deepStrictEqual(inspect(parser('[[a]]'
|
|
32
|
-
assert.deepStrictEqual(inspect(parser(' [^a]'
|
|
12
|
+
assert.deepStrictEqual(inspect(parser, input('[]', new Context())), undefined);
|
|
13
|
+
assert.deepStrictEqual(inspect(parser, input('[a]', new Context())), undefined);
|
|
14
|
+
assert.deepStrictEqual(inspect(parser, input('[ab]', new Context())), undefined);
|
|
15
|
+
assert.deepStrictEqual(inspect(parser, input('[^]', new Context())), undefined);
|
|
16
|
+
assert.deepStrictEqual(inspect(parser, input('[^]]', new Context())), undefined);
|
|
17
|
+
assert.deepStrictEqual(inspect(parser, input('[^\\]', new Context())), [['[^', ']'], '']);
|
|
18
|
+
assert.deepStrictEqual(inspect(parser, input('[^ ]', new Context())), undefined);
|
|
19
|
+
assert.deepStrictEqual(inspect(parser, input('[^ a]', new Context())), undefined);
|
|
20
|
+
assert.deepStrictEqual(inspect(parser, input('[^\\ ]', new Context())), undefined);
|
|
21
|
+
assert.deepStrictEqual(inspect(parser, input('[^\\ a]', new Context())), undefined);
|
|
22
|
+
assert.deepStrictEqual(inspect(parser, input('[^\n]', new Context())), undefined);
|
|
23
|
+
assert.deepStrictEqual(inspect(parser, input('[^\na]', new Context())), undefined);
|
|
24
|
+
assert.deepStrictEqual(inspect(parser, input('[^\\\na]', new Context())), undefined);
|
|
25
|
+
assert.deepStrictEqual(inspect(parser, input('[^ !http://host]', new Context())), undefined);
|
|
26
|
+
assert.deepStrictEqual(inspect(parser, input('[^a', new Context())), [['[^', 'a'], '']);
|
|
27
|
+
assert.deepStrictEqual(inspect(parser, input('[[]', new Context())), undefined);
|
|
28
|
+
assert.deepStrictEqual(inspect(parser, input('[]]', new Context())), undefined);
|
|
29
|
+
assert.deepStrictEqual(inspect(parser, input('[[]]', new Context())), undefined);
|
|
30
|
+
assert.deepStrictEqual(inspect(parser, input('[[ ]]', new Context())), undefined);
|
|
31
|
+
assert.deepStrictEqual(inspect(parser, input('[[a]]', new Context())), undefined);
|
|
32
|
+
assert.deepStrictEqual(inspect(parser, input(' [^a]', new Context())), undefined);
|
|
33
33
|
});
|
|
34
34
|
|
|
35
35
|
it('valid', () => {
|
|
36
|
-
assert.deepStrictEqual(inspect(parser('[^a]'
|
|
37
|
-
assert.deepStrictEqual(inspect(parser('[^a b]'
|
|
38
|
-
assert.deepStrictEqual(inspect(parser('[^a ]'
|
|
39
|
-
assert.deepStrictEqual(inspect(parser('[^a ]'
|
|
40
|
-
assert.deepStrictEqual(inspect(parser('[^a\\ ]'
|
|
41
|
-
assert.deepStrictEqual(inspect(parser('[^a\\ \\ ]'
|
|
42
|
-
assert.deepStrictEqual(inspect(parser('[^a\n]'
|
|
43
|
-
assert.deepStrictEqual(inspect(parser('[^a\\\n]'
|
|
44
|
-
assert.deepStrictEqual(inspect(parser('[^a\nb]'
|
|
45
|
-
assert.deepStrictEqual(inspect(parser('[^a\\\nb]'
|
|
46
|
-
assert.deepStrictEqual(inspect(parser('[^a<wbr>]'
|
|
47
|
-
assert.deepStrictEqual(inspect(parser('[^a<wbr><wbr>]'
|
|
48
|
-
assert.deepStrictEqual(inspect(parser('[^==]'
|
|
49
|
-
assert.deepStrictEqual(inspect(parser('[^a[% b %]]'
|
|
50
|
-
assert.deepStrictEqual(inspect(parser('[^a[% b %][% c %]]'
|
|
51
|
-
assert.deepStrictEqual(inspect(parser('[^\\]]'
|
|
52
|
-
assert.deepStrictEqual(inspect(parser('[^(])]'
|
|
53
|
-
assert.deepStrictEqual(inspect(parser('[^!http://host]'
|
|
54
|
-
assert.deepStrictEqual(inspect(parser('[^[% a %]]'
|
|
55
|
-
assert.deepStrictEqual(inspect(parser('[^[% a %]b]'
|
|
36
|
+
assert.deepStrictEqual(inspect(parser, input('[^a]', new Context())), [['<span class="invalid">[^a]</span>'], '']);
|
|
37
|
+
assert.deepStrictEqual(inspect(parser, input('[^a b]', new Context())), [['<span class="invalid">[^a b]</span>'], '']);
|
|
38
|
+
assert.deepStrictEqual(inspect(parser, input('[^a ]', new Context())), [['<span class="invalid">[^a ]</span>'], '']);
|
|
39
|
+
assert.deepStrictEqual(inspect(parser, input('[^a ]', new Context())), [['<span class="invalid">[^a ]</span>'], '']);
|
|
40
|
+
assert.deepStrictEqual(inspect(parser, input('[^a\\ ]', new Context())), [['<span class="invalid">[^a\\ ]</span>'], '']);
|
|
41
|
+
assert.deepStrictEqual(inspect(parser, input('[^a\\ \\ ]', new Context())), [['<span class="invalid">[^a\\ \\ ]</span>'], '']);
|
|
42
|
+
assert.deepStrictEqual(inspect(parser, input('[^a\n]', new Context())), [['<span class="invalid">[^a\n]</span>'], '']);
|
|
43
|
+
assert.deepStrictEqual(inspect(parser, input('[^a\\\n]', new Context())), [['<span class="invalid">[^a\\\n]</span>'], '']);
|
|
44
|
+
assert.deepStrictEqual(inspect(parser, input('[^a\nb]', new Context())), [['<span class="invalid">[^a\nb]</span>'], '']);
|
|
45
|
+
assert.deepStrictEqual(inspect(parser, input('[^a\\\nb]', new Context())), [['<span class="invalid">[^a\\\nb]</span>'], '']);
|
|
46
|
+
assert.deepStrictEqual(inspect(parser, input('[^a<wbr>]', new Context())), [['<span class="invalid">[^a<wbr>]</span>'], '']);
|
|
47
|
+
assert.deepStrictEqual(inspect(parser, input('[^a<wbr><wbr>]', new Context())), [['<span class="invalid">[^a<wbr><wbr>]</span>'], '']);
|
|
48
|
+
assert.deepStrictEqual(inspect(parser, input('[^==]', new Context())), [['<span class="invalid">[^==]</span>'], '']);
|
|
49
|
+
assert.deepStrictEqual(inspect(parser, input('[^a[% b %]]', new Context())), [['<span class="invalid">[^a[% b %]]</span>'], '']);
|
|
50
|
+
assert.deepStrictEqual(inspect(parser, input('[^a[% b %][% c %]]', new Context())), [['<span class="invalid">[^a[% b %][% c %]]</span>'], '']);
|
|
51
|
+
assert.deepStrictEqual(inspect(parser, input('[^\\]]', new Context())), [['<span class="invalid">[^\\]]</span>'], '']);
|
|
52
|
+
assert.deepStrictEqual(inspect(parser, input('[^(])]', new Context())), [['<span class="invalid">[^(])]</span>'], '']);
|
|
53
|
+
assert.deepStrictEqual(inspect(parser, input('[^!http://host]', new Context())), [['<span class="invalid">[^!http://host]</span>'], '']);
|
|
54
|
+
assert.deepStrictEqual(inspect(parser, input('[^[% a %]]', new Context())), [['<span class="invalid">[^[% a %]]</span>'], '']);
|
|
55
|
+
assert.deepStrictEqual(inspect(parser, input('[^[% a %]b]', new Context())), [['<span class="invalid">[^[% a %]b]</span>'], '']);
|
|
56
56
|
});
|
|
57
57
|
|
|
58
58
|
});
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { ExtensionParser } from '../../inline';
|
|
2
2
|
import { Recursion, Backtrack } from '../../context';
|
|
3
|
-
import { List,
|
|
3
|
+
import { List, Node } from '../../../combinator/data/parser';
|
|
4
4
|
import { union, some, recursion, precedence, surround, lazy } from '../../../combinator';
|
|
5
5
|
import { inline } from '../../inline';
|
|
6
6
|
import { str } from '../../source';
|
|
@@ -21,11 +21,11 @@ export const placeholder: ExtensionParser.PlaceholderParser = lazy(() => surroun
|
|
|
21
21
|
false,
|
|
22
22
|
[3 | Backtrack.common],
|
|
23
23
|
(_, context) => new List([
|
|
24
|
-
new
|
|
24
|
+
new Node(html('span',
|
|
25
25
|
{
|
|
26
26
|
class: 'invalid',
|
|
27
27
|
...invalid('extension', 'syntax', `Invalid start symbol or linebreak`),
|
|
28
28
|
},
|
|
29
|
-
context.source.slice(context.position - context.range
|
|
29
|
+
context.source.slice(context.position - context.range, context.position)))
|
|
30
30
|
]),
|
|
31
|
-
([as, bs]) => bs && as.import(bs as List<
|
|
31
|
+
([as, bs]) => bs && as.import(bs as List<Node<string>>)));
|
|
@@ -1,135 +1,135 @@
|
|
|
1
1
|
import { html } from './html';
|
|
2
2
|
import { some } from '../../combinator';
|
|
3
3
|
import { input } from '../../combinator/data/parser';
|
|
4
|
+
import { Context } from '../context';
|
|
4
5
|
import { inspect } from '../../debug.test';
|
|
5
6
|
|
|
6
7
|
describe('Unit: parser/inline/html', () => {
|
|
7
8
|
describe('html', () => {
|
|
8
|
-
const parser =
|
|
9
|
-
const { context: ctx } = input('', {});
|
|
9
|
+
const parser = some(html);
|
|
10
10
|
|
|
11
11
|
it('xss', () => {
|
|
12
|
-
assert.deepStrictEqual(inspect(parser('<script>'
|
|
13
|
-
assert.deepStrictEqual(inspect(parser('<script>alert()<script>'
|
|
14
|
-
assert.deepStrictEqual(inspect(parser('<script>alert()</script>'
|
|
15
|
-
assert.deepStrictEqual(inspect(parser('<bdi onclick="alert()">'
|
|
16
|
-
assert.deepStrictEqual(inspect(parser('<bdi onclick="alert()"></bdi>'
|
|
17
|
-
assert.deepStrictEqual(inspect(parser('<bdi onclick="alert()">a</bdi>'
|
|
18
|
-
assert.deepStrictEqual(inspect(parser('<bdi><bdi onclick="alert()">a</bdi></bdi>'
|
|
12
|
+
assert.deepStrictEqual(inspect(parser, input('<script>', new Context())), [['<span class="invalid"><script></span>'], '']);
|
|
13
|
+
assert.deepStrictEqual(inspect(parser, input('<script>alert()<script>', new Context())), [['<span class="invalid"><script>alert()<script></span>'], '']);
|
|
14
|
+
assert.deepStrictEqual(inspect(parser, input('<script>alert()</script>', new Context())), [['<span class="invalid"><script>alert()</script></span>'], '']);
|
|
15
|
+
assert.deepStrictEqual(inspect(parser, input('<bdi onclick="alert()">', new Context())), [['<span class="invalid"><bdi onclick="alert()"></span>'], '']);
|
|
16
|
+
assert.deepStrictEqual(inspect(parser, input('<bdi onclick="alert()"></bdi>', new Context())), [['<span class="invalid"><bdi onclick="alert()"></bdi></span>'], '']);
|
|
17
|
+
assert.deepStrictEqual(inspect(parser, input('<bdi onclick="alert()">a</bdi>', new Context())), [['<span class="invalid"><bdi onclick="alert()">a</bdi></span>'], '']);
|
|
18
|
+
assert.deepStrictEqual(inspect(parser, input('<bdi><bdi onclick="alert()">a</bdi></bdi>', new Context())), [['<bdi><span class="invalid"><bdi onclick="alert()">a</bdi></span></bdi>'], '']);
|
|
19
19
|
});
|
|
20
20
|
|
|
21
21
|
it('invalid', () => {
|
|
22
|
-
assert.deepStrictEqual(inspect(parser(''
|
|
23
|
-
assert.deepStrictEqual(inspect(parser('<0>'
|
|
24
|
-
assert.deepStrictEqual(inspect(parser('<aT>'
|
|
25
|
-
assert.deepStrictEqual(inspect(parser('<a,b>'
|
|
26
|
-
assert.deepStrictEqual(inspect(parser('<a, b>'
|
|
27
|
-
assert.deepStrictEqual(inspect(parser('<T>'
|
|
28
|
-
assert.deepStrictEqual(inspect(parser('<wbr/>'
|
|
29
|
-
assert.deepStrictEqual(inspect(parser('<wbr />'
|
|
30
|
-
assert.deepStrictEqual(inspect(parser('<bdi>'
|
|
31
|
-
assert.deepStrictEqual(inspect(parser('<bdi>z'
|
|
32
|
-
assert.deepStrictEqual(inspect(parser('<bdi></bdi>'
|
|
33
|
-
assert.deepStrictEqual(inspect(parser('<bdi> </bdi>'
|
|
34
|
-
assert.deepStrictEqual(inspect(parser('<bdi> \n</bdi>'
|
|
35
|
-
assert.deepStrictEqual(inspect(parser('<bdi> \na</bdi>'
|
|
36
|
-
assert.deepStrictEqual(inspect(parser('<bdi>\\ </bdi>'
|
|
37
|
-
assert.deepStrictEqual(inspect(parser('<bdi>	</bdi>'
|
|
38
|
-
assert.deepStrictEqual(inspect(parser('<bdi><wbr></bdi>'
|
|
39
|
-
assert.deepStrictEqual(inspect(parser('<bdi>\n</bdi>'
|
|
40
|
-
assert.deepStrictEqual(inspect(parser('<bdi>\na</bdi>'
|
|
41
|
-
assert.deepStrictEqual(inspect(parser('<bdi>\\\na</bdi>'
|
|
42
|
-
assert.deepStrictEqual(inspect(parser('<bdi>a'
|
|
43
|
-
assert.deepStrictEqual(inspect(parser('<bdi>a</BDI>'
|
|
44
|
-
assert.deepStrictEqual(inspect(parser('<BDI>a</BDI>'
|
|
45
|
-
assert.deepStrictEqual(inspect(parser('<BDI>a</bdi>'
|
|
46
|
-
assert.deepStrictEqual(inspect(parser('</bdi>'
|
|
47
|
-
assert.deepStrictEqual(inspect(parser('<bdi/>'
|
|
48
|
-
assert.deepStrictEqual(inspect(parser('<bdi />'
|
|
49
|
-
assert.deepStrictEqual(inspect(parser('<b><b><b>a</b></b></b>'
|
|
50
|
-
assert.deepStrictEqual(inspect(parser('<bdi><bdi><bdi>a</bdi></bdi></bdi>'
|
|
51
|
-
assert.deepStrictEqual(inspect(parser('<x a="*b*"'
|
|
52
|
-
assert.deepStrictEqual(inspect(parser('<x a="*b*">'
|
|
53
|
-
assert.deepStrictEqual(inspect(parser('<x a="*b*">c'
|
|
54
|
-
assert.deepStrictEqual(inspect(parser('<bdi a="*b*"'
|
|
55
|
-
assert.deepStrictEqual(inspect(parser('<bdi a="*b*">'
|
|
56
|
-
assert.deepStrictEqual(inspect(parser('<bdi a="*b*">c'
|
|
57
|
-
assert.deepStrictEqual(inspect(parser('<bdi a b="*" *c*'
|
|
58
|
-
assert.deepStrictEqual(inspect(parser('<bdi a b="*" *c*>'
|
|
59
|
-
assert.deepStrictEqual(inspect(parser('<bdi a b="*" *c*>d</bdi>'
|
|
60
|
-
assert.deepStrictEqual(inspect(parser('<bdi a b="*" *>*c*'
|
|
61
|
-
assert.deepStrictEqual(inspect(parser('<bdi a b="*" *>*c*</bdi>'
|
|
62
|
-
assert.deepStrictEqual(inspect(parser(' <bdi>a</bdi>'
|
|
22
|
+
assert.deepStrictEqual(inspect(parser, input('', new Context())), undefined);
|
|
23
|
+
assert.deepStrictEqual(inspect(parser, input('<0>', new Context())), undefined);
|
|
24
|
+
assert.deepStrictEqual(inspect(parser, input('<aT>', new Context())), [['<span class="invalid"><aT></span>'], '']);
|
|
25
|
+
assert.deepStrictEqual(inspect(parser, input('<a,b>', new Context())), undefined);
|
|
26
|
+
assert.deepStrictEqual(inspect(parser, input('<a, b>', new Context())), undefined);
|
|
27
|
+
assert.deepStrictEqual(inspect(parser, input('<T>', new Context())), [['<span class="invalid"><T></span>'], '']);
|
|
28
|
+
assert.deepStrictEqual(inspect(parser, input('<wbr/>', new Context())), undefined);
|
|
29
|
+
assert.deepStrictEqual(inspect(parser, input('<wbr />', new Context())), [['<span class="invalid"><wbr /></span>'], '']);
|
|
30
|
+
assert.deepStrictEqual(inspect(parser, input('<bdi>', new Context())), [['<span class="invalid"><bdi></span>'], '']);
|
|
31
|
+
assert.deepStrictEqual(inspect(parser, input('<bdi>z', new Context())), [['<span class="invalid"><bdi>z</span>'], '']);
|
|
32
|
+
assert.deepStrictEqual(inspect(parser, input('<bdi></bdi>', new Context())), [['<span class="invalid"><bdi></bdi></span>'], '']);
|
|
33
|
+
assert.deepStrictEqual(inspect(parser, input('<bdi> </bdi>', new Context())), [['<span class="invalid"><bdi> </bdi></span>'], '']);
|
|
34
|
+
assert.deepStrictEqual(inspect(parser, input('<bdi> \n</bdi>', new Context())), [['<span class="invalid"><bdi> \n</bdi></span>'], '']);
|
|
35
|
+
assert.deepStrictEqual(inspect(parser, input('<bdi> \na</bdi>', new Context())), [['<span class="invalid"><bdi> \na</bdi></span>'], '']);
|
|
36
|
+
assert.deepStrictEqual(inspect(parser, input('<bdi>\\ </bdi>', new Context())), [['<span class="invalid"><bdi>\\ </bdi></span>'], '']);
|
|
37
|
+
assert.deepStrictEqual(inspect(parser, input('<bdi>	</bdi>', new Context())), [['<span class="invalid"><bdi>&Tab;</bdi></span>'], '']);
|
|
38
|
+
assert.deepStrictEqual(inspect(parser, input('<bdi><wbr></bdi>', new Context())), [['<span class="invalid"><bdi><wbr></bdi></span>'], '']);
|
|
39
|
+
assert.deepStrictEqual(inspect(parser, input('<bdi>\n</bdi>', new Context())), [['<span class="invalid"><bdi>\n</bdi></span>'], '']);
|
|
40
|
+
assert.deepStrictEqual(inspect(parser, input('<bdi>\na</bdi>', new Context())), [['<span class="invalid"><bdi>\na</bdi></span>'], '']);
|
|
41
|
+
assert.deepStrictEqual(inspect(parser, input('<bdi>\\\na</bdi>', new Context())), [['<span class="invalid"><bdi>\\\na</bdi></span>'], '']);
|
|
42
|
+
assert.deepStrictEqual(inspect(parser, input('<bdi>a', new Context())), [['<span class="invalid"><bdi>a</span>'], '']);
|
|
43
|
+
assert.deepStrictEqual(inspect(parser, input('<bdi>a</BDI>', new Context())), [['<span class="invalid"><bdi>a</BDI></span>'], '']);
|
|
44
|
+
assert.deepStrictEqual(inspect(parser, input('<BDI>a</BDI>', new Context())), [['<span class="invalid"><BDI></span>'], 'a</BDI>']);
|
|
45
|
+
assert.deepStrictEqual(inspect(parser, input('<BDI>a</bdi>', new Context())), [['<span class="invalid"><BDI></span>'], 'a</bdi>']);
|
|
46
|
+
assert.deepStrictEqual(inspect(parser, input('</bdi>', new Context())), undefined);
|
|
47
|
+
assert.deepStrictEqual(inspect(parser, input('<bdi/>', new Context())), undefined);
|
|
48
|
+
assert.deepStrictEqual(inspect(parser, input('<bdi />', new Context())), [['<span class="invalid"><bdi /></span>'], '']);
|
|
49
|
+
assert.deepStrictEqual(inspect(parser, input('<b><b><b>a</b></b></b>', new Context())), [['<span class="invalid"><b><b><b>a</b></b></b></span>'], '']);
|
|
50
|
+
assert.deepStrictEqual(inspect(parser, input('<bdi><bdi><bdi>a</bdi></bdi></bdi>', new Context())), [['<bdi><bdi><bdi>a</bdi></bdi></bdi>'], '']);
|
|
51
|
+
assert.deepStrictEqual(inspect(parser, input('<x a="*b*"', new Context())), [['<span class="invalid"><x a="*b*"</span>'], '']);
|
|
52
|
+
assert.deepStrictEqual(inspect(parser, input('<x a="*b*">', new Context())), [['<span class="invalid"><x a="*b*"></span>'], '']);
|
|
53
|
+
assert.deepStrictEqual(inspect(parser, input('<x a="*b*">c', new Context())), [['<span class="invalid"><x a="*b*"></span>'], 'c']);
|
|
54
|
+
assert.deepStrictEqual(inspect(parser, input('<bdi a="*b*"', new Context())), [['<span class="invalid"><bdi a="*b*"</span>'], '']);
|
|
55
|
+
assert.deepStrictEqual(inspect(parser, input('<bdi a="*b*">', new Context())), [['<span class="invalid"><bdi a="*b*"></span>'], '']);
|
|
56
|
+
assert.deepStrictEqual(inspect(parser, input('<bdi a="*b*">c', new Context())), [['<span class="invalid"><bdi a="*b*">c</span>'], '']);
|
|
57
|
+
assert.deepStrictEqual(inspect(parser, input('<bdi a b="*" *c*', new Context())), [['<span class="invalid"><bdi a b="*" *c*</span>'], '']);
|
|
58
|
+
assert.deepStrictEqual(inspect(parser, input('<bdi a b="*" *c*>', new Context())), [['<span class="invalid"><bdi a b="*" *c*></span>'], '']);
|
|
59
|
+
assert.deepStrictEqual(inspect(parser, input('<bdi a b="*" *c*>d</bdi>', new Context())), [['<span class="invalid"><bdi a b="*" *c*>d</bdi></span>'], '']);
|
|
60
|
+
assert.deepStrictEqual(inspect(parser, input('<bdi a b="*" *>*c*', new Context())), [['<span class="invalid"><bdi a b="*" *>*c*</span>'], '']);
|
|
61
|
+
assert.deepStrictEqual(inspect(parser, input('<bdi a b="*" *>*c*</bdi>', new Context())), [['<span class="invalid"><bdi a b="*" *>*c*</bdi></span>'], '']);
|
|
62
|
+
assert.deepStrictEqual(inspect(parser, input(' <bdi>a</bdi>', new Context())), undefined);
|
|
63
63
|
});
|
|
64
64
|
|
|
65
65
|
it('basic', () => {
|
|
66
|
-
assert.deepStrictEqual(inspect(parser('<wbr>'
|
|
67
|
-
assert.deepStrictEqual(inspect(parser('<wbr >'
|
|
68
|
-
assert.deepStrictEqual(inspect(parser('<wbr >'
|
|
69
|
-
assert.deepStrictEqual(inspect(parser('<wbr>a'
|
|
70
|
-
assert.deepStrictEqual(inspect(parser('<bdi >a</bdi>'
|
|
71
|
-
assert.deepStrictEqual(inspect(parser('<bdi >a</bdi>'
|
|
72
|
-
assert.deepStrictEqual(inspect(parser('<bdi> a</bdi>'
|
|
73
|
-
assert.deepStrictEqual(inspect(parser('<bdi> a </bdi>'
|
|
74
|
-
assert.deepStrictEqual(inspect(parser('<bdi> a </bdi>'
|
|
75
|
-
assert.deepStrictEqual(inspect(parser('<bdi>\\ a</bdi>'
|
|
76
|
-
assert.deepStrictEqual(inspect(parser('<bdi><wbr>a</bdi>'
|
|
77
|
-
assert.deepStrictEqual(inspect(parser('<bdi>a</bdi>'
|
|
78
|
-
assert.deepStrictEqual(inspect(parser('<bdi>a</bdi>a'
|
|
79
|
-
assert.deepStrictEqual(inspect(parser('<bdi>a </bdi>'
|
|
80
|
-
assert.deepStrictEqual(inspect(parser('<bdi>a \n </bdi>'
|
|
81
|
-
assert.deepStrictEqual(inspect(parser('<bdi>a\n</bdi>'
|
|
82
|
-
assert.deepStrictEqual(inspect(parser('<bdi>a\n </bdi>'
|
|
83
|
-
assert.deepStrictEqual(inspect(parser('<bdi>a\n<wbr></bdi>'
|
|
84
|
-
assert.deepStrictEqual(inspect(parser('<bdi>a\nb</bdi>'
|
|
66
|
+
assert.deepStrictEqual(inspect(parser, input('<wbr>', new Context())), [['<wbr>'], '']);
|
|
67
|
+
assert.deepStrictEqual(inspect(parser, input('<wbr >', new Context())), [['<wbr>'], '']);
|
|
68
|
+
assert.deepStrictEqual(inspect(parser, input('<wbr >', new Context())), [['<span class="invalid"><wbr </span>'], ' >']);
|
|
69
|
+
assert.deepStrictEqual(inspect(parser, input('<wbr>a', new Context())), [['<wbr>'], 'a']);
|
|
70
|
+
assert.deepStrictEqual(inspect(parser, input('<bdi >a</bdi>', new Context())), [['<bdi>a</bdi>'], '']);
|
|
71
|
+
assert.deepStrictEqual(inspect(parser, input('<bdi >a</bdi>', new Context())), [['<span class="invalid"><bdi >a</bdi></span>'], '']);
|
|
72
|
+
assert.deepStrictEqual(inspect(parser, input('<bdi> a</bdi>', new Context())), [['<bdi> a</bdi>'], '']);
|
|
73
|
+
assert.deepStrictEqual(inspect(parser, input('<bdi> a </bdi>', new Context())), [['<bdi> a </bdi>'], '']);
|
|
74
|
+
assert.deepStrictEqual(inspect(parser, input('<bdi> a </bdi>', new Context())), [['<bdi> a </bdi>'], '']);
|
|
75
|
+
assert.deepStrictEqual(inspect(parser, input('<bdi>\\ a</bdi>', new Context())), [['<bdi> a</bdi>'], '']);
|
|
76
|
+
assert.deepStrictEqual(inspect(parser, input('<bdi><wbr>a</bdi>', new Context())), [['<bdi><wbr>a</bdi>'], '']);
|
|
77
|
+
assert.deepStrictEqual(inspect(parser, input('<bdi>a</bdi>', new Context())), [['<bdi>a</bdi>'], '']);
|
|
78
|
+
assert.deepStrictEqual(inspect(parser, input('<bdi>a</bdi>a', new Context())), [['<bdi>a</bdi>'], 'a']);
|
|
79
|
+
assert.deepStrictEqual(inspect(parser, input('<bdi>a </bdi>', new Context())), [['<bdi>a </bdi>'], '']);
|
|
80
|
+
assert.deepStrictEqual(inspect(parser, input('<bdi>a \n </bdi>', new Context())), [['<bdi>a </bdi>'], '']);
|
|
81
|
+
assert.deepStrictEqual(inspect(parser, input('<bdi>a\n</bdi>', new Context())), [['<bdi>a</bdi>'], '']);
|
|
82
|
+
assert.deepStrictEqual(inspect(parser, input('<bdi>a\n </bdi>', new Context())), [['<bdi>a </bdi>'], '']);
|
|
83
|
+
assert.deepStrictEqual(inspect(parser, input('<bdi>a\n<wbr></bdi>', new Context())), [['<bdi>a<wbr></bdi>'], '']);
|
|
84
|
+
assert.deepStrictEqual(inspect(parser, input('<bdi>a\nb</bdi>', new Context())), [['<bdi>a<br>b</bdi>'], '']);
|
|
85
85
|
});
|
|
86
86
|
|
|
87
87
|
it('nest', () => {
|
|
88
|
-
assert.deepStrictEqual(inspect(parser('<bdi>[% </bdi>'
|
|
89
|
-
assert.deepStrictEqual(inspect(parser('<bdi><bdi>a</bdi></bdi>'
|
|
90
|
-
assert.deepStrictEqual(inspect(parser('<bdi>a<bdi>b</bdi>c</bdi>'
|
|
91
|
-
assert.deepStrictEqual(inspect(parser('<bdi>`a`</bdi>'
|
|
88
|
+
assert.deepStrictEqual(inspect(parser, input('<bdi>[% </bdi>', new Context())), [['<span class="invalid"><bdi>[% </bdi></span>'], '']);
|
|
89
|
+
assert.deepStrictEqual(inspect(parser, input('<bdi><bdi>a</bdi></bdi>', new Context())), [['<bdi><bdi>a</bdi></bdi>'], '']);
|
|
90
|
+
assert.deepStrictEqual(inspect(parser, input('<bdi>a<bdi>b</bdi>c</bdi>', new Context())), [['<bdi>a<bdi>b</bdi>c</bdi>'], '']);
|
|
91
|
+
assert.deepStrictEqual(inspect(parser, input('<bdi>`a`</bdi>', new Context())), [['<bdi><code data-src="`a`">a</code></bdi>'], '']);
|
|
92
92
|
});
|
|
93
93
|
|
|
94
94
|
it('escape', () => {
|
|
95
|
-
assert.deepStrictEqual(inspect(parser('<a>'
|
|
96
|
-
assert.deepStrictEqual(inspect(parser('<bdi><a>a</a></bdi>'
|
|
97
|
-
assert.deepStrictEqual(inspect(parser('<bdi>a<a>b</a>c</bdi>'
|
|
98
|
-
assert.deepStrictEqual(inspect(parser('<img>'
|
|
99
|
-
assert.deepStrictEqual(inspect(parser('<bdi><img></bdi>'
|
|
95
|
+
assert.deepStrictEqual(inspect(parser, input('<a>', new Context())), [['<span class="invalid"><a></span>'], '']);
|
|
96
|
+
assert.deepStrictEqual(inspect(parser, input('<bdi><a>a</a></bdi>', new Context())), [['<bdi><span class="invalid"><a>a</a></span></bdi>'], '']);
|
|
97
|
+
assert.deepStrictEqual(inspect(parser, input('<bdi>a<a>b</a>c</bdi>', new Context())), [['<bdi>a<span class="invalid"><a>b</a></span>c</bdi>'], '']);
|
|
98
|
+
assert.deepStrictEqual(inspect(parser, input('<img>', new Context())), [['<span class="invalid"><img></span>'], '']);
|
|
99
|
+
assert.deepStrictEqual(inspect(parser, input('<bdi><img></bdi>', new Context())), [['<bdi><span class="invalid"><img></span></bdi>'], '']);
|
|
100
100
|
});
|
|
101
101
|
|
|
102
102
|
it('attribute', () => {
|
|
103
|
-
assert.deepStrictEqual(inspect(parser('<bdi\n>a</bdi>'
|
|
104
|
-
assert.deepStrictEqual(inspect(parser('<bdi \n>a</bdi>'
|
|
105
|
-
assert.deepStrictEqual(inspect(parser('<bdi __proto__>a</bdi>'
|
|
106
|
-
assert.deepStrictEqual(inspect(parser('<bdi constructor>a</bdi>'
|
|
107
|
-
assert.deepStrictEqual(inspect(parser('<bdi toString>a</bdi>'
|
|
108
|
-
assert.deepStrictEqual(inspect(parser('<bdi X>a</bdi>'
|
|
109
|
-
assert.deepStrictEqual(inspect(parser('<bdi x>a</bdi>'
|
|
110
|
-
assert.deepStrictEqual(inspect(parser('<bdo>a</bdo>'
|
|
111
|
-
assert.deepStrictEqual(inspect(parser('<bdo >a</bdo>'
|
|
112
|
-
assert.deepStrictEqual(inspect(parser('<bdo __proto__>a</bdo>'
|
|
113
|
-
assert.deepStrictEqual(inspect(parser('<bdo constructor>a</bdo>'
|
|
114
|
-
assert.deepStrictEqual(inspect(parser('<bdo toString>a</bdo>'
|
|
115
|
-
assert.deepStrictEqual(inspect(parser('<bdo X>a</bdo>'
|
|
116
|
-
assert.deepStrictEqual(inspect(parser('<bdo x>a</bdo>'
|
|
117
|
-
assert.deepStrictEqual(inspect(parser('<bdo dir>a</bdo>'
|
|
118
|
-
assert.deepStrictEqual(inspect(parser('<bdo dir=>a</bdo>'
|
|
119
|
-
assert.deepStrictEqual(inspect(parser('<bdo dir=rtl>a</bdo>'
|
|
120
|
-
assert.deepStrictEqual(inspect(parser('<bdo dir=">a</bdo>'
|
|
121
|
-
assert.deepStrictEqual(inspect(parser('<bdo dir="">a</bdo>'
|
|
122
|
-
assert.deepStrictEqual(inspect(parser('<bdo dir="rtl" dir="rtl">a</bdo>'
|
|
123
|
-
assert.deepStrictEqual(inspect(parser('<bdo diR="rtl">a</bdo>'
|
|
124
|
-
assert.deepStrictEqual(inspect(parser('<bdo dir="rtl">a</bdo>'
|
|
125
|
-
assert.deepStrictEqual(inspect(parser('<bdo dir="rtl" >a</bdo>'
|
|
126
|
-
assert.deepStrictEqual(inspect(parser('<bdo dir="rtl" >a</bdo>'
|
|
127
|
-
assert.deepStrictEqual(inspect(parser('<bdo dir="rtl">a</bdo>'
|
|
128
|
-
assert.deepStrictEqual(inspect(parser('<wbr\n>'
|
|
129
|
-
assert.deepStrictEqual(inspect(parser('<wbr \n>'
|
|
130
|
-
assert.deepStrictEqual(inspect(parser('<wbr constructor>'
|
|
131
|
-
assert.deepStrictEqual(inspect(parser('<wbr X>'
|
|
132
|
-
assert.deepStrictEqual(inspect(parser('<wbr x>'
|
|
103
|
+
assert.deepStrictEqual(inspect(parser, input('<bdi\n>a</bdi>', new Context())), undefined);
|
|
104
|
+
assert.deepStrictEqual(inspect(parser, input('<bdi \n>a</bdi>', new Context())), [['<span class="invalid"><bdi \n>a</bdi></span>'], '']);
|
|
105
|
+
assert.deepStrictEqual(inspect(parser, input('<bdi __proto__>a</bdi>', new Context())), [['<span class="invalid"><bdi __proto__>a</bdi></span>'], '']);
|
|
106
|
+
assert.deepStrictEqual(inspect(parser, input('<bdi constructor>a</bdi>', new Context())), [['<span class="invalid"><bdi constructor>a</bdi></span>'], '']);
|
|
107
|
+
assert.deepStrictEqual(inspect(parser, input('<bdi toString>a</bdi>', new Context())), [['<span class="invalid"><bdi toString>a</bdi></span>'], '']);
|
|
108
|
+
assert.deepStrictEqual(inspect(parser, input('<bdi X>a</bdi>', new Context())), [['<span class="invalid"><bdi X>a</bdi></span>'], '']);
|
|
109
|
+
assert.deepStrictEqual(inspect(parser, input('<bdi x>a</bdi>', new Context())), [['<span class="invalid"><bdi x>a</bdi></span>'], '']);
|
|
110
|
+
assert.deepStrictEqual(inspect(parser, input('<bdo>a</bdo>', new Context())), [['<span class="invalid"><bdo>a</bdo></span>'], '']);
|
|
111
|
+
assert.deepStrictEqual(inspect(parser, input('<bdo >a</bdo>', new Context())), [['<span class="invalid"><bdo >a</bdo></span>'], '']);
|
|
112
|
+
assert.deepStrictEqual(inspect(parser, input('<bdo __proto__>a</bdo>', new Context())), [['<span class="invalid"><bdo __proto__>a</bdo></span>'], '']);
|
|
113
|
+
assert.deepStrictEqual(inspect(parser, input('<bdo constructor>a</bdo>', new Context())), [['<span class="invalid"><bdo constructor>a</bdo></span>'], '']);
|
|
114
|
+
assert.deepStrictEqual(inspect(parser, input('<bdo toString>a</bdo>', new Context())), [['<span class="invalid"><bdo toString>a</bdo></span>'], '']);
|
|
115
|
+
assert.deepStrictEqual(inspect(parser, input('<bdo X>a</bdo>', new Context())), [['<span class="invalid"><bdo X>a</bdo></span>'], '']);
|
|
116
|
+
assert.deepStrictEqual(inspect(parser, input('<bdo x>a</bdo>', new Context())), [['<span class="invalid"><bdo x>a</bdo></span>'], '']);
|
|
117
|
+
assert.deepStrictEqual(inspect(parser, input('<bdo dir>a</bdo>', new Context())), [['<span class="invalid"><bdo dir>a</bdo></span>'], '']);
|
|
118
|
+
assert.deepStrictEqual(inspect(parser, input('<bdo dir=>a</bdo>', new Context())), [['<span class="invalid"><bdo dir=>a</bdo></span>'], '']);
|
|
119
|
+
assert.deepStrictEqual(inspect(parser, input('<bdo dir=rtl>a</bdo>', new Context())), [['<span class="invalid"><bdo dir=rtl>a</bdo></span>'], '']);
|
|
120
|
+
assert.deepStrictEqual(inspect(parser, input('<bdo dir=">a</bdo>', new Context())), [['<span class="invalid"><bdo dir=">a</bdo></span>'], '']);
|
|
121
|
+
assert.deepStrictEqual(inspect(parser, input('<bdo dir="">a</bdo>', new Context())), [['<span class="invalid"><bdo dir="">a</bdo></span>'], '']);
|
|
122
|
+
assert.deepStrictEqual(inspect(parser, input('<bdo dir="rtl" dir="rtl">a</bdo>', new Context())), [['<span class="invalid"><bdo dir="rtl" dir="rtl">a</bdo></span>'], '']);
|
|
123
|
+
assert.deepStrictEqual(inspect(parser, input('<bdo diR="rtl">a</bdo>', new Context())), [['<span class="invalid"><bdo diR="rtl">a</bdo></span>'], '']);
|
|
124
|
+
assert.deepStrictEqual(inspect(parser, input('<bdo dir="rtl">a</bdo>', new Context())), [['<bdo dir="rtl">a</bdo>'], '']);
|
|
125
|
+
assert.deepStrictEqual(inspect(parser, input('<bdo dir="rtl" >a</bdo>', new Context())), [['<bdo dir="rtl">a</bdo>'], '']);
|
|
126
|
+
assert.deepStrictEqual(inspect(parser, input('<bdo dir="rtl" >a</bdo>', new Context())), [['<span class="invalid"><bdo dir="rtl" >a</bdo></span>'], '']);
|
|
127
|
+
assert.deepStrictEqual(inspect(parser, input('<bdo dir="rtl">a</bdo>', new Context())), [['<span class="invalid"><bdo dir="rtl">a</bdo></span>'], '']);
|
|
128
|
+
assert.deepStrictEqual(inspect(parser, input('<wbr\n>', new Context())), undefined);
|
|
129
|
+
assert.deepStrictEqual(inspect(parser, input('<wbr \n>', new Context())), [['<span class="invalid"><wbr </span>'], '\n>']);
|
|
130
|
+
assert.deepStrictEqual(inspect(parser, input('<wbr constructor>', new Context())), [['<span class="invalid"><wbr constructor></span>'], '']);
|
|
131
|
+
assert.deepStrictEqual(inspect(parser, input('<wbr X>', new Context())), [['<span class="invalid"><wbr X></span>'], '']);
|
|
132
|
+
assert.deepStrictEqual(inspect(parser, input('<wbr x>', new Context())), [['<span class="invalid"><wbr x></span>'], '']);
|
|
133
133
|
});
|
|
134
134
|
|
|
135
135
|
});
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { HTMLParser } from '../inline';
|
|
2
2
|
import { Recursion } from '../context';
|
|
3
|
-
import { List,
|
|
3
|
+
import { List, Node, Context } from '../../combinator/data/parser';
|
|
4
4
|
import { union, some, recursion, precedence, validate, surround, open, match, lazy } from '../../combinator';
|
|
5
5
|
import { inline } from '../inline';
|
|
6
6
|
import { str } from '../source';
|
|
@@ -28,9 +28,9 @@ export const html: HTMLParser = lazy(() => validate(/<[a-z]+(?=[ >])/yi,
|
|
|
28
28
|
open(str(/ ?/y), str('>'), true),
|
|
29
29
|
true, [],
|
|
30
30
|
([as, bs = new List(), cs], context) =>
|
|
31
|
-
new List([new
|
|
31
|
+
new List([new Node(elem(as.head!.value.slice(1), false, [...unwrap(as.import(bs).import(cs))], new List(), new List(), context))]),
|
|
32
32
|
([as, bs = new List()], context) =>
|
|
33
|
-
new List([new
|
|
33
|
+
new List([new Node(elem(as.head!.value.slice(1), false, [...unwrap(as.import(bs))], new List(), new List(), context))])),
|
|
34
34
|
match(
|
|
35
35
|
new RegExp(String.raw`<(${TAGS.join('|')})(?=[ >])`, 'y'),
|
|
36
36
|
memoize(
|
|
@@ -53,9 +53,9 @@ export const html: HTMLParser = lazy(() => validate(/<[a-z]+(?=[ >])/yi,
|
|
|
53
53
|
str(`</${tag}>`),
|
|
54
54
|
true, [],
|
|
55
55
|
([as, bs = new List(), cs], context) =>
|
|
56
|
-
new List([new
|
|
56
|
+
new List([new Node(elem(tag, true, [...unwrap(as)], bs, cs, context))]),
|
|
57
57
|
([as, bs = new List()], context) =>
|
|
58
|
-
new List([new
|
|
58
|
+
new List([new Node(elem(tag, true, [...unwrap(as)], bs, new List(), context))])),
|
|
59
59
|
([, tag]) => tag,
|
|
60
60
|
new Map())),
|
|
61
61
|
surround(
|
|
@@ -65,9 +65,9 @@ export const html: HTMLParser = lazy(() => validate(/<[a-z]+(?=[ >])/yi,
|
|
|
65
65
|
open(str(/ ?/y), str('>'), true),
|
|
66
66
|
true, [],
|
|
67
67
|
([as, bs = new List(), cs], context) =>
|
|
68
|
-
new List([new
|
|
68
|
+
new List([new Node(elem(as.head!.value.slice(1), false, [...unwrap(as.import(bs).import(cs))], new List(), new List(), context))]),
|
|
69
69
|
([as, bs = new List()], context) =>
|
|
70
|
-
new List([new
|
|
70
|
+
new List([new Node(elem(as.head!.value.slice(1), false, [...unwrap(as.import(bs))], new List(), new List(), context))])),
|
|
71
71
|
])));
|
|
72
72
|
|
|
73
73
|
export const attribute: HTMLParser.AttributeParser = union([
|
|
@@ -75,7 +75,7 @@ export const attribute: HTMLParser.AttributeParser = union([
|
|
|
75
75
|
str(/ [^\s<>]+/y),
|
|
76
76
|
]);
|
|
77
77
|
|
|
78
|
-
function elem(tag: string, content: boolean, as: readonly string[], bs: List<
|
|
78
|
+
function elem(tag: string, content: boolean, as: readonly string[], bs: List<Node<HTMLElement | string>>, cs: List<Node<string>>, context: Context): HTMLElement {
|
|
79
79
|
assert(as.length > 0);
|
|
80
80
|
assert(as[0][0] === '<');
|
|
81
81
|
if (!tags.includes(tag)) return ielem('tag', `Invalid HTML tag name "${tag}"`, context);
|
|
@@ -90,10 +90,10 @@ function elem(tag: string, content: boolean, as: readonly string[], bs: List<Dat
|
|
|
90
90
|
return h(tag as 'span', attrs, defrag(unwrap(bs)));
|
|
91
91
|
}
|
|
92
92
|
|
|
93
|
-
function ielem(type: string, message: string, context:
|
|
93
|
+
function ielem(type: string, message: string, context: Context): HTMLElement {
|
|
94
94
|
return h('span',
|
|
95
95
|
{ class: 'invalid', ...invalid('html', type, message) },
|
|
96
|
-
context.source.slice(context.position - context.range
|
|
96
|
+
context.source.slice(context.position - context.range, context.position));
|
|
97
97
|
}
|
|
98
98
|
|
|
99
99
|
const requiredAttributes = memoize(
|