diff --git a/src/HtmlUtils.tsx b/src/HtmlUtils.tsx
index 344fb3514c..46bc7b441c 100644
--- a/src/HtmlUtils.tsx
+++ b/src/HtmlUtils.tsx
@@ -534,7 +534,6 @@ export function checkBlockNode(node: Node) {
case "H6":
case "PRE":
case "BLOCKQUOTE":
- case "DIV":
case "P":
case "UL":
case "OL":
@@ -547,6 +546,9 @@ export function checkBlockNode(node: Node) {
case "TH":
case "TD":
return true;
+ case "DIV":
+ // don't treat math nodes as block nodes for deserializing
+ return !(node as HTMLElement).hasAttribute("data-mx-maths");
default:
return false;
}
diff --git a/src/editor/deserialize.ts b/src/editor/deserialize.ts
index ec697b193c..edaa330e50 100644
--- a/src/editor/deserialize.ts
+++ b/src/editor/deserialize.ts
@@ -130,6 +130,18 @@ function parseElement(n: HTMLElement, partCreator: PartCreator, lastNode: HTMLEl
}
break;
}
+ case "DIV":
+ case "SPAN": {
+ // math nodes are translated back into delimited latex strings
+ if (n.hasAttribute("data-mx-maths")) {
+ const delim = (n.nodeName == "SPAN") ? "$$" : "$$$";
+ const tex = n.getAttribute("data-mx-maths");
+ return partCreator.plain(delim + tex + delim);
+ } else if (!checkDescendInto(n)) {
+ return partCreator.plain(n.textContent);
+ }
+ break;
+ }
case "OL":
state.listIndex.push((n).start || 1);
/* falls through */