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

Function transform

packages/markmap-lib/src/plugins/prism/index.browser.ts:10–55  ·  view source on GitHub ↗
(transformHooks: ITransformHooks)

Source from the content-addressed store, hash-verified

8 name,
9 config,
10 transform(transformHooks: ITransformHooks) {
11 let loading: Promise<void>;
12 const preloadScripts =
13 plugin.config?.preloadScripts?.map((item) =>
14 patchJSItem(transformHooks.transformer.urlBuilder, item),
15 ) || [];
16 const autoload = () => {
17 loading ||= loadJS(preloadScripts);
18 return loading;
19 };
20
21 function loadLanguageAndRefresh(
22 lang: string,
23 transformHooks: ITransformHooks,
24 ) {
25 autoload().then(() => {
26 window.Prism.plugins.autoloader.loadLanguages([lang], () => {
27 transformHooks.retransform.call();
28 });
29 });
30 }
31
32 let enableFeature = noop;
33 transformHooks.parser.tap((md) => {
34 md.set({
35 highlight: (str, lang) => {
36 enableFeature();
37 const { Prism } = window;
38 const grammar = Prism?.languages?.[lang];
39 if (!grammar) {
40 loadLanguageAndRefresh(lang, transformHooks);
41 return '';
42 }
43 return Prism.highlight(str, grammar, lang);
44 },
45 });
46 });
47 transformHooks.beforeParse.tap((_, context) => {
48 enableFeature = () => {
49 context.features[name] = true;
50 };
51 });
52 return {
53 styles: plugin.config?.styles,
54 };
55 },
56});
57
58export default plugin;

Callers

nothing calls this directly

Calls 3

patchJSItemFunction · 0.90
loadLanguageAndRefreshFunction · 0.85
tapMethod · 0.80

Tested by

no test coverage detected