securemark 0.294.10 → 0.295.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.
- package/CHANGELOG.md +8 -0
- package/design.md +5 -5
- package/dist/index.js +141 -127
- package/package.json +1 -1
- package/src/combinator/control/constraint/block.ts +1 -1
- package/src/combinator/control/constraint/contract.ts +5 -6
- package/src/combinator/control/constraint/line.ts +1 -2
- package/src/combinator/control/manipulation/convert.ts +1 -1
- package/src/combinator/control/manipulation/fallback.ts +1 -1
- package/src/combinator/control/manipulation/indent.ts +2 -2
- package/src/combinator/control/manipulation/lazy.ts +1 -1
- package/src/combinator/control/manipulation/match.ts +2 -5
- package/src/combinator/control/manipulation/recovery.ts +1 -1
- package/src/combinator/control/manipulation/reverse.ts +1 -1
- package/src/combinator/control/manipulation/scope.ts +3 -7
- package/src/combinator/control/manipulation/surround.ts +51 -62
- package/src/combinator/control/monad/bind.ts +7 -12
- package/src/combinator/control/monad/fmap.ts +4 -4
- package/src/combinator/data/parser/context.ts +12 -12
- package/src/combinator/data/parser/inits.ts +3 -6
- package/src/combinator/data/parser/sequence.ts +3 -6
- package/src/combinator/data/parser/some.ts +2 -2
- package/src/combinator/data/parser/subsequence.ts +1 -1
- package/src/combinator/data/parser/tails.ts +1 -1
- package/src/combinator/data/parser/union.ts +1 -1
- package/src/combinator/data/parser.ts +10 -9
- package/src/parser/api/body.test.ts +1 -1
- package/src/parser/api/header.test.ts +2 -2
- package/src/parser/api/normalize.test.ts +2 -0
- package/src/parser/api/normalize.ts +1 -1
- package/src/parser/context.ts +9 -6
- package/src/parser/header.test.ts +2 -2
- package/src/parser/header.ts +3 -3
- package/src/parser/inline/annotation.ts +1 -1
- package/src/parser/inline/autolink/account.ts +3 -3
- package/src/parser/inline/autolink/anchor.ts +1 -1
- package/src/parser/inline/autolink/email.ts +1 -1
- package/src/parser/inline/autolink/hashnum.ts +1 -1
- package/src/parser/inline/autolink/hashtag.ts +1 -1
- package/src/parser/inline/autolink/url.ts +9 -10
- package/src/parser/inline/bracket.ts +31 -19
- package/src/parser/inline/extension/index.ts +3 -3
- package/src/parser/inline/extension/indexee.ts +1 -1
- package/src/parser/inline/extension/label.ts +1 -1
- package/src/parser/inline/extension/placeholder.ts +1 -1
- package/src/parser/inline/htmlentity.ts +1 -1
- package/src/parser/inline/link.ts +12 -14
- package/src/parser/inline/math.ts +2 -2
- package/src/parser/inline/media.ts +15 -17
- package/src/parser/inline/reference.ts +9 -9
- package/src/parser/inline/ruby.ts +4 -4
- package/src/parser/inline/template.ts +6 -10
- package/src/parser/visibility.ts +2 -2
|
@@ -30,24 +30,22 @@ export const media: MediaParser = lazy(() => constraint(State.media, open(
|
|
|
30
30
|
]), ']')),
|
|
31
31
|
']',
|
|
32
32
|
true,
|
|
33
|
-
[3 | Backtrack.
|
|
34
|
-
([, ns = new List()], context) =>
|
|
35
|
-
context.linebreak
|
|
36
|
-
|
|
37
|
-
|
|
33
|
+
[3 | Backtrack.escapable, 2 | Backtrack.ruby],
|
|
34
|
+
([, ns = new List()], context) => {
|
|
35
|
+
if (context.linebreak !== 0) {
|
|
36
|
+
const head = context.position - context.range!;
|
|
37
|
+
return void setBacktrack(context, 2 | Backtrack.link | Backtrack.ruby, head);
|
|
38
|
+
}
|
|
39
|
+
return ns;
|
|
40
|
+
})),
|
|
38
41
|
dup(surround(
|
|
39
42
|
/{(?![{}])/y,
|
|
40
43
|
inits([uri, some(option)]),
|
|
41
44
|
/ ?}/y,
|
|
42
|
-
false,
|
|
43
|
-
[3 | Backtrack.link],
|
|
45
|
+
false, [],
|
|
44
46
|
undefined,
|
|
45
|
-
([as, bs]
|
|
46
|
-
|
|
47
|
-
const head = context.position - context.range!;
|
|
48
|
-
setBacktrack(context, [2 | Backtrack.link], head);
|
|
49
|
-
return as.import(bs).push(new Data(Command.Cancel)) && as;
|
|
50
|
-
})),
|
|
47
|
+
([as, bs]) =>
|
|
48
|
+
bs && as.import(bs).push(new Data(Command.Cancel)) && as)),
|
|
51
49
|
]),
|
|
52
50
|
nodes =>
|
|
53
51
|
nodes.length === 1
|
|
@@ -111,13 +109,13 @@ export const media: MediaParser = lazy(() => constraint(State.media, open(
|
|
|
111
109
|
|
|
112
110
|
const bracket: MediaParser.TextParser.BracketParser = lazy(() => recursion(Recursion.terminal, union([
|
|
113
111
|
surround(str('('), some(union([unsafehtmlentity, bracket, txt]), ')'), str(')'),
|
|
114
|
-
true, [3 | Backtrack.
|
|
112
|
+
true, [3 | Backtrack.escapable], undefined, () => new List()),
|
|
115
113
|
surround(str('['), some(union([unsafehtmlentity, bracket, txt]), ']'), str(']'),
|
|
116
|
-
true, [3 | Backtrack.
|
|
114
|
+
true, [3 | Backtrack.escapable], undefined, () => new List()),
|
|
117
115
|
surround(str('{'), some(union([unsafehtmlentity, bracket, txt]), '}'), str('}'),
|
|
118
|
-
true, [3 | Backtrack.
|
|
116
|
+
true, [3 | Backtrack.escapable], undefined, () => new List()),
|
|
119
117
|
surround(str('"'), precedence(2, some(union([unsafehtmlentity, txt]), '"')), str('"'),
|
|
120
|
-
true, [3 | Backtrack.
|
|
118
|
+
true, [3 | Backtrack.escapable], undefined, () => new List()),
|
|
121
119
|
])));
|
|
122
120
|
|
|
123
121
|
const option: MediaParser.ParameterParser.OptionParser = lazy(() => union([
|
|
@@ -18,7 +18,7 @@ export const reference: ReferenceParser = lazy(() => constraint(State.reference,
|
|
|
18
18
|
]))),
|
|
19
19
|
']]',
|
|
20
20
|
false,
|
|
21
|
-
[1 | Backtrack.
|
|
21
|
+
[1 | Backtrack.common, 3 | Backtrack.doublebracket],
|
|
22
22
|
([, ns], context) => {
|
|
23
23
|
const { position, range = 0, linebreak = 0 } = context;
|
|
24
24
|
if (linebreak === 0) {
|
|
@@ -26,7 +26,7 @@ export const reference: ReferenceParser = lazy(() => constraint(State.reference,
|
|
|
26
26
|
}
|
|
27
27
|
else {
|
|
28
28
|
const head = position - range;
|
|
29
|
-
setBacktrack(context,
|
|
29
|
+
setBacktrack(context, 2 | Backtrack.link, head, 2);
|
|
30
30
|
}
|
|
31
31
|
},
|
|
32
32
|
([as, bs], context) => {
|
|
@@ -34,10 +34,10 @@ export const reference: ReferenceParser = lazy(() => constraint(State.reference,
|
|
|
34
34
|
const { source, position, range = 0, linebreak = 0, state = 0 } = context;
|
|
35
35
|
const head = position - range;
|
|
36
36
|
if (source[position] !== ']') {
|
|
37
|
-
setBacktrack(context,
|
|
37
|
+
setBacktrack(context, 2 | Backtrack.common, head, 2);
|
|
38
38
|
}
|
|
39
39
|
else if (linebreak !== 0) {
|
|
40
|
-
setBacktrack(context,
|
|
40
|
+
setBacktrack(context, 2 | Backtrack.link | Backtrack.ruby, head, 2);
|
|
41
41
|
}
|
|
42
42
|
else {
|
|
43
43
|
assert(source[position] === ']');
|
|
@@ -47,22 +47,22 @@ export const reference: ReferenceParser = lazy(() => constraint(State.reference,
|
|
|
47
47
|
context.position += 1;
|
|
48
48
|
let result: ReturnType<typeof textlink>;
|
|
49
49
|
if (source[context.position] !== '{') {
|
|
50
|
-
setBacktrack(context,
|
|
50
|
+
setBacktrack(context, 2 | Backtrack.link, head + 1);
|
|
51
51
|
result = new List();
|
|
52
52
|
}
|
|
53
53
|
else {
|
|
54
|
-
result = !isBacktrack(context,
|
|
54
|
+
result = !isBacktrack(context, 1 | Backtrack.link)
|
|
55
55
|
? textlink({ context })
|
|
56
56
|
: undefined;
|
|
57
57
|
context.range = range;
|
|
58
58
|
if (!result) {
|
|
59
|
-
setBacktrack(context,
|
|
59
|
+
setBacktrack(context, 2 | Backtrack.link, head + 1);
|
|
60
60
|
result = new List();
|
|
61
61
|
}
|
|
62
62
|
}
|
|
63
63
|
assert(result);
|
|
64
64
|
if (context.position === source.length) {
|
|
65
|
-
setBacktrack(context,
|
|
65
|
+
setBacktrack(context, 2 | Backtrack.link, head);
|
|
66
66
|
}
|
|
67
67
|
else {
|
|
68
68
|
assert(state ^ State.link);
|
|
@@ -74,7 +74,7 @@ export const reference: ReferenceParser = lazy(() => constraint(State.reference,
|
|
|
74
74
|
([, cs = new List(), ds]) =>
|
|
75
75
|
cs.import(ds),
|
|
76
76
|
([, cs = new List()]) => {
|
|
77
|
-
setBacktrack(context,
|
|
77
|
+
setBacktrack(context, 2 | Backtrack.link, head);
|
|
78
78
|
return cs;
|
|
79
79
|
})
|
|
80
80
|
({ context });
|
|
@@ -13,7 +13,7 @@ export const ruby: RubyParser = lazy(() => bind(
|
|
|
13
13
|
dup(surround(
|
|
14
14
|
'[', text, ']',
|
|
15
15
|
false,
|
|
16
|
-
[1 | Backtrack.
|
|
16
|
+
[1 | Backtrack.common, 3 | Backtrack.ruby],
|
|
17
17
|
([, ns]) => {
|
|
18
18
|
ns && ns.last?.value === '' && ns.pop();
|
|
19
19
|
return isTightNodeStart(ns) ? ns : undefined;
|
|
@@ -21,12 +21,12 @@ export const ruby: RubyParser = lazy(() => bind(
|
|
|
21
21
|
dup(surround(
|
|
22
22
|
'(', text, ')',
|
|
23
23
|
false,
|
|
24
|
-
[
|
|
24
|
+
[3 | Backtrack.ruby])),
|
|
25
25
|
]),
|
|
26
26
|
([{ value: texts }, { value: rubies = undefined } = {}], context) => {
|
|
27
27
|
if (rubies === undefined) {
|
|
28
28
|
const head = context.position - context.range!;
|
|
29
|
-
return void setBacktrack(context,
|
|
29
|
+
return void setBacktrack(context, 2 | Backtrack.ruby, head);
|
|
30
30
|
}
|
|
31
31
|
switch (true) {
|
|
32
32
|
case texts.length >= rubies.length:
|
|
@@ -62,7 +62,7 @@ export const ruby: RubyParser = lazy(() => bind(
|
|
|
62
62
|
}
|
|
63
63
|
}));
|
|
64
64
|
|
|
65
|
-
const delimiter = /[$"`\[\](){}
|
|
65
|
+
const delimiter = /[$"`\[\](){}<>()[]{}|]|\\?\n/y;
|
|
66
66
|
|
|
67
67
|
const text: RubyParser.TextParser = input => {
|
|
68
68
|
const { context } = input;
|
|
@@ -11,8 +11,7 @@ export const template: TemplateParser = lazy(() => surround(
|
|
|
11
11
|
precedence(1,
|
|
12
12
|
some(union([bracket, escsource]), '}')),
|
|
13
13
|
str('}}'),
|
|
14
|
-
true,
|
|
15
|
-
[3 | Backtrack.doublebracket, 3 | Backtrack.escbracket],
|
|
14
|
+
true, [],
|
|
16
15
|
([as, bs = new List(), cs]) => new List([
|
|
17
16
|
new Data(html('span', { class: 'template' }, defrag(unwrap(as.import(bs as List<Data<string>>).import(cs)))))
|
|
18
17
|
]),
|
|
@@ -28,20 +27,17 @@ export const template: TemplateParser = lazy(() => surround(
|
|
|
28
27
|
|
|
29
28
|
const bracket: TemplateParser.BracketParser = lazy(() => union([
|
|
30
29
|
surround(str('('), recursion(Recursion.terminal, some(union([bracket, escsource]), ')')), str(')'),
|
|
31
|
-
true, [3 | Backtrack.
|
|
30
|
+
true, [3 | Backtrack.escapable], undefined, () => new List()),
|
|
32
31
|
surround(str('['), recursion(Recursion.terminal, some(union([bracket, escsource]), ']')), str(']'),
|
|
33
|
-
true, [3 | Backtrack.
|
|
32
|
+
true, [3 | Backtrack.escapable], undefined, () => new List()),
|
|
34
33
|
surround(str('{'), recursion(Recursion.terminal, some(union([bracket, escsource]), '}')), str('}'),
|
|
35
|
-
true, [3 | Backtrack.
|
|
34
|
+
true, [3 | Backtrack.escapable], undefined, () => new List()),
|
|
36
35
|
surround(
|
|
37
36
|
str('"'),
|
|
38
37
|
precedence(2, recursion(Recursion.terminal, some(escsource, /["\n]/y, [['"', 2], ['\n', 3]]))),
|
|
39
38
|
str('"'),
|
|
40
39
|
true,
|
|
41
|
-
[3 | Backtrack.
|
|
42
|
-
|
|
43
|
-
context.linebreak === 0
|
|
44
|
-
? as.import(bs as List<Data<string>>).import(cs)
|
|
45
|
-
: (context.position -= 1, as.import(bs as List<Data<string>>)),
|
|
40
|
+
[3 | Backtrack.escapable],
|
|
41
|
+
undefined,
|
|
46
42
|
([as, bs]) => bs && as.import(bs as List<Data<string>>)),
|
|
47
43
|
]));
|
package/src/parser/visibility.ts
CHANGED
|
@@ -50,7 +50,7 @@ export function blankWith(starts: '' | '\n', delimiter?: string | RegExp): RegEx
|
|
|
50
50
|
// return isTightStart({ source: source.replace(blank.start, ''), context }, except);
|
|
51
51
|
//}, ({ source }, except = '') => `${source}${Command.Separator}${except}`);
|
|
52
52
|
|
|
53
|
-
export function tightStart<P extends Parser
|
|
53
|
+
export function tightStart<P extends Parser>(parser: P, except?: string): P;
|
|
54
54
|
export function tightStart<N>(parser: Parser<N>, except?: string): Parser<N> {
|
|
55
55
|
return input =>
|
|
56
56
|
isTightStart(input, except)
|
|
@@ -140,7 +140,7 @@ export function trimBlank<P extends Parser<HTMLElement | string>>(parser: P): P;
|
|
|
140
140
|
export function trimBlank<N extends HTMLElement | string>(parser: Parser<N>): Parser<N> {
|
|
141
141
|
return trimBlankStart(trimBlankEnd(parser));
|
|
142
142
|
}
|
|
143
|
-
export function trimBlankStart<P extends Parser
|
|
143
|
+
export function trimBlankStart<P extends Parser>(parser: P): P;
|
|
144
144
|
export function trimBlankStart<N>(parser: Parser<N>): Parser<N> {
|
|
145
145
|
return failsafe(input => {
|
|
146
146
|
const { context } = input;
|