From 9e1ecccdaf2059419e7d0689e7cf4bcbfa221156 Mon Sep 17 00:00:00 2001 From: Claude Date: Fri, 7 Nov 2025 14:51:51 +0000 Subject: [PATCH 01/10] Implement MathML support for Slipstream MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This commit adds comprehensive MathML (Mathematical Markup Language) support to Slipstream, enabling declarative mathematical notation in HTML documents. **Container Element:** - **Math** (`math`): Main MathML container with optional display attribute for block or inline rendering **Token Elements:** - **MI** (`mi`): Identifiers (variables, function names) - rendered in italic - **MO** (`mo`): Operators (+, -, ×, ÷, =, etc.) - **MN** (`mn`): Numeric literals - **MText** (`mtext`): Arbitrary text content for annotations - **MS** (`ms`): String literals with surrounding quotes **Layout Elements:** - **MRow** (`mrow`): Groups sub-expressions together - **MFrac** (`mfrac`): Fractions with numerator/denominator and configurable line thickness - **MSup** (`msup`): Superscripts (e.g., x²) - **MSub** (`msub`): Subscripts (e.g., x₀) - **MSubSup** (`msubsup`): Combined sub/superscripts - **MSqrt** (`msqrt`): Square root - **MRoot** (`mroot`): Nth root **Script Elements:** - **MUnder** (`munder`): Underscripts (e.g., limits) - **MOver** (`mover`): Overscripts (e.g., accents) - **MUnderOver** (`munderover`): Combined under/overscripts (e.g., summations) **Table Elements:** - **MTable** (`mtable`): Tables for matrices and systems of equations - **MTr** (`mtr`): Table rows - **MTd** (`mtd`): Table cells All elements follow Slipstream patterns with SwiftUI-style ViewBuilder APIs while honoring W3C MathML terminology. Comprehensive test coverage includes simple expressions, complex formulas (quadratic formula, summations), matrices, and nested structures. Also updates SlipstreamForWebDevelopers.md to document all MathML elements and adds missing SVG documentation. --- .../Guides/SlipstreamForWebDevelopers.md | 41 ++ .../EmbeddedContent/MathML/MFrac.swift | 55 ++ .../Elements/EmbeddedContent/MathML/MI.swift | 49 ++ .../Elements/EmbeddedContent/MathML/MN.swift | 48 ++ .../Elements/EmbeddedContent/MathML/MO.swift | 49 ++ .../EmbeddedContent/MathML/MOver.swift | 40 ++ .../EmbeddedContent/MathML/MRoot.swift | 39 ++ .../EmbeddedContent/MathML/MRow.swift | 41 ++ .../Elements/EmbeddedContent/MathML/MS.swift | 47 ++ .../EmbeddedContent/MathML/MSqrt.swift | 38 ++ .../EmbeddedContent/MathML/MSub.swift | 39 ++ .../EmbeddedContent/MathML/MSubSup.swift | 40 ++ .../EmbeddedContent/MathML/MSup.swift | 39 ++ .../EmbeddedContent/MathML/MTable.swift | 54 ++ .../Elements/EmbeddedContent/MathML/MTd.swift | 45 ++ .../EmbeddedContent/MathML/MText.swift | 50 ++ .../Elements/EmbeddedContent/MathML/MTr.swift | 45 ++ .../EmbeddedContent/MathML/MUnder.swift | 44 ++ .../EmbeddedContent/MathML/MUnderOver.swift | 45 ++ .../EmbeddedContent/MathML/Math.swift | 79 +++ Tests/SlipstreamTests/W3C/MathMLTests.swift | 525 ++++++++++++++++++ 21 files changed, 1452 insertions(+) create mode 100644 Sources/Slipstream/W3C/Elements/EmbeddedContent/MathML/MFrac.swift create mode 100644 Sources/Slipstream/W3C/Elements/EmbeddedContent/MathML/MI.swift create mode 100644 Sources/Slipstream/W3C/Elements/EmbeddedContent/MathML/MN.swift create mode 100644 Sources/Slipstream/W3C/Elements/EmbeddedContent/MathML/MO.swift create mode 100644 Sources/Slipstream/W3C/Elements/EmbeddedContent/MathML/MOver.swift create mode 100644 Sources/Slipstream/W3C/Elements/EmbeddedContent/MathML/MRoot.swift create mode 100644 Sources/Slipstream/W3C/Elements/EmbeddedContent/MathML/MRow.swift create mode 100644 Sources/Slipstream/W3C/Elements/EmbeddedContent/MathML/MS.swift create mode 100644 Sources/Slipstream/W3C/Elements/EmbeddedContent/MathML/MSqrt.swift create mode 100644 Sources/Slipstream/W3C/Elements/EmbeddedContent/MathML/MSub.swift create mode 100644 Sources/Slipstream/W3C/Elements/EmbeddedContent/MathML/MSubSup.swift create mode 100644 Sources/Slipstream/W3C/Elements/EmbeddedContent/MathML/MSup.swift create mode 100644 Sources/Slipstream/W3C/Elements/EmbeddedContent/MathML/MTable.swift create mode 100644 Sources/Slipstream/W3C/Elements/EmbeddedContent/MathML/MTd.swift create mode 100644 Sources/Slipstream/W3C/Elements/EmbeddedContent/MathML/MText.swift create mode 100644 Sources/Slipstream/W3C/Elements/EmbeddedContent/MathML/MTr.swift create mode 100644 Sources/Slipstream/W3C/Elements/EmbeddedContent/MathML/MUnder.swift create mode 100644 Sources/Slipstream/W3C/Elements/EmbeddedContent/MathML/MUnderOver.swift create mode 100644 Sources/Slipstream/W3C/Elements/EmbeddedContent/MathML/Math.swift create mode 100644 Tests/SlipstreamTests/W3C/MathMLTests.swift diff --git a/Sources/Slipstream/Documentation.docc/Guides/SlipstreamForWebDevelopers.md b/Sources/Slipstream/Documentation.docc/Guides/SlipstreamForWebDevelopers.md index 8df6ea6..309275f 100644 --- a/Sources/Slipstream/Documentation.docc/Guides/SlipstreamForWebDevelopers.md +++ b/Sources/Slipstream/Documentation.docc/Guides/SlipstreamForWebDevelopers.md @@ -230,3 +230,44 @@ provided below is an organized table of W3C HTML tags and their equivalent Slips [`