diff options
| author | Adam <[email protected]> | 2025-10-30 13:49:29 -0500 |
|---|---|---|
| committer | Adam <[email protected]> | 2025-10-30 13:49:29 -0500 |
| commit | dc6e54503cb400ea2533740c9a92d09c8a50d077 (patch) | |
| tree | 7abad7c0275fe646395a2f4f44d90e5f4a48dbe0 /packages/ui/src/context/marked.tsx | |
| parent | 2a0b67d84f048207d20d952cafa10c430451dc70 (diff) | |
| download | opencode-dc6e54503cb400ea2533740c9a92d09c8a50d077.tar.gz opencode-dc6e54503cb400ea2533740c9a92d09c8a50d077.zip | |
wip: desktop work
Diffstat (limited to 'packages/ui/src/context/marked.tsx')
| -rw-r--r-- | packages/ui/src/context/marked.tsx | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/packages/ui/src/context/marked.tsx b/packages/ui/src/context/marked.tsx new file mode 100644 index 000000000..18ce4280a --- /dev/null +++ b/packages/ui/src/context/marked.tsx @@ -0,0 +1,30 @@ +import { marked } from "marked" +import markedShiki from "marked-shiki" +import { bundledLanguages, type BundledLanguage } from "shiki" + +import { createSimpleContext } from "./helper" +import { useShiki } from "./shiki" + +export const { use: useMarked, provider: MarkedProvider } = createSimpleContext({ + name: "Marked", + init: () => { + const highlighter = useShiki() + 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, + }) + }, + }), + ) + }, +}) |
