Markdown: Let WikiText parsing handle the creation of LaTeX widgets. (#6428)

* Markdown: Let WikiText parsing handle the creation of LaTeX widgets.

When embedding LaTeX snippets in inline HTML nodes, such as TiddlyRemember
macros or HTML tables, the parsing of latex nodes breaks the WikiText by
splitting it into pieces around the latex node.

This commit fixes the issue by converting the Remarkable katex nodes back to
text, using a newline to indicate a block katex snippet. This is then re-parsed
by the WikiText KaTeX plugin.

TESTED:

Created a test wiki with:
```
$ node tiddlywiki.js test --init markdowndemo
$ node tiddlywiki.js test --listen
```

* Verified markdown + KaTeX support still works as expected.
* Verified that embedding LaTeX snippets in inline HTML works (e.g. `<a
href="https://example.com/">$x^2$</a>`).
* Verified the markdown + KaTeX support works as expected with renderWikiText
set to `false`.

* Style: Remove spaces between if and opening parentheses.
This commit is contained in:
RJ Skerry-Ryan 2022-01-30 03:23:00 -08:00 committed by GitHub
parent 7d2994388b
commit 13faeaa0bd
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 34 additions and 23 deletions

View File

@ -1,3 +1,3 @@
title: $:/config/markdown/renderWikiTextPragma
\rules only html image macrocallinline syslink transcludeinline wikilink filteredtranscludeblock macrocallblock transcludeblock
\rules only html image macrocallinline syslink transcludeinline wikilink filteredtranscludeblock macrocallblock transcludeblock latex-parser

View File

@ -36,6 +36,10 @@ var accumulatingTypes = {
"text": true,
"softbreak": true
};
// If rendering WikiText, we treat katex nodes as text.
if(pluginOpts.renderWikiText) {
accumulatingTypes["katex"] = true;
}
var md = new Remarkable(remarkableOpts);
@ -237,6 +241,12 @@ function convertNodes(remarkableTree, isStartOfInline) {
break;
case "katex":
// If rendering WikiText, convert the katex node back to text for parsing by the WikiText LaTeX parser.
if(pluginOpts.renderWikiText) {
// If this is a block, add a newline to trigger the KaTeX plugins block detection.
var displayModeSuffix = currentNode.block ? "\n" : "";
accumulatedText = accumulatedText + "$$" + currentNode.content + displayModeSuffix + "$$";
} else {
out.push({
type: "latex",
attributes: {
@ -244,6 +254,7 @@ function convertNodes(remarkableTree, isStartOfInline) {
displayMode: { type: "text", value: currentNode.block ? "true" : "false" }
}
});
}
break;
default: