diff --git a/packages/app/src/components/code.tsx b/packages/app/src/components/code.tsx index f76bf5e2..e6d5ba80 100644 --- a/packages/app/src/components/code.tsx +++ b/packages/app/src/components/code.tsx @@ -12,7 +12,11 @@ export function Code(props: Props) { const ctx = useLocal() const highlighter = useShiki() const [local, others] = splitProps(props, ["class", "classList", "code", "path"]) - const lang = createMemo(() => getFileExtension(local.path)) + const lang = createMemo(() => { + const ext = getFileExtension(local.path) + if (ext in bundledLanguages) return ext + return "text" + }) let container: HTMLDivElement | undefined let isProgrammaticSelection = false diff --git a/packages/app/src/context/marked.tsx b/packages/app/src/context/marked.tsx index 33fea8db..550a0456 100644 --- a/packages/app/src/context/marked.tsx +++ b/packages/app/src/context/marked.tsx @@ -2,12 +2,15 @@ import { createContext, useContext, type ParentProps } from "solid-js" import { useShiki } from "@/context" import { marked } from "marked" import markedShiki from "marked-shiki" -import type { BundledLanguage } from "shiki" +import { bundledLanguages, type BundledLanguage } from "shiki" function init(highlighter: ReturnType) { return marked.use( markedShiki({ async highlight(code, lang) { + if (!(lang in bundledLanguages)) { + lang = "text" + } if (!highlighter.getLoadedLanguages().includes(lang)) { await highlighter.loadLanguage(lang as BundledLanguage) }