64 lines
1.1 KiB
JavaScript
64 lines
1.1 KiB
JavaScript
const hljs = require("highlight.js");
|
|
|
|
const MAP = {
|
|
py: "python",
|
|
js: "javascript",
|
|
json: "javascript",
|
|
rb: "ruby",
|
|
csharp: "cs"
|
|
};
|
|
|
|
function normalize(lang) {
|
|
if (!lang) {
|
|
return null;
|
|
}
|
|
|
|
const lower = lang.toLowerCase();
|
|
return MAP[lower] || lower;
|
|
}
|
|
|
|
/**
|
|
* @param {string} lang
|
|
* @param {string} code
|
|
* @returns {string|{html: boolean, body}}
|
|
*/
|
|
function highlight(lang, code) {
|
|
if (!lang)
|
|
return {
|
|
body: code,
|
|
html: false
|
|
};
|
|
|
|
// Normalize lang
|
|
lang = normalize(lang);
|
|
|
|
try {
|
|
return hljs.highlight(code, {
|
|
language: lang
|
|
}).value;
|
|
} catch (e) {
|
|
console.error(e);
|
|
}
|
|
|
|
return {
|
|
body: code,
|
|
html: false
|
|
};
|
|
}
|
|
|
|
module.exports = {
|
|
book: {
|
|
assets: "./css",
|
|
css: ["website.css"]
|
|
},
|
|
ebook: {
|
|
assets: "./css",
|
|
css: ["ebook.css"]
|
|
},
|
|
blocks: {
|
|
code: function (block) {
|
|
return highlight(block.kwargs.language, block.body);
|
|
}
|
|
}
|
|
};
|