100 lines
2.0 KiB
JavaScript
100 lines
2.0 KiB
JavaScript
'use strict';
|
|
// Highlight.JS: https://highlightjs.org/
|
|
|
|
async function initializeHighlightJS() {
|
|
const languageRE = /\blanguage-([a-zA-Z0-9_\-]+)\b/gi;
|
|
const noLanguageRE = /\bno-language\b/gi;
|
|
const languages = [
|
|
"apache",
|
|
"asciidoc",
|
|
"autohotkey",
|
|
"bash",
|
|
"basic",
|
|
"c",
|
|
"cmake",
|
|
"cpp",
|
|
"csharp",
|
|
"css",
|
|
"d",
|
|
"diff",
|
|
"gcode",
|
|
"glsl",
|
|
"go",
|
|
"gradle",
|
|
"graphql",
|
|
"http",
|
|
"ini",
|
|
"java",
|
|
"javascript",
|
|
"json",
|
|
"kotlin",
|
|
"latex",
|
|
"less",
|
|
"llvm",
|
|
"lua",
|
|
"makefile",
|
|
"markdown",
|
|
"nginx",
|
|
"objectivec",
|
|
"oxygene",
|
|
"perl",
|
|
"php",
|
|
"php-template",
|
|
"plaintext",
|
|
"protobuf",
|
|
"python",
|
|
"python-repl",
|
|
"r",
|
|
"ruby",
|
|
"rust",
|
|
"scss",
|
|
"shell",
|
|
"sql",
|
|
"swift",
|
|
"typescript",
|
|
"vbnet",
|
|
"wasm",
|
|
"xml",
|
|
"yaml",
|
|
];
|
|
|
|
console.log("highlight.JS: Loading...");
|
|
let highlightJS = await import("./highlightjs/highlight.mjs");
|
|
window.highlightJS = highlightJS.default;
|
|
|
|
console.log("highlight.JS: Configuring...");
|
|
window.highlightJS.configure({
|
|
"noHighlightRe": noLanguageRE,
|
|
"languageDetectRe": languageRE,
|
|
"cssSelector": "code.block[class*=\"language\"]",
|
|
"throwUnescapedHTML": true,
|
|
});
|
|
|
|
// Import all languages.
|
|
let langs = [];
|
|
for (let lang of languages) {
|
|
console.log(`highlight.JS: Importing language definition for '${lang}'...`);
|
|
langs.push(import(`./highlightjs/languages/${lang}.min.js`).then((mod) => {
|
|
window.highlightJS.registerLanguage(lang, mod.default);
|
|
console.log(`highlight.JS: Imported language definition for '${lang}'.`);
|
|
}));
|
|
}
|
|
await Promise.allSettled(langs)
|
|
|
|
// Highlight everything.
|
|
function highlightAllCode() {
|
|
console.log(`highlight.JS: Applying highlighting all valid code blocks...`);
|
|
window.highlightJS.highlightAll();
|
|
};
|
|
if (document.readyState === "complete"
|
|
|| document.readyState === "loaded"
|
|
|| document.readyState === "interactive") {
|
|
highlightAllCode();
|
|
} else {
|
|
document.addEventListener('DOMContentLoaded', () => {
|
|
highlightAllCode();
|
|
});
|
|
}
|
|
}
|
|
initializeHighlightJS();
|