mirror of
https://github.com/element-hq/element-web.git
synced 2024-12-14 16:01:32 +03:00
allow custom latex delimiters in config.json
This commit is contained in:
parent
24a1834f9b
commit
4df8754aad
2 changed files with 20 additions and 16 deletions
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
|
@ -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");
|
|
||||||
md = md.replace(reg, function(match, p1) {
|
|
||||||
const p1e = AllHtmlEntities.encode(p1);
|
const p1e = AllHtmlEntities.encode(p1);
|
||||||
if (d.display == true) {
|
|
||||||
return `<div data-mx-maths="${p1e}"><code>${p1e}</code></div>`;
|
return `<div data-mx-maths="${p1e}"><code>${p1e}</code></div>`;
|
||||||
} else {
|
|
||||||
return `<span data-mx-maths="${p1e}"><code>${p1e}</code></span>`;
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
|
|
||||||
|
md = md.replace(RegExp(inlinePattern, "gm"), function(m,p1) {
|
||||||
|
const p1e = AllHtmlEntities.encode(p1);
|
||||||
|
return `<span data-mx-maths="${p1e}"><code>${p1e}</code></span>`;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue