Bug 1667118 - Rename -moz-math-script-level to math-depth. r=emilio

This renames the internal -moz-math-script-level property in order to
prepare for full math-depth support. Currently, the property is guarded
under a disabled-by-default flag, so there should be no observable
behavior change.

Differential Revision: https://phabricator.services.mozilla.com/D91285
This commit is contained in:
Frederic Wang 2020-09-25 18:37:39 +00:00
parent 54bb48bb13
commit 5461921d85
22 changed files with 84 additions and 60 deletions

View File

@ -61,6 +61,15 @@ let whitelist = [
},
];
if (!Services.prefs.getBoolPref("layout.css.math-depth.enabled")) {
// mathml.css UA sheet rule for math-depth.
whitelist.push({
sourceName: /(?:res|gre-resources)\/mathml\.css$/i,
errorMessage: /Unknown property .*\bmath-depth\b/i,
isFromDevTools: false,
});
}
if (!Services.prefs.getBoolPref("layout.css.math-style.enabled")) {
// mathml.css UA sheet rule for math-style.
whitelist.push({

View File

@ -226,7 +226,7 @@ exports.ANIMATION_TYPE_FOR_LONGHANDS = [
"padding-block-start",
"padding-inline-end",
"padding-inline-start",
"-moz-script-level",
"math-depth",
"-moz-top-layer",
"transition-delay",
"transition-duration",

View File

@ -2946,6 +2946,7 @@ exports.CSS_PROPERTIES = {
"font-variation-settings",
"font-language-override",
"font-optical-sizing",
"math-depth",
"math-style",
"-moz-osx-font-smoothing",
"visibility",
@ -10853,6 +10854,10 @@ exports.PREFERENCES = [
"masonry-auto-flow",
"layout.css.grid-template-masonry-value.enabled"
],
[
"math-depth",
"layout.css.math-depth.enabled"
],
[
"math-style",
"layout.css.math-style.enabled"

View File

@ -441,7 +441,7 @@ void MathMLElement::MapMathMLAttributesInto(
//
value = aAttributes->GetAttr(nsGkAtoms::scriptlevel_);
if (value && value->Type() == nsAttrValue::eString &&
!aDecls.PropertyIsSet(eCSSProperty__moz_script_level)) {
!aDecls.PropertyIsSet(eCSSProperty_math_depth)) {
auto str = value->GetStringValue();
str.CompressWhitespace();
if (str.Length() > 0) {
@ -452,11 +452,13 @@ void MathMLElement::MapMathMLAttributesInto(
// then it's a relative value and we store the nsCSSValue as an
// Integer to indicate that. Otherwise we store it as a Number
// to indicate that the scriptlevel is absolute.
// XXX Bug 1667090: Use math-depth: add(<integer>) for relative values
// and and math-depth: <integer> for absolute values.
char16_t ch = str.CharAt(0);
if (ch == '+' || ch == '-') {
aDecls.SetIntValue(eCSSProperty__moz_script_level, intValue);
aDecls.SetIntValue(eCSSProperty_math_depth, intValue);
} else {
aDecls.SetNumberValue(eCSSProperty__moz_script_level, intValue);
aDecls.SetNumberValue(eCSSProperty_math_depth, intValue);
}
} else {
ReportParseErrorNoTag(str, nsGkAtoms::scriptlevel_, aDecls.Document());

View File

@ -82,7 +82,7 @@ ms[rquote]:after {
- mathvariant -> -moz-math-variant
- scriptsizemultiplier -> -moz-script-size-multiplier
- scriptminsize -> -moz-script-min-size
- scriptlevel -> -moz-script-level
- scriptlevel -> math-depth
- mathsize -> font-size
- mathcolor -> color
- mathbackground -> background
@ -226,14 +226,14 @@ mtable[framespacing] > mtr > mtd {
insufficient to control when the scriptlevel should be incremented. All other
cases can be described using regular CSS, so we do it this way because it's
more efficient and less code. */
:-moz-math-increment-script-level { -moz-script-level: +1; }
:-moz-math-increment-script-level { math-depth: +1; }
/*
The mfrac element sets displaystyle to "false", or if it was already false
increments scriptlevel by 1, within numerator and denominator.
*/
mfrac > * {
-moz-script-level: auto;
math-depth: auto;
math-style: compact;
}
@ -243,7 +243,7 @@ mfrac > * {
The msqrt element leaves both attributes unchanged within its argument.
*/
mroot > :not(:first-child) {
-moz-script-level: +2;
math-depth: +2;
math-style: compact;
}
@ -267,7 +267,7 @@ msub > :not(:first-child),
msup > :not(:first-child),
msubsup > :not(:first-child),
mmultiscripts > :not(:first-child) {
-moz-script-level: +1;
math-depth: +1;
math-style: compact;
}
@ -303,7 +303,7 @@ mtable { math-style: compact; }
scriptlevel by 1, so the children are typically displayed in a smaller font.
XXXfredw: This element is not implemented yet. See bug 534967.
mscarries {
-moz-script-level: +1;
math-depth: +1;
math-style: compact;
}
*/

View File

@ -1142,7 +1142,7 @@ class nsMathMLContainerFrame::RowChildFrameIterator {
// add inter frame spacing
const nsStyleFont* font = mParentFrame->StyleFont();
nscoord space =
GetInterFrameSpacing(font->mScriptLevel, prevFrameType, mChildFrameType,
GetInterFrameSpacing(font->mMathDepth, prevFrameType, mChildFrameType,
&mFromFrameType, &mCarrySpace);
mX += space * GetThinSpace(font);
return *this;
@ -1293,7 +1293,7 @@ static nscoord AddInterFrameSpacingToSize(ReflowOutput& aDesiredSize,
return 0;
}
if (parentContent->IsAnyOfMathMLElements(nsGkAtoms::math, nsGkAtoms::mtd_)) {
gap = GetInterFrameSpacingFor(aFrame->StyleFont()->mScriptLevel, parent,
gap = GetInterFrameSpacingFor(aFrame->StyleFont()->mMathDepth, parent,
aFrame);
// add our own italic correction
nscoord leftCorrection = 0, italicCorrection = 0;

View File

@ -333,19 +333,19 @@ void nsMathMLmfencedFrame::Reflow(nsPresContext* aPresContext,
/////////////////
// opening fence ...
ReflowChar(drawTarget, *fm, fontSizeInflation, mOpenChar,
NS_MATHML_OPERATOR_FORM_PREFIX, font->mScriptLevel, axisHeight,
NS_MATHML_OPERATOR_FORM_PREFIX, font->mMathDepth, axisHeight,
leading, em, containerSize, ascent, descent, isRTL);
/////////////////
// separators ...
for (i = 0; i < mSeparatorsCount; i++) {
ReflowChar(drawTarget, *fm, fontSizeInflation, &mSeparatorsChar[i],
NS_MATHML_OPERATOR_FORM_INFIX, font->mScriptLevel, axisHeight,
NS_MATHML_OPERATOR_FORM_INFIX, font->mMathDepth, axisHeight,
leading, em, containerSize, ascent, descent, isRTL);
}
/////////////////
// closing fence ...
ReflowChar(drawTarget, *fm, fontSizeInflation, mCloseChar,
NS_MATHML_OPERATOR_FORM_POSTFIX, font->mScriptLevel, axisHeight,
NS_MATHML_OPERATOR_FORM_POSTFIX, font->mMathDepth, axisHeight,
leading, em, containerSize, ascent, descent, isRTL);
//////////////////
@ -574,7 +574,7 @@ void nsMathMLmfencedFrame::GetIntrinsicISizeMetrics(
if (mOpenChar) {
width += GetMaxCharWidth(
this, aRenderingContext->GetDrawTarget(), fontSizeInflation, mOpenChar,
NS_MATHML_OPERATOR_FORM_PREFIX, font->mScriptLevel, em);
NS_MATHML_OPERATOR_FORM_PREFIX, font->mMathDepth, em);
}
int32_t i = 0;
@ -586,10 +586,10 @@ void nsMathMLmfencedFrame::GetIntrinsicISizeMetrics(
nsLayoutUtils::PREF_ISIZE);
if (i < mSeparatorsCount) {
width += GetMaxCharWidth(this, aRenderingContext->GetDrawTarget(),
fontSizeInflation, &mSeparatorsChar[i],
NS_MATHML_OPERATOR_FORM_INFIX,
font->mScriptLevel, em);
width +=
GetMaxCharWidth(this, aRenderingContext->GetDrawTarget(),
fontSizeInflation, &mSeparatorsChar[i],
NS_MATHML_OPERATOR_FORM_INFIX, font->mMathDepth, em);
}
i++;
}
@ -597,7 +597,7 @@ void nsMathMLmfencedFrame::GetIntrinsicISizeMetrics(
if (mCloseChar) {
width += GetMaxCharWidth(
this, aRenderingContext->GetDrawTarget(), fontSizeInflation, mCloseChar,
NS_MATHML_OPERATOR_FORM_POSTFIX, font->mScriptLevel, em);
NS_MATHML_OPERATOR_FORM_POSTFIX, font->mMathDepth, em);
}
aDesiredSize.Width() = width;

View File

@ -267,7 +267,7 @@ nsresult nsMathMLmmultiscriptsFrame::PlaceMultiScript(
// get sup script shift depending on current script level and display style
// Rule 18c, App. G, TeXbook
if (font->mScriptLevel == 0 &&
if (font->mMathDepth == 0 &&
font->mMathStyle == NS_STYLE_MATH_STYLE_NORMAL &&
!NS_MATHML_IS_COMPRESSED(presentationData.flags)) {
// Style D in TeXbook

View File

@ -342,7 +342,7 @@ void nsMathMLmoFrame::ProcessOperatorData() {
// tuning if we don't want too much extra space when we are a script.
// (with its fonts, TeX sets lspace=0 & rspace=0 as soon as scriptlevel>0.
// Our fonts can be anything, so...)
if (StyleFont()->mScriptLevel > 0 &&
if (StyleFont()->mMathDepth > 0 &&
!NS_MATHML_OPERATOR_HAS_EMBELLISH_ANCESTOR(mFlags)) {
mEmbellishData.leadingSpace /= 2;
mEmbellishData.trailingSpace /= 2;

View File

@ -226,7 +226,7 @@ nsStyleFont::nsStyleFont(const nsStyleFont& aSrc)
mFontSizeOffset(aSrc.mFontSizeOffset),
mFontSizeKeyword(aSrc.mFontSizeKeyword),
mGenericID(aSrc.mGenericID),
mScriptLevel(aSrc.mScriptLevel),
mMathDepth(aSrc.mMathDepth),
mMathVariant(aSrc.mMathVariant),
mMathStyle(aSrc.mMathStyle),
mMinFontSizeRatio(aSrc.mMinFontSizeRatio),
@ -247,7 +247,7 @@ nsStyleFont::nsStyleFont(const Document& aDocument)
mFontSizeOffset{0},
mFontSizeKeyword(StyleFontSizeKeyword::Medium),
mGenericID(StyleGenericFontFamily::None),
mScriptLevel(0),
mMathDepth(0),
mMathVariant(NS_MATHML_MATHVARIANT_NONE),
mMathStyle(NS_STYLE_MATH_STYLE_NORMAL),
mMinFontSizeRatio(100), // 100%
@ -293,8 +293,7 @@ nsChangeHint nsStyleFont::CalcDifference(const nsStyleFont& aNewData) const {
}
// XXX Should any of these cause a non-nsChangeHint_NeutralChange change?
if (mGenericID != aNewData.mGenericID ||
mScriptLevel != aNewData.mScriptLevel ||
if (mGenericID != aNewData.mGenericID || mMathDepth != aNewData.mMathDepth ||
mScriptUnconstrainedSize != aNewData.mScriptUnconstrainedSize ||
mScriptMinSize != aNewData.mScriptMinSize ||
mScriptSizeMultiplier != aNewData.mScriptSizeMultiplier) {

View File

@ -110,8 +110,8 @@ struct MOZ_NEEDS_MEMMOVABLE_MEMBERS nsStyleFont {
mozilla::StyleGenericFontFamily mGenericID;
// MathML scriptlevel support
int8_t mScriptLevel;
// math-depth support (used for MathML scriptlevel)
int8_t mMathDepth;
// MathML mathvariant support
uint8_t mMathVariant;
// math-style support (used for MathML displaystyle)

View File

@ -6060,6 +6060,14 @@
mirror: always
rust: true
# Is support for math-depth enabled?
# This must not be enabled until implementation is complete (see bug 1667090).
- name: layout.css.math-depth.enabled
type: RelaxedAtomicBool
value: false
mirror: always
rust: true
# Pref to control whether @-moz-document rules are enabled in content pages.
- name: layout.css.moz-document.content.enabled
type: RelaxedAtomicBool

View File

@ -963,7 +963,7 @@ impl<'a, 'b: 'a> Cascade<'a, 'b> {
fn handle_mathml_scriptlevel_if_needed(&mut self) {
use crate::values::generics::NonNegative;
if !self.seen.contains(LonghandId::MozScriptLevel) &&
if !self.seen.contains(LonghandId::MathDepth) &&
!self.seen.contains(LonghandId::MozScriptMinSize) &&
!self.seen.contains(LonghandId::MozScriptSizeMultiplier) {
return;
@ -980,7 +980,7 @@ impl<'a, 'b: 'a> Cascade<'a, 'b> {
let parent_font = builder.get_parent_font().gecko();
let delta =
font.mScriptLevel.saturating_sub(parent_font.mScriptLevel);
font.mMathDepth.saturating_sub(parent_font.mMathDepth);
if delta == 0 {
return;

View File

@ -360,7 +360,7 @@ class Longhand(object):
"MasonryAutoFlow",
"MozForceBrokenImageIcon",
"MozListReversed",
"MozScriptLevel",
"MathDepth",
"MozScriptMinSize",
"MozScriptSizeMultiplier",
"TextDecorationSkipInk",

View File

@ -228,14 +228,15 @@ ${helpers.predefined_type(
)}
${helpers.predefined_type(
"-moz-script-level",
"MozScriptLevel",
"math-depth",
"MathDepth",
"0",
engines="gecko",
gecko_pref="layout.css.math-depth.enabled",
has_effect_on_gecko_scrollbars=False,
animation_value_type="none",
enabled_in="ua",
gecko_ffi_name="mScriptLevel",
spec="Internal (not web-exposed)",
spec="https://mathml-refresh.github.io/mathml-core/#the-math-script-level-property",
)}
${helpers.single_keyword(

View File

@ -1342,8 +1342,8 @@ impl LonghandId {
// preferences properly, see bug 1165538.
LonghandId::MozMinFontSizeRatio |
// Needed to do font-size for MathML. :(
LonghandId::MozScriptLevel |
// font-size depends on math-depth's computed value.
LonghandId::MathDepth |
% endif
// Needed to compute the first available font, in order to

View File

@ -811,20 +811,20 @@ impl ToComputedValue for specified::MozScriptMinSize {
}
}
/// The computed value of the -moz-script-level property.
pub type MozScriptLevel = i8;
/// The computed value of the math-depth property.
pub type MathDepth = i8;
#[cfg(feature = "gecko")]
impl ToComputedValue for specified::MozScriptLevel {
type ComputedValue = MozScriptLevel;
impl ToComputedValue for specified::MathDepth {
type ComputedValue = MathDepth;
fn to_computed_value(&self, cx: &Context) -> i8 {
use crate::properties::longhands::math_style::SpecifiedValue as MathStyleValue;
use std::{cmp, i8};
let int = match *self {
specified::MozScriptLevel::Auto => {
let parent = cx.builder.get_parent_font().clone__moz_script_level() as i32;
specified::MathDepth::Auto => {
let parent = cx.builder.get_parent_font().clone_math_depth() as i32;
let style = cx.builder.get_parent_font().clone_math_style();
if style == MathStyleValue::Compact {
parent + 1
@ -832,17 +832,17 @@ impl ToComputedValue for specified::MozScriptLevel {
parent
}
},
specified::MozScriptLevel::Relative(rel) => {
let parent = cx.builder.get_parent_font().clone__moz_script_level();
specified::MathDepth::Relative(rel) => {
let parent = cx.builder.get_parent_font().clone_math_depth();
parent as i32 + rel
},
specified::MozScriptLevel::MozAbsolute(abs) => abs,
specified::MathDepth::MozAbsolute(abs) => abs,
};
cmp::min(int, i8::MAX as i32) as i8
}
fn from_computed_value(other: &i8) -> Self {
specified::MozScriptLevel::MozAbsolute(*other as i32)
specified::MathDepth::MozAbsolute(*other as i32)
}
}

View File

@ -58,7 +58,7 @@ pub use self::font::{FontFeatureSettings, FontVariantLigatures, FontVariantNumer
pub use self::font::{FontSize, FontSizeAdjust, FontStretch, FontSynthesis};
pub use self::font::{FontVariantAlternates, FontWeight};
pub use self::font::{FontVariantEastAsian, FontVariationSettings};
pub use self::font::{MozScriptLevel, MozScriptMinSize, MozScriptSizeMultiplier, XLang, XTextZoom};
pub use self::font::{MathDepth, MozScriptMinSize, MozScriptSizeMultiplier, XLang, XTextZoom};
pub use self::image::{Gradient, Image, LineDirection, MozImageRect};
pub use self::length::{CSSPixelLength, ExtremumLength, NonNegativeLength};
pub use self::length::{Length, LengthOrNumber, LengthPercentage, NonNegativeLengthOrNumber};

View File

@ -2303,7 +2303,7 @@ impl Parse for MozScriptMinSize {
///
/// The main effect of scriptlevel is to control the font size.
/// https://www.w3.org/TR/MathML3/chapter3.html#presm.scriptlevel
pub enum MozScriptLevel {
pub enum MathDepth {
/// Change `font-size` relatively.
Relative(i32),
/// Change `font-size` absolutely.
@ -2317,17 +2317,17 @@ pub enum MozScriptLevel {
Auto,
}
impl Parse for MozScriptLevel {
impl Parse for MathDepth {
fn parse<'i, 't>(
_: &ParserContext,
input: &mut Parser<'i, 't>,
) -> Result<MozScriptLevel, ParseError<'i>> {
) -> Result<MathDepth, ParseError<'i>> {
// We don't bother to handle calc here.
if let Ok(i) = input.try_parse(|i| i.expect_integer()) {
return Ok(MozScriptLevel::Relative(i));
return Ok(MathDepth::Relative(i));
}
input.expect_ident_matching("auto")?;
Ok(MozScriptLevel::Auto)
Ok(MathDepth::Auto)
}
}

View File

@ -53,7 +53,7 @@ pub use self::font::{FontFeatureSettings, FontVariantLigatures, FontVariantNumer
pub use self::font::{FontSize, FontSizeAdjust, FontSizeKeyword, FontStretch, FontSynthesis};
pub use self::font::{FontVariantAlternates, FontWeight};
pub use self::font::{FontVariantEastAsian, FontVariationSettings};
pub use self::font::{MozScriptLevel, MozScriptMinSize, MozScriptSizeMultiplier, XLang, XTextZoom};
pub use self::font::{MathDepth, MozScriptMinSize, MozScriptSizeMultiplier, XLang, XTextZoom};
pub use self::image::{EndingShape as GradientEndingShape, Gradient};
pub use self::image::{Image, MozImageRect};
pub use self::length::{AbsoluteLength, CalcLengthPercentage, CharacterWidth};

View File

@ -4901,7 +4901,7 @@ pub extern "C" fn Servo_DeclarationBlock_SetIntValue(
property: nsCSSPropertyID,
value: i32,
) {
use style::properties::longhands::_moz_script_level::SpecifiedValue as MozScriptLevel;
use style::properties::longhands::math_depth::SpecifiedValue as MathDepth;
use style::properties::PropertyDeclaration;
use style::values::specified::Integer;
@ -4909,7 +4909,7 @@ pub extern "C" fn Servo_DeclarationBlock_SetIntValue(
let prop = match_wrap_declared! { long,
XSpan => Integer::new(value),
// Gecko uses Integer values to signal that it is relative
MozScriptLevel => MozScriptLevel::Relative(value),
MathDepth => MathDepth::Relative(value),
};
write_locked_arc(declarations, |decls: &mut PropertyDeclarationBlock| {
decls.push(prop, Importance::Normal);
@ -5072,7 +5072,7 @@ pub extern "C" fn Servo_DeclarationBlock_SetNumberValue(
property: nsCSSPropertyID,
value: f32,
) {
use style::properties::longhands::_moz_script_level::SpecifiedValue as MozScriptLevel;
use style::properties::longhands::math_depth::SpecifiedValue as MathDepth;
use style::properties::longhands::_moz_script_size_multiplier::SpecifiedValue as MozScriptSizeMultiplier;
use style::properties::PropertyDeclaration;
@ -5081,7 +5081,7 @@ pub extern "C" fn Servo_DeclarationBlock_SetNumberValue(
let prop = match_wrap_declared! { long,
MozScriptSizeMultiplier => MozScriptSizeMultiplier(value),
// Gecko uses Number values to signal that it is absolute
MozScriptLevel => MozScriptLevel::MozAbsolute(value as i32),
MathDepth => MathDepth::MozAbsolute(value as i32),
};
write_locked_arc(declarations, |decls: &mut PropertyDeclarationBlock| {
decls.push(prop, Importance::Normal);

View File

@ -47,7 +47,7 @@
-moz-list-reversed: initial;
-moz-font-smoothing-background-color: initial;
-moz-min-font-size-ratio: initial;
-moz-script-level: initial;
math-depth: initial;
/* As long as inert implies pointer-events: none as it does now, we're
* good. */
-moz-inert: initial;