From 3fa280d21878ae391674a21758199df3d2d8c3b5 Mon Sep 17 00:00:00 2001 From: Adam <2363879+adamdotdevin@users.noreply.github.com> Date: Fri, 3 Oct 2025 09:04:28 -0500 Subject: chore: app -> desktop --- packages/desktop/src/context/marked.tsx | 43 +++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 packages/desktop/src/context/marked.tsx (limited to 'packages/desktop/src/context/marked.tsx') diff --git a/packages/desktop/src/context/marked.tsx b/packages/desktop/src/context/marked.tsx new file mode 100644 index 000000000..550a0456a --- /dev/null +++ b/packages/desktop/src/context/marked.tsx @@ -0,0 +1,43 @@ +import { createContext, useContext, type ParentProps } from "solid-js" +import { useShiki } from "@/context" +import { marked } from "marked" +import markedShiki from "marked-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) + } + return highlighter.codeToHtml(code, { + lang: lang || "text", + theme: "opencode", + tabindex: false, + }) + }, + }), + ) +} + +type MarkedContext = ReturnType + +const ctx = createContext() + +export function MarkedProvider(props: ParentProps) { + const highlighter = useShiki() + const value = init(highlighter) + return {props.children} +} + +export function useMarked() { + const value = useContext(ctx) + if (!value) { + throw new Error("useMarked must be used within a MarkedProvider") + } + return value +} -- cgit v1.2.3