allow custom latex delimiters in config.json

This commit is contained in:
Aleks Kissinger 2020-09-21 11:00:39 +01:00
parent 24a1834f9b
commit 4df8754aad
2 changed files with 20 additions and 16 deletions

View file

@ -21,6 +21,7 @@ import { walkDOMDepthFirst } from "./dom";
import { checkBlockNode } from "../HtmlUtils"; import { checkBlockNode } from "../HtmlUtils";
import { getPrimaryPermalinkEntity } from "../utils/permalinks/Permalinks"; import { getPrimaryPermalinkEntity } from "../utils/permalinks/Permalinks";
import { PartCreator } from "./parts"; import { PartCreator } from "./parts";
import SdkConfig from "../SdkConfig";
function parseAtRoomMentions(text: string, partCreator: PartCreator) { function parseAtRoomMentions(text: string, partCreator: PartCreator) {
const ATROOM = "@room"; const ATROOM = "@room";
@ -134,9 +135,14 @@ function parseElement(n: HTMLElement, partCreator: PartCreator, lastNode: HTMLEl
case "SPAN": { case "SPAN": {
// math nodes are translated back into delimited latex strings // math nodes are translated back into delimited latex strings
if (n.hasAttribute("data-mx-maths")) { if (n.hasAttribute("data-mx-maths")) {
const delim = (n.nodeName == "SPAN") ? "$$" : "$$$"; const delimLeft = (n.nodeName == "SPAN") ?
(SdkConfig.get()['latex_maths_delims'] || {})['inline_left'] || "$$" :
(SdkConfig.get()['latex_maths_delims'] || {})['display_left'] || "$$$";
const delimRight = (n.nodeName == "SPAN") ?
(SdkConfig.get()['latex_maths_delims'] || {})['inline_right'] || "$$" :
(SdkConfig.get()['latex_maths_delims'] || {})['display_right'] || "$$$";
const tex = n.getAttribute("data-mx-maths"); const tex = n.getAttribute("data-mx-maths");
return partCreator.plain(delim + tex + delim); return partCreator.plain(delimLeft + tex + delimRight);
} else if (!checkDescendInto(n)) { } else if (!checkDescendInto(n)) {
return partCreator.plain(n.textContent); return partCreator.plain(n.textContent);
} }

View file

@ -43,21 +43,19 @@ export function htmlSerializeIfNeeded(model: EditorModel, {forceHTML = false} =
var md = mdSerialize(model); var md = mdSerialize(model);
if (SdkConfig.get()['latex_maths']) { if (SdkConfig.get()['latex_maths']) {
const mathDelimiters = [ // TODO: make customizable const displayPattern = (SdkConfig.get()['latex_maths_delims'] || {})['display_pattern'] ||
{ pattern: "\\$\\$\\$(([^$]|\\\\\\$)*)\\$\\$\\$", display: true }, "\\$\\$\\$(([^$]|\\\\\\$)*)\\$\\$\\$";
{ pattern: "\\$\\$(([^$]|\\\\\\$)*)\\$\\$", display: false } const inlinePattern = (SdkConfig.get()['latex_maths_delims'] || {})['inline_pattern'] ||
]; "\\$\\$(([^$]|\\\\\\$)*)\\$\\$";
mathDelimiters.forEach(function (d) { md = md.replace(RegExp(displayPattern, "gm"), function(m,p1) {
var reg = RegExp(d.pattern, "gm"); const p1e = AllHtmlEntities.encode(p1);
md = md.replace(reg, function(match, p1) { return `<div data-mx-maths="${p1e}"><code>${p1e}</code></div>`;
const p1e = AllHtmlEntities.encode(p1); });
if (d.display == true) {
return `<div data-mx-maths="${p1e}"><code>${p1e}</code></div>`; md = md.replace(RegExp(inlinePattern, "gm"), function(m,p1) {
} else { const p1e = AllHtmlEntities.encode(p1);
return `<span data-mx-maths="${p1e}"><code>${p1e}</code></span>`; return `<span data-mx-maths="${p1e}"><code>${p1e}</code></span>`;
}
});
}); });
} }