Skip to content

Commit

Permalink
Bug 1667118 - Rename -moz-math-script-level to math-depth. r=emilio
Browse files Browse the repository at this point in the history
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
  • Loading branch information
fred-wang committed Sep 24, 2020
1 parent 066a6ba commit c828cce
Show file tree
Hide file tree
Showing 20 changed files with 70 additions and 60 deletions.
2 changes: 1 addition & 1 deletion devtools/server/actors/animation-type-longhand.js
Original file line number Diff line number Diff line change
Expand Up @@ -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",
Expand Down
8 changes: 5 additions & 3 deletions dom/mathml/MathMLElement.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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) {
Expand All @@ -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());
Expand Down
12 changes: 6 additions & 6 deletions layout/mathml/mathml.css
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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;
}

Expand All @@ -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;
}

Expand All @@ -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;
}

Expand Down Expand Up @@ -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;
}
*/
Expand Down
4 changes: 2 additions & 2 deletions layout/mathml/nsMathMLContainerFrame.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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;
Expand Down
18 changes: 9 additions & 9 deletions layout/mathml/nsMathMLmfencedFrame.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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);

//////////////////
Expand Down Expand Up @@ -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;
Expand All @@ -586,18 +586,18 @@ 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++;
}

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;
Expand Down
2 changes: 1 addition & 1 deletion layout/mathml/nsMathMLmmultiscriptsFrame.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
2 changes: 1 addition & 1 deletion layout/mathml/nsMathMLmoFrame.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
7 changes: 3 additions & 4 deletions layout/style/nsStyleStruct.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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),
Expand All @@ -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%
Expand Down Expand Up @@ -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) {
Expand Down
4 changes: 2 additions & 2 deletions layout/style/nsStyleStruct.h
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down
8 changes: 8 additions & 0 deletions modules/libpref/init/StaticPrefList.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -6067,6 +6067,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
Expand Down
4 changes: 2 additions & 2 deletions servo/components/style/properties/cascade.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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;
Expand Down
2 changes: 1 addition & 1 deletion servo/components/style/properties/data.py
Original file line number Diff line number Diff line change
Expand Up @@ -360,7 +360,7 @@ def specified_is_copy(self):
"MasonryAutoFlow",
"MozForceBrokenImageIcon",
"MozListReversed",
"MozScriptLevel",
"MathDepth",
"MozScriptMinSize",
"MozScriptSizeMultiplier",
"TextDecorationSkipInk",
Expand Down
9 changes: 5 additions & 4 deletions servo/components/style/properties/longhands/font.mako.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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(
Expand Down
4 changes: 2 additions & 2 deletions servo/components/style/properties/properties.mako.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
20 changes: 10 additions & 10 deletions servo/components/style/values/computed/font.rs
Original file line number Diff line number Diff line change
Expand Up @@ -811,38 +811,38 @@ 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
} else {
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)
}
}

Expand Down
2 changes: 1 addition & 1 deletion servo/components/style/values/computed/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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};
Expand Down
10 changes: 5 additions & 5 deletions servo/components/style/values/specified/font.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand All @@ -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)
}
}

Expand Down
2 changes: 1 addition & 1 deletion servo/components/style/values/specified/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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};
Expand Down
Loading

0 comments on commit c828cce

Please sign in to comment.