MCPcopy
hub / github.com/markmap/markmap / transform

Function transform

packages/markmap-lib/src/plugins/katex/index.browser.ts:13–73  ·  view source on GitHub ↗
(transformHooks: ITransformHooks)

Source from the content-addressed store, hash-verified

11 name,
12 config,
13 transform(transformHooks: ITransformHooks) {
14 let loading: Promise<void>;
15 const preloadScripts =
16 plugin.config?.preloadScripts?.map((item) =>
17 patchJSItem(transformHooks.transformer.urlBuilder, item),
18 ) || [];
19 const autoload = () => {
20 loading ||= loadJS(preloadScripts);
21 return loading;
22 };
23
24 const renderKatex = (source: string, displayMode: boolean) => {
25 const { katex } = window;
26 if (katex) {
27 return katex.renderToString(source, {
28 displayMode,
29 throwOnError: false,
30 });
31 }
32 autoload().then(() => {
33 transformHooks.retransform.call();
34 });
35 return source;
36 };
37 let enableFeature = noop;
38 transformHooks.parser.tap((md) => {
39 md.use(katexPlugin);
40 ['math_block', 'math_inline'].forEach((key) => {
41 const fn: MarkdownIt.Renderer.RenderRule = (tokens, idx) => {
42 enableFeature();
43 const result = renderKatex(tokens[idx].content, !!tokens[idx].block);
44 return result;
45 };
46 md.renderer.rules[key] = fn;
47 });
48 });
49 transformHooks.beforeParse.tap((_, context) => {
50 enableFeature = () => {
51 context.features[name] = true;
52 };
53 });
54 transformHooks.afterParse.tap((_, context) => {
55 const markmap = context.frontmatter?.markmap;
56 if (markmap) {
57 ['extraJs', 'extraCss'].forEach((key) => {
58 const value = markmap[key];
59 if (value) {
60 markmap[key] = addDefaultVersions(
61 value,
62 name,
63 plugin.config?.versions?.katex || '',
64 );
65 }
66 });
67 }
68 });
69 return {
70 styles: plugin.config?.styles,

Callers

nothing calls this directly

Calls 3

patchJSItemFunction · 0.90
addDefaultVersionsFunction · 0.90
tapMethod · 0.80

Tested by

no test coverage detected