From ed658e59191cb7dbbe6be7190df4e4a2708895f3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20Wang?= Date: Wed, 10 Jul 2024 13:27:43 +0000 Subject: [PATCH] fix adjusted RadicalKernBeforeAfter for min-content/max-content inline size SHA: 6ea67a549f9bc89b575e2c28c39adad9512c4fac Reason: push, by fred-wang Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- index.html | 14051 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 14051 insertions(+) create mode 100644 index.html diff --git a/index.html b/index.html new file mode 100644 index 0000000..a0b4817 --- /dev/null +++ b/index.html @@ -0,0 +1,14051 @@ + + + + + + + + + +MathML Core + + + + + + + + + + + + + + + + + + +
+

+

MathML Core

+

W3C Editor's Draft

+
+ More details about this document +
+
This version:
+ https://w3c.github.io/mathml-core/ +
+
Latest published version:
+ https://www.w3.org/TR/mathml-core/ +
+
Latest editor's draft:
https://w3c.github.io/mathml-core/
+
History:
+ https://www.w3.org/standards/history/mathml-core/ +
+ Commit history +
+
Test suite:
https://github.com/web-platform-tests/wpt/tree/master/mathml/
+
Implementation report:
+ https://wpt.fyi/results/?label=master&label=experimental&aligned&q=math%20%20not%28path%3A%2Fjs%29 +
+ + + +
Editors:
+ David Carlisle (NAG) +
+ Frédéric Wang (Igalia) +
+
+ Former editors: +
+ Patrick Ion (Mathematical Reviews, American Mathematical Society) +
+ Robert Miner (deceased) (Design Science, Inc.) +
+ +
Feedback:
+ GitHub w3c/mathml-core + (pull requests, + new issue, + open issues) +
+ + +
+
+ + + +
+
+ +

Abstract

+

+ This specification defines a core subset of Mathematical Markup + Language, or MathML, that is suitable for browser implementation. + MathML is a markup language for describing mathematical notation + and capturing both its structure and content. The goal of MathML is to + enable mathematics to be served, received, and processed on the World + Wide Web, just as HTML has enabled this functionality for text. +

+
+

Status of This Document

This section describes the status of this + document at the time of its publication. A list of current W3C + publications and the latest revision of this technical report can be found + in the W3C technical reports index at + https://www.w3.org/TR/.

+

+ This document was published by the Math Working Group as + an Editor's Draft. +

Publication as an Editor's Draft does not + imply endorsement by W3C and its Members.

+ This is a draft document and may be updated, replaced or obsoleted by other + documents at any time. It is inappropriate to cite this document as other + than work in progress. + +

+ + This document was produced by a group + operating under the + W3C Patent + Policy. + + + W3C maintains a + public list of any patent disclosures + made in connection with the deliverables of + the group; that page also includes + instructions for disclosing a patent. An individual who has actual + knowledge of a patent which the individual believes contains + Essential Claim(s) + must disclose the information in accordance with + section 6 of the W3C Patent Policy. + +

+ This document is governed by the + 03 November 2023 W3C Process Document. +

+ +

1. Introduction

This section is non-normative.

+ +

+ The [MATHML3] specification has several shortcomings that make it + hard to implement consistently across web rendering engines or to + extend with user-defined constructions, e.g.: +

+ +

+ This MathML Core specification intends to address these issues by + being as accurate as possible on the visual rendering of mathematical + formulas using additional rules from the TeXBook’s Appendix G + [TEXBOOK] and from the Open Font Format [OPEN-FONT-FORMAT], + [OPEN-TYPE-MATH-ILLUMINATED]. It also relies on modern browser + implementations and web technologies [HTML] [SVG] [CSS2] [DOM], + clarifying interactions + with them when needed or introducing new low-level primitives to + improve the web platform layering. +

+

+ Parts of MathML3 that do not fit well in this framework or are less + fundamental have been omitted. Instead, they are described in a + separate and larger [MATHML4] specification. The details of which + math feature will be included in future versions of MathML Core or + implemented as polyfills is still open. This question and other + potential improvements are tracked on GitHub. +

+

+ By increasing the level of implementation details, focusing on a + workable subset, following a browser-driven design and relying on + automated web platform tests, this specification is expected to + greatly improve MathML interoperability. Moreover, effort on MathML + layering will enable users to implement the rest of the MathML 4 + specification, or more generally to extend MathML Core, using + modern web technologies such as + shadow trees, + custom elements or + APIs from [HOUDINI]. +

+
+

2. MathML Fundamentals

+ +

2.1 Elements and attributes

+ +

+ The term MathML element refers to any element in the + MathML namespace. + The MathML elements defined in this specification are called the + MathML Core elements and are listed below. + Any MathML element that is not listed below is called an + Unknown MathML element. +

+
    +
  1. annotation
  2. +
  3. annotation-xml
  4. +
  5. maction
  6. +
  7. math
  8. +
  9. merror
  10. +
  11. mfrac
  12. +
  13. mi
  14. +
  15. mmultiscripts
  16. +
  17. mn
  18. +
  19. mo
  20. +
  21. mover
  22. +
  23. mpadded
  24. +
  25. mphantom
  26. +
  27. mprescripts
  28. +
  29. mroot
  30. +
  31. mrow
  32. +
  33. ms
  34. +
  35. mspace
  36. +
  37. msqrt
  38. +
  39. mstyle
  40. +
  41. msub
  42. +
  43. msubsup
  44. +
  45. msup
  46. +
  47. mtable
  48. +
  49. mtd
  50. +
  51. mtext
  52. +
  53. mtr
  54. +
  55. munder
  56. +
  57. munderover
  58. +
  59. semantics
  60. +
+

The grouping elements are + maction, + math, + merror, + mphantom, + mprescripts, + mrow, + mstyle, + semantics and unknown MathML elements.

+

The scripted elements are + mmultiscripts, + mover, + msub, + msubsup, + msup, + munder and + munderover. +

+

The radical elements are + mroot and msqrt. +

+

+ The attributes defined in this specification have no namespace + and are called MathML attributes: +

+ +

2.1.1 The Top-Level <math> Element

+ +

MathML specifies a single top-level or root + math element, which encapsulates each + instance of MathML markup within a document. All other MathML content + must be contained in a <math> element. +

+

+ The <math> + element accepts the attributes described + in 2.1.3 Global Attributes as well as the + following attributes: +

+ +

+ The + display + attribute, if present, + must be an + ASCII case-insensitive + match + to block or inline. + The user agent stylesheet + described in A. User Agent Stylesheet + contains rules for this attribute that affect the + default values for the display + (block math or inline math) + and math-style + (normal or compact) properties. + If the display + attribute is absent or has an invalid value, the User Agent + stylesheet treats it the same as inline. +

+

+ This specification does not define any observable behavior that is + specific to the alttext attribute. +

+
Note
+ The alttext attribute may be used as + alternative text by some legacy systems that do not + implement math layout.
+ +

+ If the <math> element does not have its computed + display property equal to + block math or inline math + then it is laid out according to the CSS specification where + the corresponding value is described. + Otherwise the layout algorithm of the + mrow element is used to produce a + math content box. That math content box is used as the content for the layout of + the element, as described by CSS for display: block + (if the computed value is block math) or + display: inline + (if the computed value is inline math). + Additionally, if the computed + display property is equal to + block math then that math content box is rendered + horizontally centered within the content box. +

+
Note
+ TEX's display mode $$...$$ + and inline mode $...$ correspond to + display="block" and display="inline" + respectively. +
+
+

In the following example, a math formula + is rendered in display mode on a new line and taking full width, + with the math content centered within the container:

+
<div style="width: 15em;">
+  This mathematical formula with a big summation and the number pi
+  <math display="block" style="border: 1px dotted black;">
+    <mrow>
+      <munderover>
+        <mo></mo>
+        <mrow><mi>n</mi><mo>=</mo><mn>1</mn></mrow>
+        <mrow><mo>+</mo><mn></mn></mrow>
+      </munderover>
+      <mfrac>
+        <mn>1</mn>
+        <msup><mi>n</mi><mn>2</mn></msup>
+      </mfrac>
+    </mrow>
+    <mo>=</mo>
+    <mfrac>
+      <msup><mi>π</mi><mn>2</mn></msup>
+      <mn>6</mn>
+    </mfrac>
+  </math>
+  is easy to prove.
+</div>
+ math example (display) +

As a comparison, the same formula would look as follows in + inline mode. The formula is embedded in the paragraph of text + without forced line breaking. + The baselines specified by the layout algorithm of the + mrow are used for vertical + alignment. Note that + the middle of sum and equal symbols or fractions are all aligned, + but not with the alphabetical baseline of the surrounding + text.

+ math example (inline) +
+

Because good mathematical rendering requires use of mathematical + fonts, the + user agent stylesheet + should set the + font-family + to the + math + value on the <math> element instead of inheriting + it. Additionally, several CSS properties that can be set on + a parent container such as + font-style, font-weight, + direction or text-indent etc + are not expected to apply to the math formula and so the + user agent stylesheet + has rules to reset them by default. +

+
math {
+  direction: ltr;
+  text-indent: 0;
+  letter-spacing: normal;
+  line-height: normal;
+  word-spacing: normal;
+  font-family: math;
+  font-size: inherit;
+  font-style: normal;
+  font-weight: normal;
+  display: inline math;
+  math-shift: normal;
+  math-style: compact;
+  math-depth: 0;
+}
+math[display="block" i] {
+  display: block math;
+  math-style: normal;
+}
+math[display="inline" i] {
+  display: inline math;
+  math-style: compact;
+}
+
+

2.1.2 Types for MathML Attribute Values

+ +

In addition to CSS data types, some MathML attributes rely on the following MathML-specific types:

+
+
unsigned-integer
+
An + <integer> value as defined in + [CSS-VALUES-4], whose first character is neither + U+002D HYPHEN-MINUS character (-) nor + U+002B PLUS SIGN (+). +
+
boolean
+
A string that is an + ASCII case-insensitive + match to true or + false. +
+
+
+

2.1.3 Global Attributes

+ +

+ The following attributes are common to and may be specified on all MathML + elements: +

+ +
+

2.1.4 Attributes common to HTML and MathML elements

+ +

+ The + id, + class, + style, + data-*, + nonce and + tabindex + attributes have the same syntax and semantics as defined for + id, + class, + style, + data-*, + nonce and + tabindex + attributes on HTML elements. +

+

+ The + dir + attribute, if present, + must be an + ASCII case-insensitive match + to ltr or rtl. + In that case, the user agent is expected to treat the attribute as a + presentational hint setting the element's + direction + property to the corresponding value. + More precisely, an + ASCII case-insensitive match + to rtl is mapped to rtl while + an ASCII case-insensitive match to ltr is mapped to ltr. +

+
Note
+ The dir attribute is used to set the directionality of math + formulas, which is often rtl in Arabic speaking world. + However, languages written from right to left often embed math + written from left to right and so the + user agent stylesheet resets + the + direction + property accordingly on the math + elements. +
+
+

+ In the following example, the dir attribute + is used to render "𞸎 plus 𞸑 raised to the power of + (٢ over, 𞸟 plus ١)" from right-to-left. +

+
<math dir="rtl">
+  <mrow>
+    <mi>𞸎</mi>
+    <mo>+</mo>
+    <msup>
+      <mi>𞸑</mi>
+      <mfrac>
+        <mn>٢</mn>
+        <mrow>
+          <mi>𞸟</mi>
+          <mo>+</mo>
+          <mn>١</mn>
+        </mrow>
+      </mfrac>
+    </msup>
+  </mrow>
+</math>
+ dir example +
+

+ All MathML elements support event handler content attributes, + as described in event handler content attributes in HTML. +

+

+ All event handler content attributes + noted by HTML as being supported by all HTMLElements + are supported by all MathML elements as well, as defined in the MathMLElement IDL. +

+
+

2.1.5 Legacy MathML Style Attributes

+ +

+ The + mathcolor + and + mathbackground + attributes, if present, must + have a value that is a + <color>. + In that case, the user agent is expected to treat these attributes as a + presentational hint setting the element's + color and + background-color + properties to the corresponding values. + The mathcolor attribute describes the foreground fill + color of MathML text, bars etc + while the mathbackground + attribute describes the background color of an element. +

+

+ The + mathsize + attribute, if present, must + have a value that is a valid <length-percentage>. + In that case, the user agent is expected to treat the attribute as a + presentational hint setting the element's + font-size + property to the corresponding value. + The mathsize property indicates the desired height + of glyphs in math formulas but also scales other parts (spacing, shifts, + line thickness of bars etc) accordingly. +

+
Note
+ The above attributes are implemented for compatibility with full MathML. Authors whose only target is MathML Core are encouraged to use CSS for styling. +
+
+

2.1.6 The displaystyle and scriptlevel attributes

+ +

+ The + displaystyle + attribute, if present, must have a value that is a boolean. + In that case, the user agent is expected to treat the attribute as a + presentational hint setting the element's + math-style + property to the corresponding value. + More precisely, an + ASCII case-insensitive match + to true is mapped to normal while + an ASCII case-insensitive match to false is mapped to compact. + This attribute indicates whether formulas should try to minimize + the logical height (value is false) or not + (value is true) e.g. by changing the size of content or + the layout of scripts. +

+

+ The + scriptlevel + attribute, if present, must have value + +<U>, -<U> or <U> + where <U> is an + unsigned-integer. + In that case + the user agent is expected to treat the scriptlevel + attribute as a + presentational hint setting the element's + math-depth + property to the corresponding value. + More precisely, + +<U>, -<U> and + <U> + are respectively mapped to + add(<U>) + add(<-U>) + and <U>. +

+

+ displaystyle and scriptlevel values + are automatically adjusted within MathML elements. + To fully implement these attributes, additional CSS properties must be + specified in the user agent stylesheet + as described in A. User Agent Stylesheet. + In particular, for all MathML elements a default + font-size: math is specified to ensure that + scriptlevel changes are taken into account. +

+
+

+ In this example, an munder + element is used to attach a + script "A" to a base "∑". By default, the summation + symbol is rendered with the font-size inherited from its + parent and the A as a scaled down subscript. + If displaystyle is true, the summation symbol is drawn + bigger and the "A" becomes an underscript. + If scriptlevel is reset to 0 on the "A", then it will + use the same font-size as the top-level math root. +

+
<math>
+  <munder>
+    <mo></mo>
+    <mi>A</mi>
+  </munder>
+  <munder displaystyle="true">
+    <mo></mo>
+    <mi>A</mi>
+  </munder>
+  <munder>
+    <mo></mo>
+    <mi scriptlevel="0">A</mi>
+  </munder>
+</math>
+ displaystyle-scriptlevel example +
+
Note
+ TEX's \displaystyle, \textstyle, + \scriptstyle, and \scriptscriptstyle correspond + to displaystyle and scriptlevel as + true and 0, + false and 0, + false and 1, + and false and 2, respectively. +
+
+

2.1.7 Attributes Reserved as Valid

+ +

The attributes + intent and arg + are reserved as valid attributes.

+

+ This specification does not define any observable behavior that is + specific to the intent and arg attributes. +

+
Note
+ These attributes are described in [MATHML4] and + future versions of this specification may or may not + define them. Authors should be aware that they are currently + in development and subject to change. +
+
+
+

2.2 Integration in the Web Platform

+ +

2.2.1 HTML and SVG

+ +

+ MathML can be mixed with HTML and SVG as described in the relevant + specifications [HTML] [SVG]. +

+

+ When evaluating the SVG requiredExtensions + attribute, user agents must claim support for the language extension + identified by the + MathML namespace. +

+
+

+ In this example, inline MathML and SVG elements are used inside + an HTML document. SVG elements <switch> and + <foreignObject> (with + proper <requiredExtensions>) are used to + embed a MathML formula with a text fallback, inside a diagram. + HTML input element is used within the + mtext + to include an interactive input field inside a mathematical + formula. See also 3.7 Semantics and Presentation + for an example of SVG and HTML inside an annotation-xml + element. +

+
<svg style="font-size: 20px" width="400px" height="220px" viewBox="0 0 200 110">
+  <g transform="translate(10,80)">
+    <path d="M 0 0 L 150 0 A 75 75 0 0 0 0 0
+             M 30 0 L 30 -60 M 30 -10 L 40 -10 L 40 0"
+          fill="none" stroke="black"></path>
+    <text transform="translate(10,20)">1</text>
+    <switch transform="translate(35,-40)">
+      <foreignObject width="200" height="50"
+                     requiredExtensions="http://www.w3.org/1998/Math/MathML">
+        <math>
+          <msqrt>
+            <mn>2</mn>
+            <mi>r</mi>
+            <mo></mo>
+            <mn>1</mn>
+          </msqrt>
+        </math>
+      </foreignObject>
+      <text>\sqrt{2r - 1}</text>
+    </switch>
+  </g>
+</svg>
+
+<p>
+  Fill the blank:
+  <math>
+    <msqrt>
+      <mn>2</mn>
+      <mtext><input onchange="..." size="2" type="text"></mtext>
+      <mo></mo>
+      <mn>1</mn>
+    </msqrt>
+    <mo>=</mo>
+    <mn>3</mn>
+  </math>
+</p>
+ html-svg example +
+
+

2.2.2 CSS styling

+ +

User agents must support various CSS features mentioned in this + specification, including new ones described in + 4. CSS Extensions for Math Layout. + They must follow the computation rule for + display: contents. +

+
+

+ In this example, the MathML formula inherits the CSS color of its + parent and uses the font-family specified via the + style attribute. +

+
<div style="width: 15em; color: blue">
+  This mathematical formula with a big summation and the number pi
+  <math display="block" style="font-family: STIX Two Math">
+    <mrow>
+      <munderover>
+        <mo></mo>
+        <mrow><mi>n</mi><mo>=</mo><mn>1</mn></mrow>
+        <mrow><mo>+</mo><mn></mn></mrow>
+      </munderover>
+      <mfrac>
+        <mn>1</mn>
+        <msup><mi>n</mi><mn>2</mn></msup>
+      </mfrac>
+    </mrow>
+    <mo>=</mo>
+    <mfrac>
+      <msup><mi>π</mi><mn>2</mn></msup>
+      <mn>6</mn>
+    </mfrac>
+  </math>
+  is easy to prove.
+</div>
+ style example +
+

+ All documents containing MathML Core elements must include + CSS rules described in A. User Agent Stylesheet + as part of user-agent level style sheet defaults. + In particular, this adds !important rules to force + writing mode + to horizontal-lr on all MathML elements. +

+

+ The float + property does + not create floating of elements whose parent's computed + display value is + block math or inline math, + and does not take them out-of-flow. +

+

+ The ::first-line and + ::first-letter + pseudo-elements do not apply to elements whose computed + display value is + block math or inline math, and such + elements do not contribute a first formatted line or first letter + to their ancestors. +

+

+ The following CSS features are not supported and must be ignored: +

+
    +
  • + Line breaking inside math formulas: + white-space + is treated as nowrap on all MathML elements. +
  • +
  • + Alignment properties: + align-content, justify-content, + align-self, justify-self have + no effects on MathML elements. +
  • +
+
Note
+ These features might be handled in future versions of this document. + For now, authors are discouraged from setting a different value for + these properties as that might lead to backward incompatibility + issues. +
+
+

2.2.3 DOM and JavaScript

+ +

+ User agents supporting + Web application APIs + must ensure that they keep the visual rendering of MathML + synchronized with the [DOM] tree, in particular perform necessary + updates when MathML attributes are modified dynamically. +

+

+ All the nodes representing MathML elements in the DOM + must implement, and expose to scripts, the following + MathMLElement interface. +

+
WebIDL[Exposed=Window]
+interface MathMLElement : Element { };
+MathMLElement includes GlobalEventHandlers;
+MathMLElement includes HTMLOrForeignElement;
+

The GlobalEventHandlers and + HTMLOrForeignElement + interfaces are defined in [HTML].

+
+

+ In the following example, a MathML formula is used to render + the fraction "α over 2". When clicking the red α, it is changed + into a blue β. +

+
<script>
+  function ModifyMath(mi) {
+      mi.style.color = 'blue';
+      mi.textContent = 'β';
+  }
+</script>
+<math>
+  <mrow>
+    <mfrac>
+      <mi style="color: red" onclick="ModifyMath(this)">α</mi>
+      <mn>2</mn>
+    </mfrac>
+  </mrow>
+</math>
+ dom-idl example +
+
Issue
+ Rename + HTMLOrSVGElement and define MathMLElement in [HTML]. +
+
+

2.2.4 Text layout

+ +

+ Because math fonts generally contain very tall glyphs such as big + integrals, using typographic metrics is important to avoid + excessive line spacing of text. As a consequence, + user agents must take into account the USE_TYPO_METRICS flag from + the OS/2 table [OPEN-FONT-FORMAT] when performing text layout. +

+
+

2.2.5 Focus

+ +

+ MathML provides the ability for authors to allow for + interactivity in supporting interactive user agents + using the same concepts, approach and guidance to + Focus + as described in HTML, with modifications or + clarifications regarding application + for MathML as described in this section. +

+

+ When an element is focused, all applicable CSS + focus-related pseudo-classes as defined in + Selectors Level 3 + apply, as defined in that specification. +

+

+ The contents of embedded math elements + (including HTML elements inside token elements) + contribute to the sequential focus order of the containing owner HTML + document (combined sequential focus order). +

+
+
+
+

3. Presentation Markup

+ +

3.1 Visual formatting model

+ +

3.1.1 Box Model

+ +

+ The default display property + is described in A. User Agent Stylesheet: +

+
    +
  • + For the <math> root, + it is equal to inline math or block math + according to the value of the display attribute. +
  • +
  • + For Tabular MathML elements + mtable, + mtr, + mtd it is respectively equal to + inline-table, + table-row and + table-cell. +
  • +
  • For all but the first children of the maction + and semantics elements, it is equal to + none. +
  • +
  • + For all the other MathML elements it is equal + to block math. +
  • +
+

+ In order to specify math layout in different + writing modes, + this specification uses concepts from [CSS-WRITING-MODES-4]: +

+ +
Note
+ Unless specified otherwise, + the figures in this specification use a + writing mode + of horizontal-lr and ltr. + See Figure 4, + Figure 5 and + Figure 6 for examples of other + writing modes that are sometimes used for math layout. +
+

+ Boxes used for MathML elements rely on several parameters in order to perform layout + in a way that is compatible with CSS but also to take into account + very accurate positions and spacing within math formulas: +

+
    +
  1. Inline metrics. + min-content inline size, + max-content inline size and + inline size + from CSS. See Figure 1. +
    + +
    Figure 1 Generic Box Model for MathML elements
    +
    +
  2. +
  3. +

    + Block metrics. + The block size, + first baseline set + and + last baseline set. + The following baselines are defined for MathML boxes: +

    +
      +
    1. + The alphabetic baseline + which typically aligns with the bottom of uppercase Latin + glyphs. The algebraic distance from the + alphabetic baseline to the line-over edge of the box is called the + line-ascent. The algebraic distance from the + line-under edge to the alphabetic baseline of the box + is called the line-descent. +
    2. +
    3. + The mathematical baseline, also called + math axis, which typically aligns with the fraction + bar, middle of fences and binary operators. It is shifted away from the alphabetic baseline by AxisHeight towards the line-over. +
    4. +
    5. + The ink-over baseline, indicating the line-over + theorical limit of the math content drawn, excluding any + extra space. + If not specified, it is aligned with the line-over edge. + The algebraic distance from the alphabetic baseline to + the ink-over baseline is called the + ink line-ascent. +
    6. +
    7. + The ink-under baseline, indicating the line-under + theorical limit of the math content drawn, excluding any + extra space. + If not specified, it is aligned with the line-under edge. + The algebraic distance from the ink-under baseline + to the alphabetic baseline is called the + ink line-descent. +
    8. +
    +
    Note
    + For math layout, it is very important to rely on the ink extent + when positioning text. This is not the case for more complex + notations (e.g. square root). + Although ink-ascent and ink-descent are defined for + all MathML elements they are really only used for the token + elements. In other cases, they just match normal ascent and + descent. +
    + Unless specified otherwise, the last baseline set is equal to the + first baseline set for MathML boxes. +
  4. +
  5. + An optional italic correction + which provides a measure of how much the text of a box is + slanted along the inline axis. + See Figure 2. +
    + +
    Figure 2 Examples of italic correction for italic f and large integral
    +
    + If it is requested during calculation of + min-content inline size and + max-content inline size or during layout + then 0 is used as a fallback value. +
  6. +
  7. + An optional top accent attachment + which provides a reference offset on the + inline axis of a box that should be used when + positioning that box as an accent. + See Figure 3. +
    + +
    Figure 3 Example of top accent attachment for a circumflex accent
    +
    + If it is requested during calculation of + min-content inline size + (respectively max-content inline size) then half the + min-content inline size (respectively max-content inline size) is used as a + fallback value. + If it is requested during layout then half the + inline size of the box is used as a fallback value. +
  8. +
+

Given a MathML box, the following offsets are defined:

+
    +
  • The inline offset of a child box + is the offset between the + inline-start edge of + the parent box and the + inline-start edge + of the child box.
  • +
  • The block offset of a child box + is the offset between the block-start edge of + the parent box and the + block-start edge + of the child box.
  • +
  • The line-left offset of a child box + is the offset between the line-left edge of + the parent box and the + line-left edge + of the child box.
  • +
+ +
+ +
Figure 4 Box model for writing mode horizontal-tb and rtl that may be used in e.g. Arabic math.
+
+
+ +
Figure 5 Box model for writing mode vertical-lr and ltr that may be used in e.g. Mongolian math.
+
+
+ +
Figure 6 Box model for writing mode vertical-rl and ltr that may be used in e.g. Japanese math.
+
+
Note
+ The position of child boxes and graphical items inside a MathML + box are expressed using the inline offset + and block offset. + For convenience, the layout algorithms may describe offsets using + flow-relative directions, line-relative directions or + the alphabetic baseline. + It is always possible to pass from one description to the other + because position of child boxes is always performed after the + metrics of the box and of its child boxes are calculated. +
+
+

Here are examples of offsets obtained from line-relative + metrics:

+ +
+
Issue 78: Ink ascent/descent opentype/texneeds-tests
Improve definition of ink ascent/descent?
+ +
+

3.1.2 Layout Algorithms

+ +

+ Each MathML element has an associated math content box, which is + calculated as described in this chapter's layout algorithms using the following + structure: +

+
    +
  1. + Calculation of min-content inline size + and max-content inline size + of the math content. +
  2. +
  3. + Box layout: +
      +
    1. + Layout of in-flow child boxes. +
    2. +
    3. + Calculation of inline size, + ink line-ascent, + ink line-descent, + line-ascent and + line-ascent of the math content. +
    4. +
    5. + Calculation of offsets of child boxes within the math content box + as + well as sizes and offsets of extra graphical items + (bars, radical symbol, etc). +
    6. +
    7. + Layout and positioning of absolutely-positioned and fixed-positioned boxes, as described in [CSS-POSITION-3]. +
    8. +
    +
  4. +
+

+ The following extra steps must be performed: +

+ +
Note
+ Per the description above, margin-collapsing does not apply to MathML elements. +
+

+ During box layout, optional + inline stretch size constraint and + block stretch size constraint parameters may be used on + embellished operators. The former indicates + a target size that a core operator stretched along + the inline axis should cover. + The latter indicates an ink line-ascent and ink line-descent + that a core operator stretched along the block axis + should cover. + Unless specified otherwise, these parameters are ignored during + box layout and child boxes are laid out without + any stretch size constraint. +

+
Issue 76: Define what inline percentages resolve against. css/html5need specification updateneeds-tests
Define what inline percentages resolve against
+
Issue 77: Define what block percentages resolve against. css/html5need specification updateneeds-tests
Define what block percentages resolve against
+
+

3.1.3 Anonymous <mrow> boxes

+ +

An anonymous box is a box without any associated + element in the DOM tree and which is generated for layout purpose + only. The properties of anonymous boxes are inherited from the + enclosing non-anonymous box while non-inherited properties have + their initial value. + An anonymous <mrow> box is + an anonymous box with display equal to + block math and which is laid out as + described in section 3.3.1.2 Layout of <mrow>. +

+

If a MathML element + generates an anonymous <mrow> box then it wraps + its children in an anonymous <mrow> box. I.e., + its subtree in the visual formatting model is made of an + anonymous <mrow> box + which itself contains the boxes associated to the children of this + MathML element. +

+
+

In the following example, the math and + mrow elements are laid out as described in section + 3.3.1.2 Layout of <mrow>. In particular, the + <math> element adds proper spacing around its + <mo>≠</mo> child and the + <mrow> element stretches its + <mo>|</mo> children vertically. +

+

The mtd element has + display: table-cell and the + msqrt element displays a radical symbol around its + children. However, they also place their children in a way that + is similar to what is described in section + 3.3.1.2 Layout of <mrow>: the + <msqrt> element adds proper spacing around its + <mo>+</mo> child while the + <mtd> element stretches its + <mo> children vertically. + In order to make this possible, + each of these two elements + generates an anonymous <mrow> box. +

+
<math>
+  <mrow>
+    <mo>|</mo>
+    <mtable>
+      <mtr>
+        <mtd>
+          <mi>x</mi>
+        </mtd>
+        <mtd>
+          <mo>(</mo>
+          <mfrac linethickness="0">
+            <mn>5</mn>
+            <mn>3</mn>
+          </mfrac>
+          <mo>)</mo>
+        </mtd>
+      </mtr>
+      <mtr>
+        <mtd>
+          <msqrt>
+            <mn>7</mn>
+            <mo>+</mo>
+            <mn>2</mn>
+          </msqrt>
+        </mtd>
+        <mtd>
+          <mi>y</mi>
+        </mtd>
+      </mtr>
+    </mtable>
+    <mo>|</mo>
+  </mrow>
+  <mo></mo>
+  <mn>0</mn>
+</math>
+ math example (display) +
+
+

3.1.4 Stacking contexts

+ +

MathML elements can overlap due to various spacing rules. They + can as well contain extra graphical items + (bars, radical symbol, etc). + A MathML element with computed style + display: block math + or display: inline math generates a new stacking + context. The painting order + of in-flow children of such a MathML element + is exactly the same as block elements. The extra graphical + items are painted after text and background (right after + step 7.2.4 for display: inline math and right after + step 7.2 for display: block math). +

+
+
+

3.2 Token Elements

+ +

+ Token elements in presentation markup are broadly intended to + represent the smallest units of mathematical notation which carry + meaning. Tokens are roughly analogous to words in text. However, + because of the precise, symbolic nature of mathematical notation, the + various categories and properties of token elements figure + prominently in MathML markup. By contrast, in textual data, + individual words rarely need to be marked up or styled specially. +

+
Note
+ In practice, most MathML token elements just contain simple text + for variables, numbers, operators etc and don't need sophisticated + layout. However, it can contain text with line breaks or + arbitrary HTML5 phrasing elements. +
+

3.2.1 Text <mtext>

+ +

+ The + mtext + element is used to represent arbitrary text + that should be rendered as itself. In general, the + <mtext> element is intended to denote + commentary text. +

+

+ The <mtext> element accepts the attributes described + in 2.1.3 Global Attributes. +

+
+

In the following example, mtext is used + to put conditional words in a definition:

+
<math>
+  <mi>y</mi>
+  <mo>=</mo>
+  <mrow>
+    <msup>
+      <mi>x</mi>
+      <mn>2</mn>
+    </msup>
+    <mtext>&nbsp;if&nbsp;</mtext>
+    <mrow>
+      <mi>x</mi>
+      <mo></mo>
+      <mn>1</mn>
+    </mrow>
+    <mtext>&nbsp;and&nbsp;</mtext>
+    <mn>2</mn>
+    <mtext>&nbsp;otherwise.</mtext>
+  </mrow>
+</math>
+ mtext example +
+
3.2.1.1 Layout of <mtext>
+ +

+ If the element does not have its computed + display property equal to + block math or inline math + then it is laid out according to the CSS specification where + the corresponding value is described. + Otherwise, the layout below is performed. +

+

+ If the <mtext> element contains only text + content without + forced line break + or + soft wrap opportunity + then, the anonymous child node generated for that text is + laid out as defined in the relevant CSS specification and: +

+ +

+ Otherwise, the mtext element is laid out as a + block box + and corresponding min-content inline size, + max-content inline size, + inline size, block size, + first baseline set and last baseline set are + used for the math content box. +

+
+
+

3.2.2 Identifier <mi>

+ +

+ The + mi + element represents a symbolic name or + arbitrary text + that should be rendered as an identifier. Identifiers can include + variables, function names, and symbolic constants. +

+

+ The <mi> element accepts the attributes described + in 2.1.3 Global Attributes as well as the following attribute: +

+ +

The layout algorithm is the same as the mtext element. The + user agent stylesheet + must contain the following property in order to implement automatic + italic via the text-transform value introduced in 4.2 New text-transform value: +

+
mi {
+  text-transform: math-auto;
+}
+ +

+ The + mathvariant + attribute, + if present, must be an + ASCII case-insensitive + match of normal. + In that case, the user agent is expected to treat the attribute as a + presentational hint setting the element's + text-transform + property to none. Otherwise it has no effects. +

+
Note
+

In [MathML3], the mathvariant attribute was used + to define logical classes of token elements, each class providing + a collection of typographically-related symbolic tokens with + specific meaning within a given mathematical expression.

+

+ In MathML Core, this attribute is only used to cancel automatic + italic of the mi element. For other use cases, the proper + Mathematical Alphanumeric Symbols [UNICODE] should be used + instead. See also section C. Mathematical Alphanumeric Symbols. +

+
+
+

In the following example, mi is used to render + variables and function names. Note that identifiers containing a + single letter are italic by default.

+
<math>
+  <mi>cos</mi>
+  <mo>,</mo>
+  <mi>c</mi>
+  <mo>,</mo>
+  <mi mathvariant="normal">c</mi>
+</math>
+ mi example +
+
+

3.2.3 Number <mn>

+ +

+ The + mn + element represents a "numeric literal" or + other data that should be rendered as a numeric literal. Generally + speaking, a numeric literal is a sequence of digits, perhaps including a + decimal point, representing an unsigned integer or real number. +

+

+ The <mn> element accepts the attributes described + in 2.1.3 Global Attributes. Its layout algorithm is + the same as the + mtext element. +

+
+

In the following example, mn is used to + write a decimal number.

+
<math>
+  <mn>3.141592653589793</mn>
+</math>
+ mn example +
+
+

3.2.4 Operator, Fence, Separator or Accent <mo>

+ +

+ The + mo + element represents an + operator or anything that should be rendered as an operator. + In general, the notational conventions for mathematical operators + are quite complicated, and therefore MathML provides a relatively + sophisticated mechanism for specifying the rendering behavior of an + <mo> element.

+

+ As a consequence, in MathML the + list of things that should "render as an operator" includes a + number of notations that are not mathematical operators in the + ordinary sense. Besides ordinary operators with infix, prefix, or + postfix forms, these include fence characters such as braces, + parentheses, and "absolute value" bars; separators such as comma + and semicolon; and mathematical accents such as a bar or tilde over + a symbol. This chapter uses the term "operator" to refer to + operators in this broad sense. +

+

+ The <mo> element accepts the attributes described + in 2.1.3 Global Attributes as well as the following + attributes: +

+ +

+ This specification does not define any observable behavior that is + specific to the fence and separator attributes. +

+
Note
+ Authors may use the + fence and separator + to describe specific semantics of operators. + The default values may be determined from the + Operators_fence and Operators_separator tables, or equivalently + the human-readable version + of the operator dictionary. +
+
+

+ In the following example, the mo element + is used for the binary operator +. Default spacing is symmetric + around that operator. A tighter spacing is used if you rely + on the form attribute to force it to be + treated as a prefix operator. + Spacing can also be specified explicitly using the + lspace and + rspace attributes. +

+
<math>
+  <mn>1</mn>
+  <mo>+</mo>
+  <mn>2</mn>
+  <mo form="prefix">+</mo>
+  <mn>3</mn>
+  <mo lspace="2em">+</mo>
+  <mn>4</mn>
+  <mo rspace="3em">+</mo>
+  <mn>5</mn>
+</math>
+ mo example 1 +

+ Another use case is for big operators such as summation. + When displaystyle is true, such an operator is drawn + larger but one can change that with the largeop attribute. + When displaystyle is false, underscripts are actually + rendered as subscripts but one can change that with the + movablelimits attribute. +

+
<math>
+  <mrow displaystyle="true">
+  <munder>
+    <mo></mo>
+    <mn>5</mn>
+  </munder>
+  <munder>
+    <mo largeop="false"></mo>
+    <mn>6</mn>
+  </munder>
+  </mrow>
+  <mrow>
+    <munder>
+      <mo></mo>
+      <mn>5</mn>
+    </munder>
+    <munder>
+      <mo movablelimits="false"></mo>
+      <mn>7</mn>
+    </munder>
+  </mrow>
+</math>
+ mo example 2 +

Operators are also used for stretchy symbols such as fences, + accents, arrows etc. In the following example, the vertical arrow + stretches to the height of the mspace element. + One can override default stretch behavior with the + stretchy attribute e.g. to force an unstretched arrow. + The symmetric attribute allows to indicate whether + the operator + should stretch symmetrically above and below the math axis + (fraction bar). + Finally the minsize and maxsize attributes add + additional constraints over the stretch size. +

+
<math>
+  <mfrac>
+    <mspace height="50px" depth="50px" width="10px" style="background: blue"/>
+    <mspace height="25px" depth="25px" width="10px" style="background: green"/>
+  </mfrac>
+  <mo></mo>
+  <mo stretchy="false"></mo>
+  <mo symmetric="true"></mo>
+  <mo minsize="250px"></mo>
+  <mo maxsize="50px"></mo>
+</math>
+ mo example 3 +

Note that the default properties of operators are + dictionary-based, as explained in + 3.2.4.2 Dictionary-based attributes. For example a binary + operator typically has default symmetric spacing around it while a + fence is generally stretchy by default. +

+
+
3.2.4.1 Embellished operators
+ +

+ A MathML Core element is an + embellished operator + if it is: +

+
    +
  1. An mo element;
  2. +
  3. + a scripted element or an + mfrac, + whose first in-flow child exists and is an + embellished operator; +
  4. +
  5. + a grouping element or mpadded, + whose in-flow children consist (in any order) of one + embellished operator and zero or more + space-like elements. +
  6. +
+

+ The core operator of an embellished operator + is the <mo> element defined recursively as + follows: +

+
    +
  1. The core operator of an mo + element; is the element itself.
  2. +
  3. + The core operator of an embellished + scripted element or + mfrac + element is the core operator of its first in-flow child. +
  4. +
  5. + The core operator of an embellished + grouping element or mpadded + is the core operator of its unique embellished operator + in-flow child. +
  6. +
+

+ The stretch axis of an embellished operator + is inline if its + core operator contains only text content + made of a single character c, and that character has + inline intrinsic stretch axis. + Otherwise, the stretch axis of the embellished operator + is block. +

+

+ The same definitions apply for boxes in the + visual formatting model where an + anonymous <mrow> box is treated as a + grouping element. +

+
+
3.2.4.2 Dictionary-based attributes
+ +

+ The form + property of an embellished operator is either + infix, prefix or + postfix. + The corresponding form attribute on the + mo element, if present, must be an + ASCII case-insensitive + match to one of these values. +

+

+ The algorithm for determining the form of an embellished operator is as follows: +

+
    +
  1. If the form attribute is present and valid + on the core operator, then its + ASCII lowercased value + is used. +
  2. +
  3. If the embellished operator is the first in-flow child of a + grouping element, + mpadded or + msqrt with more than one in-flow child + (ignoring all space-like children) then it has + form prefix. +
  4. +
  5. Or, if the embellished operator is the last in-flow child of + a + grouping element, + mpadded or + msqrt + with more than one in-flow child + (ignoring all space-like children) then it has + form postfix. +
  6. +
  7. Or, if the embellished operator is an in-flow child of a + scripted element, other than the first in-flow + child, then it has form postfix. +
  8. +
  9. + Otherwise, the embellished operator has form + infix. +
  10. +
+

+ The + stretchy, + symmetric, + largeop, + movablelimits + properties of an embellished operator are + either false or true. In the latter + case, it + is said that the embellished operator has the + property. + The corresponding stretchy, symmetric, largeop, movablelimits attributes on the + mo element, if present, must be a + boolean. +

+

+ The + lspace, + rspace, + minsize + properties of an embellished operator are + <length-percentage>. + The maxsize property + of an embellished operator is either a + <length-percentage> or ∞. + The + lspace, + rspace, + minsize and + maxsize attributes on the + mo element, if present, + must be a <length-percentage>. +

+

+ The algorithm for determining the properties of + an embellished operator is as follows: +

+
    +
  1. If the corresponding + stretchy, + symmetric, + largeop, + movablelimits, + lspace, + rspace, + maxsize or + minsize + attribute is present and valid + on the core operator, then the + ASCII lowercased value + of this property is used.
  2. +
  3. Otherwise, run the algorithm for determining the form of an embellished operator.
  4. +
  5. + If the core operator contains only text + content Content, then set Category + to the result of the + algorithm to determine the category of an operator + (Content, Form) + where Form is the form + calculated at the previous step. +
  6. +
  7. + If Category is Default and + the form + of embellished operator was not explicitly specified + as an attribute on its core operator: +
      +
    1. Set Category to the result of the + algorithm to determine the category of an operator + (Content, Form) where Form is + infix.
    2. +
    3. If Category is Default, then + run the algorithm again with Form set to + postfix.
    4. +
    5. If Category is Default, then + run the algorithm again with Form set to + prefix.
    6. +
    +
  8. +
  9. + Run the + algorithm to set the properties of an operator from its + category Category. +
  10. +
+

When used during layout, + the values of stretchy, + symmetric, + largeop, + movablelimits, + lspace, + rspace, + minsize are + obtained by the + algorithm for determining the properties of an embellished operator with the following extra resolutions:

+
    +
  • Percentage values for lspace, + rspace are interpreted + relative to the value read from the dictionary + or to the fallback value above. +
  • +
  • + Interpretation of percentage values for minsize + and maxsize are described in + 3.2.4.3 Layout of operators. +
  • +
  • + Font-relative lengths for + lspace, rspace, + minsize and maxsize rely on the + font style of the core operator, not the one of the + embellished operator. +
  • +
+
+
3.2.4.3 Layout of operators
+ +

+ If the <mo> element does not have its computed + display property equal to + block math or inline math + then it is laid out according to the CSS specification where + the corresponding value is described. + Otherwise, the layout below is performed. +

+

+ The text of the operator must only be painted if the + visibility of + the <mo> element is visible. + In that case, it must be painted with the + color + of the <mo> element. +

+

Operators are laid out as follows:

+
    +
  1. + If the content of the <mo> element is not + made + of a single character c then fall back to the + layout algorithm of 3.2.1.1 Layout of <mtext>. +
  2. +
  3. + If the operator has the stretchy property: +
      +
    • + If the stretch axis of the operator is inline: +
        +
      1. + If it is not possible to shape a stretchy glyph + corresponding to c in the inline direction + with the + first available font + then fall back to the + layout algorithm of 3.2.1.1 Layout of <mtext>. +
      2. +
      3. + The min-content inline size and + max-content inline size of the math content + are set to the one obtained by the layout algorithm of + 3.2.1.1 Layout of <mtext>. +
      4. +
      5. + If there is not any + inline stretch size constraint + Tinline + then + fall back to the + layout algorithm of 3.2.1.1 Layout of <mtext>. +
      6. +
      7. + The inline size and (ink) block metrics of the math content + are given by algorithm to + shape a stretchy glyph to inline dimension + Tinline. +
      8. +
      9. + The painting of the operator is performed by the + algorithm + to shape a stretchy glyph + stretched to inline dimension + Tinline and + at position determined by the previous box metrics. +
      10. +
      +
    • +
    • + Otherwise, the stretch axis of the operator is + block. The following steps are performed: +
        +
      1. + If it is not possible to shape a stretchy glyph + corresponding to c in the block direction + with the + first available font + then fall back to the + layout algorithm of 3.2.1.1 Layout of <mtext>. +
      2. +
      3. + The min-content inline size and + max-content inline size of the math content + are set to the + preferred inline size of a glyph stretched + along the block axis. +
      4. +
      5. + If there is not any + block stretch size constraint + (Uascent, Udescent) + then + fall back to the + layout algorithm of 3.2.1.1 Layout of <mtext>. +
      6. +
      7. If the operator has the symmetric property + then set the target sizes + Tascent and + Tdescent to + Sascent and + Sdescent respectively: + + + Otherwise set them to + Uascent and + Udescent respectively. +
        Note
        + The property TascentAxisHeight = Tdescent + AxisHeight means that + an operator stretching exactly + Tascent above the baseline + and Tdescent below the + baseline would actually stretch symmetrically above + and below the math axis. + Sascent and + Sdescent are the minimal + values, that are respectively not less than + Uascent and + Udescent, which satisfy + this property. +
        +
      8. +
      9. + Let minsize and maxsize + be the minsize and maxsize properties on the + operator. Percentage values are interpreted relative + to the height of the glyph for c. + Let T = + Tascent + + Tdescent be the target size. + If minsize < 0 then set minsize + to 0. + If maxsize < minsize then + set maxsize to minsize. + With 0 ≤ minsizemaxsize: +
          +
        • + If T ≤ 0 then set + Tascent to + minsize / 2 + AxisHeight and + then set Tdescent + to minsize − + Tascent. +
        • +
        • + Otherwise, if + 0 < T < minsize + then set Tascent to + max(0, (TascentAxisHeight) × minsize / T + AxisHeight) and + Tdescent + to minsize − + Tascent. +
        • +
        • + Otherwise, if maxsize < T + then set Tascent to + max(0, (TascentAxisHeight) × maxsize / T + AxisHeight) and + Tdescent + to maxsize − + Tascent. +
        • +
        +
        Note
        + The default maxsize is value ∞ is + interpreted above as being larger than any other size, + i.e. + minsize ≤ maxsize is always true while + maxsize < minsize and + maxsize < T are always false. +
        +
        Note
        + This step ensures that the condition minsizeTmaxsize holds. + Additionnally, if the target values correspond to symmetric stretching with respect to the math axis then property + TascentAxisHeight = Tdescent + AxisHeight is preserved. +
        +
      10. +
      11. + The inline size, + ink line-ascent, + ink line-descent, + line-ascent and + line-descent + of the math content + are obtained by the algorithm to + shape a stretchy glyph + to block dimension + Tascent + + Tdescent. + The inline size of the math content is the width of + the stretchy glyph. The stretchy glyph is shifted + towards the line-under by a value Δ so that its + center aligns with the center of the target: + the ink ascent of the math content is + the ascent of the stretchy glyph − Δ + and the ink descent of the math content is + the descent of the stretchy glyph + Δ. + These centers have coordinates "½(ascent − descent)" + so Δ = [(ascent of stretchy glyph − descent of stretchy glyph) − (TascentTdescent)] / 2. +
      12. +
      13. + The painting of the operator is performed by the + algorithm to shape a stretchy glyph + stretched to block dimension + Tascent + + Tdescent + and at position determined by the previous box metrics + shifted by Δ towards the line-over. +
      14. +
      +
      + +
      Figure 7 Base size, size variants and glyph assembly + for + the left brace
      +
      +
    • +
    +
  4. +
  5. + If the operator has the largeop property and + if math-style on + the <mo> element is normal, + then: +
      +
    1. +

      + Use the + MathVariants + table to try and find a glyph of height at least + DisplayOperatorMinHeight. + If none is found, fall back to the + largest non-base glyph. If none is found, fall back to + the layout algorithm of 3.2.1.1 Layout of <mtext>. +

      +
    2. +
    3. + The min-content inline size, + max-content inline size, + inline size and block metrics of the math content + are given by the + glyph found. +
    4. +
    5. + Paint the glyph. +
    6. +
    +
    + +
    Figure 8 Base and displaystyle sizes of the summation symbol
    +
    +
  6. +
  7. + Otherwise fall back to the + layout algorithm of 3.2.1.1 Layout of <mtext>. +
  8. +
+

If the algorithm to shape a stretchy glyph has been + used for one of the step above, then the italic correction + of the math content is set to the value returned by that algorithm. +

+
+
+

3.2.5 Space <mspace>

+ +

+ The + mspace + empty element represents a blank space of any + desired size, as set by its attributes. +

+

+ The <mspace> element accepts the attributes described + in 2.1.3 Global Attributes as well as the following + attributes: +

+ +

The + width, + height, + depth, if present, must + have a value that is a valid <length-percentage>. +

+
    +
  • + If the width + attribute is present, valid and not a percentage then + that attribute is used as a + presentational hint + setting the element's + width + property to the corresponding value. +
  • +
  • + If the height + attribute is absent, invalid or a percentage then the requested + line-ascent is 0. + Otherwise the requested line-ascent is the resolved + value of the height attribute, clamping + negative values to 0. +
  • +
  • + If both the height and depth attributes + are present, valid and not a percentage then they are used as a + presentational hint + setting the element's + height + property to the concatenation of the strings + "calc(", the height attribute value, + " + ", the depth attribute value, + and ")". + If only one of these attributes is + present, valid and not a percentage then it is treated as a + presentational hint + setting the element's + height + property to the corresponding value. +
  • +
+
+

In the following example, mspace is used to + force spacing within the formula (a 1px blue border is + added to easily visualize the space):

+
<math>
+  <mn>1</mn>
+  <mspace width="1em"
+          style="border-top: 1px solid blue"/> 
+  <mfrac>
+    <mrow>
+      <mn>2</mn>
+      <mspace depth="1em"
+              style="border-left: 1px solid blue"/>
+    </mrow>
+    <mrow>
+      <mn>3</mn>
+      <mspace height="2em"
+              style="border-left: 1px solid blue"/>
+    </mrow>
+  </mfrac>
+</math>
+ mspace example +
+

+ If the <mspace> element does not have its + computed + display property equal to + block math or inline math + then it is laid out according to the CSS specification where + the corresponding value is described. + Otherwise, + the <mspace> element is laid out as shown on + Figure 9. + The min-content inline size, + max-content inline size and inline size of the math + content are equal to the resolved value of the + width property. + The block size of the math content is equal to the resolved + value of the height property. + The line-ascent of the math content is equal to the + requested line-ascent determined above. +

+
+ +
Figure 9 Box model for the <mspace> element
+
+
Note
+ The terminology height/depth comes from [MATHML3], itself inspired + from [TEXBOOK]. +
+
3.2.5.1 Definition of space-like elements
+ +

+ A number of MathML presentation elements are "space-like" in the + sense that they typically render as whitespace, and do not affect + the mathematical meaning of the expressions in which they appear. + As a consequence, these elements often function in somewhat + exceptional ways in other MathML expressions. +

+

+ A MathML Core element is a + space-like element + if it is: +

+
    +
  1. an + mtext or + mspace; +
  2. +
  3. or a + grouping element or mpadded + all of whose in-flow children are space-like. +
  4. +
+

+ The same definitions apply for boxes in the + visual formatting model where an + anonymous <mrow> box is treated as a + grouping element. +

+
Note
+ Note that an mphantom is not + automatically defined to be space-like, unless its content is + space-like. This is because operator spacing is affected by + whether adjacent elements are space-like. + Since the <mphantom> element is + primarily intended as an aid in aligning expressions, operators + adjacent to an <mphantom> should behave + as if they were adjacent to the contents of the + <mphantom>, rather than to an equivalently + sized area of whitespace. +
+
+
+

3.2.6 String Literal <ms>

+ +

+ ms + element is used to represent + "string literals" in expressions meant to be interpreted by computer + algebra systems or other systems containing "programming languages". +

+

+ The <ms> element accepts the attributes described + in 2.1.3 Global Attributes. Its layout algorithm is + the same as the mtext element. +

+
+

In the following example, ms is used to + write a literal string of characters:

+
<math>
+  <mi>s</mi>
+  <mo>=</mo>
+  <ms>"hello world"</ms>
+</math>
+ ms example +
+
Note
+ In MathML3, it was possible to use the lquote and + rquote attributes to respectively specify the strings + to use as opening and closing quotes. These are no longer supported + and the quotes must instead be specified as part of the text of the + <ms> element. One can add CSS rules to legacy + documents in order to preserve visual rendering. For example, + in left-to-right direction: +
ms:before, ms:after {
+  content: "\0022";
+}
+ms[lquote]:before {
+  content: attr(lquote);
+}
+ms[rquote]:after {
+  content: attr(rquote);
+}
+
+
+
+

3.3 General Layout Schemata

+ +

Besides tokens there are several families of MathML presentation + elements. One family of elements deals with various "scripting" + notations, such as subscript and superscript. Another family is + concerned with matrices and tables. The remainder of the elements, + discussed in this section, describe other basic notations such as + fractions and radicals, or deal with general functions such as + setting style properties and error handling. +

+

3.3.1 Group Sub-Expressions <mrow>

+ +

+ The + mrow + element is used to group together any number of sub-expressions, usually + consisting of one or more <mo> elements acting as + "operators" on one or more other expressions that are their "operands". +

+
+

In the following example, mrow is used to + group a sum "1 + 2/3" as a fraction numerator (first child + of mfrac) and to construct a fenced expression + (first child of msup) that is raised to the power of 5. + Note that mrow alone does not add visual fences + around its grouped content, one has to explicitly specify them + using the mo element. +

+

+ Within the mrow elements, one can see that + vertical alignment of children (according to the + alphabetic baseline or the mathematical baseline) + is properly performed, fences are vertically stretched and + spacing around the binary + operator automatically calculated. +

+
<math>
+  <msup>
+    <mrow>
+      <mo>(</mo>
+      <mfrac>
+        <mrow>
+          <mn>1</mn>
+          <mo>+</mo>
+          <mfrac>
+            <mn>2</mn>
+            <mn>3</mn>
+          </mfrac>
+        </mrow>
+        <mn>4</mn>
+      </mfrac>
+      <mo>)</mo>
+    </mrow>
+    <mn>5</mn>
+  </msup>
+</math>
+ mrow example +
+

+ The <mrow> element accepts the attributes described + in 2.1.3 Global Attributes. An <mrow> + element with in-flow children + child1, child2, …, childN + is laid out as shown on Figure 10. The child boxes + are put in a row one after the other with all their + alphabetic baselines + aligned. +

+
+ +
Figure 10 Box model for the <mrow> element
+
+
Note
+ Because the box model ensures alignment of alphabetic baselines, + fraction bars or symmetric stretchy operators + will also be aligned along the math axis in the typical case when + AxisHeight is the same for all in-flow children. +
+
3.3.1.1 Algorithm for stretching operators along the block axis
+ +
+ +
Figure 11 Symmetric and non-symmetric stretching of + operators along the block axis
+
+

+ The algorithm for stretching operators along the block axis + consists in the following steps: +

+
    +
  1. + If there is a block stretch size constraint + or an inline stretch size constraint + then the element being laid out is an + embellished operator. Lay out the one in-flow child that + is an embellished operator + with the same stretch size constraint and + all the other in-flow children + without any stretch size constraint + and stop. +
  2. +
  3. Otherwise, + split the list of in-flow children into a first list + LToStretch containing + embellished operators with + a stretchy property and block stretch axis; + and a second list LNotToStretch. +
  4. +
  5. + Perform layout without any stretch size constraint on + all the items of LNotToStretch. + If LToStretch is empty then stop. + If LNotToStretch is empty, perform + layout with block stretch size constraint + (0, 0) for + all the items of LToStretch. +
  6. +
  7. + Calculate the unconstrained target sizes + Uascent + and Udescent as respectively the maximum + ink ascent and maximum ink descent of the margin boxes of + in-flow children that + have been laid out in the previous step. +
  8. +
  9. + Lay out or relayout all the elements of + LToStretch with + block stretch size constraint + (Uascent, Udescent). +
  10. +
+
+
3.3.1.2 Layout of <mrow>
+ +

+ If the box is not an anonymous <mrow> box + and the associated element does not have its computed + display property equal to + block math or inline math + then it is laid out according to the CSS specification where + the corresponding value is described. + Otherwise, the layout below is performed. +

+

+ A child box is slanted if it is not an + embellished operator + and has nonzero italic correction. +

+
Note
+ Large operators may have nonzero italic correction but that one + is used when attaching scripts. + More generally, all embellished operators + are treated as non-slanted since the spacing around them is + calculated as specified by lspace and + rspace. +
+

+ The min-content inline size + (respectively max-content inline size) are + calculated using the following algorithm: +

+
    +
  1. + Set add-space to true if + the box corresponds to a math element + or is not an + embellished operator; and to false otherwise. +
  2. +
  3. Set inline-offset to 0.
  4. +
  5. Set previous-italic-correction to 0.
  6. +
  7. + For each in-flow child: +
      +
    1. + If the child is not slanted, then increment + inline-offset by + previous-italic-correction. +
    2. +
    3. + If the child is an embellished operator + and add-space is true then + increment inline-offset by + its lspace property. +
    4. +
    5. + Increment inline-offset by + the min-content inline size + (respectively max-content inline size) of + the child's margin box. +
    6. +
    7. + If the child is slanted then + set previous-italic-correction to + its italic correction. Otherwise set it to 0. +
    8. +
    9. + If the child is an embellished operator + and add-space is true then + increment inline-offset by + its rspace property. +
    10. +
    +
  8. +
  9. + Increment inline-offset by + previous-italic-correction. +
  10. +
  11. + Return inline-offset. +
  12. +
+

+ The in-flow children are laid out using the + algorithm for stretching operators along the block axis. +

+

+ The inline size of the math content is calculated like + the min-content inline size and + max-content inline size of the math content, + using the inline size of the + in-flow children's margin boxes instead. +

+

+ The ink line-ascent (respectively line-ascent) + of the math content + is the maximum of the + ink line-ascents (respectively line-ascents) + of all the in-flow children's margin boxes. Similarly, + the ink line-descent (respectively line-descent) + of the math content is the maximum of the ink line-descents + (respectively ink line-ascents) + of all the in-flow children's margin boxes. +

+

+ The in-flow children are positioned using the following + algorithm: +

+
    +
  1. + Set add-space to true if + the box corresponds to a math element + or is not an + embellished operator; and to false otherwise. +
  2. +
  3. Set inline-offset to 0.
  4. +
  5. Set previous-italic-correction to 0.
  6. +
  7. For each in-flow child: +
      +
    1. + If the child is not slanted, then increment + inline-offset by + previous-italic-correction. +
    2. +
    3. + If the child is an embellished operator + and add-space is true then + increment inline-offset by + its lspace property. +
    4. +
    5. + Set the inline offset of the child + to inline-offset and its block offset such + that the alphabetic baseline of the child is aligned with the alphabetic baseline. +
    6. +
    7. + Increment inline-offset by + the inline size of the child's margin box. +
    8. +
    9. + If the child is slanted then + set previous-italic-correction to + its italic correction. Otherwise set it to 0. +
    10. +
    11. + If the child is an embellished operator + and add-space is true then + increment inline-offset by + its rspace property. +
    12. +
    +
  8. +
+

The italic correction of the math content is set to the italic + correction of the last in-flow child, which is + the final value of previous-italic-correction.

+
+
+

3.3.2 Fractions <mfrac>

+ +

+ The + mfrac + element is used for fractions. It can also be used to mark up + fraction-like objects such as binomial coefficients and Legendre symbols. +

+

+ If the <mfrac> element does not have its computed + display property equal to block math + or inline math + then it is laid out according to the CSS specification where + the corresponding value is described. + Otherwise, the layout below is performed. +

+

+ The <mfrac> element accepts the attributes described + in 2.1.3 Global Attributes as well as the + following attribute: +

+ +

+ The + linethickness + attribute indicates the fraction line thickness + to use for the fraction bar. + If present, it must + have a value that is a valid <length-percentage>. + If the attribute is absent or has an invalid value, + FractionRuleThickness is used as the default + value. A percentage is interpreted relative to that default value. + A negative value is interpreted as 0. +

+
+

The following example contains four fractions + with different linethickness values. The bars are always + aligned with the middle of plus and minus signs. + The numerator and denominator are horizontally centered. + The fractions that are not in displaystyle + use smaller gaps and font-size.

+
<math>
+  <mn>0</mn>
+  <mo>+</mo>
+  <mfrac displaystyle="true">
+    <mn>1</mn>
+    <mn>2</mn>
+  </mfrac>
+  <mo></mo>
+  <mfrac>
+    <mn>1</mn>
+    <mn>2</mn>
+  </mfrac>
+  <mo>+</mo>
+  <mfrac linethickness="200%">
+    <mn>1</mn>
+    <mn>234</mn>
+  </mfrac>
+  <mo></mo>
+  <mrow>
+    <mo>(</mo>
+    <mfrac linethickness="0">
+      <mn>123</mn>
+      <mn>4</mn>
+    </mfrac>
+    <mo>)</mo>
+  </mrow>
+</math>
+ mfrac example +
+

+ The <mfrac> element sets + displaystyle to false, + or if it was already false increments + scriptlevel by 1, within its children. + It sets math-shift to + compact within its second child. + To avoid visual confusion between the fraction bar and another + adjacent items (e.g. minus sign or another fraction's bar), + a default 1-pixel space is added around the element. + The user agent stylesheet + must contain the following rules: +

+
mfrac {
+  padding-inline-start: 1px;
+  padding-inline-end: 1px;
+}
+mfrac > * {
+  math-depth: auto-add;
+  math-style: compact;
+}
+mfrac > :nth-child(2) {
+  math-shift: compact;
+}
+

+ If the <mfrac> element + has less or more than two in-flow children, its layout algorithm + is the same as the mrow element. + Otherwise, the first in-flow child is called + numerator, the second in-flow child is called + denominator and the layout algorithm is explained below. +

+
Note
+ In practice, an <mfrac> element has two children + that are in-flow. Hence the CSS rules basically perform + scriptlevel, displaystyle + and math-shift + changes for the numerator and + denominator. +
+
3.3.2.1 Fraction with nonzero line thickness
+ +

+ If the fraction line thickness is nonzero, the + <mfrac> + element is laid out as shown on Figure 12. + The fraction bar must only be painted if the + visibility of + the <mfrac> element is visible. + In that case, the fraction bar must be painted with the + color + of the <mfrac> element. +

+
+ +
Figure 12 Box model for the <mfrac> element
+
+

The min-content inline size + (respectively max-content inline size) + of content is the maximum between the + min-content inline size + (respectively max-content inline size) of the numerator's + margin box and the min-content inline size + (respectively max-content inline size) of the denominator's + margin box. +

+

+ If there is an inline stretch size constraint + or a block stretch size constraint then + the numerator is also laid out with the same stretch size + constraint, + otherwise it is laid out without any stretch + size constraint. The denominator is always laid out without + any stretch size constraint. +

+

+ The inline size of the math content + is the maximum between the inline size of the + numerator's margin box and the inline size of the + denominator's margin box. +

+

NumeratorShift is the maximum between:

+ +

DenominatorShift is the maximum between:

+ +

+ The line-ascent of the math content is the maximum between: +

+ +

+ The line-descent of the math content is the maximum between: +

+ +

+ The inline offset of the numerator (respectively denominator) + is half the inline size of the math content − + half the inline size of + the numerator's margin box + (respectively denominator's margin box). +

+

+ The alphabetic baseline of the numerator (respectively denominator) + is shifted away from the alphabetic baseline by a distance of + NumeratorShift (respectively + DenominatorShift) + towards the line-over (respectively line-under). +

+

+ The math content box is placed within the + content box so that their block-start edges + are aligned and the middles of these edges are at the same + position. +

+

+ The inline size of the fraction bar is the + inline size of the content box and its + inline-start edge is the aligned with the one the + content box. + The center of the fraction bar is shifted away from the alphabetic baseline of the math content box + by a distance of AxisHeight towards the line-over. + Its block size is the + fraction line thickness. +

+
+
3.3.2.2 Fraction with zero line thickness
+ +

+ If the fraction line thickness is zero, + the <mfrac> element is instead laid out as + shown on Figure 13. +

+
+ +
Figure 13 Box model for the <mfrac> element without bar
+
+

+ The min-content inline size, max-content inline size + and inline size of the math content are calculated the same + as in 3.3.2.1 Fraction with nonzero line thickness. +

+

+ If there is an inline stretch size constraint or + a block stretch size constraint then + the numerator is also laid out with the same stretch size + constraint + and otherwise it is laid out without any stretch + size constraint. The denominator is always laid out without + any stretch size constraint. +

+

+ If the math-style is compact then + TopShift and + BottomShift are respectively + set to StackTopShiftUp and StackBottomShiftDown. + Otherwise math-style is normal and + they are respectively set to StackTopDisplayStyleShiftUp + and StackBottomDisplayStyleShiftDown. +

+

+ The Gap is defined to be + (BottomShift − + the ink line-ascent of the denominator's margin box) + + (TopShift − + the ink line-descent of the numerator's margin box). + If math-style is compact + then GapMin + is StackGapMin, + otherwise math-style is normal + and it is StackDisplayStyleGapMin. + If Δ = GapMinGap is positive then + TopShift and BottomShift + are respectively increased by Δ/2 and Δ − Δ/2. +

+

+ The line-ascent of the math content is the maximum between: +

+ +

+ The line-descent of the math content is the maximum between: +

+ +

+ The inline offsets of the numerator and denominator are + calculated the same as in + 3.3.2.1 Fraction with nonzero line thickness. +

+

+ The alphabetic baseline of the numerator (respectively denominator) is + shifted away from the alphabetic baseline by a distance of + TopShift (respectively − + BottomShift) towards the + line-over (respectively line-under). +

+

+ The math content box is placed within the + content box so that their block-start edges + are aligned and the middles of these edges are at the same + position. +

+
+
+

3.3.3 Radicals <msqrt>, <mroot>

+ +

+ The radical elements construct an expression with a + root symbol √ with a line over the content. + The msqrt element is + used for square roots, while the mroot element is + used to draw radicals with indices, e.g. a cube root. +

+

+ The <msqrt> and <mroot> + elements accept the attributes described + in 2.1.3 Global Attributes. +

+
+

The following example contains a square root + written with msqrt and a cube root written + with mroot. + Note that msqrt has several children and the + square root applies to all of them. + mroot has exactly two children: it is a + root of index the second child (the number 3), applied to the + first child (the square root). + Also note these elements only change the font-size within the + mroot index, but it is scaled down more than + within the numerator and denumerator of the fraction. +

+
<math>
+  <mroot>
+    <msqrt>
+      <mfrac>
+        <mn>1</mn>
+        <mn>2</mn>
+      </mfrac>
+      <mo>+</mo>
+      <mn>4</mn>
+    </msqrt>
+    <mn>3</mn>
+  </mroot>
+  <mo>+</mo>
+  <mn>0</mn>
+</math>
+ msqrt-mroot example +
+

+ The <msqrt> and <mroot> + elements sets math-shift to + compact. + The <mroot> element + increments scriptlevel by 2, and sets displaystyle to "false" in all + but its first child. + The user agent stylesheet + must contain the following rule in order to implement that behavior: +

+
mroot > :not(:first-child) {
+  math-depth: add(2);
+  math-style: compact;
+}
+mroot, msqrt {
+  math-shift: compact;
+}
+

+ If the <msqrt> or <mroot> + element do not have their computed + display property equal to block math + or inline math + then they are laid out according to the CSS specification where + the corresponding value is described. + Otherwise, the layout below is performed. +

+

+ If the <mroot> has less or more than two + in-flow children, + its layout algorithm + is the same as the mrow element. + Otherwise, the first in-flow child is called + mroot base and + the second in-flow child is called + mroot index + and its layout algorithm is explained below. +

+
Note
+ In practice, an <mroot> element has two children + that are in-flow. Hence the CSS rules basically perform + scriptlevel and displaystyle changes for the index. +
+

+ The <msqrt> element + generates an anonymous <mrow> box + called the msqrt base. +

+
3.3.3.1 Radical symbol
+ +

+ The radical symbol must only be painted if the + visibility of + the <msqrt> or <mroot> + element is visible. + In that case, the radical symbol must be painted with the + color + of that element. +

+

+ The radical glyph is the glyph obtained for the + character U+221A SQUARE ROOT. +

+

+ The radical gap is given by + RadicalVerticalGap + if the math-style is compact and + RadicalDisplayStyleVerticalGap + if the math-style is normal. +

+

+ The radical target size for the stretchy radical glyph is + the sum of RadicalRuleThickness, + radical gap and the ink height of the base. +

+

+ The box metrics of the radical glyph + and painting of the surd are given by the algorithm to + shape a stretchy glyph to block dimension the + target size for the radical glyph. +

+
+
3.3.3.2 Square root
+ +

+ The <msqrt> element is laid out as shown on + Figure 14. +

+
+ +
Figure 14 Box model for the <msqrt> element
+
+

+ The min-content inline size + (respectively max-content inline size) + of the math content is + the sum of the + preferred inline size of a glyph stretched along the + block axis + for the radical glyph + and of the + min-content inline size (respectively max-content inline size) + of the msqrt base's margin box. +

+

+ The inline size of the math content is the sum of the advance width + of the box metrics of the radical glyph and + of the inline size of the msqrt base's margin's box. +

+

+ The line-ascent of the math content is the maximum between: +

+ +

+ The line-descent of the math content is the maximum between: +

+ +

+ The inline size of the overbar is the inline size of the + msqrt base's margin's box. + The inline offsets of the msqrt base and overbar are also the same + and equal to the width of the + box metrics of the radical glyph. +

+

+ The alphabetic baseline of the msqrt base is aligned with the alphabetic baseline. + The block size of the overbar is + RadicalRuleThickness. Its vertical center is shifted away + from the alphabetic baseline by a distance towards the line-over + equal to the line-ascent of the math content, minus + the RadicalExtraAscender, + minus half the RadicalRuleThickness. +

+

+ Finally, the painting of the surd is performed: +

+ +
+
3.3.3.3 Root with index
+ +

+ The <mroot> element is laid out as shown on + Figure 15. + The mroot index is first ignored and the mroot base + and + radical glyph are laid out as + shown on figure Figure 14 + using the same algorithm as in + 3.3.3.2 Square root + in order to produce a margin box B (represented in green). +

+
+ +
Figure 15 Box model for the <mroot> element
+
+

+ The min-content inline size + (respectively max-content inline size) of the math content is the sum + of max(0, RadicalKernBeforeDegree), + the mroot index's + min-content inline size + (respectively max-content inline size) + of the mroot index's margin box, + max(−min-content inline size, RadicalKernAfterDegree) + (respectively max(−max-content inline size + of the mroot index's margin box, + RadicalKernAfterDegree)) + and of the + min-content inline size + (respectively max-content inline size) of B. +

+

Using the same clamping, + AdjustedRadicalKernBeforeDegree and + AdjustedRadicalKernAfterDegree are respectively + defined as max(0, RadicalKernBeforeDegree) and + is max(−inline size of the index's margin box, + RadicalKernAfterDegree).

+

+ The inline size of the math content is the sum of + AdjustedRadicalKernBeforeDegree, + the inline size of the index's margin box, + AdjustedRadicalKernAfterDegree + and of the inline size of B. +

+

+ The line-ascent of the math content is the maximum between: +

+ +

The line-descent of the math content is the maximum between:

+ +

+ The inline offset of the index is + AdjustedRadicalKernBeforeDegree. + The inline-offset of the + mroot base is the same + the + inline size of the index's margin box. +

+

+ The alphabetic baseline of B is aligned with the alphabetic baseline. + The alphabetic baseline of the index is shifted away + from the line-under edge by a distance of + RadicalDegreeBottomRaisePercent × + the block size of B + the line-descent of the + index's margin box. +

+
Note
+ In general, the kerning before the root index is positive while + the kerning after it is negative, which means that the root + element will have some inline-start space and that the root index + will overlap the surd. +
+
+
+

3.3.4 Style Change <mstyle>

+ +

+ Historically, the + mstyle + element was introduced to make + style changes that affect the rendering of its contents. +

+

+ The <mstyle> element accepts the attributes described in + 2.1.3 Global Attributes. Its layout algorithm is the + same as the mrow element. +

+
Note
+ <mstyle> is implemented for compatibility with full MathML. Authors whose only target is MathML Core are encouraged to use CSS for styling. +
+
+

In the following example, + mstyle is used to set the scriptlevel + and displaystyle. + Observe this is respectively affecting the + font-size and placement of subscripts of their + descendants. In MathML Core, one could just have used + mrow elements instead. +

+
<math>
+  <munder>
+    <mo movablelimits="true">*</mo>
+    <mi>A</mi>
+  </munder>
+  <mstyle scriptlevel="1">
+    <mstyle displaystyle="true">
+      <munder>
+        <mo movablelimits="true">*</mo>
+        <mi>B</mi>
+      </munder>
+      <munder>
+        <mo movablelimits="true">*</mo>
+        <mi>C</mi>
+      </munder>
+    </mstyle>
+    <munder>
+      <mo movablelimits="true">*</mo>
+      <mi>D</mi>
+    </munder>
+  </mstyle>
+</math>
+ mstyle example +
+
+

3.3.5 Error Message <merror>

+ +

+ The + merror + element displays its contents as an + ”error message”. The intent of this element is to provide a standard way + for programs that generate MathML from other input to report syntax errors + in their input. +

+
+

In the following example, + merror is used to indicate a parsing error + for some LaTeX-like input: +

+
<math>
+  <mfrac>
+    <merror>
+      <mtext>Syntax error: \frac{1}</mtext>
+    </merror>
+    <mn>3</mn>
+  </mfrac>
+</math>
+ merror example +
+

+ The <merror> element accepts the attributes described in + 2.1.3 Global Attributes. Its layout algorithm is the + same as the mrow element. + The user agent stylesheet + must contain the following rule in order to visually highlight the error + message: +

+
merror {
+  border: 1px solid red;
+  background-color: lightYellow;
+}
+
+

3.3.6 Adjust Space Around Content <mpadded>

+ +

+ The + mpadded + element renders the same as its in-flow child content, but with the + size and relative positioning point of its + content modified according to <mpadded>’s attributes. +

+

+ The <mpadded> element accepts the attributes described + in 2.1.3 Global Attributes as well as the following + attributes: +

+ +

The + width, + height, + depth, + lspace + and + voffset + if present, must + have a value that is a valid <length-percentage>. +

+
+

In the following example, mpadded is used to + tweak spacing around a fraction + (a blue background is used to visualize it). + Without attributes, it behaves like an mrow but + the attributes allow to specify the size of the box + (width, height, depth) and position of the fraction within that + box (lspace and voffset). +

+
<math>
+  <mrow>
+    <mn>1</mn>
+    <mpadded style="background: lightblue;">
+      <mfrac>
+        <mn>23456</mn>
+        <mn>78</mn>
+      </mfrac>
+    </mpadded>
+    <mn>9</mn>
+  </mrow>
+  <mo>+</mo>
+  <mrow>
+    <mn>1</mn>
+    <mpadded lspace="2em" voffset="-1em" height="1em" depth="3em" width="7em"
+             style="background: lightblue;">
+      <mfrac>
+        <mn>23456</mn>
+        <mn>78</mn>
+      </mfrac>
+    </mpadded>
+    <mn>9</mn>
+  </mrow>
+</math>
+ mpadded example +
+ +
3.3.6.1 Inner box and requested parameters
+ +

+ The mpadded element + generates an anonymous <mrow> box called the + mpadded inner box with parameters called + inner inline size, inner line-ascent and inner line-descent. +

+

+ The requested <mpadded> + parameters are determined as follows: +

+
    +
  • + The requested width + is the resolved value of the + width property. + If the width + attribute is present, valid and not a percentage then + that attribute is used as a + presentational hint + setting the element's + width + property to the corresponding value. +
  • +
  • + If the height + attribute is absent, invalid or a percentage then the requested + height is the inner line-ascent. + Otherwise the requested height is the resolved + value of the height attribute, clamping + negative values to 0. +
  • +
  • + If the depth + attribute is absent, invalid or a percentage then the requested + depth is the inner line-ascent. + Otherwise the requested depth is the resolved + value of the depth attribute, clamping + negative values to 0. +
  • +
  • + If the lspace + attribute is absent, invalid or a percentage then the requested + lspace is 0. Otherwise the requested lspace is the resolved + value of the lspace attribute, clamping + negative values to 0. +
  • +
  • + If the voffset + attribute is absent, invalid or a percentage then the requested + voffset is 0. Otherwise the requested voffset is the resolved + value of the voffset attribute. +
    Note
    + Negative voffset values are not clamped to + 0. +
    +
  • +
+
+
3.3.6.2 Layout of <mpadded>
+ +

+ If the <mpadded> element does not have its + computed + display property equal to block math + or inline math + then it is laid out according to the CSS specification where + the corresponding value is described. + Otherwise, it is laid out as shown on + Figure 16. +

+
+ +
Figure 16 Box model for the <mpadded> element
+
+

+ The min-content inline size (respectively max-content inline size) + of the math content + is the requested width calculated in + 3.3.6.1 Inner box and requested parameters + but using the min-content inline size (respectively max-content inline size) of the + mpadded inner box instead of the "inner inline size". +

+

+ The inline size of the math content + is the requested width calculated in + 3.3.6.1 Inner box and requested parameters. +

+

+ The line-ascent of the math content is the requested height. + The line-descent of the math content is the requested depth. +

+

+ The mpadded inner box is placed so that its alphabetic baseline is + shifted away from the alphabetic baseline by the requested voffset + towards the line-over. +

+
+
+

3.3.7 Making Sub-Expressions Invisible <mphantom>

+ +

+ Historically, the + mphantom + element was introduced to render + its content invisibly, but with the same metrics size and other dimensions, + including alphabetic baseline position that its contents would have if they were + rendered normally. +

+
+

In the following example, + mphantom is used to ensure alignment of + corresponding parts of the numerator and denominator of a + fraction: +

+
<math>
+  <mfrac>
+    <mrow>
+      <mi>x</mi>
+      <mo>+</mo>
+      <mi>y</mi>
+      <mo>+</mo>
+      <mi>z</mi>
+    </mrow>
+    <mrow>
+      <mi>x</mi>
+      <mphantom>
+        <mo form="infix">+</mo>
+        <mi>y</mi>
+      </mphantom>
+      <mo>+</mo>
+      <mi>z</mi>
+    </mrow>
+  </mfrac>
+</math>
+ mphantom example +
+

+ The <mphantom> element accepts the attributes described + in 2.1.3 Global Attributes. Its layout algorithm is + the same as the mrow element. + The user agent stylesheet + must contain the following rule in order to hide the content: +

+
mphantom {
+  visibility: hidden;
+}
+
Note
+ <mphantom> is implemented for compatibility with full MathML. Authors whose only target is MathML Core are encouraged to use CSS for styling. +
+
+
+

3.4 Script and Limit Schemata

+ +

+ The elements described in this section position one or more scripts + around a base. Attaching various kinds of scripts and embellishments + to symbols is a very common notational device in mathematics. For + purely visual layout, a single general-purpose element could suffice + for positioning scripts and embellishments in any of the traditional + script locations around a given base. However, in order to capture + the abstract structure of common notation better, MathML provides + several more specialized scripting elements. +

+

+ In addition to sub-/superscript elements, MathML has overscript and + underscript elements that place scripts above and below the base. + These elements can be used to place limits on large operators, or for + placing accents and lines above or below the base. +

+

3.4.1 Subscripts and Superscripts <msub>, <msup>, <msubsup>

+ +

+ The msub, + msup and + msubsup elements are used to attach + subscript and superscript to a MathML expression. + They accept the attributes described in + 2.1.3 Global Attributes. +

+
+

The following example shows basic use of subscripts and + superscripts. The font-size is automatically scaled down + within the scripts. +

+
<math>
+  <msub>
+    <mn>1</mn>
+    <mn>2</mn>
+  </msub>
+  <mo>+</mo>
+  <msup>
+    <mn>3</mn>
+    <mn>4</mn>
+  </msup>
+  <mo>+</mo>
+  <msubsup>
+    <mn>5</mn>
+    <mn>6</mn>
+    <mn>7</mn>
+  </msubsup>
+</math>
+ msub-msup-msubsup example +
+

+ If the + <msub>, + <msup> or + <msubsup> elements do not have their + computed + display property equal to block math + or inline math + then they are laid out according to the CSS specification where + the corresponding value is described. + Otherwise, the layout below is performed. +

+
3.4.1.1 Children of <msub>, + <msup>, <msubsup>
+ +

+ If the <msub> element + has less or more than two in-flow children, its layout algorithm + is the same as the mrow element. + Otherwise, the first in-flow child is called the + msub base, the second in-flow child is called the + msub subscript and the layout algorithm is explained + in 3.4.1.2 Base with subscript. +

+

+ If the <msup> element + has less or more than two in-flow children, its layout algorithm + is the same as the mrow element. + Otherwise, the first in-flow child is called the + msup base, the second in-flow child is called the + msup superscript and the layout algorithm is explained + in 3.4.1.3 Base with superscript. +

+

+ If the <msubsup> element + has less or more than three in-flow children, its layout algorithm + is the same as the mrow element. + Otherwise, the first in-flow child is called the + msubsup base, the second in-flow child + is called the msubsup subscript, + its third in-flow child is called + the msubsup superscript and the layout algorithm is explained + in 3.4.1.4 Base with subscript and superscript. +

+
+
3.4.1.2 Base with subscript
+ +

+ The <msub> element is laid out as shown on + Figure 17. + LargeOpItalicCorrection + is the italic correction of the msub base + if it is an embellished operator with + the largeop property and 0 otherwise. +

+
+ +
Figure 17 Box model for the <msub> element
+
+

+ The + min-content inline size (respectively max-content inline size) of the math content is the + min-content inline size (respectively max-content inline size) of the msub base's margin box − + LargeOpItalicCorrection + + min-content inline size (respectively max-content inline size) of + the msub subscript's margin box + SpaceAfterScript. +

+

+ If there is an + inline stretch size constraint + or a block stretch size constraint + then the msub base is also laid out with the same stretch size + constraint and otherwise it is laid out without any stretch + size constraint. The scripts are always laid out without + any stretch size constraint. +

+

+ The inline size of the math content + is the inline size of the msub base's margin box − + LargeOpItalicCorrection + + the inline size of + the msub subscript's margin box + SpaceAfterScript. +

+

+ SubShift is the maximum between: +

+ +

+ The line-ascent of the math content is the maximum between: +

+ +

+ The line-descent of the math content is the maximum between: +

+ +

+ The inline offset of the msub base is 0 and the inline offset of the + msub subscript is the inline size of the msub base's margin box − + LargeOpItalicCorrection. +

+

+ The msub base is placed so that its alphabetic baseline + matches the alphabetic baseline. The msub subscript is placed so that its alphabetic baseline + is shifted away from the alphabetic baseline by SubShift + towards the line-under. +

+
+
3.4.1.3 Base with superscript
+ +

+ The <msup> element is laid out as shown on + Figure 18. + ItalicCorrection + is the italic correction of the msup base + if it is not an embellished operator with + the largeop property and 0 otherwise. +

+
+ +
Figure 18 Box model for the <msup> element
+
+

+ The + min-content inline size (respectively max-content inline size) + of the math content + is the + min-content inline size (respectively max-content inline size) of + the msup base's margin box + + ItalicCorrection + + the min-content inline size (respectively max-content inline size) of + the msup superscript's margin box + SpaceAfterScript. +

+

+ If there is an + inline stretch size constraint + or a block stretch size constraint + then the msup base is also laid out with the same stretch size + constraint and otherwise it is laid out without any stretch + size constraint. The scripts are always laid out without + any stretch size constraint. +

+

+ The inline size of the math content + is the inline size of the msup base's margin box + + ItalicCorrection + + the inline size of + the msup superscript's margin box + SpaceAfterScript. +

+

+ SuperShift is the maximum between: +

+ +

+ The line-ascent of the math content is the maximum between: +

+ +

+ The line-descent of the math content is the maximum between: +

+ +

+ The inline offset of the msup base is 0 and the inline offset of + msup superscript is the inline size of the msup base's margin box + + ItalicCorrection. +

+

+ The msup base is placed so that its alphabetic baseline + matches the alphabetic baseline. The msup superscript is placed so that its + alphabetic baseline + is shifted away from the alphabetic baseline by SuperShift + towards the line-over. +

+
+
3.4.1.4 Base with subscript and superscript
+ +

+ The <msubsup> element is laid out as shown on + Figure 18. + LargeOpItalicCorrection and SubShift + are set as in 3.4.1.2 Base with subscript. + ItalicCorrection and SuperShift + are set as in 3.4.1.3 Base with superscript. +

+
+ +
Figure 19 Box model for the <msubsup> element
+
+

+ The + min-content inline size (respectively max-content inline size and + inline size) of the math content is the maximum between the + min-content inline size (respectively max-content inline size and + inline size) of the math content calculated in + 3.4.1.2 Base with subscript and + 3.4.1.3 Base with superscript. +

+

+ If there is an + inline stretch size constraint + or a block stretch size constraint + then the msubsup base is also laid out with the same stretch size + constraint and otherwise it is laid out without any stretch + size constraint. The scripts are always laid out without + any stretch size constraint. +

+

+ If there is an + inline stretch size constraint + or a block stretch size constraint + then the msubsup base is also laid out with the same stretch size + constraint and otherwise it is laid out without any stretch + size constraint. The scripts are always laid out without + any stretch size constraint. +

+

+ SubSuperGap is the gap between the two scripts + along the block axis and is defined by + (SubShift − the ink line-ascent of the msubsup subscript's + margin box) + + (SuperShift − the ink line-descent of the + msubsup superscript's margin box). + If SubSuperGap is not at least + SubSuperscriptGapMin then the following steps are + performed to ensure that the condition holds: +

+
    +
  1. + Let Δ be SuperscriptBottomMaxWithSubscript + − (SuperShift − the ink line-descent of the + msubsup superscript's margin box). + If Δ > 0 then set Δ to the minimum between Δ set + SubSuperscriptGapMinSubSuperGap and + increase SuperShift (and so + SubSuperGap too) by Δ. +
  2. +
  3. + Let Δ be SubSuperscriptGapMinSubSuperGap. + If Δ > 0 then + increase SubscriptShift (and so + SubSuperGap too) by Δ. +
  4. +
+

+ The ink line-ascent (respectively line-ascent, ink line-descent, + line-descent) of the math content + is set to the maximum + of the + ink line-ascent (respectively line-ascent, ink line-descent, + line-descent) of the math content + calculated in + 3.4.1.2 Base with subscript and + 3.4.1.3 Base with superscript + but using the adjusted values SubShift and + SuperShift above. +

+

+ The inline offset and block offset of the msubsup base and scripts are + performed the + same as described in + 3.4.1.2 Base with subscript and + 3.4.1.3 Base with superscript. +

+
Note
+

+ Even when the msubsup subscript (respectively msubsup superscript) is an empty + box, <msubsup> + does not generally render the same as + 3.4.1.3 Base with superscript + (respectively 3.4.1.2 Base with subscript) + because of the additional constraint on + SubSuperGap. + Moreover, positioning the empty msubsup subscript + (respectively msubsup superscript) + may also change the total size. +

+

+ In order to keep the algorithm simple, no attempt is made to + handle empty scripts in a special way. +

+
+
+
+

3.4.2 Underscripts and Overscripts <munder>, <mover>, <munderover>

+ +

+ The munder, + mover and + munderover elements are used to + attach + accents or limits placed under or over a MathML expression. +

+

+ The <munderover> element accepts the attribute + described in 2.1.3 Global Attributes as well as the + following attributes: +

+ +

+ Similarly, the <mover> element + (respectively <munder> element) accepts the + attribute described in 2.1.3 Global Attributes + as well as the accent + attribute (respectively the + accentunder attribute). +

+

+ accent, + accentunder + attributes, if present, must have values that are booleans. + If these attributes are absent or invalid, they are treated as + equal to false. + User agents must implement them as described in + 3.4.4 Displaystyle, scriptlevel and math-shift in scripts. +

+
+

The following example shows basic use of under- and overscripts. + The font-size is automatically scaled down within the scripts, + unless they are meant to be accents. +

+
<math>
+  <munder>
+    <mn>1</mn>
+    <mn>2</mn>
+  </munder>
+  <mo>+</mo>
+  <mover>
+    <mn>3</mn>
+    <mn>4</mn>
+  </mover>
+  <mo>+</mo>
+  <munderover>
+    <mn>5</mn>
+    <mn>6</mn>
+    <mn>7</mn>
+  </munderover>
+  <mo>+</mo>
+  <munderover accent="true">
+    <mn>8</mn>
+    <mn>9</mn>
+    <mn>10</mn>
+  </munderover>
+  <mo>+</mo>
+  <munderover accentunder="true">
+    <mn>11</mn>
+    <mn>12</mn>
+    <mn>13</mn>
+  </munderover>
+</math>
+ munder-over-munderover example +
+

+ If the + <munder>, + <mover> or + <munderover> elements do not have their + computed + display property equal to block math + or inline math + then they are laid out according to the CSS specification where + the corresponding value is described. + Otherwise, the layout below is performed. +

+
3.4.2.1 Children of <munder>, + <mover>, <munderover>
+ +

+ If the <munder> element + has less or more than two in-flow children, its layout algorithm + is the same as the mrow element. + Otherwise, the first in-flow child is called the + munder base and the second in-flow child is called the + munder underscript. +

+

+ If the <mover> element + has less or more than two in-flow children, its layout algorithm + is the same as the mrow element. + Otherwise, the first in-flow child is called the + mover base and the second in-flow child is called the + mover overscript. +

+

+ If the <munderover> element + has less or more than three in-flow children, its layout algorithm + is the same as the mrow element. + Otherwise, the first in-flow child is called the + munderover base, the second in-flow child + is called the munderover underscript + and its third in-flow child is called + the munderover overscript. +

+

+ If the + <munder>, <mover> or + <munderover> elements have a computed + math-style property equal to compact + and their base is an embellished operator with the + movablelimits property, then + their layout algorithms are respectively + the same as the ones described for + <msub>, <msup> and + <msubsup> in + 3.4.1.2 Base with subscript, + 3.4.1.3 Base with superscript and + 3.4.1.4 Base with subscript and superscript. +

+

+ Otherwise, the + <munder>, <mover> and + <munderover> layout algorithms are respectively + described in + 3.4.2.3 Base with underscript, + 3.4.2.4 Base with overscript and + 3.4.2.5 Base with underscript and overscript. +

+
+
3.4.2.2 Algorithm for stretching operators along the inline axis
+ +

+ The algorithm for stretching operators along the inline + axis + is as follows. +

+
    +
  1. + If there is an + inline stretch size constraint or + block stretch size constraint + then the element being laid out is an + embellished operator. Lay out the base + with the same stretch size constraint. +
  2. +
  3. + Split the list of in-flow children that have not been + laid out yet into a first list + LToStretch containing + embellished operators with + a stretchy property and inline stretch axis; + and a second list LNotToStretch. +
  4. +
  5. + Perform layout without any stretch size constraint on + all the items of LNotToStretch. + If LToStretch is empty then stop. + If LNotToStretch is empty, perform + layout with inline stretch size constraint 0 for + all the items of LToStretch. +
  6. +
  7. + Calculate the target size T to + the maximum inline size of the + margin boxes of child boxes that have been laid out in the + previous step. +
  8. +
  9. + Lay out or relayout all the elements of + LToStretch + with inline stretch size constraint T. +
  10. +
+
+
3.4.2.3 Base with underscript
+ +

+ The <munder> element is laid out as shown on + Figure 20. + LargeOpItalicCorrection + is the italic correction of the munder base + if it is an embellished operator with + the largeop property and 0 otherwise. +

+
+ +
Figure 20 Box model for the <munder> element
+
+

+ The min-content inline size (respectively max-content inline size) + of the math content are + calculated like the inline size of the math content below + but replacing the + inline sizes of the munder base's margin box and munder underscript's margin box + with the + min-content inline size (respectively max-content inline size) + of the munder base's margin box and munder underscript's margin box. +

+

+ The in-flow children are laid out + using the algorithm for stretching operators along the inline axis. +

+

+ The inline size of the math content is + calculated by determining the absolute difference between: +

+ +

+ If m is the minimum calculated in the second item above then the + inline offset + of the munder base is −m − half the inline size of the base's margin box. + The inline offset of the munder underscript is + −m − half the inline size of the munder underscript's margin box − + half LargeOpItalicCorrection. +

+

+ Parameters + UnderShift and UnderExtraDescender + are determined by considering three cases in the following order: +

+
    +
  1. +

    + The munder base is an + embellished operator with the + largeop property. + UnderShift is the maximum of +

    + +

    + UnderExtraDescender is 0. +

    +
  2. +
  3. +

    + The munder base is an + embellished operator with the + stretchy property + and stretch axis inline. + UnderShift is the maximum of: +

    + + UnderExtraDescender is 0. +
  4. +
  5. + Otherwise, + UnderShift is equal to UnderbarVerticalGap + if the accentunder attribute is not an + ASCII case-insensitive match to true + and to zero otherwise. + UnderExtraAscender is + UnderbarExtraDescender. +
  6. +
+

+ The line-ascent of the math content is the maximum between: +

+ +

+ The line-descent of the math content is the maximum between: +

+ +

+ The alphabetic baseline of the munder base is aligned with the alphabetic baseline. + The alphabetic baseline of the munder underscript is shifted away from the alphabetic baseline + and towards the line-under by a distance equal to + the ink line-descent of the munder base's margin box + + UnderShift. +

+

+ The math content box is placed within the + content box so that their block-start edges + are aligned and the middles of these edges are at the same + position. +

+
+
3.4.2.4 Base with overscript
+ +

+ The <mover> element is laid out as shown on + Figure 21. + LargeOpItalicCorrection + is the italic correction of the mover base + if it is an embellished operator with + the largeop property and 0 otherwise. +

+
+ +
Figure 21 Box model for the <mover> element
+
+

+ The min-content inline size (respectively max-content inline size) + of the math content are + calculated like the inline size of the math content + below but replacing the + inline sizes of the mover base's margin box and mover overscript's margin box with + the min-content inline size (respectively max-content inline size) of the mover base's margin box and mover overscript's margin box. +

+

+ The in-flow children are laid out + using the algorithm for stretching operators along the inline axis. +

+

+ The TopAccentAttachment is the + top accent attachment of the mover overscript or + half the inline size of the mover overscript's margin box + if it is undefined. +

+

+ The inline size of the math content is + calculated by + applying the algorithm for stretching operators along the inline axis for + layout and determining the absolute difference between: +

+ +

+ If m is the minimum calculated in the second item above then the + inline offset + of the mover base is −m − half the inline size of the base's margin. + The inline offset of the mover overscript is + −m − half the inline size of the mover overscript's margin box + + half LargeOpItalicCorrection. +

+

+ Parameters + OverShift and OverExtraDescender + are determined by considering three cases in the following order: +

+
    +
  1. +

    + The mover base is an + embellished operator with the + largeop property. + OverShift is the maximum of +

    + +

    + OverExtraAscender is 0. +

    +
  2. +
  3. +

    + The mover base is an + embellished operator with the + stretchy property and + stretch axis inline. + OverShift is the maximum of: +

    + + OverExtraDescender is 0. +
  4. +
  5. +

    + Otherwise, OverShift is equal to

    +
      +
    1. OverbarVerticalGap if the + accent attribute is not an + ASCII case-insensitive match to true.
    2. +
    3. Or AccentBaseHeight minus the line-ascent + of the mover base's margin box + if this difference is nonnegative.
    4. +
    5. Or 0 otherwise.
    6. +
    +

    + OverExtraAscender is OverbarExtraAscender. +

    +
  6. +
+
Note
+ For accent overscripts and bases with line-ascents that are at + most + AccentBaseHeight, the rule from + [OPEN-FONT-FORMAT] [TEXBOOK] is actually to align the + alphabetic baselines of the overscripts and of the bases. This assumes that + accent glyphs are designed in such a way that their ink bottoms + are + more or less AccentBaseHeight above their alphabetic baselines. Hence, + the previous rule will guarantee that all the overscript bottoms + are aligned while still avoiding collision with the bases. + However, MathML can have arbitrary accent overscripts, so + a more general and simpler rule is provided above: Ensure + that the bottom of overscript is at least + AccentBaseHeight above the alphabetic baseline of the base. +
+

+ The line-ascent of the math content is the maximum between: +

+ +

+ The line-descent of the math content is the maximum between: +

+ +

+ The alphabetic baseline of the mover base is aligned with the alphabetic baseline. + The alphabetic baseline of the mover overscript is shifted away from the alphabetic baseline + and towards the line-over by a distance equal to + the ink line-ascent of the base + OverShift. +

+

+ The math content box is placed within the + content box so that their block-start edges + are aligned and the middles of these edges are at the same + position. +

+
+
3.4.2.5 Base with underscript and overscript
+ +

+ The general layout of <munderover> is shown on + Figure 22. The + LargeOpItalicCorrection, + UnderShift, + UnderExtraDescender, + OverShift, + OverExtraDescender parameters + are calculated the same as in + 3.4.2.3 Base with underscript and + 3.4.2.4 Base with overscript. +

+
+ +
Figure 22 Box model for the <munderover> element
+
+

+ The min-content inline size, max-content inline size + and inline size of the math content + are calculated as an absolute difference + between a maximum inline offset and minimum inline offset. + These extrema are calculated by taking the extremum value + of the corresponding extrema calculated in + 3.4.2.3 Base with underscript and + 3.4.2.4 Base with overscript. + The inline offsets of the munderover base, + munderover underscript and + munderover overscript + are calculated as in these sections but using + the new minimum m (minimum of the corresponding minima). +

+

+ Like in these sections, the in-flow children are laid out + using the algorithm for stretching operators along the inline axis. +

+

+ The line-ascent and line-descent of the math content + are also calculated by taking the extremum value + of the extrema calculated in + 3.4.2.3 Base with underscript and + 3.4.2.4 Base with overscript. +

+

+ Finally, the alphabetic baselines of the + munderover base, + munderover underscript and + munderover overscript + are calculated as in sections + 3.4.2.3 Base with underscript and + 3.4.2.4 Base with overscript. +

+

+ The math content box is placed within the + content box so that their block-start edges + are aligned and the middles of these edges are at the same + position. +

+
Note
+

+ When the underscript (respectively overscript) is an empty + box, the base and overscript (respectively underscript) are laid + out similarly to + 3.4.2.4 Base with overscript + (respectively 3.4.2.3 Base with underscript) + but the position of the empty underscript (respectively + overscript) may add extra space. + In order to keep the algorithm simple, no attempt is made to + handle empty scripts in a special way. +

+
+
+
+

3.4.3 Prescripts and Tensor Indices <mmultiscripts>

+ +

+ Presubscripts and tensor notations are represented by + the mmultiscripts element. + The mprescripts element is + used as a separator between the postscripts and prescripts. + These two elements accept the attributes described in + 2.1.3 Global Attributes. +

+
+

+ The following example shows basic use of prescripts + and postscripts, involving a mprescripts. + Empty mrow elements are used at positions where + no scripts are rendered. + The font-size is automatically scaled down within the scripts. +

+
<math>
+  <mmultiscripts>
+    <mn>1</mn>
+    <mn>2</mn>
+    <mn>3</mn>
+    <mrow></mrow>
+    <mn>5</mn>
+    <mprescripts/>
+    <mn>6</mn>
+    <mrow></mrow>
+    <mn>8</mn>
+    <mn>9</mn>
+  </mmultiscripts>
+</math>
+ mmultiscripts example +
+

+ If the + <mmultiscripts> or + <mprescripts> + elements do not have their + computed + display property equal to block math + or inline math + then they are laid out according to the CSS specification where + the corresponding value is described. + Otherwise, the layout below is performed. +

+

+ The + <mprescripts> + element is laid out as an mrow + element. +

+

+ A valid <mmultiscripts> element contains the + following in-flow children: +

+
    +
  • + A first in-flow child, called the + mmultiscripts base, that is not an + mprescripts element. +
  • +
  • + Followed by an even number of in-flow children called + mmultiscripts postscripts, none of them being a + mprescripts element. + These scripts form a (possibly empty) list + subscript, superscript, subscript, superscript, + subscript, superscript, etc. + Each consecutive couple of children subscript, superscript + is called a + subscript/superscript pair. +
  • +
  • Optionally followed by + an mprescripts element and + an even number of in-flow children called + mmultiscripts prescripts, none of them being a + mprescripts element. + These scripts form a (possibly empty) list of + subscript/superscript pair. +
  • +
+

+ If an <mmultiscripts> element is not valid then + it is laid out the same as the + mrow element. + Otherwise the layout algorithm is performed as in + 3.4.3.1 Base with prescripts and postscripts. +

+
3.4.3.1 Base with prescripts and postscripts
+ +

+ The <mmultiscripts> element is laid out as + shown on Figure 23. + For each subscript/superscript pair of + mmultiscripts postscripts, + the ItalicCorrection + LargeOpItalicCorrection are defined as + in 3.4.1.2 Base with subscript + and 3.4.1.3 Base with superscript. +

+
+ +
Figure 23 Box model for the <mmultiscripts> element
+
+

+ The + min-content inline size (respectively max-content inline size) + of the math content is + calculated the same as the inline size of the math content + below, but replacing + "inline size" with "min-content inline size" + (respectively "max-content inline size") for the + mmultiscripts base's + margin box and scripts' margin boxes. +

+

+ If there is an inline stretch size constraint or a + block stretch size constraint + the mmultiscripts base + is also laid out with the same stretch size constraint. + Otherwise it is laid out without any stretch + size constraint. The other elements are always laid out without + any stretch size constraint. +

+

+ The inline size of the math content + is calculated with the following algorithm: +

+
    +
  1. Set inline-offset to 0.
  2. +
  3. +

    + For each subscript/superscript pair of + mmultiscripts prescripts, increment + inline-offset by SpaceAfterScript + the + maximum of +

    + +
  4. +
  5. + Increment inline-offset by the inline size of the + mmultiscripts base's margin box and + set inline-size to inline-offset. +
  6. +
  7. +

    + For each subscript/superscript pair of + mmultiscripts postscripts, modify + inline-size to be at least: +

    + +

    Increment inline-offset to the maximum of:

    + +

    + Increment inline-offset by + SpaceAfterScript. +

    +
  8. +
  9. Return inline-size.
  10. +
+

+ SubShift (respectively SuperShift) + is calculated by taking the maximum of all subshifts + (respectively supershifts) of each + subscript/superscript pair as described in + 3.4.1.4 Base with subscript and superscript. +

+

+ The line-ascent of the math content is calculated + by taking the maximum of all the line-ascent + of each subscript/superscript pair as described in + 3.4.1.4 Base with subscript and superscript + but using the SubShift and + SuperShift values calculated above. +

+

+ The line-descent of the math content is calculated + by taking the maximum of all the line-descent + of each subscript/superscript pair as described in + 3.4.1.4 Base with subscript and superscript + but using the SubShift and + SuperShift values calculated above. +

+

+ Finally, the placement of the in-flow children is performed using + the + following algorithm: +

+
    +
  1. Set inline-offset to 0.
  2. +
  3. +

    For each subscript/superscript pair of + mmultiscripts prescripts:

    +
      +
    1. + Increment inline-offset by + SpaceAfterScript. +
    2. +
    3. + Set pair-inline-size to the maximum of + +
    4. +
    5. + Place the subscript at inline-start position + inline-offset + pair-inline-size + − the inline size of the subscript's margin box. +
    6. +
    7. + Place the superscript at inline-start position + inline-offset + pair-inline-size + − the inline size of the superscript's margin box. +
    8. +
    9. + Place the subscript (respectively superscript) so its + alphabetic baseline is + shifted away from the alphabetic baseline by + SubShift (respectively SuperShift) + towards the line-under (respectively line-over). +
    10. +
    11. + Increment inline-offset by + pair-inline-size. +
    12. +
    +
  4. +
  5. + Place the mmultiscripts base + and <mprescripts> boxes + at inline offsets + inline-offset and with their alphabetic baselines + aligned with the alphabetic baseline. +
  6. +
  7. +

    + For each subscript/superscript pair of + mmultiscripts postscripts: +

    +
      +
    1. + Set pair-inline-size to the maximum of + +
    2. +
    3. + Place the subscript + at inline-start position inline-offset + − LargeOpItalicCorrection. +
    4. +
    5. + Place the superscript + at inline-start position inline-offset + + ItalicCorrection. +
    6. +
    7. + Place the subscript (superscript) so its alphabetic baseline is + shifted away from the alphabetic baseline by + SubShift (respectively SuperShift) + towards the line-under (respectively line-over). +
    8. +
    9. + Increment inline-offset by + pair-inline-size. +
    10. +
    11. + Increment inline-offset by + SpaceAfterScript. +
    12. +
    +
  8. +
+
Note
+

+ An <mmultiscripts> with only one + subscript/superscript pair of + mmultiscripts postscripts is laid out the same as a + <msubsup> with the same in-flow children. + However, as + noticed for + <msubsup>, + if additionally the subscript (respectively superscript) is an + empty box then it is not necessarily laid out the same as an + <msub> + (respectively <msup>) element. + In order to keep the algorithm simple, no attempt is made to + handle empty scripts in a special + way. +

+
+
+
+

3.4.4 Displaystyle, scriptlevel and math-shift in scripts

+ +

+ For all scripted elements, the rule of thumb is to set + displaystyle to false and + to increment scriptlevel in all child + elements but the first one. + However, an mover (respectively + munderover) + element with an accent + attribute that is an + ASCII case-insensitive + match to true does not increment scriptlevel within + its second child (respectively third child). Similarly, + mover and + munderover elements + with an accentunder + attribute that is an + ASCII case-insensitive + match to true do not increment scriptlevel within + their second child. +

+

<mmultiscripts> sets + math-shift to + compact on its children at even position if they are + before an mprescripts, and on those at odd position + if they are after + an mprescripts. + The <msub> and <msubsup> + elements set math-shift to + compact on their second child. + mover and + munderover + elements with an accent + attribute that is an + ASCII case-insensitive + match to true also set math-shift to + compact within their first child. +

+

+ The + A. User Agent Stylesheet must contain the following + style in order to implement this behavior: +

+
msub > :not(:first-child),
+msup > :not(:first-child),
+msubsup > :not(:first-child),
+mmultiscripts > :not(:first-child),
+munder > :not(:first-child),
+mover > :not(:first-child),
+munderover > :not(:first-child) {
+  math-depth: add(1);
+  math-style: compact;
+}
+munder[accentunder="true" i] > :nth-child(2),
+mover[accent="true" i] > :nth-child(2),
+munderover[accentunder="true" i] > :nth-child(2),
+munderover[accent="true" i] > :nth-child(3) {
+  font-size: inherit;
+}
+msub > :nth-child(2),
+msubsup > :nth-child(2),
+mmultiscripts > :nth-child(even),
+mmultiscripts > mprescripts ~ :nth-child(odd),
+mover[accent="true" i] > :first-child,
+munderover[accent="true" i] > :first-child {
+  math-shift: compact;
+}
+mmultiscripts > mprescripts ~ :nth-child(even) {
+  math-shift: inherit;
+}
+
Note
+ In practice, all the children of the MathML elements described in + this section are in-flow and the + <mprescripts> is empty. + Hence the CSS rules essentially perform automatic displaystyle and + scriptlevel changes for the scripts; and + math-shift changes for + subscripts and sometimes the base. +
+
+
+

3.5 Tabular Math

+ +

+ Matrices, arrays and other table-like mathematical notation are marked up + using + mtable + mtr + mtd + elements. These elements are similar to the + table, + tr + and + td + elements of [HTML]. +

+
+

+ The following example shows how tabular layout allows to write a + matrix. Note that it is vertically centered with the fraction + bar and the middle of the equal sign. +

+
<math>
+  <mfrac>
+    <mi>A</mi>
+    <mn>2</mn>
+  </mfrac>
+  <mo>=</mo>
+  <mrow>
+    <mo>(</mo>
+    <mtable>
+      <mtr>
+        <mtd><mn>1</mn></mtd>
+        <mtd><mn>2</mn></mtd>
+        <mtd><mn>3</mn></mtd>
+      </mtr>
+      <mtr>
+        <mtd><mn>4</mn></mtd>
+        <mtd><mn>5</mn></mtd>
+        <mtd><mn>6</mn></mtd>
+      </mtr>
+      <mtr>
+        <mtd><mn>7</mn></mtd>
+        <mtd><mn>8</mn></mtd>
+        <mtd><mn>9</mn></mtd>
+      </mtr>
+    </mtable>
+    <mo>)</mo>
+  </mrow>
+</math>
+ tables example +
+

3.5.1 Table or Matrix <mtable>

+ +

The mtable is laid out as an + inline-table and sets + displaystyle to false. The + user agent stylesheet must contain + the following rules in order to implement these properties: +

+
mtable {
+  display: inline-table;
+  math-style: compact;
+}
+

+ The mtable element is as a CSS + table + and the + min-content inline size, max-content inline size, + inline size, block size, + first baseline set and last baseline set + sets are determined + accordingly. + The center of the table is aligned with the math axis. +

+

+ The <mtable> accepts the attributes described + in 2.1.3 Global Attributes. +

+
+

3.5.2 Row in Table or Matrix <mtr>

+ +

+ The mtr is laid out as + table-row. The + user agent stylesheet must contain + the following rules in order to implement that behavior: +

+
mtr {
+  display: table-row;
+}
+

+ The <mtr> accepts the attributes described + in 2.1.3 Global Attributes. +

+
+

3.5.3 Entry in Table or Matrix <mtd>

+ +

+ The mtd is laid out as + a table-cell with content centered in the cell and + a default padding. The + user agent stylesheet must contain + the following rules: +

+
mtd {
+  display: table-cell;
+  /* Centering inside table cells should rely on box alignment properties.
+     See https://github.com/w3c/mathml-core/issues/156 */
+  text-align: center;
+  padding: 0.5ex 0.4em;
+}
+

+ The <mtd> accepts the attributes described + in 2.1.3 Global Attributes as well as the following attributes: +

+ +

+ The columnspan (respectively + rowspan) attribute has the same + syntax and semantics as the + colspan + (respectively + rowspan) + attribute on the <td> element from [HTML]. + In particular, the parsing of these attributes is handled as + described in the + algorithm for processing rows, always reading "colspan" as + "columnspan". +

+
Note
+ The name of the column spanning attribute in [MathML3] and earlier + versions is columnspan and is preserved for backward + compatibility reasons. +
+

+ The <mtd> element + generates an anonymous <mrow> box. +

+
+
+

3.6 Enlivening Expressions

+ +

+ Historically, the + maction + element provides a mechanism + for binding actions to expressions. +

+

+ The <maction> element accepts the attributes described + in 2.1.3 Global Attributes as well as the following + attributes: +

+ +

+ This specification does not define any observable behavior + that is specific to the actiontype and selection + attributes. +

+
+

+ The following example shows the "toggle" action type from + [MathML3] + where the renderer alternately displays the selected subexpression, + starting from "one third" and cycling through them when there is a + click on the selected subexpression ("one quarter", "one half", + "one third", etc). This is not part of MathML Core but can be + implemented using JavaScript and CSS polyfills. The default behavior + is just to render the first child. +

+
<math>
+  <maction actiontype="toggle" selection="2">
+    <mfrac>
+      <mn>1</mn>
+      <mn>2</mn>
+    </mfrac>
+    <mfrac>
+      <mn>1</mn>
+      <mn>3</mn>
+    </mfrac>
+    <mfrac>
+      <mn>1</mn>
+      <mn>4</mn>
+    </mfrac>
+  </maction>
+</math>
+ maction example +
+

+ The layout algorithm of the <maction> element + is the same as the <mrow> element. + The user agent stylesheet + must contain the following rules in order to hide all but + its first child element, + which is the default behavior for the legacy actiontype + values: +

+
maction > :not(:first-child) {
+  display: none;
+}
+
Note
+ <maction> is implemented for compatibility with full MathML. Authors whose only target is MathML Core are encouraged to use other HTML, CSS and JavaScript mechanisms to implement custom actions. They may + rely on maction attributes defined in [MathML3]. +
+
+

3.7 Semantics and Presentation

+ +

+ The + semantics + element is the container element that associates + annotations with a MathML expression. Typically, the + <semantics> element has as its first child element + a MathML expression to be annotated while subsequent child elements + represent + text annotations within an annotation + element, or more complex markup annotations within + an annotation-xml element. +

+
+

+ The following example shows how the fraction "one half" can be + annotated with a textual annotation (LaTeX) or an XML annotation + (content MathML), which are not intended to be rendered + by the user agent. This fraction is also annotated with equivalent + SVG and HTML markup. +

+
<math>
+  <semantics>
+    <mfrac>
+      <mn>1</mn>
+      <mn>2</mn>
+    </mfrac>
+    <annotation encoding="application/x-tex">\frac{1}{2}</annotation>
+    <annotation-xml encoding="application/mathml-content+xml">
+      <apply>
+        <divide/>
+         <cn>1</cn>
+         <cn>2</cn>
+      </apply>
+    </annotation-xml>
+    <annotation-xml>
+      <svg width="25" height="75" xmlns="http://www.w3.org/2000/svg">
+        <path stroke-width="5.8743"
+              d="m5.9157 27.415h6.601v-22.783l-7.1813 1.4402v-3.6805l7.1408
+                 -1.4402h4.0406v26.464h6.601v3.4005h-17.203z"/>
+        <path stroke="#000000" stroke-width="2.3409"
+              d="m0.83496 39.228h23.327"/>
+        <path stroke-width="5.8743"
+              d="m8.696 70.638h14.102v3.4005h-18.963v-3.4005q2.3004-2.3804
+                 6.2608-6.3813 3.9806-4.0206 5.0007-5.1808 1.9403-2.1803
+                 2.7004-3.6805 0.78011-1.5202 0.78011-2.9804 0-2.3804
+                 -1.6802-3.8806-1.6603-1.5002-4.3406-1.5002-1.9003 0-4.0206
+                 0.6601-2.1003 0.6601-4.5007 2.0003v-4.0806q2.4404-0.98013
+                 4.5607-1.4802 2.1203-0.50007 3.8806-0.50007 4.6407 0 7.401
+                 2.3203 2.7604 2.3203 2.7604 6.2009 0 1.8403-0.7001 3.5006
+                 -0.68013 1.6402-2.5004 3.8806-0.50007 0.58009-3.1805 3.3605
+                 -2.6804 2.7604-7.5614 7.7412z"/>
+      </svg>
+    </annotation-xml>
+    <annotation-xml encoding="application/xhtml+xml">
+      <div style="display: inline-flex;
+                  flex-direction: column; align-items: center;">
+        <div>1</div>
+        <div></div>
+        <div>2</div>
+      </div>
+    </annotation-xml>
+  </semantics>
+</math>
+ semantics example +
+

+ The <semantics> element accepts the attributes + described in 2.1.3 Global Attributes. Its layout algorithm + is the same as the mrow element. + The user agent stylesheet + must contain the following rule in order to only render the annotated + MathML expression: +

+
semantics > :not(:first-child) {
+  display: none;
+}
+

+ The <annotation-xml> and + <annotation> element accepts the attributes + described in 2.1.3 Global Attributes as well as the + following attribute: +

+ +

+ This specification does not define any observable behavior that is + specific to the encoding attribute. +

+

+ The layout algorithm of the <annotation-xml> + and <annotation> + element is the same as the mtext element. +

+
Note
+ Authors can use the encoding attribute to distinguish + annotations + for HTML integration point, + clipboard copy, alternative rendering, etc. + In particular, CSS can be used to render alternative annotations, e.g. +
/* Hide the annotated child. */
+semantics > :first-child { display: none; }
+ /* Show all text annotations. */
+semantics > annotation { display: inline; }
+/* Show all HTML annotations. */
+semantics > annotation-xml[encoding="text/html" i],
+semantics > annotation-xml[encoding="application/xhtml+xml" i] {
+  display: inline-block;
+}
+
+
+
+

4. CSS Extensions for Math Layout

+ +

4.1 The display: block math + and display: inline math value

+ +

The display property + from CSS Display Module Level 3 + is extended with a new inner display type: +

+ + + + + + + + + + + +
Name:display
New values:<display-outside> || [ <display-inside> | math ]
+

+ For elements that are not MathML elements, if the specified + value of display is block math or + inline math then the computed value is + block flow and inline flow respectively. + For the mtable element + the computed value is block table and + inline table respectively. + For the mtr element, the computed value + is table-row. + For the mtd element, the computed value + is table-cell. +

+

+ MathML elements with a + computed display value equal to + block math or inline math + control box generation and layout according to their tag name, as + described in the relevant sections. + Unknown MathML elements + behave the same as the mrow element. +

+
Note
+ The display: block math and + display: inline math values provide a default + layout for MathML elements while at the same time allowing + to override it with either native display values or + custom values. + This allows authors or polyfills to define their own custom notations + to tweak or extend MathML Core. +
+
+

+ In the following example, the default layout of the + MathML mrow element is overridden to render its + content as a grid. +

+
<math>
+  <msup>
+    <mrow>
+      <mo symmetric="false">[</mo>
+      <mrow style="display: block; width: 4.5em;">
+        <mrow style="display: grid;
+                     grid-template-columns: 1.5em 1.5em 1.5em;
+                     grid-template-rows: 1.5em 1.5em;
+                     justify-items: center;
+                     align-items: center;">
+          <mn>12</mn>
+          <mn>34</mn>
+          <mn>56</mn>
+          <mn>7</mn>
+          <mn>8</mn>
+          <mn>9</mn>
+        </mrow>
+      </mrow>
+      <mo symmetric="false">]</mo>
+    </mrow>
+    <mi>α</mi>
+  </msup>
+</math>
+ display example +
+
+

4.2 New text-transform value

+ +

The text-transform property + from CSS Text Module Level 3 + is extended with a new value: +

+ + + + + + + + + + + +
Name:text-transform +
New value:math-auto
+

+ On text nodes containing a single character, if the computed value + is math-auto then the transformed text is obtained by + performing conversion of each character according to the + italic table. +

+
+

A common style convention is to render + identifiers with multiple letters (e.g. the function name "exp") + with normal style and identifiers with a single letter + (e.g. the variable "n") with italic style. The + math-auto property is intended to implement this + default behavior, which can be overridden by authors if necessary. + Note that mathematical fonts are designed with a special kind + of italic glyphs located at the + Unicode positions of + C.13 italic mappings, which differ from the shaping + obtained via italic font style. Compare this + mathematical formula + rendered with the Latin Modern Math font using + font-style: italic (left) and + text-transform: math-auto (right): +

+ font-style: italic VS text-transform: math-auto +
+
+

4.3 The math-style property

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Name: + math-style +
Value:normal | compact
Initial:normal
Applies to:All elements
Inherited:yes
Percentages:n/a
Computed value:specified keyword
Canonical order:n/a
Animation type:not animatable
Media:visual
+

+ When math-style is compact, + the math layout on descendants tries to minimize the + logical height by + applying the following rules: +

+ +
+

The following example shows a + mathematical formula rendered with + its math root styled with + math-style: compact (left) and + math-style: normal (right). + In the former case, the font-size is automatically scaled down + within the fractions and the summation limits are rendered as + subscript and superscript of the ∑. In the latter case, the ∑ is + drawn bigger than normal text and + vertical gaps within fractions (even relative to current + font-size) are larger. +

+ math-style example +

These two math-style values typically correspond to + mathematical expressions in inline and display + mode respectively [TeXBook]. + A mathematical formula in display mode + may automatically switch to inline mode within some subformulas + (e.g. scripts, matrix elements, numerators and denominators, etc) + and it is sometimes desirable to override this default behavior. + The math-style property allows to easily implement these + features for MathML in the + user agent stylesheet + and with the displaystyle attribute; and also exposes + them to polyfills. +

+
+
+

4.4 The math-shift property

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Name: + math-shift +
Value:normal | compact
Initial:normal
Applies to:All elements
Inherited:yes
Percentages:n/a
Computed value:specified keyword
Canonical order:n/a
Animation type:not animatable
Media:visual
+

+ If the value of math-shift is compact, the math layout on descendants will use the + superscriptShiftUpCramped parameter to place superscript. + If the value of math-shift is normal, the math + will use the superscriptShiftUp parameter instead. +

+

+ This property is used for positioning superscript during the layout + of MathML scripted elements. + See § 3.4.1 Subscripts and Superscripts <msub>, <msup>, <msubsup>, + 3.4.3 Prescripts and Tensor Indices <mmultiscripts> and + 3.4.2 Underscripts and Overscripts <munder>, <mover>, <munderover>. +

+
+

In the following example, the two "x squared" are rendered with + compact math-style and the same font-size. + However, the one within the square root is rendered with + compact math-shift while + the other one is rendered with + normal math-shift, leading + to subtle different shift of the superscript "2". +

+ math-shift example +

Per [TeXBook], a + mathematical formula uses normal style by default but may + switch to compact style ("cramped" in TeX's terminology) + within some subformulas + (e.g. radicals, fraction denominators, etc). + The math-shift property allows to easily + implement these rules for MathML in the + user agent stylesheet. + Page authors or developers of polyfills may also benefit from + having access to this property to tweak or refine the default + implementation. +

+
+
+

4.5 The math-depth property

+ +

+ A new math-depth property is introduced to describe a notion + of "depth" for each element of a mathematical formula, with respect to + the top-level container of that formula. Concretely, this is used to + determine the computed value of the + font-size + property when its specified value is math. +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Name: + math-depth +
Value:auto-add | add(<integer>) | <integer>
Initial:0
Applies to:All elements
Inherited:yes
Percentages:n/a
Computed value:an integer, see below
Canonical order:n/a
Animation type:not animatable
Media:visual
+

The computed value of the math-depth value is + determined as follows:

+
    +
  • If the specified value of math-depth is + auto-add and + the inherited value of math-style + is compact then the computed value of + math-depth of the element is its inherited value plus one. +
  • +
  • If the specified value of math-depth is of + the form add(<integer>) then the computed value + of math-depth of the element is its inherited value plus + the specified integer. +
  • +
  • If the specified value of math-depth is of the form + <integer> then the computed value + of math-depth of the element is the specified integer. +
  • +
  • Otherwise, the computed value + of math-depth of the element is the inherited one.
  • +
+

+ If the specified value of + font-size + is math then the + computed value of + font-size + is obtained by multiplying the inherited value of + font-size + by a nonzero scale factor calculated by the + following procedure: +

+
    +
  1. Let A be the inherited math-depth value, + B the computed math-depth value, + C be 0.71 and S be 1.0
  2. +
  3. +
      +
    • If A = B then return S.
    • +
    • If B < A, swap A and B and set InvertScaleFactor to true.
    • +
    • Otherwise B > A and set InvertScaleFactor to false.
    • +
    +
  4. +
  5. Let E be B - A > 0.
  6. +
  7. If the inherited first available font has an OpenType MATH table: + +
  8. +
  9. Multiply S by CE.
  10. +
  11. Return S if InvertScaleFactor is false and 1/S otherwise.
  12. +
+
+

The following example shows a mathematical formula + with normal math-style + rendered with the Latin Modern Math font. + When entering subexpressions like scripts or fractions, + the font-size is automatically scaled down according to the + values of MATH table contained in that font. + Note that font-size is scaled down when + entering the superscripts but even faster when entering a + root's prescript. Also it is scaled down when entering the inner + fraction but not when entering the outer one, due to automatic + change of math-style in fractions. +

+ font-size-scriptlevel example +

These rules from [TeXBook] are subtle and it's worth having a + separate math-depth mechanism to express and + handle them. They can be implemented in MathML using the + user agent stylesheet. + Page authors or developers of polyfills may also benefit from + having access to this property to tweak or refine the default + implementation. In particular, the scriptlevel attribute + from MathML provides a way to perform math-depth + changes. +

+
+
+
+

5. OpenType MATH table

+ +

+ This chapter describes features provided by MATH table + of an OpenType font [OPEN-FONT-FORMAT]. Throughout this chapter, + a C-like notation + Table.Subtable1[index].Subtable2.Parameter is used to + denote OpenType parameters. + Such parameters may not be available (e.g. if the font lacks one of the + subtable, has an invalid offset, etc) and so fallback options are + provided. +

+
Note
+ It is strongly encouraged to render MathML with a math font with + the proper OpenType features. There is no guarantee that the fallback + options provided will provide good enough rendering. +
+

+ OpenType values expressed in design units (perhaps indirectly via a + MathValueRecord entry) are scaled to appropriate values + for layout purpose, taking into account + head.unitsPerEm, CSS + font-size + or zoom level. +

+

5.1 Layout constants (MathConstants)

+ +

These are global layout constants for the + first available font:

+
+
Default fallback constant
+
0
+
Default rule thickness
+
+ post.underlineThickness or + Default fallback constant if the constant is not available. +
+
scriptPercentScaleDown
+
+ MATH.MathConstants.scriptPercentScaleDown / 100 or + 0.71 if MATH.MathConstants.scriptPercentScaleDown is + null or not available. +
+
scriptScriptPercentScaleDown
+
+ MATH.MathConstants.scriptScriptPercentScaleDown / 100 or + 0.5041 if + MATH.MathConstants.scriptScriptPercentScaleDown is + null or not available. +
+
displayOperatorMinHeight
+
MATH.MathConstants.displayOperatorMinHeight or + Default fallback constant + if the constant is not available.
+
axisHeight
+
MATH.MathConstants.axisHeight or half + OS/2.sxHeight if the constant is not available.
+
accentBaseHeight
+
MATH.MathConstants.accentBaseHeight or OS/2.sxHeight if the constant is not available.
+
subscriptShiftDown
+
MATH.MathConstants.subscriptShiftDown or OS/2.ySubscriptYOffset if the constant is not available.
+
subscriptTopMax
+
MATH.MathConstants.subscriptTopMax or ⅘ × OS/2.sxHeight if the constant is not available.
+
subscriptBaselineDropMin
+
MATH.MathConstants.subscriptBaselineDropMin or + Default fallback constant if the constant is not available.
+
superscriptShiftUp
+
MATH.MathConstants.superscriptShiftUp or OS/2.ySuperscriptYOffset if the constant is not available.
+
superscriptShiftUpCramped
+
MATH.MathConstants.superscriptShiftUpCramped or + Default fallback constant if the constant is not available.
+
superscriptBottomMin
+
MATH.MathConstants.superscriptBottomMin or ¼ × OS/2.sxHeight if the constant is not available.
+
superscriptBaselineDropMax
+
MATH.MathConstants.superscriptBaselineDropMax or + Default fallback constant if the constant is not available.
+
subSuperscriptGapMin
+
MATH.MathConstants.subSuperscriptGapMin or 4 × default rule thickness if the constant is not available.
+
superscriptBottomMaxWithSubscript
+
MATH.MathConstants.superscriptBottomMaxWithSubscript or ⅘ × OS/2.sxHeight if the constant is not available.
+
spaceAfterScript
+
MATH.MathConstants.spaceAfterScript or 1/24em if the constant is not available.
+
upperLimitGapMin
+
MATH.MathConstants.upperLimitGapMin or + Default fallback constant if the constant is not available.
+
upperLimitBaselineRiseMin
+
MATH.MathConstants.upperLimitBaselineRiseMin or Default fallback constant if the constant is not available.
+
lowerLimitGapMin
+
MATH.MathConstants.lowerLimitGapMin or Default fallback constant if the constant is not available.
+
lowerLimitBaselineDropMin
+
MATH.MathConstants.lowerLimitBaselineDropMin or Default fallback constant if the constant is not available.
+
stackTopShiftUp
+
MATH.MathConstants.stackTopShiftUp or Default fallback constant if the constant is not available.
+
stackTopDisplayStyleShiftUp
+
MATH.MathConstants.stackTopDisplayStyleShiftUp or Default fallback constant if the constant is not available.
+
stackBottomShiftDown
+
MATH.MathConstants.stackBottomShiftDown or Default fallback constant if the constant is not available.
+
stackBottomDisplayStyleShiftDown
+
MATH.MathConstants.stackBottomDisplayStyleShiftDown or Default fallback constant if the constant is not available.
+
stackGapMin
+
MATH.MathConstants.stackGapMin or 3 × default rule thickness if the constant is not available.
+
stackDisplayStyleGapMin
+
MATH.MathConstants.stackDisplayStyleGapMin or 7 × default rule thickness if the constant is not available.
+
stretchStackTopShiftUp
+
MATH.MathConstants.stretchStackTopShiftUp or Default fallback constant if the constant is not available.
+
stretchStackBottomShiftDown
+
MATH.MathConstants.stretchStackBottomShiftDown or Default fallback constant if the constant is not available.
+
stretchStackGapAboveMin
+
MATH.MathConstants.stretchStackGapAboveMin or Default fallback constant if the constant is not available.
+
stretchStackGapBelowMin
+
MATH.MathConstants.stretchStackGapBelowMin or Default fallback constant if the constant is not available.
+
fractionNumeratorShiftUp
+
MATH.MathConstants.fractionNumeratorShiftUp or Default fallback constant if the constant is not available.
+
fractionNumeratorDisplayStyleShiftUp
+
MATH.MathConstants.fractionNumeratorDisplayStyleShiftUp or Default fallback constant if the constant is not available.
+
fractionDenominatorShiftDown
+
MATH.MathConstants.fractionDenominatorShiftDown or Default fallback constant if the constant is not available.
+
fractionDenominatorDisplayStyleShiftDown
+
MATH.MathConstants.fractionDenominatorDisplayStyleShiftDown or Default fallback constant if the constant is not available.
+
fractionNumeratorGapMin
+
MATH.MathConstants.fractionNumeratorGapMin or default rule thickness if the constant is not available.
+
fractionNumDisplayStyleGapMin
+
MATH.MathConstants.fractionNumDisplayStyleGapMin or 3 × default rule thickness if the constant is not available.
+
fractionRuleThickness
+
MATH.MathConstants.fractionRuleThickness or default rule thickness if the constant is not available.
+
fractionDenominatorGapMin
+
MATH.MathConstants.fractionDenominatorGapMin or default rule thickness if the constant is not available.
+
fractionDenomDisplayStyleGapMin
+
MATH.MathConstants.fractionDenomDisplayStyleGapMin or 3 × default rule thickness if the constant is not available.
+
overbarVerticalGap
+
MATH.MathConstants.overbarVerticalGap or 3 × default rule thickness if the constant is not available.
+
overbarExtraAscender
+
MATH.MathConstants.overbarExtraAscender or default rule thickness if the constant is not available.
+
underbarVerticalGap
+
MATH.MathConstants.underbarVerticalGap or 3 × default rule thickness if the constant is not available.
+
underbarExtraDescender
+
MATH.MathConstants.underbarExtraDescender or default rule thickness if the constant is not available.
+
radicalVerticalGap
+
MATH.MathConstants.radicalVerticalGap or 1¼ × default rule thickness if the constant is not available.
+
radicalDisplayStyleVerticalGap
+
MATH.MathConstants.radicalDisplayStyleVerticalGap or default rule thickness + ¼ OS/2.sxHeight if the constant is not available.
+
radicalRuleThickness
+
MATH.MathConstants.radicalRuleThickness or default rule thickness if the constant is not available.
+
radicalExtraAscender
+
MATH.MathConstants.radicalExtraAscender or default rule thickness if the constant is not available.
+
radicalKernBeforeDegree
+
MATH.MathConstants.radicalKernBeforeDegree or 5/18em if the constant is not available.
+
radicalKernAfterDegree
+
MATH.MathConstants.radicalKernAfterDegree or −10/18em if the constant is not available.
+
radicalDegreeBottomRaisePercent
+
MATH.MathConstants.radicalDegreeBottomRaisePercent / 100.0 or 0.6 if the constant is not available.
+
+
+

5.2 Glyph information (MathGlyphInfo)

+ +
Note
MathTopAccentAttachment is at risk.
+

+ These are per-glyph tables for the + first available font:

+
+
MathItalicsCorrectionInfo
+
+ The subtable + MATH.MathGlyphInfo.MathItalicsCorrectionInfo + of italics correction values. Use the corresponding value in + MATH.MathGlyphInfo.MathItalicsCorrectionInfo.italicsCorrection + if there is one for the requested glyph or + 0 otherwise. +
+
MathTopAccentAttachment
+
+ The subtable + MATH.MathGlyphInfo.MathTopAccentAttachment + of positioning top math accents along the inline axis. + Use the corresponding value in + MATH.MathGlyphInfo.MathTopAccentAttachment.topAccentAttachment + if there is one for the requested glyph or + half the advance width of the glyph otherwise. +
+
+
+

5.3 Size variants for operators (MathVariants)

+ +

+ This section describes how to handle stretchy glyphs of arbitrary + size using the MATH.MathVariants table. +

+

5.3.1 The GlyphAssembly table

+ +

+ This section is based on [OPEN-TYPE-MATH-IN-HARFBUZZ]. + For convenience, the following definitions are used: +

+
    +
  • + omin is + MATH.MathVariant.minConnectorOverlap. +
  • +
  • + A GlyphPartRecord is an extender + if and only if + GlyphPartRecord.partFlags has the + fExtender flag set. +
  • +
  • + A GlyphAssembly is horizontal + if it is obtained from + MathVariant.horizGlyphConstructionOffsets. + Otherwise it is vertical (and obtained from + MathVariant.vertGlyphConstructionOffsets). +
  • +
  • + For a given GlyphAssembly table, + NExt (respectively + NNonExt) is the number of extenders + (respectively non-extenders) in + GlyphAssembly.partRecords. +
  • +
  • + For a given GlyphAssembly table, + SExt (respectively + SNonExt) is the sum of + GlyphPartRecord.fullAdvance + for all extenders (respectively non-extenders) in + GlyphAssembly.partRecords. +
  • +
  • SExt,NonOverlapping = SExtomin NExt + is the sum of maximum non overlapping parts of extenders. +
  • +
+

+ User agents must treat the GlyphAssembly as invalid + if the following conditions are not satisfied: +

+
    +
  • NExt > 0. Otherwise, the assembly cannot + be grown by repeating extenders.
  • +
  • + SExt,NonOverlapping > 0. + Otherwise, the assembly does not grow when joining extenders. +
  • +
  • + For each GlyphPartRecord + in GlyphAssembly.partRecords, + the values of + GlyphPartRecord.startConnectorLength and + GlyphPartRecord.endConnectorLength + must be at least omin. + Otherwise, it is not possible to satisfy the condition of + MathVariant.minConnectorOverlap. +
  • +
+

+ In this specification, a glyph assembly is built by repeating each + extender r times and using the same overlap value o between each + glyph. The number of glyphs in such an assembly is + AssemblyGlyphCount(r) = NNonExt + r NExt while + the stretch size is + AssembySize(o, r) = + SNonExt + r SExt + − o (AssemblyGlyphCount(r) − 1). +

+

+ rmin is the minimal number of repetitions + needed to obtain an assembly of + size at least T, i.e. the minimal r such that + AssembySize(omin, r) ≥ T. + It is defined as the maximum between 0 and the ceiling of + ((T − SNonExt + omin (NNonExt − 1)) / SExt,NonOverlapping). +

+

omax,theorical = (AssembySize(0, rmin) − T) / (AssemblyGlyphCount(rmin) − 1) + is the theorical overlap obtained by + splitting evenly the extra size of an assembly built with + null overlap.

+

+ omax is the + maximum overlap possible to build an assembly of size at least + T by repeating each extender rmin times. + + If AssemblyGlyphCount(rmin) ≤ 1, then the actual overlap value is irrelevant. + Otherwise, omax is defined to be the minimum of: +

+
    +
  • omax,theorical.
  • +
  • + GlyphPartRecord.startConnectorLength for all + the entries in + GlyphAssembly.partRecords, excluding the + last one if it is not an extender. +
  • +
  • + GlyphPartRecord.endConnectorLength for all + the entries in + GlyphAssembly.partRecords, excluding the + first one if it is not an extender. +
  • +
+

+ The glyph assembly stretch size + for a target size T is + AssembySize(omax, rmin). +

+

+ The + glyph assembly width, + glyph assembly ascent + and glyph assembly descent + are defined as follows: +

+
    +
  • If GlyphAssembly is vertical, + the width is the maximum advance width of the glyphs of ID + GlyphPartRecord.glyphID for all the + GlyphPartRecord in + GlyphAssembly.partRecords, + the ascent is the + glyph assembly stretch size + for a given target size T + and the descent is 0. +
  • +
  • Otherwise, the GlyphAssembly is horizontal, + the width is glyph assembly stretch size + for a given target size T while + the ascent (respectively descent) is the + maximum ascent (respectively descent) of the glyphs of ID + GlyphPartRecord.glyphID for all the + GlyphPartRecord in + GlyphAssembly.partRecords. +
  • +
+

+ The glyph assembly height is the sum + of the glyph assembly ascent and + glyph assembly descent. +

+
Note
+ The horizontal (respectively vertical) metrics for a vertical + (respectively horizontal) glyph assembly do not depend + on the target size T. +
+

The shaping of the glyph assembly + is performed with the following algorithm: +

+
    +
  1. Calculate rmin and + omax.
  2. +
  3. + Set (x, y) to (0, 0), + RepetitionCounter to 0 and + PartIndex to -1. +
  4. +
  5. + Repeat the following steps: +
      +
    1. + If RepetitionCounter is 0: +
        +
      1. Increment PartIndex.
      2. +
      3. If PartIndex is + GlyphAssembly.partCount + then stop.
      4. +
      5. Otherwise, set + Part to + GlyphAssembly.partRecords[PartIndex]. + Set RepetitionCounter to + rmin if + Part is an extender and to 1 otherwise. +
      6. +
      +
    2. +
    3. +
        +
      • If the glyph assembly is horizontal then + draw the glyph of ID + Part.glyphID + so that its (left, baseline) coordinates + are at position (x, y). + Set x to + x + Part.fullAdvance − + omax. +
      • +
      • Otherwise (if the glyph assembly is vertical), + then + draw the glyph of id + Part.glyphID + so that its (left, bottom) coordinates + are at position (x, y). + Set y to + y − Part.fullAdvance + + omax. +
      • +
      +
    4. +
    5. Decrement RepetitionCounter.
    6. +
    +
  6. +
+
+

5.3.2 Algorithms for glyph stretching

+ +

+ The preferred inline size of a glyph stretched along the block + axis + is calculated using the following algorithm: +

+
    +
  1. + Set S to the glyph's advance width. +
  2. +
  3. + If there is a MathGlyphConstruction table + in the MathVariants.vertGlyphConstructionOffsets + table for the given glyph: +
      +
    1. + For each MathGlyphVariantRecord in + MathGlyphConstruction.mathGlyphVariantRecord, + ensure that S is at least + the advance width of the glyph of id + MathGlyphVariantRecord.variantGlyph. +
    2. +
    3. + If there is valid GlyphAssembly subtable, + then ensure + that S is at least the + glyph assembly width. +
    4. +
    +
  4. +
  5. Return S.
  6. +
+
Note
+ The preferred inline size of a glyph stretched along the block + axis will return the maximum width of all possible + vertical constructions for that glyph. + In practice, math fonts are designed so that + vertical constructions are almost constant width, so possible + over-estimation of the actual width is small. +
+

+ The algorithm to shape a stretchy glyph to inline + (respectively block) dimension T + is the following: +

+
    +
  1. + If there is not any MathGlyphConstruction table + in the MathVariants.horizGlyphConstructionOffsets + table (respectively + MathVariants.vertGlyphConstructionOffsets table) + for the given glyph then exit with failure. +
  2. +
  3. + If the glyph's advance width + (respectively height) is at least T + then use normal shaping and bounding box for that glyph, + the MathItalicsCorrectionInfo for that glyph as + italic correction and exit with success. +
  4. +
  5. + Browse the list of MathGlyphVariantRecord in + MathGlyphConstruction.mathGlyphVariantRecord. + If one MathGlyphVariantRecord.advanceMeasurement + is at least T then use + normal shaping and bounding box + for MathGlyphVariantRecord.variantGlyph, + the MathItalicsCorrectionInfo for that glyph as + italic correction and exit with success. +
  6. +
  7. + If there is valid GlyphAssembly subtable + then use the bounding box given by + glyph assembly width, + glyph assembly height, + glyph assembly ascent, + glyph assembly descent, the value + GlyphAssembly.italicsCorrection as italic + correction, perform shaping of the glyph assembly and + exit with success. +
  8. +
  9. If none of the stretch options above allowed to cover the target + size T, then choose last one that was tried and exit + with success. +
  10. +
+
Note
+ If a font does not provide tables for stretchy constructions, User + Agents may use their own internal constructions as a fallback + such as + the one suggested in B.4 Unicode-based Glyph Assemblies. +
+
+
+
+

A. User Agent Stylesheet

+ +
@namespace url(http://www.w3.org/1998/Math/MathML);
+
+/* Universal rules */
+* {
+  font-size: math;
+  display: block math;
+  writing-mode: horizontal-tb !important;
+}
+
+/* The <math> element */
+math {
+  direction: ltr;
+  text-indent: 0;
+  letter-spacing: normal;
+  line-height: normal;
+  word-spacing: normal;
+  font-family: math;
+  font-size: inherit;
+  font-style: normal;
+  font-weight: normal;
+  display: inline math;
+  math-shift: normal;
+  math-style: compact;
+  math-depth: 0;
+}
+math[display="block" i] {
+  display: block math;
+  math-style: normal;
+}
+math[display="inline" i] {
+  display: inline math;
+  math-style: compact;
+}
+
+/* <mrow>-like elements */
+semantics > :not(:first-child) {
+  display: none;
+}
+maction > :not(:first-child) {
+  display: none;
+}
+merror {
+  border: 1px solid red;
+  background-color: lightYellow;
+}
+mphantom {
+  visibility: hidden;
+}
+
+/* Token elements */
+mi {
+  text-transform: math-auto;
+}
+
+/* Tables */
+mtable {
+  display: inline-table;
+  math-style: compact;
+}
+mtr {
+  display: table-row;
+}
+mtd {
+  display: table-cell;
+  /* Centering inside table cells should rely on box alignment properties.
+     See https://github.com/w3c/mathml-core/issues/156 */
+  text-align: center;
+  padding: 0.5ex 0.4em;
+}
+
+/* Fractions */
+mfrac {
+  padding-inline-start: 1px;
+  padding-inline-end: 1px;
+}
+mfrac > * {
+  math-depth: auto-add;
+  math-style: compact;
+}
+mfrac > :nth-child(2) {
+  math-shift: compact;
+}
+
+/* Other rules for scriptlevel, displaystyle and math-shift */
+mroot > :not(:first-child) {
+  math-depth: add(2);
+  math-style: compact;
+}
+mroot, msqrt {
+  math-shift: compact;
+}
+msub > :not(:first-child),
+msup > :not(:first-child),
+msubsup > :not(:first-child),
+mmultiscripts > :not(:first-child),
+munder > :not(:first-child),
+mover > :not(:first-child),
+munderover > :not(:first-child) {
+  math-depth: add(1);
+  math-style: compact;
+}
+munder[accentunder="true" i] > :nth-child(2),
+mover[accent="true" i] > :nth-child(2),
+munderover[accentunder="true" i] > :nth-child(2),
+munderover[accent="true" i] > :nth-child(3) {
+  font-size: inherit;
+}
+msub > :nth-child(2),
+msubsup > :nth-child(2),
+mmultiscripts > :nth-child(even),
+mmultiscripts > mprescripts ~ :nth-child(odd),
+mover[accent="true" i] > :first-child,
+munderover[accent="true" i] > :first-child {
+  math-shift: compact;
+}
+mmultiscripts > mprescripts ~ :nth-child(even) {
+  math-shift: inherit;
+}
+
+

B. Operator Tables

+ +

B.1 Operator Dictionary

+ +
Note
+ This section describes how to determine values of + 3.2.4.2 Dictionary-based attributes and + stretch axis of operators. + Compact tables below are suitable for computer manipulation, + see B.2 Operator Dictionary (human-readable) for an alternative + presentation. +
+

The algorithm to set the properties of an operator from its category is as follows:

+
    +
  • Set minsize to 100%.
  • +
  • Set maxsize to .
  • +
  • Find the row corresponding to the specified category + on Figure 26. +
  • +
  • Set lspace and rspace to the + value specified in the corresponding column.
  • +
  • For each property stretchy, + symmetric, largeop, + movablelimits, set that property to true + if it is listed in the last column or to false + otherwise.
  • +
+ +

The algorithm to determine the category of an operator + (Content, Form) is as folllows: +

+
    +
  1. + If Content as an UTF-16 string does not have length + or 1 or 2 then exit with category Default. +
  2. +
  3. If Content is a single character in the + range U+0320–U+03FF + then exit with category Default. Otherwise, + if it has two characters: +
      +
    • If Content is the surrogate pairs corresponding + to + U+1EEF0 ARABIC MATHEMATICAL OPERATOR MEEM WITH HAH WITH TATWEEL + or U+1EEF1 ARABIC MATHEMATICAL OPERATOR HAH WITH DAL and + Form is postfix, exit with category + I.
    • +
    • If the second character is + U+0338 COMBINING LONG SOLIDUS OVERLAY or + U+20D2 COMBINING LONG VERTICAL LINE OVERLAY then replace + Content with the first character and move to step + 3.
    • +
    • Otherwise, if Content is listed in + Operators_2_ascii_chars then + replace Content with the + Unicode character + "U+0320 plus the index of Content in + Operators_2_ascii_chars" and move to step + 3. +
    • +
    • Otherwise exit with category Default.
    • +
    +
  4. +
  5. If Form is infix and Content corresponds + to one of U+007C VERTICAL LINE or U+223C TILDE OPERATOR then exit + with category ForceDefault. If the category of + (Content, Form) + provided by table + Figure 25 + has N/A encoding in table + Figure 26 + (namely if it has category L or M), then + exit with that category. + Otherwise: +
      +
    • Set Key to Content if it is in + range U+0000–U+03FF; or to Content − 0x1C00 + if it is in range U+2000–U+2BFF. Otherwise, exit with + category Default. +
    • +
    • Add 0x0000, 0x1000, 0x2000 + to Key according to whether Form + is infix, prefix, + postfix respectively. +
    • +
    • Assert: Key is at most 0x2FFF.
    • +
    • Search an Entry in table + Figure 27 + such that Entry % 0x4000 is equal to + Key. If one is found then return the category + corresponding to encoding Entry / 0x1000 in + Figure 26. + Otherwise, return category Default. +
    • +
    +
  6. +
+
+
+ + + +
Special TableEntries
Operators_2_ascii_chars18 entries (2-characters ASCII strings): '!!', '!=', '&&', '**', '*=', '++', '+=', '--', '-=', '->', '//', '/=', ':=', '<=', '<>', '==', '>=', '||',
Operators_fence61 entries (16 Unicode ranges): [U+0028–U+0029], {U+005B}, {U+005D}, [U+007B–U+007D], {U+0331}, {U+2016}, [U+2018–U+2019], [U+201C–U+201D], [U+2308–U+230B], [U+2329–U+232A], [U+2772–U+2773], [U+27E6–U+27EF], {U+2980}, [U+2983–U+2999], [U+29D8–U+29DB], [U+29FC–U+29FD],
Operators_separator3 entries: U+002C, U+003B, U+2063,
Figure 24 Special tables for the operator dictionary.
Total size: 82 entries, 90 bytes
(assuming characters are UTF-16 and 1-byte range lengths).
+ + + + + + + + + + + + + +
(Content, Form) keysCategory
313 entries (35 Unicode ranges) in infix form: [U+2190–U+2195], [U+219A–U+21AE], [U+21B0–U+21B5], {U+21B9}, [U+21BC–U+21D5], [U+21DA–U+21F0], [U+21F3–U+21FF], {U+2794}, {U+2799}, [U+279B–U+27A1], [U+27A5–U+27A6], [U+27A8–U+27AF], {U+27B1}, {U+27B3}, {U+27B5}, {U+27B8}, [U+27BA–U+27BE], [U+27F0–U+27F1], [U+27F4–U+27FF], [U+2900–U+2920], [U+2934–U+2937], [U+2942–U+2975], [U+297C–U+297F], [U+2B04–U+2B07], [U+2B0C–U+2B11], [U+2B30–U+2B3E], [U+2B40–U+2B4C], [U+2B60–U+2B65], [U+2B6A–U+2B6D], [U+2B70–U+2B73], [U+2B7A–U+2B7D], [U+2B80–U+2B87], {U+2B95}, [U+2BA0–U+2BAF], {U+2BB8}, A
109 entries (32 Unicode ranges) in infix form: {U+002B}, {U+002D}, {U+002F}, {U+00B1}, {U+00F7}, {U+0322}, {U+2044}, [U+2212–U+2216], [U+2227–U+222A], {U+2236}, {U+2238}, [U+228C–U+228E], [U+2293–U+2296], {U+2298}, [U+229D–U+229F], [U+22BB–U+22BD], [U+22CE–U+22CF], [U+22D2–U+22D3], [U+2795–U+2797], {U+29B8}, {U+29BC}, [U+29C4–U+29C5], [U+29F5–U+29FB], [U+2A1F–U+2A2E], [U+2A38–U+2A3A], {U+2A3E}, [U+2A40–U+2A4F], [U+2A51–U+2A63], {U+2ADB}, {U+2AF6}, {U+2AFB}, {U+2AFD}, B
64 entries (33 Unicode ranges) in infix form: {U+0025}, {U+002A}, {U+002E}, [U+003F–U+0040], {U+005E}, {U+00B7}, {U+00D7}, {U+0323}, {U+032E}, {U+2022}, {U+2043}, [U+2217–U+2219], {U+2240}, {U+2297}, [U+2299–U+229B], [U+22A0–U+22A1], {U+22BA}, [U+22C4–U+22C7], [U+22C9–U+22CC], [U+2305–U+2306], {U+27CB}, {U+27CD}, [U+29C6–U+29C8], [U+29D4–U+29D7], {U+29E2}, [U+2A1D–U+2A1E], [U+2A2F–U+2A37], [U+2A3B–U+2A3D], {U+2A3F}, {U+2A50}, [U+2A64–U+2A65], [U+2ADC–U+2ADD], {U+2AFE}, C
52 entries (22 Unicode ranges) in prefix form: {U+0021}, {U+002B}, {U+002D}, {U+00AC}, {U+00B1}, {U+0331}, {U+2018}, {U+201C}, [U+2200–U+2201], [U+2203–U+2204], {U+2207}, [U+2212–U+2213], [U+221F–U+2222], [U+2234–U+2235], {U+223C}, [U+22BE–U+22BF], {U+2310}, {U+2319}, [U+2795–U+2796], {U+27C0}, [U+299B–U+29AF], [U+2AEC–U+2AED], D
40 entries (21 Unicode ranges) in postfix form: [U+0021–U+0022], [U+0025–U+0027], {U+0060}, {U+00A8}, {U+00B0}, [U+00B2–U+00B4], [U+00B8–U+00B9], [U+02CA–U+02CB], [U+02D8–U+02DA], {U+02DD}, {U+0311}, {U+0320}, {U+0325}, {U+0327}, {U+0331}, [U+2019–U+201B], [U+201D–U+201F], [U+2032–U+2037], {U+2057}, [U+20DB–U+20DC], {U+23CD}, E
30 entries in prefix form: U+0028, U+005B, U+007B, U+007C, U+2016, U+2308, U+230A, U+2329, U+2772, U+27E6, U+27E8, U+27EA, U+27EC, U+27EE, U+2980, U+2983, U+2985, U+2987, U+2989, U+298B, U+298D, U+298F, U+2991, U+2993, U+2995, U+2997, U+2999, U+29D8, U+29DA, U+29FC, F
30 entries in postfix form: U+0029, U+005D, U+007C, U+007D, U+2016, U+2309, U+230B, U+232A, U+2773, U+27E7, U+27E9, U+27EB, U+27ED, U+27EF, U+2980, U+2984, U+2986, U+2988, U+298A, U+298C, U+298E, U+2990, U+2992, U+2994, U+2996, U+2998, U+2999, U+29D9, U+29DB, U+29FD, G
27 entries (2 Unicode ranges) in prefix form: [U+222B–U+2233], [U+2A0B–U+2A1C], H
22 entries (13 Unicode ranges) in postfix form: [U+005E–U+005F], {U+007E}, {U+00AF}, [U+02C6–U+02C7], {U+02C9}, {U+02CD}, {U+02DC}, {U+02F7}, {U+0302}, {U+203E}, [U+2322–U+2323], [U+23B4–U+23B5], [U+23DC–U+23E1], I
22 entries (6 Unicode ranges) in prefix form: [U+220F–U+2211], [U+22C0–U+22C3], [U+2A00–U+2A0A], [U+2A1D–U+2A1E], {U+2AFC}, {U+2AFF}, J
7 entries (4 Unicode ranges) in infix form: {U+005C}, {U+005F}, [U+2061–U+2064], {U+2206}, K
6 entries (3 Unicode ranges) in prefix form: [U+2145–U+2146], {U+2202}, [U+221A–U+221C], L
3 entries in infix form: U+002C, U+003A, U+003B, M
Figure 25 Mapping from operator (Content, Form) to a category.
Total size: 725 entries, 639 bytes
(assuming characters are UTF-16 and 1-byte range lengths).
+ + + + + + + + + + + + + + + +
CategoryFormEncodinglspacerspaceproperties
DefaultN/AN/A0.2777777777777778em0.2777777777777778emN/A
ForceDefaultN/AN/A0.2777777777777778em0.2777777777777778emN/A
Ainfix0x00.2777777777777778em0.2777777777777778emstretchy
Binfix0x40.2222222222222222em0.2222222222222222emN/A
Cinfix0x80.16666666666666666em0.16666666666666666emN/A
Dprefix0x100N/A
Epostfix0x200N/A
Fprefix0x500stretchy symmetric
Gpostfix0x600stretchy symmetric
Hprefix0x90.16666666666666666em0.16666666666666666emsymmetric largeop
Ipostfix0xA00stretchy
Jprefix0xD0.16666666666666666em0.16666666666666666emsymmetric largeop movablelimits
Kinfix0xC00N/A
LprefixN/A0.16666666666666666em0N/A
MinfixN/A00.16666666666666666emN/A
Figure 26 Operators values for each category.
The third column provides a 4-bit encoding of the categories
where the 2 least significant bits encode the form infix (0), prefix (1) and postfix (2).
716 entries (236 ranges of length at most 16): {0x8025}, {0x802A}, {0x402B}, {0x402D}, {0x802E}, {0x402F}, [0x803F–0x8040], {0xC05C}, {0x805E}, {0xC05F}, {0x40B1}, {0x80B7}, {0x80D7}, {0x40F7}, {0x4322}, {0x8323}, {0x832E}, {0x8422}, {0x8443}, {0x4444}, [0xC461–0xC464], [0x0590–0x0595], [0x059A–0x05A9], [0x05AA–0x05AE], [0x05B0–0x05B5], {0x05B9}, [0x05BC–0x05CB], [0x05CC–0x05D5], [0x05DA–0x05E9], [0x05EA–0x05F0], [0x05F3–0x05FF], {0xC606}, [0x4612–0x4616], [0x8617–0x8619], [0x4627–0x462A], {0x4636}, {0x4638}, {0x8640}, [0x468C–0x468E], [0x4693–0x4696], {0x8697}, {0x4698}, [0x8699–0x869B], [0x469D–0x469F], [0x86A0–0x86A1], {0x86BA}, [0x46BB–0x46BD], [0x86C4–0x86C7], [0x86C9–0x86CC], [0x46CE–0x46CF], [0x46D2–0x46D3], [0x8705–0x8706], {0x0B94}, [0x4B95–0x4B97], {0x0B99}, [0x0B9B–0x0BA1], [0x0BA5–0x0BA6], [0x0BA8–0x0BAF], {0x0BB1}, {0x0BB3}, {0x0BB5}, {0x0BB8}, [0x0BBA–0x0BBE], {0x8BCB}, {0x8BCD}, [0x0BF0–0x0BF1], [0x0BF4–0x0BFF], [0x0D00–0x0D0F], [0x0D10–0x0D1F], {0x0D20}, [0x0D34–0x0D37], [0x0D42–0x0D51], [0x0D52–0x0D61], [0x0D62–0x0D71], [0x0D72–0x0D75], [0x0D7C–0x0D7F], {0x4DB8}, {0x4DBC}, [0x4DC4–0x4DC5], [0x8DC6–0x8DC8], [0x8DD4–0x8DD7], {0x8DE2}, [0x4DF5–0x4DFB], [0x8E1D–0x8E1E], [0x4E1F–0x4E2E], [0x8E2F–0x8E37], [0x4E38–0x4E3A], [0x8E3B–0x8E3D], {0x4E3E}, {0x8E3F}, [0x4E40–0x4E4F], {0x8E50}, [0x4E51–0x4E60], [0x4E61–0x4E63], [0x8E64–0x8E65], {0x4EDB}, [0x8EDC–0x8EDD], {0x4EF6}, {0x4EFB}, {0x4EFD}, {0x8EFE}, [0x0F04–0x0F07], [0x0F0C–0x0F11], [0x0F30–0x0F3E], [0x0F40–0x0F4C], [0x0F60–0x0F65], [0x0F6A–0x0F6D], [0x0F70–0x0F73], [0x0F7A–0x0F7D], [0x0F80–0x0F87], {0x0F95}, [0x0FA0–0x0FAF], {0x0FB8}, {0x1021}, {0x5028}, {0x102B}, {0x102D}, {0x505B}, [0x507B–0x507C], {0x10AC}, {0x10B1}, {0x1331}, {0x5416}, {0x1418}, {0x141C}, [0x1600–0x1601], [0x1603–0x1604], {0x1607}, [0xD60F–0xD611], [0x1612–0x1613], [0x161F–0x1622], [0x962B–0x9633], [0x1634–0x1635], {0x163C}, [0x16BE–0x16BF], [0xD6C0–0xD6C3], {0x5708}, {0x570A}, {0x1710}, {0x1719}, {0x5729}, {0x5B72}, [0x1B95–0x1B96], {0x1BC0}, {0x5BE6}, {0x5BE8}, {0x5BEA}, {0x5BEC}, {0x5BEE}, {0x5D80}, {0x5D83}, {0x5D85}, {0x5D87}, {0x5D89}, {0x5D8B}, {0x5D8D}, {0x5D8F}, {0x5D91}, {0x5D93}, {0x5D95}, {0x5D97}, {0x5D99}, [0x1D9B–0x1DAA], [0x1DAB–0x1DAF], {0x5DD8}, {0x5DDA}, {0x5DFC}, [0xDE00–0xDE0A], [0x9E0B–0x9E1A], [0x9E1B–0x9E1C], [0xDE1D–0xDE1E], [0x1EEC–0x1EED], {0xDEFC}, {0xDEFF}, [0x2021–0x2022], [0x2025–0x2027], {0x6029}, {0x605D}, [0xA05E–0xA05F], {0x2060}, [0x607C–0x607D], {0xA07E}, {0x20A8}, {0xA0AF}, {0x20B0}, [0x20B2–0x20B4], [0x20B8–0x20B9], [0xA2C6–0xA2C7], {0xA2C9}, [0x22CA–0x22CB], {0xA2CD}, [0x22D8–0x22DA], {0xA2DC}, {0x22DD}, {0xA2F7}, {0xA302}, {0x2311}, {0x2320}, {0x2325}, {0x2327}, {0x2331}, {0x6416}, [0x2419–0x241B], [0x241D–0x241F], [0x2432–0x2437], {0xA43E}, {0x2457}, [0x24DB–0x24DC], {0x6709}, {0x670B}, [0xA722–0xA723], {0x672A}, [0xA7B4–0xA7B5], {0x27CD}, [0xA7DC–0xA7E1], {0x6B73}, {0x6BE7}, {0x6BE9}, {0x6BEB}, {0x6BED}, {0x6BEF}, {0x6D80}, {0x6D84}, {0x6D86}, {0x6D88}, {0x6D8A}, {0x6D8C}, {0x6D8E}, {0x6D90}, {0x6D92}, {0x6D94}, {0x6D96}, [0x6D98–0x6D99], {0x6DD9}, {0x6DDB}, {0x6DFD},
Figure 27 List of entries for the largest categories, sorted by key.
Key is Entry % 0x4000, category encoding is Entry / 0x1000.
Total size: 716 entries, 590 bytes
(assuming 4 bits for range lengths).
+ +
Note
+
    +
  • + Tables of + Figure 25 and + Figure 27 are + encoded as ranges to take profit of the presence of many + contiguous Unicode blocks. +
  • +
  • + To quickly find an entry in these tables, one can still perform a + binary search over the range starts, followed by an + extra check on the range length. +
  • +
  • Since log is concave, + it is more efficient to perform one binary search + on the whole table of + Figure 27 + rather than on each large subtable + of Figure 25. +
  • +
+
+

+ The intrinsic stretch axis a Unicode character + c is inline if it belongs to the list below. + Otherwise, the intrinsic stretch axis of c is + block. +

+
+
U+003D, +U+005E, +U+005F, +U+007E, +U+00AF, +U+02C6, +U+02C7, +U+02C9, +U+02CD, +U+02DC, +U+02F7, +U+0302, +U+0332, +U+203E, +U+20D0, +U+20D1, +U+20D6, +U+20D7, +U+20E1, +U+2190, +U+2192, +U+2194, +U+2198, +U+2199, +U+219A, +U+219B, +U+219C, +U+219D, +U+219E, +U+21A0, +U+21A2, +U+21A3, +U+21A4, +U+21A6, +U+21A9, +U+21AA, +U+21AB, +U+21AC, +U+21AD, +U+21AE, +U+21B4, +U+21B9, +U+21BC, +U+21BD, +U+21C0, +U+21C1, +U+21C4, +U+21C6, +U+21C7, +U+21C9, +U+21CB, +U+21CC, +U+21CD, +U+21CE, +U+21CF, +U+21D0, +U+21D2, +U+21D4, +U+21DA, +U+21DB, +U+21DC, +U+21DD, +U+21E0, +U+21E2, +U+21E4, +U+21E5, +U+21E6, +U+21E8, +U+21F0, +U+21F4, +U+21F6, +U+21F7, +U+21F8, +U+21F9, +U+21FA, +U+21FB, +U+21FC, +U+21FD, +U+21FE, +U+21FF, +U+2322, +U+2323, +U+23B4, +U+23B5, +U+23DC, +U+23DD, +U+23DE, +U+23DF, +U+23E0, +U+23E1, +U+2500, +U+2794, +U+2799, +U+279B, +U+279C, +U+279D, +U+279E, +U+279F, +U+27A0, +U+27A1, +U+27A5, +U+27A6, +U+27A8, +U+27A9, +U+27AA, +U+27AB, +U+27AC, +U+27AD, +U+27AE, +U+27AF, +U+27B1, +U+27B3, +U+27B5, +U+27B8, +U+27BA, +U+27BB, +U+27BC, +U+27BD, +U+27BE, +U+27F4, +U+27F5, +U+27F6, +U+27F7, +U+27F8, +U+27F9, +U+27FA, +U+27FB, +U+27FC, +U+27FD, +U+27FE, +U+27FF, +U+2900, +U+2901, +U+2902, +U+2903, +U+2904, +U+2905, +U+2906, +U+2907, +U+290C, +U+290D, +U+290E, +U+290F, +U+2910, +U+2911, +U+2914, +U+2915, +U+2916, +U+2917, +U+2918, +U+2919, +U+291A, +U+291B, +U+291C, +U+291D, +U+291E, +U+291F, +U+2920, +U+2942, +U+2943, +U+2944, +U+2945, +U+2946, +U+2947, +U+2948, +U+294A, +U+294B, +U+294E, +U+2950, +U+2952, +U+2953, +U+2956, +U+2957, +U+295A, +U+295B, +U+295E, +U+295F, +U+2962, +U+2964, +U+2966, +U+2967, +U+2968, +U+2969, +U+296A, +U+296B, +U+296C, +U+296D, +U+2970, +U+2971, +U+2972, +U+2973, +U+2974, +U+2975, +U+297C, +U+297D, +U+2B04, +U+2B05, +U+2B0C, +U+2B30, +U+2B31, +U+2B32, +U+2B33, +U+2B34, +U+2B35, +U+2B36, +U+2B37, +U+2B38, +U+2B39, +U+2B3A, +U+2B3B, +U+2B3C, +U+2B3D, +U+2B3E, +U+2B40, +U+2B41, +U+2B42, +U+2B43, +U+2B44, +U+2B45, +U+2B46, +U+2B47, +U+2B48, +U+2B49, +U+2B4A, +U+2B4B, +U+2B4C, +U+2B60, +U+2B62, +U+2B64, +U+2B6A, +U+2B6C, +U+2B70, +U+2B72, +U+2B7A, +U+2B7C, +U+2B80, +U+2B82, +U+2B84, +U+2B86, +U+2B95, +U+FE35, +U+FE36, +U+FE37, +U+FE38, +U+1EEF0, +U+1EEF1, +
Figure 28 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).
+
Note
+ The intrinsic stretch axis could be included as a boolean property of + the operator dictionary. But since it + does not depend on the form and since very few operators can stretch + along the inline axis, it is better implemented as a separate + sorted array. Each entry can be encoded with 16 bytes if + U+1EEF0 ARABIC MATHEMATICAL OPERATOR MEEM WITH HAH WITH TATWEEL and + U+1EEF1 ARABIC MATHEMATICAL OPERATOR HAH WITH DAL are tested + separately. +
+
+

B.2 Operator Dictionary (human-readable)

This section is non-normative.

+ +

+ The following dictionary provides a human-readable version + of B.1 Operator Dictionary. Please refer to + 3.2.4.2 Dictionary-based attributes for explanation about + how to use this dictionary and how to + determine the values Content and Form + indexing together + the dictionary. +

+

+ The values for rspace and lspace are indicated + in the corresponding columns. + The values of + stretchy, + symmetric, + largeop, + movablelimits + are true + if they are listed in the "properties" column. +

+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ContentStretch Axisformlspacerspaceproperties
< U+003Cblockinfix0.2777777777777778em0.2777777777777778emN/A
= U+003Dinlineinfix0.2777777777777778em0.2777777777777778emN/A
> U+003Eblockinfix0.2777777777777778em0.2777777777777778emN/A
| U+007Cblockinfix0.2777777777777778em0.2777777777777778emfence
↖ U+2196blockinfix0.2777777777777778em0.2777777777777778emN/A
↗ U+2197blockinfix0.2777777777777778em0.2777777777777778emN/A
↘ U+2198inlineinfix0.2777777777777778em0.2777777777777778emN/A
↙ U+2199inlineinfix0.2777777777777778em0.2777777777777778emN/A
↯ U+21AFblockinfix0.2777777777777778em0.2777777777777778emN/A
↶ U+21B6blockinfix0.2777777777777778em0.2777777777777778emN/A
↷ U+21B7blockinfix0.2777777777777778em0.2777777777777778emN/A
↸ U+21B8blockinfix0.2777777777777778em0.2777777777777778emN/A
↺ U+21BAblockinfix0.2777777777777778em0.2777777777777778emN/A
↻ U+21BBblockinfix0.2777777777777778em0.2777777777777778emN/A
⇖ U+21D6blockinfix0.2777777777777778em0.2777777777777778emN/A
⇗ U+21D7blockinfix0.2777777777777778em0.2777777777777778emN/A
⇘ U+21D8blockinfix0.2777777777777778em0.2777777777777778emN/A
⇙ U+21D9blockinfix0.2777777777777778em0.2777777777777778emN/A
⇱ U+21F1blockinfix0.2777777777777778em0.2777777777777778emN/A
⇲ U+21F2blockinfix0.2777777777777778em0.2777777777777778emN/A
∈ U+2208blockinfix0.2777777777777778em0.2777777777777778emN/A
∉ U+2209blockinfix0.2777777777777778em0.2777777777777778emN/A
∊ U+220Ablockinfix0.2777777777777778em0.2777777777777778emN/A
∋ U+220Bblockinfix0.2777777777777778em0.2777777777777778emN/A
∌ U+220Cblockinfix0.2777777777777778em0.2777777777777778emN/A
∍ U+220Dblockinfix0.2777777777777778em0.2777777777777778emN/A
∝ U+221Dblockinfix0.2777777777777778em0.2777777777777778emN/A
∣ U+2223blockinfix0.2777777777777778em0.2777777777777778emN/A
∤ U+2224blockinfix0.2777777777777778em0.2777777777777778emN/A
∥ U+2225blockinfix0.2777777777777778em0.2777777777777778emN/A
∦ U+2226blockinfix0.2777777777777778em0.2777777777777778emN/A
∷ U+2237blockinfix0.2777777777777778em0.2777777777777778emN/A
∹ U+2239blockinfix0.2777777777777778em0.2777777777777778emN/A
∺ U+223Ablockinfix0.2777777777777778em0.2777777777777778emN/A
∻ U+223Bblockinfix0.2777777777777778em0.2777777777777778emN/A
∼ U+223Cblockinfix0.2777777777777778em0.2777777777777778emN/A
∽ U+223Dblockinfix0.2777777777777778em0.2777777777777778emN/A
∾ U+223Eblockinfix0.2777777777777778em0.2777777777777778emN/A
≁ U+2241blockinfix0.2777777777777778em0.2777777777777778emN/A
≂ U+2242blockinfix0.2777777777777778em0.2777777777777778emN/A
≃ U+2243blockinfix0.2777777777777778em0.2777777777777778emN/A
≄ U+2244blockinfix0.2777777777777778em0.2777777777777778emN/A
≅ U+2245blockinfix0.2777777777777778em0.2777777777777778emN/A
≆ U+2246blockinfix0.2777777777777778em0.2777777777777778emN/A
≇ U+2247blockinfix0.2777777777777778em0.2777777777777778emN/A
≈ U+2248blockinfix0.2777777777777778em0.2777777777777778emN/A
≉ U+2249blockinfix0.2777777777777778em0.2777777777777778emN/A
≊ U+224Ablockinfix0.2777777777777778em0.2777777777777778emN/A
≋ U+224Bblockinfix0.2777777777777778em0.2777777777777778emN/A
≌ U+224Cblockinfix0.2777777777777778em0.2777777777777778emN/A
≍ U+224Dblockinfix0.2777777777777778em0.2777777777777778emN/A
≎ U+224Eblockinfix0.2777777777777778em0.2777777777777778emN/A
≏ U+224Fblockinfix0.2777777777777778em0.2777777777777778emN/A
≐ U+2250blockinfix0.2777777777777778em0.2777777777777778emN/A
≑ U+2251blockinfix0.2777777777777778em0.2777777777777778emN/A
≒ U+2252blockinfix0.2777777777777778em0.2777777777777778emN/A
≓ U+2253blockinfix0.2777777777777778em0.2777777777777778emN/A
≔ U+2254blockinfix0.2777777777777778em0.2777777777777778emN/A
≕ U+2255blockinfix0.2777777777777778em0.2777777777777778emN/A
≖ U+2256blockinfix0.2777777777777778em0.2777777777777778emN/A
≗ U+2257blockinfix0.2777777777777778em0.2777777777777778emN/A
≘ U+2258blockinfix0.2777777777777778em0.2777777777777778emN/A
≙ U+2259blockinfix0.2777777777777778em0.2777777777777778emN/A
≚ U+225Ablockinfix0.2777777777777778em0.2777777777777778emN/A
≛ U+225Bblockinfix0.2777777777777778em0.2777777777777778emN/A
≜ U+225Cblockinfix0.2777777777777778em0.2777777777777778emN/A
≝ U+225Dblockinfix0.2777777777777778em0.2777777777777778emN/A
≞ U+225Eblockinfix0.2777777777777778em0.2777777777777778emN/A
≟ U+225Fblockinfix0.2777777777777778em0.2777777777777778emN/A
≠ U+2260blockinfix0.2777777777777778em0.2777777777777778emN/A
≡ U+2261blockinfix0.2777777777777778em0.2777777777777778emN/A
≢ U+2262blockinfix0.2777777777777778em0.2777777777777778emN/A
≣ U+2263blockinfix0.2777777777777778em0.2777777777777778emN/A
≤ U+2264blockinfix0.2777777777777778em0.2777777777777778emN/A
≥ U+2265blockinfix0.2777777777777778em0.2777777777777778emN/A
≦ U+2266blockinfix0.2777777777777778em0.2777777777777778emN/A
≧ U+2267blockinfix0.2777777777777778em0.2777777777777778emN/A
≨ U+2268blockinfix0.2777777777777778em0.2777777777777778emN/A
≩ U+2269blockinfix0.2777777777777778em0.2777777777777778emN/A
≪ U+226Ablockinfix0.2777777777777778em0.2777777777777778emN/A
≫ U+226Bblockinfix0.2777777777777778em0.2777777777777778emN/A
≬ U+226Cblockinfix0.2777777777777778em0.2777777777777778emN/A
≭ U+226Dblockinfix0.2777777777777778em0.2777777777777778emN/A
≮ U+226Eblockinfix0.2777777777777778em0.2777777777777778emN/A
≯ U+226Fblockinfix0.2777777777777778em0.2777777777777778emN/A
≰ U+2270blockinfix0.2777777777777778em0.2777777777777778emN/A
≱ U+2271blockinfix0.2777777777777778em0.2777777777777778emN/A
≲ U+2272blockinfix0.2777777777777778em0.2777777777777778emN/A
≳ U+2273blockinfix0.2777777777777778em0.2777777777777778emN/A
≴ U+2274blockinfix0.2777777777777778em0.2777777777777778emN/A
≵ U+2275blockinfix0.2777777777777778em0.2777777777777778emN/A
≶ U+2276blockinfix0.2777777777777778em0.2777777777777778emN/A
≷ U+2277blockinfix0.2777777777777778em0.2777777777777778emN/A
≸ U+2278blockinfix0.2777777777777778em0.2777777777777778emN/A
≹ U+2279blockinfix0.2777777777777778em0.2777777777777778emN/A
≺ U+227Ablockinfix0.2777777777777778em0.2777777777777778emN/A
≻ U+227Bblockinfix0.2777777777777778em0.2777777777777778emN/A
≼ U+227Cblockinfix0.2777777777777778em0.2777777777777778emN/A
≽ U+227Dblockinfix0.2777777777777778em0.2777777777777778emN/A
≾ U+227Eblockinfix0.2777777777777778em0.2777777777777778emN/A
≿ U+227Fblockinfix0.2777777777777778em0.2777777777777778emN/A
⊀ U+2280blockinfix0.2777777777777778em0.2777777777777778emN/A
⊁ U+2281blockinfix0.2777777777777778em0.2777777777777778emN/A
⊂ U+2282blockinfix0.2777777777777778em0.2777777777777778emN/A
⊃ U+2283blockinfix0.2777777777777778em0.2777777777777778emN/A
⊄ U+2284blockinfix0.2777777777777778em0.2777777777777778emN/A
⊅ U+2285blockinfix0.2777777777777778em0.2777777777777778emN/A
⊆ U+2286blockinfix0.2777777777777778em0.2777777777777778emN/A
⊇ U+2287blockinfix0.2777777777777778em0.2777777777777778emN/A
⊈ U+2288blockinfix0.2777777777777778em0.2777777777777778emN/A
⊉ U+2289blockinfix0.2777777777777778em0.2777777777777778emN/A
⊊ U+228Ablockinfix0.2777777777777778em0.2777777777777778emN/A
⊋ U+228Bblockinfix0.2777777777777778em0.2777777777777778emN/A
⊏ U+228Fblockinfix0.2777777777777778em0.2777777777777778emN/A
⊐ U+2290blockinfix0.2777777777777778em0.2777777777777778emN/A
⊑ U+2291blockinfix0.2777777777777778em0.2777777777777778emN/A
⊒ U+2292blockinfix0.2777777777777778em0.2777777777777778emN/A
⊜ U+229Cblockinfix0.2777777777777778em0.2777777777777778emN/A
⊢ U+22A2blockinfix0.2777777777777778em0.2777777777777778emN/A
⊣ U+22A3blockinfix0.2777777777777778em0.2777777777777778emN/A
⊦ U+22A6blockinfix0.2777777777777778em0.2777777777777778emN/A
⊧ U+22A7blockinfix0.2777777777777778em0.2777777777777778emN/A
⊨ U+22A8blockinfix0.2777777777777778em0.2777777777777778emN/A
⊩ U+22A9blockinfix0.2777777777777778em0.2777777777777778emN/A
⊪ U+22AAblockinfix0.2777777777777778em0.2777777777777778emN/A
⊫ U+22ABblockinfix0.2777777777777778em0.2777777777777778emN/A
⊬ U+22ACblockinfix0.2777777777777778em0.2777777777777778emN/A
⊭ U+22ADblockinfix0.2777777777777778em0.2777777777777778emN/A
⊮ U+22AEblockinfix0.2777777777777778em0.2777777777777778emN/A
⊯ U+22AFblockinfix0.2777777777777778em0.2777777777777778emN/A
⊰ U+22B0blockinfix0.2777777777777778em0.2777777777777778emN/A
⊱ U+22B1blockinfix0.2777777777777778em0.2777777777777778emN/A
⊲ U+22B2blockinfix0.2777777777777778em0.2777777777777778emN/A
⊳ U+22B3blockinfix0.2777777777777778em0.2777777777777778emN/A
⊴ U+22B4blockinfix0.2777777777777778em0.2777777777777778emN/A
⊵ U+22B5blockinfix0.2777777777777778em0.2777777777777778emN/A
⊶ U+22B6blockinfix0.2777777777777778em0.2777777777777778emN/A
⊷ U+22B7blockinfix0.2777777777777778em0.2777777777777778emN/A
⊸ U+22B8blockinfix0.2777777777777778em0.2777777777777778emN/A
⋈ U+22C8blockinfix0.2777777777777778em0.2777777777777778emN/A
⋍ U+22CDblockinfix0.2777777777777778em0.2777777777777778emN/A
⋐ U+22D0blockinfix0.2777777777777778em0.2777777777777778emN/A
⋑ U+22D1blockinfix0.2777777777777778em0.2777777777777778emN/A
⋔ U+22D4blockinfix0.2777777777777778em0.2777777777777778emN/A
⋕ U+22D5blockinfix0.2777777777777778em0.2777777777777778emN/A
⋖ U+22D6blockinfix0.2777777777777778em0.2777777777777778emN/A
⋗ U+22D7blockinfix0.2777777777777778em0.2777777777777778emN/A
⋘ U+22D8blockinfix0.2777777777777778em0.2777777777777778emN/A
⋙ U+22D9blockinfix0.2777777777777778em0.2777777777777778emN/A
⋚ U+22DAblockinfix0.2777777777777778em0.2777777777777778emN/A
⋛ U+22DBblockinfix0.2777777777777778em0.2777777777777778emN/A
⋜ U+22DCblockinfix0.2777777777777778em0.2777777777777778emN/A
⋝ U+22DDblockinfix0.2777777777777778em0.2777777777777778emN/A
⋞ U+22DEblockinfix0.2777777777777778em0.2777777777777778emN/A
⋟ U+22DFblockinfix0.2777777777777778em0.2777777777777778emN/A
⋠ U+22E0blockinfix0.2777777777777778em0.2777777777777778emN/A
⋡ U+22E1blockinfix0.2777777777777778em0.2777777777777778emN/A
⋢ U+22E2blockinfix0.2777777777777778em0.2777777777777778emN/A
⋣ U+22E3blockinfix0.2777777777777778em0.2777777777777778emN/A
⋤ U+22E4blockinfix0.2777777777777778em0.2777777777777778emN/A
⋥ U+22E5blockinfix0.2777777777777778em0.2777777777777778emN/A
⋦ U+22E6blockinfix0.2777777777777778em0.2777777777777778emN/A
⋧ U+22E7blockinfix0.2777777777777778em0.2777777777777778emN/A
⋨ U+22E8blockinfix0.2777777777777778em0.2777777777777778emN/A
⋩ U+22E9blockinfix0.2777777777777778em0.2777777777777778emN/A
⋪ U+22EAblockinfix0.2777777777777778em0.2777777777777778emN/A
⋫ U+22EBblockinfix0.2777777777777778em0.2777777777777778emN/A
⋬ U+22ECblockinfix0.2777777777777778em0.2777777777777778emN/A
⋭ U+22EDblockinfix0.2777777777777778em0.2777777777777778emN/A
⋲ U+22F2blockinfix0.2777777777777778em0.2777777777777778emN/A
⋳ U+22F3blockinfix0.2777777777777778em0.2777777777777778emN/A
⋴ U+22F4blockinfix0.2777777777777778em0.2777777777777778emN/A
⋵ U+22F5blockinfix0.2777777777777778em0.2777777777777778emN/A
⋶ U+22F6blockinfix0.2777777777777778em0.2777777777777778emN/A
⋷ U+22F7blockinfix0.2777777777777778em0.2777777777777778emN/A
⋸ U+22F8blockinfix0.2777777777777778em0.2777777777777778emN/A
⋹ U+22F9blockinfix0.2777777777777778em0.2777777777777778emN/A
⋺ U+22FAblockinfix0.2777777777777778em0.2777777777777778emN/A
⋻ U+22FBblockinfix0.2777777777777778em0.2777777777777778emN/A
⋼ U+22FCblockinfix0.2777777777777778em0.2777777777777778emN/A
⋽ U+22FDblockinfix0.2777777777777778em0.2777777777777778emN/A
⋾ U+22FEblockinfix0.2777777777777778em0.2777777777777778emN/A
⋿ U+22FFblockinfix0.2777777777777778em0.2777777777777778emN/A
⌁ U+2301blockinfix0.2777777777777778em0.2777777777777778emN/A
⍼ U+237Cblockinfix0.2777777777777778em0.2777777777777778emN/A
⎋ U+238Bblockinfix0.2777777777777778em0.2777777777777778emN/A
➘ U+2798blockinfix0.2777777777777778em0.2777777777777778emN/A
➚ U+279Ablockinfix0.2777777777777778em0.2777777777777778emN/A
➧ U+27A7blockinfix0.2777777777777778em0.2777777777777778emN/A
➲ U+27B2blockinfix0.2777777777777778em0.2777777777777778emN/A
➴ U+27B4blockinfix0.2777777777777778em0.2777777777777778emN/A
➶ U+27B6blockinfix0.2777777777777778em0.2777777777777778emN/A
➷ U+27B7blockinfix0.2777777777777778em0.2777777777777778emN/A
➹ U+27B9blockinfix0.2777777777777778em0.2777777777777778emN/A
⟂ U+27C2blockinfix0.2777777777777778em0.2777777777777778emN/A
⟲ U+27F2blockinfix0.2777777777777778em0.2777777777777778emN/A
⟳ U+27F3blockinfix0.2777777777777778em0.2777777777777778emN/A
⤡ U+2921blockinfix0.2777777777777778em0.2777777777777778emN/A
⤢ U+2922blockinfix0.2777777777777778em0.2777777777777778emN/A
⤣ U+2923blockinfix0.2777777777777778em0.2777777777777778emN/A
⤤ U+2924blockinfix0.2777777777777778em0.2777777777777778emN/A
⤥ U+2925blockinfix0.2777777777777778em0.2777777777777778emN/A
⤦ U+2926blockinfix0.2777777777777778em0.2777777777777778emN/A
⤧ U+2927blockinfix0.2777777777777778em0.2777777777777778emN/A
⤨ U+2928blockinfix0.2777777777777778em0.2777777777777778emN/A
⤩ U+2929blockinfix0.2777777777777778em0.2777777777777778emN/A
⤪ U+292Ablockinfix0.2777777777777778em0.2777777777777778emN/A
⤫ U+292Bblockinfix0.2777777777777778em0.2777777777777778emN/A
⤬ U+292Cblockinfix0.2777777777777778em0.2777777777777778emN/A
⤭ U+292Dblockinfix0.2777777777777778em0.2777777777777778emN/A
⤮ U+292Eblockinfix0.2777777777777778em0.2777777777777778emN/A
⤯ U+292Fblockinfix0.2777777777777778em0.2777777777777778emN/A
⤰ U+2930blockinfix0.2777777777777778em0.2777777777777778emN/A
⤱ U+2931blockinfix0.2777777777777778em0.2777777777777778emN/A
⤲ U+2932blockinfix0.2777777777777778em0.2777777777777778emN/A
⤳ U+2933blockinfix0.2777777777777778em0.2777777777777778emN/A
⤸ U+2938blockinfix0.2777777777777778em0.2777777777777778emN/A
⤹ U+2939blockinfix0.2777777777777778em0.2777777777777778emN/A
⤺ U+293Ablockinfix0.2777777777777778em0.2777777777777778emN/A
⤻ U+293Bblockinfix0.2777777777777778em0.2777777777777778emN/A
⤼ U+293Cblockinfix0.2777777777777778em0.2777777777777778emN/A
⤽ U+293Dblockinfix0.2777777777777778em0.2777777777777778emN/A
⤾ U+293Eblockinfix0.2777777777777778em0.2777777777777778emN/A
⤿ U+293Fblockinfix0.2777777777777778em0.2777777777777778emN/A
⥀ U+2940blockinfix0.2777777777777778em0.2777777777777778emN/A
⥁ U+2941blockinfix0.2777777777777778em0.2777777777777778emN/A
⥶ U+2976blockinfix0.2777777777777778em0.2777777777777778emN/A
⥷ U+2977blockinfix0.2777777777777778em0.2777777777777778emN/A
⥸ U+2978blockinfix0.2777777777777778em0.2777777777777778emN/A
⥹ U+2979blockinfix0.2777777777777778em0.2777777777777778emN/A
⥺ U+297Ablockinfix0.2777777777777778em0.2777777777777778emN/A
⥻ U+297Bblockinfix0.2777777777777778em0.2777777777777778emN/A
⦁ U+2981blockinfix0.2777777777777778em0.2777777777777778emN/A
⦂ U+2982blockinfix0.2777777777777778em0.2777777777777778emN/A
⦶ U+29B6blockinfix0.2777777777777778em0.2777777777777778emN/A
⦷ U+29B7blockinfix0.2777777777777778em0.2777777777777778emN/A
⦹ U+29B9blockinfix0.2777777777777778em0.2777777777777778emN/A
⧀ U+29C0blockinfix0.2777777777777778em0.2777777777777778emN/A
⧁ U+29C1blockinfix0.2777777777777778em0.2777777777777778emN/A
⧎ U+29CEblockinfix0.2777777777777778em0.2777777777777778emN/A
⧏ U+29CFblockinfix0.2777777777777778em0.2777777777777778emN/A
⧐ U+29D0blockinfix0.2777777777777778em0.2777777777777778emN/A
⧑ U+29D1blockinfix0.2777777777777778em0.2777777777777778emN/A
⧒ U+29D2blockinfix0.2777777777777778em0.2777777777777778emN/A
⧓ U+29D3blockinfix0.2777777777777778em0.2777777777777778emN/A
⧟ U+29DFblockinfix0.2777777777777778em0.2777777777777778emN/A
⧡ U+29E1blockinfix0.2777777777777778em0.2777777777777778emN/A
⧣ U+29E3blockinfix0.2777777777777778em0.2777777777777778emN/A
⧤ U+29E4blockinfix0.2777777777777778em0.2777777777777778emN/A
⧥ U+29E5blockinfix0.2777777777777778em0.2777777777777778emN/A
⧦ U+29E6blockinfix0.2777777777777778em0.2777777777777778emN/A
⧴ U+29F4blockinfix0.2777777777777778em0.2777777777777778emN/A
⩦ U+2A66blockinfix0.2777777777777778em0.2777777777777778emN/A
⩧ U+2A67blockinfix0.2777777777777778em0.2777777777777778emN/A
⩨ U+2A68blockinfix0.2777777777777778em0.2777777777777778emN/A
⩩ U+2A69blockinfix0.2777777777777778em0.2777777777777778emN/A
⩪ U+2A6Ablockinfix0.2777777777777778em0.2777777777777778emN/A
⩫ U+2A6Bblockinfix0.2777777777777778em0.2777777777777778emN/A
⩬ U+2A6Cblockinfix0.2777777777777778em0.2777777777777778emN/A
⩭ U+2A6Dblockinfix0.2777777777777778em0.2777777777777778emN/A
⩮ U+2A6Eblockinfix0.2777777777777778em0.2777777777777778emN/A
⩯ U+2A6Fblockinfix0.2777777777777778em0.2777777777777778emN/A
⩰ U+2A70blockinfix0.2777777777777778em0.2777777777777778emN/A
⩱ U+2A71blockinfix0.2777777777777778em0.2777777777777778emN/A
⩲ U+2A72blockinfix0.2777777777777778em0.2777777777777778emN/A
⩳ U+2A73blockinfix0.2777777777777778em0.2777777777777778emN/A
⩴ U+2A74blockinfix0.2777777777777778em0.2777777777777778emN/A
⩵ U+2A75blockinfix0.2777777777777778em0.2777777777777778emN/A
⩶ U+2A76blockinfix0.2777777777777778em0.2777777777777778emN/A
⩷ U+2A77blockinfix0.2777777777777778em0.2777777777777778emN/A
⩸ U+2A78blockinfix0.2777777777777778em0.2777777777777778emN/A
⩹ U+2A79blockinfix0.2777777777777778em0.2777777777777778emN/A
⩺ U+2A7Ablockinfix0.2777777777777778em0.2777777777777778emN/A
⩻ U+2A7Bblockinfix0.2777777777777778em0.2777777777777778emN/A
⩼ U+2A7Cblockinfix0.2777777777777778em0.2777777777777778emN/A
⩽ U+2A7Dblockinfix0.2777777777777778em0.2777777777777778emN/A
⩾ U+2A7Eblockinfix0.2777777777777778em0.2777777777777778emN/A
⩿ U+2A7Fblockinfix0.2777777777777778em0.2777777777777778emN/A
⪀ U+2A80blockinfix0.2777777777777778em0.2777777777777778emN/A
⪁ U+2A81blockinfix0.2777777777777778em0.2777777777777778emN/A
⪂ U+2A82blockinfix0.2777777777777778em0.2777777777777778emN/A
⪃ U+2A83blockinfix0.2777777777777778em0.2777777777777778emN/A
⪄ U+2A84blockinfix0.2777777777777778em0.2777777777777778emN/A
⪅ U+2A85blockinfix0.2777777777777778em0.2777777777777778emN/A
⪆ U+2A86blockinfix0.2777777777777778em0.2777777777777778emN/A
⪇ U+2A87blockinfix0.2777777777777778em0.2777777777777778emN/A
⪈ U+2A88blockinfix0.2777777777777778em0.2777777777777778emN/A
⪉ U+2A89blockinfix0.2777777777777778em0.2777777777777778emN/A
⪊ U+2A8Ablockinfix0.2777777777777778em0.2777777777777778emN/A
⪋ U+2A8Bblockinfix0.2777777777777778em0.2777777777777778emN/A
⪌ U+2A8Cblockinfix0.2777777777777778em0.2777777777777778emN/A
⪍ U+2A8Dblockinfix0.2777777777777778em0.2777777777777778emN/A
⪎ U+2A8Eblockinfix0.2777777777777778em0.2777777777777778emN/A
⪏ U+2A8Fblockinfix0.2777777777777778em0.2777777777777778emN/A
⪐ U+2A90blockinfix0.2777777777777778em0.2777777777777778emN/A
⪑ U+2A91blockinfix0.2777777777777778em0.2777777777777778emN/A
⪒ U+2A92blockinfix0.2777777777777778em0.2777777777777778emN/A
⪓ U+2A93blockinfix0.2777777777777778em0.2777777777777778emN/A
⪔ U+2A94blockinfix0.2777777777777778em0.2777777777777778emN/A
⪕ U+2A95blockinfix0.2777777777777778em0.2777777777777778emN/A
⪖ U+2A96blockinfix0.2777777777777778em0.2777777777777778emN/A
⪗ U+2A97blockinfix0.2777777777777778em0.2777777777777778emN/A
⪘ U+2A98blockinfix0.2777777777777778em0.2777777777777778emN/A
⪙ U+2A99blockinfix0.2777777777777778em0.2777777777777778emN/A
⪚ U+2A9Ablockinfix0.2777777777777778em0.2777777777777778emN/A
⪛ U+2A9Bblockinfix0.2777777777777778em0.2777777777777778emN/A
⪜ U+2A9Cblockinfix0.2777777777777778em0.2777777777777778emN/A
⪝ U+2A9Dblockinfix0.2777777777777778em0.2777777777777778emN/A
⪞ U+2A9Eblockinfix0.2777777777777778em0.2777777777777778emN/A
⪟ U+2A9Fblockinfix0.2777777777777778em0.2777777777777778emN/A
⪠ U+2AA0blockinfix0.2777777777777778em0.2777777777777778emN/A
⪡ U+2AA1blockinfix0.2777777777777778em0.2777777777777778emN/A
⪢ U+2AA2blockinfix0.2777777777777778em0.2777777777777778emN/A
⪣ U+2AA3blockinfix0.2777777777777778em0.2777777777777778emN/A
⪤ U+2AA4blockinfix0.2777777777777778em0.2777777777777778emN/A
⪥ U+2AA5blockinfix0.2777777777777778em0.2777777777777778emN/A
⪦ U+2AA6blockinfix0.2777777777777778em0.2777777777777778emN/A
⪧ U+2AA7blockinfix0.2777777777777778em0.2777777777777778emN/A
⪨ U+2AA8blockinfix0.2777777777777778em0.2777777777777778emN/A
⪩ U+2AA9blockinfix0.2777777777777778em0.2777777777777778emN/A
⪪ U+2AAAblockinfix0.2777777777777778em0.2777777777777778emN/A
⪫ U+2AABblockinfix0.2777777777777778em0.2777777777777778emN/A
⪬ U+2AACblockinfix0.2777777777777778em0.2777777777777778emN/A
⪭ U+2AADblockinfix0.2777777777777778em0.2777777777777778emN/A
⪮ U+2AAEblockinfix0.2777777777777778em0.2777777777777778emN/A
⪯ U+2AAFblockinfix0.2777777777777778em0.2777777777777778emN/A
⪰ U+2AB0blockinfix0.2777777777777778em0.2777777777777778emN/A
⪱ U+2AB1blockinfix0.2777777777777778em0.2777777777777778emN/A
⪲ U+2AB2blockinfix0.2777777777777778em0.2777777777777778emN/A
⪳ U+2AB3blockinfix0.2777777777777778em0.2777777777777778emN/A
⪴ U+2AB4blockinfix0.2777777777777778em0.2777777777777778emN/A
⪵ U+2AB5blockinfix0.2777777777777778em0.2777777777777778emN/A
⪶ U+2AB6blockinfix0.2777777777777778em0.2777777777777778emN/A
⪷ U+2AB7blockinfix0.2777777777777778em0.2777777777777778emN/A
⪸ U+2AB8blockinfix0.2777777777777778em0.2777777777777778emN/A
⪹ U+2AB9blockinfix0.2777777777777778em0.2777777777777778emN/A
⪺ U+2ABAblockinfix0.2777777777777778em0.2777777777777778emN/A
⪻ U+2ABBblockinfix0.2777777777777778em0.2777777777777778emN/A
⪼ U+2ABCblockinfix0.2777777777777778em0.2777777777777778emN/A
⪽ U+2ABDblockinfix0.2777777777777778em0.2777777777777778emN/A
⪾ U+2ABEblockinfix0.2777777777777778em0.2777777777777778emN/A
⪿ U+2ABFblockinfix0.2777777777777778em0.2777777777777778emN/A
⫀ U+2AC0blockinfix0.2777777777777778em0.2777777777777778emN/A
⫁ U+2AC1blockinfix0.2777777777777778em0.2777777777777778emN/A
⫂ U+2AC2blockinfix0.2777777777777778em0.2777777777777778emN/A
⫃ U+2AC3blockinfix0.2777777777777778em0.2777777777777778emN/A
⫄ U+2AC4blockinfix0.2777777777777778em0.2777777777777778emN/A
⫅ U+2AC5blockinfix0.2777777777777778em0.2777777777777778emN/A
⫆ U+2AC6blockinfix0.2777777777777778em0.2777777777777778emN/A
⫇ U+2AC7blockinfix0.2777777777777778em0.2777777777777778emN/A
⫈ U+2AC8blockinfix0.2777777777777778em0.2777777777777778emN/A
⫉ U+2AC9blockinfix0.2777777777777778em0.2777777777777778emN/A
⫊ U+2ACAblockinfix0.2777777777777778em0.2777777777777778emN/A
⫋ U+2ACBblockinfix0.2777777777777778em0.2777777777777778emN/A
⫌ U+2ACCblockinfix0.2777777777777778em0.2777777777777778emN/A
⫍ U+2ACDblockinfix0.2777777777777778em0.2777777777777778emN/A
⫎ U+2ACEblockinfix0.2777777777777778em0.2777777777777778emN/A
⫏ U+2ACFblockinfix0.2777777777777778em0.2777777777777778emN/A
⫐ U+2AD0blockinfix0.2777777777777778em0.2777777777777778emN/A
⫑ U+2AD1blockinfix0.2777777777777778em0.2777777777777778emN/A
⫒ U+2AD2blockinfix0.2777777777777778em0.2777777777777778emN/A
⫓ U+2AD3blockinfix0.2777777777777778em0.2777777777777778emN/A
⫔ U+2AD4blockinfix0.2777777777777778em0.2777777777777778emN/A
⫕ U+2AD5blockinfix0.2777777777777778em0.2777777777777778emN/A
⫖ U+2AD6blockinfix0.2777777777777778em0.2777777777777778emN/A
⫗ U+2AD7blockinfix0.2777777777777778em0.2777777777777778emN/A
⫘ U+2AD8blockinfix0.2777777777777778em0.2777777777777778emN/A
⫙ U+2AD9blockinfix0.2777777777777778em0.2777777777777778emN/A
⫚ U+2ADAblockinfix0.2777777777777778em0.2777777777777778emN/A
⫞ U+2ADEblockinfix0.2777777777777778em0.2777777777777778emN/A
⫟ U+2ADFblockinfix0.2777777777777778em0.2777777777777778emN/A
⫠ U+2AE0blockinfix0.2777777777777778em0.2777777777777778emN/A
⫡ U+2AE1blockinfix0.2777777777777778em0.2777777777777778emN/A
⫢ U+2AE2blockinfix0.2777777777777778em0.2777777777777778emN/A
⫣ U+2AE3blockinfix0.2777777777777778em0.2777777777777778emN/A
⫤ U+2AE4blockinfix0.2777777777777778em0.2777777777777778emN/A
⫥ U+2AE5blockinfix0.2777777777777778em0.2777777777777778emN/A
⫦ U+2AE6blockinfix0.2777777777777778em0.2777777777777778emN/A
⫧ U+2AE7blockinfix0.2777777777777778em0.2777777777777778emN/A
⫨ U+2AE8blockinfix0.2777777777777778em0.2777777777777778emN/A
⫩ U+2AE9blockinfix0.2777777777777778em0.2777777777777778emN/A
⫪ U+2AEAblockinfix0.2777777777777778em0.2777777777777778emN/A
⫫ U+2AEBblockinfix0.2777777777777778em0.2777777777777778emN/A
⫮ U+2AEEblockinfix0.2777777777777778em0.2777777777777778emN/A
⫲ U+2AF2blockinfix0.2777777777777778em0.2777777777777778emN/A
⫳ U+2AF3blockinfix0.2777777777777778em0.2777777777777778emN/A
⫴ U+2AF4blockinfix0.2777777777777778em0.2777777777777778emN/A
⫵ U+2AF5blockinfix0.2777777777777778em0.2777777777777778emN/A
⫷ U+2AF7blockinfix0.2777777777777778em0.2777777777777778emN/A
⫸ U+2AF8blockinfix0.2777777777777778em0.2777777777777778emN/A
⫹ U+2AF9blockinfix0.2777777777777778em0.2777777777777778emN/A
⫺ U+2AFAblockinfix0.2777777777777778em0.2777777777777778emN/A
⬀ U+2B00blockinfix0.2777777777777778em0.2777777777777778emN/A
⬁ U+2B01blockinfix0.2777777777777778em0.2777777777777778emN/A
⬂ U+2B02blockinfix0.2777777777777778em0.2777777777777778emN/A
⬃ U+2B03blockinfix0.2777777777777778em0.2777777777777778emN/A
⬈ U+2B08blockinfix0.2777777777777778em0.2777777777777778emN/A
⬉ U+2B09blockinfix0.2777777777777778em0.2777777777777778emN/A
⬊ U+2B0Ablockinfix0.2777777777777778em0.2777777777777778emN/A
⬋ U+2B0Bblockinfix0.2777777777777778em0.2777777777777778emN/A
⬿ U+2B3Fblockinfix0.2777777777777778em0.2777777777777778emN/A
⭍ U+2B4Dblockinfix0.2777777777777778em0.2777777777777778emN/A
⭎ U+2B4Eblockinfix0.2777777777777778em0.2777777777777778emN/A
⭏ U+2B4Fblockinfix0.2777777777777778em0.2777777777777778emN/A
⭚ U+2B5Ablockinfix0.2777777777777778em0.2777777777777778emN/A
⭛ U+2B5Bblockinfix0.2777777777777778em0.2777777777777778emN/A
⭜ U+2B5Cblockinfix0.2777777777777778em0.2777777777777778emN/A
⭝ U+2B5Dblockinfix0.2777777777777778em0.2777777777777778emN/A
⭞ U+2B5Eblockinfix0.2777777777777778em0.2777777777777778emN/A
⭟ U+2B5Fblockinfix0.2777777777777778em0.2777777777777778emN/A
⭦ U+2B66blockinfix0.2777777777777778em0.2777777777777778emN/A
⭧ U+2B67blockinfix0.2777777777777778em0.2777777777777778emN/A
⭨ U+2B68blockinfix0.2777777777777778em0.2777777777777778emN/A
⭩ U+2B69blockinfix0.2777777777777778em0.2777777777777778emN/A
⭮ U+2B6Eblockinfix0.2777777777777778em0.2777777777777778emN/A
⭯ U+2B6Fblockinfix0.2777777777777778em0.2777777777777778emN/A
⭶ U+2B76blockinfix0.2777777777777778em0.2777777777777778emN/A
⭷ U+2B77blockinfix0.2777777777777778em0.2777777777777778emN/A
⭸ U+2B78blockinfix0.2777777777777778em0.2777777777777778emN/A
⭹ U+2B79blockinfix0.2777777777777778em0.2777777777777778emN/A
⮈ U+2B88blockinfix0.2777777777777778em0.2777777777777778emN/A
⮉ U+2B89blockinfix0.2777777777777778em0.2777777777777778emN/A
⮊ U+2B8Ablockinfix0.2777777777777778em0.2777777777777778emN/A
⮋ U+2B8Bblockinfix0.2777777777777778em0.2777777777777778emN/A
⮌ U+2B8Cblockinfix0.2777777777777778em0.2777777777777778emN/A
⮍ U+2B8Dblockinfix0.2777777777777778em0.2777777777777778emN/A
⮎ U+2B8Eblockinfix0.2777777777777778em0.2777777777777778emN/A
⮏ U+2B8Fblockinfix0.2777777777777778em0.2777777777777778emN/A
⮔ U+2B94blockinfix0.2777777777777778em0.2777777777777778emN/A
⮰ U+2BB0blockinfix0.2777777777777778em0.2777777777777778emN/A
⮱ U+2BB1blockinfix0.2777777777777778em0.2777777777777778emN/A
⮲ U+2BB2blockinfix0.2777777777777778em0.2777777777777778emN/A
⮳ U+2BB3blockinfix0.2777777777777778em0.2777777777777778emN/A
⮴ U+2BB4blockinfix0.2777777777777778em0.2777777777777778emN/A
⮵ U+2BB5blockinfix0.2777777777777778em0.2777777777777778emN/A
⮶ U+2BB6blockinfix0.2777777777777778em0.2777777777777778emN/A
⮷ U+2BB7blockinfix0.2777777777777778em0.2777777777777778emN/A
⯑ U+2BD1blockinfix0.2777777777777778em0.2777777777777778emN/A
String != U+0021 U+003Dblockinfix0.2777777777777778em0.2777777777777778emN/A
String *= U+002A U+003Dblockinfix0.2777777777777778em0.2777777777777778emN/A
String += U+002B U+003Dblockinfix0.2777777777777778em0.2777777777777778emN/A
String -= U+002D U+003Dblockinfix0.2777777777777778em0.2777777777777778emN/A
String -> U+002D U+003Eblockinfix0.2777777777777778em0.2777777777777778emN/A
String // U+002F U+002Fblockinfix0.2777777777777778em0.2777777777777778emN/A
String /= U+002F U+003Dblockinfix0.2777777777777778em0.2777777777777778emN/A
String := U+003A U+003Dblockinfix0.2777777777777778em0.2777777777777778emN/A
String <= U+003C U+003Dblockinfix0.2777777777777778em0.2777777777777778emN/A
String == U+003D U+003Dblockinfix0.2777777777777778em0.2777777777777778emN/A
String >= U+003E U+003Dblockinfix0.2777777777777778em0.2777777777777778emN/A
String || U+007C U+007Cblockinfix0.2777777777777778em0.2777777777777778emfence
← U+2190inlineinfix0.2777777777777778em0.2777777777777778emstretchy
↑ U+2191blockinfix0.2777777777777778em0.2777777777777778emstretchy
→ U+2192inlineinfix0.2777777777777778em0.2777777777777778emstretchy
↓ U+2193blockinfix0.2777777777777778em0.2777777777777778emstretchy
↔ U+2194inlineinfix0.2777777777777778em0.2777777777777778emstretchy
↕ U+2195blockinfix0.2777777777777778em0.2777777777777778emstretchy
↚ U+219Ainlineinfix0.2777777777777778em0.2777777777777778emstretchy
↛ U+219Binlineinfix0.2777777777777778em0.2777777777777778emstretchy
↜ U+219Cinlineinfix0.2777777777777778em0.2777777777777778emstretchy
↝ U+219Dinlineinfix0.2777777777777778em0.2777777777777778emstretchy
↞ U+219Einlineinfix0.2777777777777778em0.2777777777777778emstretchy
↟ U+219Fblockinfix0.2777777777777778em0.2777777777777778emstretchy
↠ U+21A0inlineinfix0.2777777777777778em0.2777777777777778emstretchy
↡ U+21A1blockinfix0.2777777777777778em0.2777777777777778emstretchy
↢ U+21A2inlineinfix0.2777777777777778em0.2777777777777778emstretchy
↣ U+21A3inlineinfix0.2777777777777778em0.2777777777777778emstretchy
↤ U+21A4inlineinfix0.2777777777777778em0.2777777777777778emstretchy
↥ U+21A5blockinfix0.2777777777777778em0.2777777777777778emstretchy
↦ U+21A6inlineinfix0.2777777777777778em0.2777777777777778emstretchy
↧ U+21A7blockinfix0.2777777777777778em0.2777777777777778emstretchy
↨ U+21A8blockinfix0.2777777777777778em0.2777777777777778emstretchy
↩ U+21A9inlineinfix0.2777777777777778em0.2777777777777778emstretchy
↪ U+21AAinlineinfix0.2777777777777778em0.2777777777777778emstretchy
↫ U+21ABinlineinfix0.2777777777777778em0.2777777777777778emstretchy
↬ U+21ACinlineinfix0.2777777777777778em0.2777777777777778emstretchy
↭ U+21ADinlineinfix0.2777777777777778em0.2777777777777778emstretchy
↮ U+21AEinlineinfix0.2777777777777778em0.2777777777777778emstretchy
↰ U+21B0blockinfix0.2777777777777778em0.2777777777777778emstretchy
↱ U+21B1blockinfix0.2777777777777778em0.2777777777777778emstretchy
↲ U+21B2blockinfix0.2777777777777778em0.2777777777777778emstretchy
↳ U+21B3blockinfix0.2777777777777778em0.2777777777777778emstretchy
↴ U+21B4inlineinfix0.2777777777777778em0.2777777777777778emstretchy
↵ U+21B5blockinfix0.2777777777777778em0.2777777777777778emstretchy
↹ U+21B9inlineinfix0.2777777777777778em0.2777777777777778emstretchy
↼ U+21BCinlineinfix0.2777777777777778em0.2777777777777778emstretchy
↽ U+21BDinlineinfix0.2777777777777778em0.2777777777777778emstretchy
↾ U+21BEblockinfix0.2777777777777778em0.2777777777777778emstretchy
↿ U+21BFblockinfix0.2777777777777778em0.2777777777777778emstretchy
⇀ U+21C0inlineinfix0.2777777777777778em0.2777777777777778emstretchy
⇁ U+21C1inlineinfix0.2777777777777778em0.2777777777777778emstretchy
⇂ U+21C2blockinfix0.2777777777777778em0.2777777777777778emstretchy
⇃ U+21C3blockinfix0.2777777777777778em0.2777777777777778emstretchy
⇄ U+21C4inlineinfix0.2777777777777778em0.2777777777777778emstretchy
⇅ U+21C5blockinfix0.2777777777777778em0.2777777777777778emstretchy
⇆ U+21C6inlineinfix0.2777777777777778em0.2777777777777778emstretchy
⇇ U+21C7inlineinfix0.2777777777777778em0.2777777777777778emstretchy
⇈ U+21C8blockinfix0.2777777777777778em0.2777777777777778emstretchy
⇉ U+21C9inlineinfix0.2777777777777778em0.2777777777777778emstretchy
⇊ U+21CAblockinfix0.2777777777777778em0.2777777777777778emstretchy
⇋ U+21CBinlineinfix0.2777777777777778em0.2777777777777778emstretchy
⇌ U+21CCinlineinfix0.2777777777777778em0.2777777777777778emstretchy
⇍ U+21CDinlineinfix0.2777777777777778em0.2777777777777778emstretchy
⇎ U+21CEinlineinfix0.2777777777777778em0.2777777777777778emstretchy
⇏ U+21CFinlineinfix0.2777777777777778em0.2777777777777778emstretchy
⇐ U+21D0inlineinfix0.2777777777777778em0.2777777777777778emstretchy
⇑ U+21D1blockinfix0.2777777777777778em0.2777777777777778emstretchy
⇒ U+21D2inlineinfix0.2777777777777778em0.2777777777777778emstretchy
⇓ U+21D3blockinfix0.2777777777777778em0.2777777777777778emstretchy
⇔ U+21D4inlineinfix0.2777777777777778em0.2777777777777778emstretchy
⇕ U+21D5blockinfix0.2777777777777778em0.2777777777777778emstretchy
⇚ U+21DAinlineinfix0.2777777777777778em0.2777777777777778emstretchy
⇛ U+21DBinlineinfix0.2777777777777778em0.2777777777777778emstretchy
⇜ U+21DCinlineinfix0.2777777777777778em0.2777777777777778emstretchy
⇝ U+21DDinlineinfix0.2777777777777778em0.2777777777777778emstretchy
⇞ U+21DEblockinfix0.2777777777777778em0.2777777777777778emstretchy
⇟ U+21DFblockinfix0.2777777777777778em0.2777777777777778emstretchy
⇠ U+21E0inlineinfix0.2777777777777778em0.2777777777777778emstretchy
⇡ U+21E1blockinfix0.2777777777777778em0.2777777777777778emstretchy
⇢ U+21E2inlineinfix0.2777777777777778em0.2777777777777778emstretchy
⇣ U+21E3blockinfix0.2777777777777778em0.2777777777777778emstretchy
⇤ U+21E4inlineinfix0.2777777777777778em0.2777777777777778emstretchy
⇥ U+21E5inlineinfix0.2777777777777778em0.2777777777777778emstretchy
⇦ U+21E6inlineinfix0.2777777777777778em0.2777777777777778emstretchy
⇧ U+21E7blockinfix0.2777777777777778em0.2777777777777778emstretchy
⇨ U+21E8inlineinfix0.2777777777777778em0.2777777777777778emstretchy
⇩ U+21E9blockinfix0.2777777777777778em0.2777777777777778emstretchy
⇪ U+21EAblockinfix0.2777777777777778em0.2777777777777778emstretchy
⇫ U+21EBblockinfix0.2777777777777778em0.2777777777777778emstretchy
⇬ U+21ECblockinfix0.2777777777777778em0.2777777777777778emstretchy
⇭ U+21EDblockinfix0.2777777777777778em0.2777777777777778emstretchy
⇮ U+21EEblockinfix0.2777777777777778em0.2777777777777778emstretchy
⇯ U+21EFblockinfix0.2777777777777778em0.2777777777777778emstretchy
⇰ U+21F0inlineinfix0.2777777777777778em0.2777777777777778emstretchy
⇳ U+21F3blockinfix0.2777777777777778em0.2777777777777778emstretchy
⇴ U+21F4inlineinfix0.2777777777777778em0.2777777777777778emstretchy
⇵ U+21F5blockinfix0.2777777777777778em0.2777777777777778emstretchy
⇶ U+21F6inlineinfix0.2777777777777778em0.2777777777777778emstretchy
⇷ U+21F7inlineinfix0.2777777777777778em0.2777777777777778emstretchy
⇸ U+21F8inlineinfix0.2777777777777778em0.2777777777777778emstretchy
⇹ U+21F9inlineinfix0.2777777777777778em0.2777777777777778emstretchy
⇺ U+21FAinlineinfix0.2777777777777778em0.2777777777777778emstretchy
⇻ U+21FBinlineinfix0.2777777777777778em0.2777777777777778emstretchy
⇼ U+21FCinlineinfix0.2777777777777778em0.2777777777777778emstretchy
⇽ U+21FDinlineinfix0.2777777777777778em0.2777777777777778emstretchy
⇾ U+21FEinlineinfix0.2777777777777778em0.2777777777777778emstretchy
⇿ U+21FFinlineinfix0.2777777777777778em0.2777777777777778emstretchy
➔ U+2794inlineinfix0.2777777777777778em0.2777777777777778emstretchy
➙ U+2799inlineinfix0.2777777777777778em0.2777777777777778emstretchy
➛ U+279Binlineinfix0.2777777777777778em0.2777777777777778emstretchy
➜ U+279Cinlineinfix0.2777777777777778em0.2777777777777778emstretchy
➝ U+279Dinlineinfix0.2777777777777778em0.2777777777777778emstretchy
➞ U+279Einlineinfix0.2777777777777778em0.2777777777777778emstretchy
➟ U+279Finlineinfix0.2777777777777778em0.2777777777777778emstretchy
➠ U+27A0inlineinfix0.2777777777777778em0.2777777777777778emstretchy
➡ U+27A1inlineinfix0.2777777777777778em0.2777777777777778emstretchy
➥ U+27A5inlineinfix0.2777777777777778em0.2777777777777778emstretchy
➦ U+27A6inlineinfix0.2777777777777778em0.2777777777777778emstretchy
➨ U+27A8inlineinfix0.2777777777777778em0.2777777777777778emstretchy
➩ U+27A9inlineinfix0.2777777777777778em0.2777777777777778emstretchy
➪ U+27AAinlineinfix0.2777777777777778em0.2777777777777778emstretchy
➫ U+27ABinlineinfix0.2777777777777778em0.2777777777777778emstretchy
➬ U+27ACinlineinfix0.2777777777777778em0.2777777777777778emstretchy
➭ U+27ADinlineinfix0.2777777777777778em0.2777777777777778emstretchy
➮ U+27AEinlineinfix0.2777777777777778em0.2777777777777778emstretchy
➯ U+27AFinlineinfix0.2777777777777778em0.2777777777777778emstretchy
➱ U+27B1inlineinfix0.2777777777777778em0.2777777777777778emstretchy
➳ U+27B3inlineinfix0.2777777777777778em0.2777777777777778emstretchy
➵ U+27B5inlineinfix0.2777777777777778em0.2777777777777778emstretchy
➸ U+27B8inlineinfix0.2777777777777778em0.2777777777777778emstretchy
➺ U+27BAinlineinfix0.2777777777777778em0.2777777777777778emstretchy
➻ U+27BBinlineinfix0.2777777777777778em0.2777777777777778emstretchy
➼ U+27BCinlineinfix0.2777777777777778em0.2777777777777778emstretchy
➽ U+27BDinlineinfix0.2777777777777778em0.2777777777777778emstretchy
➾ U+27BEinlineinfix0.2777777777777778em0.2777777777777778emstretchy
⟰ U+27F0blockinfix0.2777777777777778em0.2777777777777778emstretchy
⟱ U+27F1blockinfix0.2777777777777778em0.2777777777777778emstretchy
⟴ U+27F4inlineinfix0.2777777777777778em0.2777777777777778emstretchy
⟵ U+27F5inlineinfix0.2777777777777778em0.2777777777777778emstretchy
⟶ U+27F6inlineinfix0.2777777777777778em0.2777777777777778emstretchy
⟷ U+27F7inlineinfix0.2777777777777778em0.2777777777777778emstretchy
⟸ U+27F8inlineinfix0.2777777777777778em0.2777777777777778emstretchy
⟹ U+27F9inlineinfix0.2777777777777778em0.2777777777777778emstretchy
⟺ U+27FAinlineinfix0.2777777777777778em0.2777777777777778emstretchy
⟻ U+27FBinlineinfix0.2777777777777778em0.2777777777777778emstretchy
⟼ U+27FCinlineinfix0.2777777777777778em0.2777777777777778emstretchy
⟽ U+27FDinlineinfix0.2777777777777778em0.2777777777777778emstretchy
⟾ U+27FEinlineinfix0.2777777777777778em0.2777777777777778emstretchy
⟿ U+27FFinlineinfix0.2777777777777778em0.2777777777777778emstretchy
⤀ U+2900inlineinfix0.2777777777777778em0.2777777777777778emstretchy
⤁ U+2901inlineinfix0.2777777777777778em0.2777777777777778emstretchy
⤂ U+2902inlineinfix0.2777777777777778em0.2777777777777778emstretchy
⤃ U+2903inlineinfix0.2777777777777778em0.2777777777777778emstretchy
⤄ U+2904inlineinfix0.2777777777777778em0.2777777777777778emstretchy
⤅ U+2905inlineinfix0.2777777777777778em0.2777777777777778emstretchy
⤆ U+2906inlineinfix0.2777777777777778em0.2777777777777778emstretchy
⤇ U+2907inlineinfix0.2777777777777778em0.2777777777777778emstretchy
⤈ U+2908blockinfix0.2777777777777778em0.2777777777777778emstretchy
⤉ U+2909blockinfix0.2777777777777778em0.2777777777777778emstretchy
⤊ U+290Ablockinfix0.2777777777777778em0.2777777777777778emstretchy
⤋ U+290Bblockinfix0.2777777777777778em0.2777777777777778emstretchy
⤌ U+290Cinlineinfix0.2777777777777778em0.2777777777777778emstretchy
⤍ U+290Dinlineinfix0.2777777777777778em0.2777777777777778emstretchy
⤎ U+290Einlineinfix0.2777777777777778em0.2777777777777778emstretchy
⤏ U+290Finlineinfix0.2777777777777778em0.2777777777777778emstretchy
⤐ U+2910inlineinfix0.2777777777777778em0.2777777777777778emstretchy
⤑ U+2911inlineinfix0.2777777777777778em0.2777777777777778emstretchy
⤒ U+2912blockinfix0.2777777777777778em0.2777777777777778emstretchy
⤓ U+2913blockinfix0.2777777777777778em0.2777777777777778emstretchy
⤔ U+2914inlineinfix0.2777777777777778em0.2777777777777778emstretchy
⤕ U+2915inlineinfix0.2777777777777778em0.2777777777777778emstretchy
⤖ U+2916inlineinfix0.2777777777777778em0.2777777777777778emstretchy
⤗ U+2917inlineinfix0.2777777777777778em0.2777777777777778emstretchy
⤘ U+2918inlineinfix0.2777777777777778em0.2777777777777778emstretchy
⤙ U+2919inlineinfix0.2777777777777778em0.2777777777777778emstretchy
⤚ U+291Ainlineinfix0.2777777777777778em0.2777777777777778emstretchy
⤛ U+291Binlineinfix0.2777777777777778em0.2777777777777778emstretchy
⤜ U+291Cinlineinfix0.2777777777777778em0.2777777777777778emstretchy
⤝ U+291Dinlineinfix0.2777777777777778em0.2777777777777778emstretchy
⤞ U+291Einlineinfix0.2777777777777778em0.2777777777777778emstretchy
⤟ U+291Finlineinfix0.2777777777777778em0.2777777777777778emstretchy
⤠ U+2920inlineinfix0.2777777777777778em0.2777777777777778emstretchy
⤴ U+2934blockinfix0.2777777777777778em0.2777777777777778emstretchy
⤵ U+2935blockinfix0.2777777777777778em0.2777777777777778emstretchy
⤶ U+2936blockinfix0.2777777777777778em0.2777777777777778emstretchy
⤷ U+2937blockinfix0.2777777777777778em0.2777777777777778emstretchy
⥂ U+2942inlineinfix0.2777777777777778em0.2777777777777778emstretchy
⥃ U+2943inlineinfix0.2777777777777778em0.2777777777777778emstretchy
⥄ U+2944inlineinfix0.2777777777777778em0.2777777777777778emstretchy
⥅ U+2945inlineinfix0.2777777777777778em0.2777777777777778emstretchy
⥆ U+2946inlineinfix0.2777777777777778em0.2777777777777778emstretchy
⥇ U+2947inlineinfix0.2777777777777778em0.2777777777777778emstretchy
⥈ U+2948inlineinfix0.2777777777777778em0.2777777777777778emstretchy
⥉ U+2949blockinfix0.2777777777777778em0.2777777777777778emstretchy
⥊ U+294Ainlineinfix0.2777777777777778em0.2777777777777778emstretchy
⥋ U+294Binlineinfix0.2777777777777778em0.2777777777777778emstretchy
⥌ U+294Cblockinfix0.2777777777777778em0.2777777777777778emstretchy
⥍ U+294Dblockinfix0.2777777777777778em0.2777777777777778emstretchy
⥎ U+294Einlineinfix0.2777777777777778em0.2777777777777778emstretchy
⥏ U+294Fblockinfix0.2777777777777778em0.2777777777777778emstretchy
⥐ U+2950inlineinfix0.2777777777777778em0.2777777777777778emstretchy
⥑ U+2951blockinfix0.2777777777777778em0.2777777777777778emstretchy
⥒ U+2952inlineinfix0.2777777777777778em0.2777777777777778emstretchy
⥓ U+2953inlineinfix0.2777777777777778em0.2777777777777778emstretchy
⥔ U+2954blockinfix0.2777777777777778em0.2777777777777778emstretchy
⥕ U+2955blockinfix0.2777777777777778em0.2777777777777778emstretchy
⥖ U+2956inlineinfix0.2777777777777778em0.2777777777777778emstretchy
⥗ U+2957inlineinfix0.2777777777777778em0.2777777777777778emstretchy
⥘ U+2958blockinfix0.2777777777777778em0.2777777777777778emstretchy
⥙ U+2959blockinfix0.2777777777777778em0.2777777777777778emstretchy
⥚ U+295Ainlineinfix0.2777777777777778em0.2777777777777778emstretchy
⥛ U+295Binlineinfix0.2777777777777778em0.2777777777777778emstretchy
⥜ U+295Cblockinfix0.2777777777777778em0.2777777777777778emstretchy
⥝ U+295Dblockinfix0.2777777777777778em0.2777777777777778emstretchy
⥞ U+295Einlineinfix0.2777777777777778em0.2777777777777778emstretchy
⥟ U+295Finlineinfix0.2777777777777778em0.2777777777777778emstretchy
⥠ U+2960blockinfix0.2777777777777778em0.2777777777777778emstretchy
⥡ U+2961blockinfix0.2777777777777778em0.2777777777777778emstretchy
⥢ U+2962inlineinfix0.2777777777777778em0.2777777777777778emstretchy
⥣ U+2963blockinfix0.2777777777777778em0.2777777777777778emstretchy
⥤ U+2964inlineinfix0.2777777777777778em0.2777777777777778emstretchy
⥥ U+2965blockinfix0.2777777777777778em0.2777777777777778emstretchy
⥦ U+2966inlineinfix0.2777777777777778em0.2777777777777778emstretchy
⥧ U+2967inlineinfix0.2777777777777778em0.2777777777777778emstretchy
⥨ U+2968inlineinfix0.2777777777777778em0.2777777777777778emstretchy
⥩ U+2969inlineinfix0.2777777777777778em0.2777777777777778emstretchy
⥪ U+296Ainlineinfix0.2777777777777778em0.2777777777777778emstretchy
⥫ U+296Binlineinfix0.2777777777777778em0.2777777777777778emstretchy
⥬ U+296Cinlineinfix0.2777777777777778em0.2777777777777778emstretchy
⥭ U+296Dinlineinfix0.2777777777777778em0.2777777777777778emstretchy
⥮ U+296Eblockinfix0.2777777777777778em0.2777777777777778emstretchy
⥯ U+296Fblockinfix0.2777777777777778em0.2777777777777778emstretchy
⥰ U+2970inlineinfix0.2777777777777778em0.2777777777777778emstretchy
⥱ U+2971inlineinfix0.2777777777777778em0.2777777777777778emstretchy
⥲ U+2972inlineinfix0.2777777777777778em0.2777777777777778emstretchy
⥳ U+2973inlineinfix0.2777777777777778em0.2777777777777778emstretchy
⥴ U+2974inlineinfix0.2777777777777778em0.2777777777777778emstretchy
⥵ U+2975inlineinfix0.2777777777777778em0.2777777777777778emstretchy
⥼ U+297Cinlineinfix0.2777777777777778em0.2777777777777778emstretchy
⥽ U+297Dinlineinfix0.2777777777777778em0.2777777777777778emstretchy
⥾ U+297Eblockinfix0.2777777777777778em0.2777777777777778emstretchy
⥿ U+297Fblockinfix0.2777777777777778em0.2777777777777778emstretchy
⬄ U+2B04inlineinfix0.2777777777777778em0.2777777777777778emstretchy
⬅ U+2B05inlineinfix0.2777777777777778em0.2777777777777778emstretchy
⬆ U+2B06blockinfix0.2777777777777778em0.2777777777777778emstretchy
⬇ U+2B07blockinfix0.2777777777777778em0.2777777777777778emstretchy
⬌ U+2B0Cinlineinfix0.2777777777777778em0.2777777777777778emstretchy
⬍ U+2B0Dblockinfix0.2777777777777778em0.2777777777777778emstretchy
⬎ U+2B0Eblockinfix0.2777777777777778em0.2777777777777778emstretchy
⬏ U+2B0Fblockinfix0.2777777777777778em0.2777777777777778emstretchy
⬐ U+2B10blockinfix0.2777777777777778em0.2777777777777778emstretchy
⬑ U+2B11blockinfix0.2777777777777778em0.2777777777777778emstretchy
⬰ U+2B30inlineinfix0.2777777777777778em0.2777777777777778emstretchy
⬱ U+2B31inlineinfix0.2777777777777778em0.2777777777777778emstretchy
⬲ U+2B32inlineinfix0.2777777777777778em0.2777777777777778emstretchy
⬳ U+2B33inlineinfix0.2777777777777778em0.2777777777777778emstretchy
⬴ U+2B34inlineinfix0.2777777777777778em0.2777777777777778emstretchy
⬵ U+2B35inlineinfix0.2777777777777778em0.2777777777777778emstretchy
⬶ U+2B36inlineinfix0.2777777777777778em0.2777777777777778emstretchy
⬷ U+2B37inlineinfix0.2777777777777778em0.2777777777777778emstretchy
⬸ U+2B38inlineinfix0.2777777777777778em0.2777777777777778emstretchy
⬹ U+2B39inlineinfix0.2777777777777778em0.2777777777777778emstretchy
⬺ U+2B3Ainlineinfix0.2777777777777778em0.2777777777777778emstretchy
⬻ U+2B3Binlineinfix0.2777777777777778em0.2777777777777778emstretchy
⬼ U+2B3Cinlineinfix0.2777777777777778em0.2777777777777778emstretchy
⬽ U+2B3Dinlineinfix0.2777777777777778em0.2777777777777778emstretchy
⬾ U+2B3Einlineinfix0.2777777777777778em0.2777777777777778emstretchy
⭀ U+2B40inlineinfix0.2777777777777778em0.2777777777777778emstretchy
⭁ U+2B41inlineinfix0.2777777777777778em0.2777777777777778emstretchy
⭂ U+2B42inlineinfix0.2777777777777778em0.2777777777777778emstretchy
⭃ U+2B43inlineinfix0.2777777777777778em0.2777777777777778emstretchy
⭄ U+2B44inlineinfix0.2777777777777778em0.2777777777777778emstretchy
⭅ U+2B45inlineinfix0.2777777777777778em0.2777777777777778emstretchy
⭆ U+2B46inlineinfix0.2777777777777778em0.2777777777777778emstretchy
⭇ U+2B47inlineinfix0.2777777777777778em0.2777777777777778emstretchy
⭈ U+2B48inlineinfix0.2777777777777778em0.2777777777777778emstretchy
⭉ U+2B49inlineinfix0.2777777777777778em0.2777777777777778emstretchy
⭊ U+2B4Ainlineinfix0.2777777777777778em0.2777777777777778emstretchy
⭋ U+2B4Binlineinfix0.2777777777777778em0.2777777777777778emstretchy
⭌ U+2B4Cinlineinfix0.2777777777777778em0.2777777777777778emstretchy
⭠ U+2B60inlineinfix0.2777777777777778em0.2777777777777778emstretchy
⭡ U+2B61blockinfix0.2777777777777778em0.2777777777777778emstretchy
⭢ U+2B62inlineinfix0.2777777777777778em0.2777777777777778emstretchy
⭣ U+2B63blockinfix0.2777777777777778em0.2777777777777778emstretchy
⭤ U+2B64inlineinfix0.2777777777777778em0.2777777777777778emstretchy
⭥ U+2B65blockinfix0.2777777777777778em0.2777777777777778emstretchy
⭪ U+2B6Ainlineinfix0.2777777777777778em0.2777777777777778emstretchy
⭫ U+2B6Bblockinfix0.2777777777777778em0.2777777777777778emstretchy
⭬ U+2B6Cinlineinfix0.2777777777777778em0.2777777777777778emstretchy
⭭ U+2B6Dblockinfix0.2777777777777778em0.2777777777777778emstretchy
⭰ U+2B70inlineinfix0.2777777777777778em0.2777777777777778emstretchy
⭱ U+2B71blockinfix0.2777777777777778em0.2777777777777778emstretchy
⭲ U+2B72inlineinfix0.2777777777777778em0.2777777777777778emstretchy
⭳ U+2B73blockinfix0.2777777777777778em0.2777777777777778emstretchy
⭺ U+2B7Ainlineinfix0.2777777777777778em0.2777777777777778emstretchy
⭻ U+2B7Bblockinfix0.2777777777777778em0.2777777777777778emstretchy
⭼ U+2B7Cinlineinfix0.2777777777777778em0.2777777777777778emstretchy
⭽ U+2B7Dblockinfix0.2777777777777778em0.2777777777777778emstretchy
⮀ U+2B80inlineinfix0.2777777777777778em0.2777777777777778emstretchy
⮁ U+2B81blockinfix0.2777777777777778em0.2777777777777778emstretchy
⮂ U+2B82inlineinfix0.2777777777777778em0.2777777777777778emstretchy
⮃ U+2B83blockinfix0.2777777777777778em0.2777777777777778emstretchy
⮄ U+2B84inlineinfix0.2777777777777778em0.2777777777777778emstretchy
⮅ U+2B85blockinfix0.2777777777777778em0.2777777777777778emstretchy
⮆ U+2B86inlineinfix0.2777777777777778em0.2777777777777778emstretchy
⮇ U+2B87blockinfix0.2777777777777778em0.2777777777777778emstretchy
⮕ U+2B95inlineinfix0.2777777777777778em0.2777777777777778emstretchy
⮠ U+2BA0blockinfix0.2777777777777778em0.2777777777777778emstretchy
⮡ U+2BA1blockinfix0.2777777777777778em0.2777777777777778emstretchy
⮢ U+2BA2blockinfix0.2777777777777778em0.2777777777777778emstretchy
⮣ U+2BA3blockinfix0.2777777777777778em0.2777777777777778emstretchy
⮤ U+2BA4blockinfix0.2777777777777778em0.2777777777777778emstretchy
⮥ U+2BA5blockinfix0.2777777777777778em0.2777777777777778emstretchy
⮦ U+2BA6blockinfix0.2777777777777778em0.2777777777777778emstretchy
⮧ U+2BA7blockinfix0.2777777777777778em0.2777777777777778emstretchy
⮨ U+2BA8blockinfix0.2777777777777778em0.2777777777777778emstretchy
⮩ U+2BA9blockinfix0.2777777777777778em0.2777777777777778emstretchy
⮪ U+2BAAblockinfix0.2777777777777778em0.2777777777777778emstretchy
⮫ U+2BABblockinfix0.2777777777777778em0.2777777777777778emstretchy
⮬ U+2BACblockinfix0.2777777777777778em0.2777777777777778emstretchy
⮭ U+2BADblockinfix0.2777777777777778em0.2777777777777778emstretchy
⮮ U+2BAEblockinfix0.2777777777777778em0.2777777777777778emstretchy
⮯ U+2BAFblockinfix0.2777777777777778em0.2777777777777778emstretchy
⮸ U+2BB8blockinfix0.2777777777777778em0.2777777777777778emstretchy
+ U+002Bblockinfix0.2222222222222222em0.2222222222222222emN/A
- U+002Dblockinfix0.2222222222222222em0.2222222222222222emN/A
/ U+002Fblockinfix0.2222222222222222em0.2222222222222222emN/A
± U+00B1blockinfix0.2222222222222222em0.2222222222222222emN/A
÷ U+00F7blockinfix0.2222222222222222em0.2222222222222222emN/A
⁄ U+2044blockinfix0.2222222222222222em0.2222222222222222emN/A
− U+2212blockinfix0.2222222222222222em0.2222222222222222emN/A
∓ U+2213blockinfix0.2222222222222222em0.2222222222222222emN/A
∔ U+2214blockinfix0.2222222222222222em0.2222222222222222emN/A
∕ U+2215blockinfix0.2222222222222222em0.2222222222222222emN/A
∖ U+2216blockinfix0.2222222222222222em0.2222222222222222emN/A
∧ U+2227blockinfix0.2222222222222222em0.2222222222222222emN/A
∨ U+2228blockinfix0.2222222222222222em0.2222222222222222emN/A
∩ U+2229blockinfix0.2222222222222222em0.2222222222222222emN/A
∪ U+222Ablockinfix0.2222222222222222em0.2222222222222222emN/A
∶ U+2236blockinfix0.2222222222222222em0.2222222222222222emN/A
∸ U+2238blockinfix0.2222222222222222em0.2222222222222222emN/A
⊌ U+228Cblockinfix0.2222222222222222em0.2222222222222222emN/A
⊍ U+228Dblockinfix0.2222222222222222em0.2222222222222222emN/A
⊎ U+228Eblockinfix0.2222222222222222em0.2222222222222222emN/A
⊓ U+2293blockinfix0.2222222222222222em0.2222222222222222emN/A
⊔ U+2294blockinfix0.2222222222222222em0.2222222222222222emN/A
⊕ U+2295blockinfix0.2222222222222222em0.2222222222222222emN/A
⊖ U+2296blockinfix0.2222222222222222em0.2222222222222222emN/A
⊘ U+2298blockinfix0.2222222222222222em0.2222222222222222emN/A
⊝ U+229Dblockinfix0.2222222222222222em0.2222222222222222emN/A
⊞ U+229Eblockinfix0.2222222222222222em0.2222222222222222emN/A
⊟ U+229Fblockinfix0.2222222222222222em0.2222222222222222emN/A
⊻ U+22BBblockinfix0.2222222222222222em0.2222222222222222emN/A
⊼ U+22BCblockinfix0.2222222222222222em0.2222222222222222emN/A
⊽ U+22BDblockinfix0.2222222222222222em0.2222222222222222emN/A
⋎ U+22CEblockinfix0.2222222222222222em0.2222222222222222emN/A
⋏ U+22CFblockinfix0.2222222222222222em0.2222222222222222emN/A
⋒ U+22D2blockinfix0.2222222222222222em0.2222222222222222emN/A
⋓ U+22D3blockinfix0.2222222222222222em0.2222222222222222emN/A
➕ U+2795blockinfix0.2222222222222222em0.2222222222222222emN/A
➖ U+2796blockinfix0.2222222222222222em0.2222222222222222emN/A
➗ U+2797blockinfix0.2222222222222222em0.2222222222222222emN/A
⦸ U+29B8blockinfix0.2222222222222222em0.2222222222222222emN/A
⦼ U+29BCblockinfix0.2222222222222222em0.2222222222222222emN/A
⧄ U+29C4blockinfix0.2222222222222222em0.2222222222222222emN/A
⧅ U+29C5blockinfix0.2222222222222222em0.2222222222222222emN/A
⧵ U+29F5blockinfix0.2222222222222222em0.2222222222222222emN/A
⧶ U+29F6blockinfix0.2222222222222222em0.2222222222222222emN/A
⧷ U+29F7blockinfix0.2222222222222222em0.2222222222222222emN/A
⧸ U+29F8blockinfix0.2222222222222222em0.2222222222222222emN/A
⧹ U+29F9blockinfix0.2222222222222222em0.2222222222222222emN/A
⧺ U+29FAblockinfix0.2222222222222222em0.2222222222222222emN/A
⧻ U+29FBblockinfix0.2222222222222222em0.2222222222222222emN/A
⨟ U+2A1Fblockinfix0.2222222222222222em0.2222222222222222emN/A
⨠ U+2A20blockinfix0.2222222222222222em0.2222222222222222emN/A
⨡ U+2A21blockinfix0.2222222222222222em0.2222222222222222emN/A
⨢ U+2A22blockinfix0.2222222222222222em0.2222222222222222emN/A
⨣ U+2A23blockinfix0.2222222222222222em0.2222222222222222emN/A
⨤ U+2A24blockinfix0.2222222222222222em0.2222222222222222emN/A
⨥ U+2A25blockinfix0.2222222222222222em0.2222222222222222emN/A
⨦ U+2A26blockinfix0.2222222222222222em0.2222222222222222emN/A
⨧ U+2A27blockinfix0.2222222222222222em0.2222222222222222emN/A
⨨ U+2A28blockinfix0.2222222222222222em0.2222222222222222emN/A
⨩ U+2A29blockinfix0.2222222222222222em0.2222222222222222emN/A
⨪ U+2A2Ablockinfix0.2222222222222222em0.2222222222222222emN/A
⨫ U+2A2Bblockinfix0.2222222222222222em0.2222222222222222emN/A
⨬ U+2A2Cblockinfix0.2222222222222222em0.2222222222222222emN/A
⨭ U+2A2Dblockinfix0.2222222222222222em0.2222222222222222emN/A
⨮ U+2A2Eblockinfix0.2222222222222222em0.2222222222222222emN/A
⨸ U+2A38blockinfix0.2222222222222222em0.2222222222222222emN/A
⨹ U+2A39blockinfix0.2222222222222222em0.2222222222222222emN/A
⨺ U+2A3Ablockinfix0.2222222222222222em0.2222222222222222emN/A
⨾ U+2A3Eblockinfix0.2222222222222222em0.2222222222222222emN/A
⩀ U+2A40blockinfix0.2222222222222222em0.2222222222222222emN/A
⩁ U+2A41blockinfix0.2222222222222222em0.2222222222222222emN/A
⩂ U+2A42blockinfix0.2222222222222222em0.2222222222222222emN/A
⩃ U+2A43blockinfix0.2222222222222222em0.2222222222222222emN/A
⩄ U+2A44blockinfix0.2222222222222222em0.2222222222222222emN/A
⩅ U+2A45blockinfix0.2222222222222222em0.2222222222222222emN/A
⩆ U+2A46blockinfix0.2222222222222222em0.2222222222222222emN/A
⩇ U+2A47blockinfix0.2222222222222222em0.2222222222222222emN/A
⩈ U+2A48blockinfix0.2222222222222222em0.2222222222222222emN/A
⩉ U+2A49blockinfix0.2222222222222222em0.2222222222222222emN/A
⩊ U+2A4Ablockinfix0.2222222222222222em0.2222222222222222emN/A
⩋ U+2A4Bblockinfix0.2222222222222222em0.2222222222222222emN/A
⩌ U+2A4Cblockinfix0.2222222222222222em0.2222222222222222emN/A
⩍ U+2A4Dblockinfix0.2222222222222222em0.2222222222222222emN/A
⩎ U+2A4Eblockinfix0.2222222222222222em0.2222222222222222emN/A
⩏ U+2A4Fblockinfix0.2222222222222222em0.2222222222222222emN/A
⩑ U+2A51blockinfix0.2222222222222222em0.2222222222222222emN/A
⩒ U+2A52blockinfix0.2222222222222222em0.2222222222222222emN/A
⩓ U+2A53blockinfix0.2222222222222222em0.2222222222222222emN/A
⩔ U+2A54blockinfix0.2222222222222222em0.2222222222222222emN/A
⩕ U+2A55blockinfix0.2222222222222222em0.2222222222222222emN/A
⩖ U+2A56blockinfix0.2222222222222222em0.2222222222222222emN/A
⩗ U+2A57blockinfix0.2222222222222222em0.2222222222222222emN/A
⩘ U+2A58blockinfix0.2222222222222222em0.2222222222222222emN/A
⩙ U+2A59blockinfix0.2222222222222222em0.2222222222222222emN/A
⩚ U+2A5Ablockinfix0.2222222222222222em0.2222222222222222emN/A
⩛ U+2A5Bblockinfix0.2222222222222222em0.2222222222222222emN/A
⩜ U+2A5Cblockinfix0.2222222222222222em0.2222222222222222emN/A
⩝ U+2A5Dblockinfix0.2222222222222222em0.2222222222222222emN/A
⩞ U+2A5Eblockinfix0.2222222222222222em0.2222222222222222emN/A
⩟ U+2A5Fblockinfix0.2222222222222222em0.2222222222222222emN/A
⩠ U+2A60blockinfix0.2222222222222222em0.2222222222222222emN/A
⩡ U+2A61blockinfix0.2222222222222222em0.2222222222222222emN/A
⩢ U+2A62blockinfix0.2222222222222222em0.2222222222222222emN/A
⩣ U+2A63blockinfix0.2222222222222222em0.2222222222222222emN/A
⫛ U+2ADBblockinfix0.2222222222222222em0.2222222222222222emN/A
⫶ U+2AF6blockinfix0.2222222222222222em0.2222222222222222emN/A
⫻ U+2AFBblockinfix0.2222222222222222em0.2222222222222222emN/A
⫽ U+2AFDblockinfix0.2222222222222222em0.2222222222222222emN/A
String && U+0026 U+0026blockinfix0.2222222222222222em0.2222222222222222emN/A
% U+0025blockinfix0.16666666666666666em0.16666666666666666emN/A
* U+002Ablockinfix0.16666666666666666em0.16666666666666666emN/A
. U+002Eblockinfix0.16666666666666666em0.16666666666666666emN/A
? U+003Fblockinfix0.16666666666666666em0.16666666666666666emN/A
@ U+0040blockinfix0.16666666666666666em0.16666666666666666emN/A
^ U+005Einlineinfix0.16666666666666666em0.16666666666666666emN/A
· U+00B7blockinfix0.16666666666666666em0.16666666666666666emN/A
× U+00D7blockinfix0.16666666666666666em0.16666666666666666emN/A
• U+2022blockinfix0.16666666666666666em0.16666666666666666emN/A
⁃ U+2043blockinfix0.16666666666666666em0.16666666666666666emN/A
∗ U+2217blockinfix0.16666666666666666em0.16666666666666666emN/A
∘ U+2218blockinfix0.16666666666666666em0.16666666666666666emN/A
∙ U+2219blockinfix0.16666666666666666em0.16666666666666666emN/A
≀ U+2240blockinfix0.16666666666666666em0.16666666666666666emN/A
⊗ U+2297blockinfix0.16666666666666666em0.16666666666666666emN/A
⊙ U+2299blockinfix0.16666666666666666em0.16666666666666666emN/A
⊚ U+229Ablockinfix0.16666666666666666em0.16666666666666666emN/A
⊛ U+229Bblockinfix0.16666666666666666em0.16666666666666666emN/A
⊠ U+22A0blockinfix0.16666666666666666em0.16666666666666666emN/A
⊡ U+22A1blockinfix0.16666666666666666em0.16666666666666666emN/A
⊺ U+22BAblockinfix0.16666666666666666em0.16666666666666666emN/A
⋄ U+22C4blockinfix0.16666666666666666em0.16666666666666666emN/A
⋅ U+22C5blockinfix0.16666666666666666em0.16666666666666666emN/A
⋆ U+22C6blockinfix0.16666666666666666em0.16666666666666666emN/A
⋇ U+22C7blockinfix0.16666666666666666em0.16666666666666666emN/A
⋉ U+22C9blockinfix0.16666666666666666em0.16666666666666666emN/A
⋊ U+22CAblockinfix0.16666666666666666em0.16666666666666666emN/A
⋋ U+22CBblockinfix0.16666666666666666em0.16666666666666666emN/A
⋌ U+22CCblockinfix0.16666666666666666em0.16666666666666666emN/A
⌅ U+2305blockinfix0.16666666666666666em0.16666666666666666emN/A
⌆ U+2306blockinfix0.16666666666666666em0.16666666666666666emN/A
⟋ U+27CBblockinfix0.16666666666666666em0.16666666666666666emN/A
⟍ U+27CDblockinfix0.16666666666666666em0.16666666666666666emN/A
⧆ U+29C6blockinfix0.16666666666666666em0.16666666666666666emN/A
⧇ U+29C7blockinfix0.16666666666666666em0.16666666666666666emN/A
⧈ U+29C8blockinfix0.16666666666666666em0.16666666666666666emN/A
⧔ U+29D4blockinfix0.16666666666666666em0.16666666666666666emN/A
⧕ U+29D5blockinfix0.16666666666666666em0.16666666666666666emN/A
⧖ U+29D6blockinfix0.16666666666666666em0.16666666666666666emN/A
⧗ U+29D7blockinfix0.16666666666666666em0.16666666666666666emN/A
⧢ U+29E2blockinfix0.16666666666666666em0.16666666666666666emN/A
⨝ U+2A1Dblockinfix0.16666666666666666em0.16666666666666666emN/A
⨞ U+2A1Eblockinfix0.16666666666666666em0.16666666666666666emN/A
⨯ U+2A2Fblockinfix0.16666666666666666em0.16666666666666666emN/A
⨰ U+2A30blockinfix0.16666666666666666em0.16666666666666666emN/A
⨱ U+2A31blockinfix0.16666666666666666em0.16666666666666666emN/A
⨲ U+2A32blockinfix0.16666666666666666em0.16666666666666666emN/A
⨳ U+2A33blockinfix0.16666666666666666em0.16666666666666666emN/A
⨴ U+2A34blockinfix0.16666666666666666em0.16666666666666666emN/A
⨵ U+2A35blockinfix0.16666666666666666em0.16666666666666666emN/A
⨶ U+2A36blockinfix0.16666666666666666em0.16666666666666666emN/A
⨷ U+2A37blockinfix0.16666666666666666em0.16666666666666666emN/A
⨻ U+2A3Bblockinfix0.16666666666666666em0.16666666666666666emN/A
⨼ U+2A3Cblockinfix0.16666666666666666em0.16666666666666666emN/A
⨽ U+2A3Dblockinfix0.16666666666666666em0.16666666666666666emN/A
⨿ U+2A3Fblockinfix0.16666666666666666em0.16666666666666666emN/A
⩐ U+2A50blockinfix0.16666666666666666em0.16666666666666666emN/A
⩤ U+2A64blockinfix0.16666666666666666em0.16666666666666666emN/A
⩥ U+2A65blockinfix0.16666666666666666em0.16666666666666666emN/A
⫝̸ U+2ADCblockinfix0.16666666666666666em0.16666666666666666emN/A
⫝ U+2ADDblockinfix0.16666666666666666em0.16666666666666666emN/A
⫾ U+2AFEblockinfix0.16666666666666666em0.16666666666666666emN/A
String ** U+002A U+002Ablockinfix0.16666666666666666em0.16666666666666666emN/A
String <> U+003C U+003Eblockinfix0.16666666666666666em0.16666666666666666emN/A
! U+0021blockprefix00N/A
+ U+002Bblockprefix00N/A
- U+002Dblockprefix00N/A
¬ U+00ACblockprefix00N/A
± U+00B1blockprefix00N/A
‘ U+2018blockprefix00fence
“ U+201Cblockprefix00fence
∀ U+2200blockprefix00N/A
∁ U+2201blockprefix00N/A
∃ U+2203blockprefix00N/A
∄ U+2204blockprefix00N/A
∇ U+2207blockprefix00N/A
− U+2212blockprefix00N/A
∓ U+2213blockprefix00N/A
∟ U+221Fblockprefix00N/A
∠ U+2220blockprefix00N/A
∡ U+2221blockprefix00N/A
∢ U+2222blockprefix00N/A
∴ U+2234blockprefix00N/A
∵ U+2235blockprefix00N/A
∼ U+223Cblockprefix00N/A
⊾ U+22BEblockprefix00N/A
⊿ U+22BFblockprefix00N/A
⌐ U+2310blockprefix00N/A
⌙ U+2319blockprefix00N/A
➕ U+2795blockprefix00N/A
➖ U+2796blockprefix00N/A
⟀ U+27C0blockprefix00N/A
⦛ U+299Bblockprefix00N/A
⦜ U+299Cblockprefix00N/A
⦝ U+299Dblockprefix00N/A
⦞ U+299Eblockprefix00N/A
⦟ U+299Fblockprefix00N/A
⦠ U+29A0blockprefix00N/A
⦡ U+29A1blockprefix00N/A
⦢ U+29A2blockprefix00N/A
⦣ U+29A3blockprefix00N/A
⦤ U+29A4blockprefix00N/A
⦥ U+29A5blockprefix00N/A
⦦ U+29A6blockprefix00N/A
⦧ U+29A7blockprefix00N/A
⦨ U+29A8blockprefix00N/A
⦩ U+29A9blockprefix00N/A
⦪ U+29AAblockprefix00N/A
⦫ U+29ABblockprefix00N/A
⦬ U+29ACblockprefix00N/A
⦭ U+29ADblockprefix00N/A
⦮ U+29AEblockprefix00N/A
⦯ U+29AFblockprefix00N/A
⫬ U+2AECblockprefix00N/A
⫭ U+2AEDblockprefix00N/A
String || U+007C U+007Cblockprefix00fence
! U+0021blockpostfix00N/A
" U+0022blockpostfix00N/A
% U+0025blockpostfix00N/A
& U+0026blockpostfix00N/A
' U+0027blockpostfix00N/A
` U+0060blockpostfix00N/A
¨ U+00A8blockpostfix00N/A
° U+00B0blockpostfix00N/A
² U+00B2blockpostfix00N/A
³ U+00B3blockpostfix00N/A
´ U+00B4blockpostfix00N/A
¸ U+00B8blockpostfix00N/A
¹ U+00B9blockpostfix00N/A
ˊ U+02CAblockpostfix00N/A
ˋ U+02CBblockpostfix00N/A
˘ U+02D8blockpostfix00N/A
˙ U+02D9blockpostfix00N/A
˚ U+02DAblockpostfix00N/A
˝ U+02DDblockpostfix00N/A
̑ U+0311blockpostfix00N/A
’ U+2019blockpostfix00fence
‚ U+201Ablockpostfix00N/A
‛ U+201Bblockpostfix00N/A
” U+201Dblockpostfix00fence
„ U+201Eblockpostfix00N/A
‟ U+201Fblockpostfix00N/A
′ U+2032blockpostfix00N/A
″ U+2033blockpostfix00N/A
‴ U+2034blockpostfix00N/A
‵ U+2035blockpostfix00N/A
‶ U+2036blockpostfix00N/A
‷ U+2037blockpostfix00N/A
⁗ U+2057blockpostfix00N/A
⃛ U+20DBblockpostfix00N/A
⃜ U+20DCblockpostfix00N/A
⏍ U+23CDblockpostfix00N/A
String !! U+0021 U+0021blockpostfix00N/A
String ++ U+002B U+002Bblockpostfix00N/A
String -- U+002D U+002Dblockpostfix00N/A
String || U+007C U+007Cblockpostfix00fence
( U+0028blockprefix00stretchy symmetric fence
[ U+005Bblockprefix00stretchy symmetric fence
{ U+007Bblockprefix00stretchy symmetric fence
| U+007Cblockprefix00stretchy symmetric fence
‖ U+2016blockprefix00stretchy symmetric fence
⌈ U+2308blockprefix00stretchy symmetric fence
⌊ U+230Ablockprefix00stretchy symmetric fence
〈 U+2329blockprefix00stretchy symmetric fence
❲ U+2772blockprefix00stretchy symmetric fence
⟦ U+27E6blockprefix00stretchy symmetric fence
⟨ U+27E8blockprefix00stretchy symmetric fence
⟪ U+27EAblockprefix00stretchy symmetric fence
⟬ U+27ECblockprefix00stretchy symmetric fence
⟮ U+27EEblockprefix00stretchy symmetric fence
⦀ U+2980blockprefix00stretchy symmetric fence
⦃ U+2983blockprefix00stretchy symmetric fence
⦅ U+2985blockprefix00stretchy symmetric fence
⦇ U+2987blockprefix00stretchy symmetric fence
⦉ U+2989blockprefix00stretchy symmetric fence
⦋ U+298Bblockprefix00stretchy symmetric fence
⦍ U+298Dblockprefix00stretchy symmetric fence
⦏ U+298Fblockprefix00stretchy symmetric fence
⦑ U+2991blockprefix00stretchy symmetric fence
⦓ U+2993blockprefix00stretchy symmetric fence
⦕ U+2995blockprefix00stretchy symmetric fence
⦗ U+2997blockprefix00stretchy symmetric fence
⦙ U+2999blockprefix00stretchy symmetric fence
⧘ U+29D8blockprefix00stretchy symmetric fence
⧚ U+29DAblockprefix00stretchy symmetric fence
⧼ U+29FCblockprefix00stretchy symmetric fence
) U+0029blockpostfix00stretchy symmetric fence
] U+005Dblockpostfix00stretchy symmetric fence
| U+007Cblockpostfix00stretchy symmetric fence
} U+007Dblockpostfix00stretchy symmetric fence
‖ U+2016blockpostfix00stretchy symmetric fence
⌉ U+2309blockpostfix00stretchy symmetric fence
⌋ U+230Bblockpostfix00stretchy symmetric fence
〉 U+232Ablockpostfix00stretchy symmetric fence
❳ U+2773blockpostfix00stretchy symmetric fence
⟧ U+27E7blockpostfix00stretchy symmetric fence
⟩ U+27E9blockpostfix00stretchy symmetric fence
⟫ U+27EBblockpostfix00stretchy symmetric fence
⟭ U+27EDblockpostfix00stretchy symmetric fence
⟯ U+27EFblockpostfix00stretchy symmetric fence
⦀ U+2980blockpostfix00stretchy symmetric fence
⦄ U+2984blockpostfix00stretchy symmetric fence
⦆ U+2986blockpostfix00stretchy symmetric fence
⦈ U+2988blockpostfix00stretchy symmetric fence
⦊ U+298Ablockpostfix00stretchy symmetric fence
⦌ U+298Cblockpostfix00stretchy symmetric fence
⦎ U+298Eblockpostfix00stretchy symmetric fence
⦐ U+2990blockpostfix00stretchy symmetric fence
⦒ U+2992blockpostfix00stretchy symmetric fence
⦔ U+2994blockpostfix00stretchy symmetric fence
⦖ U+2996blockpostfix00stretchy symmetric fence
⦘ U+2998blockpostfix00stretchy symmetric fence
⦙ U+2999blockpostfix00stretchy symmetric fence
⧙ U+29D9blockpostfix00stretchy symmetric fence
⧛ U+29DBblockpostfix00stretchy symmetric fence
⧽ U+29FDblockpostfix00stretchy symmetric fence
∫ U+222Bblockprefix0.16666666666666666em0.16666666666666666emsymmetric largeop
∬ U+222Cblockprefix0.16666666666666666em0.16666666666666666emsymmetric largeop
∭ U+222Dblockprefix0.16666666666666666em0.16666666666666666emsymmetric largeop
∮ U+222Eblockprefix0.16666666666666666em0.16666666666666666emsymmetric largeop
∯ U+222Fblockprefix0.16666666666666666em0.16666666666666666emsymmetric largeop
∰ U+2230blockprefix0.16666666666666666em0.16666666666666666emsymmetric largeop
∱ U+2231blockprefix0.16666666666666666em0.16666666666666666emsymmetric largeop
∲ U+2232blockprefix0.16666666666666666em0.16666666666666666emsymmetric largeop
∳ U+2233blockprefix0.16666666666666666em0.16666666666666666emsymmetric largeop
⨋ U+2A0Bblockprefix0.16666666666666666em0.16666666666666666emsymmetric largeop
⨌ U+2A0Cblockprefix0.16666666666666666em0.16666666666666666emsymmetric largeop
⨍ U+2A0Dblockprefix0.16666666666666666em0.16666666666666666emsymmetric largeop
⨎ U+2A0Eblockprefix0.16666666666666666em0.16666666666666666emsymmetric largeop
⨏ U+2A0Fblockprefix0.16666666666666666em0.16666666666666666emsymmetric largeop
⨐ U+2A10blockprefix0.16666666666666666em0.16666666666666666emsymmetric largeop
⨑ U+2A11blockprefix0.16666666666666666em0.16666666666666666emsymmetric largeop
⨒ U+2A12blockprefix0.16666666666666666em0.16666666666666666emsymmetric largeop
⨓ U+2A13blockprefix0.16666666666666666em0.16666666666666666emsymmetric largeop
⨔ U+2A14blockprefix0.16666666666666666em0.16666666666666666emsymmetric largeop
⨕ U+2A15blockprefix0.16666666666666666em0.16666666666666666emsymmetric largeop
⨖ U+2A16blockprefix0.16666666666666666em0.16666666666666666emsymmetric largeop
⨗ U+2A17blockprefix0.16666666666666666em0.16666666666666666emsymmetric largeop
⨘ U+2A18blockprefix0.16666666666666666em0.16666666666666666emsymmetric largeop
⨙ U+2A19blockprefix0.16666666666666666em0.16666666666666666emsymmetric largeop
⨚ U+2A1Ablockprefix0.16666666666666666em0.16666666666666666emsymmetric largeop
⨛ U+2A1Bblockprefix0.16666666666666666em0.16666666666666666emsymmetric largeop
⨜ U+2A1Cblockprefix0.16666666666666666em0.16666666666666666emsymmetric largeop
^ U+005Einlinepostfix00stretchy
_ U+005Finlinepostfix00stretchy
~ U+007Einlinepostfix00stretchy
¯ U+00AFinlinepostfix00stretchy
ˆ U+02C6inlinepostfix00stretchy
ˇ U+02C7inlinepostfix00stretchy
ˉ U+02C9inlinepostfix00stretchy
ˍ U+02CDinlinepostfix00stretchy
˜ U+02DCinlinepostfix00stretchy
˷ U+02F7inlinepostfix00stretchy
̂ U+0302inlinepostfix00stretchy
‾ U+203Einlinepostfix00stretchy
⌢ U+2322inlinepostfix00stretchy
⌣ U+2323inlinepostfix00stretchy
⎴ U+23B4inlinepostfix00stretchy
⎵ U+23B5inlinepostfix00stretchy
⏜ U+23DCinlinepostfix00stretchy
⏝ U+23DDinlinepostfix00stretchy
⏞ U+23DEinlinepostfix00stretchy
⏟ U+23DFinlinepostfix00stretchy
⏠ U+23E0inlinepostfix00stretchy
⏡ U+23E1inlinepostfix00stretchy
𞻰 U+1EEF0inlinepostfix00stretchy
𞻱 U+1EEF1inlinepostfix00stretchy
∏ U+220Fblockprefix0.16666666666666666em0.16666666666666666emsymmetric largeop movablelimits
∐ U+2210blockprefix0.16666666666666666em0.16666666666666666emsymmetric largeop movablelimits
∑ U+2211blockprefix0.16666666666666666em0.16666666666666666emsymmetric largeop movablelimits
⋀ U+22C0blockprefix0.16666666666666666em0.16666666666666666emsymmetric largeop movablelimits
⋁ U+22C1blockprefix0.16666666666666666em0.16666666666666666emsymmetric largeop movablelimits
⋂ U+22C2blockprefix0.16666666666666666em0.16666666666666666emsymmetric largeop movablelimits
⋃ U+22C3blockprefix0.16666666666666666em0.16666666666666666emsymmetric largeop movablelimits
⨀ U+2A00blockprefix0.16666666666666666em0.16666666666666666emsymmetric largeop movablelimits
⨁ U+2A01blockprefix0.16666666666666666em0.16666666666666666emsymmetric largeop movablelimits
⨂ U+2A02blockprefix0.16666666666666666em0.16666666666666666emsymmetric largeop movablelimits
⨃ U+2A03blockprefix0.16666666666666666em0.16666666666666666emsymmetric largeop movablelimits
⨄ U+2A04blockprefix0.16666666666666666em0.16666666666666666emsymmetric largeop movablelimits
⨅ U+2A05blockprefix0.16666666666666666em0.16666666666666666emsymmetric largeop movablelimits
⨆ U+2A06blockprefix0.16666666666666666em0.16666666666666666emsymmetric largeop movablelimits
⨇ U+2A07blockprefix0.16666666666666666em0.16666666666666666emsymmetric largeop movablelimits
⨈ U+2A08blockprefix0.16666666666666666em0.16666666666666666emsymmetric largeop movablelimits
⨉ U+2A09blockprefix0.16666666666666666em0.16666666666666666emsymmetric largeop movablelimits
⨊ U+2A0Ablockprefix0.16666666666666666em0.16666666666666666emsymmetric largeop movablelimits
⨝ U+2A1Dblockprefix0.16666666666666666em0.16666666666666666emsymmetric largeop movablelimits
⨞ U+2A1Eblockprefix0.16666666666666666em0.16666666666666666emsymmetric largeop movablelimits
⫼ U+2AFCblockprefix0.16666666666666666em0.16666666666666666emsymmetric largeop movablelimits
⫿ U+2AFFblockprefix0.16666666666666666em0.16666666666666666emsymmetric largeop movablelimits
\ U+005Cblockinfix00N/A
_ U+005Finlineinfix00N/A
⁡ U+2061blockinfix00N/A
⁢ U+2062blockinfix00N/A
⁣ U+2063blockinfix00separator
⁤ U+2064blockinfix00N/A
∆ U+2206blockinfix00N/A
ⅅ U+2145blockprefix0.16666666666666666em0N/A
ⅆ U+2146blockprefix0.16666666666666666em0N/A
∂ U+2202blockprefix0.16666666666666666em0N/A
√ U+221Ablockprefix0.16666666666666666em0N/A
∛ U+221Bblockprefix0.16666666666666666em0N/A
∜ U+221Cblockprefix0.16666666666666666em0N/A
, U+002Cblockinfix00.16666666666666666emseparator
: U+003Ablockinfix00.16666666666666666emN/A
; U+003Bblockinfix00.16666666666666666emseparator
+
Figure 29 Mapping from operator (Content, Form) to properties.
Total size: 1177 entries, ≥ 3679 bytes
(assuming 'Content' uses at least one UTF-16 character, 'Stretch Axis' 1 bit, 'Form' 2 bits, the different combinations of 'rspace' and 'space' at least 3 bits, and the different combinations of properties 3 bits).
+
+

B.3 Combining Character Equivalences

This section is non-normative.

+ +

+ The following table gives mappings between spacing and non spacing + characters when used in MathML accent constructs. +

+

Combining

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

Non Combining

CombiningStyleNon Combining
U+0300combining grave accentaboveU+0060grave accent
U+0301combining acute accentaboveU+00B4acute accent
U+0302combining circumflex accentaboveU+005Ecircumflex accent
U+0302combining circumflex accentaboveU+02C6modifier letter circumflex accent
U+0303combining tildeaboveU+007Etilde
U+0303combining tildeaboveU+02DCsmall tilde
U+0304combining macronaboveU+00AFmacron
U+0305combining overlineaboveU+002Dhyphen-minus
U+0305combining overlineaboveU+00AFmacron
U+0305combining overlineaboveU+203Eoverline
U+0305combining overlineaboveU+2212minus sign
U+0306combining breveaboveU+02D8breve
U+0307combining dot aboveaboveU+02E
U+0307combining dot aboveaboveU+002Efull stop
U+0307combining dot aboveaboveU+02D9dot above
U+0308combining diaeresisaboveU+00A8diaeresis
U+030Bcombining double acute accentaboveU+02DDdouble acute accent
U+030Ccombining caronaboveU+02C7caron
U+0312combining turned comma aboveaboveU+0B8
U+0316combining grave accent belowbelowU+0060grave accent
U+0317combining acute accent belowbelowU+00B4acute accent
U+031Fcombining plus sign belowbelowU+002Bplus sign
U+0320combining minus sign belowbelowU+002Dhyphen-minus
U+0323combining dot belowbelowU+002Efull stop
U+0323combining dot belowbelowU+02D9dot above
U+0324combining diaeresis belowbelowU+00A8diaeresis
U+0327combining cedillabelowU+00B8cedilla
U+0328combining ogonekbelowU+02DBogonek
U+032Ccombining caron belowbelowU+02C7caron
U+032Dcombining circumflex accent belowbelowU+005Ecircumflex accent
U+032Ecombining breve belowbelowU+02D8breve
U+0330combining tilde belowbelowU+007Etilde
U+0330combining tilde belowbelowU+02DCsmall tilde
U+0332combining low linebelowU+002Dhyphen-minus
U+0332combining low linebelowU+005Flow line
U+0332combining low linebelowU+2212minus sign
U+0338combining long solidus overlayoverU+02F
U+20D7combining right arrow aboveaboveU+2192rightwards arrow
U+20D7combining right arrow aboveaboveU+27F6long rightwards arrow
U+20EFcombining right arrow belowaboveU+2192rightwards arrow
U+20EFcombining right arrow belowaboveU+27F6long rightwards arrow
+
+

B.4 Unicode-based Glyph Assemblies

This section is non-normative.

+ +

+ The following table provides fallback that user agents may use for + stretching a given base character when the font does not + provide a MATH.MathVariants table. + The algorithms of + 5.3 Size variants for operators (MathVariants) + work the same except with some adjustments: +

+
    +
  • + Entries are indexed by the base character. +
  • +
  • + All the glyph IDs and metrics have to be deduced from Unicode + code points. +
  • +
  • + If the glyph construction is horizontal then + the entry corresponds to + a MathVariants.horizGlyphConstructionOffsets[] item; + if it is vertical it corresponds to + a MathVariants.vertGlyphConstructionOffsets[] item. +
  • +
  • + The MathGlyphConstruction.mathGlyphVariantRecord is + always empty. +
  • +
  • + The + MathVariants.minConnectorOverlap, + GlyphPartRecord.startConnectorLength and + GlyphPartRecord.endConnectorLength + are treated as 0. +
  • +
  • + The array of + MathGlyphConstruction.GlyphAssembly.partRecords is built + from each table row as follows: +
      +
    1. A (non-extender) bottom/left character
    2. +
    3. Followed by an extender character.
    4. +
    5. Optionally followed by this: +
        +
      • Optionally, a (non-extender) middle character + and the same extender character previously mentioned.
      • +
      • A (non-extender) top/right character.
      • +
      +
    6. +
    +
  • +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Base CharacterGlyph ConstructionExtender CharacterBottom/Left CharacterMiddle CharacterTop/Right Character
U+0028 (VerticalU+239C ⎜U+239D ⎝N/AU+239B ⎛
U+0029 )VerticalU+239F ⎟U+23A0 ⎠N/AU+239E ⎞
U+003D =HorizontalU+003D =U+003D =N/AN/A
U+005B [VerticalU+23A2 ⎢U+23A3 ⎣N/AU+23A1 ⎡
U+005D ]VerticalU+23A5 ⎥U+23A6 ⎦N/AU+23A4 ⎤
U+005F _HorizontalU+005F _U+005F _N/AN/A
U+007B {VerticalU+23AA ⎪U+23A9 ⎩U+23A8 ⎨U+23A7 ⎧
U+007C |VerticalU+007C |U+007C |N/AN/A
U+007D }VerticalU+23AA ⎪U+23AD ⎭U+23AC ⎬U+23AB ⎫
U+00AF ¯HorizontalU+00AF ¯U+00AF ¯N/AN/A
U+2016 ‖VerticalU+2016 ‖U+2016 ‖N/AN/A
U+203E ‾HorizontalU+203E ‾U+203E ‾N/AN/A
U+2190 ←HorizontalU+23AF ⎯U+2190 ←N/AU+23AF ⎯
U+2191 ↑VerticalU+23D0 ⏐U+23D0 ⏐N/AU+2191 ↑
U+2192 →HorizontalU+23AF ⎯U+23AF ⎯N/AU+2192 →
U+2193 ↓VerticalU+23D0 ⏐U+2193 ↓N/AU+23D0 ⏐
U+2194 ↔HorizontalU+23AF ⎯U+2190 ←N/AU+2192 →
U+2195 ↕VerticalU+23D0 ⏐U+2193 ↓N/AU+2191 ↑
U+21A4 ↤HorizontalU+23AF ⎯U+2190 ←N/AU+22A3 ⊣
U+21A6 ↦HorizontalU+23AF ⎯U+22A2 ⊢N/AU+2192 →
U+21BC ↼HorizontalU+23AF ⎯U+21BC ↼N/AU+23AF ⎯
U+21BD ↽HorizontalU+23AF ⎯U+21BD ↽N/AU+23AF ⎯
U+21C0 ⇀HorizontalU+23AF ⎯U+23AF ⎯N/AU+21C0 ⇀
U+21C1 ⇁HorizontalU+23AF ⎯U+23AF ⎯N/AU+21C1 ⇁
U+2223 ∣VerticalU+2223 ∣U+2223 ∣N/AN/A
U+2225 ∥VerticalU+2225 ∥U+2225 ∥N/AN/A
U+2308 ⌈VerticalU+23A2 ⎢U+23A2 ⎢N/AU+23A1 ⎡
U+2309 ⌉VerticalU+23A5 ⎥U+23A5 ⎥N/AU+23A4 ⎤
U+230A ⌊VerticalU+23A2 ⎢U+23A3 ⎣N/AN/A
U+230B ⌋VerticalU+23A5 ⎥U+23A6 ⎦N/AN/A
U+23B0 ⎰VerticalU+23AA ⎪U+23AD ⎭N/AU+23A7 ⎧
U+23B1 ⎱VerticalU+23AA ⎪U+23A9 ⎩N/AU+23AB ⎫
U+27F5 ⟵HorizontalU+23AF ⎯U+2190 ←N/AU+23AF ⎯
U+27F6 ⟶HorizontalU+23AF ⎯U+23AF ⎯N/AU+2192 →
U+27F7 ⟷HorizontalU+23AF ⎯U+2190 ←N/AU+2192 →
U+294E ⥎HorizontalU+23AF ⎯U+21BC ↼N/AU+21C0 ⇀
U+2950 ⥐HorizontalU+23AF ⎯U+21BD ↽N/AU+21C1 ⇁
U+295A ⥚HorizontalU+23AF ⎯U+21BC ↼N/AU+22A3 ⊣
U+295B ⥛HorizontalU+23AF ⎯U+22A2 ⊢N/AU+21C0 ⇀
U+295E ⥞HorizontalU+23AF ⎯U+21BD ↽N/AU+22A3 ⊣
U+295F ⥟HorizontalU+23AF ⎯U+22A2 ⊢N/AU+21C1 ⇁
+
+
+
+

C. Mathematical Alphanumeric Symbols

+ +

+ The following tables enumerate the mathematical alphanumeric symbols + with form bold, italic, fraktur, monospace, double-struck etc + that are available in Unicode. + For each of them, the character in its normal form is provided as + well as the difference between the code points of the transformed and + original characters. +

+
Note
+ This difference can be used to simplify implementations. For example + for italic mappings, the code point of a uppercase latin letter is + increased by 0x1D3F3, the code point of a lowercase latin letter is + (generally) increased by 1D3ED, etc and the exceptions can be + handled separately. +
+
Note
+

It is sometimes needed to distinguish between + Chancery and Roundhand style for MATHEMATICAL SCRIPT characters. + These are notably used in LaTeX for the + \mathcal and \mathscr commands.

+

One way to do that is to rely on + Chapter 23.4 Variation Selectors of + Unicode which describes a way to + specify selection of particular glyph variants [UNICODE]. + Indeed, the + StandardizedVariants.txt file from the + Unicode Character Database indicates that variant selectors + U+FE00 and U+FE01 can be used on capital script to specify + Chancery and Roundhand respectively.

+

Alternatively, some + mathematical fonts rely on salt or + ssXY properties from [OPEN-FONT-FORMAT] + to provide both styles. Page authors may use the + font-variant-alternates property with corresponding OpenType font features + to access these glyphs.

+
+

C.1 bold-script mappings

This section is non-normative.

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Originalbold-scriptΔcode point
A U+0041𝓐 U+1D4D01D48F
B U+0042𝓑 U+1D4D11D48F
C U+0043𝓒 U+1D4D21D48F
D U+0044𝓓 U+1D4D31D48F
E U+0045𝓔 U+1D4D41D48F
F U+0046𝓕 U+1D4D51D48F
G U+0047𝓖 U+1D4D61D48F
H U+0048𝓗 U+1D4D71D48F
I U+0049𝓘 U+1D4D81D48F
J U+004A𝓙 U+1D4D91D48F
K U+004B𝓚 U+1D4DA1D48F
L U+004C𝓛 U+1D4DB1D48F
M U+004D𝓜 U+1D4DC1D48F
N U+004E𝓝 U+1D4DD1D48F
O U+004F𝓞 U+1D4DE1D48F
P U+0050𝓟 U+1D4DF1D48F
Q U+0051𝓠 U+1D4E01D48F
R U+0052𝓡 U+1D4E11D48F
S U+0053𝓢 U+1D4E21D48F
T U+0054𝓣 U+1D4E31D48F
U U+0055𝓤 U+1D4E41D48F
V U+0056𝓥 U+1D4E51D48F
W U+0057𝓦 U+1D4E61D48F
X U+0058𝓧 U+1D4E71D48F
Y U+0059𝓨 U+1D4E81D48F
Z U+005A𝓩 U+1D4E91D48F
a U+0061𝓪 U+1D4EA1D489
b U+0062𝓫 U+1D4EB1D489
c U+0063𝓬 U+1D4EC1D489
d U+0064𝓭 U+1D4ED1D489
e U+0065𝓮 U+1D4EE1D489
f U+0066𝓯 U+1D4EF1D489
g U+0067𝓰 U+1D4F01D489
h U+0068𝓱 U+1D4F11D489
i U+0069𝓲 U+1D4F21D489
j U+006A𝓳 U+1D4F31D489
k U+006B𝓴 U+1D4F41D489
l U+006C𝓵 U+1D4F51D489
m U+006D𝓶 U+1D4F61D489
n U+006E𝓷 U+1D4F71D489
o U+006F𝓸 U+1D4F81D489
p U+0070𝓹 U+1D4F91D489
q U+0071𝓺 U+1D4FA1D489
r U+0072𝓻 U+1D4FB1D489
s U+0073𝓼 U+1D4FC1D489
t U+0074𝓽 U+1D4FD1D489
u U+0075𝓾 U+1D4FE1D489
v U+0076𝓿 U+1D4FF1D489
w U+0077𝔀 U+1D5001D489
x U+0078𝔁 U+1D5011D489
y U+0079𝔂 U+1D5021D489
z U+007A𝔃 U+1D5031D489
+
+

C.2 bold-italic mappings

This section is non-normative.

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Originalbold-italicΔcode point
A U+0041𝑨 U+1D4681D427
B U+0042𝑩 U+1D4691D427
C U+0043𝑪 U+1D46A1D427
D U+0044𝑫 U+1D46B1D427
E U+0045𝑬 U+1D46C1D427
F U+0046𝑭 U+1D46D1D427
G U+0047𝑮 U+1D46E1D427
H U+0048𝑯 U+1D46F1D427
I U+0049𝑰 U+1D4701D427
J U+004A𝑱 U+1D4711D427
K U+004B𝑲 U+1D4721D427
L U+004C𝑳 U+1D4731D427
M U+004D𝑴 U+1D4741D427
N U+004E𝑵 U+1D4751D427
O U+004F𝑶 U+1D4761D427
P U+0050𝑷 U+1D4771D427
Q U+0051𝑸 U+1D4781D427
R U+0052𝑹 U+1D4791D427
S U+0053𝑺 U+1D47A1D427
T U+0054𝑻 U+1D47B1D427
U U+0055𝑼 U+1D47C1D427
V U+0056𝑽 U+1D47D1D427
W U+0057𝑾 U+1D47E1D427
X U+0058𝑿 U+1D47F1D427
Y U+0059𝒀 U+1D4801D427
Z U+005A𝒁 U+1D4811D427
a U+0061𝒂 U+1D4821D421
b U+0062𝒃 U+1D4831D421
c U+0063𝒄 U+1D4841D421
d U+0064𝒅 U+1D4851D421
e U+0065𝒆 U+1D4861D421
f U+0066𝒇 U+1D4871D421
g U+0067𝒈 U+1D4881D421
h U+0068𝒉 U+1D4891D421
i U+0069𝒊 U+1D48A1D421
j U+006A𝒋 U+1D48B1D421
k U+006B𝒌 U+1D48C1D421
l U+006C𝒍 U+1D48D1D421
m U+006D𝒎 U+1D48E1D421
n U+006E𝒏 U+1D48F1D421
o U+006F𝒐 U+1D4901D421
p U+0070𝒑 U+1D4911D421
q U+0071𝒒 U+1D4921D421
r U+0072𝒓 U+1D4931D421
s U+0073𝒔 U+1D4941D421
t U+0074𝒕 U+1D4951D421
u U+0075𝒖 U+1D4961D421
v U+0076𝒗 U+1D4971D421
w U+0077𝒘 U+1D4981D421
x U+0078𝒙 U+1D4991D421
y U+0079𝒚 U+1D49A1D421
z U+007A𝒛 U+1D49B1D421
Α U+0391𝜜 U+1D71C1D38B
Β U+0392𝜝 U+1D71D1D38B
Γ U+0393𝜞 U+1D71E1D38B
Δ U+0394𝜟 U+1D71F1D38B
Ε U+0395𝜠 U+1D7201D38B
Ζ U+0396𝜡 U+1D7211D38B
Η U+0397𝜢 U+1D7221D38B
Θ U+0398𝜣 U+1D7231D38B
Ι U+0399𝜤 U+1D7241D38B
Κ U+039A𝜥 U+1D7251D38B
Λ U+039B𝜦 U+1D7261D38B
Μ U+039C𝜧 U+1D7271D38B
Ν U+039D𝜨 U+1D7281D38B
Ξ U+039E𝜩 U+1D7291D38B
Ο U+039F𝜪 U+1D72A1D38B
Π U+03A0𝜫 U+1D72B1D38B
Ρ U+03A1𝜬 U+1D72C1D38B
ϴ U+03F4𝜭 U+1D72D1D339
Σ U+03A3𝜮 U+1D72E1D38B
Τ U+03A4𝜯 U+1D72F1D38B
Υ U+03A5𝜰 U+1D7301D38B
Φ U+03A6𝜱 U+1D7311D38B
Χ U+03A7𝜲 U+1D7321D38B
Ψ U+03A8𝜳 U+1D7331D38B
Ω U+03A9𝜴 U+1D7341D38B
∇ U+2207𝜵 U+1D7351B52E
α U+03B1𝜶 U+1D7361D385
β U+03B2𝜷 U+1D7371D385
γ U+03B3𝜸 U+1D7381D385
δ U+03B4𝜹 U+1D7391D385
ε U+03B5𝜺 U+1D73A1D385
ζ U+03B6𝜻 U+1D73B1D385
η U+03B7𝜼 U+1D73C1D385
θ U+03B8𝜽 U+1D73D1D385
ι U+03B9𝜾 U+1D73E1D385
κ U+03BA𝜿 U+1D73F1D385
λ U+03BB𝝀 U+1D7401D385
μ U+03BC𝝁 U+1D7411D385
ν U+03BD𝝂 U+1D7421D385
ξ U+03BE𝝃 U+1D7431D385
ο U+03BF𝝄 U+1D7441D385
π U+03C0𝝅 U+1D7451D385
ρ U+03C1𝝆 U+1D7461D385
ς U+03C2𝝇 U+1D7471D385
σ U+03C3𝝈 U+1D7481D385
τ U+03C4𝝉 U+1D7491D385
υ U+03C5𝝊 U+1D74A1D385
φ U+03C6𝝋 U+1D74B1D385
χ U+03C7𝝌 U+1D74C1D385
ψ U+03C8𝝍 U+1D74D1D385
ω U+03C9𝝎 U+1D74E1D385
∂ U+2202𝝏 U+1D74F1B54D
ϵ U+03F5𝝐 U+1D7501D35B
ϑ U+03D1𝝑 U+1D7511D380
ϰ U+03F0𝝒 U+1D7521D362
ϕ U+03D5𝝓 U+1D7531D37E
ϱ U+03F1𝝔 U+1D7541D363
ϖ U+03D6𝝕 U+1D7551D37F
+
+

C.3 tailed mappings

This section is non-normative.

+ +
+ + + + + + + + + + + + + + + + + +
OriginaltailedΔcode point
ج U+062C𞹂 U+1EE421E816
ح U+062D𞹇 U+1EE471E81A
ي U+064A𞹉 U+1EE491E7FF
ل U+0644𞹋 U+1EE4B1E807
ن U+0646𞹍 U+1EE4D1E807
س U+0633𞹎 U+1EE4E1E81B
ع U+0639𞹏 U+1EE4F1E816
ص U+0635𞹑 U+1EE511E81C
ق U+0642𞹒 U+1EE521E810
ش U+0634𞹔 U+1EE541E820
خ U+062E𞹗 U+1EE571E829
ض U+0636𞹙 U+1EE591E823
غ U+063A𞹛 U+1EE5B1E821
ں U+06BA𞹝 U+1EE5D1E7A3
ٯ U+066F𞹟 U+1EE5F1E7F0
+
+

C.4 bold mappings

This section is non-normative.

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
OriginalboldΔcode point
A U+0041𝐀 U+1D4001D3BF
B U+0042𝐁 U+1D4011D3BF
C U+0043𝐂 U+1D4021D3BF
D U+0044𝐃 U+1D4031D3BF
E U+0045𝐄 U+1D4041D3BF
F U+0046𝐅 U+1D4051D3BF
G U+0047𝐆 U+1D4061D3BF
H U+0048𝐇 U+1D4071D3BF
I U+0049𝐈 U+1D4081D3BF
J U+004A𝐉 U+1D4091D3BF
K U+004B𝐊 U+1D40A1D3BF
L U+004C𝐋 U+1D40B1D3BF
M U+004D𝐌 U+1D40C1D3BF
N U+004E𝐍 U+1D40D1D3BF
O U+004F𝐎 U+1D40E1D3BF
P U+0050𝐏 U+1D40F1D3BF
Q U+0051𝐐 U+1D4101D3BF
R U+0052𝐑 U+1D4111D3BF
S U+0053𝐒 U+1D4121D3BF
T U+0054𝐓 U+1D4131D3BF
U U+0055𝐔 U+1D4141D3BF
V U+0056𝐕 U+1D4151D3BF
W U+0057𝐖 U+1D4161D3BF
X U+0058𝐗 U+1D4171D3BF
Y U+0059𝐘 U+1D4181D3BF
Z U+005A𝐙 U+1D4191D3BF
a U+0061𝐚 U+1D41A1D3B9
b U+0062𝐛 U+1D41B1D3B9
c U+0063𝐜 U+1D41C1D3B9
d U+0064𝐝 U+1D41D1D3B9
e U+0065𝐞 U+1D41E1D3B9
f U+0066𝐟 U+1D41F1D3B9
g U+0067𝐠 U+1D4201D3B9
h U+0068𝐡 U+1D4211D3B9
i U+0069𝐢 U+1D4221D3B9
j U+006A𝐣 U+1D4231D3B9
k U+006B𝐤 U+1D4241D3B9
l U+006C𝐥 U+1D4251D3B9
m U+006D𝐦 U+1D4261D3B9
n U+006E𝐧 U+1D4271D3B9
o U+006F𝐨 U+1D4281D3B9
p U+0070𝐩 U+1D4291D3B9
q U+0071𝐪 U+1D42A1D3B9
r U+0072𝐫 U+1D42B1D3B9
s U+0073𝐬 U+1D42C1D3B9
t U+0074𝐭 U+1D42D1D3B9
u U+0075𝐮 U+1D42E1D3B9
v U+0076𝐯 U+1D42F1D3B9
w U+0077𝐰 U+1D4301D3B9
x U+0078𝐱 U+1D4311D3B9
y U+0079𝐲 U+1D4321D3B9
z U+007A𝐳 U+1D4331D3B9
Α U+0391𝚨 U+1D6A81D317
Β U+0392𝚩 U+1D6A91D317
Γ U+0393𝚪 U+1D6AA1D317
Δ U+0394𝚫 U+1D6AB1D317
Ε U+0395𝚬 U+1D6AC1D317
Ζ U+0396𝚭 U+1D6AD1D317
Η U+0397𝚮 U+1D6AE1D317
Θ U+0398𝚯 U+1D6AF1D317
Ι U+0399𝚰 U+1D6B01D317
Κ U+039A𝚱 U+1D6B11D317
Λ U+039B𝚲 U+1D6B21D317
Μ U+039C𝚳 U+1D6B31D317
Ν U+039D𝚴 U+1D6B41D317
Ξ U+039E𝚵 U+1D6B51D317
Ο U+039F𝚶 U+1D6B61D317
Π U+03A0𝚷 U+1D6B71D317
Ρ U+03A1𝚸 U+1D6B81D317
ϴ U+03F4𝚹 U+1D6B91D2C5
Σ U+03A3𝚺 U+1D6BA1D317
Τ U+03A4𝚻 U+1D6BB1D317
Υ U+03A5𝚼 U+1D6BC1D317
Φ U+03A6𝚽 U+1D6BD1D317
Χ U+03A7𝚾 U+1D6BE1D317
Ψ U+03A8𝚿 U+1D6BF1D317
Ω U+03A9𝛀 U+1D6C01D317
∇ U+2207𝛁 U+1D6C11B4BA
α U+03B1𝛂 U+1D6C21D311
β U+03B2𝛃 U+1D6C31D311
γ U+03B3𝛄 U+1D6C41D311
δ U+03B4𝛅 U+1D6C51D311
ε U+03B5𝛆 U+1D6C61D311
ζ U+03B6𝛇 U+1D6C71D311
η U+03B7𝛈 U+1D6C81D311
θ U+03B8𝛉 U+1D6C91D311
ι U+03B9𝛊 U+1D6CA1D311
κ U+03BA𝛋 U+1D6CB1D311
λ U+03BB𝛌 U+1D6CC1D311
μ U+03BC𝛍 U+1D6CD1D311
ν U+03BD𝛎 U+1D6CE1D311
ξ U+03BE𝛏 U+1D6CF1D311
ο U+03BF𝛐 U+1D6D01D311
π U+03C0𝛑 U+1D6D11D311
ρ U+03C1𝛒 U+1D6D21D311
ς U+03C2𝛓 U+1D6D31D311
σ U+03C3𝛔 U+1D6D41D311
τ U+03C4𝛕 U+1D6D51D311
υ U+03C5𝛖 U+1D6D61D311
φ U+03C6𝛗 U+1D6D71D311
χ U+03C7𝛘 U+1D6D81D311
ψ U+03C8𝛙 U+1D6D91D311
ω U+03C9𝛚 U+1D6DA1D311
∂ U+2202𝛛 U+1D6DB1B4D9
ϵ U+03F5𝛜 U+1D6DC1D2E7
ϑ U+03D1𝛝 U+1D6DD1D30C
ϰ U+03F0𝛞 U+1D6DE1D2EE
ϕ U+03D5𝛟 U+1D6DF1D30A
ϱ U+03F1𝛠 U+1D6E01D2EF
ϖ U+03D6𝛡 U+1D6E11D30B
Ϝ U+03DC𝟊 U+1D7CA1D3EE
ϝ U+03DD𝟋 U+1D7CB1D3EE
0 U+0030𝟎 U+1D7CE1D79E
1 U+0031𝟏 U+1D7CF1D79E
2 U+0032𝟐 U+1D7D01D79E
3 U+0033𝟑 U+1D7D11D79E
4 U+0034𝟒 U+1D7D21D79E
5 U+0035𝟓 U+1D7D31D79E
6 U+0036𝟔 U+1D7D41D79E
7 U+0037𝟕 U+1D7D51D79E
8 U+0038𝟖 U+1D7D61D79E
9 U+0039𝟗 U+1D7D71D79E
+
+

C.5 fraktur mappings

This section is non-normative.

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
OriginalfrakturΔcode point
A U+0041𝔄 U+1D5041D4C3
B U+0042𝔅 U+1D5051D4C3
C U+0043ℭ U+0212D20EA
D U+0044𝔇 U+1D5071D4C3
E U+0045𝔈 U+1D5081D4C3
F U+0046𝔉 U+1D5091D4C3
G U+0047𝔊 U+1D50A1D4C3
H U+0048ℌ U+0210C20C4
I U+0049ℑ U+0211120C8
J U+004A𝔍 U+1D50D1D4C3
K U+004B𝔎 U+1D50E1D4C3
L U+004C𝔏 U+1D50F1D4C3
M U+004D𝔐 U+1D5101D4C3
N U+004E𝔑 U+1D5111D4C3
O U+004F𝔒 U+1D5121D4C3
P U+0050𝔓 U+1D5131D4C3
Q U+0051𝔔 U+1D5141D4C3
R U+0052ℜ U+0211C20CA
S U+0053𝔖 U+1D5161D4C3
T U+0054𝔗 U+1D5171D4C3
U U+0055𝔘 U+1D5181D4C3
V U+0056𝔙 U+1D5191D4C3
W U+0057𝔚 U+1D51A1D4C3
X U+0058𝔛 U+1D51B1D4C3
Y U+0059𝔜 U+1D51C1D4C3
Z U+005Aℨ U+0212820CE
a U+0061𝔞 U+1D51E1D4BD
b U+0062𝔟 U+1D51F1D4BD
c U+0063𝔠 U+1D5201D4BD
d U+0064𝔡 U+1D5211D4BD
e U+0065𝔢 U+1D5221D4BD
f U+0066𝔣 U+1D5231D4BD
g U+0067𝔤 U+1D5241D4BD
h U+0068𝔥 U+1D5251D4BD
i U+0069𝔦 U+1D5261D4BD
j U+006A𝔧 U+1D5271D4BD
k U+006B𝔨 U+1D5281D4BD
l U+006C𝔩 U+1D5291D4BD
m U+006D𝔪 U+1D52A1D4BD
n U+006E𝔫 U+1D52B1D4BD
o U+006F𝔬 U+1D52C1D4BD
p U+0070𝔭 U+1D52D1D4BD
q U+0071𝔮 U+1D52E1D4BD
r U+0072𝔯 U+1D52F1D4BD
s U+0073𝔰 U+1D5301D4BD
t U+0074𝔱 U+1D5311D4BD
u U+0075𝔲 U+1D5321D4BD
v U+0076𝔳 U+1D5331D4BD
w U+0077𝔴 U+1D5341D4BD
x U+0078𝔵 U+1D5351D4BD
y U+0079𝔶 U+1D5361D4BD
z U+007A𝔷 U+1D5371D4BD
+
+

C.6 script mappings

This section is non-normative.

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
OriginalscriptΔcode point
A U+0041𝒜 U+1D49C1D45B
B U+0042ℬ U+0212C20EA
C U+0043𝒞 U+1D49E1D45B
D U+0044𝒟 U+1D49F1D45B
E U+0045ℰ U+0213020EB
F U+0046ℱ U+0213120EB
G U+0047𝒢 U+1D4A21D45B
H U+0048ℋ U+0210B20C3
I U+0049ℐ U+0211020C7
J U+004A𝒥 U+1D4A51D45B
K U+004B𝒦 U+1D4A61D45B
L U+004Cℒ U+0211220C6
M U+004Dℳ U+0213320E6
N U+004E𝒩 U+1D4A91D45B
O U+004F𝒪 U+1D4AA1D45B
P U+0050𝒫 U+1D4AB1D45B
Q U+0051𝒬 U+1D4AC1D45B
R U+0052ℛ U+0211B20C9
S U+0053𝒮 U+1D4AE1D45B
T U+0054𝒯 U+1D4AF1D45B
U U+0055𝒰 U+1D4B01D45B
V U+0056𝒱 U+1D4B11D45B
W U+0057𝒲 U+1D4B21D45B
X U+0058𝒳 U+1D4B31D45B
Y U+0059𝒴 U+1D4B41D45B
Z U+005A𝒵 U+1D4B51D45B
a U+0061𝒶 U+1D4B61D455
b U+0062𝒷 U+1D4B71D455
c U+0063𝒸 U+1D4B81D455
d U+0064𝒹 U+1D4B91D455
e U+0065ℯ U+0212F20CA
f U+0066𝒻 U+1D4BB1D455
g U+0067ℊ U+0210A20A3
h U+0068𝒽 U+1D4BD1D455
i U+0069𝒾 U+1D4BE1D455
j U+006A𝒿 U+1D4BF1D455
k U+006B𝓀 U+1D4C01D455
l U+006C𝓁 U+1D4C11D455
m U+006D𝓂 U+1D4C21D455
n U+006E𝓃 U+1D4C31D455
o U+006Fℴ U+0213420C5
p U+0070𝓅 U+1D4C51D455
q U+0071𝓆 U+1D4C61D455
r U+0072𝓇 U+1D4C71D455
s U+0073𝓈 U+1D4C81D455
t U+0074𝓉 U+1D4C91D455
u U+0075𝓊 U+1D4CA1D455
v U+0076𝓋 U+1D4CB1D455
w U+0077𝓌 U+1D4CC1D455
x U+0078𝓍 U+1D4CD1D455
y U+0079𝓎 U+1D4CE1D455
z U+007A𝓏 U+1D4CF1D455
+
+

C.7 monospace mappings

This section is non-normative.

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
OriginalmonospaceΔcode point
A U+0041𝙰 U+1D6701D62F
B U+0042𝙱 U+1D6711D62F
C U+0043𝙲 U+1D6721D62F
D U+0044𝙳 U+1D6731D62F
E U+0045𝙴 U+1D6741D62F
F U+0046𝙵 U+1D6751D62F
G U+0047𝙶 U+1D6761D62F
H U+0048𝙷 U+1D6771D62F
I U+0049𝙸 U+1D6781D62F
J U+004A𝙹 U+1D6791D62F
K U+004B𝙺 U+1D67A1D62F
L U+004C𝙻 U+1D67B1D62F
M U+004D𝙼 U+1D67C1D62F
N U+004E𝙽 U+1D67D1D62F
O U+004F𝙾 U+1D67E1D62F
P U+0050𝙿 U+1D67F1D62F
Q U+0051𝚀 U+1D6801D62F
R U+0052𝚁 U+1D6811D62F
S U+0053𝚂 U+1D6821D62F
T U+0054𝚃 U+1D6831D62F
U U+0055𝚄 U+1D6841D62F
V U+0056𝚅 U+1D6851D62F
W U+0057𝚆 U+1D6861D62F
X U+0058𝚇 U+1D6871D62F
Y U+0059𝚈 U+1D6881D62F
Z U+005A𝚉 U+1D6891D62F
a U+0061𝚊 U+1D68A1D629
b U+0062𝚋 U+1D68B1D629
c U+0063𝚌 U+1D68C1D629
d U+0064𝚍 U+1D68D1D629
e U+0065𝚎 U+1D68E1D629
f U+0066𝚏 U+1D68F1D629
g U+0067𝚐 U+1D6901D629
h U+0068𝚑 U+1D6911D629
i U+0069𝚒 U+1D6921D629
j U+006A𝚓 U+1D6931D629
k U+006B𝚔 U+1D6941D629
l U+006C𝚕 U+1D6951D629
m U+006D𝚖 U+1D6961D629
n U+006E𝚗 U+1D6971D629
o U+006F𝚘 U+1D6981D629
p U+0070𝚙 U+1D6991D629
q U+0071𝚚 U+1D69A1D629
r U+0072𝚛 U+1D69B1D629
s U+0073𝚜 U+1D69C1D629
t U+0074𝚝 U+1D69D1D629
u U+0075𝚞 U+1D69E1D629
v U+0076𝚟 U+1D69F1D629
w U+0077𝚠 U+1D6A01D629
x U+0078𝚡 U+1D6A11D629
y U+0079𝚢 U+1D6A21D629
z U+007A𝚣 U+1D6A31D629
0 U+0030𝟶 U+1D7F61D7C6
1 U+0031𝟷 U+1D7F71D7C6
2 U+0032𝟸 U+1D7F81D7C6
3 U+0033𝟹 U+1D7F91D7C6
4 U+0034𝟺 U+1D7FA1D7C6
5 U+0035𝟻 U+1D7FB1D7C6
6 U+0036𝟼 U+1D7FC1D7C6
7 U+0037𝟽 U+1D7FD1D7C6
8 U+0038𝟾 U+1D7FE1D7C6
9 U+0039𝟿 U+1D7FF1D7C6
+
+

C.8 initial mappings

This section is non-normative.

+ +
+ + + + + + + + + + + + + + + + + + + + + + +
OriginalinitialΔcode point
ب U+0628𞸡 U+1EE211E7F9
ج U+062C𞸢 U+1EE221E7F6
ه U+0647𞸤 U+1EE241E7DD
ح U+062D𞸧 U+1EE271E7FA
ي U+064A𞸩 U+1EE291E7DF
ك U+0643𞸪 U+1EE2A1E7E7
ل U+0644𞸫 U+1EE2B1E7E7
م U+0645𞸬 U+1EE2C1E7E7
ن U+0646𞸭 U+1EE2D1E7E7
س U+0633𞸮 U+1EE2E1E7FB
ع U+0639𞸯 U+1EE2F1E7F6
ف U+0641𞸰 U+1EE301E7EF
ص U+0635𞸱 U+1EE311E7FC
ق U+0642𞸲 U+1EE321E7F0
ش U+0634𞸴 U+1EE341E800
ت U+062A𞸵 U+1EE351E80B
ث U+062B𞸶 U+1EE361E80B
خ U+062E𞸷 U+1EE371E809
ض U+0636𞸹 U+1EE391E803
غ U+063A𞸻 U+1EE3B1E801
+
+

C.9 sans-serif mappings

This section is non-normative.

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Originalsans-serifΔcode point
A U+0041𝖠 U+1D5A01D55F
B U+0042𝖡 U+1D5A11D55F
C U+0043𝖢 U+1D5A21D55F
D U+0044𝖣 U+1D5A31D55F
E U+0045𝖤 U+1D5A41D55F
F U+0046𝖥 U+1D5A51D55F
G U+0047𝖦 U+1D5A61D55F
H U+0048𝖧 U+1D5A71D55F
I U+0049𝖨 U+1D5A81D55F
J U+004A𝖩 U+1D5A91D55F
K U+004B𝖪 U+1D5AA1D55F
L U+004C𝖫 U+1D5AB1D55F
M U+004D𝖬 U+1D5AC1D55F
N U+004E𝖭 U+1D5AD1D55F
O U+004F𝖮 U+1D5AE1D55F
P U+0050𝖯 U+1D5AF1D55F
Q U+0051𝖰 U+1D5B01D55F
R U+0052𝖱 U+1D5B11D55F
S U+0053𝖲 U+1D5B21D55F
T U+0054𝖳 U+1D5B31D55F
U U+0055𝖴 U+1D5B41D55F
V U+0056𝖵 U+1D5B51D55F
W U+0057𝖶 U+1D5B61D55F
X U+0058𝖷 U+1D5B71D55F
Y U+0059𝖸 U+1D5B81D55F
Z U+005A𝖹 U+1D5B91D55F
a U+0061𝖺 U+1D5BA1D559
b U+0062𝖻 U+1D5BB1D559
c U+0063𝖼 U+1D5BC1D559
d U+0064𝖽 U+1D5BD1D559
e U+0065𝖾 U+1D5BE1D559
f U+0066𝖿 U+1D5BF1D559
g U+0067𝗀 U+1D5C01D559
h U+0068𝗁 U+1D5C11D559
i U+0069𝗂 U+1D5C21D559
j U+006A𝗃 U+1D5C31D559
k U+006B𝗄 U+1D5C41D559
l U+006C𝗅 U+1D5C51D559
m U+006D𝗆 U+1D5C61D559
n U+006E𝗇 U+1D5C71D559
o U+006F𝗈 U+1D5C81D559
p U+0070𝗉 U+1D5C91D559
q U+0071𝗊 U+1D5CA1D559
r U+0072𝗋 U+1D5CB1D559
s U+0073𝗌 U+1D5CC1D559
t U+0074𝗍 U+1D5CD1D559
u U+0075𝗎 U+1D5CE1D559
v U+0076𝗏 U+1D5CF1D559
w U+0077𝗐 U+1D5D01D559
x U+0078𝗑 U+1D5D11D559
y U+0079𝗒 U+1D5D21D559
z U+007A𝗓 U+1D5D31D559
0 U+0030𝟢 U+1D7E21D7B2
1 U+0031𝟣 U+1D7E31D7B2
2 U+0032𝟤 U+1D7E41D7B2
3 U+0033𝟥 U+1D7E51D7B2
4 U+0034𝟦 U+1D7E61D7B2
5 U+0035𝟧 U+1D7E71D7B2
6 U+0036𝟨 U+1D7E81D7B2
7 U+0037𝟩 U+1D7E91D7B2
8 U+0038𝟪 U+1D7EA1D7B2
9 U+0039𝟫 U+1D7EB1D7B2
+
+

C.10 double-struck mappings

This section is non-normative.

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Originaldouble-struckΔcode point
A U+0041𝔸 U+1D5381D4F7
B U+0042𝔹 U+1D5391D4F7
C U+0043ℂ U+0210220BF
D U+0044𝔻 U+1D53B1D4F7
E U+0045𝔼 U+1D53C1D4F7
F U+0046𝔽 U+1D53D1D4F7
G U+0047𝔾 U+1D53E1D4F7
H U+0048ℍ U+0210D20C5
I U+0049𝕀 U+1D5401D4F7
J U+004A𝕁 U+1D5411D4F7
K U+004B𝕂 U+1D5421D4F7
L U+004C𝕃 U+1D5431D4F7
M U+004D𝕄 U+1D5441D4F7
N U+004Eℕ U+0211520C7
O U+004F𝕆 U+1D5461D4F7
P U+0050ℙ U+0211920C9
Q U+0051ℚ U+0211A20C9
R U+0052ℝ U+0211D20CB
S U+0053𝕊 U+1D54A1D4F7
T U+0054𝕋 U+1D54B1D4F7
U U+0055𝕌 U+1D54C1D4F7
V U+0056𝕍 U+1D54D1D4F7
W U+0057𝕎 U+1D54E1D4F7
X U+0058𝕏 U+1D54F1D4F7
Y U+0059𝕐 U+1D5501D4F7
Z U+005Aℤ U+0212420CA
a U+0061𝕒 U+1D5521D4F1
b U+0062𝕓 U+1D5531D4F1
c U+0063𝕔 U+1D5541D4F1
d U+0064𝕕 U+1D5551D4F1
e U+0065𝕖 U+1D5561D4F1
f U+0066𝕗 U+1D5571D4F1
g U+0067𝕘 U+1D5581D4F1
h U+0068𝕙 U+1D5591D4F1
i U+0069𝕚 U+1D55A1D4F1
j U+006A𝕛 U+1D55B1D4F1
k U+006B𝕜 U+1D55C1D4F1
l U+006C𝕝 U+1D55D1D4F1
m U+006D𝕞 U+1D55E1D4F1
n U+006E𝕟 U+1D55F1D4F1
o U+006F𝕠 U+1D5601D4F1
p U+0070𝕡 U+1D5611D4F1
q U+0071𝕢 U+1D5621D4F1
r U+0072𝕣 U+1D5631D4F1
s U+0073𝕤 U+1D5641D4F1
t U+0074𝕥 U+1D5651D4F1
u U+0075𝕦 U+1D5661D4F1
v U+0076𝕧 U+1D5671D4F1
w U+0077𝕨 U+1D5681D4F1
x U+0078𝕩 U+1D5691D4F1
y U+0079𝕪 U+1D56A1D4F1
z U+007A𝕫 U+1D56B1D4F1
0 U+0030𝟘 U+1D7D81D7A8
1 U+0031𝟙 U+1D7D91D7A8
2 U+0032𝟚 U+1D7DA1D7A8
3 U+0033𝟛 U+1D7DB1D7A8
4 U+0034𝟜 U+1D7DC1D7A8
5 U+0035𝟝 U+1D7DD1D7A8
6 U+0036𝟞 U+1D7DE1D7A8
7 U+0037𝟟 U+1D7DF1D7A8
8 U+0038𝟠 U+1D7E01D7A8
9 U+0039𝟡 U+1D7E11D7A8
ب U+0628𞺡 U+1EEA11E879
ج U+062C𞺢 U+1EEA21E876
د U+062F𞺣 U+1EEA31E874
و U+0648𞺥 U+1EEA51E85D
ز U+0632𞺦 U+1EEA61E874
ح U+062D𞺧 U+1EEA71E87A
ط U+0637𞺨 U+1EEA81E871
ي U+064A𞺩 U+1EEA91E85F
ل U+0644𞺫 U+1EEAB1E867
م U+0645𞺬 U+1EEAC1E867
ن U+0646𞺭 U+1EEAD1E867
س U+0633𞺮 U+1EEAE1E87B
ع U+0639𞺯 U+1EEAF1E876
ف U+0641𞺰 U+1EEB01E86F
ص U+0635𞺱 U+1EEB11E87C
ق U+0642𞺲 U+1EEB21E870
ر U+0631𞺳 U+1EEB31E882
ش U+0634𞺴 U+1EEB41E880
ت U+062A𞺵 U+1EEB51E88B
ث U+062B𞺶 U+1EEB61E88B
خ U+062E𞺷 U+1EEB71E889
ذ U+0630𞺸 U+1EEB81E888
ض U+0636𞺹 U+1EEB91E883
ظ U+0638𞺺 U+1EEBA1E882
غ U+063A𞺻 U+1EEBB1E881
+
+

C.11 looped mappings

This section is non-normative.

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
OriginalloopedΔcode point
ا U+0627𞺀 U+1EE801E859
ب U+0628𞺁 U+1EE811E859
ج U+062C𞺂 U+1EE821E856
د U+062F𞺃 U+1EE831E854
ه U+0647𞺄 U+1EE841E83D
و U+0648𞺅 U+1EE851E83D
ز U+0632𞺆 U+1EE861E854
ح U+062D𞺇 U+1EE871E85A
ط U+0637𞺈 U+1EE881E851
ي U+064A𞺉 U+1EE891E83F
ل U+0644𞺋 U+1EE8B1E847
م U+0645𞺌 U+1EE8C1E847
ن U+0646𞺍 U+1EE8D1E847
س U+0633𞺎 U+1EE8E1E85B
ع U+0639𞺏 U+1EE8F1E856
ف U+0641𞺐 U+1EE901E84F
ص U+0635𞺑 U+1EE911E85C
ق U+0642𞺒 U+1EE921E850
ر U+0631𞺓 U+1EE931E862
ش U+0634𞺔 U+1EE941E860
ت U+062A𞺕 U+1EE951E86B
ث U+062B𞺖 U+1EE961E86B
خ U+062E𞺗 U+1EE971E869
ذ U+0630𞺘 U+1EE981E868
ض U+0636𞺙 U+1EE991E863
ظ U+0638𞺚 U+1EE9A1E862
غ U+063A𞺛 U+1EE9B1E861
+
+

C.12 stretched mappings

This section is non-normative.

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + +
OriginalstretchedΔcode point
ب U+0628𞹡 U+1EE611E839
ج U+062C𞹢 U+1EE621E836
ه U+0647𞹤 U+1EE641E81D
ح U+062D𞹧 U+1EE671E83A
ط U+0637𞹨 U+1EE681E831
ي U+064A𞹩 U+1EE691E81F
ك U+0643𞹪 U+1EE6A1E827
م U+0645𞹬 U+1EE6C1E827
ن U+0646𞹭 U+1EE6D1E827
س U+0633𞹮 U+1EE6E1E83B
ع U+0639𞹯 U+1EE6F1E836
ف U+0641𞹰 U+1EE701E82F
ص U+0635𞹱 U+1EE711E83C
ق U+0642𞹲 U+1EE721E830
ش U+0634𞹴 U+1EE741E840
ت U+062A𞹵 U+1EE751E84B
ث U+062B𞹶 U+1EE761E84B
خ U+062E𞹷 U+1EE771E849
ض U+0636𞹹 U+1EE791E843
ظ U+0638𞹺 U+1EE7A1E842
غ U+063A𞹻 U+1EE7B1E841
ٮ U+066E𞹼 U+1EE7C1E80E
ڡ U+06A1𞹾 U+1EE7E1E7DD
+
+

C.13 italic mappings

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
OriginalitalicΔcode point
A U+0041𝐴 U+1D4341D3F3
B U+0042𝐵 U+1D4351D3F3
C U+0043𝐶 U+1D4361D3F3
D U+0044𝐷 U+1D4371D3F3
E U+0045𝐸 U+1D4381D3F3
F U+0046𝐹 U+1D4391D3F3
G U+0047𝐺 U+1D43A1D3F3
H U+0048𝐻 U+1D43B1D3F3
I U+0049𝐼 U+1D43C1D3F3
J U+004A𝐽 U+1D43D1D3F3
K U+004B𝐾 U+1D43E1D3F3
L U+004C𝐿 U+1D43F1D3F3
M U+004D𝑀 U+1D4401D3F3
N U+004E𝑁 U+1D4411D3F3
O U+004F𝑂 U+1D4421D3F3
P U+0050𝑃 U+1D4431D3F3
Q U+0051𝑄 U+1D4441D3F3
R U+0052𝑅 U+1D4451D3F3
S U+0053𝑆 U+1D4461D3F3
T U+0054𝑇 U+1D4471D3F3
U U+0055𝑈 U+1D4481D3F3
V U+0056𝑉 U+1D4491D3F3
W U+0057𝑊 U+1D44A1D3F3
X U+0058𝑋 U+1D44B1D3F3
Y U+0059𝑌 U+1D44C1D3F3
Z U+005A𝑍 U+1D44D1D3F3
a U+0061𝑎 U+1D44E1D3ED
b U+0062𝑏 U+1D44F1D3ED
c U+0063𝑐 U+1D4501D3ED
d U+0064𝑑 U+1D4511D3ED
e U+0065𝑒 U+1D4521D3ED
f U+0066𝑓 U+1D4531D3ED
g U+0067𝑔 U+1D4541D3ED
h U+0068ℎ U+0210E20A6
i U+0069𝑖 U+1D4561D3ED
j U+006A𝑗 U+1D4571D3ED
k U+006B𝑘 U+1D4581D3ED
l U+006C𝑙 U+1D4591D3ED
m U+006D𝑚 U+1D45A1D3ED
n U+006E𝑛 U+1D45B1D3ED
o U+006F𝑜 U+1D45C1D3ED
p U+0070𝑝 U+1D45D1D3ED
q U+0071𝑞 U+1D45E1D3ED
r U+0072𝑟 U+1D45F1D3ED
s U+0073𝑠 U+1D4601D3ED
t U+0074𝑡 U+1D4611D3ED
u U+0075𝑢 U+1D4621D3ED
v U+0076𝑣 U+1D4631D3ED
w U+0077𝑤 U+1D4641D3ED
x U+0078𝑥 U+1D4651D3ED
y U+0079𝑦 U+1D4661D3ED
z U+007A𝑧 U+1D4671D3ED
ı U+0131𝚤 U+1D6A41D573
ȷ U+0237𝚥 U+1D6A51D46E
Α U+0391𝛢 U+1D6E21D351
Β U+0392𝛣 U+1D6E31D351
Γ U+0393𝛤 U+1D6E41D351
Δ U+0394𝛥 U+1D6E51D351
Ε U+0395𝛦 U+1D6E61D351
Ζ U+0396𝛧 U+1D6E71D351
Η U+0397𝛨 U+1D6E81D351
Θ U+0398𝛩 U+1D6E91D351
Ι U+0399𝛪 U+1D6EA1D351
Κ U+039A𝛫 U+1D6EB1D351
Λ U+039B𝛬 U+1D6EC1D351
Μ U+039C𝛭 U+1D6ED1D351
Ν U+039D𝛮 U+1D6EE1D351
Ξ U+039E𝛯 U+1D6EF1D351
Ο U+039F𝛰 U+1D6F01D351
Π U+03A0𝛱 U+1D6F11D351
Ρ U+03A1𝛲 U+1D6F21D351
ϴ U+03F4𝛳 U+1D6F31D2FF
Σ U+03A3𝛴 U+1D6F41D351
Τ U+03A4𝛵 U+1D6F51D351
Υ U+03A5𝛶 U+1D6F61D351
Φ U+03A6𝛷 U+1D6F71D351
Χ U+03A7𝛸 U+1D6F81D351
Ψ U+03A8𝛹 U+1D6F91D351
Ω U+03A9𝛺 U+1D6FA1D351
∇ U+2207𝛻 U+1D6FB1B4F4
α U+03B1𝛼 U+1D6FC1D34B
β U+03B2𝛽 U+1D6FD1D34B
γ U+03B3𝛾 U+1D6FE1D34B
δ U+03B4𝛿 U+1D6FF1D34B
ε U+03B5𝜀 U+1D7001D34B
ζ U+03B6𝜁 U+1D7011D34B
η U+03B7𝜂 U+1D7021D34B
θ U+03B8𝜃 U+1D7031D34B
ι U+03B9𝜄 U+1D7041D34B
κ U+03BA𝜅 U+1D7051D34B
λ U+03BB𝜆 U+1D7061D34B
μ U+03BC𝜇 U+1D7071D34B
ν U+03BD𝜈 U+1D7081D34B
ξ U+03BE𝜉 U+1D7091D34B
ο U+03BF𝜊 U+1D70A1D34B
π U+03C0𝜋 U+1D70B1D34B
ρ U+03C1𝜌 U+1D70C1D34B
ς U+03C2𝜍 U+1D70D1D34B
σ U+03C3𝜎 U+1D70E1D34B
τ U+03C4𝜏 U+1D70F1D34B
υ U+03C5𝜐 U+1D7101D34B
φ U+03C6𝜑 U+1D7111D34B
χ U+03C7𝜒 U+1D7121D34B
ψ U+03C8𝜓 U+1D7131D34B
ω U+03C9𝜔 U+1D7141D34B
∂ U+2202𝜕 U+1D7151B513
ϵ U+03F5𝜖 U+1D7161D321
ϑ U+03D1𝜗 U+1D7171D346
ϰ U+03F0𝜘 U+1D7181D328
ϕ U+03D5𝜙 U+1D7191D344
ϱ U+03F1𝜚 U+1D71A1D329
ϖ U+03D6𝜛 U+1D71B1D345
+
+

C.14 bold-fraktur mappings

This section is non-normative.

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Originalbold-frakturΔcode point
A U+0041𝕬 U+1D56C1D52B
B U+0042𝕭 U+1D56D1D52B
C U+0043𝕮 U+1D56E1D52B
D U+0044𝕯 U+1D56F1D52B
E U+0045𝕰 U+1D5701D52B
F U+0046𝕱 U+1D5711D52B
G U+0047𝕲 U+1D5721D52B
H U+0048𝕳 U+1D5731D52B
I U+0049𝕴 U+1D5741D52B
J U+004A𝕵 U+1D5751D52B
K U+004B𝕶 U+1D5761D52B
L U+004C𝕷 U+1D5771D52B
M U+004D𝕸 U+1D5781D52B
N U+004E𝕹 U+1D5791D52B
O U+004F𝕺 U+1D57A1D52B
P U+0050𝕻 U+1D57B1D52B
Q U+0051𝕼 U+1D57C1D52B
R U+0052𝕽 U+1D57D1D52B
S U+0053𝕾 U+1D57E1D52B
T U+0054𝕿 U+1D57F1D52B
U U+0055𝖀 U+1D5801D52B
V U+0056𝖁 U+1D5811D52B
W U+0057𝖂 U+1D5821D52B
X U+0058𝖃 U+1D5831D52B
Y U+0059𝖄 U+1D5841D52B
Z U+005A𝖅 U+1D5851D52B
a U+0061𝖆 U+1D5861D525
b U+0062𝖇 U+1D5871D525
c U+0063𝖈 U+1D5881D525
d U+0064𝖉 U+1D5891D525
e U+0065𝖊 U+1D58A1D525
f U+0066𝖋 U+1D58B1D525
g U+0067𝖌 U+1D58C1D525
h U+0068𝖍 U+1D58D1D525
i U+0069𝖎 U+1D58E1D525
j U+006A𝖏 U+1D58F1D525
k U+006B𝖐 U+1D5901D525
l U+006C𝖑 U+1D5911D525
m U+006D𝖒 U+1D5921D525
n U+006E𝖓 U+1D5931D525
o U+006F𝖔 U+1D5941D525
p U+0070𝖕 U+1D5951D525
q U+0071𝖖 U+1D5961D525
r U+0072𝖗 U+1D5971D525
s U+0073𝖘 U+1D5981D525
t U+0074𝖙 U+1D5991D525
u U+0075𝖚 U+1D59A1D525
v U+0076𝖛 U+1D59B1D525
w U+0077𝖜 U+1D59C1D525
x U+0078𝖝 U+1D59D1D525
y U+0079𝖞 U+1D59E1D525
z U+007A𝖟 U+1D59F1D525
+
+

C.15 sans-serif-bold-italic mappings

This section is non-normative.

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Originalsans-serif-bold-italicΔcode point
A U+0041𝘼 U+1D63C1D5FB
B U+0042𝘽 U+1D63D1D5FB
C U+0043𝘾 U+1D63E1D5FB
D U+0044𝘿 U+1D63F1D5FB
E U+0045𝙀 U+1D6401D5FB
F U+0046𝙁 U+1D6411D5FB
G U+0047𝙂 U+1D6421D5FB
H U+0048𝙃 U+1D6431D5FB
I U+0049𝙄 U+1D6441D5FB
J U+004A𝙅 U+1D6451D5FB
K U+004B𝙆 U+1D6461D5FB
L U+004C𝙇 U+1D6471D5FB
M U+004D𝙈 U+1D6481D5FB
N U+004E𝙉 U+1D6491D5FB
O U+004F𝙊 U+1D64A1D5FB
P U+0050𝙋 U+1D64B1D5FB
Q U+0051𝙌 U+1D64C1D5FB
R U+0052𝙍 U+1D64D1D5FB
S U+0053𝙎 U+1D64E1D5FB
T U+0054𝙏 U+1D64F1D5FB
U U+0055𝙐 U+1D6501D5FB
V U+0056𝙑 U+1D6511D5FB
W U+0057𝙒 U+1D6521D5FB
X U+0058𝙓 U+1D6531D5FB
Y U+0059𝙔 U+1D6541D5FB
Z U+005A𝙕 U+1D6551D5FB
a U+0061𝙖 U+1D6561D5F5
b U+0062𝙗 U+1D6571D5F5
c U+0063𝙘 U+1D6581D5F5
d U+0064𝙙 U+1D6591D5F5
e U+0065𝙚 U+1D65A1D5F5
f U+0066𝙛 U+1D65B1D5F5
g U+0067𝙜 U+1D65C1D5F5
h U+0068𝙝 U+1D65D1D5F5
i U+0069𝙞 U+1D65E1D5F5
j U+006A𝙟 U+1D65F1D5F5
k U+006B𝙠 U+1D6601D5F5
l U+006C𝙡 U+1D6611D5F5
m U+006D𝙢 U+1D6621D5F5
n U+006E𝙣 U+1D6631D5F5
o U+006F𝙤 U+1D6641D5F5
p U+0070𝙥 U+1D6651D5F5
q U+0071𝙦 U+1D6661D5F5
r U+0072𝙧 U+1D6671D5F5
s U+0073𝙨 U+1D6681D5F5
t U+0074𝙩 U+1D6691D5F5
u U+0075𝙪 U+1D66A1D5F5
v U+0076𝙫 U+1D66B1D5F5
w U+0077𝙬 U+1D66C1D5F5
x U+0078𝙭 U+1D66D1D5F5
y U+0079𝙮 U+1D66E1D5F5
z U+007A𝙯 U+1D66F1D5F5
Α U+0391𝞐 U+1D7901D3FF
Β U+0392𝞑 U+1D7911D3FF
Γ U+0393𝞒 U+1D7921D3FF
Δ U+0394𝞓 U+1D7931D3FF
Ε U+0395𝞔 U+1D7941D3FF
Ζ U+0396𝞕 U+1D7951D3FF
Η U+0397𝞖 U+1D7961D3FF
Θ U+0398𝞗 U+1D7971D3FF
Ι U+0399𝞘 U+1D7981D3FF
Κ U+039A𝞙 U+1D7991D3FF
Λ U+039B𝞚 U+1D79A1D3FF
Μ U+039C𝞛 U+1D79B1D3FF
Ν U+039D𝞜 U+1D79C1D3FF
Ξ U+039E𝞝 U+1D79D1D3FF
Ο U+039F𝞞 U+1D79E1D3FF
Π U+03A0𝞟 U+1D79F1D3FF
Ρ U+03A1𝞠 U+1D7A01D3FF
ϴ U+03F4𝞡 U+1D7A11D3AD
Σ U+03A3𝞢 U+1D7A21D3FF
Τ U+03A4𝞣 U+1D7A31D3FF
Υ U+03A5𝞤 U+1D7A41D3FF
Φ U+03A6𝞥 U+1D7A51D3FF
Χ U+03A7𝞦 U+1D7A61D3FF
Ψ U+03A8𝞧 U+1D7A71D3FF
Ω U+03A9𝞨 U+1D7A81D3FF
∇ U+2207𝞩 U+1D7A91B5A2
α U+03B1𝞪 U+1D7AA1D3F9
β U+03B2𝞫 U+1D7AB1D3F9
γ U+03B3𝞬 U+1D7AC1D3F9
δ U+03B4𝞭 U+1D7AD1D3F9
ε U+03B5𝞮 U+1D7AE1D3F9
ζ U+03B6𝞯 U+1D7AF1D3F9
η U+03B7𝞰 U+1D7B01D3F9
θ U+03B8𝞱 U+1D7B11D3F9
ι U+03B9𝞲 U+1D7B21D3F9
κ U+03BA𝞳 U+1D7B31D3F9
λ U+03BB𝞴 U+1D7B41D3F9
μ U+03BC𝞵 U+1D7B51D3F9
ν U+03BD𝞶 U+1D7B61D3F9
ξ U+03BE𝞷 U+1D7B71D3F9
ο U+03BF𝞸 U+1D7B81D3F9
π U+03C0𝞹 U+1D7B91D3F9
ρ U+03C1𝞺 U+1D7BA1D3F9
ς U+03C2𝞻 U+1D7BB1D3F9
σ U+03C3𝞼 U+1D7BC1D3F9
τ U+03C4𝞽 U+1D7BD1D3F9
υ U+03C5𝞾 U+1D7BE1D3F9
φ U+03C6𝞿 U+1D7BF1D3F9
χ U+03C7𝟀 U+1D7C01D3F9
ψ U+03C8𝟁 U+1D7C11D3F9
ω U+03C9𝟂 U+1D7C21D3F9
∂ U+2202𝟃 U+1D7C31B5C1
ϵ U+03F5𝟄 U+1D7C41D3CF
ϑ U+03D1𝟅 U+1D7C51D3F4
ϰ U+03F0𝟆 U+1D7C61D3D6
ϕ U+03D5𝟇 U+1D7C71D3F2
ϱ U+03F1𝟈 U+1D7C81D3D7
ϖ U+03D6𝟉 U+1D7C91D3F3
+
+

C.16 sans-serif-italic mappings

This section is non-normative.

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Originalsans-serif-italicΔcode point
A U+0041𝘈 U+1D6081D5C7
B U+0042𝘉 U+1D6091D5C7
C U+0043𝘊 U+1D60A1D5C7
D U+0044𝘋 U+1D60B1D5C7
E U+0045𝘌 U+1D60C1D5C7
F U+0046𝘍 U+1D60D1D5C7
G U+0047𝘎 U+1D60E1D5C7
H U+0048𝘏 U+1D60F1D5C7
I U+0049𝘐 U+1D6101D5C7
J U+004A𝘑 U+1D6111D5C7
K U+004B𝘒 U+1D6121D5C7
L U+004C𝘓 U+1D6131D5C7
M U+004D𝘔 U+1D6141D5C7
N U+004E𝘕 U+1D6151D5C7
O U+004F𝘖 U+1D6161D5C7
P U+0050𝘗 U+1D6171D5C7
Q U+0051𝘘 U+1D6181D5C7
R U+0052𝘙 U+1D6191D5C7
S U+0053𝘚 U+1D61A1D5C7
T U+0054𝘛 U+1D61B1D5C7
U U+0055𝘜 U+1D61C1D5C7
V U+0056𝘝 U+1D61D1D5C7
W U+0057𝘞 U+1D61E1D5C7
X U+0058𝘟 U+1D61F1D5C7
Y U+0059𝘠 U+1D6201D5C7
Z U+005A𝘡 U+1D6211D5C7
a U+0061𝘢 U+1D6221D5C1
b U+0062𝘣 U+1D6231D5C1
c U+0063𝘤 U+1D6241D5C1
d U+0064𝘥 U+1D6251D5C1
e U+0065𝘦 U+1D6261D5C1
f U+0066𝘧 U+1D6271D5C1
g U+0067𝘨 U+1D6281D5C1
h U+0068𝘩 U+1D6291D5C1
i U+0069𝘪 U+1D62A1D5C1
j U+006A𝘫 U+1D62B1D5C1
k U+006B𝘬 U+1D62C1D5C1
l U+006C𝘭 U+1D62D1D5C1
m U+006D𝘮 U+1D62E1D5C1
n U+006E𝘯 U+1D62F1D5C1
o U+006F𝘰 U+1D6301D5C1
p U+0070𝘱 U+1D6311D5C1
q U+0071𝘲 U+1D6321D5C1
r U+0072𝘳 U+1D6331D5C1
s U+0073𝘴 U+1D6341D5C1
t U+0074𝘵 U+1D6351D5C1
u U+0075𝘶 U+1D6361D5C1
v U+0076𝘷 U+1D6371D5C1
w U+0077𝘸 U+1D6381D5C1
x U+0078𝘹 U+1D6391D5C1
y U+0079𝘺 U+1D63A1D5C1
z U+007A𝘻 U+1D63B1D5C1
+
+

C.17 bold-sans-serif mappings

This section is non-normative.

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Originalbold-sans-serifΔcode point
A U+0041𝗔 U+1D5D41D593
B U+0042𝗕 U+1D5D51D593
C U+0043𝗖 U+1D5D61D593
D U+0044𝗗 U+1D5D71D593
E U+0045𝗘 U+1D5D81D593
F U+0046𝗙 U+1D5D91D593
G U+0047𝗚 U+1D5DA1D593
H U+0048𝗛 U+1D5DB1D593
I U+0049𝗜 U+1D5DC1D593
J U+004A𝗝 U+1D5DD1D593
K U+004B𝗞 U+1D5DE1D593
L U+004C𝗟 U+1D5DF1D593
M U+004D𝗠 U+1D5E01D593
N U+004E𝗡 U+1D5E11D593
O U+004F𝗢 U+1D5E21D593
P U+0050𝗣 U+1D5E31D593
Q U+0051𝗤 U+1D5E41D593
R U+0052𝗥 U+1D5E51D593
S U+0053𝗦 U+1D5E61D593
T U+0054𝗧 U+1D5E71D593
U U+0055𝗨 U+1D5E81D593
V U+0056𝗩 U+1D5E91D593
W U+0057𝗪 U+1D5EA1D593
X U+0058𝗫 U+1D5EB1D593
Y U+0059𝗬 U+1D5EC1D593
Z U+005A𝗭 U+1D5ED1D593
a U+0061𝗮 U+1D5EE1D58D
b U+0062𝗯 U+1D5EF1D58D
c U+0063𝗰 U+1D5F01D58D
d U+0064𝗱 U+1D5F11D58D
e U+0065𝗲 U+1D5F21D58D
f U+0066𝗳 U+1D5F31D58D
g U+0067𝗴 U+1D5F41D58D
h U+0068𝗵 U+1D5F51D58D
i U+0069𝗶 U+1D5F61D58D
j U+006A𝗷 U+1D5F71D58D
k U+006B𝗸 U+1D5F81D58D
l U+006C𝗹 U+1D5F91D58D
m U+006D𝗺 U+1D5FA1D58D
n U+006E𝗻 U+1D5FB1D58D
o U+006F𝗼 U+1D5FC1D58D
p U+0070𝗽 U+1D5FD1D58D
q U+0071𝗾 U+1D5FE1D58D
r U+0072𝗿 U+1D5FF1D58D
s U+0073𝘀 U+1D6001D58D
t U+0074𝘁 U+1D6011D58D
u U+0075𝘂 U+1D6021D58D
v U+0076𝘃 U+1D6031D58D
w U+0077𝘄 U+1D6041D58D
x U+0078𝘅 U+1D6051D58D
y U+0079𝘆 U+1D6061D58D
z U+007A𝘇 U+1D6071D58D
Α U+0391𝝖 U+1D7561D3C5
Β U+0392𝝗 U+1D7571D3C5
Γ U+0393𝝘 U+1D7581D3C5
Δ U+0394𝝙 U+1D7591D3C5
Ε U+0395𝝚 U+1D75A1D3C5
Ζ U+0396𝝛 U+1D75B1D3C5
Η U+0397𝝜 U+1D75C1D3C5
Θ U+0398𝝝 U+1D75D1D3C5
Ι U+0399𝝞 U+1D75E1D3C5
Κ U+039A𝝟 U+1D75F1D3C5
Λ U+039B𝝠 U+1D7601D3C5
Μ U+039C𝝡 U+1D7611D3C5
Ν U+039D𝝢 U+1D7621D3C5
Ξ U+039E𝝣 U+1D7631D3C5
Ο U+039F𝝤 U+1D7641D3C5
Π U+03A0𝝥 U+1D7651D3C5
Ρ U+03A1𝝦 U+1D7661D3C5
ϴ U+03F4𝝧 U+1D7671D373
Σ U+03A3𝝨 U+1D7681D3C5
Τ U+03A4𝝩 U+1D7691D3C5
Υ U+03A5𝝪 U+1D76A1D3C5
Φ U+03A6𝝫 U+1D76B1D3C5
Χ U+03A7𝝬 U+1D76C1D3C5
Ψ U+03A8𝝭 U+1D76D1D3C5
Ω U+03A9𝝮 U+1D76E1D3C5
∇ U+2207𝝯 U+1D76F1B568
α U+03B1𝝰 U+1D7701D3BF
β U+03B2𝝱 U+1D7711D3BF
γ U+03B3𝝲 U+1D7721D3BF
δ U+03B4𝝳 U+1D7731D3BF
ε U+03B5𝝴 U+1D7741D3BF
ζ U+03B6𝝵 U+1D7751D3BF
η U+03B7𝝶 U+1D7761D3BF
θ U+03B8𝝷 U+1D7771D3BF
ι U+03B9𝝸 U+1D7781D3BF
κ U+03BA𝝹 U+1D7791D3BF
λ U+03BB𝝺 U+1D77A1D3BF
μ U+03BC𝝻 U+1D77B1D3BF
ν U+03BD𝝼 U+1D77C1D3BF
ξ U+03BE𝝽 U+1D77D1D3BF
ο U+03BF𝝾 U+1D77E1D3BF
π U+03C0𝝿 U+1D77F1D3BF
ρ U+03C1𝞀 U+1D7801D3BF
ς U+03C2𝞁 U+1D7811D3BF
σ U+03C3𝞂 U+1D7821D3BF
τ U+03C4𝞃 U+1D7831D3BF
υ U+03C5𝞄 U+1D7841D3BF
φ U+03C6𝞅 U+1D7851D3BF
χ U+03C7𝞆 U+1D7861D3BF
ψ U+03C8𝞇 U+1D7871D3BF
ω U+03C9𝞈 U+1D7881D3BF
∂ U+2202𝞉 U+1D7891B587
ϵ U+03F5𝞊 U+1D78A1D395
ϑ U+03D1𝞋 U+1D78B1D3BA
ϰ U+03F0𝞌 U+1D78C1D39C
ϕ U+03D5𝞍 U+1D78D1D3B8
ϱ U+03F1𝞎 U+1D78E1D39D
ϖ U+03D6𝞏 U+1D78F1D3B9
0 U+0030𝟬 U+1D7EC1D7BC
1 U+0031𝟭 U+1D7ED1D7BC
2 U+0032𝟮 U+1D7EE1D7BC
3 U+0033𝟯 U+1D7EF1D7BC
4 U+0034𝟰 U+1D7F01D7BC
5 U+0035𝟱 U+1D7F11D7BC
6 U+0036𝟲 U+1D7F21D7BC
7 U+0037𝟳 U+1D7F31D7BC
8 U+0038𝟴 U+1D7F41D7BC
9 U+0039𝟵 U+1D7F51D7BC
+
+
+

D. Acknowledgments

This section is non-normative.

+ +

MathML Core is based on MathML3. See the + appendix E + of [MathML3] for the people that contributed to that specification. +

+

MathML Core was initially developed by the MathML Community Group, and + then by the Math Working Group. Working Group or Community Group + members who regularly participated in MathML + Core meetings during the development of this specification: + Brian Kardell, + Bruce Miller, + Daniel Marques, + David Carlisle, + David Farmer, + Deyan Ginev, + Frédéric Wang, + Louis Mahler, + Moritz Schubotz, + Murray Sargent, + Neil Soiffer, + Patrick Ion, + Rob Buis, + Steve Noble and + Sam Dooley. +

+ +

In addition, we would like to extend special thanks to + Brian Kardell, + Neil Soiffer and + Rob Buis for help with the editing.

+

Many thanks also to the following people for their help with the + test suite: + Brian Kardell, + Frédéric Wang, + Neil Soiffer and + Rob Buis. + Several tests are also based on MathML tests from browser + repositories and we are grateful to the Mozilla and WebKit + contributors. +

+

We would like to thank the people who, through their input and + feedback on public communication channels, have helped us with the + creation of this specification: + André Greiner-Petter, + Anne van Kesteren, + Boris Zbarsky, + Brian Smith, + Elika Etemad, + Emilio Cobos Álvarez, + ExE Boss, + Ian Kilpatrick, + Koji Ishii, + L. David Baron, + Michael Kohlhase, + Michael Smith, + Ryosuke Niwa, + Sergey Malkin, + Tab Atkins Jr., + Viktor Yaffle and + frankvel. +

+ +
+

E. Security Considerations

This section is non-normative.

+ +

+ This specification adds script execution mechanisms via the + MathML event handler attributes described in + 2.1.3 Global Attributes. UAs may decide to prevent execution + of scripts specified in these attributes, following the same + security restrictions as those applying to HTML or SVG elements. +

+
Note
+

In [MathML3], it was possible to make any element linkable + via href or xlink:href attributes, with + an URL pointing to an untrusted resource or even + javascript: execution. These attributes are not + available in MathML Core. However, as described in + 2.2.1 HTML and SVG it is possible to embed + HTML or SVG content inside MathML, including HTML or SVG links. +

+
+
Note
+

In [MathML3], it was possible to use the + maction element with + the actiontype value set to "statusline" + in order to override the text of the browser statusline. In particular, + an attacker could use this + to hide the URL text of an untrusted link e.g.

+ +
<math>
+  <maction actiontype="statusline">
+    <mtext><a href="javascript:alert('JS execution')">Click me!</a></mtext>
+    <mtext>./this-is-a-safe-link.html</mtext>
+  </maction>
+</math>
+ +

This feature is not available in MathML Core, where + the maction element essentially behaves + like an mrow container with extra style.

+
+

An attacker can try to hang the UA by inserting very large + stretchy operators, effectively making the algorithm + shaping of the glyph assembly deal with a huge amount of + glyphs. UAs may work around this issue + by limiting rmin and + GlyphAssembly.partCount to + maximum values.

+

As described in + CSS Fonts Module, + an attacker can try to rely on malformed or malicious fonts to + exploit potential security faults in browser implementations. + Because the OpenType MATH table + is used extensively in this specification, UAs should ensure their font + sanitization mechanisms are able to deal with that table.

+

Finally, + in order to reduce attack surface, some UAs expose runtime options + to disable part of the web platform. Disabling MathML layout can + essentially be + achieved by forcing elements in the DOM tree to be put in the HTML + namespace and disabling 4. CSS Extensions for Math Layout. +

+
+

F. Privacy Considerations

This section is non-normative.

+ +

+ As explained in 2.2.1 HTML and SVG, + MathML can be embedded into an SVG image via the + <foreignObject> + element which can thus be used in a + canvas + element. + UA may decide to implement any measure to prevent potential + information leakage + such as tainting the canvas and returning a + "SecurityError" + when one tries to access the canvas' content via JavaScript APIs. +

+
+

+ In the following example, the canvas image is set to the image of + some MathML content with an HTML link to https://example.org/. + It should not be possible for an attacker to determine whether that + link was visited by reading pixels via context.getImageData(). + For more about links in MathML, see + E. Security Considerations. +

+
let svg = `
+  <svg xmlns="http://www.w3.org/2000/svg" width="100px" height="100px">
+    <foreignObject width="100" height="100"
+                   requiredExtensions="http://www.w3.org/1998/Math/MathML">
+      <math xmlns="http://www.w3.org/1998/Math/MathML">
+        <msqrt style="font-size: 25px">
+          <mtext>&#x25a0;</mtext>
+          <mtext><a href="https://example.org/">&#x25a0;</a></mtext>
+        </msqrt>
+      </math>
+    </foreignObject>
+  </svg>`;
+let image = new Image();
+image.width = 100;
+image.height = 100;
+image.onload = () => {
+  let canvas = document.createElement('canvas');
+  canvas.width = 100;
+  canvas.height = 100;
+  canvas.style = "border: 1px solid black";
+  document.body.appendChild(canvas);
+  let context = canvas.getContext("2d");
+  context.drawImage(image, 0, 0);
+};
+image.src = `data:image/svg+xml;base64,${window.btoa(svg)}`;
+
+

+ This specification describes layout of DOM + elements which may involve system + fonts. Like for HTML/CSS layout, + it is thus possible to use JavaScript APIs + (e.g. + context.getImageData() on content embedded in a canvas context, or even just + getBoundingClientRect()) + to measure box sizes and positions and infer data from system fonts. + By combining miscellaneous tests on such fonts and + comparing measurements against results of well-known fonts, an attacker + can try and determine the default fonts of the user. +

+
+

The following + HTML+CSS+JavaScript document relies on a Web font with exotic metrics + to try and determine whether A Well Known System Font + is available by default.

+
<style>
+  @font-face {
+    font-family: MyWebFontWithVeryWideGlyphs;
+    src: url("/fonts/my-web-fonts-with-very-wide-glyphs.woff");
+  }
+  #container {
+    font-family: AWellKnownSystemFont, MyWebFontWithVeryWideGlyphs;
+  }
+</style>
+<div id="container">SOMETEXT</div>
+<div id="reference">SOMETEXT</div>
+<script>
+document.fonts.ready.then(() => {
+  let containerWidth =
+    document.getElementById("container").getBoundingClientRect().width;
+  let referenceWidth =
+    document.getElementById("reference").getBoundingClientRect().width;
+  let isWellKnownSystemFontAvailable =
+    Math.abs(containerWidth - referenceWidth) < 1;
+});
+</script>
+
+
+

The following + HTML+CSS+JavaScript document tries to determine whether the + UI serif font provides Asian glyphs:

+
<style>
+  @font-face {
+    font-family: MyWebFontWithVeryWideAsianGlyphs;
+    src: url("/fonts/my-web-fonts-with-very-wide-asian-glyphs.woff");
+  }
+  #container {
+    font-family: ui-serif, MyWebFontWithVeryWideAsianGlyphs
+  }
+  #reference {
+    font-family: MyWebFontWithVeryWideAsianGlyphs;
+  }
+</style>
+<div id="container"></div>
+<div id="reference"></div>
+<script>
+document.fonts.ready.then(() => {
+  let containerWidth =
+    document.getElementById("container").getBoundingClientRect().width;
+  let referenceWidth =
+    document.getElementById("reference").getBoundingClientRect().width;
+  let uiSerifFontDoesNotContainAsianGlyph =
+    Math.abs(containerWidth - referenceWidth) < 1;
+});
+</script>
+
+
+

The following + HTML+CSS document contains the same text rendered with + text-decoration-thickness set to from-font and 1em (here + 100 pixels) + respectively. By comparing the heights of the two underlines, + one can calculate a good approximation of the + underlineThickness value from the PostScript Table + [OPEN-FONT-FORMAT]. +

+
<style>
+  #test {
+    font-size: 100px;
+  }
+  #container {
+    text-decoration-line: underline;
+    text-decoration-thickness: from-font;
+  }
+  #reference {
+    text-decoration-line: underline;
+    text-decoration-thickness: 1em;
+  }
+</style>
+<div id="test">
+  <div id="container">SOMETEXT</div>
+  <div id="reference">SOMETEXT</div>
+</div>
+
+

This specification relies on information from + 5. OpenType MATH table to render MathML content. One + can get good approximation of most + layout parameters from MathConstants and + MathGlyphInfo using measurement + techniques similar to what is described above for + HTML+CSS+JavaScript document. The use of the MathVariants + table for MathML rendering can also be observed by putting stretchy + operators of different sizes inside a canvas context.

+

Although none of these parameters taken individually are personal, + implementing this specification increases the set of exposed + font information that can be used by an attacker to implement + fingerprinting techniques. Typically, they could help determine + available and preferred math fonts for a user. +

+
+

G. Conformance

+ +

+ Conformance requirements are expressed with a combination of + descriptive assertions and RFC 2119 terminology. The key words “MUST”, + “MUST NOT”, “REQUIRED”, “SHALL”, “SHALL NOT”, “SHOULD”, “SHOULD NOT”, + “RECOMMENDED”, “MAY”, and “OPTIONAL” in the normative parts of this + document are to be interpreted as described in RFC 2119. + However, for readability, these words do not appear in all uppercase + letters in this specification. +

+

+ All of the text of this specification is normative except sections + explicitly marked as non-normative, examples, and notes. + [RFC2119] +

+

+ Examples in this specification are introduced with the words + “for example” or are set apart from the normative text with + class="example", like this: +

+
+

+ This is an example of an informative example. +

+
+

+ Informative notes begin with the word “Note” and are set apart from + the normative text with class="note", like this: +

+
Note

+ Note, this is an informative note. +

+

+ Advisements are normative sections styled to evoke special attention + and are set apart from other normative text with + <strong class="advisement">, like this: + UAs MUST provide an accessible alternative. +

+
+ + +

H. References

H.1 Normative references

+ +
[css-align-3]
+ CSS Box Alignment Module Level 3. Elika Etemad; Tab Atkins Jr.. W3C. 17 February 2023. W3C Working Draft. URL: https://www.w3.org/TR/css-align-3/ +
[css-backgrounds-3]
+ CSS Backgrounds and Borders Module Level 3. Elika Etemad; Brad Kemper. W3C. 11 March 2024. W3C Candidate Recommendation. URL: https://www.w3.org/TR/css-backgrounds-3/ +
[css-box-4]
+ CSS Box Model Module Level 4. Elika Etemad. W3C. 1 April 2024. W3C Working Draft. URL: https://www.w3.org/TR/css-box-4/ +
[CSS-CASCADE-4]
+ CSS Cascading and Inheritance Level 4. Elika Etemad; Tab Atkins Jr.. W3C. 13 January 2022. W3C Candidate Recommendation. URL: https://www.w3.org/TR/css-cascade-4/ +
[css-color-4]
+ CSS Color Module Level 4. Chris Lilley; Tab Atkins Jr.; Lea Verou. W3C. 13 February 2024. W3C Candidate Recommendation. URL: https://www.w3.org/TR/css-color-4/ +
[CSS-DISPLAY-3]
+ CSS Display Module Level 3. Elika Etemad; Tab Atkins Jr.. W3C. 30 March 2023. W3C Candidate Recommendation. URL: https://www.w3.org/TR/css-display-3/ +
[CSS-FONTS-4]
+ CSS Fonts Module Level 4. Chris Lilley. W3C. 1 February 2024. W3C Working Draft. URL: https://www.w3.org/TR/css-fonts-4/ +
[CSS-POSITION-3]
+ CSS Positioned Layout Module Level 3. Elika Etemad; Tab Atkins Jr.. W3C. 3 April 2023. W3C Working Draft. URL: https://www.w3.org/TR/css-position-3/ +
[css-pseudo-4]
+ CSS Pseudo-Elements Module Level 4. Daniel Glazman; Elika Etemad; Alan Stearns. W3C. 30 December 2022. W3C Working Draft. URL: https://www.w3.org/TR/css-pseudo-4/ +
[css-sizing-3]
+ CSS Box Sizing Module Level 3. Tab Atkins Jr.; Elika Etemad. W3C. 17 December 2021. W3C Working Draft. URL: https://www.w3.org/TR/css-sizing-3/ +
[CSS-TEXT-3]
+ CSS Text Module Level 3. Elika Etemad; Koji Ishii; Florian Rivoal. W3C. 3 September 2023. W3C Candidate Recommendation. URL: https://www.w3.org/TR/css-text-3/ +
[CSS-VALUES-4]
+ CSS Values and Units Module Level 4. Tab Atkins Jr.; Elika Etemad. W3C. 12 March 2024. W3C Working Draft. URL: https://www.w3.org/TR/css-values-4/ +
[CSS-WRITING-MODES-4]
+ CSS Writing Modes Level 4. Elika Etemad; Koji Ishii. W3C. 30 July 2019. W3C Candidate Recommendation. URL: https://www.w3.org/TR/css-writing-modes-4/ +
[CSS2]
+ Cascading Style Sheets Level 2 Revision 1 (CSS 2.1) Specification. Bert Bos; Tantek Çelik; Ian Hickson; Håkon Wium Lie. W3C. 7 June 2011. W3C Recommendation. URL: https://www.w3.org/TR/CSS21/ +
[CSS22]
+ Cascading Style Sheets Level 2 Revision 2 (CSS 2.2) Specification. Bert Bos. W3C. 12 April 2016. W3C Working Draft. URL: https://www.w3.org/TR/CSS22/ +
[DOM]
+ DOM Standard. Anne van Kesteren. WHATWG. Living Standard. URL: https://dom.spec.whatwg.org/ +
[HTML]
+ HTML Standard. Anne van Kesteren; Domenic Denicola; Ian Hickson; Philip Jägenstedt; Simon Pieters. WHATWG. Living Standard. URL: https://html.spec.whatwg.org/multipage/ +
[infra]
+ Infra Standard. Anne van Kesteren; Domenic Denicola. WHATWG. Living Standard. URL: https://infra.spec.whatwg.org/ +
[OPEN-FONT-FORMAT]
+ Information technology — Coding of audio-visual objects — Part 22: Open Font Format. International Organization for Standardization. URL: http://standards.iso.org/ittf/PubliclyAvailableStandards/c052136_ISO_IEC_14496-22_2009%28E%29.zip +
[RFC2119]
+ Key words for use in RFCs to Indicate Requirement Levels. S. Bradner. IETF. March 1997. Best Current Practice. URL: https://www.rfc-editor.org/rfc/rfc2119 +
[SELECT]
+ Selectors Level 3. Tantek Çelik; Elika Etemad; Daniel Glazman; Ian Hickson; Peter Linss; John Williams. W3C. 6 November 2018. W3C Recommendation. URL: https://www.w3.org/TR/selectors-3/ +
[SVG]
+ Scalable Vector Graphics (SVG) 1.0 Specification. Jon Ferraiolo. W3C. 4 September 2001. W3C Recommendation. URL: https://www.w3.org/TR/SVG/ +
[webidl]
+ Web IDL Standard. Edgar Chen; Timothy Gu. WHATWG. Living Standard. URL: https://webidl.spec.whatwg.org/ +
+

H.2 Informative references

+ +
[CSS-LAYOUT-API-1]
+ CSS Layout API Level 1. Greg Whitworth; Ian Kilpatrick; Tab Atkins Jr.; Shane Stephens; Robert O'Callahan; Rossen Atanassov. W3C. 12 April 2018. W3C Working Draft. URL: https://www.w3.org/TR/css-layout-api-1/ +
[css-text-decor-4]
+ CSS Text Decoration Module Level 4. Elika Etemad; Koji Ishii. W3C. 4 May 2022. W3C Working Draft. URL: https://www.w3.org/TR/css-text-decor-4/ +
[cssom-view]
+ CSSOM View Module. Simon Pieters. W3C. 17 March 2016. W3C Working Draft. URL: https://www.w3.org/TR/cssom-view-1/ +
[HOUDINI]
+ CSS-TAG Houdini Editor Drafts. URL: https://drafts.css-houdini.org/ +
[MATHML3]
+ Mathematical Markup Language (MathML) Version 3.0 2nd Edition. David Carlisle; Patrick D F Ion; Robert R Miner. W3C. 10 April 2014. W3C Recommendation. URL: https://www.w3.org/TR/MathML3/ +
[MATHML4]
+ Mathematical Markup Language (MathML) Version 4.0. David Carlisle et al.. W3C Editor's Draft. URL: https://w3c.github.io/mathml/ +
[OPEN-TYPE-MATH-ILLUMINATED]
+ OpenType Math Illuminated. Ulrik Vieth. 2009. URL: https://www.tug.org/TUGboat/tb30-1/tb94vieth.pdf +
[OPEN-TYPE-MATH-IN-HARFBUZZ]
+ OpenType MATH in HarfBuzz. Frédéric Wang. URL: https://frederic-wang.fr/2016/04/16/opentype-math-in-harfbuzz/ +
[TEXBOOK]
+ The TeXBook. Knuth, Donald E.. Addison-Wesley Professional. 1984. +
[UNICODE]
+ The Unicode Standard. Unicode Consortium. URL: https://www.unicode.org/versions/latest/ +
+
\ No newline at end of file