2025-05-12 05:38:44 +09:00

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);
}
}
};