feat(math): implement m:sPre pre-sub-superscript converter - #2747

Merged
caio-pizzol merged 5 commits into
superdoc:mainfrom
Abdeltoto:feat/math-pre-sub-superscript-converter
Apr 12, 2026
Merged

feat(math): implement m:sPre pre-sub-superscript converter#2747
caio-pizzol merged 5 commits into
superdoc:mainfrom
Abdeltoto:feat/math-pre-sub-superscript-converter

Conversation

@Abdeltoto

Copy link
Copy Markdown

Closes#2609

Summary

  • Implements the \m:sPre\ OMML-to-MathML converter (prescripts on the left of a base)
  • Maps \m:sPre\ to MathML <mmultiscripts>\ with <mprescripts/>\ separator
  • Registers the converter in \MATH_OBJECT_REGISTRY\
  • Adds 2 unit tests covering standard usage and missing sub/sup

Spec reference

ECMA-376 Section 22.1.2.99

Test plan

  • \οΏ½itest run\ passes for omml-to-mathml.test.ts
  • Linter and formatter pass (lefthook pre-commit)

Made with Cursor

- Correct JSDoc OMML child order to spec (sPrePr, sub, sup, e) per ECMA-376 Β§22.1.2.99
- Move m:sPre into the implemented section of the converter registry
- Add sibling-parity unit tests: properties-element filter, multi-run mrow wrap
- Assert children.length === 4 in missing-case test to lock in arity invariant
- Relocate describe block next to m:sSubSup; align test name with sibling convention
- Reorder happy-path fixture to spec-correct child order
- Add behavior tests + math-spre-tests.docx fixture covering 9 m:sPre shapes
(basic, isotope, multi-run, only-sub, only-sup, no sPrePr, fraction-in-sub,
nested sPre, display-mode oMathPara)
- Add m:sPre round-trip test in math importer for child-order preservation

@caio-pizzolcaio-pizzol left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@Abdeltoto thanks for this β€” nice work. tested it in the app with a bunch of real equations (isotopes, multi-character scripts, nested pre-scripts, edge cases) and it renders the same as Word does.

i pushed two small commits directly since the changes were mechanical. first one β€” the comment at the top of the converter said Word writes the tags in the order base, sub, sup but Word actually sends them sub, sup, base. fixed the comment, reordered the test fixture to match what Word really produces, moved the registry entry out of the "not yet implemented" list it was still sitting in, and added a few more unit tests plus a new behavior test that loads a real .docx with nine pre-script shapes and checks each one renders right. second one β€” added one more test so if anyone changes how math gets saved back out, we catch it before a doc comes back different than it went in.

also uploaded the test doc to the shared corpus so the visual and layout regression runs pick it up automatically.

good to merge from my side once CI is green β€” flag anything you'd rather roll back.

@caio-pizzol
caio-pizzol disabled auto-merge April 12, 2026 21:32
@caio-pizzol
caio-pizzol added this pull request to the merge queue Apr 12, 2026
Merged via the queue into superdoc:main with commit aa0d15dApr 12, 2026
51 checks passed
@superdoc-bot

Copy link
Copy Markdown
Contributor

πŸŽ‰ This PR is included in @superdoc-dev/react v1.2.0-next.3

The release is available on GitHub release

@superdoc-bot

Copy link
Copy Markdown
Contributor

πŸŽ‰ This PR is included in vscode-ext v2.3.0-next.6

@superdoc-bot

Copy link
Copy Markdown
Contributor

πŸŽ‰ This PR is included in template-builder v1.5.0-next.6

The release is available on GitHub release

@superdoc-bot

Copy link
Copy Markdown
Contributor

πŸŽ‰ This PR is included in esign v2.3.0-next.6

The release is available on GitHub release

@superdoc-bot

Copy link
Copy Markdown
Contributor

πŸŽ‰ This PR is included in superdoc v1.26.0-next.6

The release is available on GitHub release

@superdoc-bot

Copy link
Copy Markdown
Contributor

πŸŽ‰ This PR is included in superdoc-cli v0.7.0-next.6

The release is available on GitHub release

@superdoc-bot

Copy link
Copy Markdown
Contributor

πŸŽ‰ This PR is included in superdoc-sdk v1.6.0-next.3

@superdoc-bot

Copy link
Copy Markdown
Contributor

πŸŽ‰ This PR is included in superdoc-cli v0.7.0

The release is available on GitHub release

@superdoc-bot

Copy link
Copy Markdown
Contributor

πŸŽ‰ This PR is included in superdoc v1.27.0

The release is available on GitHub release

@superdoc-bot

Copy link
Copy Markdown
Contributor

πŸŽ‰ This PR is included in @superdoc-dev/react v1.2.0

The release is available on GitHub release

@superdoc-bot

Copy link
Copy Markdown
Contributor

πŸŽ‰ This PR is included in superdoc-sdk v1.6.0

@superdoc-bot

Copy link
Copy Markdown
Contributor

πŸŽ‰ This PR is included in vscode-ext v2.3.0

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Math: implement m:sPre pre-sub-superscript converter (community)

3 participants

@Abdeltoto@caio-pizzol@caiopizzol
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

feat(math): implement m:sPre pre-sub-superscript converter - #2747

Merged
caio-pizzol merged 5 commits into
superdoc:mainfrom
Abdeltoto:feat/math-pre-sub-superscript-converter
Apr 12, 2026
Merged

feat(math): implement m:sPre pre-sub-superscript converter#2747
caio-pizzol merged 5 commits into
superdoc:mainfrom
Abdeltoto:feat/math-pre-sub-superscript-converter

Conversation

@Abdeltoto

Copy link
Copy Markdown

Closes#2609

Summary

  • Implements the \m:sPre\ OMML-to-MathML converter (prescripts on the left of a base)
  • Maps \m:sPre\ to MathML <mmultiscripts>\ with <mprescripts/>\ separator
  • Registers the converter in \MATH_OBJECT_REGISTRY\
  • Adds 2 unit tests covering standard usage and missing sub/sup

Spec reference

ECMA-376 Section 22.1.2.99

Test plan

  • \οΏ½itest run\ passes for omml-to-mathml.test.ts
  • Linter and formatter pass (lefthook pre-commit)

Made with Cursor

- Correct JSDoc OMML child order to spec (sPrePr, sub, sup, e) per ECMA-376 Β§22.1.2.99
- Move m:sPre into the implemented section of the converter registry
- Add sibling-parity unit tests: properties-element filter, multi-run mrow wrap
- Assert children.length === 4 in missing-case test to lock in arity invariant
- Relocate describe block next to m:sSubSup; align test name with sibling convention
- Reorder happy-path fixture to spec-correct child order
- Add behavior tests + math-spre-tests.docx fixture covering 9 m:sPre shapes
(basic, isotope, multi-run, only-sub, only-sup, no sPrePr, fraction-in-sub,
nested sPre, display-mode oMathPara)
- Add m:sPre round-trip test in math importer for child-order preservation

@caio-pizzolcaio-pizzol left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@Abdeltoto thanks for this β€” nice work. tested it in the app with a bunch of real equations (isotopes, multi-character scripts, nested pre-scripts, edge cases) and it renders the same as Word does.

i pushed two small commits directly since the changes were mechanical. first one β€” the comment at the top of the converter said Word writes the tags in the order base, sub, sup but Word actually sends them sub, sup, base. fixed the comment, reordered the test fixture to match what Word really produces, moved the registry entry out of the "not yet implemented" list it was still sitting in, and added a few more unit tests plus a new behavior test that loads a real .docx with nine pre-script shapes and checks each one renders right. second one β€” added one more test so if anyone changes how math gets saved back out, we catch it before a doc comes back different than it went in.

also uploaded the test doc to the shared corpus so the visual and layout regression runs pick it up automatically.

good to merge from my side once CI is green β€” flag anything you'd rather roll back.

@caio-pizzol
caio-pizzol disabled auto-merge April 12, 2026 21:32
@caio-pizzol
caio-pizzol added this pull request to the merge queue Apr 12, 2026
Merged via the queue into superdoc:main with commit aa0d15dApr 12, 2026
51 checks passed
@superdoc-bot

Copy link
Copy Markdown
Contributor

πŸŽ‰ This PR is included in @superdoc-dev/react v1.2.0-next.3

The release is available on GitHub release

@superdoc-bot

Copy link
Copy Markdown
Contributor

πŸŽ‰ This PR is included in vscode-ext v2.3.0-next.6

@superdoc-bot

Copy link
Copy Markdown
Contributor

πŸŽ‰ This PR is included in template-builder v1.5.0-next.6

The release is available on GitHub release

@superdoc-bot

Copy link
Copy Markdown
Contributor

πŸŽ‰ This PR is included in esign v2.3.0-next.6

The release is available on GitHub release

@superdoc-bot

Copy link
Copy Markdown
Contributor

πŸŽ‰ This PR is included in superdoc v1.26.0-next.6

The release is available on GitHub release

@superdoc-bot

Copy link
Copy Markdown
Contributor

πŸŽ‰ This PR is included in superdoc-cli v0.7.0-next.6

The release is available on GitHub release

@superdoc-bot

Copy link
Copy Markdown
Contributor

πŸŽ‰ This PR is included in superdoc-sdk v1.6.0-next.3

@superdoc-bot

Copy link
Copy Markdown
Contributor

πŸŽ‰ This PR is included in superdoc-cli v0.7.0

The release is available on GitHub release

@superdoc-bot

Copy link
Copy Markdown
Contributor

πŸŽ‰ This PR is included in superdoc v1.27.0

The release is available on GitHub release

@superdoc-bot

Copy link
Copy Markdown
Contributor

πŸŽ‰ This PR is included in @superdoc-dev/react v1.2.0

The release is available on GitHub release

@superdoc-bot

Copy link
Copy Markdown
Contributor

πŸŽ‰ This PR is included in superdoc-sdk v1.6.0

@superdoc-bot

Copy link
Copy Markdown
Contributor

πŸŽ‰ This PR is included in vscode-ext v2.3.0

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Math: implement m:sPre pre-sub-superscript converter (community)

3 participants

@Abdeltoto@caio-pizzol@caiopizzol
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

feat(math): implement m:sPre pre-sub-superscript converter - #2747

Merged
caio-pizzol merged 5 commits into
superdoc:mainfrom
Abdeltoto:feat/math-pre-sub-superscript-converter
Apr 12, 2026
Merged

feat(math): implement m:sPre pre-sub-superscript converter#2747
caio-pizzol merged 5 commits into
superdoc:mainfrom
Abdeltoto:feat/math-pre-sub-superscript-converter

Conversation

@Abdeltoto

Copy link
Copy Markdown

Closes#2609

Summary

  • Implements the \m:sPre\ OMML-to-MathML converter (prescripts on the left of a base)
  • Maps \m:sPre\ to MathML <mmultiscripts>\ with <mprescripts/>\ separator
  • Registers the converter in \MATH_OBJECT_REGISTRY\
  • Adds 2 unit tests covering standard usage and missing sub/sup

Spec reference

ECMA-376 Section 22.1.2.99

Test plan

  • \οΏ½itest run\ passes for omml-to-mathml.test.ts
  • Linter and formatter pass (lefthook pre-commit)

Made with Cursor

- Correct JSDoc OMML child order to spec (sPrePr, sub, sup, e) per ECMA-376 Β§22.1.2.99
- Move m:sPre into the implemented section of the converter registry
- Add sibling-parity unit tests: properties-element filter, multi-run mrow wrap
- Assert children.length === 4 in missing-case test to lock in arity invariant
- Relocate describe block next to m:sSubSup; align test name with sibling convention
- Reorder happy-path fixture to spec-correct child order
- Add behavior tests + math-spre-tests.docx fixture covering 9 m:sPre shapes
(basic, isotope, multi-run, only-sub, only-sup, no sPrePr, fraction-in-sub,
nested sPre, display-mode oMathPara)
- Add m:sPre round-trip test in math importer for child-order preservation

@caio-pizzolcaio-pizzol left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@Abdeltoto thanks for this β€” nice work. tested it in the app with a bunch of real equations (isotopes, multi-character scripts, nested pre-scripts, edge cases) and it renders the same as Word does.

i pushed two small commits directly since the changes were mechanical. first one β€” the comment at the top of the converter said Word writes the tags in the order base, sub, sup but Word actually sends them sub, sup, base. fixed the comment, reordered the test fixture to match what Word really produces, moved the registry entry out of the "not yet implemented" list it was still sitting in, and added a few more unit tests plus a new behavior test that loads a real .docx with nine pre-script shapes and checks each one renders right. second one β€” added one more test so if anyone changes how math gets saved back out, we catch it before a doc comes back different than it went in.

also uploaded the test doc to the shared corpus so the visual and layout regression runs pick it up automatically.

good to merge from my side once CI is green β€” flag anything you'd rather roll back.

@caio-pizzol
caio-pizzol disabled auto-merge April 12, 2026 21:32
@caio-pizzol
caio-pizzol added this pull request to the merge queue Apr 12, 2026
Merged via the queue into superdoc:main with commit aa0d15dApr 12, 2026
51 checks passed
@superdoc-bot

Copy link
Copy Markdown
Contributor

πŸŽ‰ This PR is included in @superdoc-dev/react v1.2.0-next.3

The release is available on GitHub release

@superdoc-bot

Copy link
Copy Markdown
Contributor

πŸŽ‰ This PR is included in vscode-ext v2.3.0-next.6

@superdoc-bot

Copy link
Copy Markdown
Contributor

πŸŽ‰ This PR is included in template-builder v1.5.0-next.6

The release is available on GitHub release

@superdoc-bot

Copy link
Copy Markdown
Contributor

πŸŽ‰ This PR is included in esign v2.3.0-next.6

The release is available on GitHub release

@superdoc-bot

Copy link
Copy Markdown
Contributor

πŸŽ‰ This PR is included in superdoc v1.26.0-next.6

The release is available on GitHub release

@superdoc-bot

Copy link
Copy Markdown
Contributor

πŸŽ‰ This PR is included in superdoc-cli v0.7.0-next.6

The release is available on GitHub release

@superdoc-bot

Copy link
Copy Markdown
Contributor

πŸŽ‰ This PR is included in superdoc-sdk v1.6.0-next.3

@superdoc-bot

Copy link
Copy Markdown
Contributor

πŸŽ‰ This PR is included in superdoc-cli v0.7.0

The release is available on GitHub release

@superdoc-bot

Copy link
Copy Markdown
Contributor

πŸŽ‰ This PR is included in superdoc v1.27.0

The release is available on GitHub release

@superdoc-bot

Copy link
Copy Markdown
Contributor

πŸŽ‰ This PR is included in @superdoc-dev/react v1.2.0

The release is available on GitHub release

@superdoc-bot

Copy link
Copy Markdown
Contributor

πŸŽ‰ This PR is included in superdoc-sdk v1.6.0

@superdoc-bot

Copy link
Copy Markdown
Contributor

πŸŽ‰ This PR is included in vscode-ext v2.3.0

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Math: implement m:sPre pre-sub-superscript converter (community)

3 participants

@Abdeltoto@caio-pizzol@caiopizzol
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

feat(math): implement m:sPre pre-sub-superscript converter - #2747

Merged
caio-pizzol merged 5 commits into
superdoc:mainfrom
Abdeltoto:feat/math-pre-sub-superscript-converter
Apr 12, 2026
Merged

feat(math): implement m:sPre pre-sub-superscript converter#2747
caio-pizzol merged 5 commits into
superdoc:mainfrom
Abdeltoto:feat/math-pre-sub-superscript-converter

Conversation

@Abdeltoto

Copy link
Copy Markdown

Closes#2609

Summary

  • Implements the \m:sPre\ OMML-to-MathML converter (prescripts on the left of a base)
  • Maps \m:sPre\ to MathML <mmultiscripts>\ with <mprescripts/>\ separator
  • Registers the converter in \MATH_OBJECT_REGISTRY\
  • Adds 2 unit tests covering standard usage and missing sub/sup

Spec reference

ECMA-376 Section 22.1.2.99

Test plan

  • \οΏ½itest run\ passes for omml-to-mathml.test.ts
  • Linter and formatter pass (lefthook pre-commit)

Made with Cursor

- Correct JSDoc OMML child order to spec (sPrePr, sub, sup, e) per ECMA-376 Β§22.1.2.99
- Move m:sPre into the implemented section of the converter registry
- Add sibling-parity unit tests: properties-element filter, multi-run mrow wrap
- Assert children.length === 4 in missing-case test to lock in arity invariant
- Relocate describe block next to m:sSubSup; align test name with sibling convention
- Reorder happy-path fixture to spec-correct child order
- Add behavior tests + math-spre-tests.docx fixture covering 9 m:sPre shapes
(basic, isotope, multi-run, only-sub, only-sup, no sPrePr, fraction-in-sub,
nested sPre, display-mode oMathPara)
- Add m:sPre round-trip test in math importer for child-order preservation

@caio-pizzolcaio-pizzol left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@Abdeltoto thanks for this β€” nice work. tested it in the app with a bunch of real equations (isotopes, multi-character scripts, nested pre-scripts, edge cases) and it renders the same as Word does.

i pushed two small commits directly since the changes were mechanical. first one β€” the comment at the top of the converter said Word writes the tags in the order base, sub, sup but Word actually sends them sub, sup, base. fixed the comment, reordered the test fixture to match what Word really produces, moved the registry entry out of the "not yet implemented" list it was still sitting in, and added a few more unit tests plus a new behavior test that loads a real .docx with nine pre-script shapes and checks each one renders right. second one β€” added one more test so if anyone changes how math gets saved back out, we catch it before a doc comes back different than it went in.

also uploaded the test doc to the shared corpus so the visual and layout regression runs pick it up automatically.

good to merge from my side once CI is green β€” flag anything you'd rather roll back.

@caio-pizzol
caio-pizzol disabled auto-merge April 12, 2026 21:32
@caio-pizzol
caio-pizzol added this pull request to the merge queue Apr 12, 2026
Merged via the queue into superdoc:main with commit aa0d15dApr 12, 2026
51 checks passed
@superdoc-bot

Copy link
Copy Markdown
Contributor

πŸŽ‰ This PR is included in @superdoc-dev/react v1.2.0-next.3

The release is available on GitHub release

@superdoc-bot

Copy link
Copy Markdown
Contributor

πŸŽ‰ This PR is included in vscode-ext v2.3.0-next.6

@superdoc-bot

Copy link
Copy Markdown
Contributor

πŸŽ‰ This PR is included in template-builder v1.5.0-next.6

The release is available on GitHub release

@superdoc-bot

Copy link
Copy Markdown
Contributor

πŸŽ‰ This PR is included in esign v2.3.0-next.6

The release is available on GitHub release

@superdoc-bot

Copy link
Copy Markdown
Contributor

πŸŽ‰ This PR is included in superdoc v1.26.0-next.6

The release is available on GitHub release

@superdoc-bot

Copy link
Copy Markdown
Contributor

πŸŽ‰ This PR is included in superdoc-cli v0.7.0-next.6

The release is available on GitHub release

@superdoc-bot

Copy link
Copy Markdown
Contributor

πŸŽ‰ This PR is included in superdoc-sdk v1.6.0-next.3

@superdoc-bot

Copy link
Copy Markdown
Contributor

πŸŽ‰ This PR is included in superdoc-cli v0.7.0

The release is available on GitHub release

@superdoc-bot

Copy link
Copy Markdown
Contributor

πŸŽ‰ This PR is included in superdoc v1.27.0

The release is available on GitHub release

@superdoc-bot

Copy link
Copy Markdown
Contributor

πŸŽ‰ This PR is included in @superdoc-dev/react v1.2.0

The release is available on GitHub release

@superdoc-bot

Copy link
Copy Markdown
Contributor

πŸŽ‰ This PR is included in superdoc-sdk v1.6.0

@superdoc-bot

Copy link
Copy Markdown
Contributor

πŸŽ‰ This PR is included in vscode-ext v2.3.0

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Math: implement m:sPre pre-sub-superscript converter (community)

3 participants

@Abdeltoto@caio-pizzol@caiopizzol
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

feat(math): implement m:sPre pre-sub-superscript converter - #2747

Merged
caio-pizzol merged 5 commits into
superdoc:mainfrom
Abdeltoto:feat/math-pre-sub-superscript-converter
Apr 12, 2026
Merged

feat(math): implement m:sPre pre-sub-superscript converter#2747
caio-pizzol merged 5 commits into
superdoc:mainfrom
Abdeltoto:feat/math-pre-sub-superscript-converter

Conversation

@Abdeltoto

Copy link
Copy Markdown

Closes#2609

Summary

  • Implements the \m:sPre\ OMML-to-MathML converter (prescripts on the left of a base)
  • Maps \m:sPre\ to MathML <mmultiscripts>\ with <mprescripts/>\ separator
  • Registers the converter in \MATH_OBJECT_REGISTRY\
  • Adds 2 unit tests covering standard usage and missing sub/sup

Spec reference

ECMA-376 Section 22.1.2.99

Test plan

  • \οΏ½itest run\ passes for omml-to-mathml.test.ts
  • Linter and formatter pass (lefthook pre-commit)

Made with Cursor

- Correct JSDoc OMML child order to spec (sPrePr, sub, sup, e) per ECMA-376 Β§22.1.2.99
- Move m:sPre into the implemented section of the converter registry
- Add sibling-parity unit tests: properties-element filter, multi-run mrow wrap
- Assert children.length === 4 in missing-case test to lock in arity invariant
- Relocate describe block next to m:sSubSup; align test name with sibling convention
- Reorder happy-path fixture to spec-correct child order
- Add behavior tests + math-spre-tests.docx fixture covering 9 m:sPre shapes
(basic, isotope, multi-run, only-sub, only-sup, no sPrePr, fraction-in-sub,
nested sPre, display-mode oMathPara)
- Add m:sPre round-trip test in math importer for child-order preservation

@caio-pizzolcaio-pizzol left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@Abdeltoto thanks for this β€” nice work. tested it in the app with a bunch of real equations (isotopes, multi-character scripts, nested pre-scripts, edge cases) and it renders the same as Word does.

i pushed two small commits directly since the changes were mechanical. first one β€” the comment at the top of the converter said Word writes the tags in the order base, sub, sup but Word actually sends them sub, sup, base. fixed the comment, reordered the test fixture to match what Word really produces, moved the registry entry out of the "not yet implemented" list it was still sitting in, and added a few more unit tests plus a new behavior test that loads a real .docx with nine pre-script shapes and checks each one renders right. second one β€” added one more test so if anyone changes how math gets saved back out, we catch it before a doc comes back different than it went in.

also uploaded the test doc to the shared corpus so the visual and layout regression runs pick it up automatically.

good to merge from my side once CI is green β€” flag anything you'd rather roll back.

@caio-pizzol
caio-pizzol disabled auto-merge April 12, 2026 21:32
@caio-pizzol
caio-pizzol added this pull request to the merge queue Apr 12, 2026
Merged via the queue into superdoc:main with commit aa0d15dApr 12, 2026
51 checks passed
@superdoc-bot

Copy link
Copy Markdown
Contributor

πŸŽ‰ This PR is included in @superdoc-dev/react v1.2.0-next.3

The release is available on GitHub release

@superdoc-bot

Copy link
Copy Markdown
Contributor

πŸŽ‰ This PR is included in vscode-ext v2.3.0-next.6

@superdoc-bot

Copy link
Copy Markdown
Contributor

πŸŽ‰ This PR is included in template-builder v1.5.0-next.6

The release is available on GitHub release

@superdoc-bot

Copy link
Copy Markdown
Contributor

πŸŽ‰ This PR is included in esign v2.3.0-next.6

The release is available on GitHub release

@superdoc-bot

Copy link
Copy Markdown
Contributor

πŸŽ‰ This PR is included in superdoc v1.26.0-next.6

The release is available on GitHub release

@superdoc-bot

Copy link
Copy Markdown
Contributor

πŸŽ‰ This PR is included in superdoc-cli v0.7.0-next.6

The release is available on GitHub release

@superdoc-bot

Copy link
Copy Markdown
Contributor

πŸŽ‰ This PR is included in superdoc-sdk v1.6.0-next.3

@superdoc-bot

Copy link
Copy Markdown
Contributor

πŸŽ‰ This PR is included in superdoc-cli v0.7.0

The release is available on GitHub release

@superdoc-bot

Copy link
Copy Markdown
Contributor

πŸŽ‰ This PR is included in superdoc v1.27.0

The release is available on GitHub release

@superdoc-bot

Copy link
Copy Markdown
Contributor

πŸŽ‰ This PR is included in @superdoc-dev/react v1.2.0

The release is available on GitHub release

@superdoc-bot

Copy link
Copy Markdown
Contributor

πŸŽ‰ This PR is included in superdoc-sdk v1.6.0

@superdoc-bot

Copy link
Copy Markdown
Contributor

πŸŽ‰ This PR is included in vscode-ext v2.3.0

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Math: implement m:sPre pre-sub-superscript converter (community)

3 participants

@Abdeltoto@caio-pizzol@caiopizzol
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

feat(math): implement m:sPre pre-sub-superscript converter - #2747

Merged
caio-pizzol merged 5 commits into
superdoc:mainfrom
Abdeltoto:feat/math-pre-sub-superscript-converter
Apr 12, 2026
Merged

feat(math): implement m:sPre pre-sub-superscript converter#2747
caio-pizzol merged 5 commits into
superdoc:mainfrom
Abdeltoto:feat/math-pre-sub-superscript-converter

Conversation

@Abdeltoto

Copy link
Copy Markdown

Closes#2609

Summary

  • Implements the \m:sPre\ OMML-to-MathML converter (prescripts on the left of a base)
  • Maps \m:sPre\ to MathML <mmultiscripts>\ with <mprescripts/>\ separator
  • Registers the converter in \MATH_OBJECT_REGISTRY\
  • Adds 2 unit tests covering standard usage and missing sub/sup

Spec reference

ECMA-376 Section 22.1.2.99

Test plan

  • \οΏ½itest run\ passes for omml-to-mathml.test.ts
  • Linter and formatter pass (lefthook pre-commit)

Made with Cursor

- Correct JSDoc OMML child order to spec (sPrePr, sub, sup, e) per ECMA-376 Β§22.1.2.99
- Move m:sPre into the implemented section of the converter registry
- Add sibling-parity unit tests: properties-element filter, multi-run mrow wrap
- Assert children.length === 4 in missing-case test to lock in arity invariant
- Relocate describe block next to m:sSubSup; align test name with sibling convention
- Reorder happy-path fixture to spec-correct child order
- Add behavior tests + math-spre-tests.docx fixture covering 9 m:sPre shapes
(basic, isotope, multi-run, only-sub, only-sup, no sPrePr, fraction-in-sub,
nested sPre, display-mode oMathPara)
- Add m:sPre round-trip test in math importer for child-order preservation

@caio-pizzolcaio-pizzol left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@Abdeltoto thanks for this β€” nice work. tested it in the app with a bunch of real equations (isotopes, multi-character scripts, nested pre-scripts, edge cases) and it renders the same as Word does.

i pushed two small commits directly since the changes were mechanical. first one β€” the comment at the top of the converter said Word writes the tags in the order base, sub, sup but Word actually sends them sub, sup, base. fixed the comment, reordered the test fixture to match what Word really produces, moved the registry entry out of the "not yet implemented" list it was still sitting in, and added a few more unit tests plus a new behavior test that loads a real .docx with nine pre-script shapes and checks each one renders right. second one β€” added one more test so if anyone changes how math gets saved back out, we catch it before a doc comes back different than it went in.

also uploaded the test doc to the shared corpus so the visual and layout regression runs pick it up automatically.

good to merge from my side once CI is green β€” flag anything you'd rather roll back.

@caio-pizzol
caio-pizzol disabled auto-merge April 12, 2026 21:32
@caio-pizzol
caio-pizzol added this pull request to the merge queue Apr 12, 2026
Merged via the queue into superdoc:main with commit aa0d15dApr 12, 2026
51 checks passed
@superdoc-bot

Copy link
Copy Markdown
Contributor

πŸŽ‰ This PR is included in @superdoc-dev/react v1.2.0-next.3

The release is available on GitHub release

@superdoc-bot

Copy link
Copy Markdown
Contributor

πŸŽ‰ This PR is included in vscode-ext v2.3.0-next.6

@superdoc-bot

Copy link
Copy Markdown
Contributor

πŸŽ‰ This PR is included in template-builder v1.5.0-next.6

The release is available on GitHub release

@superdoc-bot

Copy link
Copy Markdown
Contributor

πŸŽ‰ This PR is included in esign v2.3.0-next.6

The release is available on GitHub release

@superdoc-bot

Copy link
Copy Markdown
Contributor

πŸŽ‰ This PR is included in superdoc v1.26.0-next.6

The release is available on GitHub release

@superdoc-bot

Copy link
Copy Markdown
Contributor

πŸŽ‰ This PR is included in superdoc-cli v0.7.0-next.6

The release is available on GitHub release

@superdoc-bot

Copy link
Copy Markdown
Contributor

πŸŽ‰ This PR is included in superdoc-sdk v1.6.0-next.3

@superdoc-bot

Copy link
Copy Markdown
Contributor

πŸŽ‰ This PR is included in superdoc-cli v0.7.0

The release is available on GitHub release

@superdoc-bot

Copy link
Copy Markdown
Contributor

πŸŽ‰ This PR is included in superdoc v1.27.0

The release is available on GitHub release

@superdoc-bot

Copy link
Copy Markdown
Contributor

πŸŽ‰ This PR is included in @superdoc-dev/react v1.2.0

The release is available on GitHub release

@superdoc-bot

Copy link
Copy Markdown
Contributor

πŸŽ‰ This PR is included in superdoc-sdk v1.6.0

@superdoc-bot

Copy link
Copy Markdown
Contributor

πŸŽ‰ This PR is included in vscode-ext v2.3.0

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Math: implement m:sPre pre-sub-superscript converter (community)

3 participants

@Abdeltoto@caio-pizzol@caiopizzol
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

feat(math): implement m:sPre pre-sub-superscript converter - #2747

Merged
caio-pizzol merged 5 commits into
superdoc:mainfrom
Abdeltoto:feat/math-pre-sub-superscript-converter
Apr 12, 2026
Merged

feat(math): implement m:sPre pre-sub-superscript converter#2747
caio-pizzol merged 5 commits into
superdoc:mainfrom
Abdeltoto:feat/math-pre-sub-superscript-converter

Conversation

@Abdeltoto

Copy link
Copy Markdown

Closes#2609

Summary

  • Implements the \m:sPre\ OMML-to-MathML converter (prescripts on the left of a base)
  • Maps \m:sPre\ to MathML <mmultiscripts>\ with <mprescripts/>\ separator
  • Registers the converter in \MATH_OBJECT_REGISTRY\
  • Adds 2 unit tests covering standard usage and missing sub/sup

Spec reference

ECMA-376 Section 22.1.2.99

Test plan

  • \οΏ½itest run\ passes for omml-to-mathml.test.ts
  • Linter and formatter pass (lefthook pre-commit)

Made with Cursor

- Correct JSDoc OMML child order to spec (sPrePr, sub, sup, e) per ECMA-376 Β§22.1.2.99
- Move m:sPre into the implemented section of the converter registry
- Add sibling-parity unit tests: properties-element filter, multi-run mrow wrap
- Assert children.length === 4 in missing-case test to lock in arity invariant
- Relocate describe block next to m:sSubSup; align test name with sibling convention
- Reorder happy-path fixture to spec-correct child order
- Add behavior tests + math-spre-tests.docx fixture covering 9 m:sPre shapes
(basic, isotope, multi-run, only-sub, only-sup, no sPrePr, fraction-in-sub,
nested sPre, display-mode oMathPara)
- Add m:sPre round-trip test in math importer for child-order preservation

@caio-pizzolcaio-pizzol left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@Abdeltoto thanks for this β€” nice work. tested it in the app with a bunch of real equations (isotopes, multi-character scripts, nested pre-scripts, edge cases) and it renders the same as Word does.

i pushed two small commits directly since the changes were mechanical. first one β€” the comment at the top of the converter said Word writes the tags in the order base, sub, sup but Word actually sends them sub, sup, base. fixed the comment, reordered the test fixture to match what Word really produces, moved the registry entry out of the "not yet implemented" list it was still sitting in, and added a few more unit tests plus a new behavior test that loads a real .docx with nine pre-script shapes and checks each one renders right. second one β€” added one more test so if anyone changes how math gets saved back out, we catch it before a doc comes back different than it went in.

also uploaded the test doc to the shared corpus so the visual and layout regression runs pick it up automatically.

good to merge from my side once CI is green β€” flag anything you'd rather roll back.

@caio-pizzol
caio-pizzol disabled auto-merge April 12, 2026 21:32
@caio-pizzol
caio-pizzol added this pull request to the merge queue Apr 12, 2026
Merged via the queue into superdoc:main with commit aa0d15dApr 12, 2026
51 checks passed
@superdoc-bot

Copy link
Copy Markdown
Contributor

πŸŽ‰ This PR is included in @superdoc-dev/react v1.2.0-next.3

The release is available on GitHub release

@superdoc-bot

Copy link
Copy Markdown
Contributor

πŸŽ‰ This PR is included in vscode-ext v2.3.0-next.6

@superdoc-bot

Copy link
Copy Markdown
Contributor

πŸŽ‰ This PR is included in template-builder v1.5.0-next.6

The release is available on GitHub release

@superdoc-bot

Copy link
Copy Markdown
Contributor

πŸŽ‰ This PR is included in esign v2.3.0-next.6

The release is available on GitHub release

@superdoc-bot

Copy link
Copy Markdown
Contributor

πŸŽ‰ This PR is included in superdoc v1.26.0-next.6

The release is available on GitHub release

@superdoc-bot

Copy link
Copy Markdown
Contributor

πŸŽ‰ This PR is included in superdoc-cli v0.7.0-next.6

The release is available on GitHub release

@superdoc-bot

Copy link
Copy Markdown
Contributor

πŸŽ‰ This PR is included in superdoc-sdk v1.6.0-next.3

@superdoc-bot

Copy link
Copy Markdown
Contributor

πŸŽ‰ This PR is included in superdoc-cli v0.7.0

The release is available on GitHub release

@superdoc-bot

Copy link
Copy Markdown
Contributor

πŸŽ‰ This PR is included in superdoc v1.27.0

The release is available on GitHub release

@superdoc-bot

Copy link
Copy Markdown
Contributor

πŸŽ‰ This PR is included in @superdoc-dev/react v1.2.0

The release is available on GitHub release

@superdoc-bot

Copy link
Copy Markdown
Contributor

πŸŽ‰ This PR is included in superdoc-sdk v1.6.0

@superdoc-bot

Copy link
Copy Markdown
Contributor

πŸŽ‰ This PR is included in vscode-ext v2.3.0

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Math: implement m:sPre pre-sub-superscript converter (community)

3 participants

@Abdeltoto@caio-pizzol@caiopizzol
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

feat(math): implement m:sPre pre-sub-superscript converter - #2747

Merged
caio-pizzol merged 5 commits into
superdoc:mainfrom
Abdeltoto:feat/math-pre-sub-superscript-converter
Apr 12, 2026
Merged

feat(math): implement m:sPre pre-sub-superscript converter#2747
caio-pizzol merged 5 commits into
superdoc:mainfrom
Abdeltoto:feat/math-pre-sub-superscript-converter

Conversation

@Abdeltoto

Copy link
Copy Markdown

Closes#2609

Summary

  • Implements the \m:sPre\ OMML-to-MathML converter (prescripts on the left of a base)
  • Maps \m:sPre\ to MathML <mmultiscripts>\ with <mprescripts/>\ separator
  • Registers the converter in \MATH_OBJECT_REGISTRY\
  • Adds 2 unit tests covering standard usage and missing sub/sup

Spec reference

ECMA-376 Section 22.1.2.99

Test plan

  • \οΏ½itest run\ passes for omml-to-mathml.test.ts
  • Linter and formatter pass (lefthook pre-commit)

Made with Cursor

- Correct JSDoc OMML child order to spec (sPrePr, sub, sup, e) per ECMA-376 Β§22.1.2.99
- Move m:sPre into the implemented section of the converter registry
- Add sibling-parity unit tests: properties-element filter, multi-run mrow wrap
- Assert children.length === 4 in missing-case test to lock in arity invariant
- Relocate describe block next to m:sSubSup; align test name with sibling convention
- Reorder happy-path fixture to spec-correct child order
- Add behavior tests + math-spre-tests.docx fixture covering 9 m:sPre shapes
(basic, isotope, multi-run, only-sub, only-sup, no sPrePr, fraction-in-sub,
nested sPre, display-mode oMathPara)
- Add m:sPre round-trip test in math importer for child-order preservation

@caio-pizzolcaio-pizzol left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@Abdeltoto thanks for this β€” nice work. tested it in the app with a bunch of real equations (isotopes, multi-character scripts, nested pre-scripts, edge cases) and it renders the same as Word does.

i pushed two small commits directly since the changes were mechanical. first one β€” the comment at the top of the converter said Word writes the tags in the order base, sub, sup but Word actually sends them sub, sup, base. fixed the comment, reordered the test fixture to match what Word really produces, moved the registry entry out of the "not yet implemented" list it was still sitting in, and added a few more unit tests plus a new behavior test that loads a real .docx with nine pre-script shapes and checks each one renders right. second one β€” added one more test so if anyone changes how math gets saved back out, we catch it before a doc comes back different than it went in.

also uploaded the test doc to the shared corpus so the visual and layout regression runs pick it up automatically.

good to merge from my side once CI is green β€” flag anything you'd rather roll back.

@caio-pizzol
caio-pizzol disabled auto-merge April 12, 2026 21:32
@caio-pizzol
caio-pizzol added this pull request to the merge queue Apr 12, 2026
Merged via the queue into superdoc:main with commit aa0d15dApr 12, 2026
51 checks passed
@superdoc-bot

Copy link
Copy Markdown
Contributor

πŸŽ‰ This PR is included in @superdoc-dev/react v1.2.0-next.3

The release is available on GitHub release

@superdoc-bot

Copy link
Copy Markdown
Contributor

πŸŽ‰ This PR is included in vscode-ext v2.3.0-next.6

@superdoc-bot

Copy link
Copy Markdown
Contributor

πŸŽ‰ This PR is included in template-builder v1.5.0-next.6

The release is available on GitHub release

@superdoc-bot

Copy link
Copy Markdown
Contributor

πŸŽ‰ This PR is included in esign v2.3.0-next.6

The release is available on GitHub release

@superdoc-bot

Copy link
Copy Markdown
Contributor

πŸŽ‰ This PR is included in superdoc v1.26.0-next.6

The release is available on GitHub release

@superdoc-bot

Copy link
Copy Markdown
Contributor

πŸŽ‰ This PR is included in superdoc-cli v0.7.0-next.6

The release is available on GitHub release

@superdoc-bot

Copy link
Copy Markdown
Contributor

πŸŽ‰ This PR is included in superdoc-sdk v1.6.0-next.3

@superdoc-bot

Copy link
Copy Markdown
Contributor

πŸŽ‰ This PR is included in superdoc-cli v0.7.0

The release is available on GitHub release

@superdoc-bot

Copy link
Copy Markdown
Contributor

πŸŽ‰ This PR is included in superdoc v1.27.0

The release is available on GitHub release

@superdoc-bot

Copy link
Copy Markdown
Contributor

πŸŽ‰ This PR is included in @superdoc-dev/react v1.2.0

The release is available on GitHub release

@superdoc-bot

Copy link
Copy Markdown
Contributor

πŸŽ‰ This PR is included in superdoc-sdk v1.6.0

@superdoc-bot

Copy link
Copy Markdown
Contributor

πŸŽ‰ This PR is included in vscode-ext v2.3.0

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Math: implement m:sPre pre-sub-superscript converter (community)

3 participants

@Abdeltoto@caio-pizzol@caiopizzol