// This is a helper for generating invalid MathML markup. // Depends on ./mathml-fragments.js function isValid(tagName, mspaceCount) { switch (tagName) { case "mfrac": case "mroot": case "munder": case "mover": case "msub": case "msup": return mspaceCount == 2; case "munderover": case "msubsup": return mspaceCount == 3; case "mmultiscripts": return mspaceCount % 2 == 1; } } function generateInvalidMarkup() { let container = document.createElement("div"); ["mfrac", "mroot", "munder", "mover", "munderover", "msub", "msup", "msubsup", "mmultiscripts"].forEach(tag => { let math = FragmentHelper.createElement("math"); let element = FragmentHelper.createElement(tag); let reference = FragmentHelper.createElement("mrow"); math.appendChild(element); math.appendChild(reference); let maxCount = tag == "mmultiscripts" ? 10 : 5; let mspaceCount = 0; for (let count = 0; count <= maxCount; count++) { element.dataset.description = `count == ${count}`; if (!isValid(tag, mspaceCount)) { container.appendChild(math.cloneNode(true)); } if (tag == "mmultiscripts" && count == maxCount / 2) { [element, reference].forEach(el => { el.insertAdjacentHTML("beforeend", ``); }); } else { let width = (count + 1) * 10; let height = (count + 1) * (count % 2 ? 15 : 5); let depth = (count + 1) * (count % 2 ? 5 : 15); [element, reference].forEach(el => { el.insertAdjacentHTML("beforeend", ``); }); mspaceCount++; } } }); container.insertAdjacentHTML("beforeend", ` `); return container; }