securemark 0.233.2 → 0.234.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,7 +1,6 @@
1
1
  import { StrongParser } from '../inline';
2
- import { union, some, creator, surround, close, lazy } from '../../combinator';
2
+ import { union, sequence, some, creator, surround, close, lazy } from '../../combinator';
3
3
  import { inline } from '../inline';
4
- import { emphasis } from './emphasis';
5
4
  import { str } from '../source';
6
5
  import { startTight, isEndTightNodes } from '../util';
7
6
  import { html, defrag } from 'typed-dom';
@@ -9,7 +8,10 @@ import { unshift } from 'spica/array';
9
8
 
10
9
  export const strong: StrongParser = lazy(() => creator(surround(close(
11
10
  str('**'), /^(?!\*)/),
12
- startTight(some(union([emphasis, some(inline, '*'), str('*')]), '**')),
11
+ startTight(some(union([
12
+ some(inline, /^\s*\*\*/),
13
+ sequence([some(inline, '*'), inline]),
14
+ ]))),
13
15
  str('**'), false,
14
16
  ([as, bs, cs], rest) =>
15
17
  isEndTightNodes(bs)
@@ -26,26 +26,63 @@ describe('Unit: parser/inline', () => {
26
26
  assert.deepStrictEqual(inspect(parser('*** a***')), [['***', ' ', 'a', '***'], '']);
27
27
  assert.deepStrictEqual(inspect(parser('**** a****')), [['****', ' ', 'a', '****'], '']);
28
28
  assert.deepStrictEqual(inspect(parser('*a**')), [['<em>a</em>', '*'], '']);
29
+ assert.deepStrictEqual(inspect(parser('*a**b')), [['*', 'a', '**', 'b'], '']);
29
30
  assert.deepStrictEqual(inspect(parser('*a**b*')), [['*', 'a', '**', 'b', '*'], '']);
30
31
  assert.deepStrictEqual(inspect(parser('*a**b*c')), [['*', 'a', '**', 'b', '*', 'c'], '']);
31
32
  assert.deepStrictEqual(inspect(parser('*a**b*c*')), [['*', 'a', '**', 'b', '<em>c</em>'], '']);
32
33
  assert.deepStrictEqual(inspect(parser('*a**b**')), [['*', 'a', '<strong>b</strong>'], '']);
34
+ assert.deepStrictEqual(inspect(parser('*a**b**c')), [['*', 'a', '<strong>b</strong>', 'c'], '']);
35
+ assert.deepStrictEqual(inspect(parser('*a**b***')), [['<em>a<strong>b</strong></em>'], '']);
36
+ assert.deepStrictEqual(inspect(parser('*a**b***c')), [['<em>a<strong>b</strong></em>', 'c'], '']);
37
+ assert.deepStrictEqual(inspect(parser('*a**b****')), [['<em>a<strong>b</strong></em>', '*'], '']);
38
+ assert.deepStrictEqual(inspect(parser('*a**b****c')), [['*', 'a', '<strong>b</strong>', '**', 'c'], '']);
39
+ assert.deepStrictEqual(inspect(parser('*a***b****')), [['<em>a</em>', '<strong>b</strong>', '**'], '']);
40
+ assert.deepStrictEqual(inspect(parser('*a***b****c')), [['<em>a</em>', '<strong>b</strong>', '**', 'c'], '']);
41
+ assert.deepStrictEqual(inspect(parser('*a *b**')), [['<em>a <em>b</em></em>'], '']);
42
+ assert.deepStrictEqual(inspect(parser('*a *b**c')), [['*', 'a', ' ', '*', 'b', '**', 'c'], '']);
33
43
  assert.deepStrictEqual(inspect(parser('*a **b***')), [['<em>a <strong>b</strong></em>'], '']);
34
44
  assert.deepStrictEqual(inspect(parser('*a **b***c')), [['<em>a <strong>b</strong></em>', 'c'], '']);
45
+ assert.deepStrictEqual(inspect(parser('*a ***b****')), [['<em>a <em><strong>b</strong></em></em>'], '']);
46
+ assert.deepStrictEqual(inspect(parser('*a ***b****c')), [['<em>a <em><strong>b</strong></em></em>', 'c'], '']);
35
47
  assert.deepStrictEqual(inspect(parser('**a*')), [['**', 'a', '*'], '']);
36
48
  assert.deepStrictEqual(inspect(parser('**a*b**')), [['**', 'a', '<em>b</em>', '*'], '']);
37
49
  assert.deepStrictEqual(inspect(parser('**a*b**c')), [['**', 'a', '*', 'b', '**', 'c'], '']);
50
+ assert.deepStrictEqual(inspect(parser('**a*b***')), [['<strong>a<em>b</em></strong>'], '']);
51
+ assert.deepStrictEqual(inspect(parser('**a*b***c')), [['<strong>a<em>b</em></strong>', 'c'], '']);
52
+ assert.deepStrictEqual(inspect(parser('**a**b****')), [['<strong>a</strong>', 'b', '****'], '']);
53
+ assert.deepStrictEqual(inspect(parser('**a**b****c')), [['<strong>a</strong>', 'b', '****', 'c'], '']);
54
+ assert.deepStrictEqual(inspect(parser('**a***b*****')), [['<strong>a</strong>', '<em>b</em>', '****'], '']);
55
+ assert.deepStrictEqual(inspect(parser('**a***b*****c')), [['<strong>a</strong>', '<em>b</em>', '****', 'c'], '']);
38
56
  assert.deepStrictEqual(inspect(parser('**a *b***')), [['<strong>a <em>b</em></strong>'], '']);
39
57
  assert.deepStrictEqual(inspect(parser('**a *b***c')), [['<strong>a <em>b</em></strong>', 'c'], '']);
58
+ assert.deepStrictEqual(inspect(parser('**a **b****')), [['<strong>a <strong>b</strong></strong>'], '']);
59
+ assert.deepStrictEqual(inspect(parser('**a **b****c')), [['<strong>a <strong>b</strong></strong>', 'c'], '']);
60
+ assert.deepStrictEqual(inspect(parser('**a ***b*****')), [['<strong>a <em><strong>b</strong></em></strong>'], '']);
61
+ assert.deepStrictEqual(inspect(parser('**a ***b*****c')), [['<strong>a <em><strong>b</strong></em></strong>', 'c'], '']);
40
62
  assert.deepStrictEqual(inspect(parser('***a*b**')), [['<strong><em>a</em>b</strong>'], '']);
63
+ assert.deepStrictEqual(inspect(parser('***a*b**c')), [['<strong><em>a</em>b</strong>', 'c'], '']);
64
+ assert.deepStrictEqual(inspect(parser('***a*b*c***')), [['<strong><em>a</em>b<em>c</em></strong>'], '']);
65
+ assert.deepStrictEqual(inspect(parser('***a*b*c***d')), [['<strong><em>a</em>b<em>c</em></strong>', 'd'], '']);
66
+ assert.deepStrictEqual(inspect(parser('***a*b**c****')), [['<strong><em>a</em>b</strong>', 'c', '****'], '']);
67
+ assert.deepStrictEqual(inspect(parser('***a*b *c***')), [['<strong><em>a</em>b <em>c</em></strong>'], '']);
68
+ assert.deepStrictEqual(inspect(parser('***a\\ *b**')), [['***', 'a', ' ', '<em>b</em>', '*'], '']);
69
+ assert.deepStrictEqual(inspect(parser('***a*b\\ **')), [['**', '<em>a</em>', 'b', ' ', '**'], '']);
41
70
  assert.deepStrictEqual(inspect(parser('***a* b**')), [['<strong><em>a</em> b</strong>'], '']);
42
71
  assert.deepStrictEqual(inspect(parser('***a**b*')), [['<em><strong>a</strong>b</em>'], '']);
72
+ assert.deepStrictEqual(inspect(parser('***a**b*c')), [['<em><strong>a</strong>b</em>', 'c'], '']);
73
+ assert.deepStrictEqual(inspect(parser('***a**b*c**')), [['<em><strong>a</strong>b</em>', 'c', '**'], '']);
74
+ assert.deepStrictEqual(inspect(parser('***a**b**c***')), [['<em><strong>a</strong>b<strong>c</strong></em>'], '']);
75
+ assert.deepStrictEqual(inspect(parser('***a**b**c***d')), [['<em><strong>a</strong>b<strong>c</strong></em>', 'd'], '']);
76
+ assert.deepStrictEqual(inspect(parser('***a**b **c***')), [['<em><strong>a</strong>b <strong>c</strong></em>'], '']);
43
77
  assert.deepStrictEqual(inspect(parser('***a** b*')), [['<em><strong>a</strong> b</em>'], '']);
78
+ assert.deepStrictEqual(inspect(parser('***a\\ **b*')), [['***', 'a', ' ', '**', 'b', '*'], '']);
79
+ assert.deepStrictEqual(inspect(parser('***a**b\\ *')), [['*', '<strong>a</strong>', 'b', ' ', '*'], '']);
44
80
  assert.deepStrictEqual(inspect(parser('***a*')), [['**', '<em>a</em>'], '']);
45
81
  assert.deepStrictEqual(inspect(parser('***a**')), [['*', '<strong>a</strong>'], '']);
46
82
  assert.deepStrictEqual(inspect(parser('***a***')), [['<em><strong>a</strong></em>'], '']);
47
83
  assert.deepStrictEqual(inspect(parser('***a***b')), [['<em><strong>a</strong></em>', 'b'], '']);
48
84
  assert.deepStrictEqual(inspect(parser('***a****')), [['<em><strong>a</strong></em>', '*'], '']);
85
+ assert.deepStrictEqual(inspect(parser('***a *b****')), [['<em><strong>a <em>b</em></strong></em>'], '']);
49
86
  assert.deepStrictEqual(inspect(parser('****a***')), [['****', 'a', '***'], '']);
50
87
  assert.deepStrictEqual(inspect(parser('****a****')), [['****', 'a', '****'], '']);
51
88
  assert.deepStrictEqual(inspect(parser('*(*a*)*')), [['<em><span class="paren">(<em>a</em>)</span></em>'], '']);
@@ -97,7 +97,6 @@ function isStartTight(source: string, context: MarkdownParser.Context): boolean
97
97
  case '\t':
98
98
  case '\n':
99
99
  return false;
100
- case '\x1B':
101
100
  case '\\':
102
101
  return source[1]?.trimStart() !== '';
103
102
  case '&':
@@ -126,11 +125,7 @@ export function isStartTightNodes(nodes: readonly (HTMLElement | string)[]): boo
126
125
  }
127
126
  export function isEndTightNodes(nodes: readonly (HTMLElement | string)[]): boolean {
128
127
  if (nodes.length === 0) return true;
129
- for (let i = nodes.length; i--;) {
130
- const node = nodes[i];
131
- return isVisible(node, -1);
132
- }
133
- return false;
128
+ return isVisible(nodes[nodes.length - 1], -1);
134
129
  }
135
130
  function isVisible(node: HTMLElement | string, strpos?: number): boolean {
136
131
  switch (typeof node) {