fatsify核心功能示例测试!!!
This commit is contained in:
77
node_modules/ret/dist/reconstruct.js
generated
vendored
Normal file
77
node_modules/ret/dist/reconstruct.js
generated
vendored
Normal file
@@ -0,0 +1,77 @@
|
||||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.reconstruct = void 0;
|
||||
const types_1 = require("./types");
|
||||
const write_set_tokens_1 = require("./write-set-tokens");
|
||||
const reduceStack = (stack) => stack.map(exports.reconstruct).join('');
|
||||
const createAlternate = (token) => {
|
||||
if ('options' in token) {
|
||||
return token.options.map(reduceStack).join('|');
|
||||
}
|
||||
else if ('stack' in token) {
|
||||
return reduceStack(token.stack);
|
||||
}
|
||||
else {
|
||||
throw new Error(`options or stack must be Root or Group token`);
|
||||
}
|
||||
};
|
||||
exports.reconstruct = (token) => {
|
||||
switch (token.type) {
|
||||
case types_1.types.ROOT:
|
||||
return createAlternate(token);
|
||||
case types_1.types.CHAR: {
|
||||
const c = String.fromCharCode(token.value);
|
||||
// Note that the escaping for characters inside classes is handled
|
||||
// in the write-set-tokens module so '-' and ']' are not escaped here
|
||||
return (/[[\\{}$^.|?*+()]/.test(c) ? '\\' : '') + c;
|
||||
}
|
||||
case types_1.types.POSITION:
|
||||
if (token.value === '^' || token.value === '$') {
|
||||
return token.value;
|
||||
}
|
||||
else {
|
||||
return `\\${token.value}`;
|
||||
}
|
||||
case types_1.types.REFERENCE:
|
||||
return `\\${token.value}`;
|
||||
case types_1.types.SET:
|
||||
return write_set_tokens_1.writeSetTokens(token);
|
||||
case types_1.types.GROUP: {
|
||||
// Check token.remember
|
||||
const prefix = token.name ? `?<${token.name}>` :
|
||||
token.remember ? '' :
|
||||
token.followedBy ? '?=' :
|
||||
token.notFollowedBy ? '?!' :
|
||||
'?:';
|
||||
return `(${prefix}${createAlternate(token)})`;
|
||||
}
|
||||
case types_1.types.REPETITION: {
|
||||
const { min, max } = token;
|
||||
let endWith;
|
||||
if (min === 0 && max === 1) {
|
||||
endWith = '?';
|
||||
}
|
||||
else if (min === 1 && max === Infinity) {
|
||||
endWith = '+';
|
||||
}
|
||||
else if (min === 0 && max === Infinity) {
|
||||
endWith = '*';
|
||||
}
|
||||
else if (max === Infinity) {
|
||||
endWith = `{${min},}`;
|
||||
}
|
||||
else if (min === max) {
|
||||
endWith = `{${min}}`;
|
||||
}
|
||||
else {
|
||||
endWith = `{${min},${max}}`;
|
||||
}
|
||||
return `${exports.reconstruct(token.value)}${endWith}`;
|
||||
}
|
||||
case types_1.types.RANGE:
|
||||
return `${write_set_tokens_1.setChar(token.from)}-${write_set_tokens_1.setChar(token.to)}`;
|
||||
default:
|
||||
throw new Error(`Invalid token type ${token}`);
|
||||
}
|
||||
};
|
||||
//# sourceMappingURL=reconstruct.js.map
|
||||
Reference in New Issue
Block a user