mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-12-06 12:43:53 +00:00
456 lines
14 KiB
CSS
456 lines
14 KiB
CSS
/* ***** BEGIN LICENSE BLOCK *****
|
|
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
|
*
|
|
* The contents of this file are subject to the Mozilla Public License Version
|
|
* 1.1 (the "License"); you may not use this file except in compliance with
|
|
* the License. You may obtain a copy of the License at
|
|
* http://www.mozilla.org/MPL/
|
|
*
|
|
* Software distributed under the License is distributed on an "AS IS" basis,
|
|
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
|
* for the specific language governing rights and limitations under the
|
|
* License.
|
|
*
|
|
* The Original Code is Mozilla MathML Project.
|
|
*
|
|
* The Initial Developer of the Original Code is
|
|
* The University Of Queensland.
|
|
* Portions created by the Initial Developer are Copyright (C) 1999
|
|
* the Initial Developer. All Rights Reserved.
|
|
*
|
|
* Contributor(s):
|
|
* Roger B. Sidje <rbs@maths.uq.edu.au>
|
|
*
|
|
* Alternatively, the contents of this file may be used under the terms of
|
|
* either of the GNU General Public License Version 2 or later (the "GPL"),
|
|
* or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
|
* in which case the provisions of the GPL or the LGPL are applicable instead
|
|
* of those above. If you wish to allow use of your version of this file only
|
|
* under the terms of either the GPL or the LGPL, and not to allow others to
|
|
* use your version of this file under the terms of the MPL, indicate your
|
|
* decision by deleting the provisions above and replace them with the notice
|
|
* and other provisions required by the GPL or the LGPL. If you do not delete
|
|
* the provisions above, a recipient may use your version of this file under
|
|
* the terms of any one of the MPL, the GPL or the LGPL.
|
|
*
|
|
* ***** END LICENSE BLOCK ***** */
|
|
|
|
|
|
/**************************************************************************/
|
|
/* namespace for MathML elements */
|
|
/**************************************************************************/
|
|
|
|
@namespace url(http://www.w3.org/1998/Math/MathML);
|
|
|
|
/**************************************************************************/
|
|
/* <math> - outermost math element */
|
|
/* Put Cambria before Cambria Math as Cambria Math has neither bold nor */
|
|
/* italic. */
|
|
/**************************************************************************/
|
|
|
|
math {
|
|
direction: ltr;
|
|
unicode-bidi: embed;
|
|
display: inline;
|
|
font-size: inherit;
|
|
font-style: normal;
|
|
font-family: STIXGeneral, DejaVu Serif, DejaVu Sans, Cambria, Cambria Math, Times, Lucida Sans Unicode, OpenSymbol, Standard Symbols L, serif;
|
|
text-rendering: optimizeLegibility;
|
|
-moz-float-edge: margin-box;
|
|
}
|
|
math[mode="display"], math[display="block"] {
|
|
display: block;
|
|
text-align: -moz-center;
|
|
}
|
|
math[display="inline"] {
|
|
display: inline;
|
|
}
|
|
|
|
/**************************************************************************/
|
|
/* Style switching during frame construction depending on the context of <mi>:
|
|
These rules are not used when mathvariant or fontstyle is specified
|
|
explicitly.
|
|
/**************************************************************************/
|
|
|
|
/* If the textual content of an <mi> consists of a single character
|
|
with a corresponding mathematical italic alphanumeric character,
|
|
then try to emulate that character */
|
|
[-moz-math-font-style="italic"] {
|
|
font-style: italic;
|
|
font-weight: normal;
|
|
}
|
|
/* If the textual content consists of multiple characters, then the default is
|
|
mathvariant=normal. It seems that mathvariant=normal should be interpreted
|
|
to mean non-slanted:
|
|
|
|
http://www.w3.org/TR/2003/REC-MathML2-20031021/chapter3.html#presm.commatt
|
|
|
|
"In particular, inheritance of the mathvariant attribute does not follow
|
|
the CSS model. The default value for this attribute is "normal"
|
|
(non-slanted) for all tokens except mi. ... (The deprecated fontslant
|
|
attribute also behaves this way.)"
|
|
*/
|
|
[-moz-math-font-style="normal"] {
|
|
font-style: normal;
|
|
}
|
|
/* A style-invariant character preserves its own style */
|
|
[-moz-math-font-style="invariant"] {
|
|
font-style: normal;
|
|
font-weight: normal;
|
|
}
|
|
|
|
/**************************************************************************/
|
|
/* attributes common to all tags */
|
|
/**************************************************************************/
|
|
|
|
/* deprecated attributes from MathML 1.0 */
|
|
|
|
/* fontstyle */
|
|
[fontstyle="normal"] {
|
|
font-style: normal;
|
|
}
|
|
[fontstyle="italic"] {
|
|
font-style: italic;
|
|
}
|
|
/* fontweight */
|
|
[fontweight="normal"] {
|
|
font-weight: normal;
|
|
}
|
|
[fontweight="bold"] {
|
|
font-weight: bold;
|
|
}
|
|
|
|
/* attributes from MathML 2.0 */
|
|
|
|
/* These ones are handled in the back-end:
|
|
mathcolor (replaces 'color'):
|
|
#rgb | #rrggbb | html-color-name
|
|
mathbackground (replaces 'background'):
|
|
#rgb | #rrggbb | html-color-name
|
|
*/
|
|
/* mathvariant (replaces 'fontstyle' & 'fontweight' & 'fontslant'):
|
|
normal | bold | italic | bold-italic | double-struck | bold-fraktur | script |
|
|
bold-script | fraktur | sans-serif | bold-sans-serif | sans-serif-italic |
|
|
sans-serif-bold-italic | monospace
|
|
|
|
Note1: Back-end code for these is not yet written (bug 114365):
|
|
double-struck, script, fraktur, bold-fraktur, bold-script
|
|
|
|
Note2: Don't use the 'font' shorthand because it resets the font-size and this
|
|
breaks the propagation of the scriptlevel size.
|
|
|
|
XXX bugs 46622 & 114365: need -moz-math-serif, etc, to only lookup math fonts
|
|
|
|
The meaning of mathvariant=normal is unclear as there is no interpretation
|
|
that "corresponds to SMP Math Alphanumeric Symbol characters"
|
|
(http://www.w3.org/TR/2003/REC-MathML2-20031021/chapter3.html#presm.commatt),
|
|
but let's assume an explicit mathvariant=normal is an attempt to reset all
|
|
style.
|
|
*/
|
|
[mathvariant] { /* shared and same as [mathvariant="normal"] */
|
|
/* reset all font properties except those that affect the size */
|
|
font-style: normal;
|
|
font-variant: normal;
|
|
font-weight: normal;
|
|
}
|
|
[mathvariant="bold-fraktur"],
|
|
[mathvariant="bold-script"] {
|
|
font-weight: bold;
|
|
}
|
|
[mathvariant="bold"] {
|
|
font-weight: bold;
|
|
}
|
|
[mathvariant="italic"] {
|
|
font-style: italic;
|
|
}
|
|
[mathvariant="bold-italic"] {
|
|
font-weight: bold;
|
|
font-style: italic;
|
|
}
|
|
[mathvariant="sans-serif"] {
|
|
font-family: sans-serif;
|
|
}
|
|
[mathvariant="bold-sans-serif"] {
|
|
font-weight: bold;
|
|
font-family: sans-serif;
|
|
}
|
|
[mathvariant="sans-serif-italic"] {
|
|
font-family: sans-serif;
|
|
font-style: italic;
|
|
}
|
|
[mathvariant="sans-serif-bold-italic"] {
|
|
font-family: sans-serif;
|
|
font-weight: bold;
|
|
font-style: italic;
|
|
}
|
|
[mathvariant="monospace"] {
|
|
font-family: monospace;
|
|
}
|
|
|
|
/**************************************************************************/
|
|
/* tags with generated content */
|
|
/**************************************************************************/
|
|
|
|
ms {
|
|
display: inline;
|
|
}
|
|
ms:before {
|
|
content: open-quote;
|
|
}
|
|
ms:after {
|
|
content: close-quote;
|
|
}
|
|
|
|
merror {
|
|
display: block;
|
|
font-family: sans-serif;
|
|
font-weight: bold;
|
|
white-space: pre;
|
|
margin: 1em;
|
|
padding: 1em;
|
|
border-width: thin;
|
|
border-style: inset;
|
|
border-color: red;
|
|
font-size: 14pt;
|
|
background-color: lightyellow;
|
|
}
|
|
|
|
/**************************************************************************/
|
|
/* mtable and its related tags */
|
|
/**************************************************************************/
|
|
|
|
mtable {
|
|
display: inline-table;
|
|
border-collapse: separate;
|
|
border-spacing: 0;
|
|
text-indent: 0;
|
|
}
|
|
mtable[frame="none"] {
|
|
border: none;
|
|
}
|
|
mtable[frame="solid"] {
|
|
border: solid thin;
|
|
}
|
|
mtable[frame="dashed"] {
|
|
border: dashed thin;
|
|
}
|
|
|
|
mtr {
|
|
display: table-row;
|
|
vertical-align: baseline;
|
|
}
|
|
|
|
mtd {
|
|
display: table-cell;
|
|
vertical-align: inherit;
|
|
text-align: -moz-center;
|
|
white-space: nowrap;
|
|
}
|
|
|
|
/* Don't support mtr without mtable, nor mtd without mtr */
|
|
:not(mtable) > mtr,
|
|
:not(mtr) > mtd {
|
|
display: none !important;
|
|
}
|
|
|
|
/***********************/
|
|
/* -- mtd: columnalign */
|
|
|
|
mtd[-moz-math-columnalign="left"],
|
|
mtd[columnalign="left"] {
|
|
text-align: left;
|
|
}
|
|
mtd[-moz-math-columnalign="right"],
|
|
mtd[columnalign="right"] {
|
|
text-align: right;
|
|
}
|
|
mtd[-moz-math-columnalign="center"],
|
|
mtd[columnalign="center"] {
|
|
text-align: -moz-center;
|
|
}
|
|
|
|
/*************************/
|
|
/* -- mtr, mtd: rowalign */
|
|
|
|
mtr[-moz-math-rowalign="top"],
|
|
mtr[rowalign="top"],
|
|
mtd[rowalign="top"] {
|
|
vertical-align: top;
|
|
}
|
|
mtr[-moz-math-rowalign="bottom"],
|
|
mtr[rowalign="bottom"],
|
|
mtd[rowalign="bottom"] {
|
|
vertical-align: bottom;
|
|
}
|
|
mtr[-moz-math-rowalign="center"],
|
|
mtr[rowalign="center"],
|
|
mtd[rowalign="center"] {
|
|
vertical-align: middle;
|
|
}
|
|
mtr[-moz-math-rowalign="baseline"],
|
|
mtr[rowalign="baseline"],
|
|
mtd[rowalign="baseline"] {
|
|
vertical-align: baseline;
|
|
}
|
|
/* -- not yet supported --
|
|
mtr[-moz-math-rowalign="axis"],
|
|
mtr[rowalign="axis"],
|
|
mtd[rowalign="axis"] {
|
|
vertical-align: mathline;
|
|
}
|
|
*/
|
|
|
|
/**********************************************************************/
|
|
/* rules to achieve the default spacing between cells. The back-end code
|
|
will set the internal attributes depending on the cell's position.
|
|
These rules are hard-coded, the comments indicate what would be
|
|
desirable if the style data could be changed on the fly to pick
|
|
the values that users may set with the attributes of <mtable> */
|
|
mtd {
|
|
padding-right: 0.4em; /* half of columnspacing[colindex] */
|
|
padding-left: 0.4em; /* half of columnspacing[colindex-1] */
|
|
padding-bottom: 0.5ex; /* half of rowspacing[rowindex] */
|
|
padding-top: 0.5ex; /* half of rowspacing[rowindex-1] */
|
|
}
|
|
/* turn off the spacing at the periphery of boundary cells */
|
|
mtr:first-child > mtd {
|
|
padding-top: 0ex;
|
|
}
|
|
mtr:last-child > mtd {
|
|
padding-bottom: 0ex;
|
|
}
|
|
mtd:first-child {
|
|
padding-left: 0em;
|
|
}
|
|
mtd:last-child {
|
|
padding-right: 0em;
|
|
}
|
|
/* re-instate the spacing if the table has a surrounding frame */
|
|
mtable[frame="solid"] > mtr:first-child > mtd,
|
|
mtable[frame="dashed"] > mtr:first-child > mtd {
|
|
padding-top: 0.5ex; /* framespacing.top */
|
|
}
|
|
mtable[frame="solid"] > mtr:last-child > mtd,
|
|
mtable[frame="dashed"] > mtr:last-child > mtd {
|
|
padding-bottom: 0.5ex; /* framespacing.bottom */
|
|
}
|
|
mtable[frame="solid"] > mtr > mtd:first-child,
|
|
mtable[frame="dashed"] > mtr > mtd:first-child {
|
|
padding-left: 0.4em; /* framespacing.left */
|
|
}
|
|
mtable[frame="solid"] > mtr > mtd:last-child,
|
|
mtable[frame="dashed"] > mtr > mtd:last-child {
|
|
padding-right: 0.4em; /* framespacing.right */
|
|
}
|
|
|
|
/**********************************************************************/
|
|
/* internal settings to support 'rowlines' and 'columnlines'. To
|
|
achieve the recommended behavior, the back-end code will avoid setting
|
|
unsuitable rules on the cells on the first row and the first column.
|
|
In general, however, authors can use the 'border' property of CSS to
|
|
achieve varying effects down to the level of the table cell. */
|
|
mtr[-moz-math-rowline="none"] > mtd {
|
|
border-top: none;
|
|
}
|
|
mtr[-moz-math-rowline="solid"] > mtd {
|
|
border-top: solid thin;
|
|
}
|
|
mtr[-moz-math-rowline="dashed"] > mtd {
|
|
border-top: dashed thin;
|
|
}
|
|
mtd[-moz-math-columnline="none"] {
|
|
border-left: none;
|
|
}
|
|
mtd[-moz-math-columnline="solid"] {
|
|
border-left: solid thin;
|
|
}
|
|
mtd[-moz-math-columnline="dashed"] {
|
|
border-left: dashed thin;
|
|
}
|
|
|
|
|
|
/**************************************************************************/
|
|
/* Style used for stretchy symbols *must* be normal to avoid misaligments */
|
|
/* By leaving the font-family empty, the MathML engine will use the value
|
|
provided by the mathfont-family property in the mathfont.properties file
|
|
or the value of the user's pref("font.mathfont-family", "...").
|
|
|
|
Authors can make elements on a document to be stretched with different
|
|
fonts, e.g.,
|
|
|
|
To request the use of TeX fonts, you can add a <style>...</style> with:
|
|
<mo myfonts="tex">...</mo> with the associated CSS declaration
|
|
mo[myfonts="tex"]::-moz-math-stretchy {
|
|
font-family: CMSY10, CMEX10;
|
|
}
|
|
|
|
To request the use of Mathematica fonts, you can add a <style>...</style> with:
|
|
<mo myfonts="mathematica">...</mo> with the associated CSS declaration
|
|
mo[myfonts="mathematica"]::-moz-math-stretchy {
|
|
font-family: Math1, Math2, Math4;
|
|
}
|
|
|
|
Of course, if you just want all of the stretchy characters in your
|
|
document to be stretched with your preferred list, you can just do:
|
|
::-moz-math-stretchy {
|
|
font-family: [your-particular-list]
|
|
}
|
|
|
|
Note that like other fonts in the document, users can override this by
|
|
clicking the pref to override document fonts.
|
|
/**************************************************************************/
|
|
|
|
::-moz-math-stretchy {
|
|
font-style: normal;
|
|
font-family: serif; /* an empty family is ignored as an error and behaves like inherit */
|
|
/* background-color: #3C6; */
|
|
}
|
|
/* Don't actually style -moz-math-anonymous by default */
|
|
/*
|
|
::-moz-math-anonymous {
|
|
}
|
|
*/
|
|
|
|
/**********************************************************************/
|
|
/* Hide embedded semantic MathML content (as opposed to presentational
|
|
content, which we render). Ideally, here is the behavior that we want:
|
|
|
|
if there is an annotation-xml[encoding="MathML-Presentation"]
|
|
render that annotation, and ignore the first child of the
|
|
<semantics> element and all other annotations,
|
|
else
|
|
render the first child of <semantics> and ignore all annotations
|
|
|
|
But this cannot be expressed with CSS. As a stop-gap, just render
|
|
the first child to cater for most of the common cases - bug 154931.
|
|
*/
|
|
semantics > :not(:first-child) {
|
|
display: none;
|
|
}
|
|
|
|
/**********************************************************************/
|
|
/* This is used when wrapping non-MathML inline elements inside math. */
|
|
*|*::-moz-mathml-anonymous-block {
|
|
display: inline-block !important;
|
|
position: static !important;
|
|
text-indent: 0;
|
|
}
|
|
|
|
/*****************************************/
|
|
/* Controlling scriptlevel */
|
|
/*****************************************/
|
|
|
|
/* mfrac, munder, mover and munderover change the scriptlevels of their children using
|
|
-moz-math-increment-script-level because regular CSS rules are insufficient to
|
|
control when the scriptlevel should be incremented */
|
|
:-moz-math-increment-script-level { -moz-script-level:+1; }
|
|
|
|
/* all other cases can be described using regular CSS, so we do it this way because it's
|
|
more efficient and less code */
|
|
mroot > :not(:first-child) { -moz-script-level:+2; }
|
|
|
|
msub > :not(:first-child),
|
|
msup > :not(:first-child),
|
|
msubsup > :not(:first-child),
|
|
mmultiscripts > :not(:first-child) { -moz-script-level:+1; }
|