securemark 0.283.2 → 0.283.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 +4 -0
- package/dist/index.js +86 -48
- package/package.json +1 -1
- package/src/combinator/control/manipulation/indent.ts +1 -1
- package/src/combinator/data/parser/context/delimiter.ts +28 -3
- package/src/combinator/data/parser/context.ts +5 -2
- package/src/parser/block/dlist.ts +1 -1
- package/src/parser/context.ts +2 -2
- package/src/parser/inline/annotation.ts +2 -2
- package/src/parser/inline/autolink/url.ts +2 -2
- package/src/parser/inline/autolink.ts +1 -1
- package/src/parser/inline/bracket.ts +17 -14
- package/src/parser/inline/code.ts +1 -1
- package/src/parser/inline/deletion.ts +1 -1
- package/src/parser/inline/emphasis.test.ts +2 -2
- package/src/parser/inline/emphasis.ts +3 -3
- package/src/parser/inline/emstrong.ts +7 -7
- package/src/parser/inline/extension/index.ts +3 -3
- package/src/parser/inline/extension/indexee.ts +4 -2
- package/src/parser/inline/extension/placeholder.ts +2 -2
- package/src/parser/inline/html.ts +4 -4
- package/src/parser/inline/htmlentity.ts +5 -5
- package/src/parser/inline/insertion.ts +1 -1
- package/src/parser/inline/link.ts +4 -4
- package/src/parser/inline/mark.test.ts +2 -2
- package/src/parser/inline/mark.ts +3 -3
- package/src/parser/inline/math.ts +2 -2
- package/src/parser/inline/media.ts +2 -2
- package/src/parser/inline/reference.ts +2 -2
- package/src/parser/inline/remark.ts +2 -2
- package/src/parser/inline/ruby.ts +2 -2
- package/src/parser/inline/strong.test.ts +2 -2
- package/src/parser/inline/strong.ts +3 -3
- package/src/parser/inline/template.ts +2 -2
- package/src/parser/inline.test.ts +4 -2
- package/src/parser/visibility.ts +4 -4
package/CHANGELOG.md
CHANGED
package/dist/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! securemark v0.283.
|
|
1
|
+
/*! securemark v0.283.3 https://github.com/falsandtru/securemark | (c) 2017, falsandtru | UNLICENSED License */
|
|
2
2
|
(function webpackUniversalModuleDefinition(root, factory) {
|
|
3
3
|
if(typeof exports === 'object' && typeof module === 'object')
|
|
4
4
|
module.exports = factory(require("Prism"), require("DOMPurify"));
|
|
@@ -502,9 +502,9 @@ const source_1 = __webpack_require__(8745);
|
|
|
502
502
|
const visibility_1 = __webpack_require__(6364);
|
|
503
503
|
const dom_1 = __webpack_require__(394);
|
|
504
504
|
const array_1 = __webpack_require__(6876);
|
|
505
|
-
const substrong = (0, combinator_1.lazy)(() => (0, combinator_1.some)((0, combinator_1.union)([(0, combinator_1.some)(inline_1.inline, (0, visibility_1.blankWith)('**')
|
|
506
|
-
const subemphasis = (0, combinator_1.lazy)(() => (0, combinator_1.some)((0, combinator_1.union)([strong_1.strong, (0, combinator_1.some)(inline_1.inline, (0, visibility_1.blankWith)('*')
|
|
507
|
-
exports.emstrong = (0, combinator_1.lazy)(() => (0, combinator_1.creation)(1, 4 /* Recursion.inline */, (0, combinator_1.surround)((0, source_1.str)('***'), (0, combinator_1.syntax)(
|
|
505
|
+
const substrong = (0, combinator_1.lazy)(() => (0, combinator_1.some)((0, combinator_1.union)([(0, combinator_1.some)(inline_1.inline, (0, visibility_1.blankWith)('**')), (0, combinator_1.open)((0, combinator_1.some)(inline_1.inline, '*'), (0, combinator_1.union)([exports.emstrong, strong_1.strong]))])));
|
|
506
|
+
const subemphasis = (0, combinator_1.lazy)(() => (0, combinator_1.some)((0, combinator_1.union)([strong_1.strong, (0, combinator_1.some)(inline_1.inline, (0, visibility_1.blankWith)('*')), (0, combinator_1.open)((0, combinator_1.some)(inline_1.inline, '*'), (0, combinator_1.union)([exports.emstrong, strong_1.strong, emphasis_1.emphasis]))])));
|
|
507
|
+
exports.emstrong = (0, combinator_1.lazy)(() => (0, combinator_1.creation)(1, 4 /* Recursion.inline */, (0, combinator_1.surround)((0, source_1.str)('***'), (0, combinator_1.syntax)(0, 0 /* State.none */, (0, visibility_1.startTight)((0, combinator_1.some)((0, combinator_1.union)([(0, combinator_1.some)(inline_1.inline, (0, visibility_1.blankWith)('*')), (0, combinator_1.open)((0, combinator_1.some)(inline_1.inline, '*'), inline_1.inline)])))), (0, source_1.str)(/^\*{1,3}/), false, ([, bs, cs], rest, context) => {
|
|
508
508
|
switch (cs[0]) {
|
|
509
509
|
case '***':
|
|
510
510
|
return [[(0, dom_1.html)('em', [(0, dom_1.html)('strong', (0, dom_1.defrag)(bs))])], rest];
|
|
@@ -905,15 +905,15 @@ exports.htmlentity = exports.unsafehtmlentity = void 0;
|
|
|
905
905
|
const combinator_1 = __webpack_require__(3484);
|
|
906
906
|
const dom_1 = __webpack_require__(394);
|
|
907
907
|
const memoize_1 = __webpack_require__(6925);
|
|
908
|
-
exports.unsafehtmlentity = (0, combinator_1.creation)(1, 0 /* Recursion.ignore */, (0, combinator_1.validate)('&', (0, combinator_1.focus)(/^&[0-9A-Za-z]
|
|
908
|
+
exports.unsafehtmlentity = (0, combinator_1.creation)(1, 0 /* Recursion.ignore */, (0, combinator_1.validate)('&', (0, combinator_1.focus)(/^&[0-9A-Za-z]{1,99};/, ({
|
|
909
909
|
source
|
|
910
910
|
}) => [[parse(source) ?? `\x1B${source}`], ''])));
|
|
911
|
-
exports.htmlentity = (0, combinator_1.fmap)((0, combinator_1.union)([exports.unsafehtmlentity]), ([
|
|
911
|
+
exports.htmlentity = (0, combinator_1.fmap)((0, combinator_1.union)([exports.unsafehtmlentity]), ([text]) => [text[0] === '\x1B' ? (0, dom_1.html)('span', {
|
|
912
912
|
class: 'invalid',
|
|
913
913
|
'data-invalid-syntax': 'htmlentity',
|
|
914
914
|
'data-invalid-type': 'syntax',
|
|
915
915
|
'data-invalid-message': 'Invalid HTML entity'
|
|
916
|
-
},
|
|
916
|
+
}, text.slice(1)) : text]);
|
|
917
917
|
const parse = (0, memoize_1.reduce)((el => entity => {
|
|
918
918
|
if (entity === '
') return ' ';
|
|
919
919
|
el.innerHTML = entity;
|
|
@@ -976,7 +976,7 @@ function indent(opener, parser, separation = false) {
|
|
|
976
976
|
}
|
|
977
977
|
exports.indent = indent;
|
|
978
978
|
function trimBlockEnd(block) {
|
|
979
|
-
return block === '' || block
|
|
979
|
+
return block === '' || block.at(-1) !== '\n' ? block : block.slice(0, -1);
|
|
980
980
|
}
|
|
981
981
|
|
|
982
982
|
/***/ },
|
|
@@ -1037,7 +1037,7 @@ const term = (0, combinator_1.line)((0, inline_1.indexee)((0, combinator_1.fmap)
|
|
|
1037
1037
|
}, (0, visibility_1.trimNodeEnd)((0, dom_1.defrag)(ns)))])));
|
|
1038
1038
|
const desc = (0, combinator_1.block)((0, combinator_1.fmap)((0, combinator_1.open)(/^:[^\S\n]+(?=\S)|/, (0, combinator_1.rewrite)((0, combinator_1.some)(source_1.anyline, /^[~:][^\S\n]+\S/), (0, visibility_1.visualize)((0, util_1.lineable)((0, combinator_1.some)((0, combinator_1.union)([inline_1.inline]))))), true), ns => [(0, dom_1.html)('dd', (0, visibility_1.trimNodeEnd)((0, dom_1.defrag)(ns)))]), false);
|
|
1039
1039
|
function fillTrailingDescription(es) {
|
|
1040
|
-
return es.length > 0 && es
|
|
1040
|
+
return es.length > 0 && es.at(-1).tagName === 'DT' ? (0, array_1.push)(es, [(0, dom_1.html)('dd')]) : es;
|
|
1041
1041
|
}
|
|
1042
1042
|
|
|
1043
1043
|
/***/ },
|
|
@@ -1490,7 +1490,7 @@ const source_1 = __webpack_require__(8745);
|
|
|
1490
1490
|
const visibility_1 = __webpack_require__(6364);
|
|
1491
1491
|
const array_1 = __webpack_require__(6876);
|
|
1492
1492
|
const dom_1 = __webpack_require__(394);
|
|
1493
|
-
exports.emphasis = (0, combinator_1.lazy)(() => (0, combinator_1.creation)(1, 4 /* Recursion.inline */, (0, combinator_1.surround)((0, source_1.str)('*', '*'), (0, combinator_1.syntax)(
|
|
1493
|
+
exports.emphasis = (0, combinator_1.lazy)(() => (0, combinator_1.creation)(1, 4 /* Recursion.inline */, (0, combinator_1.surround)((0, source_1.str)('*', '*'), (0, combinator_1.syntax)(0, 0 /* State.none */, (0, visibility_1.startTight)((0, combinator_1.some)((0, combinator_1.union)([strong_1.strong, (0, combinator_1.some)(inline_1.inline, (0, visibility_1.blankWith)('*')), (0, combinator_1.open)((0, combinator_1.some)(inline_1.inline, '*'), (0, combinator_1.union)([emstrong_1.emstrong, strong_1.strong, exports.emphasis]))])))), (0, source_1.str)('*'), false, ([, bs], rest) => [[(0, dom_1.html)('em', (0, dom_1.defrag)(bs))], rest], ([as, bs], rest) => [(0, array_1.unshift)(as, bs), rest])));
|
|
1494
1494
|
|
|
1495
1495
|
/***/ },
|
|
1496
1496
|
|
|
@@ -1967,7 +1967,7 @@ const source_1 = __webpack_require__(8745);
|
|
|
1967
1967
|
const closer = /^[-+*=~^_,.;:!?]*(?=[\\"`|\[\](){}<>]|$)/;
|
|
1968
1968
|
exports.url = (0, combinator_1.lazy)(() => (0, combinator_1.validate)(['http://', 'https://'], (0, combinator_1.rewrite)((0, combinator_1.open)(/^https?:\/\/(?=[\x21-\x7E])/, (0, combinator_1.focus)(/^[\x21-\x7E]+/, (0, combinator_1.some)((0, combinator_1.union)([bracket, (0, combinator_1.some)(source_1.unescsource, closer)])))), (0, combinator_1.convert)(url => `{ ${url} }`, (0, combinator_1.union)([link_1.unsafelink])))));
|
|
1969
1969
|
exports.lineurl = (0, combinator_1.lazy)(() => (0, combinator_1.open)(source_1.linebreak, (0, combinator_1.tails)([(0, source_1.str)('!'), (0, combinator_1.focus)(/^https?:\/\/\S+(?=[^\S\n]*(?:$|\n))/, (0, combinator_1.convert)(url => `{ ${url} }`, link_1.unsafelink))])));
|
|
1970
|
-
const bracket = (0, combinator_1.lazy)(() => (0, combinator_1.creation)(0, 6 /* Recursion.terminal */, (0, combinator_1.precedence)(
|
|
1970
|
+
const bracket = (0, combinator_1.lazy)(() => (0, combinator_1.creation)(0, 6 /* Recursion.terminal */, (0, combinator_1.precedence)(1, (0, combinator_1.union)([(0, combinator_1.surround)((0, source_1.str)('('), (0, combinator_1.some)((0, combinator_1.union)([bracket, source_1.unescsource]), ')'), (0, source_1.str)(')'), true, undefined, undefined, 3 | 8 /* Backtrack.url */), (0, combinator_1.surround)((0, source_1.str)('['), (0, combinator_1.some)((0, combinator_1.union)([bracket, source_1.unescsource]), ']'), (0, source_1.str)(']'), true, undefined, undefined, 3 | 8 /* Backtrack.url */), (0, combinator_1.surround)((0, source_1.str)('{'), (0, combinator_1.some)((0, combinator_1.union)([bracket, source_1.unescsource]), '}'), (0, source_1.str)('}'), true, undefined, undefined, 3 | 8 /* Backtrack.url */), (0, combinator_1.surround)((0, source_1.str)('"'), (0, combinator_1.precedence)(2, (0, combinator_1.some)(source_1.unescsource, '"')), (0, source_1.str)('"'), true, undefined, undefined, 3 | 8 /* Backtrack.url */)]))));
|
|
1971
1971
|
|
|
1972
1972
|
/***/ },
|
|
1973
1973
|
|
|
@@ -2409,7 +2409,7 @@ const combinator_1 = __webpack_require__(3484);
|
|
|
2409
2409
|
const source_1 = __webpack_require__(8745);
|
|
2410
2410
|
const dom_1 = __webpack_require__(394);
|
|
2411
2411
|
const forbiddenCommand = /\\(?:begin|tiny|huge|large)(?![a-z])/i;
|
|
2412
|
-
exports.math = (0, combinator_1.lazy)(() => (0, combinator_1.validate)('$', (0, combinator_1.creation)(1, 0 /* Recursion.ignore */, (0, combinator_1.rewrite)((0, combinator_1.union)([(0, combinator_1.surround)('$', (0, combinator_1.precedence)(
|
|
2412
|
+
exports.math = (0, combinator_1.lazy)(() => (0, combinator_1.validate)('$', (0, combinator_1.creation)(1, 0 /* Recursion.ignore */, (0, combinator_1.rewrite)((0, combinator_1.union)([(0, combinator_1.surround)('$', (0, combinator_1.precedence)(5, bracket), '$'), (0, combinator_1.surround)(/^\$(?![\s{}])/, (0, combinator_1.precedence)(2, (0, combinator_1.some)((0, combinator_1.union)([bracket, (0, combinator_1.focus)(/^(?:[ ([](?!\$)|\\[\\{}$]?|[!#%&')\x2A-\x5A\]^_\x61-\x7A|~])+/, (0, combinator_1.some)(source_1.unescsource))]))), /^\$(?![0-9A-Za-z])/)]), ({
|
|
2413
2413
|
source,
|
|
2414
2414
|
context: {
|
|
2415
2415
|
caches: {
|
|
@@ -3083,7 +3083,7 @@ exports.code = (0, combinator_1.creation)(1, 0 /* Recursion.ignore */, (0, combi
|
|
|
3083
3083
|
'data-src': whole
|
|
3084
3084
|
}, format(body))], source.slice(whole.length)])));
|
|
3085
3085
|
function format(text) {
|
|
3086
|
-
return `${text[0]}${text
|
|
3086
|
+
return `${text[0]}${text.at(-1)}` === ' ' && text.trimStart() ? text.slice(1, -1) : text;
|
|
3087
3087
|
}
|
|
3088
3088
|
|
|
3089
3089
|
/***/ },
|
|
@@ -3234,13 +3234,13 @@ const optspec = {
|
|
|
3234
3234
|
};
|
|
3235
3235
|
Object.setPrototypeOf(optspec, null);
|
|
3236
3236
|
exports.link = (0, combinator_1.lazy)(() => (0, combinator_1.validate)(['[', '{'], (0, combinator_1.union)([exports.medialink, exports.textlink])));
|
|
3237
|
-
exports.textlink = (0, combinator_1.lazy)(() => (0, combinator_1.creation)(1, 0 /* Recursion.ignore */, (0, combinator_1.constraint)(16 /* State.link */, false, (0, combinator_1.syntax)(
|
|
3237
|
+
exports.textlink = (0, combinator_1.lazy)(() => (0, combinator_1.creation)(1, 0 /* Recursion.ignore */, (0, combinator_1.constraint)(16 /* State.link */, false, (0, combinator_1.syntax)(1, 502 /* State.linkers */ | 8 /* State.media */, (0, combinator_1.bind)((0, combinator_1.reverse)((0, combinator_1.tails)([(0, combinator_1.dup)((0, combinator_1.surround)('[', (0, visibility_1.trimBlankStart)((0, combinator_1.some)((0, combinator_1.union)([inline_1.inline]), ']', [[/^\\?\n/, 9], [']', 1]])), ']', true, undefined, undefined, 1 | 4 /* Backtrack.bracket */)), (0, combinator_1.dup)((0, combinator_1.surround)(/^{(?![{}])/, (0, combinator_1.inits)([exports.uri, (0, combinator_1.some)(exports.option)]), /^[^\S\n]*}/, false, undefined, undefined, 3 | 16 /* Backtrack.link */))])), ([params, content = []], rest, context) => {
|
|
3238
3238
|
if (content.length !== 0 && (0, visibility_1.trimNodeEnd)(content = (0, dom_1.defrag)(content)).length === 0) return;
|
|
3239
3239
|
return [[parse(content, params, context)], rest];
|
|
3240
3240
|
})))));
|
|
3241
|
-
exports.medialink = (0, combinator_1.lazy)(() => (0, combinator_1.creation)(1, 0 /* Recursion.ignore */, (0, combinator_1.constraint)(16 /* State.link */ | 8 /* State.media */, false, (0, combinator_1.syntax)(
|
|
3241
|
+
exports.medialink = (0, combinator_1.lazy)(() => (0, combinator_1.creation)(1, 0 /* Recursion.ignore */, (0, combinator_1.constraint)(16 /* State.link */ | 8 /* State.media */, false, (0, combinator_1.syntax)(1, 502 /* State.linkers */, (0, combinator_1.bind)((0, combinator_1.reverse)((0, combinator_1.sequence)([(0, combinator_1.dup)((0, combinator_1.surround)('[', (0, combinator_1.union)([inline_1.media, inline_1.shortmedia]), ']')), (0, combinator_1.dup)((0, combinator_1.surround)(/^{(?![{}])/, (0, combinator_1.inits)([exports.uri, (0, combinator_1.some)(exports.option)]), /^[^\S\n]*}/))])), ([params, content = []], rest, context) => [[parse((0, dom_1.defrag)(content), params, context)], rest])))));
|
|
3242
3242
|
exports.linemedialink = (0, combinator_1.surround)(source_1.linebreak, (0, combinator_1.union)([exports.medialink]), /^(?=[^\S\n]*(?:$|\n))/);
|
|
3243
|
-
exports.unsafelink = (0, combinator_1.lazy)(() => (0, combinator_1.creation)(1, 0 /* Recursion.ignore */, (0, combinator_1.precedence)(
|
|
3243
|
+
exports.unsafelink = (0, combinator_1.lazy)(() => (0, combinator_1.creation)(1, 0 /* Recursion.ignore */, (0, combinator_1.precedence)(1, (0, combinator_1.bind)((0, combinator_1.reverse)((0, combinator_1.tails)([(0, combinator_1.dup)((0, combinator_1.surround)('[', (0, combinator_1.some)((0, combinator_1.union)([source_1.unescsource]), ']'), ']')), (0, combinator_1.dup)((0, combinator_1.surround)(/^{(?![{}])/, (0, combinator_1.inits)([exports.uri, (0, combinator_1.some)(exports.option)]), /^[^\S\n]*}/))])), ([params, content = []], rest, context) => [[parse((0, dom_1.defrag)(content), params, context)], rest]))));
|
|
3244
3244
|
exports.uri = (0, combinator_1.union)([(0, combinator_1.open)(/^[^\S\n]+/, (0, source_1.str)(/^\S+/)), (0, source_1.str)(/^[^\s{}]+/)]);
|
|
3245
3245
|
exports.option = (0, combinator_1.union)([(0, combinator_1.fmap)((0, source_1.str)(/^[^\S\n]+nofollow(?=[^\S\n]|})/), () => [` rel="nofollow"`]), (0, source_1.str)(/^[^\S\n]+[a-z]+(?:-[a-z]+)*(?:="(?:\\[^\n]|[^\\\n"])*")?(?=[^\S\n]|})/), (0, combinator_1.fmap)((0, source_1.str)(/^[^\S\n]+[^\s{}]+/), opt => [` \\${opt.slice(1)}`])]);
|
|
3246
3246
|
function parse(content, params, context) {
|
|
@@ -4286,7 +4286,7 @@ const combinator_1 = __webpack_require__(3484);
|
|
|
4286
4286
|
const inline_1 = __webpack_require__(7973);
|
|
4287
4287
|
const visibility_1 = __webpack_require__(6364);
|
|
4288
4288
|
const dom_1 = __webpack_require__(394);
|
|
4289
|
-
exports.annotation = (0, combinator_1.lazy)(() => (0, combinator_1.creation)(1, 0 /* Recursion.ignore */, (0, combinator_1.surround)('((', (0, combinator_1.constraint)(256 /* State.annotation */, false, (0, combinator_1.syntax)(
|
|
4289
|
+
exports.annotation = (0, combinator_1.lazy)(() => (0, combinator_1.creation)(1, 0 /* Recursion.ignore */, (0, combinator_1.surround)('((', (0, combinator_1.constraint)(256 /* State.annotation */, false, (0, combinator_1.syntax)(1, 256 /* State.annotation */ | 8 /* State.media */, (0, visibility_1.trimBlankStart)((0, combinator_1.some)((0, combinator_1.union)([inline_1.inline]), ')', [[/^\\?\n/, 9], [')', 1]])))), '))', false, ([, ns], rest) => [[(0, dom_1.html)('sup', {
|
|
4290
4290
|
class: 'annotation'
|
|
4291
4291
|
}, [(0, dom_1.html)('span', (0, visibility_1.trimNodeEnd)((0, dom_1.defrag)(ns)))])], rest], undefined, 1 | 4 /* Backtrack.bracket */)));
|
|
4292
4292
|
|
|
@@ -4955,10 +4955,10 @@ const combinator_1 = __webpack_require__(3484);
|
|
|
4955
4955
|
const source_1 = __webpack_require__(8745);
|
|
4956
4956
|
const array_1 = __webpack_require__(6876);
|
|
4957
4957
|
const dom_1 = __webpack_require__(394);
|
|
4958
|
-
exports.template = (0, combinator_1.lazy)(() => (0, combinator_1.creation)(1, 0 /* Recursion.ignore */, (0, combinator_1.surround)('{{', (0, combinator_1.syntax)(
|
|
4958
|
+
exports.template = (0, combinator_1.lazy)(() => (0, combinator_1.creation)(1, 0 /* Recursion.ignore */, (0, combinator_1.surround)('{{', (0, combinator_1.syntax)(1, -1 /* State.all */, (0, combinator_1.some)((0, combinator_1.union)([bracket, source_1.escsource]), '}')), '}}', true, ([, ns = []], rest) => [[(0, dom_1.html)('span', {
|
|
4959
4959
|
class: 'template'
|
|
4960
4960
|
}, `{{${ns.join('').replace(/\x1B/g, '')}}}`)], rest], undefined, 3 | 28 /* Backtrack.template */)));
|
|
4961
|
-
const bracket = (0, combinator_1.lazy)(() => (0, combinator_1.creation)(0, 6 /* Recursion.terminal */, (0, combinator_1.union)([(0, combinator_1.surround)((0, source_1.str)('('), (0, combinator_1.some)((0, combinator_1.union)([bracket, source_1.escsource]), ')'), (0, source_1.str)(')'), true, undefined, ([as, bs = []], rest) => [(0, array_1.unshift)(as, bs), rest], 3 | 28 /* Backtrack.template */), (0, combinator_1.surround)((0, source_1.str)('['), (0, combinator_1.some)((0, combinator_1.union)([bracket, source_1.escsource]), ']'), (0, source_1.str)(']'), true, undefined, ([as, bs = []], rest) => [(0, array_1.unshift)(as, bs), rest], 3 | 28 /* Backtrack.template */), (0, combinator_1.surround)((0, source_1.str)('{'), (0, combinator_1.some)((0, combinator_1.union)([bracket, source_1.escsource]), '}'), (0, source_1.str)('}'), true, undefined, ([as, bs = []], rest) => [(0, array_1.unshift)(as, bs), rest], 3 | 28 /* Backtrack.template */), (0, combinator_1.surround)((0, source_1.str)('"'), (0, combinator_1.precedence)(
|
|
4961
|
+
const bracket = (0, combinator_1.lazy)(() => (0, combinator_1.creation)(0, 6 /* Recursion.terminal */, (0, combinator_1.union)([(0, combinator_1.surround)((0, source_1.str)('('), (0, combinator_1.some)((0, combinator_1.union)([bracket, source_1.escsource]), ')'), (0, source_1.str)(')'), true, undefined, ([as, bs = []], rest) => [(0, array_1.unshift)(as, bs), rest], 3 | 28 /* Backtrack.template */), (0, combinator_1.surround)((0, source_1.str)('['), (0, combinator_1.some)((0, combinator_1.union)([bracket, source_1.escsource]), ']'), (0, source_1.str)(']'), true, undefined, ([as, bs = []], rest) => [(0, array_1.unshift)(as, bs), rest], 3 | 28 /* Backtrack.template */), (0, combinator_1.surround)((0, source_1.str)('{'), (0, combinator_1.some)((0, combinator_1.union)([bracket, source_1.escsource]), '}'), (0, source_1.str)('}'), true, undefined, ([as, bs = []], rest) => [(0, array_1.unshift)(as, bs), rest], 3 | 28 /* Backtrack.template */), (0, combinator_1.surround)((0, source_1.str)('"'), (0, combinator_1.precedence)(2, (0, combinator_1.some)(source_1.escsource, /^"|^\\?\n/)), (0, source_1.str)('"'), true, undefined, undefined, 3 | 28 /* Backtrack.template */)])));
|
|
4962
4962
|
|
|
4963
4963
|
/***/ },
|
|
4964
4964
|
|
|
@@ -4978,7 +4978,7 @@ const source_1 = __webpack_require__(8745);
|
|
|
4978
4978
|
const visibility_1 = __webpack_require__(6364);
|
|
4979
4979
|
const array_1 = __webpack_require__(6876);
|
|
4980
4980
|
const dom_1 = __webpack_require__(394);
|
|
4981
|
-
exports.insertion = (0, combinator_1.lazy)(() => (0, combinator_1.creation)(1, 4 /* Recursion.inline */, (0, combinator_1.surround)((0, source_1.str)('++', '+'), (0, combinator_1.syntax)(
|
|
4981
|
+
exports.insertion = (0, combinator_1.lazy)(() => (0, combinator_1.creation)(1, 4 /* Recursion.inline */, (0, combinator_1.surround)((0, source_1.str)('++', '+'), (0, combinator_1.syntax)(0, 0 /* State.none */, (0, combinator_1.some)((0, combinator_1.union)([(0, combinator_1.some)(inline_1.inline, (0, visibility_1.blankWith)('\n', '++')), (0, combinator_1.open)('\n', (0, combinator_1.some)(inline_1.inline, '+'), true)]))), (0, source_1.str)('++'), false, ([, bs], rest) => [[(0, dom_1.html)('ins', (0, dom_1.defrag)(bs))], rest], ([as, bs], rest) => [(0, array_1.unshift)(as, bs), rest])));
|
|
4982
4982
|
|
|
4983
4983
|
/***/ },
|
|
4984
4984
|
|
|
@@ -4997,12 +4997,15 @@ const inline_1 = __webpack_require__(7973);
|
|
|
4997
4997
|
const source_1 = __webpack_require__(8745);
|
|
4998
4998
|
const array_1 = __webpack_require__(6876);
|
|
4999
4999
|
const dom_1 = __webpack_require__(394);
|
|
5000
|
-
const
|
|
5001
|
-
|
|
5000
|
+
const indexA = /^[0-9A-Za-z]+(?:(?:[.-]|, )[0-9A-Za-z]+)*/;
|
|
5001
|
+
const indexF = new RegExp(indexA.source.replace(', ', '[,、]').replace(/[09AZaz.]|\-(?!\w)/g, c => String.fromCodePoint(c.codePointAt(0) + 0xFEE0)));
|
|
5002
|
+
exports.bracket = (0, combinator_1.lazy)(() => (0, combinator_1.union)([(0, combinator_1.surround)((0, source_1.str)('('), (0, combinator_1.creation)(0, 5 /* Recursion.bracket */, (0, combinator_1.syntax)(1, 0 /* State.none */, (0, source_1.str)(indexA))), (0, source_1.str)(')')), (0, combinator_1.surround)((0, source_1.str)('('), (0, combinator_1.creation)(0, 5 /* Recursion.bracket */, (0, combinator_1.syntax)(1, 0 /* State.none */, (0, combinator_1.some)(inline_1.inline, ')', [[')', 1]]))), (0, source_1.str)(')'), true, ([as, bs = [], cs], rest) => [[(0, dom_1.html)('span', {
|
|
5002
5003
|
class: 'paren'
|
|
5003
|
-
}, (0, dom_1.defrag)((0, array_1.push)((0, array_1.unshift)(as, bs), cs)))], rest], ([as, bs = []], rest) => [(0, array_1.unshift)(as, bs), rest], 3 | 4 /* Backtrack.bracket */), (0, combinator_1.surround)((0, source_1.str)('('), (0, combinator_1.creation)(0, 5 /* Recursion.bracket */, (0, combinator_1.syntax)(
|
|
5004
|
+
}, (0, dom_1.defrag)((0, array_1.push)((0, array_1.unshift)(as, bs), cs)))], rest], ([as, bs = []], rest) => [(0, array_1.unshift)(as, bs), rest], 3 | 4 /* Backtrack.bracket */), (0, combinator_1.surround)((0, source_1.str)('('), (0, combinator_1.creation)(0, 5 /* Recursion.bracket */, (0, combinator_1.syntax)(1, 0 /* State.none */, (0, source_1.str)(indexF))), (0, source_1.str)(')')), (0, combinator_1.surround)((0, source_1.str)('('), (0, combinator_1.creation)(0, 5 /* Recursion.bracket */, (0, combinator_1.syntax)(1, 0 /* State.none */, (0, combinator_1.some)(inline_1.inline, ')', [[')', 1]]))), (0, source_1.str)(')'), true, ([as, bs = [], cs], rest) => [[(0, dom_1.html)('span', {
|
|
5004
5005
|
class: 'paren'
|
|
5005
|
-
}, (0, dom_1.defrag)((0, array_1.push)((0, array_1.unshift)(as, bs), cs)))], rest], ([as, bs = []], rest) => [(0, array_1.unshift)(as, bs), rest]), (0, combinator_1.surround)((0, source_1.str)('['), (0, combinator_1.creation)(0, 5 /* Recursion.bracket */, (0, combinator_1.syntax)(
|
|
5006
|
+
}, (0, dom_1.defrag)((0, array_1.push)((0, array_1.unshift)(as, bs), cs)))], rest], ([as, bs = []], rest) => [(0, array_1.unshift)(as, bs), rest]), (0, combinator_1.surround)((0, source_1.str)('['), (0, combinator_1.creation)(0, 5 /* Recursion.bracket */, (0, combinator_1.syntax)(1, 0 /* State.none */, (0, combinator_1.some)(inline_1.inline, ']', [[']', 1]]))), (0, source_1.str)(']'), true, undefined, ([as, bs = []], rest) => [(0, array_1.unshift)(as, bs), rest], 3 | 4 /* Backtrack.bracket */), (0, combinator_1.surround)((0, source_1.str)('['), (0, combinator_1.creation)(0, 5 /* Recursion.bracket */, (0, combinator_1.syntax)(1, 0 /* State.none */, (0, combinator_1.some)(inline_1.inline, ']', [[']', 1]]))), (0, source_1.str)(']'), true, undefined, ([as, bs = []], rest) => [(0, array_1.unshift)(as, bs), rest]), (0, combinator_1.surround)((0, source_1.str)('{'), (0, combinator_1.creation)(0, 5 /* Recursion.bracket */, (0, combinator_1.syntax)(1, 0 /* State.none */, (0, combinator_1.some)(inline_1.inline, '}', [['}', 1]]))), (0, source_1.str)('}'), true, undefined, ([as, bs = []], rest) => [(0, array_1.unshift)(as, bs), rest], 3 | 4 /* Backtrack.bracket */), (0, combinator_1.surround)((0, source_1.str)('{'), (0, combinator_1.creation)(0, 5 /* Recursion.bracket */, (0, combinator_1.syntax)(1, 0 /* State.none */, (0, combinator_1.some)(inline_1.inline, '}', [['}', 1]]))), (0, source_1.str)('}'), true, undefined, ([as, bs = []], rest) => [(0, array_1.unshift)(as, bs), rest]),
|
|
5007
|
+
// 改行禁止はバックトラックなしでは内側の構文を破壊するため安易に行えない。
|
|
5008
|
+
(0, combinator_1.surround)((0, source_1.str)('"'), (0, combinator_1.creation)(0, 5 /* Recursion.bracket */, (0, combinator_1.syntax)(2, 0 /* State.none */, (0, combinator_1.some)(inline_1.inline, '"', [[/^\\?\n/, 9], ['"', 2]]))), (0, source_1.str)('"'), true, undefined, ([as, bs = []], rest) => [(0, array_1.unshift)(as, bs), rest]), (0, combinator_1.surround)((0, source_1.str)('“'), (0, combinator_1.creation)(0, 5 /* Recursion.bracket */, (0, combinator_1.syntax)(2, 0 /* State.none */, (0, combinator_1.some)(inline_1.inline, '”', [[/^\\?\n/, 9], ['”', 2]]))), (0, source_1.str)('”'), true, undefined, ([as, bs = []], rest) => [(0, array_1.unshift)(as, bs), rest]), (0, combinator_1.surround)((0, source_1.str)('‘'), (0, combinator_1.creation)(0, 5 /* Recursion.bracket */, (0, combinator_1.syntax)(2, 0 /* State.none */, (0, combinator_1.some)(inline_1.inline, '’', [[/^\\?\n/, 9], ['’', 2]]))), (0, source_1.str)('’'), true, undefined, ([as, bs = []], rest) => [(0, array_1.unshift)(as, bs), rest]), (0, combinator_1.surround)((0, source_1.str)('「'), (0, combinator_1.creation)(0, 5 /* Recursion.bracket */, (0, combinator_1.syntax)(2, 0 /* State.none */, (0, combinator_1.some)(inline_1.inline, '」', [[/^\\?\n/, 9], ['」', 2]]))), (0, source_1.str)('」'), true, undefined, ([as, bs = []], rest) => [(0, array_1.unshift)(as, bs), rest]), (0, combinator_1.surround)((0, source_1.str)('『'), (0, combinator_1.creation)(0, 5 /* Recursion.bracket */, (0, combinator_1.syntax)(2, 0 /* State.none */, (0, combinator_1.some)(inline_1.inline, '』', [[/^\\?\n/, 9], ['』', 2]]))), (0, source_1.str)('』'), true, undefined, ([as, bs = []], rest) => [(0, array_1.unshift)(as, bs), rest])]));
|
|
5006
5009
|
|
|
5007
5010
|
/***/ },
|
|
5008
5011
|
|
|
@@ -5082,7 +5085,7 @@ const indexee_1 = __webpack_require__(7610);
|
|
|
5082
5085
|
const source_1 = __webpack_require__(8745);
|
|
5083
5086
|
const visibility_1 = __webpack_require__(6364);
|
|
5084
5087
|
const dom_1 = __webpack_require__(394);
|
|
5085
|
-
exports.index = (0, combinator_1.lazy)(() => (0, combinator_1.validate)('[#', (0, combinator_1.creation)(1, 0 /* Recursion.ignore */, (0, combinator_1.fmap)((0, indexee_1.indexee)((0, combinator_1.surround)('[#', (0, combinator_1.constraint)(64 /* State.index */, false, (0, combinator_1.syntax)(
|
|
5088
|
+
exports.index = (0, combinator_1.lazy)(() => (0, combinator_1.validate)('[#', (0, combinator_1.creation)(1, 0 /* Recursion.ignore */, (0, combinator_1.fmap)((0, indexee_1.indexee)((0, combinator_1.surround)('[#', (0, combinator_1.constraint)(64 /* State.index */, false, (0, combinator_1.syntax)(1, 502 /* State.linkers */ | 8 /* State.media */, (0, visibility_1.startTight)((0, combinator_1.some)((0, combinator_1.inits)([inline_1.inline, exports.signature]), ']', [[/^\\?\n/, 9], [']', 1]])))), ']', false, ([, ns], rest) => [[(0, dom_1.html)('a', {
|
|
5086
5089
|
'data-index': dataindex(ns)
|
|
5087
5090
|
}, (0, visibility_1.trimNodeEnd)((0, dom_1.defrag)(ns)))], rest], undefined, 1 | 4 /* Backtrack.bracket */)), ([el]) => [(0, dom_1.define)(el, {
|
|
5088
5091
|
id: el.id ? null : undefined,
|
|
@@ -5093,7 +5096,7 @@ exports.signature = (0, combinator_1.lazy)(() => (0, combinator_1.validate)('|',
|
|
|
5093
5096
|
class: 'indexer',
|
|
5094
5097
|
'data-index': (0, indexee_1.identity)('index', undefined, ns.join('')).slice(7)
|
|
5095
5098
|
})]))));
|
|
5096
|
-
const bracket = (0, combinator_1.lazy)(() => (0, combinator_1.creation)(0, 6 /* Recursion.terminal */, (0, combinator_1.union)([(0, combinator_1.surround)((0, source_1.str)('('), (0, combinator_1.some)((0, combinator_1.union)([bracket, source_1.txt]), ')'), (0, source_1.str)(')'), true, undefined, undefined, 3 |
|
|
5099
|
+
const bracket = (0, combinator_1.lazy)(() => (0, combinator_1.creation)(0, 6 /* Recursion.terminal */, (0, combinator_1.union)([(0, combinator_1.surround)((0, source_1.str)('('), (0, combinator_1.some)((0, combinator_1.union)([bracket, source_1.txt]), ')'), (0, source_1.str)(')'), true, undefined, undefined, 3 | 24 /* Backtrack.index */), (0, combinator_1.surround)((0, source_1.str)('['), (0, combinator_1.some)((0, combinator_1.union)([bracket, source_1.txt]), ']'), (0, source_1.str)(']'), true, undefined, undefined, 3 | 24 /* Backtrack.index */), (0, combinator_1.surround)((0, source_1.str)('{'), (0, combinator_1.some)((0, combinator_1.union)([bracket, source_1.txt]), '}'), (0, source_1.str)('}'), true, undefined, undefined, 3 | 24 /* Backtrack.index */), (0, combinator_1.surround)((0, source_1.str)('"'), (0, combinator_1.precedence)(2, (0, combinator_1.some)(source_1.txt, '"')), (0, source_1.str)('"'), true, undefined, undefined, 3 | 24 /* Backtrack.index */)])));
|
|
5097
5100
|
function dataindex(ns) {
|
|
5098
5101
|
if (ns.length === 0) return;
|
|
5099
5102
|
for (let i = ns.length - 1; i >= 0; --i) {
|
|
@@ -5267,9 +5270,9 @@ const attrspecs = {
|
|
|
5267
5270
|
};
|
|
5268
5271
|
Object.setPrototypeOf(attrspecs, null);
|
|
5269
5272
|
Object.values(attrspecs).forEach(o => Object.setPrototypeOf(o, null));
|
|
5270
|
-
exports.html = (0, combinator_1.lazy)(() => (0, combinator_1.validate)('<', (0, combinator_1.validate)(/^<[a-z]+(?=[^\S\n]|>)/i, (0, combinator_1.creation)(1, 4 /* Recursion.inline */, (0, combinator_1.syntax)(
|
|
5273
|
+
exports.html = (0, combinator_1.lazy)(() => (0, combinator_1.validate)('<', (0, combinator_1.validate)(/^<[a-z]+(?=[^\S\n]|>)/i, (0, combinator_1.creation)(1, 4 /* Recursion.inline */, (0, combinator_1.syntax)(3, 0 /* State.none */, (0, combinator_1.union)([(0, combinator_1.focus)(/^<wbr[^\S\n]*>/i, () => [[(0, dom_1.html)('wbr')], '']), (0, combinator_1.surround)(
|
|
5271
5274
|
// https://html.spec.whatwg.org/multipage/syntax.html#void-elements
|
|
5272
|
-
(0, source_1.str)(/^<(?:area|base|br|col|embed|hr|img|input|link|meta|source|track|wbr)(?=[^\S\n]|>)/i), (0, combinator_1.some)((0, combinator_1.union)([exports.attribute])), (0, source_1.str)(/^[^\S\n]*>/), true, ([as, bs = [], cs], rest) => [[elem(as[0].slice(1), (0, array_1.push)((0, array_1.unshift)(as, bs), cs), [], [])], rest]), (0, combinator_1.match)(new RegExp(String.raw`^<(${TAGS.join('|')})(?=[^\S\n]|>)`), (0, memoize_1.memoize)(([, tag]) => (0, combinator_1.surround)((0, combinator_1.surround)((0, source_1.str)(`<${tag}`), (0, combinator_1.some)(exports.attribute), (0, source_1.str)(/^[^\S\n]*>/), true), (0, combinator_1.subsequence)([(0, combinator_1.focus)(/^[^\S\n]*\n/, (0, combinator_1.some)(inline_1.inline)), (0, combinator_1.some)((0, combinator_1.open)(/^\n?/, (0, combinator_1.some)(inline_1.inline, (0, visibility_1.blankWith)('\n', `</${tag}>`), [[(0, visibility_1.blankWith)('\n', `</${tag}>`),
|
|
5275
|
+
(0, source_1.str)(/^<(?:area|base|br|col|embed|hr|img|input|link|meta|source|track|wbr)(?=[^\S\n]|>)/i), (0, combinator_1.some)((0, combinator_1.union)([exports.attribute])), (0, source_1.str)(/^[^\S\n]*>/), true, ([as, bs = [], cs], rest) => [[elem(as[0].slice(1), (0, array_1.push)((0, array_1.unshift)(as, bs), cs), [], [])], rest]), (0, combinator_1.match)(new RegExp(String.raw`^<(${TAGS.join('|')})(?=[^\S\n]|>)`), (0, memoize_1.memoize)(([, tag]) => (0, combinator_1.surround)((0, combinator_1.surround)((0, source_1.str)(`<${tag}`), (0, combinator_1.some)(exports.attribute), (0, source_1.str)(/^[^\S\n]*>/), true), (0, combinator_1.subsequence)([(0, combinator_1.focus)(/^[^\S\n]*\n/, (0, combinator_1.some)(inline_1.inline)), (0, combinator_1.some)((0, combinator_1.open)(/^\n?/, (0, combinator_1.some)(inline_1.inline, (0, visibility_1.blankWith)('\n', `</${tag}>`), [[(0, visibility_1.blankWith)('\n', `</${tag}>`), 3]]), true))]), (0, source_1.str)(`</${tag}>`), true, ([as, bs = [], cs], rest) => [[elem(tag, as, bs, cs)], rest], ([as, bs = []], rest) => [[elem(tag, as, bs, [])], rest]))), (0, combinator_1.match)(/^<([a-z]+)(?=[^\S\n]|>)/i, (0, memoize_1.memoize)(([, tag]) => (0, combinator_1.surround)((0, combinator_1.surround)((0, source_1.str)(`<${tag}`), (0, combinator_1.some)(exports.attribute), (0, source_1.str)(/^[^\S\n]*>/), true), (0, combinator_1.subsequence)([(0, combinator_1.focus)(/^[^\S\n]*\n/, (0, combinator_1.some)(inline_1.inline)), (0, combinator_1.some)(inline_1.inline, `</${tag}>`, [[`</${tag}>`, 3]])]), (0, source_1.str)(`</${tag}>`), true, ([as, bs = [], cs], rest) => [[elem(tag, as, bs, cs)], rest], ([as, bs = []], rest) => [[elem(tag, as, bs, [])], rest]), ([, tag]) => tag, new clock_1.Clock(10000)))]))))));
|
|
5273
5276
|
exports.attribute = (0, combinator_1.union)([(0, source_1.str)(/^[^\S\n]+[a-z]+(?:-[a-z]+)*(?:="[^"\n]*")?(?=[^\S\n]|>)/i)]);
|
|
5274
5277
|
// https://developer.mozilla.org/en-US/docs/Web/HTML/Element
|
|
5275
5278
|
// [...document.querySelectorAll('tbody > tr > td:first-child')].map(el => el.textContent.slice(1, -1))
|
|
@@ -5351,7 +5354,7 @@ const source_1 = __webpack_require__(8745);
|
|
|
5351
5354
|
const visibility_1 = __webpack_require__(6364);
|
|
5352
5355
|
const array_1 = __webpack_require__(6876);
|
|
5353
5356
|
const dom_1 = __webpack_require__(394);
|
|
5354
|
-
exports.mark = (0, combinator_1.lazy)(() => (0, combinator_1.creation)(1, 4 /* Recursion.inline */, (0, combinator_1.surround)((0, source_1.str)('==', '='), (0, combinator_1.constraint)(4 /* State.mark */, false, (0, combinator_1.syntax)(
|
|
5357
|
+
exports.mark = (0, combinator_1.lazy)(() => (0, combinator_1.creation)(1, 4 /* Recursion.inline */, (0, combinator_1.surround)((0, source_1.str)('==', '='), (0, combinator_1.constraint)(4 /* State.mark */, false, (0, combinator_1.syntax)(0, 0 /* State.none */, (0, visibility_1.startTight)((0, combinator_1.some)((0, combinator_1.union)([(0, combinator_1.some)(inline_1.inline, (0, visibility_1.blankWith)('==')), (0, combinator_1.open)((0, combinator_1.some)(inline_1.inline, '='), exports.mark)]))))), (0, source_1.str)('=='), false, ([, bs], rest, {
|
|
5355
5358
|
id
|
|
5356
5359
|
}) => {
|
|
5357
5360
|
const el = (0, dom_1.html)('mark', (0, dom_1.defrag)(bs));
|
|
@@ -5475,6 +5478,7 @@ class Delimiters {
|
|
|
5475
5478
|
this.registry = (0, memoize_1.memoize)(() => []);
|
|
5476
5479
|
this.delimiters = [];
|
|
5477
5480
|
this.order = [];
|
|
5481
|
+
this.states = [];
|
|
5478
5482
|
}
|
|
5479
5483
|
static signature(pattern) {
|
|
5480
5484
|
switch (typeof pattern) {
|
|
@@ -5492,6 +5496,8 @@ class Delimiters {
|
|
|
5492
5496
|
delimiters,
|
|
5493
5497
|
order
|
|
5494
5498
|
} = this;
|
|
5499
|
+
// 構文数x優先順位数以下
|
|
5500
|
+
|
|
5495
5501
|
for (let i = 0; i < delims.length; ++i) {
|
|
5496
5502
|
const {
|
|
5497
5503
|
signature,
|
|
@@ -5505,7 +5511,8 @@ class Delimiters {
|
|
|
5505
5511
|
index,
|
|
5506
5512
|
signature,
|
|
5507
5513
|
matcher,
|
|
5508
|
-
precedence
|
|
5514
|
+
precedence,
|
|
5515
|
+
state: true
|
|
5509
5516
|
};
|
|
5510
5517
|
delimiters[index] = delimiter;
|
|
5511
5518
|
stack.push(delimiter);
|
|
@@ -5513,6 +5520,7 @@ class Delimiters {
|
|
|
5513
5520
|
} else {
|
|
5514
5521
|
order.push(-1);
|
|
5515
5522
|
}
|
|
5523
|
+
// 現状各優先順位は固定
|
|
5516
5524
|
}
|
|
5517
5525
|
}
|
|
5518
5526
|
pop(count) {
|
|
@@ -5534,13 +5542,35 @@ class Delimiters {
|
|
|
5534
5542
|
}
|
|
5535
5543
|
}
|
|
5536
5544
|
}
|
|
5537
|
-
|
|
5545
|
+
shift(precedence) {
|
|
5546
|
+
const {
|
|
5547
|
+
delimiters
|
|
5548
|
+
} = this;
|
|
5549
|
+
const indexes = [];
|
|
5550
|
+
for (let i = delimiters.length; i--;) {
|
|
5551
|
+
const delimiter = delimiters[i];
|
|
5552
|
+
if (delimiter.precedence >= precedence || !delimiter.state) continue;
|
|
5553
|
+
delimiter.state = false;
|
|
5554
|
+
indexes.push(i);
|
|
5555
|
+
}
|
|
5556
|
+
this.states.push(indexes);
|
|
5557
|
+
}
|
|
5558
|
+
unshift() {
|
|
5559
|
+
const {
|
|
5560
|
+
delimiters
|
|
5561
|
+
} = this;
|
|
5562
|
+
const indexes = this.states.pop();
|
|
5563
|
+
for (let i = indexes.length; i--;) {
|
|
5564
|
+
delimiters[indexes[i]].state = true;
|
|
5565
|
+
}
|
|
5566
|
+
}
|
|
5567
|
+
match(source, precedence = 0) {
|
|
5538
5568
|
const {
|
|
5539
5569
|
delimiters
|
|
5540
5570
|
} = this;
|
|
5541
|
-
for (let i =
|
|
5571
|
+
for (let i = delimiters.length; i--;) {
|
|
5542
5572
|
const delimiter = delimiters[i];
|
|
5543
|
-
if (precedence
|
|
5573
|
+
if (delimiter.precedence <= precedence || !delimiter.state) continue;
|
|
5544
5574
|
switch (delimiter.matcher(source)) {
|
|
5545
5575
|
case true:
|
|
5546
5576
|
return true;
|
|
@@ -5679,12 +5709,18 @@ function precedence(precedence, parser) {
|
|
|
5679
5709
|
source,
|
|
5680
5710
|
context
|
|
5681
5711
|
}) => {
|
|
5682
|
-
const
|
|
5712
|
+
const {
|
|
5713
|
+
delimiters,
|
|
5714
|
+
precedence: p = 0
|
|
5715
|
+
} = context;
|
|
5716
|
+
const shift = precedence > p;
|
|
5683
5717
|
context.precedence = precedence;
|
|
5718
|
+
shift && delimiters?.shift(precedence);
|
|
5684
5719
|
const result = parser({
|
|
5685
5720
|
source,
|
|
5686
5721
|
context
|
|
5687
5722
|
});
|
|
5723
|
+
shift && delimiters?.unshift();
|
|
5688
5724
|
context.precedence = p;
|
|
5689
5725
|
return result;
|
|
5690
5726
|
};
|
|
@@ -6040,7 +6076,7 @@ const array_1 = __webpack_require__(6876);
|
|
|
6040
6076
|
const dom_1 = __webpack_require__(394);
|
|
6041
6077
|
// Don't use the symbols already used: !#$%@&*+~=|
|
|
6042
6078
|
// All syntax surrounded by square brackets shouldn't contain line breaks.
|
|
6043
|
-
exports.placeholder = (0, combinator_1.lazy)(() => (0, combinator_1.validate)('[', (0, combinator_1.creation)(1, 4 /* Recursion.inline */, (0, combinator_1.surround)((0, source_1.str)(/^\[[:^|]/), (0, combinator_1.syntax)(
|
|
6079
|
+
exports.placeholder = (0, combinator_1.lazy)(() => (0, combinator_1.validate)('[', (0, combinator_1.creation)(1, 4 /* Recursion.inline */, (0, combinator_1.surround)((0, source_1.str)(/^\[[:^|]/), (0, combinator_1.syntax)(1, 0 /* State.none */, (0, visibility_1.startTight)((0, combinator_1.some)((0, combinator_1.union)([inline_1.inline]), ']', [[']', 1]]))), (0, source_1.str)(']'), false, ([, bs], rest) => [[(0, dom_1.html)('span', {
|
|
6044
6080
|
class: 'invalid',
|
|
6045
6081
|
'data-invalid-syntax': 'extension',
|
|
6046
6082
|
'data-invalid-type': 'syntax',
|
|
@@ -6254,7 +6290,7 @@ function isStartTightNodes(nodes) {
|
|
|
6254
6290
|
exports.isStartTightNodes = isStartTightNodes;
|
|
6255
6291
|
//export function isEndTightNodes(nodes: readonly (HTMLElement | string)[]): boolean {
|
|
6256
6292
|
// if (nodes.length === 0) return true;
|
|
6257
|
-
// return isVisible(nodes
|
|
6293
|
+
// return isVisible(nodes.at(-1)!, -1);
|
|
6258
6294
|
//}
|
|
6259
6295
|
function isVisible(node, strpos) {
|
|
6260
6296
|
switch (typeof node) {
|
|
@@ -6310,8 +6346,8 @@ function trimBlankEnd(parser) {
|
|
|
6310
6346
|
// return nodes;
|
|
6311
6347
|
//}
|
|
6312
6348
|
function trimNodeEnd(nodes) {
|
|
6313
|
-
const skip = nodes.length > 0 && typeof nodes
|
|
6314
|
-
for (let node = nodes[0]; nodes.length > 0 && !isVisible(node = nodes
|
|
6349
|
+
const skip = nodes.length > 0 && typeof nodes.at(-1) === 'object' && nodes.at(-1)['className'] === 'indexer' ? [nodes.pop()] : [];
|
|
6350
|
+
for (let node = nodes[0]; nodes.length > 0 && !isVisible(node = nodes.at(-1), -1);) {
|
|
6315
6351
|
if (typeof node === 'string') {
|
|
6316
6352
|
const pos = node.trimEnd().length;
|
|
6317
6353
|
if (pos > 0) {
|
|
@@ -6406,7 +6442,7 @@ const source_1 = __webpack_require__(8745);
|
|
|
6406
6442
|
const visibility_1 = __webpack_require__(6364);
|
|
6407
6443
|
const array_1 = __webpack_require__(6876);
|
|
6408
6444
|
const dom_1 = __webpack_require__(394);
|
|
6409
|
-
exports.strong = (0, combinator_1.lazy)(() => (0, combinator_1.creation)(1, 4 /* Recursion.inline */, (0, combinator_1.surround)((0, source_1.str)('**', '*'), (0, combinator_1.syntax)(
|
|
6445
|
+
exports.strong = (0, combinator_1.lazy)(() => (0, combinator_1.creation)(1, 4 /* Recursion.inline */, (0, combinator_1.surround)((0, source_1.str)('**', '*'), (0, combinator_1.syntax)(0, 0 /* State.none */, (0, visibility_1.startTight)((0, combinator_1.some)((0, combinator_1.union)([(0, combinator_1.some)(inline_1.inline, (0, visibility_1.blankWith)('**')), (0, combinator_1.open)((0, combinator_1.some)(inline_1.inline, '*'), (0, combinator_1.union)([emstrong_1.emstrong, exports.strong]))])))), (0, source_1.str)('**'), false, ([, bs], rest) => [[(0, dom_1.html)('strong', (0, dom_1.defrag)(bs))], rest], ([as, bs], rest) => [(0, array_1.unshift)(as, bs), rest])));
|
|
6410
6446
|
|
|
6411
6447
|
/***/ },
|
|
6412
6448
|
|
|
@@ -6788,7 +6824,7 @@ const source_1 = __webpack_require__(8745);
|
|
|
6788
6824
|
const visibility_1 = __webpack_require__(6364);
|
|
6789
6825
|
const array_1 = __webpack_require__(6876);
|
|
6790
6826
|
const dom_1 = __webpack_require__(394);
|
|
6791
|
-
exports.deletion = (0, combinator_1.lazy)(() => (0, combinator_1.creation)(1, 4 /* Recursion.inline */, (0, combinator_1.surround)((0, source_1.str)('~~', '~'), (0, combinator_1.syntax)(
|
|
6827
|
+
exports.deletion = (0, combinator_1.lazy)(() => (0, combinator_1.creation)(1, 4 /* Recursion.inline */, (0, combinator_1.surround)((0, source_1.str)('~~', '~'), (0, combinator_1.syntax)(0, 0 /* State.none */, (0, combinator_1.some)((0, combinator_1.union)([(0, combinator_1.some)(inline_1.inline, (0, visibility_1.blankWith)('\n', '~~')), (0, combinator_1.open)('\n', (0, combinator_1.some)(inline_1.inline, '~'), true)]))), (0, source_1.str)('~~'), false, ([, bs], rest) => [[(0, dom_1.html)('del', (0, dom_1.defrag)(bs))], rest], ([as, bs], rest) => [(0, array_1.unshift)(as, bs), rest])));
|
|
6792
6828
|
|
|
6793
6829
|
/***/ },
|
|
6794
6830
|
|
|
@@ -6980,12 +7016,12 @@ const source_1 = __webpack_require__(8745);
|
|
|
6980
7016
|
const visibility_1 = __webpack_require__(6364);
|
|
6981
7017
|
const array_1 = __webpack_require__(6876);
|
|
6982
7018
|
const dom_1 = __webpack_require__(394);
|
|
6983
|
-
exports.ruby = (0, combinator_1.lazy)(() => (0, combinator_1.validate)('[', (0, combinator_1.creation)(1, 0 /* Recursion.ignore */, (0, combinator_1.syntax)(
|
|
7019
|
+
exports.ruby = (0, combinator_1.lazy)(() => (0, combinator_1.validate)('[', (0, combinator_1.creation)(1, 0 /* Recursion.ignore */, (0, combinator_1.syntax)(1, -1 /* State.all */, (0, combinator_1.fmap)((0, combinator_1.sequence)([(0, combinator_1.bind)((0, combinator_1.surround)('[', (0, source_1.str)(/^(?:\\[^\n]|[^\\[\](){}"\n])+/), ']', false, undefined, undefined, 3 | 20 /* Backtrack.ruby */), ([source], rest, context) => {
|
|
6984
7020
|
const ns = (0, parser_1.eval)(text({
|
|
6985
7021
|
source,
|
|
6986
7022
|
context
|
|
6987
7023
|
}), [undefined])[0];
|
|
6988
|
-
ns && ns
|
|
7024
|
+
ns && ns.at(-1) === '' && ns.pop();
|
|
6989
7025
|
return ns && (0, visibility_1.isStartTightNodes)(ns) ? [[ns], rest] : undefined;
|
|
6990
7026
|
}), (0, combinator_1.bind)((0, combinator_1.surround)('(', (0, source_1.str)(/^(?:\\[^\n]|[^\\[\](){}"\n])+/), ')', false, undefined, undefined, 3 | 20 /* Backtrack.ruby */), ([source], rest, context) => {
|
|
6991
7027
|
const ns = (0, parser_1.eval)(text({
|
|
@@ -7140,7 +7176,7 @@ const optspec = {
|
|
|
7140
7176
|
rel: undefined
|
|
7141
7177
|
};
|
|
7142
7178
|
Object.setPrototypeOf(optspec, null);
|
|
7143
|
-
exports.media = (0, combinator_1.lazy)(() => (0, combinator_1.validate)(['![', '!{'], (0, combinator_1.creation)(1, 0 /* Recursion.ignore */, (0, combinator_1.open)('!', (0, combinator_1.constraint)(8 /* State.media */, false, (0, combinator_1.syntax)(
|
|
7179
|
+
exports.media = (0, combinator_1.lazy)(() => (0, combinator_1.validate)(['![', '!{'], (0, combinator_1.creation)(1, 0 /* Recursion.ignore */, (0, combinator_1.open)('!', (0, combinator_1.constraint)(8 /* State.media */, false, (0, combinator_1.syntax)(1, ~16 /* State.link */, (0, combinator_1.bind)((0, combinator_1.verify)((0, combinator_1.fmap)((0, combinator_1.tails)([(0, combinator_1.dup)((0, combinator_1.surround)('[', (0, combinator_1.some)((0, combinator_1.union)([htmlentity_1.unsafehtmlentity, bracket, source_1.txt]), ']', [[/^\\?\n/, 9]]), ']', true, undefined, undefined, 1 | 12 /* Backtrack.media */)), (0, combinator_1.dup)((0, combinator_1.surround)(/^{(?![{}])/, (0, combinator_1.inits)([link_1.uri, (0, combinator_1.some)(option)]), /^[^\S\n]*}/, false, undefined, undefined, 3 | 16 /* Backtrack.link */))]), ([as, bs]) => bs ? [[as.join('').trim() || as.join('')], bs] : [[''], as]), ([[text]]) => text === '' || text.trim() !== ''), ([[text], params], rest, context) => {
|
|
7144
7180
|
const INSECURE_URI = params.shift();
|
|
7145
7181
|
const url = new url_1.ReadonlyURL((0, link_1.resolve)(INSECURE_URI, context.host ?? location, context.url ?? context.host ?? location), context.host?.href || location.href);
|
|
7146
7182
|
let cache;
|
|
@@ -7167,7 +7203,7 @@ exports.media = (0, combinator_1.lazy)(() => (0, combinator_1.validate)(['![', '
|
|
|
7167
7203
|
});
|
|
7168
7204
|
})))))));
|
|
7169
7205
|
exports.linemedia = (0, combinator_1.surround)(source_1.linebreak, (0, combinator_1.union)([exports.media]), /^(?=[^\S\n]*(?:$|\n))/);
|
|
7170
|
-
const bracket = (0, combinator_1.lazy)(() => (0, combinator_1.creation)(0, 6 /* Recursion.terminal */, (0, combinator_1.union)([(0, combinator_1.surround)((0, source_1.str)('('), (0, combinator_1.some)((0, combinator_1.union)([htmlentity_1.unsafehtmlentity, bracket, source_1.txt]), ')'), (0, source_1.str)(')'), true, undefined, ([as, bs = []], rest) => [(0, array_1.unshift)(as, bs), rest], 3 |
|
|
7206
|
+
const bracket = (0, combinator_1.lazy)(() => (0, combinator_1.creation)(0, 6 /* Recursion.terminal */, (0, combinator_1.union)([(0, combinator_1.surround)((0, source_1.str)('('), (0, combinator_1.some)((0, combinator_1.union)([htmlentity_1.unsafehtmlentity, bracket, source_1.txt]), ')'), (0, source_1.str)(')'), true, undefined, ([as, bs = []], rest) => [(0, array_1.unshift)(as, bs), rest], 3 | 12 /* Backtrack.media */), (0, combinator_1.surround)((0, source_1.str)('['), (0, combinator_1.some)((0, combinator_1.union)([htmlentity_1.unsafehtmlentity, bracket, source_1.txt]), ']'), (0, source_1.str)(']'), true, undefined, ([as, bs = []], rest) => [(0, array_1.unshift)(as, bs), rest], 3 | 12 /* Backtrack.media */), (0, combinator_1.surround)((0, source_1.str)('{'), (0, combinator_1.some)((0, combinator_1.union)([htmlentity_1.unsafehtmlentity, bracket, source_1.txt]), '}'), (0, source_1.str)('}'), true, undefined, ([as, bs = []], rest) => [(0, array_1.unshift)(as, bs), rest], 3 | 12 /* Backtrack.media */), (0, combinator_1.surround)((0, source_1.str)('"'), (0, combinator_1.precedence)(2, (0, combinator_1.some)((0, combinator_1.union)([htmlentity_1.unsafehtmlentity, source_1.txt]), '"')), (0, source_1.str)('"'), true, undefined, undefined, 3 | 12 /* Backtrack.media */)])));
|
|
7171
7207
|
const option = (0, combinator_1.lazy)(() => (0, combinator_1.union)([(0, combinator_1.fmap)((0, source_1.str)(/^[^\S\n]+[1-9][0-9]*x[1-9][0-9]*(?=[^\S\n]|})/), ([opt]) => [` width="${opt.slice(1).split('x')[0]}"`, ` height="${opt.slice(1).split('x')[1]}"`]), (0, combinator_1.fmap)((0, source_1.str)(/^[^\S\n]+[1-9][0-9]*:[1-9][0-9]*(?=[^\S\n]|})/), ([opt]) => [` aspect-ratio="${opt.slice(1).split(':').join('/')}"`]), link_1.option]));
|
|
7172
7208
|
function sanitize(target, uri, alt) {
|
|
7173
7209
|
switch (uri.protocol) {
|
|
@@ -7405,11 +7441,13 @@ function signature(source) {
|
|
|
7405
7441
|
continue;
|
|
7406
7442
|
case 'RT':
|
|
7407
7443
|
case 'RP':
|
|
7408
|
-
case 'BR':
|
|
7409
7444
|
case 'UL':
|
|
7410
7445
|
case 'OL':
|
|
7411
7446
|
el.remove();
|
|
7412
7447
|
continue;
|
|
7448
|
+
case 'BR':
|
|
7449
|
+
el.replaceWith('\n');
|
|
7450
|
+
continue;
|
|
7413
7451
|
}
|
|
7414
7452
|
switch (el.className) {
|
|
7415
7453
|
case 'math':
|
|
@@ -7936,7 +7974,7 @@ const hashnum_1 = __webpack_require__(8684);
|
|
|
7936
7974
|
const anchor_1 = __webpack_require__(8535);
|
|
7937
7975
|
const source_1 = __webpack_require__(8745);
|
|
7938
7976
|
const util_1 = __webpack_require__(4992);
|
|
7939
|
-
exports.autolink = (0, combinator_1.lazy)(() => (0, combinator_1.validate)(/^(?:[@#>0-9a-z]|\S[#>]|[\r\n]!?https?:\/\/)/iu, (0, combinator_1.constraint)(2 /* State.autolink */, false, (0, combinator_1.syntax)(
|
|
7977
|
+
exports.autolink = (0, combinator_1.lazy)(() => (0, combinator_1.validate)(/^(?:[@#>0-9a-z]|\S[#>]|[\r\n]!?https?:\/\/)/iu, (0, combinator_1.constraint)(2 /* State.autolink */, false, (0, combinator_1.syntax)(0, ~1 /* State.shortcut */, (0, combinator_1.union)([(0, combinator_1.some)((0, combinator_1.union)([url_1.lineurl])), (0, combinator_1.fmap)((0, combinator_1.some)((0, combinator_1.union)([url_1.url, email_1.email,
|
|
7940
7978
|
// Escape unmatched email-like strings.
|
|
7941
7979
|
(0, source_1.str)(/^[0-9a-z]+(?:[_.+-][0-9a-z]+)*(?:@(?:[0-9a-z]+(?:[.-][0-9a-z]+)*)?)*/i), channel_1.channel, account_1.account,
|
|
7942
7980
|
// Escape unmatched account-like strings.
|
|
@@ -8639,7 +8677,7 @@ const source_1 = __webpack_require__(8745);
|
|
|
8639
8677
|
const memoize_1 = __webpack_require__(6925);
|
|
8640
8678
|
const array_1 = __webpack_require__(6876);
|
|
8641
8679
|
const dom_1 = __webpack_require__(394);
|
|
8642
|
-
exports.remark = (0, combinator_1.lazy)(() => (0, combinator_1.validate)('[%', (0, combinator_1.creation)(1, 4 /* Recursion.inline */, (0, combinator_1.syntax)(
|
|
8680
|
+
exports.remark = (0, combinator_1.lazy)(() => (0, combinator_1.validate)('[%', (0, combinator_1.creation)(1, 4 /* Recursion.inline */, (0, combinator_1.syntax)(4, 0 /* State.none */, (0, combinator_1.match)(/^\[(%+)\s/, (0, memoize_1.memoize)(([, fence]) => (0, combinator_1.surround)((0, combinator_1.open)((0, source_1.str)(`[${fence}`), (0, combinator_1.some)(source_1.text, new RegExp(String.raw`^\s+${fence}\]|^\S`)), true), (0, combinator_1.some)((0, combinator_1.union)([inline_1.inline]), new RegExp(String.raw`^\s+${fence}\]`), [[new RegExp(String.raw`^\s+${fence}\]`), 4]]), (0, combinator_1.close)((0, combinator_1.some)(source_1.text, /^\S/), (0, source_1.str)(`${fence}]`)), true, ([as, bs = [], cs], rest) => [[(0, dom_1.html)('span', {
|
|
8643
8681
|
class: 'remark'
|
|
8644
8682
|
}, [(0, dom_1.html)('input', {
|
|
8645
8683
|
type: 'checkbox'
|
|
@@ -8662,7 +8700,7 @@ const inline_1 = __webpack_require__(7973);
|
|
|
8662
8700
|
const source_1 = __webpack_require__(8745);
|
|
8663
8701
|
const visibility_1 = __webpack_require__(6364);
|
|
8664
8702
|
const dom_1 = __webpack_require__(394);
|
|
8665
|
-
exports.reference = (0, combinator_1.lazy)(() => (0, combinator_1.creation)(1, 0 /* Recursion.ignore */, (0, combinator_1.surround)('[[', (0, combinator_1.constraint)(128 /* State.reference */, false, (0, combinator_1.syntax)(
|
|
8703
|
+
exports.reference = (0, combinator_1.lazy)(() => (0, combinator_1.creation)(1, 0 /* Recursion.ignore */, (0, combinator_1.surround)('[[', (0, combinator_1.constraint)(128 /* State.reference */, false, (0, combinator_1.syntax)(1, 256 /* State.annotation */ | 128 /* State.reference */ | 8 /* State.media */, (0, combinator_1.subsequence)([abbr, (0, visibility_1.trimBlankStart)((0, combinator_1.some)(inline_1.inline, ']', [[/^\\?\n/, 9], [']', 1]]))]))), ']]', false, ([, ns], rest) => [[(0, dom_1.html)('sup', attributes(ns), [(0, dom_1.html)('span', (0, visibility_1.trimNodeEnd)((0, dom_1.defrag)(ns)))])], rest], undefined, 1 | 4 /* Backtrack.bracket */)));
|
|
8666
8704
|
// Chicago-Style
|
|
8667
8705
|
const abbr = (0, combinator_1.creation)(1, 0 /* Recursion.ignore */, (0, combinator_1.surround)('^', (0, combinator_1.union)([(0, source_1.str)(/^(?=[A-Z])(?:[0-9A-Za-z]'?|(?:[-.:]|\.?\??,? ?)(?!['\-.:?, ]))+/)]), /^\|?(?=]])|^\|[^\S\n]*/, true, ([, ns], rest) => ns ? [['\n', ns[0].trimEnd()], rest.replace(visibility_1.blank.start, '')] : [[''], `^${rest}`], ([,, rest]) => [[''], `^${rest}`]));
|
|
8668
8706
|
function attributes(ns) {
|
package/package.json
CHANGED
|
@@ -32,7 +32,7 @@ export function indent<T>(opener: RegExp | Parser<T>, parser?: Parser<T> | boole
|
|
|
32
32
|
|
|
33
33
|
function trimBlockEnd(block: string): string {
|
|
34
34
|
return block === ''
|
|
35
|
-
|| block
|
|
35
|
+
|| block.at(-1) !== '\n'
|
|
36
36
|
? block
|
|
37
37
|
: block.slice(0, -1);
|
|
38
38
|
}
|
|
@@ -5,6 +5,7 @@ interface Delimiter {
|
|
|
5
5
|
readonly signature: string;
|
|
6
6
|
readonly matcher: (source: string) => boolean | undefined;
|
|
7
7
|
readonly precedence: number;
|
|
8
|
+
state: boolean;
|
|
8
9
|
}
|
|
9
10
|
|
|
10
11
|
export class Delimiters {
|
|
@@ -33,6 +34,7 @@ export class Delimiters {
|
|
|
33
34
|
private readonly registry = memoize<(signature: string) => Delimiter[]>(() => []);
|
|
34
35
|
private readonly delimiters: Delimiter[] = [];
|
|
35
36
|
private readonly order: number[] = [];
|
|
37
|
+
private readonly states: (readonly number[])[] = [];
|
|
36
38
|
public push(
|
|
37
39
|
delims: readonly {
|
|
38
40
|
readonly signature: string;
|
|
@@ -41,6 +43,8 @@ export class Delimiters {
|
|
|
41
43
|
}[]
|
|
42
44
|
): void {
|
|
43
45
|
const { registry, delimiters, order } = this;
|
|
46
|
+
// 構文数x優先順位数以下
|
|
47
|
+
assert(delimiters.length < 100);
|
|
44
48
|
for (let i = 0; i < delims.length; ++i) {
|
|
45
49
|
const { signature, matcher, precedence } = delims[i];
|
|
46
50
|
const stack = registry(signature);
|
|
@@ -51,6 +55,7 @@ export class Delimiters {
|
|
|
51
55
|
signature,
|
|
52
56
|
matcher,
|
|
53
57
|
precedence,
|
|
58
|
+
state: true,
|
|
54
59
|
};
|
|
55
60
|
delimiters[index] = delimiter;
|
|
56
61
|
stack.push(delimiter);
|
|
@@ -59,6 +64,8 @@ export class Delimiters {
|
|
|
59
64
|
else {
|
|
60
65
|
order.push(-1);
|
|
61
66
|
}
|
|
67
|
+
// 現状各優先順位は固定
|
|
68
|
+
assert(stack.length === 1);
|
|
62
69
|
}
|
|
63
70
|
}
|
|
64
71
|
public pop(count: number): void {
|
|
@@ -82,11 +89,29 @@ export class Delimiters {
|
|
|
82
89
|
}
|
|
83
90
|
}
|
|
84
91
|
}
|
|
85
|
-
public
|
|
92
|
+
public shift(precedence: number): void {
|
|
86
93
|
const { delimiters } = this;
|
|
87
|
-
|
|
94
|
+
const indexes: number[] = [];
|
|
95
|
+
for (let i = delimiters.length; i--;) {
|
|
88
96
|
const delimiter = delimiters[i];
|
|
89
|
-
if (precedence >= delimiter.
|
|
97
|
+
if (delimiter.precedence >= precedence || !delimiter.state) continue;
|
|
98
|
+
delimiter.state = false;
|
|
99
|
+
indexes.push(i)
|
|
100
|
+
}
|
|
101
|
+
this.states.push(indexes);
|
|
102
|
+
}
|
|
103
|
+
public unshift(): void {
|
|
104
|
+
const { delimiters } = this;
|
|
105
|
+
const indexes = this.states.pop()!;
|
|
106
|
+
for (let i = indexes.length; i--;) {
|
|
107
|
+
delimiters[indexes[i]].state = true;
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
public match(source: string, precedence = 0): boolean {
|
|
111
|
+
const { delimiters } = this;
|
|
112
|
+
for (let i = delimiters.length; i--;) {
|
|
113
|
+
const delimiter = delimiters[i];
|
|
114
|
+
if (delimiter.precedence <= precedence || !delimiter.state) continue;
|
|
90
115
|
switch (delimiter.matcher(source)) {
|
|
91
116
|
case true:
|
|
92
117
|
return true;
|
|
@@ -93,11 +93,14 @@ export function creation(cost: number, recursion: number, parser: Parser<unknown
|
|
|
93
93
|
|
|
94
94
|
export function precedence<P extends Parser<unknown>>(precedence: number, parser: P): P;
|
|
95
95
|
export function precedence<T>(precedence: number, parser: Parser<T>): Parser<T> {
|
|
96
|
-
assert(precedence
|
|
96
|
+
assert(precedence >= 0);
|
|
97
97
|
return ({ source, context }) => {
|
|
98
|
-
const p = context
|
|
98
|
+
const { delimiters, precedence: p = 0 } = context;
|
|
99
|
+
const shift = precedence > p;
|
|
99
100
|
context.precedence = precedence;
|
|
101
|
+
shift && delimiters?.shift(precedence);
|
|
100
102
|
const result = parser({ source, context });
|
|
103
|
+
shift && delimiters?.unshift();
|
|
101
104
|
context.precedence = p;
|
|
102
105
|
return result;
|
|
103
106
|
};
|