├── .github └── workflows │ └── auto-publish.yml ├── .gitignore ├── README-old.md ├── docs ├── explainer.md └── resources │ ├── commutative-diagram.png │ ├── math-tree.html │ ├── mathml-example-gamma.png │ ├── mathml-tree.png │ └── mathml3-vs-core.png ├── examples ├── container.html ├── example-anonymous-mrow-nodes.html ├── example-anonymous-mrow-nodes.png ├── example-dir.html ├── example-dir.png ├── example-display.html ├── example-display.png ├── example-displaystyle-scriptlevel.html ├── example-displaystyle-scriptlevel.png ├── example-dom-idl.html ├── example-dom-idl.png ├── example-font-size-scriptlevel.html ├── example-font-size-scriptlevel.png ├── example-html-svg.html ├── example-html-svg.png ├── example-maction.html ├── example-maction.png ├── example-math-display-block.html ├── example-math-display-block.png ├── example-math-display-inline.html ├── example-math-display-inline.png ├── example-math-shift.html ├── example-math-shift.png ├── example-math-style.html ├── example-math-style.png ├── example-merror.html ├── example-merror.png ├── example-mfrac.html ├── example-mfrac.png ├── example-mi.html ├── example-mi.png ├── example-mmultiscripts.html ├── example-mmultiscripts.png ├── example-mn.html ├── example-mn.png ├── example-mo-1.html ├── example-mo-1.png ├── example-mo-2.html ├── example-mo-2.png ├── example-mo-3.html ├── example-mo-3.png ├── example-mpadded.html ├── example-mpadded.png ├── example-mphantom.html ├── example-mphantom.png ├── example-mrow.html ├── example-mrow.png ├── example-ms.html ├── example-ms.png ├── example-mspace.html ├── example-mspace.png ├── example-msqrt-mroot.html ├── example-msqrt-mroot.png ├── example-mstyle.html ├── example-mstyle.png ├── example-msub-msup-msubsup.html ├── example-msub-msup-msubsup.png ├── example-mtext.html ├── example-mtext.png ├── example-munder-mover-munderover.html ├── example-munder-mover-munderover.png ├── example-semantics.html ├── example-semantics.png ├── example-style.html ├── example-style.png ├── example-tables.html ├── example-tables.png ├── example-text-transform-math-auto.html ├── example-text-transform-math-auto.png ├── example-without-screenshot-font-information-leakage-1.html ├── example-without-screenshot-font-information-leakage-2.html ├── example-without-screenshot-font-information-leakage-3.html ├── example-without-screenshot-maction-statusline.html ├── example-without-screenshot-math-in-canvas.html └── generate.py ├── figures ├── boxmodel.svg ├── bracesize.svg ├── bracesize.tex ├── circlebox.svg ├── circlebox.tex ├── generate-svg ├── horizontal-tb-ltr.svg ├── horizontal-tb-ltr.tex ├── horizontal-tb-rtl.svg ├── horizontal-tb-rtl.tex ├── horizstrikebox.svg ├── horizstrikebox.tex ├── italcorr.svg ├── italcorr.tex ├── leftbox.svg ├── leftbox.tex ├── mathmlcoresvg.sty ├── mfracbox.svg ├── mfracbox.tex ├── mfracnobarbox.svg ├── mfracnobarbox.tex ├── mmultiscriptsbox.svg ├── mmultiscriptsbox.tex ├── moverbox.svg ├── moverbox.tex ├── mpaddedbox.svg ├── mpaddedbox.tex ├── mrootbox.svg ├── mrootbox.tex ├── mrowbox.svg ├── mrowbox.tex ├── mspacebox.svg ├── mspacebox.tex ├── msqrtbox.svg ├── msqrtbox.tex ├── msubbox.svg ├── msubbox.tex ├── msubsupbox.svg ├── msubsupbox.tex ├── msupbox.svg ├── msupbox.tex ├── munderbox.svg ├── munderbox.tex ├── munderoverbox.svg ├── munderoverbox.tex ├── roundedbox.svg ├── roundedbox.tex ├── sumsize.svg ├── sumsize.tex ├── svgtest.html ├── topaccent.svg ├── topaccent.tex ├── topbox.svg ├── topbox.tex ├── updiagstrikebox.svg ├── updiagstrikebox.tex ├── vertical-lr.svg ├── vertical-lr.tex ├── vertical-rl.svg ├── vertical-rl.tex ├── vstretch.svg └── vstretch.tex ├── overview.html ├── spec.html ├── style.css ├── tables ├── combining-operators.html ├── download.py ├── generate-math-variant-tables.py ├── generate-unicode-assembly.py ├── inline-axis-operators.html ├── inline-axis-operators.txt ├── inline_axis_operators.py ├── math-variant-tables.html ├── mathvariants-bold-fraktur.html ├── mathvariants-bold-italic.html ├── mathvariants-bold-sans-serif.html ├── mathvariants-bold-script.html ├── mathvariants-bold.html ├── mathvariants-double-struck.html ├── mathvariants-fraktur.html ├── mathvariants-initial.html ├── mathvariants-italic.html ├── mathvariants-looped.html ├── mathvariants-monospace.html ├── mathvariants-sans-serif-bold-italic.html ├── mathvariants-sans-serif-italic.html ├── mathvariants-sans-serif.html ├── mathvariants-script.html ├── mathvariants-stretched.html ├── mathvariants-tailed.html ├── operator-dictionary-compact.html ├── operator-dictionary.html ├── operator-dictionary.py ├── operator-dictionary.xsl ├── sorttable.js └── unicode-assembly.html ├── user-agent-stylesheet ├── maction.css ├── math.css ├── merror.css ├── mfrac.css ├── mi.css ├── mphantom.css ├── ms-legacy.css ├── mtable.css ├── mtd.css ├── mtr.css ├── radicals.css ├── scripts.css ├── semantics.css └── universal.css ├── w3c.json ├── webidl └── MathMLElement.idl └── wpt ├── data-tests.js ├── extract.sh └── spec-implementation-report.js /.github/workflows/auto-publish.yml: -------------------------------------------------------------------------------- 1 | # Based on 2 | # https://github.com/w3c/echidna/wiki/How-to-use-Echidna 3 | # and 4 | # https://w3c.github.io/spec-prod/#examples 5 | 6 | name: CI 7 | on: 8 | pull_request: {} 9 | push: 10 | branches: [main] 11 | jobs: 12 | main: 13 | name: Deploy to GitHub pages 14 | runs-on: ubuntu-latest 15 | permissions: 16 | contents: write 17 | steps: 18 | - uses: actions/checkout@v4 19 | - uses: w3c/spec-prod@v2 20 | with: 21 | GH_PAGES_BRANCH: gh-pages 22 | TOOLCHAIN: respec 23 | SOURCE: spec.html 24 | DESTINATION: index.html 25 | VALIDATE_MARKUP: false 26 | publish: 27 | name: Build, validate and publish on /TR 28 | runs-on: ubuntu-latest 29 | steps: 30 | - uses: actions/checkout@v4 31 | - uses: w3c/spec-prod@v2 32 | with: 33 | TOOLCHAIN: respec 34 | SOURCE: spec.html 35 | VALIDATE_MARKUP: false 36 | W3C_ECHIDNA_TOKEN: ${{ secrets.ECHIDNA_TOKEN }} 37 | W3C_WG_DECISION_URL: https://www.w3.org/mid/CAESRWkCboGW4E4RmntSs7UZWx9UZxmGH=1GNKq1Gg7MyfQcMdA@mail.gmail.com 38 | ARTIFACT_NAME: spec-prod-result2 39 | W3C_BUILD_OVERRIDE: | 40 | specStatus: WD 41 | shortName: mathml-core 42 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | TAGS 2 | *~ 3 | unicode.xml 4 | *.pyc 5 | *.log 6 | *.aux 7 | *.dvi 8 | wpt-tests-generator.py 9 | tables/operator-dictionary-compact.cpp -------------------------------------------------------------------------------- /README-old.md: -------------------------------------------------------------------------------- 1 | # MathML Core (Editor's Draft) 2 | 3 | This specification defines a core subset of Mathematical Markup Language, or 4 | MathML, that is suitable for browser implementation. 5 | 6 | 7 | 8 | See https://w3c.github.io/mathml-core/ for an HTML version of the editor's draft. 9 | 10 | For a full list of MathML related drafts and repositories see 11 | [https://mathml-refresh.github.io/](https://mathml-refresh.github.io/). 12 | -------------------------------------------------------------------------------- /docs/resources/commutative-diagram.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/w3c/mathml-core/967d2f7d73f787506a799135e3ad2268e97dddba/docs/resources/commutative-diagram.png -------------------------------------------------------------------------------- /docs/resources/math-tree.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | testcase 5 | 6 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | x 32 | 33 | 5 34 | 35 | 36 | 37 | α 38 | × 39 | 7 40 | 41 | 42 | 43 | 44 | 51 | 52 | 53 | 54 | -------------------------------------------------------------------------------- /docs/resources/mathml-example-gamma.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/w3c/mathml-core/967d2f7d73f787506a799135e3ad2268e97dddba/docs/resources/mathml-example-gamma.png -------------------------------------------------------------------------------- /docs/resources/mathml-tree.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/w3c/mathml-core/967d2f7d73f787506a799135e3ad2268e97dddba/docs/resources/mathml-tree.png -------------------------------------------------------------------------------- /docs/resources/mathml3-vs-core.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/w3c/mathml-core/967d2f7d73f787506a799135e3ad2268e97dddba/docs/resources/mathml3-vs-core.png -------------------------------------------------------------------------------- /examples/container.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Example container 5 | 6 | 21 | 22 | 23 |
24 | 32 | 33 | 34 | -------------------------------------------------------------------------------- /examples/example-anonymous-mrow-nodes.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | | 4 | 5 | 6 | 7 | x 8 | 9 | 10 | ( 11 | 12 | 5 13 | 3 14 | 15 | ) 16 | 17 | 18 | 19 | 20 | 21 | 7 22 | + 23 | 2 24 | 25 | 26 | 27 | y 28 | 29 | 30 | 31 | | 32 | 33 | 34 | 0 35 | 36 | -------------------------------------------------------------------------------- /examples/example-anonymous-mrow-nodes.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/w3c/mathml-core/967d2f7d73f787506a799135e3ad2268e97dddba/examples/example-anonymous-mrow-nodes.png -------------------------------------------------------------------------------- /examples/example-dir.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 𞸎 4 | + 5 | 6 | 𞸑 7 | 8 | ٢ 9 | 10 | 𞸟 11 | + 12 | ١ 13 | 14 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /examples/example-dir.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/w3c/mathml-core/967d2f7d73f787506a799135e3ad2268e97dddba/examples/example-dir.png -------------------------------------------------------------------------------- /examples/example-display.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | [ 5 | 6 | 11 | 12 12 | 34 13 | 56 14 | 7 15 | 8 16 | 9 17 | 18 | 19 | ] 20 | 21 | α 22 | 23 | 24 | -------------------------------------------------------------------------------- /examples/example-display.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/w3c/mathml-core/967d2f7d73f787506a799135e3ad2268e97dddba/examples/example-display.png -------------------------------------------------------------------------------- /examples/example-displaystyle-scriptlevel.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | A 5 | 6 | 7 | 8 | A 9 | 10 | 11 | 12 | A 13 | 14 | 15 | -------------------------------------------------------------------------------- /examples/example-displaystyle-scriptlevel.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/w3c/mathml-core/967d2f7d73f787506a799135e3ad2268e97dddba/examples/example-displaystyle-scriptlevel.png -------------------------------------------------------------------------------- /examples/example-dom-idl.html: -------------------------------------------------------------------------------- 1 | 7 | 8 | 9 | 10 | α 11 | 2 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /examples/example-dom-idl.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/w3c/mathml-core/967d2f7d73f787506a799135e3ad2268e97dddba/examples/example-dom-idl.png -------------------------------------------------------------------------------- /examples/example-font-size-scriptlevel.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | A 5 | 6 | A 7 | A 8 | 9 | 10 | + 11 | 12 | A 13 | A 14 | 15 | + 16 | 17 | 18 | A 19 | + 20 | 21 | A 22 | A 23 | 24 | 25 | A 26 | 27 | 28 | 29 | -------------------------------------------------------------------------------- /examples/example-font-size-scriptlevel.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/w3c/mathml-core/967d2f7d73f787506a799135e3ad2268e97dddba/examples/example-font-size-scriptlevel.png -------------------------------------------------------------------------------- /examples/example-html-svg.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 6 | 1 7 | 8 | 10 | 11 | 12 | 2 13 | r 14 | 15 | 1 16 | 17 | 18 | 19 | \sqrt{2r - 1} 20 | 21 | 22 | 23 | 24 |

25 | Fill the blank: 26 | 27 | 28 | 2 29 | 30 | 31 | 1 32 | 33 | = 34 | 3 35 | 36 |

37 | -------------------------------------------------------------------------------- /examples/example-html-svg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/w3c/mathml-core/967d2f7d73f787506a799135e3ad2268e97dddba/examples/example-html-svg.png -------------------------------------------------------------------------------- /examples/example-maction.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 1 5 | 2 6 | 7 | 8 | 1 9 | 3 10 | 11 | 12 | 1 13 | 4 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /examples/example-maction.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/w3c/mathml-core/967d2f7d73f787506a799135e3ad2268e97dddba/examples/example-maction.png -------------------------------------------------------------------------------- /examples/example-math-display-block.html: -------------------------------------------------------------------------------- 1 |
2 | This mathematical formula with a big summation and the number pi 3 | 4 | 5 | 6 | 7 | n=1 8 | + 9 | 10 | 11 | 1 12 | n2 13 | 14 | 15 | = 16 | 17 | π2 18 | 6 19 | 20 | 21 | is easy to prove. 22 |
23 | -------------------------------------------------------------------------------- /examples/example-math-display-block.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/w3c/mathml-core/967d2f7d73f787506a799135e3ad2268e97dddba/examples/example-math-display-block.png -------------------------------------------------------------------------------- /examples/example-math-display-inline.html: -------------------------------------------------------------------------------- 1 |
2 | This mathematical formula with a big summation and the number pi 3 | 4 | 5 | 6 | 7 | n=1 8 | + 9 | 10 | 11 | 1 12 | n2 13 | 14 | 15 | = 16 | 17 | π2 18 | 6 19 | 20 | 21 | is easy to prove. 22 |
23 | -------------------------------------------------------------------------------- /examples/example-math-display-inline.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/w3c/mathml-core/967d2f7d73f787506a799135e3ad2268e97dddba/examples/example-math-display-inline.png -------------------------------------------------------------------------------- /examples/example-math-shift.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | x 5 | 2 6 | 7 | 8 | 9 | 10 | x 11 | 2 12 | 13 | 14 | -------------------------------------------------------------------------------- /examples/example-math-shift.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/w3c/mathml-core/967d2f7d73f787506a799135e3ad2268e97dddba/examples/example-math-shift.png -------------------------------------------------------------------------------- /examples/example-math-style.html: -------------------------------------------------------------------------------- 1 |
2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | n 10 | = 11 | 1 12 | 13 | 14 | + 15 | 16 | 17 | 18 | 19 | 10 20 | 21 | n 22 | 4 23 | 24 | 25 | 26 | 27 | = 28 | 29 | 30 | π 31 | 2 32 | 33 | 3 34 | 35 | 36 | 37 | VS 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | n 46 | = 47 | 1 48 | 49 | 50 | + 51 | 52 | 53 | 54 | 55 | 10 56 | 57 | n 58 | 4 59 | 60 | 61 | 62 | 63 | = 64 | 65 | 66 | π 67 | 2 68 | 69 | 3 70 | 71 | 72 | 73 |
74 | -------------------------------------------------------------------------------- /examples/example-math-style.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/w3c/mathml-core/967d2f7d73f787506a799135e3ad2268e97dddba/examples/example-math-style.png -------------------------------------------------------------------------------- /examples/example-merror.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Syntax error: \frac{1} 5 | 6 | 3 7 | 8 | 9 | -------------------------------------------------------------------------------- /examples/example-merror.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/w3c/mathml-core/967d2f7d73f787506a799135e3ad2268e97dddba/examples/example-merror.png -------------------------------------------------------------------------------- /examples/example-mfrac.html: -------------------------------------------------------------------------------- 1 | 2 | 0 3 | + 4 | 5 | 1 6 | 2 7 | 8 | 9 | 10 | 1 11 | 2 12 | 13 | + 14 | 15 | 1 16 | 234 17 | 18 | 19 | 20 | ( 21 | 22 | 123 23 | 4 24 | 25 | ) 26 | 27 | 28 | -------------------------------------------------------------------------------- /examples/example-mfrac.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/w3c/mathml-core/967d2f7d73f787506a799135e3ad2268e97dddba/examples/example-mfrac.png -------------------------------------------------------------------------------- /examples/example-mi.html: -------------------------------------------------------------------------------- 1 | 2 | cos 3 | , 4 | c 5 | , 6 | c 7 | , 8 | 9 | 10 | -------------------------------------------------------------------------------- /examples/example-mi.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/w3c/mathml-core/967d2f7d73f787506a799135e3ad2268e97dddba/examples/example-mi.png -------------------------------------------------------------------------------- /examples/example-mmultiscripts.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 1 4 | 2 5 | 3 6 | 7 | 5 8 | 9 | 6 10 | 11 | 8 12 | 9 13 | 14 | 15 | -------------------------------------------------------------------------------- /examples/example-mmultiscripts.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/w3c/mathml-core/967d2f7d73f787506a799135e3ad2268e97dddba/examples/example-mmultiscripts.png -------------------------------------------------------------------------------- /examples/example-mn.html: -------------------------------------------------------------------------------- 1 | 2 | 3.141592653589793 3 | 4 | -------------------------------------------------------------------------------- /examples/example-mn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/w3c/mathml-core/967d2f7d73f787506a799135e3ad2268e97dddba/examples/example-mn.png -------------------------------------------------------------------------------- /examples/example-mo-1.html: -------------------------------------------------------------------------------- 1 | 2 | 1 3 | + 4 | 2 5 | + 6 | 3 7 | + 8 | 4 9 | + 10 | 5 11 | 12 | -------------------------------------------------------------------------------- /examples/example-mo-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/w3c/mathml-core/967d2f7d73f787506a799135e3ad2268e97dddba/examples/example-mo-1.png -------------------------------------------------------------------------------- /examples/example-mo-2.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 5 6 | 7 | 8 | 9 | 6 10 | 11 | 12 | 13 | 14 | 15 | 5 16 | 17 | 18 | 19 | 7 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /examples/example-mo-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/w3c/mathml-core/967d2f7d73f787506a799135e3ad2268e97dddba/examples/example-mo-2.png -------------------------------------------------------------------------------- /examples/example-mo-3.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /examples/example-mo-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/w3c/mathml-core/967d2f7d73f787506a799135e3ad2268e97dddba/examples/example-mo-3.png -------------------------------------------------------------------------------- /examples/example-mpadded.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 1 4 | 5 | 6 | 23456 7 | 78 8 | 9 | 10 | 9 11 | 12 | + 13 | 14 | 1 15 | 17 | 18 | 23456 19 | 78 20 | 21 | 22 | 9 23 | 24 | 25 | -------------------------------------------------------------------------------- /examples/example-mpadded.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/w3c/mathml-core/967d2f7d73f787506a799135e3ad2268e97dddba/examples/example-mpadded.png -------------------------------------------------------------------------------- /examples/example-mphantom.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | x 5 | + 6 | y 7 | + 8 | z 9 | 10 | 11 | x 12 | 13 | + 14 | y 15 | 16 | + 17 | z 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /examples/example-mphantom.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/w3c/mathml-core/967d2f7d73f787506a799135e3ad2268e97dddba/examples/example-mphantom.png -------------------------------------------------------------------------------- /examples/example-mrow.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | ( 5 | 6 | 7 | 1 8 | + 9 | 10 | 2 11 | 3 12 | 13 | 14 | 4 15 | 16 | ) 17 | 18 | 5 19 | 20 | 21 | -------------------------------------------------------------------------------- /examples/example-mrow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/w3c/mathml-core/967d2f7d73f787506a799135e3ad2268e97dddba/examples/example-mrow.png -------------------------------------------------------------------------------- /examples/example-ms.html: -------------------------------------------------------------------------------- 1 | 2 | s 3 | = 4 | "hello world" 5 | 6 | -------------------------------------------------------------------------------- /examples/example-ms.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/w3c/mathml-core/967d2f7d73f787506a799135e3ad2268e97dddba/examples/example-ms.png -------------------------------------------------------------------------------- /examples/example-mspace.html: -------------------------------------------------------------------------------- 1 | 2 | 1 3 | 5 | 6 | 7 | 2 8 | 10 | 11 | 12 | 3 13 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /examples/example-mspace.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/w3c/mathml-core/967d2f7d73f787506a799135e3ad2268e97dddba/examples/example-mspace.png -------------------------------------------------------------------------------- /examples/example-msqrt-mroot.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 1 6 | 2 7 | 8 | + 9 | 4 10 | 11 | 3 12 | 13 | + 14 | 0 15 | 16 | -------------------------------------------------------------------------------- /examples/example-msqrt-mroot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/w3c/mathml-core/967d2f7d73f787506a799135e3ad2268e97dddba/examples/example-msqrt-mroot.png -------------------------------------------------------------------------------- /examples/example-mstyle.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | * 4 | A 5 | 6 | 7 | 8 | 9 | * 10 | B 11 | 12 | 13 | * 14 | C 15 | 16 | 17 | 18 | * 19 | D 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /examples/example-mstyle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/w3c/mathml-core/967d2f7d73f787506a799135e3ad2268e97dddba/examples/example-mstyle.png -------------------------------------------------------------------------------- /examples/example-msub-msup-msubsup.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 1 4 | 2 5 | 6 | + 7 | 8 | 3 9 | 4 10 | 11 | + 12 | 13 | 5 14 | 6 15 | 7 16 | 17 | 18 | -------------------------------------------------------------------------------- /examples/example-msub-msup-msubsup.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/w3c/mathml-core/967d2f7d73f787506a799135e3ad2268e97dddba/examples/example-msub-msup-msubsup.png -------------------------------------------------------------------------------- /examples/example-mtext.html: -------------------------------------------------------------------------------- 1 | 2 | y 3 | = 4 | 5 | 6 | x 7 | 2 8 | 9 |  if  10 | 11 | x 12 | 13 | 1 14 | 15 |  and  16 | 2 17 |  otherwise. 18 | 19 | 20 | -------------------------------------------------------------------------------- /examples/example-mtext.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/w3c/mathml-core/967d2f7d73f787506a799135e3ad2268e97dddba/examples/example-mtext.png -------------------------------------------------------------------------------- /examples/example-munder-mover-munderover.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 1 4 | 2 5 | 6 | + 7 | 8 | 3 9 | 4 10 | 11 | + 12 | 13 | 5 14 | 6 15 | 7 16 | 17 | + 18 | 19 | 8 20 | 9 21 | 10 22 | 23 | + 24 | 25 | 11 26 | 12 27 | 13 28 | 29 | 30 | -------------------------------------------------------------------------------- /examples/example-munder-mover-munderover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/w3c/mathml-core/967d2f7d73f787506a799135e3ad2268e97dddba/examples/example-munder-mover-munderover.png -------------------------------------------------------------------------------- /examples/example-semantics.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 1 5 | 2 6 | 7 | \frac{1}{2} 8 | 9 | 10 | 11 | 1 12 | 2 13 | 14 | 15 | 16 | 17 | 20 | 22 | 32 | 33 | 34 | 35 |
37 |
1
38 |
39 |
2
40 |
41 |
42 |
43 |
44 | -------------------------------------------------------------------------------- /examples/example-semantics.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/w3c/mathml-core/967d2f7d73f787506a799135e3ad2268e97dddba/examples/example-semantics.png -------------------------------------------------------------------------------- /examples/example-style.html: -------------------------------------------------------------------------------- 1 |
2 | This mathematical formula with a big summation and the number pi 3 | 4 | 5 | 6 | 7 | n=1 8 | + 9 | 10 | 11 | 1 12 | n2 13 | 14 | 15 | = 16 | 17 | π2 18 | 6 19 | 20 | 21 | is easy to prove. 22 |
23 | -------------------------------------------------------------------------------- /examples/example-style.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/w3c/mathml-core/967d2f7d73f787506a799135e3ad2268e97dddba/examples/example-style.png -------------------------------------------------------------------------------- /examples/example-tables.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | A 4 | 2 5 | 6 | = 7 | 8 | ( 9 | 10 | 11 | 1 12 | 2 13 | 3 14 | 15 | 16 | 4 17 | 5 18 | 6 19 | 20 | 21 | 7 22 | 8 23 | 9 24 | 25 | 26 | ) 27 | 28 | 29 | -------------------------------------------------------------------------------- /examples/example-tables.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/w3c/mathml-core/967d2f7d73f787506a799135e3ad2268e97dddba/examples/example-tables.png -------------------------------------------------------------------------------- /examples/example-text-transform-math-auto.html: -------------------------------------------------------------------------------- 1 |
2 | 3 | 4 | 5 | x 6 | n 7 | 8 | + 9 | 10 | y 11 | n 12 | 13 | 14 | = 15 | 16 | z 17 | n 18 | 19 | 20 | VS 21 | 22 | 23 | 24 | x 25 | n 26 | 27 | + 28 | 29 | y 30 | n 31 | 32 | 33 | = 34 | 35 | z 36 | n 37 | 38 | 39 |
40 | -------------------------------------------------------------------------------- /examples/example-text-transform-math-auto.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/w3c/mathml-core/967d2f7d73f787506a799135e3ad2268e97dddba/examples/example-text-transform-math-auto.png -------------------------------------------------------------------------------- /examples/example-without-screenshot-font-information-leakage-1.html: -------------------------------------------------------------------------------- 1 | 10 |
SOMETEXT
11 |
SOMETEXT
12 | 22 | -------------------------------------------------------------------------------- /examples/example-without-screenshot-font-information-leakage-2.html: -------------------------------------------------------------------------------- 1 | 13 |
14 |
15 | 25 | -------------------------------------------------------------------------------- /examples/example-without-screenshot-font-information-leakage-3.html: -------------------------------------------------------------------------------- 1 | 14 |
15 |
SOMETEXT
16 |
SOMETEXT
17 |
18 | -------------------------------------------------------------------------------- /examples/example-without-screenshot-maction-statusline.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | Click me! 4 | ./this-is-a-safe-link.html 5 | 6 | 7 | -------------------------------------------------------------------------------- /examples/example-without-screenshot-math-in-canvas.html: -------------------------------------------------------------------------------- 1 | let svg = ` 2 | 3 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | `; 13 | let image = new Image(); 14 | image.width = 100; 15 | image.height = 100; 16 | image.onload = () => { 17 | let canvas = document.createElement('canvas'); 18 | canvas.width = 100; 19 | canvas.height = 100; 20 | canvas.style = "border: 1px solid black"; 21 | document.body.appendChild(canvas); 22 | let context = canvas.getContext("2d"); 23 | context.drawImage(image, 0, 0); 24 | }; 25 | image.src = `data:image/svg+xml;base64,${window.btoa(svg)}`; 26 | -------------------------------------------------------------------------------- /examples/generate.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python3 2 | 3 | from urllib.parse import quote 4 | import glob 5 | import os 6 | import re 7 | import subprocess 8 | import sys 9 | 10 | CHROMIUM_PATH = "chromium" 11 | IMAGE_MAGICK = "convert" 12 | 13 | def generateScreenShot(name): 14 | example = open(name, "rb") 15 | url = "file://%s/container.html?mathBase64=%s" % ( 16 | os.path.dirname(os.path.realpath(sys.argv[0])), 17 | quote(example.read()) 18 | ) 19 | print("Opening %s..." % url) 20 | image = name.replace(".html", ".png") 21 | subprocess.run([CHROMIUM_PATH, 22 | "--headless", 23 | "--disable-gpu", 24 | "--screenshot=%s" % image, 25 | "--enable-blink-features=MathMLCore", 26 | "--window-size=500x500", 27 | url]) 28 | components = subprocess.check_output([IMAGE_MAGICK, 29 | image, 30 | "-define", "connected-components:verbose=true", 31 | "-connected-components", "4", 32 | "-auto-level", 33 | "out.png"]).decode('ascii') 34 | os.remove("out.png") 35 | for line in components.splitlines(): 36 | match = re.match("^\s+0: ([0-9]+x[0-9]+\+0\+0)", str(line)) 37 | if match: 38 | subprocess.run([IMAGE_MAGICK, 39 | image, 40 | "-transparent", "white", 41 | "-crop", match.groups()[0], 42 | image]) 43 | break 44 | 45 | print("Generation assumes chromium is available.") 46 | print("Use the committed examples in git.\n") 47 | 48 | # Generate screenshot for the specified file example, or for all of them. 49 | if len(sys.argv) >= 2: 50 | generateScreenShot(sys.argv[1]) 51 | else: 52 | for name in glob.glob("example-*.html"): 53 | if not name.startswith("example-without-screenshot"): 54 | generateScreenShot(name) 55 | -------------------------------------------------------------------------------- /figures/bracesize.tex: -------------------------------------------------------------------------------- 1 | \documentclass[dvisvgm,multi=true]{standalone} 2 | \usepackage{mathmlcoresvg} 3 | \begin{document} 4 | 5 | %
Figure 5: Base size, size variants and glyph assembly for the left brace
6 | \begin{tikzpicture}[yscale=-1] 7 | 8 | \begin{scope}[xscale=.05,yscale=.05] 9 | 10 | \fill[blue] (11,109) .. controls (9,108) and (8,107) .. (8,102) .. controls (8,98) and (8,97) .. (6,95) .. controls (4,94) and (4,94) .. (6,93) .. controls (8,92) and (8,91) .. (8,86) .. controls (8,81) and (9,81) .. (11,80) .. controls (15,78) and (15,78) .. (13,80) .. controls (11,81) and (10,83) .. (10,86) .. controls (10,89) and (10,92) .. (9,93) .. controls (7,94) and (7,95) .. (9,96) .. controls (10,97) and (10,99) .. (10,102) .. controls (10,106) and (11,107) .. (13,108) .. controls (15,110) and (14,110) .. (11,109); 11 | \draw[blue] (10,120) node[below]{Base Size}; 12 | 13 | \fill[green] (172,142) .. controls (166,138) and (165,135) .. (165,120) .. controls (165,105) and (164,101) .. (160,98) -- (157,96) -- (160,94) .. controls (164,90) and (165,86) .. (165,71) .. controls (165,56) and (166,53) .. (172,50) .. controls (175,47) and (176,47) .. (176,49) .. controls (176,49) and (175,50) .. (174,50) .. controls (173,51) and (171,52) .. (170,54) .. controls (169,57) and (168,59) .. (168,72) .. controls (168,87) and (168,90) .. (163,94) -- (160,96) -- (163,98) .. controls (168,102) and (168,104) .. (168,120) .. controls (168,132) and (169,134) .. (170,137) .. controls (171,139) and (173,141) .. (174,141) .. controls (175,142) and (176,142) .. (176,143) .. controls (176,144) and (175,144) .. (172,142); 14 | \fill[green] (136,129) .. controls (135,129) and (134,127) .. (132,126) .. controls (129,123) and (129,123) .. (129,112) .. controls (129,102) and (129,101) .. (127,99) .. controls (126,98) and (124,97) .. (123,97) .. controls (123,97) and (124,95) .. (126,93) -- (129,90) -- (129,79) .. controls (129,70) and (130,69) .. (132,66) .. controls (133,65) and (135,64) .. (136,63) .. controls (139,62) and (139,63) .. (136,65) -- (132,68) -- (132,79) .. controls (132,91) and (132,91) .. (129,93) -- (126,96) -- (129,99) -- (132,103) -- (132,113) .. controls (132,122) and (133,124) .. (134,126) .. controls (135,127) and (137,128) .. (137,128) .. controls (139,129) and (138,130) .. (136,129); 15 | \fill[green] (102,118) .. controls (99,116) and (98,115) .. (98,107) .. controls (98,100) and (98,100) .. (96,98) -- (93,96) -- (96,94) .. controls (98,92) and (98,91) .. (98,84) .. controls (98,79) and (99,76) .. (100,75) .. controls (102,74) and (105,72) .. (106,73) .. controls (106,73) and (106,74) .. (105,74) .. controls (102,74) and (100,77) .. (100,85) .. controls (100,90) and (100,92) .. (98,94) .. controls (96,96) and (96,96) .. (98,98) .. controls (100,99) and (100,101) .. (100,107) .. controls (100,115) and (101,116) .. (105,118) .. controls (107,118) and (107,119) .. (105,119) .. controls (104,119) and (103,118) .. (102,118); 16 | \draw[green] (125,145) node[below]{Size Variants}; 17 | 18 | \fill[gray] (274,199) .. controls (269,196) and (267,192) .. (267,184) .. controls (267,178) and (268,177) .. (269,177) .. controls (270,177) and (270,178) .. (270,184) .. controls (270,192) and (273,197) .. (276,198) .. controls (277,199) and (278,199) .. (278,200) .. controls (278,201) and (277,201) .. (274,199); 19 | \fill[gray] (268,151) .. controls (268,140) and (269,138) .. (270,138) .. controls (271,138) and (271,140) .. (271,151) .. controls (271,162) and (271,164) .. (270,164) .. controls (269,164) and (268,162) .. (268,151); 20 | \fill[gray] (267,118) .. controls (267,111) and (266,106) .. (262,103) -- (259,101) -- (262,99) .. controls (266,96) and (267,91) .. (267,83) .. controls (267,78) and (268,77) .. (269,77) .. controls (270,77) and (270,78) .. (270,84) .. controls (270,92) and (269,95) .. (265,99) -- (262,101) -- (265,103) .. controls (269,106) and (270,110) .. (270,118) .. controls (270,123) and (270,125) .. (269,125) .. controls (268,125) and (267,123) .. (267,118); 21 | \fill[gray](268,52) .. controls (268,41) and (269,39) .. (270,39) .. controls (271,39) and (271,41) .. (271,52) .. controls (271,63) and (271,65) .. (270,65) .. controls (269,65) and (268,63) .. (268,52); 22 | \fill[gray] (267,23) .. controls (267,14) and (269,11) .. (274,8) .. controls (277,5) and (278,5) .. (278,7) .. controls (278,7) and (277,8) .. (276,8) .. controls (273,9) and (270,15) .. (270,23) .. controls (270,28) and (270,30) .. (269,30) .. controls (268,30) and (267,28) .. (267,23); 23 | 24 | \draw[->,color=gray] (275,90) -- (310,90); 25 | \draw[->,color=gray] (275,100) -- (310,100); 26 | \draw[->,color=gray] (275,110) -- (310,110); 27 | 28 | \fill[red] (335,194) .. controls (328,190) and (328,190) .. (328,148) .. controls (328,107) and (328,106) .. (323,102) -- (320,100) -- (323,98) .. controls (328,93) and (328,92) .. (328,51) .. controls (328,10) and (328,10) .. (335,6) .. controls (338,3) and (339,3) .. (339,5) .. controls (339,5) and (338,6) .. (337,6) .. controls (336,7) and (334,8) .. (333,10) .. controls (331,13) and (331,15) .. (331,52) .. controls (331,93) and (331,93) .. (326,98) -- (323,100) -- (326,102) .. controls (331,106) and (331,106) .. (331,148) .. controls (331,185) and (331,186) .. (333,189) .. controls (334,191) and (336,193) .. (337,193) .. controls (338,194) and (339,194) .. (339,195) .. controls (339,196) and (338,196) .. (335,194) -- cycle; 29 | \draw[red] (330,200) node[below]{Glyph Assembly}; 30 | \end{scope} 31 | \end{tikzpicture} 32 | \end{document} 33 | -------------------------------------------------------------------------------- /figures/circlebox.tex: -------------------------------------------------------------------------------- 1 | \documentclass[dvisvgm,multi=true]{standalone} 2 | \usepackage{mathmlcoresvg} 3 | \begin{document} 4 | %
Figure 19: Box model for the circle 5 | \begin{tikzpicture}[yscale=-1] 6 | 7 | \fill[blue!20] 8 | (-5.803300858899106,-2.621320343559643) 9 | rectangle (5.803300858899106,2.621320343559643); 10 | 11 | \MathMLBox{-3.75}{0}{1.5}{1}{red}; 12 | 13 | \draw[black!20,line width=12] 14 | (0,0) ellipse (5.553300858899106 and 2.371320343559643); 15 | 16 | \draw[black!20] 17 | (-3.75,-1.5) rectangle (3.75,1.5); 18 | 19 | \draw[dashed,blue] 20 | (-6.303300858899106,-3.121320343559643) 21 | rectangle (6.303300858899106,3.121320343559643) 22 | (-6.303300858899106,0) -- (6.303300858899106,0); 23 | 24 | \draw[<->] (-6.303300858899106,0) -- 25 | (-6,0)node[below]{$\xi_8$} -- 26 | (-5.803300858899106,0); 27 | 28 | \draw[<->] (-5.803300858899106,0) -- 29 | (-5.5,0)node[below]{$\xi_8$} -- 30 | (-5.303300858899106,0); 31 | 32 | \draw[<->] (-1,-1.5) -- 33 | (-1,1)node[left]{Height} -- 34 | (-1,1.5); 35 | 36 | \draw[<->] (0,-2.371320343559643) -- 37 | (0,-1)node[right]{$\sqrt{2}$ Height} -- 38 | (0,2.371320343559643); 39 | 40 | \end{tikzpicture} 41 | 42 | \end{document} 43 | -------------------------------------------------------------------------------- /figures/generate-svg: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | if [ "$#" -lt 1 ]; then 4 | LIST=*.tex 5 | GENERATE_SVG=true 6 | echo "" > svgtest.html 7 | else 8 | GENERATE_SVG=false 9 | LIST=$@ 10 | fi 11 | 12 | for i in $LIST 13 | do 14 | echo $i 15 | if [ "$GENERATE_SVG" = true ]; then 16 | echo "

${i/.tex/}

" >> svgtest.html 17 | fi 18 | latex $i 19 | dvisvgm --font-format=woff ${i/.tex/} 20 | done 21 | rm -f *.{aux,dvi,log} 22 | -------------------------------------------------------------------------------- /figures/horizontal-tb-ltr.tex: -------------------------------------------------------------------------------- 1 | \documentclass[dvisvgm,multi=true]{standalone} 2 | \usepackage{mathmlcoresvg} 3 | \begin{document} 4 | 5 | \begin{tikzpicture}[yscale=-1.5,xscale=1.5] 6 | \draw[->] (0,0) -- (7,0) node[below] {inline axis (towards line-right)}; 7 | \draw[->] (0,0) -- (0,3) node[above right] {block axis (towards line-under)}; 8 | \MathMLBox{0}{0}{1}{1}{blue} 9 | \MathMLBoxMetrics{0}{0}{1}{1}{blue}{above}{right}{left} 10 | \end{tikzpicture} 11 | 12 | \end{document} 13 | -------------------------------------------------------------------------------- /figures/horizontal-tb-rtl.tex: -------------------------------------------------------------------------------- 1 | \documentclass[dvisvgm,multi=true]{standalone} 2 | \usepackage{mathmlcoresvg} 3 | \begin{document} 4 | 5 | \begin{tikzpicture}[yscale=-1.5,xscale=1.5] 6 | \draw[->] (5,0) -- (-4,0) node[below right] {inline axis (towards line-left)}; 7 | \draw[->] (5,0) -- (5,3) node[above left] {block axis (towards line-under)}; 8 | \MathMLBox{0}{0}{1}{1}{blue} 9 | \MathMLBoxMetrics{0}{0}{1}{1}{blue}{above}{right}{left} 10 | \end{tikzpicture} 11 | 12 | \end{document} 13 | -------------------------------------------------------------------------------- /figures/horizstrikebox.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | ξ 58 | 8 59 | 60 | 61 | 62 | 63 | -------------------------------------------------------------------------------- /figures/horizstrikebox.tex: -------------------------------------------------------------------------------- 1 | \documentclass[dvisvgm,multi=true]{standalone} 2 | \usepackage{mathmlcoresvg} 3 | \begin{document} 4 | %
Figure 17: Box model for the horizontalstrike 5 | \begin{tikzpicture}[yscale=-1] 6 | 7 | \fill[blue!10] (0,-1.5) -- (7.5,-1.5) -- (7.5,1.5) -- (0,1.5) -- cycle; 8 | 9 | \MathMLBox{0}{0}{1.5}{1}{red}; 10 | 11 | \fill[black!20] (0,-.25) -- (7.5,-.25) -- (7.5,.25) -- (0,.25) -- cycle; 12 | 13 | \draw[dashed,blue](0,-2) -- (7.5,-2) -- (7.5,2) -- (0,2) -- cycle 14 | (0,0) -- (7.5,0); 15 | 16 | \draw[<->] (1,-.25) -- (1,0) node[right]{$\xi_8$} -- (1,.25); 17 | \end{tikzpicture} 18 | 19 | \end{document} 20 | -------------------------------------------------------------------------------- /figures/italcorr.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | ItalicCorrection 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | BoundingBo 44 | x 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | ItalicCorrection 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | BoundingBo 80 | x 81 | 82 | 83 | 84 | 85 | 86 | 87 | -------------------------------------------------------------------------------- /figures/italcorr.tex: -------------------------------------------------------------------------------- 1 | \documentclass[dvisvgm,multi=true]{standalone} 2 | \usepackage{mathmlcoresvg} 3 | \begin{document} 4 | 5 | %
Figure 2: Examples of italic correction for italic f and large integral
6 | \begin{tikzpicture}[yscale=-1] 7 | 8 | \begin{scope}[xscale=.1,yscale=.1] 9 | \fill[black] (1,40) .. controls (0,38) and (3,36) .. (4,38) .. controls (4,38) and (4,42) .. (6,40) .. controls (8,38) and (8,34) .. (9,32) .. controls (11,26) and (12,20) .. (14,15) .. controls (13,13) and (9,14) .. (12,12) .. controls (13,11) and (15,10) .. (16,7) .. controls (17,4) and (21,0) .. (25,1) .. controls (27,1) and (28,3) .. (27,5) .. controls (25,7) and (25,2) .. (23,2) .. controls (21,3) and (20,5) .. (20,7) .. controls (19,8) and (18,11) .. (20,12) .. controls (22,12) and (22,14) .. (20,14) .. controls (18,14) and (17,16) .. (17,18) .. controls (15,25) and (13,32) .. (10,38) .. controls (8,41) and (5,42) .. (2,41) .. controls (1,41) and (1,40) .. (1,40) -- cycle; 10 | \draw[black,dashed] (10,0) -- (30,0) -- (20,42) -- (0,42) -- cycle; 11 | \draw[red,->] (20,42) node[below]{Italic Correction} -- (30,42); 12 | \draw[blue] (0,.5) -- (30,.5) -- 13 | (30,20) node[right]{Bounding Box} -- 14 | (30,41.5) -- (0,41.5) -- cycle; 15 | \end{scope} 16 | 17 | \begin{scope}[shift={(0,5)},xscale=.1,yscale=.1] 18 | \fill[black] (3,110) .. controls (1,104) and (9,106) .. (8,108) .. controls (13,103) and (13,95) .. (15,88) .. controls (22,62) and (28,35) .. (36,9) .. controls (37,3) and (52,-1) .. (48,7) .. controls (44,9) and (44,1) .. (41,7) .. controls (38,15) and (37,23) .. (34,31) .. controls (28,55) and (23,79) .. (16,102) .. controls (14,106) and (8,114) .. (3,110) -- cycle; 19 | \draw[black,dashed] (30,0) -- (52,0) -- (22,112) -- (0,112) -- cycle; 20 | \draw[red,->] (22,112) node[below]{Italic Correction} -- (52,112); 21 | 22 | \draw[blue] (0,.5) -- (52,.5) -- 23 | (52,55) node[right]{Bounding Box} -- 24 | (52,111.5) -- (0,111.5) -- cycle; 25 | 26 | \end{scope} 27 | \end{tikzpicture} 28 | 29 | \end{document} 30 | -------------------------------------------------------------------------------- /figures/leftbox.tex: -------------------------------------------------------------------------------- 1 | \documentclass[dvisvgm,multi=true]{standalone} 2 | \usepackage{mathmlcoresvg} 3 | \begin{document} 4 | %
Figure 14: Box model for the left 5 | \begin{tikzpicture}[yscale=-1] 6 | 7 | \fill[blue!10] (-.5,-3.5) -- (9.5,-3.5) -- 8 | (9.5,3.5) -- (-.5,3.5) -- cycle; 9 | \MathMLBox{2}{0}{1.5}{1}{red} 10 | 11 | \fill[black!20] (0,-3.5) -- (.5,-3.5) -- (.5,3.5) -- (0,3.5) -- cycle; 12 | 13 | \draw[dashed,blue](-.5,-3.5) -- (9.5,-3.5) -- (9.5,3.5) -- 14 | (-.5,3.5) -- cycle (0,0) -- (9.5,0); 15 | 16 | \draw[<->] (2,-3) -- (2,-2.5) node[right]{Overbar Vertical Gap} -- (2,-1.5); 17 | \draw[<->] (2,-3) -- (2,-3.25) 18 | node[right]{Overbar Rule Thickness} -- (2,-3.5); 19 | 20 | \draw[<->] (.5,0) -- (1.25,0)node[below]{$3\xi_8$} -- (2,0); 21 | \draw[<->] (.5,0) -- (.25,0)node[below]{$\xi_8$} -- (0,0); 22 | \draw[<->] (-.5,0) -- (-.25,0)node[below]{$\xi_8$} -- (0,0); 23 | 24 | \draw[<->] (2,3) -- (2,2.5) node[right]{Underbar Vertical Gap} -- (2,1.5); 25 | \draw[<->] (2,3) -- (2,3.25) 26 | node[right]{Underbar Rule Thickness} -- (2,3.5); 27 | \end{tikzpicture} 28 | 29 | \end{document} 30 | -------------------------------------------------------------------------------- /figures/mathmlcoresvg.sty: -------------------------------------------------------------------------------- 1 | \usepackage{tikz} 2 | \usepackage{amsmath} 3 | 4 | \usepackage{xcolor} 5 | \definecolor{red}{RGB}{200,0,0} 6 | \definecolor{green}{RGB}{0,200,0} 7 | \definecolor{blue}{RGB}{0,0,200} 8 | \definecolor{cyan}{RGB}{0,200,200} 9 | \definecolor{orange}{RGB}{200,100,0} 10 | 11 | \newcommand{\MathMLBox}[5]{ 12 | \begin{scope}[shift={(#1,#2)},xscale=#3,yscale=#4,color=#5] 13 | \fill[color=#5!10] 14 | (0,-1.5) -- (5,-1.5) -- (5,1.5) -- (0,1.5) -- cycle; 15 | \draw (0,-2) -- (5,-2) -- (5,2) -- (0,2) -- cycle; 16 | \draw (0,0) -- (5,0); 17 | \end{scope}} 18 | 19 | \newcommand{\MathMLBoxMetrics}[8]{ 20 | \begin{scope}[shift={(#1,#2)},xscale=#3,yscale=#4,color=#5] 21 | \draw[<->] (0,-.5) -- (2,-.5) node[#6]{inline size} -- (5,-.5); 22 | \draw[->] (4.7, 0) -- (4.7,-1) node[#7]{ink line-ascent} -- (4.7,-1.5); 23 | \draw[<-] (4.5, 0) -- (4.5, 1) node[#7]{ink line-descent} -- (4.5,1.5); 24 | \draw[->] (3.7, 0) -- (3.7,-1.5) node[#8]{line-ascent} -- (3.7,-2); 25 | \draw[<-] (3.5, 0) -- (3.5,1.5) node[#8]{line-descent} -- (3.5,2); 26 | \end{scope}} 27 | -------------------------------------------------------------------------------- /figures/mfracbox.tex: -------------------------------------------------------------------------------- 1 | \documentclass[dvisvgm,multi=true]{standalone} 2 | \usepackage{mathmlcoresvg} 3 | \begin{document} 4 | %
Figure 9: Box model for the mfrac element
5 | \begin{tikzpicture}[yscale=-1] 6 | \fill[blue!10] (0,-6.5) -- (12.5,-6.5) -- (12.5,2.5) -- (0,2.5) -- cycle; 7 | \MathMLBox{0}{-5}{2.5}{1}{red} 8 | \MathMLBox{3.75}{1}{1}{1}{green} 9 | \draw[dashed,blue] (0,-7) -- (12.5,-7) -- (12.5,3) -- (0,3) -- cycle 10 | (0,0) -- (12.5,0); 11 | \fill[black!20] (0,-2.5) -- (12.5,-2.5) -- (12.5,-1.5) -- (0,-1.5) -- cycle; 12 | \draw[black] (0,-2.5) -- (12.5,-2.5) -- (12.5,-1.5) -- (0,-1.5) -- cycle 13 | (0,-2) -- (12.5,-2); 14 | \draw[->,blue] (-.5,0) -- (-.5,-1) node[left]{Axis Height} -- (-.5,-2); 15 | \draw[<->,black] (-1.5,-2.5) -- 16 | (-1.5,-2) node[left]{Actual Linethickness} -- (-1.5,-1.5); 17 | \draw[->,red] (-.25,0) -- (-.25,-4) 18 | node[left]{Numerator Shift} -- (-.25,-5); 19 | \draw[->,green] (-.25,0) -- (-.25,.5) 20 | node[left]{Denominator Shift} -- (-.25,1); 21 | \draw[->,red] (5,-2.5) -- (5,-3.5) node[left]{Numerator Gap}; 22 | \draw[->,green] (5,-1.5) -- (5,-.5) node[left]{Denominator Gap}; 23 | \end{tikzpicture} 24 | 25 | \end{document} 26 | -------------------------------------------------------------------------------- /figures/mfracnobarbox.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | Stack 50 | T 51 | op 52 | Shift 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | Stack 72 | Bottom 73 | Shift 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | Stack 104 | Gap 105 | 106 | 107 | 108 | 109 | 110 | 111 | -------------------------------------------------------------------------------- /figures/mfracnobarbox.tex: -------------------------------------------------------------------------------- 1 | \documentclass[dvisvgm,multi=true]{standalone} 2 | \usepackage{mathmlcoresvg} 3 | \begin{document} 4 | %
Figure 10: Box model for the mfrac element without bar
5 | \begin{tikzpicture}[yscale=-1] 6 | \fill[blue!10] (0,-6.5) -- (12.5,-6.5) -- (12.5,2.5) -- (0,2.5) -- cycle; 7 | \MathMLBox{0}{-5}{2.5}{1}{red} 8 | \MathMLBox{3.75}{1}{1}{1}{green} 9 | \draw[dashed,blue] (0,-7) -- (12.5,-7) -- (12.5,3) -- (0,3) -- cycle 10 | (0,0) -- (12.5,0); 11 | \draw[->,red] (-.25,0) -- (-.25,-4) 12 | node[left]{Stack Top Shift} -- (-.25,-5); 13 | \draw[->,green] (-.25,0) -- (-.25,.5) 14 | node[left]{Stack Bottom Shift} -- (-.25,1); 15 | \draw[<->,blue] (5,-3.5) -- (5,-1.5) node[left]{Stack Gap} -- 16 | (5,-.5); 17 | \end{tikzpicture} 18 | 19 | \end{document} 20 | -------------------------------------------------------------------------------- /figures/mmultiscriptsbox.tex: -------------------------------------------------------------------------------- 1 | \documentclass[dvisvgm,multi=true]{standalone} 2 | \usepackage{mathmlcoresvg} 3 | \begin{document} 4 | %
Figure 24: Box model for the mmultiscripts element
5 | \begin{tikzpicture}[yscale=-.75,xscale=.75] 6 | 7 | \fill[blue!10](-15.5,3.75) rectangle (20.5,-3.75); 8 | 9 | \draw[dashed,blue](-16,4) rectangle(21,-4) 10 | (-16,0)--(21,0); 11 | 12 | \MathMLBox{0}{0}{1}{1}{red}; 13 | 14 | \MathMLBox{5}{-3}{1.5}{.5}{green}; 15 | \draw[<->] (12.5,-3) -- (13,-3); 16 | 17 | \MathMLBox{5}{3}{1}{.5}{green}; 18 | \draw[<->] (10,3) -- (10.5,3); 19 | 20 | \begin{scope}[shift={(8,0)}] 21 | \MathMLBox{5}{-3}{1.5}{.5}{green}; 22 | \draw[<->] (12.5,-3) -- (13,-3); 23 | 24 | \MathMLBox{5}{3}{1}{.5}{green}; 25 | \draw[<->] (10,3) -- (10.5,3); 26 | \end{scope} 27 | 28 | \begin{scope}[shift={(-12.5,0)}] 29 | \MathMLBox{5}{-3}{1.5}{.5}{green}; 30 | \draw[<->] (4.5,-3) -- (5,-3); 31 | 32 | \begin{scope}[shift={(2.5,0)}] 33 | \MathMLBox{5}{3}{1}{.5}{green}; 34 | \draw[<->] (4.5,3) -- (5,3); 35 | \end{scope} 36 | \end{scope} 37 | 38 | \begin{scope}[shift={(-20.5,0)}] 39 | \MathMLBox{5}{-3}{1.5}{.5}{green}; 40 | \draw[<->] (4.5,-3) -- (5,-3); 41 | 42 | \begin{scope}[shift={(2.5,0)}] 43 | \MathMLBox{5}{3}{1}{.5}{green}; 44 | \draw[<->] (4.5,3) -- (5,3); 45 | \end{scope} 46 | \end{scope} 47 | 48 | \end{tikzpicture} 49 | 50 | \end{document} 51 | -------------------------------------------------------------------------------- /figures/moverbox.tex: -------------------------------------------------------------------------------- 1 | \documentclass[dvisvgm,multi=true]{standalone} 2 | \usepackage{mathmlcoresvg} 3 | \begin{document} 4 | %
Figure 23: Box model for the munderover element
5 | \begin{tikzpicture}[yscale=-1] 6 | 7 | \fill[blue!10](0,-4.25) rectangle (5,1.5); 8 | 9 | \MathMLBox{1.75}{-3.5}{.5}{.5}{green}; 10 | \draw[green,dashed](3,-4.5)--(3,-2.5); 11 | 12 | \MathMLBox{0}{0}{1}{1}{red}; 13 | \draw[red,dashed](2.5,-4.5)--(2.5,-2); 14 | 15 | \draw[<->] (4,-1.5) -- (4,-2.5)node[right]{OverGap} -- (4,-2.75); 16 | \draw[<->] (2,-1.5) -- (2,-3)node[left]{OverShift} -- (2,-3.5); 17 | \draw[<->] (2.5,-4.25) -- 18 | (2.5,-4.5)node[left]{OverExtraAscender} -- (2.5,-4.75); 19 | 20 | \draw[dashed,blue](0,-4.75) rectangle (5,2) 21 | (0,0)--(5,0); 22 | 23 | \draw[orange,->] (2,-.5) -- (3,-.5); 24 | \draw[orange] (2.5,-1)node{LargeOpItalicCorrection} ; 25 | \draw[orange,dashed](3,-2.5) --(3,-.5); 26 | 27 | \end{tikzpicture} 28 | 29 | \end{document} 30 | -------------------------------------------------------------------------------- /figures/mpaddedbox.tex: -------------------------------------------------------------------------------- 1 | \documentclass[dvisvgm,multi=true]{standalone} 2 | \usepackage{mathmlcoresvg} 3 | \begin{document} 4 | %
Figure 13: Box model for the mpadded element
5 | \begin{tikzpicture}[yscale=-1] 6 | \fill[blue!10] (0,-6) -- (12,-6) -- (12,2) -- (0,2) -- cycle; 7 | \draw[dashed,blue] (0,-6) -- (12,-6) -- (12,2) -- (0,2) -- cycle 8 | (0,0)--(12,0); 9 | 10 | \begin{scope}[shift={(2,-3)}] 11 | \MathMLBox{0}{0}{1}{1}{red} 12 | \draw[<->] (0,-.5) -- (2,-.5) node[below]{Inner Width} -- (5,-.5); 13 | \draw[<-] (5.25, -2) -- 14 | (5.25,-1) node[right]{Inner Height} -- (5.25,0); 15 | \draw[<-] (5.5, 2) -- 16 | (5.5,1) node[right]{Inner Depth} -- (5.5,0); 17 | \end{scope} 18 | 19 | \draw[<->] (0,1) -- (6,1) node[below]{Width} -- (12,1); 20 | 21 | \draw[<-] (12.25, -6) -- 22 | (12.25,-3) node[right]{Height} -- (12.25,0); 23 | \draw[<-] (12.5, 2) -- 24 | (12.5,1) node[right]{Depth} -- (12.5,0); 25 | 26 | \draw[->] (0, 0) -- (1,0) node[below]{Lspace} -- (2,0); 27 | 28 | \draw[->] (2, 0) -- (2,-2) node[left]{Voffset} -- (2,-3); 29 | \end{tikzpicture} 30 | 31 | \end{document} 32 | -------------------------------------------------------------------------------- /figures/mrootbox.tex: -------------------------------------------------------------------------------- 1 | \documentclass[dvisvgm,multi=true]{standalone} 2 | \usepackage{mathmlcoresvg} 3 | \begin{document} 4 | %
Figure 12: Box model for the mroot element
5 | \begin{tikzpicture}[yscale=-1] 6 | \fill[blue!10] (0,-3) -- (11,-3) -- (11,3.75) -- (0,3.75) -- cycle; 7 | 8 | \begin{scope}[shift={(6,0)}] 9 | \fill[green!30] 10 | (5,-2.5) -- (-2,-2.5) -- (-2,2) -- 11 | (-4,-1) -- (-4.7,-.3) -- (-2.7,2.7) -- (-2,3.75) -- (-1,3.75) -- 12 | (-1,-1.75) -- (5,-1.75) -- (5,-2.5) 13 | (-.5,-.5) -- (5,-.5) -- (5,3) -- (-.5,3) -- cycle; 14 | \draw[green] (-4.7,-3) -- (5,-3) -- (5,3.75) -- (-4.7,3.75) -- cycle 15 | (-4.7,1)--(5,1); 16 | \end{scope} 17 | 18 | \MathMLBox{1}{-1.5}{.5}{1}{red} 19 | 20 | \draw[dashed,blue] (0,-3.5) -- (11,-3.5) -- (11,3.75) -- (0,3.75) -- cycle 21 | (0,1)--(11,1); 22 | 23 | \draw[dashed,orange](11,3.75)--(-2,3.75) node[left]{Bottom (0\%)}; 24 | \draw[dashed,orange](11,0)--(-2,0) node[left] 25 | {Radical Degree Bottom Raise Percent}; 26 | \draw[dashed,orange](11,-2.5)--(-2,-2.5) node[left]{Top (100\%)}; 27 | 28 | \draw[->,black] (0,.25) -- (.5,.25) node[left,rotate=90] 29 | {Radical Kerning Before Degree} -- (1,.25); 30 | \draw[->,black] (3.5,.25) -- (3,.25) node[left,rotate=90] 31 | {Radical Kerning After Degree} -- (1.3,.25); 32 | \end{tikzpicture} 33 | 34 | \end{document} 35 | -------------------------------------------------------------------------------- /figures/mrowbox.tex: -------------------------------------------------------------------------------- 1 | \documentclass[dvisvgm,multi=true]{standalone} 2 | \usepackage{mathmlcoresvg} 3 | \begin{document} 4 | %
Figure 8: Box model for the mrow element
5 | \begin{tikzpicture}[yscale=-1] 6 | \MathMLBox{0}{0}{.5}{1.5}{cyan} 7 | \draw(1,-1) node {$\text{child}_1$}; 8 | 9 | \MathMLBox{2.5}{0}{.5}{1.2}{blue} 10 | \draw(3.5,-1) node {$\text{child}_2$}; 11 | 12 | \MathMLBox{5}{0}{.5}{1.2}{cyan} 13 | \draw(6,-1) node {$\text{child}_3$}; 14 | 15 | \MathMLBox{7.5}{0}{1.5}{1}{red} 16 | \fill[black] (9,-.5) rectangle (13.5,.5) 17 | (11.25,-1) circle (.5) (11.25,1) circle (.5); 18 | \draw[<->,red] (7.5,3) -- (8.5,3) node[below]{Leading Space} -- (9,3); 19 | \draw[<->,red] (13.5,3) -- (14.5,3) node[below]{Trailing Space} -- (15,3); 20 | 21 | \MathMLBox{15}{0}{.5}{1.4}{cyan} 22 | \draw(16,-1) node {$\text{child}_5$}; 23 | 24 | \MathMLBox{17.5}{0}{.4}{1.35}{green} 25 | \begin{scope}[shift=({17.5,-2.1})] 26 | \begin{scope}[xscale=.1,yscale=.1] 27 | \fill[black] (1,40) .. controls (0,38) and (3,36) .. (4,38) .. controls (4,38) and (4,42) .. (6,40) .. controls (8,38) and (8,34) .. (9,32) .. controls (11,26) and (12,20) .. (14,15) .. controls (13,13) and (9,14) .. (12,12) .. controls (13,11) and (15,10) .. (16,7) .. controls (17,4) and (21,0) .. (25,1) .. controls (27,1) and (28,3) .. (27,5) .. controls (25,7) and (25,2) .. (23,2) .. controls (21,3) and (20,5) .. (20,7) .. controls (19,8) and (18,11) .. (20,12) .. controls (22,12) and (22,14) .. (20,14) .. controls (18,14) and (17,16) .. (17,18) .. controls (15,25) and (13,32) .. (10,38) .. controls (8,41) and (5,42) .. (2,41) .. controls (1,41) and (1,40) .. (1,40) -- cycle; 28 | \draw[black] (10,0) -- (30,0) -- (20,42) -- (0,42) -- cycle; 29 | \draw[green,->] (20,42) node[below]{Italic Correction} -- (30,42); 30 | \end{scope} 31 | \end{scope} 32 | 33 | \MathMLBox{20.5}{0}{.5}{1.1}{blue} 34 | \draw(21.5,-1) node {$\text{child}_7$}; 35 | 36 | \MathMLBox{23}{0}{.5}{1.2}{cyan} 37 | \draw(24,-1) node {$\text{child}_8$}; 38 | 39 | \draw[dashed,blue] (0,-4) rectangle (25.5,4) (0,0)--(25.5,0); 40 | \end{tikzpicture} 41 | 42 | \end{document} 43 | -------------------------------------------------------------------------------- /figures/mspacebox.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | Width 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | Height 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | Depth 79 | 80 | 81 | 82 | 83 | -------------------------------------------------------------------------------- /figures/mspacebox.tex: -------------------------------------------------------------------------------- 1 | \documentclass[dvisvgm,multi=true]{standalone} 2 | \usepackage{mathmlcoresvg} 3 | \begin{document} 4 | %
Figure 7: Box model for the mspace element
5 | \begin{tikzpicture}[yscale=-1] 6 | \fill[blue!10] (0,-6) -- (12,-6) -- (12,2) -- (0,2) -- cycle; 7 | \draw[dashed,blue] (0,-6) -- (12,-6) -- (12,2) -- (0,2) -- cycle 8 | (0,0)--(12,0); 9 | 10 | \draw[<->] (0,1) -- (6,1) node[below]{Width} -- (12,1); 11 | 12 | \draw[<-] (12.25, -6) -- 13 | (12.25,-3) node[right]{Height} -- (12.25,0); 14 | \draw[<-] (12.5, 2) -- 15 | (12.5,1) node[right]{Depth} -- (12.5,0); 16 | \end{tikzpicture} 17 | 18 | \end{document} 19 | -------------------------------------------------------------------------------- /figures/msqrtbox.tex: -------------------------------------------------------------------------------- 1 | \documentclass[dvisvgm,multi=true]{standalone} 2 | \usepackage{mathmlcoresvg} 3 | \begin{document} 4 | %
Figure 11: Box model for the msqrt element
5 | \begin{tikzpicture}[yscale=-1] 6 | \fill[blue!10] (-4.7,-2.5) -- (12.5,-2.5) -- 7 | (12.5,3.75) -- (-4.7,3.75) -- cycle; 8 | 9 | \fill[black!20] (0,-2.5) -- (12.5,-2.5) -- (12.5,-1.5) -- (0,-1.5) -- cycle; 10 | 11 | \fill[green!30] 12 | (0,-2.5) -- (-2,-2.5) -- (-2,2) -- 13 | (-4,-1) -- (-4.7,-.3) -- (-2.7,2.7) -- (-2,3.75) -- (-1,3.75) -- 14 | (-1,-1.5) -- (0,-1.5) -- (0,-2.5); 15 | \draw[green] (-4.7,-2.5) -- (0,-2.5) -- (0,3.75) -- (-4.7,3.75) -- cycle; 16 | 17 | \MathMLBox{0}{1}{2.5}{1}{red} 18 | 19 | \draw[dashed,blue] (-4.7,-3.5) -- (12.5,-3.5) -- 20 | (12.5,3.75) -- (-4.7,3.75) -- cycle 21 | (-4.7,1) -- (12.5,1); 22 | 23 | \draw[<->,blue] (4.5,-3.5) -- 24 | (4.5,-3) node[left]{Radical Extra Ascender} -- (4.5,-2.5); 25 | 26 | \draw[<->,black] (4.5,-2.5) -- 27 | (4.5,-2) node[left]{Radical Rule Thickness} -- (4.5,-1.5); 28 | 29 | \draw[<->,red] (4.5,-1.5) -- 30 | (4.5,-1) node[below left]{Radical Gap} -- (4.5,-.5); 31 | \end{tikzpicture} 32 | 33 | \end{document} 34 | -------------------------------------------------------------------------------- /figures/msubbox.tex: -------------------------------------------------------------------------------- 1 | \documentclass[dvisvgm,multi=true]{standalone} 2 | \usepackage{mathmlcoresvg} 3 | \begin{document} 4 | %
Figure 20: Box model for the msub element
5 | \begin{tikzpicture}[yscale=-1] 6 | 7 | \fill[blue!10](0,-1.5) rectangle (7.5,3.75); 8 | 9 | \MathMLBox{0}{0}{1}{1}{red}; 10 | 11 | \MathMLBox{4.5}{3}{.5}{.5}{green}; 12 | 13 | \draw[dashed,blue](0,-2) rectangle(7.5,4) 14 | (0,0)--(7.5,0); 15 | 16 | \draw[->] (5,0) -- (5,1)node[below,rotate=90]{SubShift} -- (5,3); 17 | 18 | \draw[orange,->] (5,0) -- (4.5,0); 19 | \draw[orange] (4.75, -.5) node{LargeOpItalicCorrection}; 20 | \draw[dashed,orange] (4.5,0) -- (4.5,3); 21 | 22 | \draw[<-] (6,0) -- (6,1)node[below,rotate=90]{SubTop} -- (6,2.25); 23 | 24 | \draw[<->] (7,3) -- (7.25,3)node[right,rotate=90]{SpaceAfterScript} -- (7.5,3); 25 | 26 | \draw[->] (1,1.5) -- (1,2)node[right]{SubscriptBaselineDrop} -- (1,3); 27 | \draw[dashed] (1,3) -- (4.5,3); 28 | \end{tikzpicture} 29 | 30 | \end{document} 31 | -------------------------------------------------------------------------------- /figures/msubsupbox.tex: -------------------------------------------------------------------------------- 1 | \documentclass[dvisvgm,multi=true]{standalone} 2 | \usepackage{mathmlcoresvg} 3 | \begin{document} 4 | %
Figure 22: Box model for the msubsup element
5 | \begin{tikzpicture}[yscale=-1] 6 | 7 | \fill[blue!10](0,5) rectangle (13,-3.75); 8 | 9 | \MathMLBox{0}{0}{1}{2.25}{red}; 10 | 11 | \MathMLBox{5}{-3}{1.5}{.5}{green}; 12 | 13 | \draw[dashed,blue](0,5.25) rectangle(13,-4.5) 14 | (0,0)--(13,0); 15 | 16 | \draw[->] (5.5,0) -- (5.5,-1)node[below,rotate=90]{SuperShift} -- (5.5,-3); 17 | 18 | \draw[->] (6.5,0) -- (6.5,-1.75)node[below,rotate=90]{SuperBottom} -- (6.5,-2.25); 19 | 20 | \draw[<->] (12.5,-3) -- (12.75,-3)node[left,rotate=90]{SpaceAfterScript} -- (13,-3); 21 | 22 | \MathMLBox{5}{4.25}{1}{.5}{green}; 23 | 24 | \draw[->] (5.75,0) -- (5.75,1)node[below,rotate=90]{SubShift} -- (5.75,4.25); 25 | 26 | \draw[->] (6.75,0) -- (6.75,1)node[below,rotate=90]{SubTop} -- (6.75,3.5); 27 | 28 | \draw[<->] (10,4.25) -- (10.25,4.25)node[right,rotate=90]{SpaceAfterScript} -- (10.5,4.25); 29 | 30 | \draw[<->] (8.5,-2.25) -- (8.5,-1)node[right]{SubSuperGap} -- (8.5,3.5); 31 | 32 | \draw[->] (1,-3.375) node[right]{SuperscriptBaselineDrop} -- (1,-3); 33 | \draw[dashed] (1,-3) -- (5,-3); 34 | 35 | \draw[->] (1,3.375) -- (1,3.75) node[right]{SubscriptBaselineDrop} -- (1,4.25); 36 | \draw[dashed] (1,4.25) -- (5,4.25); 37 | \end{tikzpicture} 38 | 39 | \end{document} 40 | -------------------------------------------------------------------------------- /figures/msupbox.tex: -------------------------------------------------------------------------------- 1 | \documentclass[dvisvgm,multi=true]{standalone} 2 | \usepackage{mathmlcoresvg} 3 | \begin{document} 4 | %
Figure 21: Box model for the msup element
5 | \begin{tikzpicture}[yscale=-1] 6 | 7 | \fill[blue!10](0,3.75) rectangle (8.5,-3.75); 8 | 9 | \MathMLBox{0}{0}{1}{2.5}{red}; 10 | 11 | \MathMLBox{5.5}{-3}{.5}{.5}{green}; 12 | 13 | \draw[dashed,blue](0,5) rectangle(8.5,-5) 14 | (0,0)--(8.5,0); 15 | 16 | \draw[->] (6,0) -- (6,-1)node[below,rotate=90]{SuperShift} -- (6,-3); 17 | 18 | \draw[orange,->] (5,0) -- 19 | (5.25,0)node[below]{ItalicCorrection} -- (5.5,0); 20 | \draw[dashed,orange] (5.5,0)--(5.5,-3); 21 | 22 | \draw[->] (7,0) -- (7,-1.5)node[below,rotate=90]{SuperBottom} -- (7,-2.25); 23 | 24 | \draw[<->] (8,-3) -- (8.25,-3)node[left,rotate=90]{SpaceAfterScript} -- (8.5,-3); 25 | 26 | \draw[->] (1,-3.75) -- (1,-3.5)node[right]{SuperscriptBaselineDrop} -- (1,-3); 27 | \draw[dashed] (1,-3) -- (5.5,-3); 28 | \end{tikzpicture} 29 | 30 | \end{document} 31 | -------------------------------------------------------------------------------- /figures/munderbox.tex: -------------------------------------------------------------------------------- 1 | \documentclass[dvisvgm,multi=true]{standalone} 2 | \usepackage{mathmlcoresvg} 3 | \begin{document} 4 | %
Box model for the munder element
5 | \begin{tikzpicture}[yscale=-1] 6 | 7 | \fill[blue!10](0,-1.5) rectangle (5,4.25); 8 | 9 | \MathMLBox{0.75}{3.5}{.5}{.5}{green}; 10 | \draw[green,dashed](2,4.5)--(2,2.5); 11 | 12 | \MathMLBox{0}{0}{1}{1}{red}; 13 | \draw[red,dashed](2.5,2)--(2.5,4.5); 14 | 15 | \draw[<->] (1,1.5) -- (1,2.5)node[left]{UnderGap} -- (1,2.75); 16 | \draw[<->] (3,1.5) -- (3,3)node[right]{UnderShift} -- (3,3.5); 17 | \draw[<->] (2.5,4.25) -- 18 | (2.5,4.5)node[right]{UnderExtraDescender} -- (2.5,4.75); 19 | 20 | \draw[dashed,blue](0,-2) rectangle (5,4.75) 21 | (0,0)--(5,0); 22 | 23 | \draw[orange,->] (2,-.5) -- (3,-.5); 24 | \draw[orange] (2.5,-1)node{LargeOpItalicCorrection} ; 25 | \draw[orange,dashed](2,2.5) -- (2,-.5); 26 | 27 | \end{tikzpicture} 28 | 29 | \end{document} 30 | -------------------------------------------------------------------------------- /figures/munderoverbox.tex: -------------------------------------------------------------------------------- 1 | \documentclass[dvisvgm,multi=true]{standalone} 2 | \usepackage{mathmlcoresvg} 3 | \begin{document} 4 | %
Figure 23: Box model for the munderover element
5 | \begin{tikzpicture}[yscale=-1] 6 | 7 | \fill[blue!10](0,-4.25) rectangle (5,4.25); 8 | 9 | \MathMLBox{0.75}{3.5}{.5}{.5}{green}; 10 | \draw[green,dashed](2,4.5)--(2,2.5); 11 | 12 | \MathMLBox{1.75}{-3.5}{.5}{.5}{green}; 13 | \draw[green,dashed](3,-4.5)--(3,-2.5); 14 | 15 | \MathMLBox{0}{0}{1}{1}{red}; 16 | \draw[red,dashed](2.5,-4.5)--(2.5,-2) (2.5,2)--(2.5,4.5); 17 | 18 | \draw[<->] (4,-1.5) -- (4,-2.5)node[right]{OverGap} -- (4,-2.75); 19 | \draw[<->] (2,-1.5) -- (2,-3)node[left]{OverShift} -- (2,-3.5); 20 | \draw[<->] (2.5,-4.25) -- 21 | (2.5,-4.5)node[left]{OverExtraAscender} -- (2.5,-4.75); 22 | 23 | \draw[<->] (1,1.5) -- (1,2.5)node[left]{UnderGap} -- (1,2.75); 24 | \draw[<->] (3,1.5) -- (3,3)node[right]{UnderShift} -- (3,3.5); 25 | \draw[<->] (2.5,4.25) -- 26 | (2.5,4.5)node[right]{UnderExtraDescender} -- (2.5,4.75); 27 | 28 | \draw[dashed,blue](0,-4.75) rectangle (5,4.75) 29 | (0,0)--(5,0); 30 | 31 | \draw[orange,->] (2,-.5) -- (3,-.5); 32 | \draw[orange] (2.5,-1)node{LargeOpItalicCorrection} ; 33 | \draw[orange,dashed](2,2.5) -- (2,-.5) (3,-2.5) --(3,-.5); 34 | 35 | \end{tikzpicture} 36 | 37 | \end{document} 38 | -------------------------------------------------------------------------------- /figures/roundedbox.tex: -------------------------------------------------------------------------------- 1 | \documentclass[dvisvgm,multi=true]{standalone} 2 | \usepackage{mathmlcoresvg} 3 | \begin{document} 4 | %
Figure 16: Box model for the roundedbox 5 | \begin{tikzpicture}[yscale=-1] 6 | 7 | \fill[blue!10] 8 | (-2,-3.5) -- (9.5,-3.5) -- (9.5,3.5) -- (-2,3.5) -- cycle; 9 | 10 | \MathMLBox{0}{0}{1.5}{1}{red}; 11 | 12 | \draw[black!20,line width=12,rounded corners=36] 13 | (-1.75,-3.25) -- (9.25,-3.25) -- (9.25,3.25) -- (-1.75,3.25) -- cycle; 14 | 15 | \draw[dashed,blue] 16 | (-2.5,-4) -- (10,-4) -- (10,4) -- (-2.5,4) -- cycle 17 | (0,0) -- (10,0); 18 | 19 | \draw[<->] (0,0) -- (-.75,0)node[below]{$3\xi_8$} -- (-1.5,0); 20 | \draw[<->] (-1.5,0) -- (-1.75,0)node[below]{$\xi_8$} -- (-2,0); 21 | \draw[<->] (-2,0) -- (-2.25,0)node[below]{$\xi_8$} -- (-2.5,0); 22 | 23 | \draw[<->] (4,1.5) -- (4,2.25)node[left]{$3\xi_8$} -- (4,3); 24 | \draw[<->] (4,3.5) -- (4,3.25)node[left]{$\xi_8$} -- (4,3); 25 | \draw[<->] (4,3.5) -- (4,3.75)node[left]{$\xi_8$} -- (4,4); 26 | 27 | \draw[dashed](-.5,-3.5) -- 28 | (-.5,-2.25) -- (-1.25,-2.25)node[below]{$3\xi_8$} -- (-2,-2.25); 29 | 30 | \end{tikzpicture} 31 | 32 | \end{document} 33 | -------------------------------------------------------------------------------- /figures/sumsize.tex: -------------------------------------------------------------------------------- 1 | \documentclass[dvisvgm,multi=true]{standalone} 2 | \usepackage{mathmlcoresvg} 3 | \begin{document} 4 | 5 | %
Figure 4: Base and displaystyle sizes of the summation symbol
6 | \begin{tikzpicture}[yscale=-1] 7 | 8 | \begin{scope}[xscale=.1,yscale=.1] 9 | \fill[black](63,71) .. controls (71,59) and (80,48) .. (88,36) .. controls (82,24) and (72,14) .. (65,2) .. controls (67,0) and (71,2) .. (75,1) .. controls (87,1) and (99,1) .. (111,1) .. controls (110,5) and (112,16) .. (109,16) .. controls (108,8) and (100,4) .. (92,6) .. controls (87,5) and (73,4) .. (82,11) .. controls (85,20) and (102,29) .. (93,38) .. controls (87,46) and (81,54) .. (75,62) .. controls (86,61) and (100,65) .. (110,58) .. controls (112,55) and (116,50) .. (114,57) .. controls (115,66) and (111,75) .. (100,71) .. controls (88,71) and (75,71) .. (63,71); 10 | \draw[blue,<->] (-25,11)node[left]{Base Height} -- (-25, 60); 11 | 12 | \draw[red,->] (20,30) -- (70,30); 13 | \draw[red,->] (20,40) -- (70,40); 14 | \draw[red,->] (20,50) -- (70,50); 15 | 16 | \begin{scope}[shift={(-25,0)}] 17 | \fill[black](10,49) .. controls (16,43) and (23,34) .. (14,27) .. controls (12,22) and (1,13) .. (5,11) .. controls (16,11) and (27,11) .. (39,11) .. controls (40,15) and (38,27) .. (35,17) .. controls (29,12) and (20,15) .. (13,15) .. controls (15,22) and (30,29) .. (23,38) .. controls (20,43) and (5,56) .. (18,54) .. controls (26,57) and (36,52) .. (39,48) .. controls (40,57) and (36,63) .. (28,60) .. controls (19,60) and (10,60) .. (2,60) .. controls (5,56) and (7,53) .. (10,49); 18 | \draw[blue,<->] (145,0)node[right]{Large Variant Height} -- (145, 72); 19 | \end{scope} 20 | \end{scope} 21 | \end{tikzpicture} 22 | \end{document} 23 | -------------------------------------------------------------------------------- /figures/svgtest.html: -------------------------------------------------------------------------------- 1 | 2 |

bracesize

3 |

circlebox

4 |

horizontal-tb-ltr

5 |

horizontal-tb-rtl

6 |

horizstrikebox

7 |

italcorr

8 |

leftbox

9 |

mfracbox

10 |

mfracnobarbox

11 |

mmultiscriptsbox

12 |

moverbox

13 |

mpaddedbox

14 |

mrootbox

15 |

mrowbox

16 |

mspacebox

17 |

msqrtbox

18 |

msubbox

19 |

msubsupbox

20 |

msupbox

21 |

munderbox

22 |

munderoverbox

23 |

roundedbox

24 |

sumsize

25 |

topaccent

26 |

topbox

27 |

updiagstrikebox

28 |

vertical-lr

29 |

vertical-rl

30 |

vstretch

31 | -------------------------------------------------------------------------------- /figures/topaccent.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | Top 39 | Accen 40 | t 41 | A 42 | ttac 43 | hmen 44 | t 45 | 46 | 47 | 48 | 49 | 50 | 51 | -------------------------------------------------------------------------------- /figures/topaccent.tex: -------------------------------------------------------------------------------- 1 | \documentclass[dvisvgm,multi=true]{standalone} 2 | \usepackage{mathmlcoresvg} 3 | \begin{document} 4 | %
Figure 3: Example of top accent attachment for a circumflex accent
5 | \begin{tikzpicture}[yscale=-1] 6 | \begin{scope}[xscale=.1,yscale=.1] 7 | \fill[black] 8 | (5,7) .. controls (8,5) and (11,0) .. (16,2) .. controls (20,4) and (22,8) .. (25,11) .. controls (28,14) and (23,13) .. (22,11) .. controls (19,10) and (17,6) .. (13,6) .. controls (9,8) and (7,12) .. (3,13) .. controls (0,15) and (3,10) .. (4,9) .. controls (5,8) and (5,8) .. (5,7) -- cycle; 9 | \draw[black] (0,0) rectangle (28,40); 10 | \draw[black,dashed](14,0) -- (14,40); 11 | \draw[red,->] (0,30) node[below]{Top Accent Attachment} -- (14,30); 12 | \end{scope} 13 | \end{tikzpicture} 14 | 15 | \end{document} 16 | -------------------------------------------------------------------------------- /figures/topbox.tex: -------------------------------------------------------------------------------- 1 | \documentclass[dvisvgm,multi=true]{standalone} 2 | \usepackage{mathmlcoresvg} 3 | \begin{document} 4 | %
Figure 15: Box model for the top 5 | \begin{tikzpicture}[yscale=-1] 6 | 7 | \fill[blue!10] (0,-3.5) -- (11.5,-3.5) -- (11.5,2) -- (0,2) -- cycle; 8 | \MathMLBox{2}{0}{1.5}{1}{red} 9 | \fill[black!20] (0,-3.5) -- (11.5,-3.5) -- (11.5,-3) -- (0,-3) -- cycle; 10 | 11 | \draw[dashed,blue](0,-4) -- (11.5,-4) -- (11.5,2) -- (0,2) -- cycle 12 | (0,0) -- (11.5,0); 13 | 14 | \draw[<->] (2,-3) -- (2,-2.5) node[right]{Overbar Vertical Gap} -- (2,-1.5); 15 | \draw[<->] (2,-3) -- (2,-3.25) 16 | node[right]{Overbar Rule Thickness} -- (2,-3.5); 17 | \draw[<->] (2,-4) -- (2,-3.75) 18 | node[right]{Overbar Extra Ascender} -- (2,-3.5); 19 | 20 | \draw[<->] (0,0) -- (1,0)node[below]{$4\xi_8$} -- (2,0); 21 | \draw[<->] (9.5,0) -- (10.5,0)node[below]{$4\xi_8$} -- (11.5,0); 22 | \end{tikzpicture} 23 | 24 | \end{document} 25 | -------------------------------------------------------------------------------- /figures/updiagstrikebox.tex: -------------------------------------------------------------------------------- 1 | \documentclass[dvisvgm,multi=true]{standalone} 2 | \usepackage{mathmlcoresvg} 3 | \begin{document} 4 | %
Figure 18: Box model for the updiagonalstrike 5 | \begin{tikzpicture}[yscale=-1] 6 | \fill[blue!10] 7 | (-.25,-2.25) -- (7.75,-2.25) -- (7.75,2) -- (-.25,2.25) -- cycle; 8 | \MathMLBox{0}{0}{1.5}{1}{red}; 9 | \begin{scope}[shift=({3.75,0}),rotate=-28.07248693585295] 10 | \fill[black!20] (-4.25,-.25) -- (4.25,-.25) -- 11 | (4.25,.25) -- (-4.25,.25) -- cycle; 12 | \draw[<->] (2,-.25) -- (2,0) node[right]{$\xi_8$} -- (2,.25); 13 | \end{scope} 14 | \draw[dashed,blue](-.25,-2.25) -- (7.75,-2.25) -- (7.75,2.25) -- (-.25,2.25) 15 | -- cycle (-.25,0) -- (7.75,0); 16 | 17 | \draw[<->] (0,0) -- (-.25,0) node[left]{$\frac{\xi_8}{2}$}; 18 | \draw[<->] (3.75,-2) -- (3.75,-2.25) node[above]{$\frac{\xi_8}{2}$}; 19 | \end{tikzpicture} 20 | 21 | \end{document} 22 | -------------------------------------------------------------------------------- /figures/vertical-lr.tex: -------------------------------------------------------------------------------- 1 | \documentclass[dvisvgm,multi=true]{standalone} 2 | \usepackage{mathmlcoresvg} 3 | \begin{document} 4 | 5 | \begin{tikzpicture}[yscale=-1.5,xscale=1.5] 6 | \begin{scope}[rotate=90] 7 | \draw[->] (0,0) -- (6,0) node[above right] {inline axis (towards line-right)}; 8 | \draw[->] (0,0) -- (0,-4) node[above left] {block axis (towards line-above)}; 9 | \MathMLBox{0}{0}{1}{1}{blue} 10 | \MathMLBoxMetrics{0}{0}{1}{1}{blue}{right}{above}{below} 11 | \end{scope} 12 | \end{tikzpicture} 13 | 14 | \end{document} 15 | -------------------------------------------------------------------------------- /figures/vertical-rl.tex: -------------------------------------------------------------------------------- 1 | \documentclass[dvisvgm,multi=true]{standalone} 2 | \usepackage{mathmlcoresvg} 3 | \begin{document} 4 | 5 | \begin{tikzpicture}[yscale=-1.5,xscale=1.5] 6 | \begin{scope}[rotate=90] 7 | \draw[->] (0,0) -- (6,0) node[above left] {inline axis (towards line-right)}; 8 | \draw[->] (0,0) -- (0,4) node[above right] {block axis (towards line-under)}; 9 | \MathMLBox{0}{0}{1}{1}{blue} 10 | \MathMLBoxMetrics{0}{0}{1}{1}{blue}{right}{above}{below} 11 | \end{scope} 12 | \end{tikzpicture} 13 | 14 | \end{document} 15 | -------------------------------------------------------------------------------- /figures/vstretch.tex: -------------------------------------------------------------------------------- 1 | \documentclass[dvisvgm,multi=true]{standalone} 2 | \usepackage{mathmlcoresvg} 3 | \begin{document} 4 | %
Figure 6: Symmetric and non-symmetric stretching of vertical operators
5 | \begin{tikzpicture}[yscale=-1] 6 | \fill[green](2,-5) node[above]{Non-symmetric} rectangle (2.1,1); 7 | \draw[green,->](2.5,0) -- (2.5, -2.5) node[right]{Height} -- (2.5,-5); 8 | \draw[green,->](3,0) -- (3, .5) node[right]{Depth} -- (3,1); 9 | 10 | \fill[blue](6,-5) node[above]{Symmetric} rectangle (6.1,3); 11 | \draw[blue,->](6.5,0) -- (6.5, -2.5) node[right]{Height} -- (6.5,-5); 12 | \draw[blue,->](7,0) -- (7, 2.5) node[right]{Depth} -- (7,3); 13 | 14 | \draw[gray](10.5,-5) node[above]{Non-stretchy}; 15 | \fill[gray](9,-5) rectangle (10,0); 16 | \fill[gray](10.5,-2) rectangle (12,1); 17 | \draw[gray,->](12.5,0) -- (12.5, -2.5) node[right]{MaxHeight} -- (12.5,-5); 18 | \draw[gray,->](13,0) -- (13, .5) node[right]{MaxDepth} -- (13,1); 19 | 20 | \draw[red] (0,0) node[left]{Baseline} -- (15,0); 21 | \draw[->,orange] (.5,0) -- (.5,-.5) node[left]{Axis Height} -- (.5,-1); 22 | \draw[orange,dashed] (.5,-1) -- (8,-1); 23 | \end{tikzpicture} 24 | 25 | \end{document} 26 | -------------------------------------------------------------------------------- /style.css: -------------------------------------------------------------------------------- 1 | /* Overrides for annotate */ 2 | .annotation > details.respec-tests-details > ul { 3 | width: 100%; 4 | margin-top: -0.3em; 5 | padding-left: 0; 6 | } 7 | 8 | .annotation > details.respec-tests-details[open] { 9 | position: initial; 10 | background-color: transparent; 11 | border: none; 12 | } 13 | -------------------------------------------------------------------------------- /tables/combining-operators.html: -------------------------------------------------------------------------------- 1 |

Combining

Non CombiningStyleCombining
U+002Bplus signbelowU+031Fcombining plus sign below
U+002Dhyphen-minusaboveU+0305combining overline
U+002Dhyphen-minusbelowU+0320combining minus sign below
U+002Dhyphen-minusbelowU+0332combining low line
U+002Efull stopaboveU+0307combining dot above
U+002Efull stopbelowU+0323combining dot below
U+005Ecircumflex accentaboveU+0302combining circumflex accent
U+005Ecircumflex accentbelowU+032Dcombining circumflex accent below
U+005Flow linebelowU+0332combining low line
U+0060grave accentaboveU+0300combining grave accent
U+0060grave accentbelowU+0316combining grave accent below
U+007EtildeaboveU+0303combining tilde
U+007EtildebelowU+0330combining tilde below
U+00A8diaeresisaboveU+0308combining diaeresis
U+00A8diaeresisbelowU+0324combining diaeresis below
U+00AFmacronaboveU+0304combining macron
U+00AFmacronaboveU+0305combining overline
U+00B4acute accentaboveU+0301combining acute accent
U+00B4acute accentbelowU+0317combining acute accent below
U+00B8cedillabelowU+0327combining cedilla
U+02C6modifier letter circumflex accentaboveU+0302combining circumflex accent
U+02C7caronaboveU+030Ccombining caron
U+02C7caronbelowU+032Ccombining caron below
U+02D8breveaboveU+0306combining breve
U+02D8brevebelowU+032Ecombining breve below
U+02D9dot aboveaboveU+0307combining dot above
U+02D9dot abovebelowU+0323combining dot below
U+02DBogonekbelowU+0328combining ogonek
U+02DCsmall tildeaboveU+0303combining tilde
U+02DCsmall tildebelowU+0330combining tilde below
U+02DDdouble acute accentaboveU+030Bcombining double acute accent
U+203EoverlineaboveU+0305combining overline
U+2190leftwards arrowaboveU+20D6
U+2192rightwards arrowaboveU+20D7combining right arrow above
U+2192rightwards arrowaboveU+20EFcombining right arrow below
U+2212minus signaboveU+0305combining overline
U+2212minus signbelowU+0332combining low line
U+27F6long rightwards arrowaboveU+20D7combining right arrow above
U+27F6long rightwards arrowaboveU+20EFcombining right arrow below

Non Combining

CombiningStyleNon Combining
U+0300combining grave accentaboveU+0060grave accent
U+0301combining acute accentaboveU+00B4acute accent
U+0302combining circumflex accentaboveU+005Ecircumflex accent
U+0302combining circumflex accentaboveU+02C6modifier letter circumflex accent
U+0303combining tildeaboveU+007Etilde
U+0303combining tildeaboveU+02DCsmall tilde
U+0304combining macronaboveU+00AFmacron
U+0305combining overlineaboveU+002Dhyphen-minus
U+0305combining overlineaboveU+00AFmacron
U+0305combining overlineaboveU+203Eoverline
U+0305combining overlineaboveU+2212minus sign
U+0306combining breveaboveU+02D8breve
U+0307combining dot aboveaboveU+02E
U+0307combining dot aboveaboveU+002Efull stop
U+0307combining dot aboveaboveU+02D9dot above
U+0308combining diaeresisaboveU+00A8diaeresis
U+030Bcombining double acute accentaboveU+02DDdouble acute accent
U+030Ccombining caronaboveU+02C7caron
U+0312combining turned comma aboveaboveU+0B8
U+0316combining grave accent belowbelowU+0060grave accent
U+0317combining acute accent belowbelowU+00B4acute accent
U+031Fcombining plus sign belowbelowU+002Bplus sign
U+0320combining minus sign belowbelowU+002Dhyphen-minus
U+0323combining dot belowbelowU+002Efull stop
U+0323combining dot belowbelowU+02D9dot above
U+0324combining diaeresis belowbelowU+00A8diaeresis
U+0327combining cedillabelowU+00B8cedilla
U+0328combining ogonekbelowU+02DBogonek
U+032Ccombining caron belowbelowU+02C7caron
U+032Dcombining circumflex accent belowbelowU+005Ecircumflex accent
U+032Ecombining breve belowbelowU+02D8breve
U+0330combining tilde belowbelowU+007Etilde
U+0330combining tilde belowbelowU+02DCsmall tilde
U+0332combining low linebelowU+002Dhyphen-minus
U+0332combining low linebelowU+005Flow line
U+0332combining low linebelowU+2212minus sign
U+0338combining long solidus overlayoverU+02F
U+20D7combining right arrow aboveaboveU+2192rightwards arrow
U+20D7combining right arrow aboveaboveU+27F6long rightwards arrow
U+20EFcombining right arrow belowaboveU+2192rightwards arrow
U+20EFcombining right arrow belowaboveU+27F6long rightwards arrow
-------------------------------------------------------------------------------- /tables/download.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | 3 | import os 4 | import progressbar 5 | from urllib.request import urlopen 6 | 7 | UnicodeXMLURL = "https://raw.githubusercontent.com/w3c/xml-entities/gh-pages/unicode.xml" 8 | 9 | def downloadWithProgressBar(url, outputDirectory="./", forceDownload=False): 10 | 11 | baseName = os.path.basename(url) 12 | fileName = os.path.join(outputDirectory, baseName) 13 | 14 | if not forceDownload and os.path.exists(fileName): 15 | return fileName 16 | 17 | request = urlopen(url) 18 | totalSize = int(request.info().get('Content-Length').strip()) 19 | bar = progressbar.ProgressBar(maxval=totalSize).start() 20 | 21 | chunkSize = 16 * 1024 22 | downloaded = 0 23 | print("Downloading %s" % url) 24 | os.umask(0o002) 25 | with open(fileName, 'wb') as fp: 26 | while True: 27 | chunk = request.read(chunkSize) 28 | downloaded += len(chunk) 29 | bar.update(downloaded) 30 | if not chunk: break 31 | fp.write(chunk) 32 | bar.finish() 33 | 34 | return fileName 35 | 36 | def downloadUnicodeXML(): 37 | return downloadWithProgressBar(UnicodeXMLURL) 38 | 39 | if __name__ == "__main__": 40 | print("%s downloaded." % downloadUnicodeXML()) 41 | -------------------------------------------------------------------------------- /tables/generate-math-variant-tables.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | 3 | from lxml import etree 4 | from download import downloadUnicodeXML 5 | 6 | # Retrieve the unicode.xml file if necessary. 7 | unicodeXML = downloadUnicodeXML() 8 | 9 | # Extract the mathvariants transformation. 10 | xsltTransform = etree.XSLT(etree.XML('''\ 11 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | ''')) 40 | 41 | # Put the mathvariant transforms into a Python structure. 42 | mathvariantTransforms = {} 43 | root = xsltTransform(etree.parse(unicodeXML)).getroot() 44 | def parseCodePoint(aHexaString): 45 | return int("0x%s" % aHexaString[1:], 16) 46 | for entry in root: 47 | mathvariant = entry.get("mathvariant") 48 | baseChar = parseCodePoint(entry.get("baseChar")) 49 | transformedChar = parseCodePoint(entry.get("transformedChar")) 50 | if mathvariant not in mathvariantTransforms: 51 | mathvariantTransforms[mathvariant] = {} 52 | mathvariantTransforms[mathvariant][baseChar] = transformedChar 53 | 54 | # There is no "isolated" mathvariant. 55 | del mathvariantTransforms["isolated"] 56 | 57 | # Create a test font for each mathvariant. 58 | for mathvariant in mathvariantTransforms: 59 | print("Generate mathvariant table for %s..." % mathvariant, end=" "); 60 | md = open("mathvariants-%s.html" % mathvariant, "w") 61 | md.write("\n"); 62 | md.write("\n"); 63 | md.write("\n" % mathvariant) 64 | for baseChar in mathvariantTransforms[mathvariant]: 65 | transformedChar = mathvariantTransforms[mathvariant][baseChar] 66 | # Encode the first digit (non-BMP vs BMP) and last digits of the shift 67 | # into a background color. 68 | color = "rgba(%d, %d, %d, .5)" % ( 69 | (256/4) * ((transformedChar - baseChar) % 4), 70 | (256/16) * ((transformedChar - baseChar)/4 % 16), 71 | (256/2) * ((transformedChar - baseChar)/(16*16*16*16) % 2)) 72 | md.write('\n' % 73 | (color, baseChar, baseChar, transformedChar, transformedChar, transformedChar - baseChar)) 74 | md.write("
Original%sΔcode point
&#x%0X; U+%04X&#x%0X; U+%05X%0X
"); 75 | md.close() 76 | print("done."); 77 | -------------------------------------------------------------------------------- /tables/generate-unicode-assembly.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | 3 | # Base character, stretch axis, extender, bottom/left, middle, top/right 4 | unicodeAssemblies = { 5 | 0x0028: [True, 0x239C, 0x239D, 0x0000, 0x239B], # LEFT PARENTHESIS 6 | 0x0029: [True, 0x239F, 0x23A0, 0x0000, 0x239E], # RIGHT PARENTHESIS, 7 | 0x003D: [False, 0x003D, 0x003D, 0x0000, 0x0000], # = EQUALS SIGN 8 | 0x005B: [True, 0x23A2, 0x23A3, 0x0000, 0x23A1], # LEFT SQUARE BRACKET 9 | 0x005D: [True, 0x23A5, 0x23A6, 0x0000, 0x23A4], # RIGHT SQUARE BRACKET 10 | 0x005F: [False, 0x005F, 0x005F, 0x0000, 0x0000], # _ LOW LINE 11 | 0x007B: [True, 0x23AA, 0x23A9, 0x23A8, 0x23A7], # LEFT CURLY BRACKET 12 | 0x007C: [True, 0x007C, 0x007C, 0x0000, 0x0000], # VERTICAL LINE 13 | 0x007D: [True, 0x23AA, 0x23AD, 0x23AC, 0x23AB], # RIGHT CURLY BRACKET 14 | 0x00AF: [False, 0x00AF, 0x00AF, 0x0000, 0x0000], # MACRON 15 | 0x2016: [True, 0x2016, 0x2016, 0x0000, 0x0000], # DOUBLE VERTICAL LINE 16 | 0x203E: [False, 0x203E, 0x203E, 0x0000, 0x0000], # OVERLINE 17 | 0x2190: [False, 0x23AF, 0x2190, 0x0000, 0x23AF], # LEFTWARDS ARROW 18 | 0x2191: [True, 0x23D0, 0x23D0, 0x0000, 0x2191], # UPWARDS ARROW 19 | 0x2192: [False, 0x23AF, 0x23AF, 0x0000, 0x2192], # RIGHTWARDS ARROW 20 | 0x2193: [True, 0x23D0, 0x2193, 0x0000, 0x23D0], # DOWNWARDS ARROW 21 | 0x2194: [False, 0x23AF, 0x2190, 0x0000, 0x2192], # LEFT RIGHT ARROW 22 | 0x2195: [True, 0x23D0, 0x2193, 0x0000, 0x2191], # UP DOWN ARROW 23 | 0x21A4: [False, 0x23AF, 0x2190, 0x0000, 0x22A3], # LEFTWARDS ARROW FROM BAR 24 | 0x21A6: [False, 0x23AF, 0x22A2, 0x0000, 0x2192], # RIGHTWARDS ARROW FROM BAR 25 | 0x21BC: [False, 0x23AF, 0x21BC, 0x0000, 0x23AF], # RIGHTWARDS HARPOON WITH BARB UPWARDS 26 | 0x21BD: [False, 0x23AF, 0x21BD, 0x0000, 0x23AF], # LEFTWARDS HARPOON WITH BARB DOWNWARDS 27 | 0x21C0: [False, 0x23AF, 0x23AF, 0x0000, 0x21C0], # RIGHWARDS HARPOON WITH BARB UPWARDS 28 | 0x21C1: [False, 0x23AF, 0x23AF, 0x0000, 0x21C1], # HARPOON WITH BARB DOWNWARDS 29 | 0x2223: [True, 0x2223, 0x2223, 0x0000, 0x0000], # DIVIDES 30 | 0x2225: [True, 0x2225, 0x2225, 0x0000, 0x0000], # PARALLEL TO 31 | 0x2308: [True, 0x23A2, 0x23A2, 0x0000, 0x23A1], # LEFT CEILING 32 | 0x2309: [True, 0x23A5, 0x23A5, 0x0000, 0x23A4], # RIGHT CEILING 33 | 0x230A: [True, 0x23A2, 0x23A3, 0x0000, 0x0000], # LEFT FLOOR 34 | 0x230B: [True, 0x23A5, 0x23A6, 0x0000, 0x0000], # RIGHT FLOOR 35 | 0x23B0: [True, 0x23AA, 0x23AD, 0x0000, 0x23A7], # UPPER LEFT OR LOWER RIGHT CURLY BRACKET SECTION (lmoustache) 36 | 0x23B1: [True, 0x23AA, 0x23A9, 0x0000, 0x23AB], # UPPER RIGHT OR LOWER LEFT CURLY BRACKET SECTION (rmoustache) 37 | 0x27F5: [False, 0x23AF, 0x2190, 0x0000, 0x23AF], # LONG LEFTWARDS ARROW 38 | 0x27F6: [False, 0x23AF, 0x23AF, 0x0000, 0x2192], # LONG RIGHTWARDS ARROW 39 | 0x27F7: [False, 0x23AF, 0x2190, 0x0000, 0x2192], # LONG LEFT RIGHT ARROW 40 | 0x294E: [False, 0x23AF, 0x21BC, 0x0000, 0x21C0], # LEFT BARB UP RIGHT BARB UP HARPOON 41 | 0x2950: [False, 0x23AF, 0x21BD, 0x0000, 0x21C1], # LEFT BARB DOWN RIGHT BARB DOWN HARPOON 42 | 0x295A: [False, 0x23AF, 0x21BC, 0x0000, 0x22A3], # LEFTWARDS HARPOON WITH BARB UP FROM BAR 43 | 0x295B: [False, 0x23AF, 0x22A2, 0x0000, 0x21C0], # RIGHTWARDS HARPOON WITH BARB UP FROM BAR 44 | 0x295E: [False, 0x23AF, 0x21BD, 0x0000, 0x22A3], # LEFTWARDS HARPOON WITH BARB DOWN FROM BAR 45 | 0x295F: [False, 0x23AF, 0x22A2, 0x0000, 0x21C1], # RIGHTWARDS HARPOON WITH BARB DOWN FROM BAR 46 | } 47 | 48 | def stretchAxis(isVertical): 49 | if isVertical: 50 | return "Vertical" 51 | return "Horizontal" 52 | 53 | def codePoint(c): 54 | if c == 0: 55 | return "N/A" 56 | return "U+%04X &#x%0X;" % (c, c) 57 | 58 | print("Generate unicode-assembly.html...", end=" ") 59 | f = open("unicode-assembly.html", "w") 60 | f.write("\ 61 | \n\ 62 | \n\ 63 | \n\ 64 | \n\ 65 | \n\ 66 | \n\ 67 | \n\ 68 | \n\ 69 | \n\ 70 | ") 71 | for baseCharacter in sorted(unicodeAssemblies): 72 | assert unicodeAssemblies[baseCharacter][1] != 0 73 | assert unicodeAssemblies[baseCharacter][2] != 0 74 | f.write("\ 75 | \n\ 76 | \n\ 77 | \n\ 78 | \n\ 79 | \n\ 80 | \n\ 81 | \n\ 82 | \n\ 83 | " % (codePoint(baseCharacter), 84 | stretchAxis(unicodeAssemblies[baseCharacter][0]), 85 | codePoint(unicodeAssemblies[baseCharacter][1]), 86 | codePoint(unicodeAssemblies[baseCharacter][2]), 87 | codePoint(unicodeAssemblies[baseCharacter][3]), 88 | codePoint(unicodeAssemblies[baseCharacter][4]))) 89 | 90 | f.write("
Base CharacterGlyph ConstructionExtender CharacterBottom/Left CharacterMiddle CharacterTop/Right Character
%s%s%s%s%s%s
\n") 91 | f.close() 92 | print("done.") 93 | -------------------------------------------------------------------------------- /tables/inline-axis-operators.html: -------------------------------------------------------------------------------- 1 | 2 |
U+003D, 3 | U+005E, 4 | U+005F, 5 | U+007E, 6 | U+00AF, 7 | U+02C6, 8 | U+02C7, 9 | U+02C9, 10 | U+02CD, 11 | U+02DC, 12 | U+02F7, 13 | U+0302, 14 | U+0332, 15 | U+203E, 16 | U+20D0, 17 | U+20D1, 18 | U+20D6, 19 | U+20D7, 20 | U+20E1, 21 | U+2190, 22 | U+2192, 23 | U+2194, 24 | U+2198, 25 | U+2199, 26 | U+219A, 27 | U+219B, 28 | U+219C, 29 | U+219D, 30 | U+219E, 31 | U+21A0, 32 | U+21A2, 33 | U+21A3, 34 | U+21A4, 35 | U+21A6, 36 | U+21A9, 37 | U+21AA, 38 | U+21AB, 39 | U+21AC, 40 | U+21AD, 41 | U+21AE, 42 | U+21B4, 43 | U+21B9, 44 | U+21BC, 45 | U+21BD, 46 | U+21C0, 47 | U+21C1, 48 | U+21C4, 49 | U+21C6, 50 | U+21C7, 51 | U+21C9, 52 | U+21CB, 53 | U+21CC, 54 | U+21CD, 55 | U+21CE, 56 | U+21CF, 57 | U+21D0, 58 | U+21D2, 59 | U+21D4, 60 | U+21DA, 61 | U+21DB, 62 | U+21DC, 63 | U+21DD, 64 | U+21E0, 65 | U+21E2, 66 | U+21E4, 67 | U+21E5, 68 | U+21E6, 69 | U+21E8, 70 | U+21F0, 71 | U+21F4, 72 | U+21F6, 73 | U+21F7, 74 | U+21F8, 75 | U+21F9, 76 | U+21FA, 77 | U+21FB, 78 | U+21FC, 79 | U+21FD, 80 | U+21FE, 81 | U+21FF, 82 | U+2322, 83 | U+2323, 84 | U+23B4, 85 | U+23B5, 86 | U+23DC, 87 | U+23DD, 88 | U+23DE, 89 | U+23DF, 90 | U+23E0, 91 | U+23E1, 92 | U+2500, 93 | U+2794, 94 | U+2799, 95 | U+279B, 96 | U+279C, 97 | U+279D, 98 | U+279E, 99 | U+279F, 100 | U+27A0, 101 | U+27A1, 102 | U+27A5, 103 | U+27A6, 104 | U+27A8, 105 | U+27A9, 106 | U+27AA, 107 | U+27AB, 108 | U+27AC, 109 | U+27AD, 110 | U+27AE, 111 | U+27AF, 112 | U+27B1, 113 | U+27B3, 114 | U+27B5, 115 | U+27B8, 116 | U+27BA, 117 | U+27BB, 118 | U+27BC, 119 | U+27BD, 120 | U+27BE, 121 | U+27F4, 122 | U+27F5, 123 | U+27F6, 124 | U+27F7, 125 | U+27F8, 126 | U+27F9, 127 | U+27FA, 128 | U+27FB, 129 | U+27FC, 130 | U+27FD, 131 | U+27FE, 132 | U+27FF, 133 | U+2900, 134 | U+2901, 135 | U+2902, 136 | U+2903, 137 | U+2904, 138 | U+2905, 139 | U+2906, 140 | U+2907, 141 | U+290C, 142 | U+290D, 143 | U+290E, 144 | U+290F, 145 | U+2910, 146 | U+2911, 147 | U+2914, 148 | U+2915, 149 | U+2916, 150 | U+2917, 151 | U+2918, 152 | U+2919, 153 | U+291A, 154 | U+291B, 155 | U+291C, 156 | U+291D, 157 | U+291E, 158 | U+291F, 159 | U+2920, 160 | U+2942, 161 | U+2943, 162 | U+2944, 163 | U+2945, 164 | U+2946, 165 | U+2947, 166 | U+2948, 167 | U+294A, 168 | U+294B, 169 | U+294E, 170 | U+2950, 171 | U+2952, 172 | U+2953, 173 | U+2956, 174 | U+2957, 175 | U+295A, 176 | U+295B, 177 | U+295E, 178 | U+295F, 179 | U+2962, 180 | U+2964, 181 | U+2966, 182 | U+2967, 183 | U+2968, 184 | U+2969, 185 | U+296A, 186 | U+296B, 187 | U+296C, 188 | U+296D, 189 | U+2970, 190 | U+2971, 191 | U+2972, 192 | U+2973, 193 | U+2974, 194 | U+2975, 195 | U+297C, 196 | U+297D, 197 | U+2B04, 198 | U+2B05, 199 | U+2B0C, 200 | U+2B30, 201 | U+2B31, 202 | U+2B32, 203 | U+2B33, 204 | U+2B34, 205 | U+2B35, 206 | U+2B36, 207 | U+2B37, 208 | U+2B38, 209 | U+2B39, 210 | U+2B3A, 211 | U+2B3B, 212 | U+2B3C, 213 | U+2B3D, 214 | U+2B3E, 215 | U+2B40, 216 | U+2B41, 217 | U+2B42, 218 | U+2B43, 219 | U+2B44, 220 | U+2B45, 221 | U+2B46, 222 | U+2B47, 223 | U+2B48, 224 | U+2B49, 225 | U+2B4A, 226 | U+2B4B, 227 | U+2B4C, 228 | U+2B60, 229 | U+2B62, 230 | U+2B64, 231 | U+2B6A, 232 | U+2B6C, 233 | U+2B70, 234 | U+2B72, 235 | U+2B7A, 236 | U+2B7C, 237 | U+2B80, 238 | U+2B82, 239 | U+2B84, 240 | U+2B86, 241 | U+2B95, 242 | U+FE35, 243 | U+FE36, 244 | U+FE37, 245 | U+FE38, 246 | U+1EEF0, 247 | U+1EEF1, 248 |
Sorted list of Unicode code points corresponding to operators with inline stretch axis.
Total size: 246 entries, 492 bytes (assuming 16 bits for all but the non-BMP entries).
-------------------------------------------------------------------------------- /tables/inline-axis-operators.txt: -------------------------------------------------------------------------------- 1 | U+003D, 2 | U+005E, 3 | U+005F, 4 | U+007E, 5 | U+00AF, 6 | U+02C6, 7 | U+02C7, 8 | U+02C9, 9 | U+02CD, 10 | U+02DC, 11 | U+02F7, 12 | U+0302, 13 | U+0332, 14 | U+203E, 15 | U+20D0, 16 | U+20D1, 17 | U+20D6, 18 | U+20D7, 19 | U+20E1, 20 | U+2190, 21 | U+2192, 22 | U+2194, 23 | U+2198, 24 | U+2199, 25 | U+219A, 26 | U+219B, 27 | U+219C, 28 | U+219D, 29 | U+219E, 30 | U+21A0, 31 | U+21A2, 32 | U+21A3, 33 | U+21A4, 34 | U+21A6, 35 | U+21A9, 36 | U+21AA, 37 | U+21AB, 38 | U+21AC, 39 | U+21AD, 40 | U+21AE, 41 | U+21B4, 42 | U+21B9, 43 | U+21BC, 44 | U+21BD, 45 | U+21C0, 46 | U+21C1, 47 | U+21C4, 48 | U+21C6, 49 | U+21C7, 50 | U+21C9, 51 | U+21CB, 52 | U+21CC, 53 | U+21CD, 54 | U+21CE, 55 | U+21CF, 56 | U+21D0, 57 | U+21D2, 58 | U+21D4, 59 | U+21DA, 60 | U+21DB, 61 | U+21DC, 62 | U+21DD, 63 | U+21E0, 64 | U+21E2, 65 | U+21E4, 66 | U+21E5, 67 | U+21E6, 68 | U+21E8, 69 | U+21F0, 70 | U+21F4, 71 | U+21F6, 72 | U+21F7, 73 | U+21F8, 74 | U+21F9, 75 | U+21FA, 76 | U+21FB, 77 | U+21FC, 78 | U+21FD, 79 | U+21FE, 80 | U+21FF, 81 | U+2322, 82 | U+2323, 83 | U+23B4, 84 | U+23B5, 85 | U+23DC, 86 | U+23DD, 87 | U+23DE, 88 | U+23DF, 89 | U+23E0, 90 | U+23E1, 91 | U+2500, 92 | U+2794, 93 | U+2799, 94 | U+279B, 95 | U+279C, 96 | U+279D, 97 | U+279E, 98 | U+279F, 99 | U+27A0, 100 | U+27A1, 101 | U+27A5, 102 | U+27A6, 103 | U+27A8, 104 | U+27A9, 105 | U+27AA, 106 | U+27AB, 107 | U+27AC, 108 | U+27AD, 109 | U+27AE, 110 | U+27AF, 111 | U+27B1, 112 | U+27B3, 113 | U+27B5, 114 | U+27B8, 115 | U+27BA, 116 | U+27BB, 117 | U+27BC, 118 | U+27BD, 119 | U+27BE, 120 | U+27F4, 121 | U+27F5, 122 | U+27F6, 123 | U+27F7, 124 | U+27F8, 125 | U+27F9, 126 | U+27FA, 127 | U+27FB, 128 | U+27FC, 129 | U+27FD, 130 | U+27FE, 131 | U+27FF, 132 | U+2900, 133 | U+2901, 134 | U+2902, 135 | U+2903, 136 | U+2904, 137 | U+2905, 138 | U+2906, 139 | U+2907, 140 | U+290C, 141 | U+290D, 142 | U+290E, 143 | U+290F, 144 | U+2910, 145 | U+2911, 146 | U+2914, 147 | U+2915, 148 | U+2916, 149 | U+2917, 150 | U+2918, 151 | U+2919, 152 | U+291A, 153 | U+291B, 154 | U+291C, 155 | U+291D, 156 | U+291E, 157 | U+291F, 158 | U+2920, 159 | U+2942, 160 | U+2943, 161 | U+2944, 162 | U+2945, 163 | U+2946, 164 | U+2947, 165 | U+2948, 166 | U+294A, 167 | U+294B, 168 | U+294E, 169 | U+2950, 170 | U+2952, 171 | U+2953, 172 | U+2956, 173 | U+2957, 174 | U+295A, 175 | U+295B, 176 | U+295E, 177 | U+295F, 178 | U+2962, 179 | U+2964, 180 | U+2966, 181 | U+2967, 182 | U+2968, 183 | U+2969, 184 | U+296A, 185 | U+296B, 186 | U+296C, 187 | U+296D, 188 | U+2970, 189 | U+2971, 190 | U+2972, 191 | U+2973, 192 | U+2974, 193 | U+2975, 194 | U+297C, 195 | U+297D, 196 | U+2B04, 197 | U+2B05, 198 | U+2B0C, 199 | U+2B30, 200 | U+2B31, 201 | U+2B32, 202 | U+2B33, 203 | U+2B34, 204 | U+2B35, 205 | U+2B36, 206 | U+2B37, 207 | U+2B38, 208 | U+2B39, 209 | U+2B3A, 210 | U+2B3B, 211 | U+2B3C, 212 | U+2B3D, 213 | U+2B3E, 214 | U+2B40, 215 | U+2B41, 216 | U+2B42, 217 | U+2B43, 218 | U+2B44, 219 | U+2B45, 220 | U+2B46, 221 | U+2B47, 222 | U+2B48, 223 | U+2B49, 224 | U+2B4A, 225 | U+2B4B, 226 | U+2B4C, 227 | U+2B60, 228 | U+2B62, 229 | U+2B64, 230 | U+2B6A, 231 | U+2B6C, 232 | U+2B70, 233 | U+2B72, 234 | U+2B7A, 235 | U+2B7C, 236 | U+2B80, 237 | U+2B82, 238 | U+2B84, 239 | U+2B86, 240 | U+2B95, 241 | U+FE35, 242 | U+FE36, 243 | U+FE37, 244 | U+FE38, 245 | U+1EEF0, 246 | U+1EEF1, 247 | -------------------------------------------------------------------------------- /tables/inline_axis_operators.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | 3 | from bisect import bisect_left 4 | from math import log2, ceil 5 | 6 | inlineAxisOperators = [ 7 | 0x003D, 8 | 0x005E, 9 | 0x005F, 10 | 0x007E, 11 | 0x00AF, 12 | 0x02C6, 13 | 0x02C7, 14 | 0x02C9, 15 | 0x02CD, 16 | 0x02DC, 17 | 0x02F7, 18 | 0x0302, 19 | 0x0332, 20 | 0x203E, 21 | 0x20D0, 22 | 0x20D1, 23 | 0x20D6, 24 | 0x20D7, 25 | 0x20E1, 26 | 0x2190, 27 | 0x2192, 28 | 0x2194, 29 | 0x2198, 30 | 0x2199, 31 | 0x219A, 32 | 0x219B, 33 | 0x219C, 34 | 0x219D, 35 | 0x219E, 36 | 0x21A0, 37 | 0x21A2, 38 | 0x21A3, 39 | 0x21A4, 40 | 0x21A6, 41 | 0x21A9, 42 | 0x21AA, 43 | 0x21AB, 44 | 0x21AC, 45 | 0x21AD, 46 | 0x21AE, 47 | 0x21B4, 48 | 0x21B9, 49 | 0x21BC, 50 | 0x21BD, 51 | 0x21C0, 52 | 0x21C1, 53 | 0x21C4, 54 | 0x21C6, 55 | 0x21C7, 56 | 0x21C9, 57 | 0x21CB, 58 | 0x21CC, 59 | 0x21CD, 60 | 0x21CE, 61 | 0x21CF, 62 | 0x21D0, 63 | 0x21D2, 64 | 0x21D4, 65 | 0x21DA, 66 | 0x21DB, 67 | 0x21DC, 68 | 0x21DD, 69 | 0x21E0, 70 | 0x21E2, 71 | 0x21E4, 72 | 0x21E5, 73 | 0x21E6, 74 | 0x21E8, 75 | 0x21F0, 76 | 0x21F4, 77 | 0x21F6, 78 | 0x21F7, 79 | 0x21F8, 80 | 0x21F9, 81 | 0x21FA, 82 | 0x21FB, 83 | 0x21FC, 84 | 0x21FD, 85 | 0x21FE, 86 | 0x21FF, 87 | 0x2322, 88 | 0x2323, 89 | 0x23B4, 90 | 0x23B5, 91 | 0x23DC, 92 | 0x23DD, 93 | 0x23DE, 94 | 0x23DF, 95 | 0x23E0, 96 | 0x23E1, 97 | 0x2500, 98 | 0x2794, 99 | 0x2799, 100 | 0x279B, 101 | 0x279C, 102 | 0x279D, 103 | 0x279E, 104 | 0x279F, 105 | 0x27A0, 106 | 0x27A1, 107 | 0x27A5, 108 | 0x27A6, 109 | 0x27A8, 110 | 0x27A9, 111 | 0x27AA, 112 | 0x27AB, 113 | 0x27AC, 114 | 0x27AD, 115 | 0x27AE, 116 | 0x27AF, 117 | 0x27B1, 118 | 0x27B3, 119 | 0x27B5, 120 | 0x27B8, 121 | 0x27BA, 122 | 0x27BB, 123 | 0x27BC, 124 | 0x27BD, 125 | 0x27BE, 126 | 0x27F4, 127 | 0x27F5, 128 | 0x27F6, 129 | 0x27F7, 130 | 0x27F8, 131 | 0x27F9, 132 | 0x27FA, 133 | 0x27FB, 134 | 0x27FC, 135 | 0x27FD, 136 | 0x27FE, 137 | 0x27FF, 138 | 0x2900, 139 | 0x2901, 140 | 0x2902, 141 | 0x2903, 142 | 0x2904, 143 | 0x2905, 144 | 0x2906, 145 | 0x2907, 146 | 0x290C, 147 | 0x290D, 148 | 0x290E, 149 | 0x290F, 150 | 0x2910, 151 | 0x2911, 152 | 0x2914, 153 | 0x2915, 154 | 0x2916, 155 | 0x2917, 156 | 0x2918, 157 | 0x2919, 158 | 0x291A, 159 | 0x291B, 160 | 0x291C, 161 | 0x291D, 162 | 0x291E, 163 | 0x291F, 164 | 0x2920, 165 | 0x2942, 166 | 0x2943, 167 | 0x2944, 168 | 0x2945, 169 | 0x2946, 170 | 0x2947, 171 | 0x2948, 172 | 0x294A, 173 | 0x294B, 174 | 0x294E, 175 | 0x2950, 176 | 0x2952, 177 | 0x2953, 178 | 0x2956, 179 | 0x2957, 180 | 0x295A, 181 | 0x295B, 182 | 0x295E, 183 | 0x295F, 184 | 0x2962, 185 | 0x2964, 186 | 0x2966, 187 | 0x2967, 188 | 0x2968, 189 | 0x2969, 190 | 0x296A, 191 | 0x296B, 192 | 0x296C, 193 | 0x296D, 194 | 0x2970, 195 | 0x2971, 196 | 0x2972, 197 | 0x2973, 198 | 0x2974, 199 | 0x2975, 200 | 0x297C, 201 | 0x297D, 202 | 0x2B04, 203 | 0x2B05, 204 | 0x2B0C, 205 | 0x2B30, 206 | 0x2B31, 207 | 0x2B32, 208 | 0x2B33, 209 | 0x2B34, 210 | 0x2B35, 211 | 0x2B36, 212 | 0x2B37, 213 | 0x2B38, 214 | 0x2B39, 215 | 0x2B3A, 216 | 0x2B3B, 217 | 0x2B3C, 218 | 0x2B3D, 219 | 0x2B3E, 220 | 0x2B40, 221 | 0x2B41, 222 | 0x2B42, 223 | 0x2B43, 224 | 0x2B44, 225 | 0x2B45, 226 | 0x2B46, 227 | 0x2B47, 228 | 0x2B48, 229 | 0x2B49, 230 | 0x2B4A, 231 | 0x2B4B, 232 | 0x2B4C, 233 | 0x2B60, 234 | 0x2B62, 235 | 0x2B64, 236 | 0x2B6A, 237 | 0x2B6C, 238 | 0x2B70, 239 | 0x2B72, 240 | 0x2B7A, 241 | 0x2B7C, 242 | 0x2B80, 243 | 0x2B82, 244 | 0x2B84, 245 | 0x2B86, 246 | 0x2B95, 247 | 0xFE35, 248 | 0xFE36, 249 | 0xFE37, 250 | 0xFE38, 251 | 0x1EEF0, 252 | 0x1EEF1, 253 | ] 254 | 255 | def stretchAxis(codePoint): 256 | i = bisect_left(inlineAxisOperators, codePoint) 257 | if i != len(inlineAxisOperators) and inlineAxisOperators[i] == codePoint: 258 | return "inline" 259 | return "block" 260 | -------------------------------------------------------------------------------- /tables/mathvariants-bold-fraktur.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 |
Originalbold-frakturΔcode point
A U+0041𝕬 U+1D56C1D52B
B U+0042𝕭 U+1D56D1D52B
C U+0043𝕮 U+1D56E1D52B
D U+0044𝕯 U+1D56F1D52B
E U+0045𝕰 U+1D5701D52B
F U+0046𝕱 U+1D5711D52B
G U+0047𝕲 U+1D5721D52B
H U+0048𝕳 U+1D5731D52B
I U+0049𝕴 U+1D5741D52B
J U+004A𝕵 U+1D5751D52B
K U+004B𝕶 U+1D5761D52B
L U+004C𝕷 U+1D5771D52B
M U+004D𝕸 U+1D5781D52B
N U+004E𝕹 U+1D5791D52B
O U+004F𝕺 U+1D57A1D52B
P U+0050𝕻 U+1D57B1D52B
Q U+0051𝕼 U+1D57C1D52B
R U+0052𝕽 U+1D57D1D52B
S U+0053𝕾 U+1D57E1D52B
T U+0054𝕿 U+1D57F1D52B
U U+0055𝖀 U+1D5801D52B
V U+0056𝖁 U+1D5811D52B
W U+0057𝖂 U+1D5821D52B
X U+0058𝖃 U+1D5831D52B
Y U+0059𝖄 U+1D5841D52B
Z U+005A𝖅 U+1D5851D52B
a U+0061𝖆 U+1D5861D525
b U+0062𝖇 U+1D5871D525
c U+0063𝖈 U+1D5881D525
d U+0064𝖉 U+1D5891D525
e U+0065𝖊 U+1D58A1D525
f U+0066𝖋 U+1D58B1D525
g U+0067𝖌 U+1D58C1D525
h U+0068𝖍 U+1D58D1D525
i U+0069𝖎 U+1D58E1D525
j U+006A𝖏 U+1D58F1D525
k U+006B𝖐 U+1D5901D525
l U+006C𝖑 U+1D5911D525
m U+006D𝖒 U+1D5921D525
n U+006E𝖓 U+1D5931D525
o U+006F𝖔 U+1D5941D525
p U+0070𝖕 U+1D5951D525
q U+0071𝖖 U+1D5961D525
r U+0072𝖗 U+1D5971D525
s U+0073𝖘 U+1D5981D525
t U+0074𝖙 U+1D5991D525
u U+0075𝖚 U+1D59A1D525
v U+0076𝖛 U+1D59B1D525
w U+0077𝖜 U+1D59C1D525
x U+0078𝖝 U+1D59D1D525
y U+0079𝖞 U+1D59E1D525
z U+007A𝖟 U+1D59F1D525
-------------------------------------------------------------------------------- /tables/mathvariants-bold-script.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 |
Originalbold-scriptΔcode point
A U+0041𝓐 U+1D4D01D48F
B U+0042𝓑 U+1D4D11D48F
C U+0043𝓒 U+1D4D21D48F
D U+0044𝓓 U+1D4D31D48F
E U+0045𝓔 U+1D4D41D48F
F U+0046𝓕 U+1D4D51D48F
G U+0047𝓖 U+1D4D61D48F
H U+0048𝓗 U+1D4D71D48F
I U+0049𝓘 U+1D4D81D48F
J U+004A𝓙 U+1D4D91D48F
K U+004B𝓚 U+1D4DA1D48F
L U+004C𝓛 U+1D4DB1D48F
M U+004D𝓜 U+1D4DC1D48F
N U+004E𝓝 U+1D4DD1D48F
O U+004F𝓞 U+1D4DE1D48F
P U+0050𝓟 U+1D4DF1D48F
Q U+0051𝓠 U+1D4E01D48F
R U+0052𝓡 U+1D4E11D48F
S U+0053𝓢 U+1D4E21D48F
T U+0054𝓣 U+1D4E31D48F
U U+0055𝓤 U+1D4E41D48F
V U+0056𝓥 U+1D4E51D48F
W U+0057𝓦 U+1D4E61D48F
X U+0058𝓧 U+1D4E71D48F
Y U+0059𝓨 U+1D4E81D48F
Z U+005A𝓩 U+1D4E91D48F
a U+0061𝓪 U+1D4EA1D489
b U+0062𝓫 U+1D4EB1D489
c U+0063𝓬 U+1D4EC1D489
d U+0064𝓭 U+1D4ED1D489
e U+0065𝓮 U+1D4EE1D489
f U+0066𝓯 U+1D4EF1D489
g U+0067𝓰 U+1D4F01D489
h U+0068𝓱 U+1D4F11D489
i U+0069𝓲 U+1D4F21D489
j U+006A𝓳 U+1D4F31D489
k U+006B𝓴 U+1D4F41D489
l U+006C𝓵 U+1D4F51D489
m U+006D𝓶 U+1D4F61D489
n U+006E𝓷 U+1D4F71D489
o U+006F𝓸 U+1D4F81D489
p U+0070𝓹 U+1D4F91D489
q U+0071𝓺 U+1D4FA1D489
r U+0072𝓻 U+1D4FB1D489
s U+0073𝓼 U+1D4FC1D489
t U+0074𝓽 U+1D4FD1D489
u U+0075𝓾 U+1D4FE1D489
v U+0076𝓿 U+1D4FF1D489
w U+0077𝔀 U+1D5001D489
x U+0078𝔁 U+1D5011D489
y U+0079𝔂 U+1D5021D489
z U+007A𝔃 U+1D5031D489
-------------------------------------------------------------------------------- /tables/mathvariants-fraktur.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 |
OriginalfrakturΔcode point
A U+0041𝔄 U+1D5041D4C3
B U+0042𝔅 U+1D5051D4C3
C U+0043ℭ U+0212D20EA
D U+0044𝔇 U+1D5071D4C3
E U+0045𝔈 U+1D5081D4C3
F U+0046𝔉 U+1D5091D4C3
G U+0047𝔊 U+1D50A1D4C3
H U+0048ℌ U+0210C20C4
I U+0049ℑ U+0211120C8
J U+004A𝔍 U+1D50D1D4C3
K U+004B𝔎 U+1D50E1D4C3
L U+004C𝔏 U+1D50F1D4C3
M U+004D𝔐 U+1D5101D4C3
N U+004E𝔑 U+1D5111D4C3
O U+004F𝔒 U+1D5121D4C3
P U+0050𝔓 U+1D5131D4C3
Q U+0051𝔔 U+1D5141D4C3
R U+0052ℜ U+0211C20CA
S U+0053𝔖 U+1D5161D4C3
T U+0054𝔗 U+1D5171D4C3
U U+0055𝔘 U+1D5181D4C3
V U+0056𝔙 U+1D5191D4C3
W U+0057𝔚 U+1D51A1D4C3
X U+0058𝔛 U+1D51B1D4C3
Y U+0059𝔜 U+1D51C1D4C3
Z U+005Aℨ U+0212820CE
a U+0061𝔞 U+1D51E1D4BD
b U+0062𝔟 U+1D51F1D4BD
c U+0063𝔠 U+1D5201D4BD
d U+0064𝔡 U+1D5211D4BD
e U+0065𝔢 U+1D5221D4BD
f U+0066𝔣 U+1D5231D4BD
g U+0067𝔤 U+1D5241D4BD
h U+0068𝔥 U+1D5251D4BD
i U+0069𝔦 U+1D5261D4BD
j U+006A𝔧 U+1D5271D4BD
k U+006B𝔨 U+1D5281D4BD
l U+006C𝔩 U+1D5291D4BD
m U+006D𝔪 U+1D52A1D4BD
n U+006E𝔫 U+1D52B1D4BD
o U+006F𝔬 U+1D52C1D4BD
p U+0070𝔭 U+1D52D1D4BD
q U+0071𝔮 U+1D52E1D4BD
r U+0072𝔯 U+1D52F1D4BD
s U+0073𝔰 U+1D5301D4BD
t U+0074𝔱 U+1D5311D4BD
u U+0075𝔲 U+1D5321D4BD
v U+0076𝔳 U+1D5331D4BD
w U+0077𝔴 U+1D5341D4BD
x U+0078𝔵 U+1D5351D4BD
y U+0079𝔶 U+1D5361D4BD
z U+007A𝔷 U+1D5371D4BD
-------------------------------------------------------------------------------- /tables/mathvariants-initial.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 |
OriginalinitialΔcode point
ب U+0628𞸡 U+1EE211E7F9
ج U+062C𞸢 U+1EE221E7F6
ه U+0647𞸤 U+1EE241E7DD
ح U+062D𞸧 U+1EE271E7FA
ي U+064A𞸩 U+1EE291E7DF
ك U+0643𞸪 U+1EE2A1E7E7
ل U+0644𞸫 U+1EE2B1E7E7
م U+0645𞸬 U+1EE2C1E7E7
ن U+0646𞸭 U+1EE2D1E7E7
س U+0633𞸮 U+1EE2E1E7FB
ع U+0639𞸯 U+1EE2F1E7F6
ف U+0641𞸰 U+1EE301E7EF
ص U+0635𞸱 U+1EE311E7FC
ق U+0642𞸲 U+1EE321E7F0
ش U+0634𞸴 U+1EE341E800
ت U+062A𞸵 U+1EE351E80B
ث U+062B𞸶 U+1EE361E80B
خ U+062E𞸷 U+1EE371E809
ض U+0636𞸹 U+1EE391E803
غ U+063A𞸻 U+1EE3B1E801
-------------------------------------------------------------------------------- /tables/mathvariants-looped.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 |
OriginalloopedΔcode point
ا U+0627𞺀 U+1EE801E859
ب U+0628𞺁 U+1EE811E859
ج U+062C𞺂 U+1EE821E856
د U+062F𞺃 U+1EE831E854
ه U+0647𞺄 U+1EE841E83D
و U+0648𞺅 U+1EE851E83D
ز U+0632𞺆 U+1EE861E854
ح U+062D𞺇 U+1EE871E85A
ط U+0637𞺈 U+1EE881E851
ي U+064A𞺉 U+1EE891E83F
ل U+0644𞺋 U+1EE8B1E847
م U+0645𞺌 U+1EE8C1E847
ن U+0646𞺍 U+1EE8D1E847
س U+0633𞺎 U+1EE8E1E85B
ع U+0639𞺏 U+1EE8F1E856
ف U+0641𞺐 U+1EE901E84F
ص U+0635𞺑 U+1EE911E85C
ق U+0642𞺒 U+1EE921E850
ر U+0631𞺓 U+1EE931E862
ش U+0634𞺔 U+1EE941E860
ت U+062A𞺕 U+1EE951E86B
ث U+062B𞺖 U+1EE961E86B
خ U+062E𞺗 U+1EE971E869
ذ U+0630𞺘 U+1EE981E868
ض U+0636𞺙 U+1EE991E863
ظ U+0638𞺚 U+1EE9A1E862
غ U+063A𞺛 U+1EE9B1E861
-------------------------------------------------------------------------------- /tables/mathvariants-monospace.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 |
OriginalmonospaceΔcode point
A U+0041𝙰 U+1D6701D62F
B U+0042𝙱 U+1D6711D62F
C U+0043𝙲 U+1D6721D62F
D U+0044𝙳 U+1D6731D62F
E U+0045𝙴 U+1D6741D62F
F U+0046𝙵 U+1D6751D62F
G U+0047𝙶 U+1D6761D62F
H U+0048𝙷 U+1D6771D62F
I U+0049𝙸 U+1D6781D62F
J U+004A𝙹 U+1D6791D62F
K U+004B𝙺 U+1D67A1D62F
L U+004C𝙻 U+1D67B1D62F
M U+004D𝙼 U+1D67C1D62F
N U+004E𝙽 U+1D67D1D62F
O U+004F𝙾 U+1D67E1D62F
P U+0050𝙿 U+1D67F1D62F
Q U+0051𝚀 U+1D6801D62F
R U+0052𝚁 U+1D6811D62F
S U+0053𝚂 U+1D6821D62F
T U+0054𝚃 U+1D6831D62F
U U+0055𝚄 U+1D6841D62F
V U+0056𝚅 U+1D6851D62F
W U+0057𝚆 U+1D6861D62F
X U+0058𝚇 U+1D6871D62F
Y U+0059𝚈 U+1D6881D62F
Z U+005A𝚉 U+1D6891D62F
a U+0061𝚊 U+1D68A1D629
b U+0062𝚋 U+1D68B1D629
c U+0063𝚌 U+1D68C1D629
d U+0064𝚍 U+1D68D1D629
e U+0065𝚎 U+1D68E1D629
f U+0066𝚏 U+1D68F1D629
g U+0067𝚐 U+1D6901D629
h U+0068𝚑 U+1D6911D629
i U+0069𝚒 U+1D6921D629
j U+006A𝚓 U+1D6931D629
k U+006B𝚔 U+1D6941D629
l U+006C𝚕 U+1D6951D629
m U+006D𝚖 U+1D6961D629
n U+006E𝚗 U+1D6971D629
o U+006F𝚘 U+1D6981D629
p U+0070𝚙 U+1D6991D629
q U+0071𝚚 U+1D69A1D629
r U+0072𝚛 U+1D69B1D629
s U+0073𝚜 U+1D69C1D629
t U+0074𝚝 U+1D69D1D629
u U+0075𝚞 U+1D69E1D629
v U+0076𝚟 U+1D69F1D629
w U+0077𝚠 U+1D6A01D629
x U+0078𝚡 U+1D6A11D629
y U+0079𝚢 U+1D6A21D629
z U+007A𝚣 U+1D6A31D629
0 U+0030𝟶 U+1D7F61D7C6
1 U+0031𝟷 U+1D7F71D7C6
2 U+0032𝟸 U+1D7F81D7C6
3 U+0033𝟹 U+1D7F91D7C6
4 U+0034𝟺 U+1D7FA1D7C6
5 U+0035𝟻 U+1D7FB1D7C6
6 U+0036𝟼 U+1D7FC1D7C6
7 U+0037𝟽 U+1D7FD1D7C6
8 U+0038𝟾 U+1D7FE1D7C6
9 U+0039𝟿 U+1D7FF1D7C6
-------------------------------------------------------------------------------- /tables/mathvariants-sans-serif-italic.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 |
Originalsans-serif-italicΔcode point
A U+0041𝘈 U+1D6081D5C7
B U+0042𝘉 U+1D6091D5C7
C U+0043𝘊 U+1D60A1D5C7
D U+0044𝘋 U+1D60B1D5C7
E U+0045𝘌 U+1D60C1D5C7
F U+0046𝘍 U+1D60D1D5C7
G U+0047𝘎 U+1D60E1D5C7
H U+0048𝘏 U+1D60F1D5C7
I U+0049𝘐 U+1D6101D5C7
J U+004A𝘑 U+1D6111D5C7
K U+004B𝘒 U+1D6121D5C7
L U+004C𝘓 U+1D6131D5C7
M U+004D𝘔 U+1D6141D5C7
N U+004E𝘕 U+1D6151D5C7
O U+004F𝘖 U+1D6161D5C7
P U+0050𝘗 U+1D6171D5C7
Q U+0051𝘘 U+1D6181D5C7
R U+0052𝘙 U+1D6191D5C7
S U+0053𝘚 U+1D61A1D5C7
T U+0054𝘛 U+1D61B1D5C7
U U+0055𝘜 U+1D61C1D5C7
V U+0056𝘝 U+1D61D1D5C7
W U+0057𝘞 U+1D61E1D5C7
X U+0058𝘟 U+1D61F1D5C7
Y U+0059𝘠 U+1D6201D5C7
Z U+005A𝘡 U+1D6211D5C7
a U+0061𝘢 U+1D6221D5C1
b U+0062𝘣 U+1D6231D5C1
c U+0063𝘤 U+1D6241D5C1
d U+0064𝘥 U+1D6251D5C1
e U+0065𝘦 U+1D6261D5C1
f U+0066𝘧 U+1D6271D5C1
g U+0067𝘨 U+1D6281D5C1
h U+0068𝘩 U+1D6291D5C1
i U+0069𝘪 U+1D62A1D5C1
j U+006A𝘫 U+1D62B1D5C1
k U+006B𝘬 U+1D62C1D5C1
l U+006C𝘭 U+1D62D1D5C1
m U+006D𝘮 U+1D62E1D5C1
n U+006E𝘯 U+1D62F1D5C1
o U+006F𝘰 U+1D6301D5C1
p U+0070𝘱 U+1D6311D5C1
q U+0071𝘲 U+1D6321D5C1
r U+0072𝘳 U+1D6331D5C1
s U+0073𝘴 U+1D6341D5C1
t U+0074𝘵 U+1D6351D5C1
u U+0075𝘶 U+1D6361D5C1
v U+0076𝘷 U+1D6371D5C1
w U+0077𝘸 U+1D6381D5C1
x U+0078𝘹 U+1D6391D5C1
y U+0079𝘺 U+1D63A1D5C1
z U+007A𝘻 U+1D63B1D5C1
-------------------------------------------------------------------------------- /tables/mathvariants-sans-serif.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 |
Originalsans-serifΔcode point
A U+0041𝖠 U+1D5A01D55F
B U+0042𝖡 U+1D5A11D55F
C U+0043𝖢 U+1D5A21D55F
D U+0044𝖣 U+1D5A31D55F
E U+0045𝖤 U+1D5A41D55F
F U+0046𝖥 U+1D5A51D55F
G U+0047𝖦 U+1D5A61D55F
H U+0048𝖧 U+1D5A71D55F
I U+0049𝖨 U+1D5A81D55F
J U+004A𝖩 U+1D5A91D55F
K U+004B𝖪 U+1D5AA1D55F
L U+004C𝖫 U+1D5AB1D55F
M U+004D𝖬 U+1D5AC1D55F
N U+004E𝖭 U+1D5AD1D55F
O U+004F𝖮 U+1D5AE1D55F
P U+0050𝖯 U+1D5AF1D55F
Q U+0051𝖰 U+1D5B01D55F
R U+0052𝖱 U+1D5B11D55F
S U+0053𝖲 U+1D5B21D55F
T U+0054𝖳 U+1D5B31D55F
U U+0055𝖴 U+1D5B41D55F
V U+0056𝖵 U+1D5B51D55F
W U+0057𝖶 U+1D5B61D55F
X U+0058𝖷 U+1D5B71D55F
Y U+0059𝖸 U+1D5B81D55F
Z U+005A𝖹 U+1D5B91D55F
a U+0061𝖺 U+1D5BA1D559
b U+0062𝖻 U+1D5BB1D559
c U+0063𝖼 U+1D5BC1D559
d U+0064𝖽 U+1D5BD1D559
e U+0065𝖾 U+1D5BE1D559
f U+0066𝖿 U+1D5BF1D559
g U+0067𝗀 U+1D5C01D559
h U+0068𝗁 U+1D5C11D559
i U+0069𝗂 U+1D5C21D559
j U+006A𝗃 U+1D5C31D559
k U+006B𝗄 U+1D5C41D559
l U+006C𝗅 U+1D5C51D559
m U+006D𝗆 U+1D5C61D559
n U+006E𝗇 U+1D5C71D559
o U+006F𝗈 U+1D5C81D559
p U+0070𝗉 U+1D5C91D559
q U+0071𝗊 U+1D5CA1D559
r U+0072𝗋 U+1D5CB1D559
s U+0073𝗌 U+1D5CC1D559
t U+0074𝗍 U+1D5CD1D559
u U+0075𝗎 U+1D5CE1D559
v U+0076𝗏 U+1D5CF1D559
w U+0077𝗐 U+1D5D01D559
x U+0078𝗑 U+1D5D11D559
y U+0079𝗒 U+1D5D21D559
z U+007A𝗓 U+1D5D31D559
0 U+0030𝟢 U+1D7E21D7B2
1 U+0031𝟣 U+1D7E31D7B2
2 U+0032𝟤 U+1D7E41D7B2
3 U+0033𝟥 U+1D7E51D7B2
4 U+0034𝟦 U+1D7E61D7B2
5 U+0035𝟧 U+1D7E71D7B2
6 U+0036𝟨 U+1D7E81D7B2
7 U+0037𝟩 U+1D7E91D7B2
8 U+0038𝟪 U+1D7EA1D7B2
9 U+0039𝟫 U+1D7EB1D7B2
-------------------------------------------------------------------------------- /tables/mathvariants-script.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 |
OriginalscriptΔcode point
A U+0041𝒜 U+1D49C1D45B
B U+0042ℬ U+0212C20EA
C U+0043𝒞 U+1D49E1D45B
D U+0044𝒟 U+1D49F1D45B
E U+0045ℰ U+0213020EB
F U+0046ℱ U+0213120EB
G U+0047𝒢 U+1D4A21D45B
H U+0048ℋ U+0210B20C3
I U+0049ℐ U+0211020C7
J U+004A𝒥 U+1D4A51D45B
K U+004B𝒦 U+1D4A61D45B
L U+004Cℒ U+0211220C6
M U+004Dℳ U+0213320E6
N U+004E𝒩 U+1D4A91D45B
O U+004F𝒪 U+1D4AA1D45B
P U+0050𝒫 U+1D4AB1D45B
Q U+0051𝒬 U+1D4AC1D45B
R U+0052ℛ U+0211B20C9
S U+0053𝒮 U+1D4AE1D45B
T U+0054𝒯 U+1D4AF1D45B
U U+0055𝒰 U+1D4B01D45B
V U+0056𝒱 U+1D4B11D45B
W U+0057𝒲 U+1D4B21D45B
X U+0058𝒳 U+1D4B31D45B
Y U+0059𝒴 U+1D4B41D45B
Z U+005A𝒵 U+1D4B51D45B
a U+0061𝒶 U+1D4B61D455
b U+0062𝒷 U+1D4B71D455
c U+0063𝒸 U+1D4B81D455
d U+0064𝒹 U+1D4B91D455
e U+0065ℯ U+0212F20CA
f U+0066𝒻 U+1D4BB1D455
g U+0067ℊ U+0210A20A3
h U+0068𝒽 U+1D4BD1D455
i U+0069𝒾 U+1D4BE1D455
j U+006A𝒿 U+1D4BF1D455
k U+006B𝓀 U+1D4C01D455
l U+006C𝓁 U+1D4C11D455
m U+006D𝓂 U+1D4C21D455
n U+006E𝓃 U+1D4C31D455
o U+006Fℴ U+0213420C5
p U+0070𝓅 U+1D4C51D455
q U+0071𝓆 U+1D4C61D455
r U+0072𝓇 U+1D4C71D455
s U+0073𝓈 U+1D4C81D455
t U+0074𝓉 U+1D4C91D455
u U+0075𝓊 U+1D4CA1D455
v U+0076𝓋 U+1D4CB1D455
w U+0077𝓌 U+1D4CC1D455
x U+0078𝓍 U+1D4CD1D455
y U+0079𝓎 U+1D4CE1D455
z U+007A𝓏 U+1D4CF1D455
-------------------------------------------------------------------------------- /tables/mathvariants-stretched.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 |
OriginalstretchedΔcode point
ب U+0628𞹡 U+1EE611E839
ج U+062C𞹢 U+1EE621E836
ه U+0647𞹤 U+1EE641E81D
ح U+062D𞹧 U+1EE671E83A
ط U+0637𞹨 U+1EE681E831
ي U+064A𞹩 U+1EE691E81F
ك U+0643𞹪 U+1EE6A1E827
م U+0645𞹬 U+1EE6C1E827
ن U+0646𞹭 U+1EE6D1E827
س U+0633𞹮 U+1EE6E1E83B
ع U+0639𞹯 U+1EE6F1E836
ف U+0641𞹰 U+1EE701E82F
ص U+0635𞹱 U+1EE711E83C
ق U+0642𞹲 U+1EE721E830
ش U+0634𞹴 U+1EE741E840
ت U+062A𞹵 U+1EE751E84B
ث U+062B𞹶 U+1EE761E84B
خ U+062E𞹷 U+1EE771E849
ض U+0636𞹹 U+1EE791E843
ظ U+0638𞹺 U+1EE7A1E842
غ U+063A𞹻 U+1EE7B1E841
ٮ U+066E𞹼 U+1EE7C1E80E
ڡ U+06A1𞹾 U+1EE7E1E7DD
-------------------------------------------------------------------------------- /tables/mathvariants-tailed.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 |
OriginaltailedΔcode point
ج U+062C𞹂 U+1EE421E816
ح U+062D𞹇 U+1EE471E81A
ي U+064A𞹉 U+1EE491E7FF
ل U+0644𞹋 U+1EE4B1E807
ن U+0646𞹍 U+1EE4D1E807
س U+0633𞹎 U+1EE4E1E81B
ع U+0639𞹏 U+1EE4F1E816
ص U+0635𞹑 U+1EE511E81C
ق U+0642𞹒 U+1EE521E810
ش U+0634𞹔 U+1EE541E820
خ U+062E𞹗 U+1EE571E829
ض U+0636𞹙 U+1EE591E823
غ U+063A𞹛 U+1EE5B1E821
ں U+06BA𞹝 U+1EE5D1E7A3
ٯ U+066F𞹟 U+1EE5F1E7F0
-------------------------------------------------------------------------------- /tables/operator-dictionary.xsl: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 46 | 47 | 48 | 49 | 50 | 51 | mirrorable 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | -------------------------------------------------------------------------------- /tables/sorttable.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/w3c/mathml-core/967d2f7d73f787506a799135e3ad2268e97dddba/tables/sorttable.js -------------------------------------------------------------------------------- /user-agent-stylesheet/maction.css: -------------------------------------------------------------------------------- 1 | maction > :not(:first-child) { 2 | display: none; 3 | } 4 | -------------------------------------------------------------------------------- /user-agent-stylesheet/math.css: -------------------------------------------------------------------------------- 1 | math { 2 | direction: ltr; 3 | text-indent: 0; 4 | letter-spacing: normal; 5 | line-height: normal; 6 | word-spacing: normal; 7 | font-family: math; 8 | font-size: inherit; 9 | font-style: normal; 10 | font-weight: normal; 11 | display: inline math; 12 | math-shift: normal; 13 | math-style: compact; 14 | math-depth: 0; 15 | } 16 | math[display="block" i] { 17 | display: block math; 18 | math-style: normal; 19 | } 20 | math[display="inline" i] { 21 | display: inline math; 22 | math-style: compact; 23 | } 24 | -------------------------------------------------------------------------------- /user-agent-stylesheet/merror.css: -------------------------------------------------------------------------------- 1 | merror { 2 | border: 1px solid red; 3 | background-color: lightYellow; 4 | } 5 | -------------------------------------------------------------------------------- /user-agent-stylesheet/mfrac.css: -------------------------------------------------------------------------------- 1 | mfrac { 2 | padding-inline: 1px; 3 | } 4 | mfrac > * { 5 | math-depth: auto-add; 6 | math-style: compact; 7 | } 8 | mfrac > :nth-child(2) { 9 | math-shift: compact; 10 | } 11 | -------------------------------------------------------------------------------- /user-agent-stylesheet/mi.css: -------------------------------------------------------------------------------- 1 | mi { 2 | text-transform: math-auto; 3 | } 4 | -------------------------------------------------------------------------------- /user-agent-stylesheet/mphantom.css: -------------------------------------------------------------------------------- 1 | mphantom { 2 | visibility: hidden; 3 | } 4 | -------------------------------------------------------------------------------- /user-agent-stylesheet/ms-legacy.css: -------------------------------------------------------------------------------- 1 | ms:before, ms:after { 2 | content: "\0022"; 3 | } 4 | ms[lquote]:before { 5 | content: attr(lquote); 6 | } 7 | ms[rquote]:after { 8 | content: attr(rquote); 9 | } 10 | -------------------------------------------------------------------------------- /user-agent-stylesheet/mtable.css: -------------------------------------------------------------------------------- 1 | mtable { 2 | display: inline-table; 3 | math-style: compact; 4 | } 5 | -------------------------------------------------------------------------------- /user-agent-stylesheet/mtd.css: -------------------------------------------------------------------------------- 1 | mtd { 2 | display: table-cell; 3 | /* Centering inside table cells should rely on box alignment properties. 4 | See https://github.com/w3c/mathml-core/issues/156 */ 5 | text-align: center; 6 | padding: 0.5ex 0.4em; 7 | } 8 | -------------------------------------------------------------------------------- /user-agent-stylesheet/mtr.css: -------------------------------------------------------------------------------- 1 | mtr { 2 | display: table-row; 3 | } 4 | -------------------------------------------------------------------------------- /user-agent-stylesheet/radicals.css: -------------------------------------------------------------------------------- 1 | mroot > :not(:first-child) { 2 | math-depth: add(2); 3 | math-style: compact; 4 | } 5 | mroot, msqrt { 6 | math-shift: compact; 7 | } 8 | -------------------------------------------------------------------------------- /user-agent-stylesheet/scripts.css: -------------------------------------------------------------------------------- 1 | msub > :not(:first-child), 2 | msup > :not(:first-child), 3 | msubsup > :not(:first-child), 4 | mmultiscripts > :not(:first-child), 5 | munder > :not(:first-child), 6 | mover > :not(:first-child), 7 | munderover > :not(:first-child) { 8 | math-depth: add(1); 9 | math-style: compact; 10 | } 11 | munder[accentunder="true" i] > :nth-child(2), 12 | mover[accent="true" i] > :nth-child(2), 13 | munderover[accentunder="true" i] > :nth-child(2), 14 | munderover[accent="true" i] > :nth-child(3) { 15 | font-size: inherit; 16 | } 17 | msub > :nth-child(2), 18 | msubsup > :nth-child(2), 19 | mmultiscripts > :nth-child(even), 20 | mmultiscripts > mprescripts ~ :nth-child(odd), 21 | mover[accent="true" i] > :first-child, 22 | munderover[accent="true" i] > :first-child { 23 | math-shift: compact; 24 | } 25 | mmultiscripts > mprescripts ~ :nth-child(even) { 26 | math-shift: inherit; 27 | } 28 | -------------------------------------------------------------------------------- /user-agent-stylesheet/semantics.css: -------------------------------------------------------------------------------- 1 | semantics > :not(:first-child) { 2 | display: none; 3 | } 4 | -------------------------------------------------------------------------------- /user-agent-stylesheet/universal.css: -------------------------------------------------------------------------------- 1 | * { 2 | font-size: math; 3 | display: block math; 4 | writing-mode: horizontal-tb !important; 5 | } 6 | -------------------------------------------------------------------------------- /w3c.json: -------------------------------------------------------------------------------- 1 | { 2 | "group": [35549], 3 | "contacts": ["bert-github"], 4 | "repo-type": ["rec-track"] 5 | } 6 | -------------------------------------------------------------------------------- /webidl/MathMLElement.idl: -------------------------------------------------------------------------------- 1 | [Exposed=Window] 2 | interface MathMLElement : Element { }; 3 | MathMLElement includes GlobalEventHandlers; 4 | MathMLElement includes HTMLOrForeignElement; 5 | -------------------------------------------------------------------------------- /wpt/extract.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | if [ "$#" -ne 1 ]; then 4 | echo "usage: $0 /path/to/web-platform-tests" 5 | exit 6 | fi 7 | 8 | MATHML_CORE_URL=https://w3c.github.io/mathml-core 9 | WPT_DIR=$1 10 | WPT_SUBDIRS="mathml css/css-fonts/math-script-level-and-math-style css/css-text/text-transform/math" 11 | PYTHON_SCRIPT=wpt-tests-generator.py 12 | WARNING="This file was automatically generated by extract.sh. Do not edit." 13 | 14 | echo " 15 | #!/usr/bin/python 16 | # $WARNING 17 | 18 | from __future__ import print_function 19 | import re 20 | 21 | tests = {} 22 | def add_test(section, path): 23 | if not section in tests: 24 | tests[section] = [] 25 | tests[section].append(path) 26 | 27 | def format_tests(): 28 | all_tests = set() 29 | for section in sorted(tests): 30 | test_list=[] 31 | for test in sorted(tests[section]): 32 | # Adjust the path to match respec's assumptions. 33 | result = re.match( r'mathml/(.*)', test) 34 | if result: 35 | test = result.group(1) 36 | else: 37 | test = \"../%s\" % test 38 | all_tests.add(test) 39 | test_list.append(test) 40 | tests[section] = ','.join(test_list) 41 | 42 | print('Generating test data... ', end='') 43 | output = open('data-tests.js', 'w') 44 | print('// $WARNING', file=output) 45 | print('var dataTests = {', file=output) 46 | print(' \"implementation-report\": \"%s\",' % ','.join(sorted(all_tests)), file=output) 47 | for section in sorted(tests): 48 | print(' \"%s\" : \"%s\",' % (section, tests[section]), file=output) 49 | print('};\n', file=output) 50 | output.close() 51 | print('done') 52 | 53 | for test in sorted(all_tests): 54 | print(test) 55 | " > $PYTHON_SCRIPT 56 | 57 | for subdir in $WPT_SUBDIRS; do 58 | echo -n "Extracting tests from $WPT_DIR/$subdir... " 59 | find $WPT_DIR/$subdir -type f -name '*.html' | xargs grep '> $PYTHON_SCRIPT 60 | echo "done" 61 | done 62 | 63 | echo "format_tests()" >> $PYTHON_SCRIPT 64 | python $PYTHON_SCRIPT 65 | -------------------------------------------------------------------------------- /wpt/spec-implementation-report.js: -------------------------------------------------------------------------------- 1 | /* -*- Mode: Java; tab-width: 4; indent-tabs-mode:nil; c-basic-offset: 4 -*- */ 2 | /* vim: set ts=4 et sw=4 tw=80: */ 3 | 4 | /* 5 | Get the latest aligned run data from WPT, 6 | massage it into a nice indexed 7 | result set (testPath:result) for quick reference 8 | */ 9 | let wptDataPromise = async function () { 10 | let f = await fetch('https://wpt.fyi/api/runs?aligned'); 11 | let data = await f.json(); 12 | let ids = data.map(rec => rec.id).join(); 13 | 14 | // Note: this may get a bit "too much", but it doesn't matter to results 15 | f = await fetch(`https://wpt.fyi/api/search?label=master&label=experimental&q=math&run_ids=${ids}`); 16 | data = await f.json(); 17 | 18 | return data.runs.map((run, i) => { 19 | let retVal = { 20 | engine: run.browser_name, 21 | results: {} 22 | }; 23 | 24 | data.results.forEach((item) => { 25 | retVal.results[item.test] = ( 26 | item.legacy_status[i].passes 27 | == 28 | item.legacy_status[i].total 29 | ) 30 | ? 31 | "PASS" 32 | : 33 | "FAIL"; 34 | 35 | }) 36 | return retVal; 37 | }); 38 | }(); 39 | 40 | /* 41 | Before we start, re-attach 42 | data-tests meta-information in a convenient 43 | array form where we can 44 | refer to it later because respec will 45 | remove it... 46 | */ 47 | async function initReport() { 48 | // respec uses data-tests attributes but that's not very convenient 49 | // to update. Spec authors should not use them inside the spec content. 50 | // Instead, the data-tests attributes are expected to be loaded from 51 | // the data-tests.js file, which is automatically generated from the 52 | // actuall WPT test metadata. 53 | // FIXME: Should respec's id for header be generated here? 54 | if (document.querySelector('[data-tests]')) 55 | throw "Element with data-tests attribute found!"; 56 | for (var section in dataTests) { 57 | var sectionElement = document.getElementById(section); 58 | var div; 59 | if (!sectionElement) 60 | throw `Cannot find section of id '${section}'.` 61 | if (section == 'implementation-report') { 62 | div = sectionElement; 63 | } else { 64 | div = document.createElement("div"); 65 | var header = sectionElement.firstElementChild; 66 | if (!header) 67 | throw `Cannot find header for section ${section}`; 68 | header.parentNode.insertBefore(div, header.nextElementSibling); 69 | } 70 | div.dataset.tests = dataTests[section]; 71 | div.__tests = dataTests[section].split(','); 72 | } 73 | } 74 | 75 | // this is using the technique and styles adapted from annotation.js 76 | async function loadWebPlaformTestsResults() { 77 | let wptData = await wptDataPromise; 78 | let ENGINE_LOGOS = { 79 | 'firefox': "https://test.csswg.org/harness/img/gecko.svg", 80 | 'safari': "https://test.csswg.org/harness/img/webkit.svg", 81 | 'edge': "https://test.csswg.org/harness/img/edge.svg", 82 | 'chrome': "https://test.csswg.org/harness/img/blink.svg", 83 | }; 84 | 85 | document.querySelectorAll('.respec-tests-details').forEach(el => { 86 | let summary = {}; 87 | let annotationEl = el.parentElement; 88 | annotationEl.classList.add('annotation'); 89 | annotationEl.classList.add('removeOnSave'); 90 | 91 | annotationEl.__tests.forEach(key => { 92 | wptData.forEach(rec => { 93 | summary[rec.engine] = summary[rec.engine] || { pass: 0, fail: 0, untested: 0 }; 94 | // respec refers uses path with respect to the mathml/ folder 95 | // while WPT uses the full path. So we need to tweak the key. 96 | var path; 97 | if (key.substring(0, 2) == "..") { 98 | // Tests outside the /mathml/ folder (e.g. CSS ones) 99 | path = key.substring(2); 100 | } else { 101 | // Tests inside the /mathml/ folder. 102 | path = `/mathml/${key}`; 103 | } 104 | if (!rec.results.hasOwnProperty(path)) { 105 | summary[rec.engine].untested++; 106 | } else if (rec.results[path] === "PASS") { 107 | summary[rec.engine].pass++; 108 | } else { 109 | summary[rec.engine].fail++; 110 | } 111 | }) 112 | }) 113 | 114 | let source = ` 115 |
116 | ${wptData.map(engineData => { 117 | let engine = engineData.engine; 118 | let passing = summary[engine].pass; 119 | let failing = summary[engine].fail; 120 | let untested = summary[engine].untested; 121 | let total = passing + failing + untested; 122 | let status = ''; 123 | 124 | switch (Math.round((passing / total) * 10.0)) { 125 | case 10: 126 | case 9: status = 'almost-pass'; break; 127 | case 8: status = 'slightly-buggy'; break; 128 | case 7: status = 'buggy'; break; 129 | case 6: status = 'very-buggy'; break; 130 | case 5: status = 'fail'; break; 131 | default: status = 'epic-fail'; break; 132 | } 133 | // this also had data-needcount but... 134 | return `${engine}` 135 | })} 136 |
`; 137 | 138 | let frag = document.createRange().createContextualFragment(source); 139 | annotationEl.appendChild(frag); 140 | 141 | 142 | }); 143 | document.getElementById("implementation-report").insertAdjacentHTML("beforeend", ``); 144 | } 145 | --------------------------------------------------------------------------------