-
Notifications
You must be signed in to change notification settings - Fork 44
/
Copy pathprism-include-languages.js
38 lines (35 loc) · 1.17 KB
/
prism-include-languages.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
import siteConfig from "@generated/docusaurus.config";
export default function prismIncludeLanguages(PrismObject) {
const {
themeConfig: { prism },
} = siteConfig;
const { additionalLanguages } = prism;
const PrismBefore = globalThis.Prism;
globalThis.Prism = PrismObject;
additionalLanguages.forEach((lang) => {
// eslint-disable-next-line global-require, import/no-dynamic-require
require(`prismjs/components/prism-${lang}`);
});
Prism.languages["rust,ignore"] = Prism.languages.rust;
Prism.languages["rust,no_run"] = Prism.languages.rust;
Prism.languages["compile_fail"] = Prism.languages.rust;
const origTokenize = PrismObject.tokenize;
PrismObject.hooks.add("after-tokenize", function (env) {
if (
env.language === "rust" ||
env.language === "rust,ignore" ||
env.language === "rust,no_run" ||
env.language === "compile_fail"
) {
let code = env.code
.split("\n")
.filter((line) => !line.startsWith("# "))
.join("\n");
env.tokens = origTokenize(code, env.grammar);
}
});
delete globalThis.Prism;
if (typeof PrismBefore !== "undefined") {
globalThis.Prism = PrismObject;
}
}