UNPKG

@ng-doc/builder

Version:

<!-- PROJECT LOGO --> <br /> <div align="center"> <a href="https://github.com/ng-doc/ng-doc"> <img src="https://ng-doc.com/assets/images/ng-doc.svg?raw=true" alt="Logo" height="150px"> </a>

64 lines 3.21 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.parseCodeBlockParams = parseCodeBlockParams; const tslib_1 = require("tslib"); const P = tslib_1.__importStar(require("parsimmon")); const helpers_1 = require("./helpers"); /** * Code block options parser * @param options - Options string to parse */ function parseCodeBlockParams(options) { const parser = P.createLanguage({ language: () => P.regexp(/[a-zA-Z-]+/) .skip(P.optWhitespace) .map((language) => ({ language })), // File Parsers fileLineNumber: () => P.string('L').then(P.digits).map(Number), fileLineRange: (p) => P.seqMap(P.string('#') .then(p['fileLineNumber']) .map((num) => num - 1), P.string('-').then(p['fileLineNumber'].fallback(undefined)), (fileLineStart, fileLineEnd) => ({ fileLineStart, fileLineEnd })), fileLineStart: (p) => P.string('#') .then(p['fileLineNumber']) .map((num) => num - 1) .map((fileLineStart) => ({ fileLineStart, fileLineEnd: fileLineStart + 1 })), lineParams: (p) => p['fileLineRange'].or(p['fileLineStart']).fallback({}), highlightedLinesRange: () => P.seqMap(helpers_1.number.skip(P.string('-')), helpers_1.number, (start, end) => [...Array(end + 1).keys()].slice(start - end - 1)), // Main Parsers lineNumbers: () => P.string('lineNumbers').map(() => ({ lineNumbers: true })), filePath: () => (0, helpers_1.param)('file'), name: () => (0, helpers_1.param)('name'), group: () => (0, helpers_1.param)('group'), fileName: () => (0, helpers_1.param)('fileName', 'name'), icon: () => (0, helpers_1.param)('icon'), active: () => P.string('active').map(() => ({ active: true })), file: (p) => P.seq(p['filePath'], p['lineParams'].map(({ fileLineStart, fileLineEnd }) => ({ fileLineStart, fileLineEnd }))).map(([file, lineParams]) => ({ ...file, ...lineParams })), highlightedLines: (p) => p['highlightedLinesRange'] .or(helpers_1.number) .sepBy(P.string(',').then(P.optWhitespace)) .wrap(P.string('{'), P.string('}')) .map((a) => Array.from(new Set(a.flat()))) .map((highlightedLines) => ({ highlightedLines })), // Combined Parsers paramsParser: (p) => p['lineNumbers'] .or(p['fileName']) .or(p['file']) .or(p['name']) .or(p['group']) .or(p['active']) .or(p['icon']) .or(p['highlightedLines']) .sepBy(P.whitespace), languageWithParamsParser: (p) => P.seq(p['language'], p['paramsParser']).map((v) => v.flat()), }); let result = parser['paramsParser'].parse(options); if (result.status) { return result.value.reduce((acc, cur) => ({ ...acc, ...cur }), {}); } result = parser['languageWithParamsParser'].parse(options); if (result.status) { return result.value.reduce((acc, cur) => ({ ...acc, ...cur }), {}); } throw new Error(`Unable to parse code block options: "${options}"`); } //# sourceMappingURL=parse-code-block-params.js.map