securemark 0.294.1 → 0.294.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.
@@ -1,97 +1,96 @@
1
- import { inline } from '../../inline';
1
+ import { autolink } from '../autolink';
2
2
  import { some } from '../../../combinator';
3
3
  import { input } from '../../../combinator/data/parser';
4
4
  import { inspect } from '../../../debug.test';
5
5
 
6
6
  describe('Unit: parser/inline/autolink/url', () => {
7
7
  describe('url', () => {
8
- const parser = (source: string) => some(inline)(input(source, ctx));
8
+ const parser = (source: string) => some(autolink)((i => void ++i.context.position || i)(input(source, ctx)));
9
9
  const { context: ctx } = input('', {});
10
10
 
11
11
  it('invalid', () => {
12
12
  assert.deepStrictEqual(inspect(parser(''), ctx), undefined);
13
- assert.deepStrictEqual(inspect(parser(' http'), ctx), [[' http'], '']);
14
- assert.deepStrictEqual(inspect(parser(' ttp'), ctx), [[' ttp'], '']);
15
- assert.deepStrictEqual(inspect(parser(' http://'), ctx), [[' ', 'http:', '//'], '']);
16
- assert.deepStrictEqual(inspect(parser(' http://['), ctx), [[' ', 'http:', '//', '['], '']);
17
- assert.deepStrictEqual(inspect(parser(' http://]'), ctx), [[' ', 'http:', '//', ']'], '']);
18
- assert.deepStrictEqual(inspect(parser(' Http://host'), ctx), [[' ', 'Http:', '//host'], '']);
19
- assert.deepStrictEqual(inspect(parser(' http://[::ffff:0:0%1]'), ctx), [[' ', '<a class="invalid">http://[::ffff:0:0%1]</a>'], '']);
20
- assert.deepStrictEqual(inspect(parser(' http://[::ffff:0:0/96]'), ctx), [[' ', '<a class="invalid">http://[::ffff:0:0/96]</a>'], '']);
13
+ assert.deepStrictEqual(inspect(parser(' http'), ctx), [['http'], '']);
14
+ assert.deepStrictEqual(inspect(parser(' ttp'), ctx), [['ttp'], '']);
15
+ assert.deepStrictEqual(inspect(parser(' http://'), ctx), [['http:'], '//']);
16
+ assert.deepStrictEqual(inspect(parser(' http://['), ctx), [['http:'], '//[']);
17
+ assert.deepStrictEqual(inspect(parser(' http://]'), ctx), [['http:'], '//]']);
18
+ assert.deepStrictEqual(inspect(parser(' Http://host'), ctx), [['Http:'], '//host']);
19
+ assert.deepStrictEqual(inspect(parser(' http://[::ffff:0:0%1]'), ctx), [['<a class="invalid">http://[::ffff:0:0%1]</a>'], '']);
20
+ assert.deepStrictEqual(inspect(parser(' http://[::ffff:0:0/96]'), ctx), [['<a class="invalid">http://[::ffff:0:0/96]</a>'], '']);
21
21
  });
22
22
 
23
23
  it('basic', () => {
24
- assert.deepStrictEqual(inspect(parser(' http://a'), ctx), [[' ', '<a class="url" href="http://a" target="_blank">http://a</a>'], '']);
25
- assert.deepStrictEqual(inspect(parser(' http://a/'), ctx), [[' ', '<a class="url" href="http://a/" target="_blank">http://a/</a>'], '']);
26
- assert.deepStrictEqual(inspect(parser(' http://a:80'), ctx), [[' ', '<a class="url" href="http://a:80" target="_blank">http://a:80</a>'], '']);
27
- assert.deepStrictEqual(inspect(parser(' http://a.b'), ctx), [[' ', '<a class="url" href="http://a.b" target="_blank">http://a.b</a>'], '']);
28
- assert.deepStrictEqual(inspect(parser(` http://a?#${encodeURIComponent(':/[]()<>?#=& ')}`), ctx), [[' ', '<a class="url" href="http://a?#%3A%2F%5B%5D()%3C%3E%3F%23%3D%26%20" target="_blank">http://a?#%3A%2F[]()&lt;&gt;%3F%23%3D%26%20</a>'], '']);
29
- assert.deepStrictEqual(inspect(parser(' http://a#()'), ctx), [[' ', '<a class="url" href="http://a#()" target="_blank">http://a#()</a>'], '']);
30
- assert.deepStrictEqual(inspect(parser(' http://a#( )'), ctx), [[' ', '<a class="url" href="http://a#" target="_blank">http://a#</a>', '<span class="paren">( )</span>'], '']);
31
- assert.deepStrictEqual(inspect(parser(' http://a#(\n)'), ctx), [[' ', '<a class="url" href="http://a#" target="_blank">http://a#</a>', '<span class="paren">(<br>)</span>'], '']);
32
- assert.deepStrictEqual(inspect(parser(' http://[::]'), ctx), [[' ', '<a class="url" href="http://[::]" target="_blank">http://[::]</a>'], '']);
33
- assert.deepStrictEqual(inspect(parser('http://a#\\'), ctx), [['<a class="url" href="http://a#\\" target="_blank">http://a#\\</a>'], '']);
34
- assert.deepStrictEqual(inspect(parser('http://a#\\\nhttp://b#\\'), ctx), [['<a class="url" href="http://a#\\" target="_blank">http://a#\\</a>', '<br>', '<a class="url" href="http://b#\\" target="_blank">http://b#\\</a>'], '']);
24
+ assert.deepStrictEqual(inspect(parser(' http://a'), ctx), [['<a class="url" href="http://a" target="_blank">http://a</a>'], '']);
25
+ assert.deepStrictEqual(inspect(parser(' http://a/'), ctx), [['<a class="url" href="http://a/" target="_blank">http://a/</a>'], '']);
26
+ assert.deepStrictEqual(inspect(parser(' http://a:80'), ctx), [['<a class="url" href="http://a:80" target="_blank">http://a:80</a>'], '']);
27
+ assert.deepStrictEqual(inspect(parser(' http://a.b'), ctx), [['<a class="url" href="http://a.b" target="_blank">http://a.b</a>'], '']);
28
+ assert.deepStrictEqual(inspect(parser(` http://a?#${encodeURIComponent(':/[]()<>?#=& ')}`), ctx), [['<a class="url" href="http://a?#%3A%2F%5B%5D()%3C%3E%3F%23%3D%26%20" target="_blank">http://a?#%3A%2F[]()&lt;&gt;%3F%23%3D%26%20</a>'], '']);
29
+ assert.deepStrictEqual(inspect(parser(' http://a#()'), ctx), [['<a class="url" href="http://a#()" target="_blank">http://a#()</a>'], '']);
30
+ assert.deepStrictEqual(inspect(parser(' http://a#( )'), ctx), [['<a class="url" href="http://a#" target="_blank">http://a#</a>'], '( )']);
31
+ assert.deepStrictEqual(inspect(parser(' http://a#(\n)'), ctx), [['<a class="url" href="http://a#" target="_blank">http://a#</a>'], '(\n)']);
32
+ assert.deepStrictEqual(inspect(parser(' http://[::]'), ctx), [['<a class="url" href="http://[::]" target="_blank">http://[::]</a>'], '']);
33
+ assert.deepStrictEqual(inspect(parser('\rhttp://a#\\'), ctx), [['<a class="url" href="http://a#\\" target="_blank">http://a#\\</a>'], '']);
34
+ assert.deepStrictEqual(inspect(parser('\nhttp://a#\\'), ctx), [['<a class="url" href="http://a#\\" target="_blank">http://a#\\</a>'], '']);
35
35
  });
36
36
 
37
37
  it('trailing symbols', () => {
38
- assert.deepStrictEqual(inspect(parser(' http://host '), ctx), [[' ', '<a class="url" href="http://host" target="_blank">http://host</a>'], '']);
39
- assert.deepStrictEqual(inspect(parser(' http://host. '), ctx), [[' ', '<a class="url" href="http://host" target="_blank">http://host</a>', '.'], '']);
40
- assert.deepStrictEqual(inspect(parser(' http://host\n'), ctx), [[' ', '<a class="url" href="http://host" target="_blank">http://host</a>', '<br>'], '']);
41
- assert.deepStrictEqual(inspect(parser(' http://host.\n'), ctx), [[' ', '<a class="url" href="http://host" target="_blank">http://host</a>', '.', '<br>'], '']);
42
- assert.deepStrictEqual(inspect(parser(' http://host\\'), ctx), [[' ', '<a class="url" href="http://host" target="_blank">http://host</a>'], '']);
43
- assert.deepStrictEqual(inspect(parser(' http://host.\\'), ctx), [[' ', '<a class="url" href="http://host" target="_blank">http://host</a>', '.'], '']);
44
- assert.deepStrictEqual(inspect(parser(' http://host\\ '), ctx), [[' ', '<a class="url" href="http://host" target="_blank">http://host</a>', ' '], '']);
45
- assert.deepStrictEqual(inspect(parser(' http://host.\\ '), ctx), [[' ', '<a class="url" href="http://host" target="_blank">http://host</a>', '.', ' '], '']);
46
- assert.deepStrictEqual(inspect(parser(' http://host\\\n'), ctx), [[' ', '<a class="url" href="http://host" target="_blank">http://host</a>', '<br>'], '']);
47
- assert.deepStrictEqual(inspect(parser(' http://host.\\\n'), ctx), [[' ', '<a class="url" href="http://host" target="_blank">http://host</a>', '.', '<br>'], '']);
48
- assert.deepStrictEqual(inspect(parser(' http://host,'), ctx), [[' ', '<a class="url" href="http://host" target="_blank">http://host</a>', ','], '']);
49
- assert.deepStrictEqual(inspect(parser(' http://host;'), ctx), [[' ', '<a class="url" href="http://host" target="_blank">http://host</a>', ';'], '']);
50
- assert.deepStrictEqual(inspect(parser(' http://host.'), ctx), [[' ', '<a class="url" href="http://host" target="_blank">http://host</a>', '.'], '']);
51
- assert.deepStrictEqual(inspect(parser(' http://host:'), ctx), [[' ', '<a class="url" href="http://host" target="_blank">http://host</a>', ':'], '']);
52
- assert.deepStrictEqual(inspect(parser(' http://host!'), ctx), [[' ', '<a class="url" href="http://host" target="_blank">http://host</a>', '!'], '']);
53
- assert.deepStrictEqual(inspect(parser(' http://host?'), ctx), [[' ', '<a class="url" href="http://host" target="_blank">http://host</a>', '?'], '']);
54
- assert.deepStrictEqual(inspect(parser(' http://host+'), ctx), [[' ', '<a class="url" href="http://host" target="_blank">http://host</a>', '+'], '']);
55
- assert.deepStrictEqual(inspect(parser(' http://host-'), ctx), [[' ', '<a class="url" href="http://host" target="_blank">http://host</a>', '-'], '']);
56
- assert.deepStrictEqual(inspect(parser(' http://host*'), ctx), [[' ', '<a class="url" href="http://host" target="_blank">http://host</a>', '*'], '']);
57
- assert.deepStrictEqual(inspect(parser(' http://host='), ctx), [[' ', '<a class="url" href="http://host" target="_blank">http://host</a>', '='], '']);
58
- assert.deepStrictEqual(inspect(parser(' http://host~'), ctx), [[' ', '<a class="url" href="http://host" target="_blank">http://host</a>', '~'], '']);
59
- assert.deepStrictEqual(inspect(parser(' http://host^'), ctx), [[' ', '<a class="url" href="http://host" target="_blank">http://host</a>', '^'], '']);
60
- assert.deepStrictEqual(inspect(parser(' http://host_'), ctx), [[' ', '<a class="url" href="http://host" target="_blank">http://host</a>', '_'], '']);
61
- assert.deepStrictEqual(inspect(parser(' http://host/'), ctx), [[' ', '<a class="url" href="http://host/" target="_blank">http://host/</a>'], '']);
62
- assert.deepStrictEqual(inspect(parser(' http://host//'), ctx), [[' ', '<a class="url" href="http://host" target="_blank">http://host</a>', '//'], '']);
63
- assert.deepStrictEqual(inspect(parser(` http://host'`), ctx), [[' ', '<a class="url" href="http://host\'" target="_blank">http://host\'</a>'], '']);
64
- assert.deepStrictEqual(inspect(parser(' http://host"'), ctx), [[' ', '<a class="url" href="http://host" target="_blank">http://host</a>', '"'], '']);
65
- assert.deepStrictEqual(inspect(parser(' http://host`'), ctx), [[' ', '<a class="url" href="http://host" target="_blank">http://host</a>', '`'], '']);
66
- assert.deepStrictEqual(inspect(parser(' http://host|'), ctx), [[' ', '<a class="url" href="http://host" target="_blank">http://host</a>', '|'], '']);
67
- assert.deepStrictEqual(inspect(parser(' http://host&'), ctx), [[' ', '<a class="url" href="http://host&amp;" target="_blank">http://host&amp;</a>'], '']);
68
- assert.deepStrictEqual(inspect(parser(' http://host$'), ctx), [[' ', '<a class="url" href="http://host" target="_blank">http://host</a>', '$'], '']);
69
- assert.deepStrictEqual(inspect(parser(' http://host#"$"'), ctx), [[' ', '<a class="url" href="http://host#" target="_blank">http://host#</a>', '"', '$', '"'], '']);
70
- assert.deepStrictEqual(inspect(parser(' http://host#($)'), ctx), [[' ', '<a class="url" href="http://host#" target="_blank">http://host#</a>', '<span class="paren">($)</span>'], '']);
71
- assert.deepStrictEqual(inspect(parser(' http://host#(($))'), ctx), [[' ', '<a class="url" href="http://host#" target="_blank">http://host#</a>', '<sup class="annotation"><span>$</span></sup>'], '']);
72
- assert.deepStrictEqual(inspect(parser(' http://user@host'), ctx), [[' ', '<a class="url" href="http://user@host" target="_blank">http://user@host</a>'], '']);
73
- assert.deepStrictEqual(inspect(parser(' http://host#@'), ctx), [[' ', '<a class="url" href="http://host#@" target="_blank">http://host#@</a>'], '']);
74
- assert.deepStrictEqual(inspect(parser(' http://host['), ctx), [[' ', '<a class="url" href="http://host" target="_blank">http://host</a>', '['], '']);
75
- assert.deepStrictEqual(inspect(parser(' http://host]'), ctx), [[' ', '<a class="url" href="http://host" target="_blank">http://host</a>', ']'], '']);
76
- assert.deepStrictEqual(inspect(parser(' http://host('), ctx), [[' ', '<a class="url" href="http://host" target="_blank">http://host</a>', '('], '']);
77
- assert.deepStrictEqual(inspect(parser(' http://host)'), ctx), [[' ', '<a class="url" href="http://host" target="_blank">http://host</a>', ')'], '']);
78
- assert.deepStrictEqual(inspect(parser(' http://host{'), ctx), [[' ', '<a class="url" href="http://host" target="_blank">http://host</a>', '{'], '']);
79
- assert.deepStrictEqual(inspect(parser(' http://host}'), ctx), [[' ', '<a class="url" href="http://host" target="_blank">http://host</a>', '}'], '']);
80
- assert.deepStrictEqual(inspect(parser(' http://host<'), ctx), [[' ', '<a class="url" href="http://host" target="_blank">http://host</a>', '<'], '']);
81
- assert.deepStrictEqual(inspect(parser(' http://host>'), ctx), [[' ', '<a class="url" href="http://host" target="_blank">http://host</a>', '>'], '']);
82
- assert.deepStrictEqual(inspect(parser(' http://host('), ctx), [[' ', '<a class="url" href="http://host" target="_blank">http://host</a>', '('], '']);
83
- assert.deepStrictEqual(inspect(parser(' http://host)'), ctx), [[' ', '<a class="url" href="http://host" target="_blank">http://host</a>', ')'], '']);
84
- assert.deepStrictEqual(inspect(parser(' http://host\\"'), ctx), [[' ', '<a class="url" href="http://host" target="_blank">http://host</a>', '"'], '']);
38
+ assert.deepStrictEqual(inspect(parser(' http://host '), ctx), [['<a class="url" href="http://host" target="_blank">http://host</a>'], ' ']);
39
+ assert.deepStrictEqual(inspect(parser(' http://host\n'), ctx), [['<a class="url" href="http://host" target="_blank">http://host</a>'], '\n']);
40
+ assert.deepStrictEqual(inspect(parser(' http://host\\'), ctx), [['<a class="url" href="http://host" target="_blank">http://host</a>'], '\\']);
41
+ assert.deepStrictEqual(inspect(parser(' http://host\\a'), ctx), [['<a class="url" href="http://host" target="_blank">http://host</a>'], '\\a']);
42
+ assert.deepStrictEqual(inspect(parser(' http://host\\ '), ctx), [['<a class="url" href="http://host" target="_blank">http://host</a>'], '\\ ']);
43
+ assert.deepStrictEqual(inspect(parser(' http://host\\\n'), ctx), [['<a class="url" href="http://host" target="_blank">http://host</a>'], '\\\n']);
44
+ assert.deepStrictEqual(inspect(parser(' http://host. '), ctx), [['<a class="url" href="http://host" target="_blank">http://host</a>'], '. ']);
45
+ assert.deepStrictEqual(inspect(parser(' http://host.\n'), ctx), [['<a class="url" href="http://host" target="_blank">http://host</a>'], '.\n']);
46
+ assert.deepStrictEqual(inspect(parser(' http://host.\\'), ctx), [['<a class="url" href="http://host" target="_blank">http://host</a>'], '.\\']);
47
+ assert.deepStrictEqual(inspect(parser(' http://host.\\ '), ctx), [['<a class="url" href="http://host" target="_blank">http://host</a>'], '.\\ ']);
48
+ assert.deepStrictEqual(inspect(parser(' http://host.\\\n'), ctx), [['<a class="url" href="http://host" target="_blank">http://host</a>'], '.\\\n']);
49
+ assert.deepStrictEqual(inspect(parser(' http://host,'), ctx), [['<a class="url" href="http://host" target="_blank">http://host</a>'], ',']);
50
+ assert.deepStrictEqual(inspect(parser(' http://host;'), ctx), [['<a class="url" href="http://host" target="_blank">http://host</a>'], ';']);
51
+ assert.deepStrictEqual(inspect(parser(' http://host.'), ctx), [['<a class="url" href="http://host" target="_blank">http://host</a>'], '.']);
52
+ assert.deepStrictEqual(inspect(parser(' http://host:'), ctx), [['<a class="url" href="http://host" target="_blank">http://host</a>'], ':']);
53
+ assert.deepStrictEqual(inspect(parser(' http://host!'), ctx), [['<a class="url" href="http://host" target="_blank">http://host</a>'], '!']);
54
+ assert.deepStrictEqual(inspect(parser(' http://host?'), ctx), [['<a class="url" href="http://host" target="_blank">http://host</a>'], '?']);
55
+ assert.deepStrictEqual(inspect(parser(' http://host+'), ctx), [['<a class="url" href="http://host" target="_blank">http://host</a>'], '+']);
56
+ assert.deepStrictEqual(inspect(parser(' http://host-'), ctx), [['<a class="url" href="http://host" target="_blank">http://host</a>'], '-']);
57
+ assert.deepStrictEqual(inspect(parser(' http://host*'), ctx), [['<a class="url" href="http://host" target="_blank">http://host</a>'], '*']);
58
+ assert.deepStrictEqual(inspect(parser(' http://host='), ctx), [['<a class="url" href="http://host" target="_blank">http://host</a>'], '=']);
59
+ assert.deepStrictEqual(inspect(parser(' http://host~'), ctx), [['<a class="url" href="http://host" target="_blank">http://host</a>'], '~']);
60
+ assert.deepStrictEqual(inspect(parser(' http://host^'), ctx), [['<a class="url" href="http://host" target="_blank">http://host</a>'], '^']);
61
+ assert.deepStrictEqual(inspect(parser(' http://host_'), ctx), [['<a class="url" href="http://host" target="_blank">http://host</a>'], '_']);
62
+ assert.deepStrictEqual(inspect(parser(' http://host/'), ctx), [['<a class="url" href="http://host/" target="_blank">http://host/</a>'], '']);
63
+ assert.deepStrictEqual(inspect(parser(` http://host'`), ctx), [['<a class="url" href="http://host\'" target="_blank">http://host\'</a>'], '']);
64
+ assert.deepStrictEqual(inspect(parser(' http://host"'), ctx), [['<a class="url" href="http://host" target="_blank">http://host</a>'], '"']);
65
+ assert.deepStrictEqual(inspect(parser(' http://host`'), ctx), [['<a class="url" href="http://host" target="_blank">http://host</a>'], '`']);
66
+ assert.deepStrictEqual(inspect(parser(' http://host|'), ctx), [['<a class="url" href="http://host" target="_blank">http://host</a>'], '|']);
67
+ assert.deepStrictEqual(inspect(parser(' http://host&'), ctx), [['<a class="url" href="http://host&amp;" target="_blank">http://host&amp;</a>'], '']);
68
+ assert.deepStrictEqual(inspect(parser(' http://host$'), ctx), [['<a class="url" href="http://host" target="_blank">http://host</a>'], '$']);
69
+ assert.deepStrictEqual(inspect(parser(' http://host#"$"'), ctx), [['<a class="url" href="http://host#" target="_blank">http://host#</a>'], '"$"']);
70
+ assert.deepStrictEqual(inspect(parser(' http://host#($)'), ctx), [['<a class="url" href="http://host#" target="_blank">http://host#</a>'], '($)']);
71
+ assert.deepStrictEqual(inspect(parser(' http://host#(($))'), ctx), [['<a class="url" href="http://host#" target="_blank">http://host#</a>'], '(($))']);
72
+ assert.deepStrictEqual(inspect(parser(' http://user@host'), ctx), [['<a class="url" href="http://user@host" target="_blank">http://user@host</a>'], '']);
73
+ assert.deepStrictEqual(inspect(parser(' http://host#@'), ctx), [['<a class="url" href="http://host#@" target="_blank">http://host#@</a>'], '']);
74
+ assert.deepStrictEqual(inspect(parser(' http://host['), ctx), [['<a class="url" href="http://host" target="_blank">http://host</a>'], '[']);
75
+ assert.deepStrictEqual(inspect(parser(' http://host]'), ctx), [['<a class="url" href="http://host" target="_blank">http://host</a>'], ']']);
76
+ assert.deepStrictEqual(inspect(parser(' http://host('), ctx), [['<a class="url" href="http://host" target="_blank">http://host</a>'], '(']);
77
+ assert.deepStrictEqual(inspect(parser(' http://host)'), ctx), [['<a class="url" href="http://host" target="_blank">http://host</a>'], ')']);
78
+ assert.deepStrictEqual(inspect(parser(' http://host{'), ctx), [['<a class="url" href="http://host" target="_blank">http://host</a>'], '{']);
79
+ assert.deepStrictEqual(inspect(parser(' http://host}'), ctx), [['<a class="url" href="http://host" target="_blank">http://host</a>'], '}']);
80
+ assert.deepStrictEqual(inspect(parser(' http://host<'), ctx), [['<a class="url" href="http://host" target="_blank">http://host</a>'], '<']);
81
+ assert.deepStrictEqual(inspect(parser(' http://host>'), ctx), [['<a class="url" href="http://host" target="_blank">http://host</a>'], '>']);
82
+ assert.deepStrictEqual(inspect(parser(' http://host('), ctx), [['<a class="url" href="http://host" target="_blank">http://host</a>'], '(']);
83
+ assert.deepStrictEqual(inspect(parser(' http://host)'), ctx), [['<a class="url" href="http://host" target="_blank">http://host</a>'], ')']);
85
84
  });
86
85
 
87
86
  it('trailing entities', () => {
88
- assert.deepStrictEqual(inspect(parser(' http://host?&hl;'), ctx), [[' ', '<a class="url" href="http://host?&amp;hl" target="_blank">http://host?&amp;hl</a>', ';'], '']);
89
- assert.deepStrictEqual(inspect(parser(' http://host?&hl;&hl;'), ctx), [[' ', '<a class="url" href="http://host?&amp;hl;&amp;hl" target="_blank">http://host?&amp;hl;&amp;hl</a>', ';'], '']);
87
+ assert.deepStrictEqual(inspect(parser(' http://host?&hl;'), ctx), [['<a class="url" href="http://host?&amp;hl" target="_blank">http://host?&amp;hl</a>'], ';']);
88
+ assert.deepStrictEqual(inspect(parser(' http://host?&hl;&hl;'), ctx), [['<a class="url" href="http://host?&amp;hl;&amp;hl" target="_blank">http://host?&amp;hl;&amp;hl</a>'], ';']);
90
89
  });
91
90
 
92
91
  it('protocol', () => {
93
- assert.deepStrictEqual(inspect(parser(' http://host'), ctx), [[' ', '<a class="url" href="http://host" target="_blank">http://host</a>'], '']);
94
- assert.deepStrictEqual(inspect(parser(' https://host'), ctx), [[' ', '<a class="url" href="https://host" target="_blank">https://host</a>'], '']);
92
+ assert.deepStrictEqual(inspect(parser(' http://host'), ctx), [['<a class="url" href="http://host" target="_blank">http://host</a>'], '']);
93
+ assert.deepStrictEqual(inspect(parser(' https://host'), ctx), [['<a class="url" href="https://host" target="_blank">https://host</a>'], '']);
95
94
  });
96
95
 
97
96
  });
@@ -7,10 +7,10 @@ import { unescsource, str } from '../../source';
7
7
 
8
8
  export const url: AutolinkParser.UrlParser = lazy(() => rewrite(
9
9
  open(
10
- /(?<![0-9a-z][.+-]?)https?:\/\/(?=[\x21-\x7E])/y,
11
- precedence(1, some(union([
12
- verify(bracket, ns => ns.length > 0),
13
- some(unescsource, /([-+*=~^_/])\1|[,.;:!?]{2}|[-+*=~^_,.;:!?]?(?=[\\"`\[\](){}<>()[]{}|]|[^\x21-\x7E]|$)/y),
10
+ /(?<![0-9A-Za-z][.+-]?)https?:\/\/(?=[\x21-\x7E])/y,
11
+ precedence(0, some(union([
12
+ some(unescsource, /(?<![-+*=~^_,.;:!?])[-+*=~^_,.;:!?]*(?=[\\$"`\[\](){}<>()[]{}|]|[^\x21-\x7E]|$)/y),
13
+ precedence(1, verify(bracket, ns => ns.length > 0)),
14
14
  ]), undefined, [[/[^\x21-\x7E]|\$/y, 9]])),
15
15
  false,
16
16
  [3 | Backtrack.autolink]),
@@ -1,6 +1,5 @@
1
1
  import { MarkdownParser } from '../../markdown';
2
2
  import { Command } from './context';
3
- import { clean } from '../combinator/data/parser';
4
3
  import { union, some } from '../combinator';
5
4
  import { segment as heading } from './block/heading';
6
5
  import { segment as codeblock } from './block/codeblock';
@@ -43,14 +42,9 @@ const parser: SegmentParser = union([
43
42
  export function* segment(source: string): Generator<string, undefined, undefined> {
44
43
  if (!validate(source, MAX_INPUT_SIZE)) return yield `${Command.Error}Too large input over ${MAX_INPUT_SIZE.toLocaleString('en')} bytes.\n${source.slice(0, 1001)}`;
45
44
  assert(source.length < Number.MAX_SAFE_INTEGER);
46
- const context = {
47
- source,
48
- position: 0,
49
- };
50
- const input = { context };
51
- for (; context.position < source.length;) {
52
- const { position } = context;
53
- const result = parser(input)!;
45
+ for (let position = 0; position < source.length;) {
46
+ const context = { source, position };
47
+ const result = parser({ context })!;
54
48
  assert(result);
55
49
  assert(context.position > position);
56
50
  const segs = result.length > 0
@@ -63,7 +57,7 @@ export function* segment(source: string): Generator<string, undefined, undefined
63
57
  ? yield seg
64
58
  : yield `${Command.Error}Too large segment over ${MAX_SEGMENT_SIZE.toLocaleString('en')} bytes.\n${seg}`
65
59
  }
66
- clean(context);
60
+ position = context.position;
67
61
  }
68
62
  }
69
63
 
@@ -5,7 +5,8 @@ import { Parser, Result, List, Data, Ctx, Node, Context, failsafe } from '../com
5
5
  import { define } from 'typed-dom/dom';
6
6
 
7
7
  export function* unwrap<N>(nodes: List<Data<N>> | undefined): Iterable<N> {
8
- for (const node of nodes ?? []) {
8
+ if (nodes === undefined) return;
9
+ for (const node of nodes) {
9
10
  yield node.value;
10
11
  }
11
12
  }