securemark 0.286.1 → 0.286.3
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 +59 -16
- package/dist/index.js +50 -45
- package/markdown.d.ts +1 -1
- package/package.json +1 -1
- package/src/combinator/control/manipulation/surround.ts +0 -1
- package/src/parser/api/parse.test.ts +8 -6
- package/src/parser/context.ts +10 -8
- package/src/parser/inline/autolink/hashnum.test.ts +2 -1
- package/src/parser/inline/autolink/hashnum.ts +1 -1
- package/src/parser/inline/autolink/hashtag.test.ts +10 -11
- package/src/parser/inline/autolink/hashtag.ts +2 -2
- package/src/parser/inline/autolink/url.ts +6 -6
- package/src/parser/inline/autolink.ts +5 -5
- package/src/parser/inline/deletion.ts +4 -3
- package/src/parser/inline/emphasis.ts +4 -4
- package/src/parser/inline/emstrong.ts +4 -3
- package/src/parser/inline/extension/index.ts +6 -6
- package/src/parser/inline/extension/placeholder.ts +4 -4
- package/src/parser/inline/html.ts +6 -6
- package/src/parser/inline/insertion.ts +4 -3
- package/src/parser/inline/italic.ts +5 -3
- package/src/parser/inline/link.test.ts +1 -0
- package/src/parser/inline/mark.ts +5 -4
- package/src/parser/inline/math.ts +4 -3
- package/src/parser/inline/reference.ts +6 -1
- package/src/parser/inline/remark.ts +4 -3
- package/src/parser/inline/ruby.test.ts +2 -1
- package/src/parser/inline/ruby.ts +18 -10
- package/src/parser/inline/strong.ts +4 -4
- package/src/parser/inline/template.ts +6 -6
- package/src/parser/inline.test.ts +9 -8
- package/src/parser/source/str.ts +4 -1
- package/src/parser/source/text.ts +2 -2
|
@@ -204,9 +204,10 @@ describe('Unit: parser/inline', () => {
|
|
|
204
204
|
assert.deepStrictEqual(inspect(parser('#a')), [['<a class="hashtag" href="/hashtags/a">#a</a>'], '']);
|
|
205
205
|
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>'], '']);
|
|
206
206
|
assert.deepStrictEqual(inspect(parser('##a')), [['##a'], '']);
|
|
207
|
-
assert.deepStrictEqual(inspect(parser('_#a')), [['_
|
|
208
|
-
assert.deepStrictEqual(inspect(parser('_#a_')), [['_
|
|
209
|
-
assert.deepStrictEqual(inspect(parser('_#a_b')), [['_
|
|
207
|
+
assert.deepStrictEqual(inspect(parser('_#a')), [['_', '<a class="hashtag" href="/hashtags/a">#a</a>'], '']);
|
|
208
|
+
assert.deepStrictEqual(inspect(parser('_#a_')), [['_', '<a class="hashtag" href="/hashtags/a">#a</a>', '_'], '']);
|
|
209
|
+
assert.deepStrictEqual(inspect(parser('_#a_b')), [['_', '<a class="hashtag" href="/hashtags/a_b">#a_b</a>'], '']);
|
|
210
|
+
assert.deepStrictEqual(inspect(parser('_#a_b_')), [['_', '<a class="hashtag" href="/hashtags/a_b">#a_b</a>', '_'], '']);
|
|
210
211
|
assert.deepStrictEqual(inspect(parser('a#b')), [['a#b'], '']);
|
|
211
212
|
assert.deepStrictEqual(inspect(parser('0a#b')), [['0a#b'], '']);
|
|
212
213
|
assert.deepStrictEqual(inspect(parser('あ#b')), [['あ#b'], '']);
|
|
@@ -216,8 +217,6 @@ describe('Unit: parser/inline', () => {
|
|
|
216
217
|
assert.deepStrictEqual(inspect(parser('「#あ」')), [['「', '<a class="hashtag" href="/hashtags/あ">#あ</a>', '」'], '']);
|
|
217
218
|
assert.deepStrictEqual(inspect(parser('a\n#b')), [['a', '<br>', '<a class="hashtag" href="/hashtags/b">#b</a>'], '']);
|
|
218
219
|
assert.deepStrictEqual(inspect(parser('a\\\n#b')), [['a', '<br>', '<a class="hashtag" href="/hashtags/b">#b</a>'], '']);
|
|
219
|
-
assert.deepStrictEqual(inspect(parser('_a_#b')), [['_', 'a_#b'], '']);
|
|
220
|
-
assert.deepStrictEqual(inspect(parser('*a*#b')), [['<em>a</em>', '<a class="hashtag" href="/hashtags/b">#b</a>'], '']);
|
|
221
220
|
assert.deepStrictEqual(inspect(parser('((a))#b')), [['<sup class="annotation"><span>a</span></sup>', '<a class="hashtag" href="/hashtags/b">#b</a>'], '']);
|
|
222
221
|
assert.deepStrictEqual(inspect(parser('[[a]]#b')), [['<sup class="reference"><span>a</span></sup>', '<a class="hashtag" href="/hashtags/b">#b</a>'], '']);
|
|
223
222
|
assert.deepStrictEqual(inspect(parser('[#a')), [['[', '<a class="hashtag" href="/hashtags/a">#a</a>'], '']);
|
|
@@ -227,10 +226,12 @@ describe('Unit: parser/inline', () => {
|
|
|
227
226
|
|
|
228
227
|
it('hashnum', () => {
|
|
229
228
|
assert.deepStrictEqual(inspect(parser('#1')), [['<a class="hashnum">#1</a>'], '']);
|
|
229
|
+
assert.deepStrictEqual(inspect(parser(`#1'`)), [[`<a class="hashnum">#1</a>`, `'`], '']);
|
|
230
230
|
assert.deepStrictEqual(inspect(parser('#1234567890@a')), [['#1234567890@a'], '']);
|
|
231
|
-
assert.deepStrictEqual(inspect(parser('_#1')), [['_
|
|
232
|
-
assert.deepStrictEqual(inspect(parser('_#1_')), [['_
|
|
233
|
-
assert.deepStrictEqual(inspect(parser('_#1_0')), [['_
|
|
231
|
+
assert.deepStrictEqual(inspect(parser('_#1')), [['_', '<a class="hashnum">#1</a>'], '']);
|
|
232
|
+
assert.deepStrictEqual(inspect(parser('_#1_')), [['_', '<a class="hashnum">#1</a>', '_'], '']);
|
|
233
|
+
assert.deepStrictEqual(inspect(parser('_#1_0')), [['_', '<a class="hashtag" href="/hashtags/1_0">#1_0</a>'], '']);
|
|
234
|
+
assert.deepStrictEqual(inspect(parser('_#1_0_')), [['_', '<a class="hashtag" href="/hashtags/1_0">#1_0</a>', '_'], '']);
|
|
234
235
|
assert.deepStrictEqual(inspect(parser('「#1」')), [['「', '<a class="hashnum">#1</a>', '」'], '']);
|
|
235
236
|
});
|
|
236
237
|
|
package/src/parser/source/str.ts
CHANGED
|
@@ -5,6 +5,9 @@ import { consume } from '../../combinator';
|
|
|
5
5
|
export function str(pattern: string | RegExp, not?: string): StrParser;
|
|
6
6
|
export function str(pattern: string | RegExp, not?: string): Parser<string, Context<StrParser>, []> {
|
|
7
7
|
assert(pattern);
|
|
8
|
+
const count = typeof pattern === 'object'
|
|
9
|
+
? /[^^\\*+][*+]/.test(pattern.source)
|
|
10
|
+
: false;
|
|
8
11
|
return typeof pattern === 'string'
|
|
9
12
|
? ({ source }) => {
|
|
10
13
|
if (source === '') return;
|
|
@@ -16,7 +19,7 @@ export function str(pattern: string | RegExp, not?: string): Parser<string, Cont
|
|
|
16
19
|
: ({ source, context }) => {
|
|
17
20
|
if (source === '') return;
|
|
18
21
|
const m = source.match(pattern);
|
|
19
|
-
m && consume(m[0].length, context);
|
|
22
|
+
count && m && consume(m[0].length, context);
|
|
20
23
|
if (m && not && source.slice(m[0].length, m[0].length + not.length) === not) return;
|
|
21
24
|
return m && m[0].length > 0
|
|
22
25
|
? [[m[0]], source.slice(m[0].length)]
|
|
@@ -4,9 +4,9 @@ import { union, consume, focus } from '../../combinator';
|
|
|
4
4
|
import { str } from './str';
|
|
5
5
|
import { html } from 'typed-dom/dom';
|
|
6
6
|
|
|
7
|
-
export const delimiter = /[\s\x00-\x7F()[]{}“”‘’「」『』]|\S[
|
|
7
|
+
export const delimiter = /[\s\x00-\x7F()[]{}“”‘’「」『』]|\S#|[0-9A-Za-z]>/u;
|
|
8
8
|
export const nonWhitespace = /[\S\n]|$/u;
|
|
9
|
-
export const nonAlphanumeric = /[^0-9A-Za-z]|\S[
|
|
9
|
+
export const nonAlphanumeric = /[^0-9A-Za-z]|\S#|[0-9A-Za-z]>|$/u;
|
|
10
10
|
const repeat = str(/^(.)\1*/);
|
|
11
11
|
|
|
12
12
|
export const text: TextParser = ({ source, context }) => {
|