Path: blob/main/extensions/markdown-math/notebook/katex.ts
4772 views
/*---------------------------------------------------------------------------------------------1* Copyright (c) Microsoft Corporation. All rights reserved.2* Licensed under the MIT License. See License.txt in the project root for license information.3*--------------------------------------------------------------------------------------------*/4import type * as markdownIt from 'markdown-it';5import type { RendererContext } from 'vscode-notebook-renderer';67const styleHref = import.meta.url.replace(/katex.js$/, 'katex.min.css');89export async function activate(ctx: RendererContext<void>) {10const markdownItRenderer = (await ctx.getRenderer('vscode.markdown-it-renderer')) as undefined | any;11if (!markdownItRenderer) {12throw new Error(`Could not load 'vscode.markdown-it-renderer'`);13}1415// Add katex styles to be copied to shadow dom16const link = document.createElement('link');17link.rel = 'stylesheet';18link.classList.add('markdown-style');19link.href = styleHref;2021// Add same katex style to root document.22// This is needed for the font to be loaded correctly inside the shadow dom.23//24// Seems like https://bugs.chromium.org/p/chromium/issues/detail?id=33687625const linkHead = document.createElement('link');26linkHead.rel = 'stylesheet';27linkHead.href = styleHref;28document.head.appendChild(linkHead);2930const style = document.createElement('style');31style.textContent = `32.katex-error {33color: var(--vscode-editorError-foreground);34}35.katex-block {36counter-reset: katexEqnNo mmlEqnNo;37}38`;3940// Put Everything into a template41const styleTemplate = document.createElement('template');42styleTemplate.classList.add('markdown-style');43styleTemplate.content.appendChild(style);44styleTemplate.content.appendChild(link);45document.head.appendChild(styleTemplate);4647const katex = require('@vscode/markdown-it-katex').default;48const macros = {};49markdownItRenderer.extendMarkdownIt((md: markdownIt.MarkdownIt) => {50return md.use(katex, {51globalGroup: true,52enableBareBlocks: true,53enableFencedBlocks: true,54macros,55});56});57}585960