@codedoc/core
Version:
Create beautiful modern documentation websites.
138 lines • 7.74 kB
JavaScript
;
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