]> juplo.de Git - website/commitdiff
fix: XML-Blöcke mit Template-Syntax werden korrekt als xml highlighted
authorKai Moritz <kai.milan.moritz@googlemail.com>
Sat, 4 Jul 2026 18:53:24 +0000 (18:53 +0000)
committerKai Moritz <kai.milan.moritz@googlemail.com>
Sat, 4 Jul 2026 18:53:24 +0000 (18:53 +0000)
hljs erkennt APT-Blöcke mit \${...}-Platzhaltern fälschlich als 'dust'
(Dust.js-Templates), das nicht in Shikis bundledLanguages ist, weshalb
der Block auf 'text' zurückfiel.

Neues Fallback-Kriterium: Code, der mit '<' beginnt, wird als 'xml'
behandelt, wenn hljs entweder keine in Shiki verfügbare Sprache findet
oder unter dem Relevanz-Schwellenwert liegt.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
src/components/ProjectPage.astro

index 0d06039ece86ab9067d49f4ad4cb867a3556cf7f..74533f7e06e1897ee7ca46c80ee099daf3809dab 100644 (file)
@@ -1,6 +1,6 @@
 ---
 import { getEntry } from 'astro:content';
-import { codeToHtml } from 'shiki';
+import { codeToHtml, bundledLanguages } from 'shiki';
 import hljs from 'highlight.js';
 import BaseLayout from '../layouts/BaseLayout.astro';
 import Breadcrumb from '../components/Breadcrumb.astro';
@@ -66,9 +66,12 @@ async function highlightBody(html: string): Promise<string> {
     async (_, rawCode) => {
       const code = decodeEntities(rawCode).trimEnd();
       const detected = hljs.highlightAuto(code);
-      const lang = (detected.language && detected.relevance >= MIN_RELEVANCE)
-        ? detected.language
-        : 'text';
+      let lang = 'text';
+      if (detected.language && detected.relevance >= MIN_RELEVANCE && detected.language in bundledLanguages) {
+        lang = detected.language;
+      } else if (code.trimStart().startsWith('<')) {
+        lang = 'xml';
+      }
       return toShiki(code, lang);
     }
   );