securemark 0.259.2 → 0.260.0

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.
Files changed (53) hide show
  1. package/CHANGELOG.md +5 -0
  2. package/design.md +14 -4
  3. package/dist/index.js +203 -153
  4. package/package.json +1 -1
  5. package/src/combinator/control/constraint/block.ts +2 -3
  6. package/src/combinator/control/constraint/contract.ts +5 -7
  7. package/src/combinator/control/constraint/line.ts +1 -2
  8. package/src/combinator/control/manipulation/convert.ts +1 -2
  9. package/src/combinator/control/manipulation/fence.ts +1 -2
  10. package/src/combinator/control/manipulation/match.ts +2 -3
  11. package/src/combinator/control/manipulation/scope.ts +3 -5
  12. package/src/combinator/control/manipulation/surround.ts +2 -2
  13. package/src/combinator/control/monad/bind.ts +2 -3
  14. package/src/combinator/data/parser/context.ts +14 -18
  15. package/src/combinator/data/parser/inits.ts +1 -2
  16. package/src/combinator/data/parser/sequence.ts +1 -2
  17. package/src/combinator/data/parser/some.ts +1 -2
  18. package/src/parser/api/parse.test.ts +19 -19
  19. package/src/parser/autolink.test.ts +6 -6
  20. package/src/parser/block/blockquote.test.ts +8 -8
  21. package/src/parser/block/codeblock.test.ts +4 -4
  22. package/src/parser/block/dlist.test.ts +1 -1
  23. package/src/parser/block/extension/figure.test.ts +1 -1
  24. package/src/parser/block/heading.test.ts +5 -5
  25. package/src/parser/block/olist.test.ts +1 -1
  26. package/src/parser/block/paragraph.test.ts +14 -14
  27. package/src/parser/block/reply/cite.test.ts +11 -11
  28. package/src/parser/block/reply/quote.test.ts +3 -3
  29. package/src/parser/block/reply.test.ts +8 -8
  30. package/src/parser/block/sidefence.test.ts +6 -6
  31. package/src/parser/block/ulist.test.ts +1 -1
  32. package/src/parser/context.ts +8 -7
  33. package/src/parser/inline/annotation.test.ts +3 -3
  34. package/src/parser/inline/autolink/account.test.ts +11 -11
  35. package/src/parser/inline/autolink/account.ts +4 -2
  36. package/src/parser/inline/autolink/anchor.test.ts +9 -9
  37. package/src/parser/inline/autolink/anchor.ts +14 -11
  38. package/src/parser/inline/autolink/channel.test.ts +3 -3
  39. package/src/parser/inline/autolink/hashnum.ts +4 -2
  40. package/src/parser/inline/autolink/hashtag.test.ts +20 -20
  41. package/src/parser/inline/autolink/hashtag.ts +4 -2
  42. package/src/parser/inline/autolink/url.test.ts +55 -55
  43. package/src/parser/inline/autolink/url.ts +5 -3
  44. package/src/parser/inline/html.test.ts +0 -2
  45. package/src/parser/inline/html.ts +1 -1
  46. package/src/parser/inline/link.test.ts +110 -110
  47. package/src/parser/inline/link.ts +8 -6
  48. package/src/parser/inline/media.test.ts +1 -0
  49. package/src/parser/inline/media.ts +1 -1
  50. package/src/parser/inline/reference.test.ts +3 -3
  51. package/src/parser/inline.test.ts +51 -51
  52. package/src/renderer/render/media/pdf.ts +1 -0
  53. package/src/util/info.ts +2 -4
@@ -107,7 +107,7 @@ describe('Unit: parser/inline', () => {
107
107
  assert.deepStrictEqual(inspect(parser('*<*>')), [['<em>&lt;</em>', '>'], '']);
108
108
  assert.deepStrictEqual(inspect(parser('*a((b))*')), [['<em>a<sup class="annotation"><span>b</span></sup></em>'], '']);
109
109
  assert.deepStrictEqual(inspect(parser('``a`')), [['``', 'a', '`'], '']);
110
- assert.deepStrictEqual(inspect(parser('[@a]')), [['[', '<a href="/@a" class="account">@a</a>', ']'], '']);
110
+ assert.deepStrictEqual(inspect(parser('[@a]')), [['[', '<a class="account" href="/@a">@a</a>', ']'], '']);
111
111
  assert.deepStrictEqual(inspect(parser('[#1][#2]')), [['<a class="index" href="#index:1">1</a>', '<a class="index" href="#index:2">2</a>'], '']);
112
112
  assert.deepStrictEqual(inspect(parser('[$1]')), [['[', '$', '1', ']'], '']);
113
113
  assert.deepStrictEqual(inspect(parser('[$1-2]')), [['[', '$', '1-2', ']'], '']);
@@ -115,29 +115,29 @@ describe('Unit: parser/inline', () => {
115
115
  assert.deepStrictEqual(inspect(parser('$-1, $-2')), [['<a class="label" data-label="$-1">$-1</a>', ',', ' ', '<a class="label" data-label="$-2">$-2</a>'], '']);
116
116
  assert.deepStrictEqual(inspect(parser('$-1 and $-2')), [['<a class="label" data-label="$-1">$-1</a>', ' ', 'and', ' ', '<a class="label" data-label="$-2">$-2</a>'], '']);
117
117
  assert.deepStrictEqual(inspect(parser('$$-1')), [['$', '<a class="label" data-label="$-1">$-1</a>'], '']);
118
- assert.deepStrictEqual(inspect(parser('[[#a]]')), [['<sup class="reference"><span><a href="/hashtags/a" class="hashtag">#a</a></span></sup>'], '']);
118
+ assert.deepStrictEqual(inspect(parser('[[#a]]')), [['<sup class="reference"><span><a class="hashtag" href="/hashtags/a">#a</a></span></sup>'], '']);
119
119
  assert.deepStrictEqual(inspect(parser('[[$-1]]')), [['<sup class="reference"><span><a class="label" data-label="$-1">$-1</a></span></sup>'], '']);
120
- assert.deepStrictEqual(inspect(parser('[[#-1]]{b}')), [['<sup class="reference"><span>#-1</span></sup>', '<a href="b">b</a>'], '']);
120
+ assert.deepStrictEqual(inspect(parser('[[#-1]]{b}')), [['<sup class="reference"><span>#-1</span></sup>', '<a class="link" href="b">b</a>'], '']);
121
121
  assert.deepStrictEqual(inspect(parser('[[#-1]](b)')), [['<sup class="reference"><span>#-1</span></sup>', '(', 'b', ')'], '']);
122
- assert.deepStrictEqual(inspect(parser('[[#-1]a]{b}')), [['<a href="b">[#-1]a</a>'], '']);
122
+ assert.deepStrictEqual(inspect(parser('[[#-1]a]{b}')), [['<a class="link" href="b">[#-1]a</a>'], '']);
123
123
  assert.deepStrictEqual(inspect(parser('[[#-1]a](b)')), [['[', '<a class="index" href="#index:-1">-1</a>', 'a', ']', '(', 'b', ')'], '']);
124
- assert.deepStrictEqual(inspect(parser('[#a]{b}')), [['<a class="index" href="#index:a">a</a>', '<a href="b">b</a>'], '']);
125
- assert.deepStrictEqual(inspect(parser('[@a]{b}')), [['[', '<a href="/@a" class="account">@a</a>', ']', '<a href="b">b</a>'], '']);
126
- assert.deepStrictEqual(inspect(parser('[http://host]{http://evil}')), [['[', '<a href="http://host" target="_blank">http://host</a>', ']', '<a href="http://evil" target="_blank">http://evil</a>'], '']);
127
- assert.deepStrictEqual(inspect(parser('[http://host]{http://host}')), [['[', '<a href="http://host" target="_blank">http://host</a>', ']', '<a href="http://host" target="_blank">http://host</a>'], '']);
124
+ assert.deepStrictEqual(inspect(parser('[#a]{b}')), [['<a class="index" href="#index:a">a</a>', '<a class="link" href="b">b</a>'], '']);
125
+ assert.deepStrictEqual(inspect(parser('[@a]{b}')), [['<a class="link" href="b">@a</a>'], '']);
126
+ assert.deepStrictEqual(inspect(parser('[http://host]{http://evil}')), [['[', '<a class="url" href="http://host" target="_blank">http://host</a>', ']', '<a class="link" href="http://evil" target="_blank">http://evil</a>'], '']);
127
+ assert.deepStrictEqual(inspect(parser('[http://host]{http://host}')), [['[', '<a class="url" href="http://host" target="_blank">http://host</a>', ']', '<a class="link" href="http://host" target="_blank">http://host</a>'], '']);
128
128
  assert.deepStrictEqual(inspect(parser('[]{{a}}')), [['[', ']', '<span class="template">{{a}}</span>'], '']);
129
129
  assert.deepStrictEqual(inspect(parser('![]{{a}}')), [['!', '[', ']', '<span class="template">{{a}}</span>'], '']);
130
- assert.deepStrictEqual(inspect(parser('[\n]{a}')), [['[', '<br>', ']', '<a href="a">a</a>'], '']);
131
- assert.deepStrictEqual(inspect(parser('[\\\n]{a}')), [['[', '<span class="linebreak"> </span>', ']', '<a href="a">a</a>'], '']);
130
+ assert.deepStrictEqual(inspect(parser('[\n]{a}')), [['[', '<br>', ']', '<a class="link" href="a">a</a>'], '']);
131
+ assert.deepStrictEqual(inspect(parser('[\\\n]{a}')), [['[', '<span class="linebreak"> </span>', ']', '<a class="link" href="a">a</a>'], '']);
132
132
  assert.deepStrictEqual(inspect(parser('{}')), [['{', '}'], '']);
133
- assert.deepStrictEqual(inspect(parser('{a}')), [['<a href="a">a</a>'], '']);
133
+ assert.deepStrictEqual(inspect(parser('{a}')), [['<a class="link" href="a">a</a>'], '']);
134
134
  assert.deepStrictEqual(inspect(parser('{{a}}')), [['<span class="template">{{a}}</span>'], '']);
135
135
  assert.deepStrictEqual(inspect(parser('!{}')), [['!', '{', '}'], '']);
136
136
  assert.deepStrictEqual(inspect(parser('!{a}')), [['<a href="a" target="_blank"><img class="media" data-src="a" alt=""></a>'], '']);
137
137
  assert.deepStrictEqual(inspect(parser('!{{a}}')), [['!', '<span class="template">{{a}}</span>'], '']);
138
138
  assert.deepStrictEqual(inspect(parser('!{{{a}}}')), [['!', '<span class="template">{{{a}}}</span>'], '']);
139
139
  assert.deepStrictEqual(inspect(parser('!!{a}')), [['!', '<a href="a" target="_blank"><img class="media" data-src="a" alt=""></a>'], '']);
140
- assert.deepStrictEqual(inspect(parser('${a}')), [['$', '<a href="a">a</a>'], '']);
140
+ assert.deepStrictEqual(inspect(parser('${a}')), [['$', '<a class="link" href="a">a</a>'], '']);
141
141
  assert.deepStrictEqual(inspect(parser('${{a}}')), [['$', '<span class="template">{{a}}</span>'], '']);
142
142
  assert.deepStrictEqual(inspect(parser('${{{a}}}')), [['$', '<span class="template">{{{a}}}</span>'], '']);
143
143
  assert.deepStrictEqual(inspect(parser('Di$ney Micro$oft')), [['Di', '$', 'ney', ' ', 'Micro', '$', 'oft'], '']);
@@ -152,22 +152,22 @@ describe('Unit: parser/inline', () => {
152
152
  assert.deepStrictEqual(inspect(parser('[[[[a]]')), [['', '[', '', '[', '<sup class="reference"><span>a</span></sup>'], '']);
153
153
  assert.deepStrictEqual(inspect(parser('[[[[a]]]]')), [['<sup class="reference"><span>[[a]]</span></sup>'], '']);
154
154
  assert.deepStrictEqual(inspect(parser('[[[$-1]]]')), [['<sup class="reference"><span><a class="label" data-label="$-1">$-1</a></span></sup>'], '']);
155
- assert.deepStrictEqual(inspect(parser('[[[]{a}]]')), [['<sup class="reference"><span><a href="a">a</a></span></sup>'], '']);
156
- assert.deepStrictEqual(inspect(parser('[[[a]{b}]]')), [['<sup class="reference"><span><a href="b">a</a></span></sup>'], '']);
157
- assert.deepStrictEqual(inspect(parser('[(([a]{#}))]{#}')), [['<a href="#"><span class="paren">(<span class="paren">([a]{#})</span>)</span></a>'], '']);
155
+ assert.deepStrictEqual(inspect(parser('[[[]{a}]]')), [['<sup class="reference"><span><a class="link" href="a">a</a></span></sup>'], '']);
156
+ assert.deepStrictEqual(inspect(parser('[[[a]{b}]]')), [['<sup class="reference"><span><a class="link" href="b">a</a></span></sup>'], '']);
157
+ assert.deepStrictEqual(inspect(parser('[(([a]{#}))]{#}')), [['<a class="link" href="#"><span class="paren">(<span class="paren">([a]{#})</span>)</span></a>'], '']);
158
158
  assert.deepStrictEqual(inspect(parser('[[<bdi>]]')), [['<sup class="reference"><span><span class="invalid">&lt;bdi&gt;</span></span></sup>'], '']);
159
159
  assert.deepStrictEqual(inspect(parser('[[${]]}$')), [['', '[', '', '[', '<span class="math" translate="no" data-src="${]]}$">${]]}$</span>'], '']);
160
160
  assert.deepStrictEqual(inspect(parser('"[[""]]')), [['"', '<sup class="reference"><span>""</span></sup>'], '']);
161
- assert.deepStrictEqual(inspect(parser('[[a](b)]{c}')), [['<a href="c"><ruby>a<rp>(</rp><rt>b</rt><rp>)</rp></ruby></a>'], '']);
162
- assert.deepStrictEqual(inspect(parser('[[[[[[[{a}')), [['', '[', '', '[', '', '[', '', '[', '', '[', '', '[', '', '[', '<a href="a">a</a>'], '']);
163
- assert.deepStrictEqual(inspect(parser('<http://host>')), [['<', '<a href="http://host" target="_blank">http://host</a>', '>'], '']);
164
- assert.deepStrictEqual(inspect(parser('[~http://host')), [['', '[', '~', '<a href="http://host" target="_blank">http://host</a>'], '']);
161
+ assert.deepStrictEqual(inspect(parser('[[a](b)]{c}')), [['<a class="link" href="c"><ruby>a<rp>(</rp><rt>b</rt><rp>)</rp></ruby></a>'], '']);
162
+ assert.deepStrictEqual(inspect(parser('[[[[[[[{a}')), [['', '[', '', '[', '', '[', '', '[', '', '[', '', '[', '', '[', '<a class="link" href="a">a</a>'], '']);
163
+ assert.deepStrictEqual(inspect(parser('<http://host>')), [['<', '<a class="url" href="http://host" target="_blank">http://host</a>', '>'], '']);
164
+ assert.deepStrictEqual(inspect(parser('[~http://host')), [['', '[', '~', '<a class="url" href="http://host" target="_blank">http://host</a>'], '']);
165
165
  assert.deepStrictEqual(inspect(parser('[~a@b')), [['', '[', '~', '<a class="email" href="mailto:a@b">a@b</a>'], '']);
166
166
  assert.deepStrictEqual(inspect(parser('[~~a~~]')), [['[', '<del>a</del>', ']'], '']);
167
- assert.deepStrictEqual(inspect(parser('[^http://host')), [['[^', '<a href="http://host" target="_blank">http://host</a>'], '']);
167
+ assert.deepStrictEqual(inspect(parser('[^http://host')), [['[^', '<a class="url" href="http://host" target="_blank">http://host</a>'], '']);
168
168
  assert.deepStrictEqual(inspect(parser('[^a@b')), [['[^', '<a class="email" href="mailto:a@b">a@b</a>'], '']);
169
- assert.deepStrictEqual(inspect(parser('[#a*b\nc*]')), [['[', '<a href="/hashtags/a" class="hashtag">#a</a>', '<em>b<br>c</em>', ']'], '']);
170
- assert.deepStrictEqual(inspect(parser('[*a\nb*]{/}')), [['[', '<em>a<br>b</em>', ']', '<a href="/">/</a>'], '']);
169
+ assert.deepStrictEqual(inspect(parser('[#a*b\nc*]')), [['[', '<a class="hashtag" href="/hashtags/a">#a</a>', '<em>b<br>c</em>', ']'], '']);
170
+ assert.deepStrictEqual(inspect(parser('[*a\nb*]{/}')), [['[', '<em>a<br>b</em>', ']', '<a class="link" href="/">/</a>'], '']);
171
171
  assert.deepStrictEqual(inspect(parser('[*a\nb]*')), [['[', '*', 'a', '<br>', 'b', ']', '*'], '']);
172
172
  assert.deepStrictEqual(inspect(parser('[*[a\nb*]')), [['', '[', '*', '[', 'a', '<br>', 'b', '*', ']'], '']);
173
173
  assert.deepStrictEqual(inspect(parser('[[*a\nb*]]')), [['[', '[', '<em>a<br>b</em>', ']', ']'], '']);
@@ -176,20 +176,20 @@ describe('Unit: parser/inline', () => {
176
176
  });
177
177
 
178
178
  it('uri', () => {
179
- assert.deepStrictEqual(inspect(parser('\nhttp://host')), [['<br>', '<a href="http://host" target="_blank">http://host</a>'], '']);
179
+ assert.deepStrictEqual(inspect(parser('\nhttp://host')), [['<br>', '<a class="url" href="http://host" target="_blank">http://host</a>'], '']);
180
180
  assert.deepStrictEqual(inspect(parser('0http://host')), [['0http', ':', '/', '/', 'host'], '']);
181
181
  assert.deepStrictEqual(inspect(parser('0aAhttp://host')), [['0aAhttp', ':', '/', '/', 'host'], '']);
182
- assert.deepStrictEqual(inspect(parser('?http://host')), [['?', '<a href="http://host" target="_blank">http://host</a>'], '']);
182
+ assert.deepStrictEqual(inspect(parser('?http://host')), [['?', '<a class="url" href="http://host" target="_blank">http://host</a>'], '']);
183
183
  assert.deepStrictEqual(inspect(parser('0!http://host')), [['0', '<a href="http://host" target="_blank"><img class="media" data-src="http://host" alt=""></a>'], '']);
184
- assert.deepStrictEqual(inspect(parser('0?http://host')), [['0', '?', '<a href="http://host" target="_blank">http://host</a>'], '']);
184
+ assert.deepStrictEqual(inspect(parser('0?http://host')), [['0', '?', '<a class="url" href="http://host" target="_blank">http://host</a>'], '']);
185
185
  assert.deepStrictEqual(inspect(parser('0!!http://host')), [['0', '!', '<a href="http://host" target="_blank"><img class="media" data-src="http://host" alt=""></a>'], '']);
186
186
  assert.deepStrictEqual(inspect(parser('0?!http://host')), [['0', '?', '<a href="http://host" target="_blank"><img class="media" data-src="http://host" alt=""></a>'], '']);
187
- assert.deepStrictEqual(inspect(parser('0!?http://host')), [['0', '!', '?', '<a href="http://host" target="_blank">http://host</a>'], '']);
188
- assert.deepStrictEqual(inspect(parser('_http://host')), [['_', '<a href="http://host" target="_blank">http://host</a>'], '']);
189
- assert.deepStrictEqual(inspect(parser('*http://host*')), [['<em><a href="http://host" target="_blank">http://host</a></em>'], '']);
190
- assert.deepStrictEqual(inspect(parser('(http://host)')), [['<span class="paren">(<a href="http://host" target="_blank">http://host</a>)</span>'], '']);
191
- assert.deepStrictEqual(inspect(parser(' http://host')), [[' ', '<a href="http://host" target="_blank">http://host</a>'], '']);
192
- assert.deepStrictEqual(inspect(parser('あhttp://hostい')), [['あ', '<a href="http://host" target="_blank">http://host</a>', 'い'], '']);
187
+ assert.deepStrictEqual(inspect(parser('0!?http://host')), [['0', '!', '?', '<a class="url" href="http://host" target="_blank">http://host</a>'], '']);
188
+ assert.deepStrictEqual(inspect(parser('_http://host')), [['_', '<a class="url" href="http://host" target="_blank">http://host</a>'], '']);
189
+ assert.deepStrictEqual(inspect(parser('*http://host*')), [['<em><a class="url" href="http://host" target="_blank">http://host</a></em>'], '']);
190
+ assert.deepStrictEqual(inspect(parser('(http://host)')), [['<span class="paren">(<a class="url" href="http://host" target="_blank">http://host</a>)</span>'], '']);
191
+ assert.deepStrictEqual(inspect(parser(' http://host')), [[' ', '<a class="url" href="http://host" target="_blank">http://host</a>'], '']);
192
+ assert.deepStrictEqual(inspect(parser('あhttp://hostい')), [['あ', '<a class="url" href="http://host" target="_blank">http://host</a>', 'い'], '']);
193
193
  });
194
194
 
195
195
  it('email', () => {
@@ -202,27 +202,27 @@ describe('Unit: parser/inline', () => {
202
202
  });
203
203
 
204
204
  it('channel', () => {
205
- assert.deepStrictEqual(inspect(parser('@a#b')), [['<a href="/@a?ch=b" class="channel">@a#b</a>'], '']);
205
+ assert.deepStrictEqual(inspect(parser('@a#b')), [['<a class="channel" href="/@a?ch=b">@a#b</a>'], '']);
206
206
  assert.deepStrictEqual(inspect(parser('@a#domain/b')), [['@a#domain/b'], '']);
207
- assert.deepStrictEqual(inspect(parser('@domain/a#b')), [['<a href="https://domain/@a?ch=b" target="_blank" class="channel">@domain/a#b</a>'], '']);
207
+ assert.deepStrictEqual(inspect(parser('@domain/a#b')), [['<a class="channel" href="https://domain/@a?ch=b" target="_blank">@domain/a#b</a>'], '']);
208
208
  assert.deepStrictEqual(inspect(parser('@domain/a#domain/b')), [['@domain/a#domain/b'], '']);
209
- assert.deepStrictEqual(inspect(parser('_@a#b')), [['_', '<a href="/@a?ch=b" class="channel">@a#b</a>'], '']);
210
- assert.deepStrictEqual(inspect(parser(' @a#b')), [[' ', '<a href="/@a?ch=b" class="channel">@a#b</a>'], '']);
209
+ assert.deepStrictEqual(inspect(parser('_@a#b')), [['_', '<a class="channel" href="/@a?ch=b">@a#b</a>'], '']);
210
+ assert.deepStrictEqual(inspect(parser(' @a#b')), [[' ', '<a class="channel" href="/@a?ch=b">@a#b</a>'], '']);
211
211
  });
212
212
 
213
213
  it('account', () => {
214
- assert.deepStrictEqual(inspect(parser('@a')), [['<a href="/@a" class="account">@a</a>'], '']);
215
- assert.deepStrictEqual(inspect(parser('_@a')), [['_', '<a href="/@a" class="account">@a</a>'], '']);
216
- assert.deepStrictEqual(inspect(parser('*@a*')), [['<em><a href="/@a" class="account">@a</a></em>'], '']);
217
- assert.deepStrictEqual(inspect(parser('(@a)')), [['<span class="paren">(<a href="/@a" class="account">@a</a>)</span>'], '']);
218
- assert.deepStrictEqual(inspect(parser(' @a')), [[' ', '<a href="/@a" class="account">@a</a>'], '']);
214
+ assert.deepStrictEqual(inspect(parser('@a')), [['<a class="account" href="/@a">@a</a>'], '']);
215
+ assert.deepStrictEqual(inspect(parser('_@a')), [['_', '<a class="account" href="/@a">@a</a>'], '']);
216
+ assert.deepStrictEqual(inspect(parser('*@a*')), [['<em><a class="account" href="/@a">@a</a></em>'], '']);
217
+ assert.deepStrictEqual(inspect(parser('(@a)')), [['<span class="paren">(<a class="account" href="/@a">@a</a>)</span>'], '']);
218
+ assert.deepStrictEqual(inspect(parser(' @a')), [[' ', '<a class="account" href="/@a">@a</a>'], '']);
219
219
  });
220
220
 
221
221
  it('hashtag', () => {
222
222
  assert.deepStrictEqual(inspect(parser('#a#')), [['#a#'], '']);
223
223
  assert.deepStrictEqual(inspect(parser('#a#b')), [['#a#b'], '']);
224
- assert.deepStrictEqual(inspect(parser('#a')), [['<a href="/hashtags/a" class="hashtag">#a</a>'], '']);
225
- assert.deepStrictEqual(inspect(parser('#a\nb\n#c\n[#d]')), [['<a href="/hashtags/a" class="hashtag">#a</a>', '<br>', 'b', '<br>', '<a href="/hashtags/c" class="hashtag">#c</a>', '<br>', '<a class="index" href="#index:d">d</a>'], '']);
224
+ assert.deepStrictEqual(inspect(parser('#a')), [['<a class="hashtag" href="/hashtags/a">#a</a>'], '']);
225
+ assert.deepStrictEqual(inspect(parser('#a\nb\n#c\n[#d]')), [['<a class="hashtag" href="/hashtags/a">#a</a>', '<br>', 'b', '<br>', '<a class="hashtag" href="/hashtags/c">#c</a>', '<br>', '<a class="index" href="#index:d">d</a>'], '']);
226
226
  assert.deepStrictEqual(inspect(parser('##a')), [['##a'], '']);
227
227
  assert.deepStrictEqual(inspect(parser('a#b')), [['a#b'], '']);
228
228
  assert.deepStrictEqual(inspect(parser('0a#b')), [['0a#b'], '']);
@@ -230,15 +230,15 @@ describe('Unit: parser/inline', () => {
230
230
  assert.deepStrictEqual(inspect(parser('あい#b')), [['あ', 'い#b'], '']);
231
231
  assert.deepStrictEqual(inspect(parser('0aあ#b')), [['0aあ#b'], '']);
232
232
  assert.deepStrictEqual(inspect(parser('0aあい#b')), [['0a', 'あ', 'い#b'], '']);
233
- assert.deepStrictEqual(inspect(parser('「#あ」')), [['「', '<a href="/hashtags/あ" class="hashtag">#あ</a>', '」'], '']);
234
- assert.deepStrictEqual(inspect(parser('a\n#b')), [['a', '<br>', '<a href="/hashtags/b" class="hashtag">#b</a>'], '']);
235
- assert.deepStrictEqual(inspect(parser('a\\\n#b')), [['a', '<span class="linebreak"> </span>', '<a href="/hashtags/b" class="hashtag">#b</a>'], '']);
236
- assert.deepStrictEqual(inspect(parser('*a*#b')), [['<em>a</em>', '<a href="/hashtags/b" class="hashtag">#b</a>'], '']);
237
- assert.deepStrictEqual(inspect(parser('((a))#b')), [['<sup class="annotation"><span>a</span></sup>', '<a href="/hashtags/b" class="hashtag">#b</a>'], '']);
238
- assert.deepStrictEqual(inspect(parser('[[a]]#b')), [['<sup class="reference"><span>a</span></sup>', '<a href="/hashtags/b" class="hashtag">#b</a>'], '']);
239
- assert.deepStrictEqual(inspect(parser('[#a')), [['', '[', '<a href="/hashtags/a" class="hashtag">#a</a>'], '']);
240
- assert.deepStrictEqual(inspect(parser('|#a')), [['|', '<a href="/hashtags/a" class="hashtag">#a</a>'], '']);
241
- assert.deepStrictEqual(inspect(parser(' #a')), [[' ', '<a href="/hashtags/a" class="hashtag">#a</a>'], '']);
233
+ assert.deepStrictEqual(inspect(parser('「#あ」')), [['「', '<a class="hashtag" href="/hashtags/あ">#あ</a>', '」'], '']);
234
+ assert.deepStrictEqual(inspect(parser('a\n#b')), [['a', '<br>', '<a class="hashtag" href="/hashtags/b">#b</a>'], '']);
235
+ assert.deepStrictEqual(inspect(parser('a\\\n#b')), [['a', '<span class="linebreak"> </span>', '<a class="hashtag" href="/hashtags/b">#b</a>'], '']);
236
+ assert.deepStrictEqual(inspect(parser('*a*#b')), [['<em>a</em>', '<a class="hashtag" href="/hashtags/b">#b</a>'], '']);
237
+ assert.deepStrictEqual(inspect(parser('((a))#b')), [['<sup class="annotation"><span>a</span></sup>', '<a class="hashtag" href="/hashtags/b">#b</a>'], '']);
238
+ assert.deepStrictEqual(inspect(parser('[[a]]#b')), [['<sup class="reference"><span>a</span></sup>', '<a class="hashtag" href="/hashtags/b">#b</a>'], '']);
239
+ assert.deepStrictEqual(inspect(parser('[#a')), [['', '[', '<a class="hashtag" href="/hashtags/a">#a</a>'], '']);
240
+ assert.deepStrictEqual(inspect(parser('|#a')), [['|', '<a class="hashtag" href="/hashtags/a">#a</a>'], '']);
241
+ assert.deepStrictEqual(inspect(parser(' #a')), [[' ', '<a class="hashtag" href="/hashtags/a">#a</a>'], '']);
242
242
  });
243
243
 
244
244
  it('hashnum', () => {
@@ -14,6 +14,7 @@ export function pdf(source: HTMLImageElement, url: URL): HTMLElement | undefined
14
14
  }),
15
15
  html('div', [
16
16
  define(parse(`{ ${source.getAttribute('data-src')} }`).querySelector('a')!, {
17
+ class: null,
17
18
  target: '_blank',
18
19
  }),
19
20
  ]),
package/src/util/info.ts CHANGED
@@ -6,10 +6,8 @@ import { push } from 'spica/array';
6
6
  export function info(source: DocumentFragment | HTMLElement | ShadowRoot): Info {
7
7
  const match = scope(source, '.invalid');
8
8
  return {
9
- url: find<HTMLAnchorElement>('a:not(:is(.email, .account, .channel, .hashtag, .hashnum, .anchor))')
10
- .filter(el => ['http:', 'https:'].includes(el.protocol)),
11
- tel: find<HTMLAnchorElement>('a:not(:is(.email, .account, .channel, .hashtag, .hashnum, .anchor))')
12
- .filter(el => ['tel:'].includes(el.protocol)),
9
+ url: find('a.link, a.url'),
10
+ tel: find('a.tel'),
13
11
  email: find('a.email'),
14
12
  account: find('a.account'),
15
13
  channel: find('a.channel'),