UNPKG

highlight-ts

Version:

Highlight.JS in TypeScript (and ES6).

139 lines 5.79 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var tslib_1 = require("tslib"); function reStr(re) { return (re && re.source) || re; } var noneRe = { exec: function ( /*s*/) { return null; } }; function langRe(language, value, global) { return new RegExp(reStr(value), 'm' + (language.case_insensitive ? 'i' : '') + (global ? 'g' : '')); } function compileLanguage(language) { var cached_modes = []; function getCompiled(sub) { for (var _i = 0, cached_modes_1 = cached_modes; _i < cached_modes_1.length; _i++) { var _a = cached_modes_1[_i], mode = _a[0], compiled_1 = _a[1]; if (sub === mode) { return compiled_1; } } } var cached_variants = []; function getVariants(mode) { if (!mode.variants || !mode.variants.length) { return undefined; } for (var _i = 0, cached_variants_1 = cached_variants; _i < cached_variants_1.length; _i++) { var _a = cached_variants_1[_i], mode_ = _a[0], variants_1 = _a[1]; if (mode === mode_) { return variants_1; } } var variants = mode.variants.map(function (variant) { return (tslib_1.__assign({}, mode, { variants: undefined }, variant)); }); cached_variants.push([mode, variants]); return variants; } ; function compileMode(mode, parent, parent_terminator_end) { var already_compiled = getCompiled(mode); if (already_compiled) { return already_compiled; } var compiled = { lexemesRe: langRe(language, mode.lexemes || /\w+/, true), relevance: mode.relevance == null ? 1 : mode.relevance, contains: [], terminators: noneRe, subLanguage: mode.subLanguage == null ? undefined : typeof mode.subLanguage == 'string' ? [mode.subLanguage] : mode.subLanguage }; cached_modes.push([mode, compiled]); if (mode.className) { compiled.className = mode.className; } if (mode.illegal) { compiled.illegalRe = langRe(language, mode.illegal); } for (var _i = 0, _a = ['endsParent', 'endsWithParent', 'skip', 'excludeBegin', 'excludeEnd', 'returnBegin', 'returnEnd']; _i < _a.length; _i++) { var key = _a[_i]; if (mode[key]) { compiled[key] = true; } } // compile parenthes var compiled_terminator_end; if (parent) { var begin = mode.beginKeywords ? ("\\b(" + mode.beginKeywords.split(/\s+/).join('|') + ")\\b") : (mode.begin || /\B|\b/); mode.begin = begin; compiled.beginRe = langRe(language, begin); var end = !mode.end && !mode.endsWithParent ? /\B|\b/ : mode.end; if (end) { mode.end = end; compiled.endRe = langRe(language, end); } compiled_terminator_end = reStr(end) || ''; if (mode.endsWithParent && parent_terminator_end) { compiled_terminator_end += (end ? '|' : '') + parent_terminator_end; } } // compile keywords var keywords = mode.keywords || mode.beginKeywords; if (keywords) { var compiled_keywords_1 = {}; var flatten = function (className, str) { if (language.case_insensitive) { str = str.toLowerCase(); } var kws = str.split(/\s+/); for (var _i = 0, kws_1 = kws; _i < kws_1.length; _i++) { var kw = kws_1[_i]; var _a = kw.split(/\|/), key = _a[0], rel = _a[1]; compiled_keywords_1[key] = [className, rel ? Number(rel) : 1]; } }; if (typeof keywords == 'string') { // string flatten('keyword', keywords); } else { for (var className in keywords) { flatten(className, keywords[className]); } } compiled.keywords = compiled_keywords_1; } // compile contains var contains = []; if (mode.contains && mode.contains.length) { // expand mode for (var _b = 0, _c = mode.contains; _b < _c.length; _b++) { var child = _c[_b]; var sub = child === 'self' ? mode : child; var variants = getVariants(sub) || (sub.endsWithParent && [tslib_1.__assign({}, sub)]) || [sub]; for (var _d = 0, variants_2 = variants; _d < variants_2.length; _d++) { var variant = variants_2[_d]; contains.push(variant); } } compiled.contains = contains.map(function (child) { return compileMode(child, compiled, compiled_terminator_end); }); } if (mode.starts) { compiled.starts = compileMode(mode.starts, parent, parent_terminator_end); } var terminators = contains.map(function (child) { return child.beginKeywords ? "\\.?(" + child.begin + ")\\.?" : child.begin; }).concat([ compiled_terminator_end, mode.illegal ]).map(reStr).filter(Boolean); if (terminators.length) compiled.terminators = langRe(language, terminators.join('|'), true); return compiled; } var compiled = compileMode(language); if (language.case_insensitive) compiled.case_insensitive = true; return compiled; } exports.compileLanguage = compileLanguage; //# sourceMappingURL=compile.js.map