diff --git a/layout/mathml/nsMathMLmmultiscriptsFrame.cpp b/layout/mathml/nsMathMLmmultiscriptsFrame.cpp index e0c8700d835b..c1d9957a3c94 100644 --- a/layout/mathml/nsMathMLmmultiscriptsFrame.cpp +++ b/layout/mathml/nsMathMLmmultiscriptsFrame.cpp @@ -203,6 +203,14 @@ nsMathMLmmultiscriptsFrame::PlaceMultiScript(nsPresContext* aPresContext, scriptSpace = nsPresContext::CSSPointsToAppUnits(0.5f); } + // Try and read sub and sup drops from the MATH table. + if (mathFont) { + subDrop = mathFont-> + GetMathConstant(gfxFontEntry::SubscriptBaselineDropMin, oneDevPixel); + supDrop = mathFont-> + GetMathConstant(gfxFontEntry::SuperscriptBaselineDropMax, oneDevPixel); + } + // force the scriptSpace to be at least 1 pixel nscoord onePixel = nsPresContext::CSSPixelsToAppUnits(1); scriptSpace = std::max(onePixel, scriptSpace); @@ -390,8 +398,11 @@ nsMathMLmmultiscriptsFrame::PlaceMultiScript(nsPresContext* aPresContext, // subscript subScriptFrame = childFrame; GetReflowAndBoundingMetricsFor(subScriptFrame, subScriptSize, bmSubScript); - // get the subdrop from the subscript font - GetSubDropFromChild (subScriptFrame, subDrop, aFontSizeInflation); + if (!mathFont) { + // get the subdrop from the subscript font + GetSubDropFromChild (subScriptFrame, subDrop, aFontSizeInflation); + } + // parameter v, Rule 18a, App. G, TeXbook minSubScriptShift = bmBase.descent + subDrop; trySubScriptShift = std::max(minSubScriptShift,subScriptShift); @@ -431,8 +442,10 @@ nsMathMLmmultiscriptsFrame::PlaceMultiScript(nsPresContext* aPresContext, // supscript supScriptFrame = childFrame; GetReflowAndBoundingMetricsFor(supScriptFrame, supScriptSize, bmSupScript); - // get the supdrop from the supscript font - GetSupDropFromChild (supScriptFrame, supDrop, aFontSizeInflation); + if (!mathFont) { + // get the supdrop from the supscript font + GetSupDropFromChild (supScriptFrame, supDrop, aFontSizeInflation); + } // parameter u, Rule 18a, App. G, TeXbook minSupScriptShift = bmBase.ascent - supDrop; nscoord superscriptBottomMin; diff --git a/layout/mathml/tests/test_opentype-scripts.html b/layout/mathml/tests/test_opentype-scripts.html index 584d3f1e7d21..7ad0e90ab03e 100644 --- a/layout/mathml/tests/test_opentype-scripts.html +++ b/layout/mathml/tests/test_opentype-scripts.html @@ -9,7 +9,7 @@ @@ -264,5 +276,17 @@

+

+ + + + + + + +

diff --git a/layout/reftests/fonts/math/generate.py b/layout/reftests/fonts/math/generate.py index 59d2a9cb4876..b42cd3e227c5 100644 --- a/layout/reftests/fonts/math/generate.py +++ b/layout/reftests/fonts/math/generate.py @@ -479,6 +479,11 @@ f = newMathFont("scripts-8") f.math.SuperscriptBottomMin = 9 * em saveMathFont(f) +f = newMathFont("scripts-9") +f.math.SubscriptBaselineDropMin = 3 * em +f.math.SuperscriptBaselineDropMax = 5 * em +saveMathFont(f) + ################################################################################ # Testing Limits Parameters f = newMathFont("limits-1") diff --git a/layout/reftests/fonts/math/mochitest.ini b/layout/reftests/fonts/math/mochitest.ini index 0aad9823750e..ff6ebcc04ceb 100644 --- a/layout/reftests/fonts/math/mochitest.ini +++ b/layout/reftests/fonts/math/mochitest.ini @@ -31,6 +31,7 @@ support-files = /tests/fonts/math/scripts-6.otf /tests/fonts/math/scripts-7.otf /tests/fonts/math/scripts-8.otf + /tests/fonts/math/scripts-9.otf /tests/fonts/math/stack-1.otf /tests/fonts/math/stack-2.otf /tests/fonts/math/stack-3.otf diff --git a/layout/reftests/fonts/math/scripts-9.otf b/layout/reftests/fonts/math/scripts-9.otf new file mode 100644 index 000000000000..35984e1b4b05 Binary files /dev/null and b/layout/reftests/fonts/math/scripts-9.otf differ