Extract UTI mapping and allow for additions
[WebKit-https.git] / Source / WebCore / css / mathml.css
index f3a2b40..5f55c85 100644 (file)
 @namespace "http://www.w3.org/1998/Math/MathML";
 
-math {
-    -webkit-line-box-contain: glyphs replaced;
-    line-height: 0;
-    text-indent: 0;
-}
-mtext {
-    line-height: 1.0;
-}
-
-/* Keep font-family and other defaults here consistent with http://mxr.mozilla.org/mozilla-central/source/layout/mathml/mathml.css and feedback from www-math. */
-math, mfenced > * {
-    font-family: MathJax_Main, STIXGeneral, "DejaVu Serif", Cambria, "Cambria Math", Times, serif;
-}
-mo, mfenced {
-    font-family: MathJax_Main, STIXGeneral, STIXSizeOneSym, "DejaVu Sans", "DejaVu Serif", Cambria, "Cambria Math",
-        "Lucida Sans Unicode", "Arial Unicode MS", "Lucida Grande", OpenSymbol, "Standard Symbols L", sans-serif;
+:any-link {
+    color: -webkit-link;
+    cursor: auto;
 }
 
-math {
-    display: -webkit-inline-flex !important;
-    padding-left: 1px;
-    padding-right: 1px;
+:any-link:active {
+    color: -webkit-activelink;
 }
 
-math[display="block"] {
-    display: -webkit-flex !important;
-    -webkit-justify-content: center;
-    page-break-inside: avoid;
-    /* -webkit-margin-before: 1em; -- FIXME: Ask www-math for a default MathML stylesheet, including this (or margin-top). */
-    -webkit-margin-after: 1em;
+:focus {
+    outline: auto 5px -webkit-focus-ring-color
 }
 
-mo, mrow, mfenced, mfrac, msub, msup, msubsup, mmultiscripts, mprescripts, none, munder, mover, munderover, msqrt, mroot {
-    display: -webkit-inline-flex !important;
-}
+math {
+    display: inline;
+
+    /*
+    We use the exact bounding boxes of glyphs to avoid excessive gaps in mathematical formulas.
+    FIXME: Should we replace this with a more general handling of ink/logical ascent/descent?
+    See http://webkit.org/b/130326, http://webkit.org/b/156841 and
+    http://www.mathml-association.org/MathMLinHTML5/S3.html#SS1.SSS1
+    */
+    -webkit-line-box-contain: glyphs replaced;
 
-math, mrow, mfenced, msqrt, mroot {
-    -webkit-align-items: baseline;
-}
-msqrt > * { /* This rule is needed because of <msqrt>'s anonymous <mrow>. */
-    -webkit-align-self: baseline;
-}
+    /*
+    Inheriting the following properties can cause excessive spacing of mathematical formulas so we
+    just reset them to their default values.
+    */
+    text-indent: 0;
+    line-height: normal;
+    word-spacing: normal;
+    letter-spacing: normal;
+
+    /*
+    In some countries and languages, text is written from right-to-left while mathematical formulas
+    are written from left-to-write. Hence it is wrong to inherit the direction and we reset that
+    property to left-to-write. Per the MathML specification, authors should explicitly use the "dir"
+    attribute on the <math> element if they want to force the overall direction of the mathematical
+    formulas.
+    */
+    direction: ltr;
+
+    /*
+    Mathematical formula inside an italic paragraph should not inherit the font-style as this gives
+    poor rendering and is confusing with the mathvariant italic.
+    */
+    font-style: normal;
 
-mo, mfrac, munder, mover, munderover {
-    -webkit-flex-direction: column;
+    /* Fonts with appropriate Unicode coverage and OpenType features are required for good math
+    rendering. These requirements as well as the up-to-date list of known math fonts to fulfill
+    these requirements are listed on http://trac.webkit.org/wiki/MathML/Fonts.
+    Inheriting the font-family is likely to make MathML use text fonts that are not designed for
+    math layout and thus would cause very poor mathematical rendering. Consequently, the default
+    font-family on the <math> tag is set to a list of recommended math fonts.
+    For best rendering, authors and readers are encouraged to use text and math fonts with consistent
+    style (appearance, size...), see http://trac.webkit.org/wiki/MathML/Fonts#CustomizingMathFont
+    FIXME: Should we make math font properties configurable (http://webkit.org/b/156843)?
+    */
+    font-family:
+       /*
+       This font has Computer Modern style and is provided with most TeX & Linux distributions.
+       We put it as the default because its style is familiar to TeX, Wikipedia and math people.
+       */
+       "Latin Modern Math",
+
+       /*
+       The following fonts have Times style and are provided with most TeX & Linux distributions.
+       We put XITS & STIX as a second option because they have very good unicode coverage.
+       STIX Two is a complete redesign of STIX that fixes serious bugs in version one so we put it in first position.
+       XITS is a fork of STIX with bug fixes and more Arabic/RTL features so we put it in second position.
+       */
+       "STIX Two Math",
+       "XITS Math",
+       "STIX Math",
+       "Libertinus Math",
+       "TeX Gyre Termes Math",
+
+       /*
+       These fonts respectively have style compatible with Bookman Old and Century Schoolbook.
+       They are provided with most TeX & Linux distributions.
+       */
+       "TeX Gyre Bonum Math",
+       "TeX Gyre Schola",
+
+       /*
+       DejaVu is pre-installed on many Linux distributions and is included in LibreOffice.
+       */
+       "DejaVu Math TeX Gyre",
+
+       /*
+       The following fonts have Palatino style and are provided with most TeX & Linux distributions.
+       Asana Math has some rendering issues (e.g. missing italic correction) so we put it after.
+       */
+       "TeX Gyre Pagella Math",
+       "Asana Math",
+
+       /*
+       The following fonts are proprietary and have not much been tested so we put them at the end.
+       Cambria Math it is pre-installed on Windows 7 and higher.
+       */
+       "Cambria Math",
+       "Lucida Bright Math",
+       "Minion Math",
+
+       /*
+       The following fonts do not satisfy the requirements for good mathematical rendering.
+       These are pre-installed on Mac and iOS so we list them to provide minimal unicode-based
+       mathematical rendering. For more explanation of fallback mechanisms and missing features see
+       http://trac.webkit.org/wiki/MathML/Fonts#ObsoleteFontsandFallbackMechanisms.
+       STIX fonts have best unicode coverage so we put them first. */
+       STIXGeneral,
+       STIXSizeOneSym,
+       Symbol,
+       "Times New Roman",
+
+       /* Mathematical fonts generally use "serif" style. Hence we append the generic "serif" family
+       as a fallback in order to increase our chance to find a mathematical font. */
+       serif;
+
+    /* FIXME: Should we reset more CSS properties (http://webkit.org/b/156839)? */
 }
 
-munder, mover, munderover {
-    -webkit-align-items: center;
+math[display="block"] {
+    display: block;
+    page-break-inside: avoid;
 }
 
-mfrac > * {
-    -webkit-align-self: center;
-}
-mfrac[numalign="left"] > :first-child {
-    -webkit-align-self: flex-start;
-}
-mfrac[numalign="right"] > :first-child {
-    -webkit-align-self: flex-end;
-}
-mfrac[denomalign="left"] > :last-child {
-    -webkit-align-self: flex-start;
-}
-mfrac[denomalign="right"] > :last-child {
-    -webkit-align-self: flex-end;
-}
-mfrac > :first-child {
-    -webkit-margin-after: 0.2em;
-}
-mfrac > :last-child {
-    -webkit-margin-before: 0.2em;
-}
-mfrac {
-    -webkit-margin-start: 1px;
-    -webkit-margin-end: 1px;
+ms, mspace, mtext, mi, mn, mo, mrow, mfenced, mfrac, msub, msup, msubsup, mmultiscripts, mprescripts, none, munder, mover, munderover, msqrt, mroot, merror, mphantom, mstyle, menclose, semantics, mpadded, maction {
+    display: block;
 }
 
-mover > :last-child, munderover > :last-child {
-    -webkit-order: -1;
+ms, mtext, mi, mn, mo, annotation, mtd {
+    white-space: nowrap !important;
 }
 
 msub > * + *, msup > * + *, msubsup > * + *, mmultiscripts > * + *, munder > * + *, mover > * + *, munderover > * + * {
     font-size: 0.75em; /* FIXME: MathML standard is 0.71em */
 }
+mroot > *:last-child {
+    font-size: 0.5625em; /* This 0.75^2 since the scriptlevel is incremented by 2 in the index. */
+}
 
 mi {
-    font-style: italic;
     -webkit-padding-end: 0.1em;
 }
 msub > mi:first-child, msubsup > mi:first-child {
@@ -96,77 +152,12 @@ msubsup > mi:first-child + * + * {
     -webkit-margin-start: 0.14em; /* This is larger than 0.1em because the child's font-size is smaller than the <msubsup>'s. */
 }
 
-/* FIXME: For a RenderMathMLOperator's margin-start and margin-end, or for a MathML "embellished operator", check the operator's lspace and rspace attributes,
-   and the MathML operator dictionary. */
-math > mo, mrow > mo, msqrt > mo, mtd > mo {
-    -webkit-margin-start: 0.2em;
-    -webkit-margin-end: 0.2em;
-}
-math > mo:first-child, mrow > mo:first-child, msqrt > mo:first-child, mtd > mo:first-child,
-math > mo:last-child, mrow > mo:last-child, msqrt > mo:last-child, mtd > mo:last-child {
-    -webkit-margin-start: 0.1em;
-    -webkit-margin-end: 0.1em;
-}
-
-mroot {
-    position: relative;
-}
-mroot > * + * {
-    font-size: 0.75em;
-    position: absolute;
-    left: 0;
-    top: 0;
-    padding-right: 0.4em;
-    padding-left: 0.2em;
-    padding-bottom: 0.35em;
-}
-
-math[mathvariant="normal"], mstyle[mathvariant="normal"], mo[mathvariant="normal"], mn[mathvariant="normal"], mi[mathvariant="normal"], mtext[mathvariant="normal"], mspace[mathvariant="normal"], ms[mathvariant="normal"] {
-    font-style: normal;
-    font-weight: normal;
-}
-
-math[mathvariant="bold"], mstyle[mathvariant="bold"], mo[mathvariant="bold"], mn[mathvariant="bold"], mi[mathvariant="bold"], mtext[mathvariant="bold"], mspace[mathvariant="bold"], ms[mathvariant="bold"] {
-    font-style: normal;
-    font-weight: bold;
-}
-
-math[mathvariant="italic"], mstyle[mathvariant="italic"], mo[mathvariant="italic"], mn[mathvariant="italic"], mi[mathvariant="italic"], mtext[mathvariant="italic"], mspace[mathvariant="italic"], ms[mathvariant="italic"] {
-    font-style: italic;
-    font-weight: normal;
-}
-
-math[mathvariant="bold-italic"], mstyle[mathvariant="bold-italic"], mo[mathvariant="bold-italic"], mn[mathvariant="bold-italic"], mi[mathvariant="bold-italic"], mtext[mathvariant="bold-italic"], mspace[mathvariant="bold-italic"], ms[mathvariant="bold-italic"] {
-    font-weight: bold;
-    font-style: italic;
-}
-
-math[mathsize="small"], mstyle[mathsize="small"], mo[mathsize="small"], mn[mathsize="small"], mi[mathsize="small"], mtext[mathsize="small"], mspace[mathsize="small"], ms[mathsize="small"] {
-    font-size: 0.75em;
-}
-
-math[mathsize="normal"], mstyle[mathsize="normal"], mo[mathsize="normal"], mn[mathsize="normal"], mi[mathsize="normal"], mtext[mathsize="normal"], mspace[mathsize="normal"], ms[mathsize="normal"] {
-    font-size: 1em;
-}
-
-math[mathsize="big"], mstyle[mathsize="big"], mo[mathsize="big"], mn[mathsize="big"], mi[mathsize="big"], mtext[mathsize="big"], mspace[mathsize="big"], ms[mathsize="big"] {
-    font-size: 1.5em;
-}
-annotation, annotation-xml {
-    display: none;
-}
-
 mphantom {
     visibility: hidden;
 }
 
-/* This is a special style for erroneous markup:
-  - <merror> element.
-  - extra children in script elements.
-  - <mprescripts/> and <none/> elements in msub/msup/msubsup.
- */
-merror, msub > * + * + *, msup > * + * + *, msubsup > * + * + * + *, msub > mprescripts, msup > mprescripts, msubsup > mprescripts, msub > none, msup > none, msubsup > none, mmultiscripts > mprescripts ~ mprescripts, mmultiscripts > mprescripts ~ mprescripts ~ * {
+/* This is a special style for erroneous markup. */
+merror {
     outline: solid thin red;
     font-weight: bold;
     font-family: sans-serif;
@@ -186,6 +177,10 @@ mtd {
     display: table-cell;
     padding: 0.5ex;
 }
+/* Use inline-block for children so that the text-align property is taken into account */
+mtd > * {
+    display: inline-block;
+}
 
 mtable[columnalign="left"], mtr[columnalign="left"], mtd[columnalign="left"] {
     text-align: left;