feat(viewer): couverture pretty print tous langages code (aliases hljs, langues hors bundle common, Dockerfile/Makefile)
This commit is contained in:
@@ -88,6 +88,17 @@
|
||||
/>
|
||||
<!-- defer: ne bloque pas le premier paint (le splash inline s'affiche immédiatement) -->
|
||||
<script defer src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.9.0/highlight.min.js"></script>
|
||||
<!-- Langues highlight.js hors bundle "common" (enregistrement auto apres le core) -->
|
||||
<script defer src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.9.0/languages/dockerfile.min.js"></script>
|
||||
<script defer src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.9.0/languages/powershell.min.js"></script>
|
||||
<script defer src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.9.0/languages/dos.min.js"></script>
|
||||
<script defer src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.9.0/languages/cmake.min.js"></script>
|
||||
<script defer src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.9.0/languages/dart.min.js"></script>
|
||||
<script defer src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.9.0/languages/elixir.min.js"></script>
|
||||
<script defer src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.9.0/languages/haskell.min.js"></script>
|
||||
<script defer src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.9.0/languages/nginx.min.js"></script>
|
||||
<script defer src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.9.0/languages/http.min.js"></script>
|
||||
<script defer src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.9.0/languages/plaintext.min.js"></script>
|
||||
<script defer src="https://unpkg.com/[email protected]/dist/umd/lucide.min.js"></script>
|
||||
<script defer src="https://cdn.jsdelivr.net/npm/mermaid@11/dist/mermaid.min.js"></script>
|
||||
<script type="importmap">
|
||||
|
||||
@@ -259,6 +259,28 @@ function safeHighlight(block) {
|
||||
if (block.className && block.className.indexOf('language-mermaid') !== -1) return;
|
||||
if (typeof hljs !== "undefined" && hljs.highlightElement) {
|
||||
try {
|
||||
// Alias pour les extensions que highlight.js (bundle common) ne connaît pas
|
||||
const PP_LANG_ALIAS = {
|
||||
md: "markdown", markdown: "markdown", rst: "plaintext",
|
||||
pl: "perl", lua: "lua", dart: "dart",
|
||||
vue: "html", svelte: "html", astro: "html",
|
||||
graphql: "graphql", prisma: "sql", proto: "c",
|
||||
vb: "basic", vba: "basic", asm: "x86asm",
|
||||
tf: "haskell", gradle: "groovy", groovy: "groovy",
|
||||
properties: "ini", gitignore: "plaintext", hosts: "ini",
|
||||
fish: "bash", ksh: "bash", systemd: "ini", batch: "dos", bat: "dos",
|
||||
shell: "bash", golang: "go", toml: "ini", avsc: "json", jsonc: "json", json5: "json",
|
||||
};
|
||||
const m = /\blanguage-([\w-]+)/.exec(block.className || "");
|
||||
if (m) {
|
||||
const lang = m[1];
|
||||
const alias = PP_LANG_ALIAS[lang];
|
||||
if (alias && hljs.getLanguage && !hljs.getLanguage(lang) && hljs.getLanguage(alias)) {
|
||||
block.className = block.className.replace("language-" + lang, "language-" + alias);
|
||||
} else if (hljs.getLanguage && !hljs.getLanguage(lang) && !hljs.getLanguage(alias || "")) {
|
||||
block.className = block.className.replace("language-" + lang, "language-plaintext");
|
||||
}
|
||||
}
|
||||
hljs.highlightElement(block);
|
||||
} catch (e) {
|
||||
/* CDN not loaded */
|
||||
|
||||
@@ -506,12 +506,10 @@ function fallbackTokenize(text) {
|
||||
return out;
|
||||
}
|
||||
|
||||
// Applique la coloration: hljs si le langage est connu et que des tokens
|
||||
// sortent, sinon fallback regex générique.
|
||||
// Applique la coloration: hljs (avec aliases de languages) si des tokens
|
||||
// sortent, sinon fallback regex generique.
|
||||
function applyPrettyHighlight(codeEl, lang, text) {
|
||||
if (typeof hljs !== "undefined" && lang !== "plaintext") {
|
||||
try { hljs.highlightElement(codeEl); } catch (_) { /* CDN pas charge */ }
|
||||
}
|
||||
safeHighlight(codeEl); // gerne les alias language-xxx inconnus de hljs
|
||||
const tokens = codeEl.querySelectorAll('[class^="hljs-"]').length;
|
||||
if (!tokens && text.trim()) {
|
||||
codeEl.innerHTML = fallbackTokenize(text);
|
||||
|
||||
@@ -43,6 +43,11 @@
|
||||
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.9.0/styles/github-dark.min.css" id="hljs-theme-dark">
|
||||
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.9.0/styles/github.min.css" id="hljs-theme-light" disabled>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.9.0/highlight.min.js"></script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.9.0/languages/dockerfile.min.js"></script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.9.0/languages/powershell.min.js"></script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.9.0/languages/dos.min.js"></script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.9.0/languages/cmake.min.js"></script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.9.0/languages/plaintext.min.js"></script>
|
||||
<script src="https://unpkg.com/[email protected]/dist/umd/lucide.min.js"></script>
|
||||
<script type="importmap">
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user