/*
 * Copyright (C) 2020 Apple Inc.  All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 * 1. Redistributions of source code must retain the above copyright
 *    notice, this list of conditions and the following disclaimer.
 * 2. Redistributions in binary form must reproduce the above copyright
 *    notice, this list of conditions and the following disclaimer in the
 *    documentation and/or other materials provided with the distribution.
 *
 * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
 * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
 * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
 */

#if defined(ENABLE_MATHML) && ENABLE_MATHML

@namespace "http://www.w3.org/1998/Math/MathML";

:any-link {
    color: -webkit-link;
    cursor: auto;
}

:any-link:active {
    color: -webkit-activelink;
}

:focus {
    outline: auto 5px -webkit-focus-ring-color
}

math {
    display: inline;
    math-style: compact;

    /*
    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;

    /*
    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;

    /* 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)? */
}

math[display="block" i] {
    display: block;
    page-break-inside: avoid;
    math-style: normal;
}
math[display="inline" i] {
  math-style: compact;
}

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;
}

ms, mtext, mi, mn, mo, annotation, mtd {
    white-space: nowrap !important;
}

mfrac > * {
    math-style: compact;
}

msub > * + *, msup > * + *, msubsup > * + *, mmultiscripts > * + *, munder > * + *, mover > * + *, munderover > * + * {
    font-size: 0.75em; /* FIXME: MathML standard is 0.71em */
    math-style: compact;
}
mroot > *:last-child {
    font-size: 0.5625em; /* This 0.75^2 since the scriptlevel is incremented by 2 in the index. */
    math-style: compact;
}
mi {
    padding-inline-end: 0.1em;
}
msub > mi:first-child, msubsup > mi:first-child {
    padding-inline-end: 0;
}
msubsup > mi:first-child + * + * {
    margin-inline-start: 0.14em; /* This is larger than 0.1em because the child's font-size is smaller than the <msubsup>'s. */
}

mphantom {
    visibility: hidden;
}

/* This is a special style for erroneous markup. */
merror {
    outline: solid thin red;
    font-weight: bold;
    font-family: sans-serif;
    background-color: lightYellow;
}

mtable {
    display: inline-table;
    text-align: center;
    math-style: compact;
}

mtr {
    display: table-row;
}

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;
}

mtable[columnalign="right"], mtr[columnalign="right"], mtd[columnalign="right"] {
    text-align: right;
}

mtable[rowalign="top"] mtd, mtable mtr[rowalign="top"] mtd, mtable mtr mtd[rowalign="top"] {
    vertical-align: top;
}

mtable[rowalign="bottom"] mtd, mtable mtr[rowalign="bottom"] mtd, mtable mtr mtd[rowalign="bottom"] {
    vertical-align: bottom;
}

mtable[rowalign="center"] mtd, mtable mtr[rowalign="center"] mtd, mtable mtr mtd[rowalign="center"] {
    vertical-align: middle;
}

mtable[frame="solid"] {
    border: solid thin;
}

mtable[frame="dashed"] {
    border: dashed thin;
}

mtable[rowlines="solid"], mtable[rowlines="dashed"], mtable[columnlines="solid"], mtable[columnlines="dashed"] {
    border-collapse: collapse;
}

mtable[rowlines="solid"] > mtr + mtr {
    border-top: solid thin;
}

mtable[rowlines="dashed"] > mtr + mtr {
    border-top: dashed thin;
}

mtable[columnlines="solid"] > mtr > mtd + mtd {
    border-left: solid thin;
}

mtable[columnlines="dashed"] > mtr > mtd + mtd {
    border-left: dashed thin;
}

#endif
