From 2cc7b48b2f60651b469b37dd47786050f0c6b913 Mon Sep 17 00:00:00 2001 From: Kai Moritz Date: Sat, 4 Jul 2026 18:53:24 +0000 Subject: [PATCH] =?utf8?q?fix:=20XML-Bl=C3=B6cke=20mit=20Template-Syntax?= =?utf8?q?=20werden=20korrekt=20als=20xml=20highlighted?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit 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 --- src/components/ProjectPage.astro | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/components/ProjectPage.astro b/src/components/ProjectPage.astro index 0d06039e..74533f7e 100644 --- a/src/components/ProjectPage.astro +++ b/src/components/ProjectPage.astro @@ -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 { 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); } ); -- 2.39.5