├── .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 |
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 |
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 |
18 |
--------------------------------------------------------------------------------
/examples/example-dir.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/w3c/mathml-core/967d2f7d73f787506a799135e3ad2268e97dddba/examples/example-dir.png
--------------------------------------------------------------------------------
/examples/example-display.html:
--------------------------------------------------------------------------------
1 |
24 |
--------------------------------------------------------------------------------
/examples/example-display.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/w3c/mathml-core/967d2f7d73f787506a799135e3ad2268e97dddba/examples/example-display.png
--------------------------------------------------------------------------------
/examples/example-displaystyle-scriptlevel.html:
--------------------------------------------------------------------------------
1 |
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 |
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 |
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 |
23 |
24 |
25 | Fill the blank:
26 |
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 |
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 |
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 |
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 |
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 |
37 | VS
38 |
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 |
9 |
--------------------------------------------------------------------------------
/examples/example-merror.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/w3c/mathml-core/967d2f7d73f787506a799135e3ad2268e97dddba/examples/example-merror.png
--------------------------------------------------------------------------------
/examples/example-mfrac.html:
--------------------------------------------------------------------------------
1 |
28 |
--------------------------------------------------------------------------------
/examples/example-mfrac.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/w3c/mathml-core/967d2f7d73f787506a799135e3ad2268e97dddba/examples/example-mfrac.png
--------------------------------------------------------------------------------
/examples/example-mi.html:
--------------------------------------------------------------------------------
1 |
10 |
--------------------------------------------------------------------------------
/examples/example-mi.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/w3c/mathml-core/967d2f7d73f787506a799135e3ad2268e97dddba/examples/example-mi.png
--------------------------------------------------------------------------------
/examples/example-mmultiscripts.html:
--------------------------------------------------------------------------------
1 |
15 |
--------------------------------------------------------------------------------
/examples/example-mmultiscripts.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/w3c/mathml-core/967d2f7d73f787506a799135e3ad2268e97dddba/examples/example-mmultiscripts.png
--------------------------------------------------------------------------------
/examples/example-mn.html:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/examples/example-mn.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/w3c/mathml-core/967d2f7d73f787506a799135e3ad2268e97dddba/examples/example-mn.png
--------------------------------------------------------------------------------
/examples/example-mo-1.html:
--------------------------------------------------------------------------------
1 |
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 |
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 |
12 |
--------------------------------------------------------------------------------
/examples/example-mo-3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/w3c/mathml-core/967d2f7d73f787506a799135e3ad2268e97dddba/examples/example-mo-3.png
--------------------------------------------------------------------------------
/examples/example-mpadded.html:
--------------------------------------------------------------------------------
1 |
25 |
--------------------------------------------------------------------------------
/examples/example-mpadded.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/w3c/mathml-core/967d2f7d73f787506a799135e3ad2268e97dddba/examples/example-mpadded.png
--------------------------------------------------------------------------------
/examples/example-mphantom.html:
--------------------------------------------------------------------------------
1 |
21 |
--------------------------------------------------------------------------------
/examples/example-mphantom.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/w3c/mathml-core/967d2f7d73f787506a799135e3ad2268e97dddba/examples/example-mphantom.png
--------------------------------------------------------------------------------
/examples/example-mrow.html:
--------------------------------------------------------------------------------
1 |
21 |
--------------------------------------------------------------------------------
/examples/example-mrow.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/w3c/mathml-core/967d2f7d73f787506a799135e3ad2268e97dddba/examples/example-mrow.png
--------------------------------------------------------------------------------
/examples/example-ms.html:
--------------------------------------------------------------------------------
1 |
6 |
--------------------------------------------------------------------------------
/examples/example-ms.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/w3c/mathml-core/967d2f7d73f787506a799135e3ad2268e97dddba/examples/example-ms.png
--------------------------------------------------------------------------------
/examples/example-mspace.html:
--------------------------------------------------------------------------------
1 |
18 |
--------------------------------------------------------------------------------
/examples/example-mspace.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/w3c/mathml-core/967d2f7d73f787506a799135e3ad2268e97dddba/examples/example-mspace.png
--------------------------------------------------------------------------------
/examples/example-msqrt-mroot.html:
--------------------------------------------------------------------------------
1 |
16 |
--------------------------------------------------------------------------------
/examples/example-msqrt-mroot.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/w3c/mathml-core/967d2f7d73f787506a799135e3ad2268e97dddba/examples/example-msqrt-mroot.png
--------------------------------------------------------------------------------
/examples/example-mstyle.html:
--------------------------------------------------------------------------------
1 |
23 |
--------------------------------------------------------------------------------
/examples/example-mstyle.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/w3c/mathml-core/967d2f7d73f787506a799135e3ad2268e97dddba/examples/example-mstyle.png
--------------------------------------------------------------------------------
/examples/example-msub-msup-msubsup.html:
--------------------------------------------------------------------------------
1 |
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 |
20 |
--------------------------------------------------------------------------------
/examples/example-mtext.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/w3c/mathml-core/967d2f7d73f787506a799135e3ad2268e97dddba/examples/example-mtext.png
--------------------------------------------------------------------------------
/examples/example-munder-mover-munderover.html:
--------------------------------------------------------------------------------
1 |
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 |
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 |
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 |
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 |
20 | VS
21 |
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 |
7 |
--------------------------------------------------------------------------------
/examples/example-without-screenshot-math-in-canvas.html:
--------------------------------------------------------------------------------
1 | let svg = `
2 | `;
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 |
--------------------------------------------------------------------------------
/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 |
--------------------------------------------------------------------------------
/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 |
--------------------------------------------------------------------------------
/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 |
--------------------------------------------------------------------------------
/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 |
--------------------------------------------------------------------------------
/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 Combining | Style | Combining |
---|
U+002B | plus sign | below | U+031F | combining plus sign below |
U+002D | hyphen-minus | above | U+0305 | combining overline |
U+002D | hyphen-minus | below | U+0320 | combining minus sign below |
U+002D | hyphen-minus | below | U+0332 | combining low line |
U+002E | full stop | above | U+0307 | combining dot above |
U+002E | full stop | below | U+0323 | combining dot below |
U+005E | circumflex accent | above | U+0302 | combining circumflex accent |
U+005E | circumflex accent | below | U+032D | combining circumflex accent below |
U+005F | low line | below | U+0332 | combining low line |
U+0060 | grave accent | above | U+0300 | combining grave accent |
U+0060 | grave accent | below | U+0316 | combining grave accent below |
U+007E | tilde | above | U+0303 | combining tilde |
U+007E | tilde | below | U+0330 | combining tilde below |
U+00A8 | diaeresis | above | U+0308 | combining diaeresis |
U+00A8 | diaeresis | below | U+0324 | combining diaeresis below |
U+00AF | macron | above | U+0304 | combining macron |
U+00AF | macron | above | U+0305 | combining overline |
U+00B4 | acute accent | above | U+0301 | combining acute accent |
U+00B4 | acute accent | below | U+0317 | combining acute accent below |
U+00B8 | cedilla | below | U+0327 | combining cedilla |
U+02C6 | modifier letter circumflex accent | above | U+0302 | combining circumflex accent |
U+02C7 | caron | above | U+030C | combining caron |
U+02C7 | caron | below | U+032C | combining caron below |
U+02D8 | breve | above | U+0306 | combining breve |
U+02D8 | breve | below | U+032E | combining breve below |
U+02D9 | dot above | above | U+0307 | combining dot above |
U+02D9 | dot above | below | U+0323 | combining dot below |
U+02DB | ogonek | below | U+0328 | combining ogonek |
U+02DC | small tilde | above | U+0303 | combining tilde |
U+02DC | small tilde | below | U+0330 | combining tilde below |
U+02DD | double acute accent | above | U+030B | combining double acute accent |
U+203E | overline | above | U+0305 | combining overline |
U+2190 | leftwards arrow | above | U+20D6 | |
U+2192 | rightwards arrow | above | U+20D7 | combining right arrow above |
U+2192 | rightwards arrow | above | U+20EF | combining right arrow below |
U+2212 | minus sign | above | U+0305 | combining overline |
U+2212 | minus sign | below | U+0332 | combining low line |
U+27F6 | long rightwards arrow | above | U+20D7 | combining right arrow above |
U+27F6 | long rightwards arrow | above | U+20EF | combining right arrow below |
Non Combining
Combining | Style | Non Combining |
---|
U+0300 | combining grave accent | above | U+0060 | grave accent |
U+0301 | combining acute accent | above | U+00B4 | acute accent |
U+0302 | combining circumflex accent | above | U+005E | circumflex accent |
U+0302 | combining circumflex accent | above | U+02C6 | modifier letter circumflex accent |
U+0303 | combining tilde | above | U+007E | tilde |
U+0303 | combining tilde | above | U+02DC | small tilde |
U+0304 | combining macron | above | U+00AF | macron |
U+0305 | combining overline | above | U+002D | hyphen-minus |
U+0305 | combining overline | above | U+00AF | macron |
U+0305 | combining overline | above | U+203E | overline |
U+0305 | combining overline | above | U+2212 | minus sign |
U+0306 | combining breve | above | U+02D8 | breve |
U+0307 | combining dot above | above | U+02E | |
U+0307 | combining dot above | above | U+002E | full stop |
U+0307 | combining dot above | above | U+02D9 | dot above |
U+0308 | combining diaeresis | above | U+00A8 | diaeresis |
U+030B | combining double acute accent | above | U+02DD | double acute accent |
U+030C | combining caron | above | U+02C7 | caron |
U+0312 | combining turned comma above | above | U+0B8 | |
U+0316 | combining grave accent below | below | U+0060 | grave accent |
U+0317 | combining acute accent below | below | U+00B4 | acute accent |
U+031F | combining plus sign below | below | U+002B | plus sign |
U+0320 | combining minus sign below | below | U+002D | hyphen-minus |
U+0323 | combining dot below | below | U+002E | full stop |
U+0323 | combining dot below | below | U+02D9 | dot above |
U+0324 | combining diaeresis below | below | U+00A8 | diaeresis |
U+0327 | combining cedilla | below | U+00B8 | cedilla |
U+0328 | combining ogonek | below | U+02DB | ogonek |
U+032C | combining caron below | below | U+02C7 | caron |
U+032D | combining circumflex accent below | below | U+005E | circumflex accent |
U+032E | combining breve below | below | U+02D8 | breve |
U+0330 | combining tilde below | below | U+007E | tilde |
U+0330 | combining tilde below | below | U+02DC | small tilde |
U+0332 | combining low line | below | U+002D | hyphen-minus |
U+0332 | combining low line | below | U+005F | low line |
U+0332 | combining low line | below | U+2212 | minus sign |
U+0338 | combining long solidus overlay | over | U+02F | |
U+20D7 | combining right arrow above | above | U+2192 | rightwards arrow |
U+20D7 | combining right arrow above | above | U+27F6 | long rightwards arrow |
U+20EF | combining right arrow below | above | U+2192 | rightwards arrow |
U+20EF | combining right arrow below | above | U+27F6 | long 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("Original | %s | Δcode point |
\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('%0X; U+%04X | %0X; U+%05X | %0X |
\n' %
73 | (color, baseChar, baseChar, transformedChar, transformedChar, transformedChar - baseChar))
74 | md.write("
");
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 %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 | Base Character | \n\
64 | Glyph Construction | \n\
65 | Extender Character | \n\
66 | Bottom/Left Character | \n\
67 | Middle Character | \n\
68 | Top/Right Character | \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 | %s | \n\
77 | %s | \n\
78 | %s | \n\
79 | %s | \n\
80 | %s | \n\
81 | %s | \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("
\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 | Original | bold-fraktur | Δcode point |
4 | A U+0041 | 𝕬 U+1D56C | 1D52B |
5 | B U+0042 | 𝕭 U+1D56D | 1D52B |
6 | C U+0043 | 𝕮 U+1D56E | 1D52B |
7 | D U+0044 | 𝕯 U+1D56F | 1D52B |
8 | E U+0045 | 𝕰 U+1D570 | 1D52B |
9 | F U+0046 | 𝕱 U+1D571 | 1D52B |
10 | G U+0047 | 𝕲 U+1D572 | 1D52B |
11 | H U+0048 | 𝕳 U+1D573 | 1D52B |
12 | I U+0049 | 𝕴 U+1D574 | 1D52B |
13 | J U+004A | 𝕵 U+1D575 | 1D52B |
14 | K U+004B | 𝕶 U+1D576 | 1D52B |
15 | L U+004C | 𝕷 U+1D577 | 1D52B |
16 | M U+004D | 𝕸 U+1D578 | 1D52B |
17 | N U+004E | 𝕹 U+1D579 | 1D52B |
18 | O U+004F | 𝕺 U+1D57A | 1D52B |
19 | P U+0050 | 𝕻 U+1D57B | 1D52B |
20 | Q U+0051 | 𝕼 U+1D57C | 1D52B |
21 | R U+0052 | 𝕽 U+1D57D | 1D52B |
22 | S U+0053 | 𝕾 U+1D57E | 1D52B |
23 | T U+0054 | 𝕿 U+1D57F | 1D52B |
24 | U U+0055 | 𝖀 U+1D580 | 1D52B |
25 | V U+0056 | 𝖁 U+1D581 | 1D52B |
26 | W U+0057 | 𝖂 U+1D582 | 1D52B |
27 | X U+0058 | 𝖃 U+1D583 | 1D52B |
28 | Y U+0059 | 𝖄 U+1D584 | 1D52B |
29 | Z U+005A | 𝖅 U+1D585 | 1D52B |
30 | a U+0061 | 𝖆 U+1D586 | 1D525 |
31 | b U+0062 | 𝖇 U+1D587 | 1D525 |
32 | c U+0063 | 𝖈 U+1D588 | 1D525 |
33 | d U+0064 | 𝖉 U+1D589 | 1D525 |
34 | e U+0065 | 𝖊 U+1D58A | 1D525 |
35 | f U+0066 | 𝖋 U+1D58B | 1D525 |
36 | g U+0067 | 𝖌 U+1D58C | 1D525 |
37 | h U+0068 | 𝖍 U+1D58D | 1D525 |
38 | i U+0069 | 𝖎 U+1D58E | 1D525 |
39 | j U+006A | 𝖏 U+1D58F | 1D525 |
40 | k U+006B | 𝖐 U+1D590 | 1D525 |
41 | l U+006C | 𝖑 U+1D591 | 1D525 |
42 | m U+006D | 𝖒 U+1D592 | 1D525 |
43 | n U+006E | 𝖓 U+1D593 | 1D525 |
44 | o U+006F | 𝖔 U+1D594 | 1D525 |
45 | p U+0070 | 𝖕 U+1D595 | 1D525 |
46 | q U+0071 | 𝖖 U+1D596 | 1D525 |
47 | r U+0072 | 𝖗 U+1D597 | 1D525 |
48 | s U+0073 | 𝖘 U+1D598 | 1D525 |
49 | t U+0074 | 𝖙 U+1D599 | 1D525 |
50 | u U+0075 | 𝖚 U+1D59A | 1D525 |
51 | v U+0076 | 𝖛 U+1D59B | 1D525 |
52 | w U+0077 | 𝖜 U+1D59C | 1D525 |
53 | x U+0078 | 𝖝 U+1D59D | 1D525 |
54 | y U+0079 | 𝖞 U+1D59E | 1D525 |
55 | z U+007A | 𝖟 U+1D59F | 1D525 |
56 |
--------------------------------------------------------------------------------
/tables/mathvariants-bold-script.html:
--------------------------------------------------------------------------------
1 |
2 |
3 | Original | bold-script | Δcode point |
4 | A U+0041 | 𝓐 U+1D4D0 | 1D48F |
5 | B U+0042 | 𝓑 U+1D4D1 | 1D48F |
6 | C U+0043 | 𝓒 U+1D4D2 | 1D48F |
7 | D U+0044 | 𝓓 U+1D4D3 | 1D48F |
8 | E U+0045 | 𝓔 U+1D4D4 | 1D48F |
9 | F U+0046 | 𝓕 U+1D4D5 | 1D48F |
10 | G U+0047 | 𝓖 U+1D4D6 | 1D48F |
11 | H U+0048 | 𝓗 U+1D4D7 | 1D48F |
12 | I U+0049 | 𝓘 U+1D4D8 | 1D48F |
13 | J U+004A | 𝓙 U+1D4D9 | 1D48F |
14 | K U+004B | 𝓚 U+1D4DA | 1D48F |
15 | L U+004C | 𝓛 U+1D4DB | 1D48F |
16 | M U+004D | 𝓜 U+1D4DC | 1D48F |
17 | N U+004E | 𝓝 U+1D4DD | 1D48F |
18 | O U+004F | 𝓞 U+1D4DE | 1D48F |
19 | P U+0050 | 𝓟 U+1D4DF | 1D48F |
20 | Q U+0051 | 𝓠 U+1D4E0 | 1D48F |
21 | R U+0052 | 𝓡 U+1D4E1 | 1D48F |
22 | S U+0053 | 𝓢 U+1D4E2 | 1D48F |
23 | T U+0054 | 𝓣 U+1D4E3 | 1D48F |
24 | U U+0055 | 𝓤 U+1D4E4 | 1D48F |
25 | V U+0056 | 𝓥 U+1D4E5 | 1D48F |
26 | W U+0057 | 𝓦 U+1D4E6 | 1D48F |
27 | X U+0058 | 𝓧 U+1D4E7 | 1D48F |
28 | Y U+0059 | 𝓨 U+1D4E8 | 1D48F |
29 | Z U+005A | 𝓩 U+1D4E9 | 1D48F |
30 | a U+0061 | 𝓪 U+1D4EA | 1D489 |
31 | b U+0062 | 𝓫 U+1D4EB | 1D489 |
32 | c U+0063 | 𝓬 U+1D4EC | 1D489 |
33 | d U+0064 | 𝓭 U+1D4ED | 1D489 |
34 | e U+0065 | 𝓮 U+1D4EE | 1D489 |
35 | f U+0066 | 𝓯 U+1D4EF | 1D489 |
36 | g U+0067 | 𝓰 U+1D4F0 | 1D489 |
37 | h U+0068 | 𝓱 U+1D4F1 | 1D489 |
38 | i U+0069 | 𝓲 U+1D4F2 | 1D489 |
39 | j U+006A | 𝓳 U+1D4F3 | 1D489 |
40 | k U+006B | 𝓴 U+1D4F4 | 1D489 |
41 | l U+006C | 𝓵 U+1D4F5 | 1D489 |
42 | m U+006D | 𝓶 U+1D4F6 | 1D489 |
43 | n U+006E | 𝓷 U+1D4F7 | 1D489 |
44 | o U+006F | 𝓸 U+1D4F8 | 1D489 |
45 | p U+0070 | 𝓹 U+1D4F9 | 1D489 |
46 | q U+0071 | 𝓺 U+1D4FA | 1D489 |
47 | r U+0072 | 𝓻 U+1D4FB | 1D489 |
48 | s U+0073 | 𝓼 U+1D4FC | 1D489 |
49 | t U+0074 | 𝓽 U+1D4FD | 1D489 |
50 | u U+0075 | 𝓾 U+1D4FE | 1D489 |
51 | v U+0076 | 𝓿 U+1D4FF | 1D489 |
52 | w U+0077 | 𝔀 U+1D500 | 1D489 |
53 | x U+0078 | 𝔁 U+1D501 | 1D489 |
54 | y U+0079 | 𝔂 U+1D502 | 1D489 |
55 | z U+007A | 𝔃 U+1D503 | 1D489 |
56 |
--------------------------------------------------------------------------------
/tables/mathvariants-fraktur.html:
--------------------------------------------------------------------------------
1 |
2 |
3 | Original | fraktur | Δcode point |
4 | A U+0041 | 𝔄 U+1D504 | 1D4C3 |
5 | B U+0042 | 𝔅 U+1D505 | 1D4C3 |
6 | C U+0043 | ℭ U+0212D | 20EA |
7 | D U+0044 | 𝔇 U+1D507 | 1D4C3 |
8 | E U+0045 | 𝔈 U+1D508 | 1D4C3 |
9 | F U+0046 | 𝔉 U+1D509 | 1D4C3 |
10 | G U+0047 | 𝔊 U+1D50A | 1D4C3 |
11 | H U+0048 | ℌ U+0210C | 20C4 |
12 | I U+0049 | ℑ U+02111 | 20C8 |
13 | J U+004A | 𝔍 U+1D50D | 1D4C3 |
14 | K U+004B | 𝔎 U+1D50E | 1D4C3 |
15 | L U+004C | 𝔏 U+1D50F | 1D4C3 |
16 | M U+004D | 𝔐 U+1D510 | 1D4C3 |
17 | N U+004E | 𝔑 U+1D511 | 1D4C3 |
18 | O U+004F | 𝔒 U+1D512 | 1D4C3 |
19 | P U+0050 | 𝔓 U+1D513 | 1D4C3 |
20 | Q U+0051 | 𝔔 U+1D514 | 1D4C3 |
21 | R U+0052 | ℜ U+0211C | 20CA |
22 | S U+0053 | 𝔖 U+1D516 | 1D4C3 |
23 | T U+0054 | 𝔗 U+1D517 | 1D4C3 |
24 | U U+0055 | 𝔘 U+1D518 | 1D4C3 |
25 | V U+0056 | 𝔙 U+1D519 | 1D4C3 |
26 | W U+0057 | 𝔚 U+1D51A | 1D4C3 |
27 | X U+0058 | 𝔛 U+1D51B | 1D4C3 |
28 | Y U+0059 | 𝔜 U+1D51C | 1D4C3 |
29 | Z U+005A | ℨ U+02128 | 20CE |
30 | a U+0061 | 𝔞 U+1D51E | 1D4BD |
31 | b U+0062 | 𝔟 U+1D51F | 1D4BD |
32 | c U+0063 | 𝔠 U+1D520 | 1D4BD |
33 | d U+0064 | 𝔡 U+1D521 | 1D4BD |
34 | e U+0065 | 𝔢 U+1D522 | 1D4BD |
35 | f U+0066 | 𝔣 U+1D523 | 1D4BD |
36 | g U+0067 | 𝔤 U+1D524 | 1D4BD |
37 | h U+0068 | 𝔥 U+1D525 | 1D4BD |
38 | i U+0069 | 𝔦 U+1D526 | 1D4BD |
39 | j U+006A | 𝔧 U+1D527 | 1D4BD |
40 | k U+006B | 𝔨 U+1D528 | 1D4BD |
41 | l U+006C | 𝔩 U+1D529 | 1D4BD |
42 | m U+006D | 𝔪 U+1D52A | 1D4BD |
43 | n U+006E | 𝔫 U+1D52B | 1D4BD |
44 | o U+006F | 𝔬 U+1D52C | 1D4BD |
45 | p U+0070 | 𝔭 U+1D52D | 1D4BD |
46 | q U+0071 | 𝔮 U+1D52E | 1D4BD |
47 | r U+0072 | 𝔯 U+1D52F | 1D4BD |
48 | s U+0073 | 𝔰 U+1D530 | 1D4BD |
49 | t U+0074 | 𝔱 U+1D531 | 1D4BD |
50 | u U+0075 | 𝔲 U+1D532 | 1D4BD |
51 | v U+0076 | 𝔳 U+1D533 | 1D4BD |
52 | w U+0077 | 𝔴 U+1D534 | 1D4BD |
53 | x U+0078 | 𝔵 U+1D535 | 1D4BD |
54 | y U+0079 | 𝔶 U+1D536 | 1D4BD |
55 | z U+007A | 𝔷 U+1D537 | 1D4BD |
56 |
--------------------------------------------------------------------------------
/tables/mathvariants-initial.html:
--------------------------------------------------------------------------------
1 |
2 |
3 | Original | initial | Δcode point |
4 | ب U+0628 | 𞸡 U+1EE21 | 1E7F9 |
5 | ج U+062C | 𞸢 U+1EE22 | 1E7F6 |
6 | ه U+0647 | 𞸤 U+1EE24 | 1E7DD |
7 | ح U+062D | 𞸧 U+1EE27 | 1E7FA |
8 | ي U+064A | 𞸩 U+1EE29 | 1E7DF |
9 | ك U+0643 | 𞸪 U+1EE2A | 1E7E7 |
10 | ل U+0644 | 𞸫 U+1EE2B | 1E7E7 |
11 | م U+0645 | 𞸬 U+1EE2C | 1E7E7 |
12 | ن U+0646 | 𞸭 U+1EE2D | 1E7E7 |
13 | س U+0633 | 𞸮 U+1EE2E | 1E7FB |
14 | ع U+0639 | 𞸯 U+1EE2F | 1E7F6 |
15 | ف U+0641 | 𞸰 U+1EE30 | 1E7EF |
16 | ص U+0635 | 𞸱 U+1EE31 | 1E7FC |
17 | ق U+0642 | 𞸲 U+1EE32 | 1E7F0 |
18 | ش U+0634 | 𞸴 U+1EE34 | 1E800 |
19 | ت U+062A | 𞸵 U+1EE35 | 1E80B |
20 | ث U+062B | 𞸶 U+1EE36 | 1E80B |
21 | خ U+062E | 𞸷 U+1EE37 | 1E809 |
22 | ض U+0636 | 𞸹 U+1EE39 | 1E803 |
23 | غ U+063A | 𞸻 U+1EE3B | 1E801 |
24 |
--------------------------------------------------------------------------------
/tables/mathvariants-looped.html:
--------------------------------------------------------------------------------
1 |
2 |
3 | Original | looped | Δcode point |
4 | ا U+0627 | 𞺀 U+1EE80 | 1E859 |
5 | ب U+0628 | 𞺁 U+1EE81 | 1E859 |
6 | ج U+062C | 𞺂 U+1EE82 | 1E856 |
7 | د U+062F | 𞺃 U+1EE83 | 1E854 |
8 | ه U+0647 | 𞺄 U+1EE84 | 1E83D |
9 | و U+0648 | 𞺅 U+1EE85 | 1E83D |
10 | ز U+0632 | 𞺆 U+1EE86 | 1E854 |
11 | ح U+062D | 𞺇 U+1EE87 | 1E85A |
12 | ط U+0637 | 𞺈 U+1EE88 | 1E851 |
13 | ي U+064A | 𞺉 U+1EE89 | 1E83F |
14 | ل U+0644 | 𞺋 U+1EE8B | 1E847 |
15 | م U+0645 | 𞺌 U+1EE8C | 1E847 |
16 | ن U+0646 | 𞺍 U+1EE8D | 1E847 |
17 | س U+0633 | 𞺎 U+1EE8E | 1E85B |
18 | ع U+0639 | 𞺏 U+1EE8F | 1E856 |
19 | ف U+0641 | 𞺐 U+1EE90 | 1E84F |
20 | ص U+0635 | 𞺑 U+1EE91 | 1E85C |
21 | ق U+0642 | 𞺒 U+1EE92 | 1E850 |
22 | ر U+0631 | 𞺓 U+1EE93 | 1E862 |
23 | ش U+0634 | 𞺔 U+1EE94 | 1E860 |
24 | ت U+062A | 𞺕 U+1EE95 | 1E86B |
25 | ث U+062B | 𞺖 U+1EE96 | 1E86B |
26 | خ U+062E | 𞺗 U+1EE97 | 1E869 |
27 | ذ U+0630 | 𞺘 U+1EE98 | 1E868 |
28 | ض U+0636 | 𞺙 U+1EE99 | 1E863 |
29 | ظ U+0638 | 𞺚 U+1EE9A | 1E862 |
30 | غ U+063A | 𞺛 U+1EE9B | 1E861 |
31 |
--------------------------------------------------------------------------------
/tables/mathvariants-monospace.html:
--------------------------------------------------------------------------------
1 |
2 |
3 | Original | monospace | Δcode point |
4 | A U+0041 | 𝙰 U+1D670 | 1D62F |
5 | B U+0042 | 𝙱 U+1D671 | 1D62F |
6 | C U+0043 | 𝙲 U+1D672 | 1D62F |
7 | D U+0044 | 𝙳 U+1D673 | 1D62F |
8 | E U+0045 | 𝙴 U+1D674 | 1D62F |
9 | F U+0046 | 𝙵 U+1D675 | 1D62F |
10 | G U+0047 | 𝙶 U+1D676 | 1D62F |
11 | H U+0048 | 𝙷 U+1D677 | 1D62F |
12 | I U+0049 | 𝙸 U+1D678 | 1D62F |
13 | J U+004A | 𝙹 U+1D679 | 1D62F |
14 | K U+004B | 𝙺 U+1D67A | 1D62F |
15 | L U+004C | 𝙻 U+1D67B | 1D62F |
16 | M U+004D | 𝙼 U+1D67C | 1D62F |
17 | N U+004E | 𝙽 U+1D67D | 1D62F |
18 | O U+004F | 𝙾 U+1D67E | 1D62F |
19 | P U+0050 | 𝙿 U+1D67F | 1D62F |
20 | Q U+0051 | 𝚀 U+1D680 | 1D62F |
21 | R U+0052 | 𝚁 U+1D681 | 1D62F |
22 | S U+0053 | 𝚂 U+1D682 | 1D62F |
23 | T U+0054 | 𝚃 U+1D683 | 1D62F |
24 | U U+0055 | 𝚄 U+1D684 | 1D62F |
25 | V U+0056 | 𝚅 U+1D685 | 1D62F |
26 | W U+0057 | 𝚆 U+1D686 | 1D62F |
27 | X U+0058 | 𝚇 U+1D687 | 1D62F |
28 | Y U+0059 | 𝚈 U+1D688 | 1D62F |
29 | Z U+005A | 𝚉 U+1D689 | 1D62F |
30 | a U+0061 | 𝚊 U+1D68A | 1D629 |
31 | b U+0062 | 𝚋 U+1D68B | 1D629 |
32 | c U+0063 | 𝚌 U+1D68C | 1D629 |
33 | d U+0064 | 𝚍 U+1D68D | 1D629 |
34 | e U+0065 | 𝚎 U+1D68E | 1D629 |
35 | f U+0066 | 𝚏 U+1D68F | 1D629 |
36 | g U+0067 | 𝚐 U+1D690 | 1D629 |
37 | h U+0068 | 𝚑 U+1D691 | 1D629 |
38 | i U+0069 | 𝚒 U+1D692 | 1D629 |
39 | j U+006A | 𝚓 U+1D693 | 1D629 |
40 | k U+006B | 𝚔 U+1D694 | 1D629 |
41 | l U+006C | 𝚕 U+1D695 | 1D629 |
42 | m U+006D | 𝚖 U+1D696 | 1D629 |
43 | n U+006E | 𝚗 U+1D697 | 1D629 |
44 | o U+006F | 𝚘 U+1D698 | 1D629 |
45 | p U+0070 | 𝚙 U+1D699 | 1D629 |
46 | q U+0071 | 𝚚 U+1D69A | 1D629 |
47 | r U+0072 | 𝚛 U+1D69B | 1D629 |
48 | s U+0073 | 𝚜 U+1D69C | 1D629 |
49 | t U+0074 | 𝚝 U+1D69D | 1D629 |
50 | u U+0075 | 𝚞 U+1D69E | 1D629 |
51 | v U+0076 | 𝚟 U+1D69F | 1D629 |
52 | w U+0077 | 𝚠 U+1D6A0 | 1D629 |
53 | x U+0078 | 𝚡 U+1D6A1 | 1D629 |
54 | y U+0079 | 𝚢 U+1D6A2 | 1D629 |
55 | z U+007A | 𝚣 U+1D6A3 | 1D629 |
56 | 0 U+0030 | 𝟶 U+1D7F6 | 1D7C6 |
57 | 1 U+0031 | 𝟷 U+1D7F7 | 1D7C6 |
58 | 2 U+0032 | 𝟸 U+1D7F8 | 1D7C6 |
59 | 3 U+0033 | 𝟹 U+1D7F9 | 1D7C6 |
60 | 4 U+0034 | 𝟺 U+1D7FA | 1D7C6 |
61 | 5 U+0035 | 𝟻 U+1D7FB | 1D7C6 |
62 | 6 U+0036 | 𝟼 U+1D7FC | 1D7C6 |
63 | 7 U+0037 | 𝟽 U+1D7FD | 1D7C6 |
64 | 8 U+0038 | 𝟾 U+1D7FE | 1D7C6 |
65 | 9 U+0039 | 𝟿 U+1D7FF | 1D7C6 |
66 |
--------------------------------------------------------------------------------
/tables/mathvariants-sans-serif-italic.html:
--------------------------------------------------------------------------------
1 |
2 |
3 | Original | sans-serif-italic | Δcode point |
4 | A U+0041 | 𝘈 U+1D608 | 1D5C7 |
5 | B U+0042 | 𝘉 U+1D609 | 1D5C7 |
6 | C U+0043 | 𝘊 U+1D60A | 1D5C7 |
7 | D U+0044 | 𝘋 U+1D60B | 1D5C7 |
8 | E U+0045 | 𝘌 U+1D60C | 1D5C7 |
9 | F U+0046 | 𝘍 U+1D60D | 1D5C7 |
10 | G U+0047 | 𝘎 U+1D60E | 1D5C7 |
11 | H U+0048 | 𝘏 U+1D60F | 1D5C7 |
12 | I U+0049 | 𝘐 U+1D610 | 1D5C7 |
13 | J U+004A | 𝘑 U+1D611 | 1D5C7 |
14 | K U+004B | 𝘒 U+1D612 | 1D5C7 |
15 | L U+004C | 𝘓 U+1D613 | 1D5C7 |
16 | M U+004D | 𝘔 U+1D614 | 1D5C7 |
17 | N U+004E | 𝘕 U+1D615 | 1D5C7 |
18 | O U+004F | 𝘖 U+1D616 | 1D5C7 |
19 | P U+0050 | 𝘗 U+1D617 | 1D5C7 |
20 | Q U+0051 | 𝘘 U+1D618 | 1D5C7 |
21 | R U+0052 | 𝘙 U+1D619 | 1D5C7 |
22 | S U+0053 | 𝘚 U+1D61A | 1D5C7 |
23 | T U+0054 | 𝘛 U+1D61B | 1D5C7 |
24 | U U+0055 | 𝘜 U+1D61C | 1D5C7 |
25 | V U+0056 | 𝘝 U+1D61D | 1D5C7 |
26 | W U+0057 | 𝘞 U+1D61E | 1D5C7 |
27 | X U+0058 | 𝘟 U+1D61F | 1D5C7 |
28 | Y U+0059 | 𝘠 U+1D620 | 1D5C7 |
29 | Z U+005A | 𝘡 U+1D621 | 1D5C7 |
30 | a U+0061 | 𝘢 U+1D622 | 1D5C1 |
31 | b U+0062 | 𝘣 U+1D623 | 1D5C1 |
32 | c U+0063 | 𝘤 U+1D624 | 1D5C1 |
33 | d U+0064 | 𝘥 U+1D625 | 1D5C1 |
34 | e U+0065 | 𝘦 U+1D626 | 1D5C1 |
35 | f U+0066 | 𝘧 U+1D627 | 1D5C1 |
36 | g U+0067 | 𝘨 U+1D628 | 1D5C1 |
37 | h U+0068 | 𝘩 U+1D629 | 1D5C1 |
38 | i U+0069 | 𝘪 U+1D62A | 1D5C1 |
39 | j U+006A | 𝘫 U+1D62B | 1D5C1 |
40 | k U+006B | 𝘬 U+1D62C | 1D5C1 |
41 | l U+006C | 𝘭 U+1D62D | 1D5C1 |
42 | m U+006D | 𝘮 U+1D62E | 1D5C1 |
43 | n U+006E | 𝘯 U+1D62F | 1D5C1 |
44 | o U+006F | 𝘰 U+1D630 | 1D5C1 |
45 | p U+0070 | 𝘱 U+1D631 | 1D5C1 |
46 | q U+0071 | 𝘲 U+1D632 | 1D5C1 |
47 | r U+0072 | 𝘳 U+1D633 | 1D5C1 |
48 | s U+0073 | 𝘴 U+1D634 | 1D5C1 |
49 | t U+0074 | 𝘵 U+1D635 | 1D5C1 |
50 | u U+0075 | 𝘶 U+1D636 | 1D5C1 |
51 | v U+0076 | 𝘷 U+1D637 | 1D5C1 |
52 | w U+0077 | 𝘸 U+1D638 | 1D5C1 |
53 | x U+0078 | 𝘹 U+1D639 | 1D5C1 |
54 | y U+0079 | 𝘺 U+1D63A | 1D5C1 |
55 | z U+007A | 𝘻 U+1D63B | 1D5C1 |
56 |
--------------------------------------------------------------------------------
/tables/mathvariants-sans-serif.html:
--------------------------------------------------------------------------------
1 |
2 |
3 | Original | sans-serif | Δcode point |
4 | A U+0041 | 𝖠 U+1D5A0 | 1D55F |
5 | B U+0042 | 𝖡 U+1D5A1 | 1D55F |
6 | C U+0043 | 𝖢 U+1D5A2 | 1D55F |
7 | D U+0044 | 𝖣 U+1D5A3 | 1D55F |
8 | E U+0045 | 𝖤 U+1D5A4 | 1D55F |
9 | F U+0046 | 𝖥 U+1D5A5 | 1D55F |
10 | G U+0047 | 𝖦 U+1D5A6 | 1D55F |
11 | H U+0048 | 𝖧 U+1D5A7 | 1D55F |
12 | I U+0049 | 𝖨 U+1D5A8 | 1D55F |
13 | J U+004A | 𝖩 U+1D5A9 | 1D55F |
14 | K U+004B | 𝖪 U+1D5AA | 1D55F |
15 | L U+004C | 𝖫 U+1D5AB | 1D55F |
16 | M U+004D | 𝖬 U+1D5AC | 1D55F |
17 | N U+004E | 𝖭 U+1D5AD | 1D55F |
18 | O U+004F | 𝖮 U+1D5AE | 1D55F |
19 | P U+0050 | 𝖯 U+1D5AF | 1D55F |
20 | Q U+0051 | 𝖰 U+1D5B0 | 1D55F |
21 | R U+0052 | 𝖱 U+1D5B1 | 1D55F |
22 | S U+0053 | 𝖲 U+1D5B2 | 1D55F |
23 | T U+0054 | 𝖳 U+1D5B3 | 1D55F |
24 | U U+0055 | 𝖴 U+1D5B4 | 1D55F |
25 | V U+0056 | 𝖵 U+1D5B5 | 1D55F |
26 | W U+0057 | 𝖶 U+1D5B6 | 1D55F |
27 | X U+0058 | 𝖷 U+1D5B7 | 1D55F |
28 | Y U+0059 | 𝖸 U+1D5B8 | 1D55F |
29 | Z U+005A | 𝖹 U+1D5B9 | 1D55F |
30 | a U+0061 | 𝖺 U+1D5BA | 1D559 |
31 | b U+0062 | 𝖻 U+1D5BB | 1D559 |
32 | c U+0063 | 𝖼 U+1D5BC | 1D559 |
33 | d U+0064 | 𝖽 U+1D5BD | 1D559 |
34 | e U+0065 | 𝖾 U+1D5BE | 1D559 |
35 | f U+0066 | 𝖿 U+1D5BF | 1D559 |
36 | g U+0067 | 𝗀 U+1D5C0 | 1D559 |
37 | h U+0068 | 𝗁 U+1D5C1 | 1D559 |
38 | i U+0069 | 𝗂 U+1D5C2 | 1D559 |
39 | j U+006A | 𝗃 U+1D5C3 | 1D559 |
40 | k U+006B | 𝗄 U+1D5C4 | 1D559 |
41 | l U+006C | 𝗅 U+1D5C5 | 1D559 |
42 | m U+006D | 𝗆 U+1D5C6 | 1D559 |
43 | n U+006E | 𝗇 U+1D5C7 | 1D559 |
44 | o U+006F | 𝗈 U+1D5C8 | 1D559 |
45 | p U+0070 | 𝗉 U+1D5C9 | 1D559 |
46 | q U+0071 | 𝗊 U+1D5CA | 1D559 |
47 | r U+0072 | 𝗋 U+1D5CB | 1D559 |
48 | s U+0073 | 𝗌 U+1D5CC | 1D559 |
49 | t U+0074 | 𝗍 U+1D5CD | 1D559 |
50 | u U+0075 | 𝗎 U+1D5CE | 1D559 |
51 | v U+0076 | 𝗏 U+1D5CF | 1D559 |
52 | w U+0077 | 𝗐 U+1D5D0 | 1D559 |
53 | x U+0078 | 𝗑 U+1D5D1 | 1D559 |
54 | y U+0079 | 𝗒 U+1D5D2 | 1D559 |
55 | z U+007A | 𝗓 U+1D5D3 | 1D559 |
56 | 0 U+0030 | 𝟢 U+1D7E2 | 1D7B2 |
57 | 1 U+0031 | 𝟣 U+1D7E3 | 1D7B2 |
58 | 2 U+0032 | 𝟤 U+1D7E4 | 1D7B2 |
59 | 3 U+0033 | 𝟥 U+1D7E5 | 1D7B2 |
60 | 4 U+0034 | 𝟦 U+1D7E6 | 1D7B2 |
61 | 5 U+0035 | 𝟧 U+1D7E7 | 1D7B2 |
62 | 6 U+0036 | 𝟨 U+1D7E8 | 1D7B2 |
63 | 7 U+0037 | 𝟩 U+1D7E9 | 1D7B2 |
64 | 8 U+0038 | 𝟪 U+1D7EA | 1D7B2 |
65 | 9 U+0039 | 𝟫 U+1D7EB | 1D7B2 |
66 |
--------------------------------------------------------------------------------
/tables/mathvariants-script.html:
--------------------------------------------------------------------------------
1 |
2 |
3 | Original | script | Δcode point |
4 | A U+0041 | 𝒜 U+1D49C | 1D45B |
5 | B U+0042 | ℬ U+0212C | 20EA |
6 | C U+0043 | 𝒞 U+1D49E | 1D45B |
7 | D U+0044 | 𝒟 U+1D49F | 1D45B |
8 | E U+0045 | ℰ U+02130 | 20EB |
9 | F U+0046 | ℱ U+02131 | 20EB |
10 | G U+0047 | 𝒢 U+1D4A2 | 1D45B |
11 | H U+0048 | ℋ U+0210B | 20C3 |
12 | I U+0049 | ℐ U+02110 | 20C7 |
13 | J U+004A | 𝒥 U+1D4A5 | 1D45B |
14 | K U+004B | 𝒦 U+1D4A6 | 1D45B |
15 | L U+004C | ℒ U+02112 | 20C6 |
16 | M U+004D | ℳ U+02133 | 20E6 |
17 | N U+004E | 𝒩 U+1D4A9 | 1D45B |
18 | O U+004F | 𝒪 U+1D4AA | 1D45B |
19 | P U+0050 | 𝒫 U+1D4AB | 1D45B |
20 | Q U+0051 | 𝒬 U+1D4AC | 1D45B |
21 | R U+0052 | ℛ U+0211B | 20C9 |
22 | S U+0053 | 𝒮 U+1D4AE | 1D45B |
23 | T U+0054 | 𝒯 U+1D4AF | 1D45B |
24 | U U+0055 | 𝒰 U+1D4B0 | 1D45B |
25 | V U+0056 | 𝒱 U+1D4B1 | 1D45B |
26 | W U+0057 | 𝒲 U+1D4B2 | 1D45B |
27 | X U+0058 | 𝒳 U+1D4B3 | 1D45B |
28 | Y U+0059 | 𝒴 U+1D4B4 | 1D45B |
29 | Z U+005A | 𝒵 U+1D4B5 | 1D45B |
30 | a U+0061 | 𝒶 U+1D4B6 | 1D455 |
31 | b U+0062 | 𝒷 U+1D4B7 | 1D455 |
32 | c U+0063 | 𝒸 U+1D4B8 | 1D455 |
33 | d U+0064 | 𝒹 U+1D4B9 | 1D455 |
34 | e U+0065 | ℯ U+0212F | 20CA |
35 | f U+0066 | 𝒻 U+1D4BB | 1D455 |
36 | g U+0067 | ℊ U+0210A | 20A3 |
37 | h U+0068 | 𝒽 U+1D4BD | 1D455 |
38 | i U+0069 | 𝒾 U+1D4BE | 1D455 |
39 | j U+006A | 𝒿 U+1D4BF | 1D455 |
40 | k U+006B | 𝓀 U+1D4C0 | 1D455 |
41 | l U+006C | 𝓁 U+1D4C1 | 1D455 |
42 | m U+006D | 𝓂 U+1D4C2 | 1D455 |
43 | n U+006E | 𝓃 U+1D4C3 | 1D455 |
44 | o U+006F | ℴ U+02134 | 20C5 |
45 | p U+0070 | 𝓅 U+1D4C5 | 1D455 |
46 | q U+0071 | 𝓆 U+1D4C6 | 1D455 |
47 | r U+0072 | 𝓇 U+1D4C7 | 1D455 |
48 | s U+0073 | 𝓈 U+1D4C8 | 1D455 |
49 | t U+0074 | 𝓉 U+1D4C9 | 1D455 |
50 | u U+0075 | 𝓊 U+1D4CA | 1D455 |
51 | v U+0076 | 𝓋 U+1D4CB | 1D455 |
52 | w U+0077 | 𝓌 U+1D4CC | 1D455 |
53 | x U+0078 | 𝓍 U+1D4CD | 1D455 |
54 | y U+0079 | 𝓎 U+1D4CE | 1D455 |
55 | z U+007A | 𝓏 U+1D4CF | 1D455 |
56 |
--------------------------------------------------------------------------------
/tables/mathvariants-stretched.html:
--------------------------------------------------------------------------------
1 |
2 |
3 | Original | stretched | Δcode point |
4 | ب U+0628 | 𞹡 U+1EE61 | 1E839 |
5 | ج U+062C | 𞹢 U+1EE62 | 1E836 |
6 | ه U+0647 | 𞹤 U+1EE64 | 1E81D |
7 | ح U+062D | 𞹧 U+1EE67 | 1E83A |
8 | ط U+0637 | 𞹨 U+1EE68 | 1E831 |
9 | ي U+064A | 𞹩 U+1EE69 | 1E81F |
10 | ك U+0643 | 𞹪 U+1EE6A | 1E827 |
11 | م U+0645 | 𞹬 U+1EE6C | 1E827 |
12 | ن U+0646 | 𞹭 U+1EE6D | 1E827 |
13 | س U+0633 | 𞹮 U+1EE6E | 1E83B |
14 | ع U+0639 | 𞹯 U+1EE6F | 1E836 |
15 | ف U+0641 | 𞹰 U+1EE70 | 1E82F |
16 | ص U+0635 | 𞹱 U+1EE71 | 1E83C |
17 | ق U+0642 | 𞹲 U+1EE72 | 1E830 |
18 | ش U+0634 | 𞹴 U+1EE74 | 1E840 |
19 | ت U+062A | 𞹵 U+1EE75 | 1E84B |
20 | ث U+062B | 𞹶 U+1EE76 | 1E84B |
21 | خ U+062E | 𞹷 U+1EE77 | 1E849 |
22 | ض U+0636 | 𞹹 U+1EE79 | 1E843 |
23 | ظ U+0638 | 𞹺 U+1EE7A | 1E842 |
24 | غ U+063A | 𞹻 U+1EE7B | 1E841 |
25 | ٮ U+066E | 𞹼 U+1EE7C | 1E80E |
26 | ڡ U+06A1 | 𞹾 U+1EE7E | 1E7DD |
27 |
--------------------------------------------------------------------------------
/tables/mathvariants-tailed.html:
--------------------------------------------------------------------------------
1 |
2 |
3 | Original | tailed | Δcode point |
4 | ج U+062C | 𞹂 U+1EE42 | 1E816 |
5 | ح U+062D | 𞹇 U+1EE47 | 1E81A |
6 | ي U+064A | 𞹉 U+1EE49 | 1E7FF |
7 | ل U+0644 | 𞹋 U+1EE4B | 1E807 |
8 | ن U+0646 | 𞹍 U+1EE4D | 1E807 |
9 | س U+0633 | 𞹎 U+1EE4E | 1E81B |
10 | ع U+0639 | 𞹏 U+1EE4F | 1E816 |
11 | ص U+0635 | 𞹑 U+1EE51 | 1E81C |
12 | ق U+0642 | 𞹒 U+1EE52 | 1E810 |
13 | ش U+0634 | 𞹔 U+1EE54 | 1E820 |
14 | خ U+062E | 𞹗 U+1EE57 | 1E829 |
15 | ض U+0636 | 𞹙 U+1EE59 | 1E823 |
16 | غ U+063A | 𞹛 U+1EE5B | 1E821 |
17 | ں U+06BA | 𞹝 U+1EE5D | 1E7A3 |
18 | ٯ U+066F | 𞹟 U+1EE5F | 1E7F0 |
19 |
--------------------------------------------------------------------------------
/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 `

`
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 |
--------------------------------------------------------------------------------