@mistlog/typetype
Version:
A programming language designed for typescript type generation
95 lines (94 loc) • 3.46 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.SimpleEscapeSequence = exports.EscapeSequence = exports.SChar = exports.SCharSequence = exports.String = exports.Source = exports.SourceCharacter = void 0;
const react_peg_1 = require("react-peg");
const common_1 = require("../common");
function SourceCharacter() {
return (react_peg_1.ReactPeg.createChunk("any", null));
}
exports.SourceCharacter = SourceCharacter;
function Source() {
const action = ({ chars }) => {
return chars.map((each) => each[1]).join("");
};
return (react_peg_1.ReactPeg.createChunk("pattern", { action: action },
react_peg_1.ReactPeg.createChunk("repeat", { type: "*", label: "chars" },
react_peg_1.ReactPeg.createChunk("assert", { type: "without" },
react_peg_1.ReactPeg.createChunk("text", null, "```")),
react_peg_1.ReactPeg.createChunk(SourceCharacter, null))));
}
exports.Source = Source;
/**
* string-literal:
encoding-prefixopt" s-char-sequenceopt"
encoding-prefixoptR raw-string
*/
function String() {
const action = ({ chars }) => {
return chars.join("");
};
return (react_peg_1.ReactPeg.createChunk("pattern", { action: action },
react_peg_1.ReactPeg.createChunk(common_1._, null),
react_peg_1.ReactPeg.createChunk("text", null, "\""),
react_peg_1.ReactPeg.createChunk(SCharSequence, { label: "chars" }),
react_peg_1.ReactPeg.createChunk("text", null, "\""),
react_peg_1.ReactPeg.createChunk(common_1._, null)));
}
exports.String = String;
/**
* s-char-sequence:
s-char
s-char-sequence s-char
*/
function SCharSequence() {
return (react_peg_1.ReactPeg.createChunk("repeat", { type: "*" },
react_peg_1.ReactPeg.createChunk(SChar, null)));
}
exports.SCharSequence = SCharSequence;
/**
* s-char:
any member of the source character set except the double-quote ", backslash \, or new-line character
escape-sequence
universal-character-name
*/
function SChar() {
return (react_peg_1.ReactPeg.createChunk("or", null,
react_peg_1.ReactPeg.createChunk("pattern", { action: ({ char }) => char },
react_peg_1.ReactPeg.createChunk("assert", { type: "without" },
react_peg_1.ReactPeg.createChunk("set", null, "\"\\\\\\n")),
react_peg_1.ReactPeg.createChunk(SourceCharacter, { label: "char" })),
react_peg_1.ReactPeg.createChunk(EscapeSequence, null)));
}
exports.SChar = SChar;
/**
* escape-sequence:
simple-escape-sequence
octal-escape-sequence
hexadecimal-escape-sequence
*/
function EscapeSequence() {
return (react_peg_1.ReactPeg.createChunk(SimpleEscapeSequence, null));
}
exports.EscapeSequence = EscapeSequence;
/**
* simple-escape-sequence: one of
\’ \" \? \\
\a \b \f \n \r \t \v
*/
function SimpleEscapeSequence() {
const escape = [
`\\\\\\\'`,
`\\\\"`,
`\\?`,
`\\\\\\\\`,
`\\\\a`,
`\\\\b`,
`\\\\f`,
`\\\\n`,
`\\\\r`,
`\\\\t`,
`\\\\v`,
].map(each => (react_peg_1.ReactPeg.createChunk("text", { label: "char" }, each)));
return (react_peg_1.ReactPeg.createChunk("or", null, escape));
}
exports.SimpleEscapeSequence = SimpleEscapeSequence;