fix: code will trigger PrismJS such that JSX is correctly highlighted (#20)

PrismJS relies on the 'after-tokenize' hook in order to clean up
tokenization inside of plain text. Otherwise PrismJS will mark
`<p>in</p>` as the JavaScript keyword `in`.

Fixes #17

Co-authored-by: Ross Esmond <r.esmond@protonmail.com>
This commit is contained in:
Ross Esmond
2022-06-14 09:18:34 -05:00
committed by GitHub
parent 33cacdd7e4
commit b32323184b

View File

@@ -95,7 +95,15 @@ export class Code extends Text {
private getTokens(): (PrismJS.Token | string)[] {
const language = this.language();
if (language in PrismJS.languages) {
return PrismJS.tokenize(this.text(), PrismJS.languages[language]);
const env = {
code: this.text(),
grammar: PrismJS.languages[language],
language: language,
tokens: PrismJS.tokenize(this.text(), PrismJS.languages[language]),
};
// the after-tokenize hook will update env tokens for the jsx language
PrismJS.hooks.run('after-tokenize', env);
return env.tokens;
} else {
console.warn(
`Missing language: ${language}.`,