UNPKG

@codedoc/core

Version:

Create beautiful modern documentation websites.

138 lines 7.74 kB
"use strict"; var __makeTemplateObject = (this && this.__makeTemplateObject) || function (cooked, raw) { if (Object.defineProperty) { Object.defineProperty(cooked, "raw", { value: raw }); } else { cooked.raw = raw; } return cooked; }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.Code = void 0; var chalk_1 = __importDefault(require("chalk")); var prismjs_1 = require("prismjs"); var loadLanguages = /*#__PURE__*/ require('prismjs/components/'); var style_1 = require("./style"); var parse_1 = require("./parse"); var misc_1 = require("../misc"); var underline_1 = require("./underline"); var term_output_1 = require("./term-output"); function Code(options, renderer, content) { var _a; renderer = renderer.plug(this.theme.styled(style_1.CodeStyle)); var classes = this.theme.classes(style_1.CodeStyle); var extopts = { wmbar: undefined, filename: undefined }; var lang = undefined; var safeHighlight = false; var term = undefined; var extras; if (options.lang) { _a = options.lang.split('|').map(function (_) { return _.trim(); }), lang = _a[0], extras = _a.slice(1); if (lang === 'bash') term = '$'; extras.forEach(function (ext) { if (ext === '--wmbar') extopts.wmbar = true; else if (ext === '--no-wmbar') extopts.wmbar = false; else if (ext === '--safe-highlight') safeHighlight = true; else if (ext.startsWith('--term')) { term = ext.split(' ').slice(1).join(' ') || '$'; } else if (ext === '--no-term') { term = undefined; } else { extopts.filename = ext; extopts.wmbar = true; } }); } if (lang) { if (!(lang in prismjs_1.languages)) { try { loadLanguages([lang]); } catch (_) { } finally { if (!(lang in prismjs_1.languages)) { if (safeHighlight) lang = undefined; else throw new Error("" + chalk_1.default(templateObject_1 || (templateObject_1 = __makeTemplateObject(["\n{redBright #}"], ["\\n{redBright #}"]))) + chalk_1.default(templateObject_2 || (templateObject_2 = __makeTemplateObject(["\n{redBright # Unrecognized Language::} ", ""], ["\\n{redBright # Unrecognized Language::} ", ""])), lang) + chalk_1.default(templateObject_3 || (templateObject_3 = __makeTemplateObject(["\n{redBright #} Check https://prismjs.com/#supported-languages for a list of supported languages."], ["\\n{redBright #} Check https://prismjs.com/#supported-languages for a list of supported languages."]))) + chalk_1.default(templateObject_4 || (templateObject_4 = __makeTemplateObject(["\n{redBright #}"], ["\\n{redBright #}"]))) + chalk_1.default(templateObject_5 || (templateObject_5 = __makeTemplateObject(["\n{redBright #} You can also add --safe-highlight flag to snippets with unsupported langauges."], ["\\n{redBright #} You can also add --safe-highlight flag to snippets with unsupported langauges."]))) + chalk_1.default(templateObject_6 || (templateObject_6 = __makeTemplateObject(["\n{redBright #} Check https://codedoc.cc/docs/code/overview#unsupported-languages for details."], ["\\n{redBright #} Check https://codedoc.cc/docs/code/overview#unsupported-languages for details."]))) + chalk_1.default(templateObject_7 || (templateObject_7 = __makeTemplateObject(["\n{redBright #}"], ["\\n{redBright #}"])))); } } } } var code$ = renderer.create("code", { class: lang + " -codedoc-code-snippet", tabindex: "0" }, renderer.create("span", { class: classes.wmbar }, renderer.create("span", null), renderer.create("span", null), renderer.create("span", null), renderer.create("span", null, extopts.filename || ''))); var _b = parse_1.parse(content[0], !!term), code = _b[0], lines = _b[1], highlights = _b[2], outputs = _b[3]; var highlines = lang ? prismjs_1.highlight(code, prismjs_1.languages[lang], lang).split('\n') : code.split('\n'); var waving = 'none'; lines.forEach(function (line, index) { var highline = highlines[index]; var counter = index + 1; var counter$; if (counter === 1 || counter === lines.length || counter % 5 === 0) counter$ = renderer.create("span", { class: classes.lineCounter + " prim -codedoc-line-counter" }, counter); else counter$ = renderer.create("span", { class: classes.lineCounter + " -codedoc-line-counter" }, counter); renderer.render(renderer.create("span", { class: "-codedoc-line-link" }, renderer.create(misc_1.Icon, null, "link"))).on(counter$); var highlighted = highlights[index]; var line$ = renderer.create("div", { class: classes.line + " " + highlighted + " -codedoc-code-line", "data-content": line, _innerHTML: highline }); line$.childNodes.forEach(function (child) { var _a; if (child instanceof HTMLElement && child.classList.contains('comment')) { var _waving = underline_1.underlineMarkerType(child.textContent || ''); if (_waving === 'error' || _waving === 'warning') { if (_waving === waving) waving = 'none'; else waving = _waving; child.hidden = true; } return; } if (waving !== 'none') { var target = child; if (!(target instanceof HTMLElement)) { target = renderer.create("span", null, child.textContent); child.replaceWith(target); } target.classList.add(waving); renderer.render(renderer.create("span", { class: "wave" }, (_a = target.textContent) === null || _a === void 0 ? void 0 : _a.replace(/./g, '~'))).on(target); } }); if (line$.firstChild) renderer.render(counter$).before(line$.firstChild); else renderer.render(counter$).on(line$); if (!!term) { renderer.render(renderer.create("span", { class: classes.termPrefix + " -codedoc-code-term-prefix" }, term)).after(counter$); } renderer.render(line$).on(code$); renderer.render(renderer.create("br", null)).on(code$); if (!!term && outputs[index]) { renderer.render(renderer.create("span", { class: classes.termOutput + " -codedoc-code-term-output", _innerHTML: term_output_1.terminalOutput.apply(void 0, outputs[index]) })).on(code$); } }); var wmbar = lines.length > 1 && (this.theme.theme.code.wmbar || extopts.wmbar) && extopts.wmbar !== false; return renderer.create("pre", { class: wmbar ? 'with-bar' : '' }, code$); } exports.Code = Code; var style_2 = require("./style"); Object.defineProperty(exports, "CodeStyle", { enumerable: true, get: function () { return style_2.CodeStyle; } }); var templateObject_1, templateObject_2, templateObject_3, templateObject_4, templateObject_5, templateObject_6, templateObject_7; //# sourceMappingURL=index.js.map