Reset font-style on the <math> element
authorcommit-queue@webkit.org <commit-queue@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Sat, 23 Jul 2016 08:39:02 +0000 (08:39 +0000)
committercommit-queue@webkit.org <commit-queue@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Sat, 23 Jul 2016 08:39:02 +0000 (08:39 +0000)
https://bugs.webkit.org/show_bug.cgi?id=160074

Patch by Frederic Wang <fwang@igalia.com> on 2016-07-23
Reviewed by Darin Adler.

Source/WebCore:

Mathematical formulas with italic font-style render poorly (slanted operators, mathvariant
italic etc). We align on Gecko and make the user agent stylesheet reset the font-style to
'normal' by default. This addresses the concrete use case of formula inside theorem or
proposition statements, which are often written in italic.

Test: mathml/presentation/math-font-style.html

* css/mathml.css:
(math): Reset the font-style to normal.

LayoutTests:

* mathml/presentation/math-font-style-expected.html: Added.
* mathml/presentation/math-font-style.html: Added.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@203640 268f45cc-cd09-0410-ab3c-d52691b4dbfc

LayoutTests/ChangeLog
LayoutTests/mathml/presentation/math-font-style-expected.html [new file with mode: 0644]
LayoutTests/mathml/presentation/math-font-style.html [new file with mode: 0644]
Source/WebCore/ChangeLog
Source/WebCore/css/mathml.css

index ea1e5bc..a1d7f3e 100644 (file)
@@ -1,5 +1,15 @@
 2016-07-23  Frederic Wang  <fwang@igalia.com>
 
+        Reset font-style on the <math> element
+        https://bugs.webkit.org/show_bug.cgi?id=160074
+
+        Reviewed by Darin Adler.
+
+        * mathml/presentation/math-font-style-expected.html: Added.
+        * mathml/presentation/math-font-style.html: Added.
+
+2016-07-23  Frederic Wang  <fwang@igalia.com>
+
         [MathML] PaintInfo state not properly restored after applyTransform.
         https://bugs.webkit.org/show_bug.cgi?id=160077
 
diff --git a/LayoutTests/mathml/presentation/math-font-style-expected.html b/LayoutTests/mathml/presentation/math-font-style-expected.html
new file mode 100644 (file)
index 0000000..d2d2375
--- /dev/null
@@ -0,0 +1,29 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <title>math font-style</title>
+    <meta charset="utf-8"/>
+    <style type="text/css">
+      .num_theorem { font-style: italic; }
+      math { font-style: normal; }
+    </style>
+  </head>
+  <body>
+
+    <p>The italic style of the theorem paragraph should not be applied to the math tag.</p>
+
+    <div class="num_theorem">
+      <p><span class="theorem_label">Theorem</span><span>. </span>Let <math class="maruku-mathml" display="inline" xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>f</mi><mo>:</mo><mi>Δ</mi><mo>⟶</mo><mi>Δ</mi><mo>,</mo></mrow><annotation encoding="application/x-tex">f : \Delta \longrightarrow \Delta,</annotation></semantics></math> where <math class="maruku-mathml" display="inline" xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>Δ</mi><mo>=</mo><mo stretchy="false">{</mo><mi>z</mi><mo>∈</mo><mi>ℂ</mi><mo>:</mo><mo stretchy="false">|</mo><mi>z</mi><mo stretchy="false">|</mo><mo>&lt;</mo><mn>1</mn><mo stretchy="false">}</mo></mrow><annotation encoding="application/x-tex">\Delta=\{z\in\mathbb{C}: \vert z \vert \lt 1\}</annotation></semantics></math>, be analytic with <math class="maruku-mathml" display="inline" xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>a</mi><mo>∈</mo><mi>Δ</mi></mrow><annotation encoding="application/x-tex">a \in \Delta</annotation></semantics></math>. Then</p>
+<div class="maruku-equation"><math class="maruku-mathml" display="block" xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mrow><mo>|</mo><mfrac><mrow><mi>f</mi><mo stretchy="false">(</mo><mi>z</mi><mo stretchy="false">)</mo><mo>−</mo><mi>f</mi><mo stretchy="false">(</mo><mi>a</mi><mo stretchy="false">)</mo></mrow><mrow><mn>1</mn><mo>−</mo><mover><mrow><mi>f</mi><mo stretchy="false">(</mo><mi>a</mi><mo stretchy="false">)</mo></mrow><mo>¯</mo></mover><mi>f</mi><mo stretchy="false">(</mo><mi>z</mi><mo stretchy="false">)</mo></mrow></mfrac><mo>|</mo></mrow><mo>≤</mo><mrow><mo>|</mo><mfrac><mrow><mi>z</mi><mo>−</mo><mi>a</mi></mrow><mrow><mn>1</mn><mo>−</mo><mover><mi>a</mi><mo>¯</mo></mover><mi>z</mi></mrow></mfrac><mo>|</mo></mrow></mrow><annotation encoding="application/x-tex"> 
+\left\vert\frac{f(z)-f(a)}{1-\overline{f(a)}f(z)}\right\vert\le \left\vert\frac{z-a}{1-\overline{a}z}\right\vert 
+
+</annotation></semantics></math></div>
+<p>for all <math class="maruku-mathml" display="inline" xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mo stretchy="false">|</mo><mi>z</mi><mo stretchy="false">|</mo><mo>≤</mo><mn>1</mn></mrow><annotation encoding="application/x-tex">\vert z \vert \le 1</annotation></semantics></math> and</p>
+<div class="maruku-equation"><math class="maruku-mathml" display="block" xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mfrac><mrow><mo stretchy="false">|</mo><mi>f</mi><mo>′</mo><mo stretchy="false">(</mo><mi>a</mi><mo stretchy="false">)</mo><mo stretchy="false">|</mo></mrow><mrow><mn>1</mn><mo>−</mo><mo stretchy="false">|</mo><mi>f</mi><mo stretchy="false">(</mo><mi>a</mi><mo stretchy="false">)</mo><msup><mo stretchy="false">|</mo> <mn>2</mn></msup></mrow></mfrac><mo>≤</mo><mfrac><mn>1</mn><mrow><mn>1</mn><mo>−</mo><mo stretchy="false">|</mo><mi>a</mi><msup><mo stretchy="false">|</mo> <mn>2</mn></msup></mrow></mfrac><mo>.</mo></mrow><annotation encoding="application/x-tex">
+\frac{\vert f'(a)\vert}{1-\vert f(a)\vert^2}\le \frac{1}{1-\vert a \vert^2}.
+
+</annotation></semantics></math></div>
+<p>Furthermore, equality holds iff <math class="maruku-mathml" display="inline" xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>f</mi></mrow><annotation encoding="application/x-tex">f</annotation></semantics></math> realizes a conformal mapping of <math class="maruku-mathml" display="inline" xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>Δ</mi></mrow><annotation encoding="application/x-tex">\Delta</annotation></semantics></math> onto itself.</p>
+</div>
+  </body>
+</html>
diff --git a/LayoutTests/mathml/presentation/math-font-style.html b/LayoutTests/mathml/presentation/math-font-style.html
new file mode 100644 (file)
index 0000000..a8f6342
--- /dev/null
@@ -0,0 +1,28 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <title>math font-style</title>
+    <meta charset="utf-8"/>
+    <style type="text/css">
+      .num_theorem { font-style: italic; }
+    </style>
+  </head>
+  <body>
+
+    <p>The italic style of the theorem paragraph should not be applied to the math tag.</p>
+
+    <div class="num_theorem">
+      <p><span class="theorem_label">Theorem</span><span>. </span>Let <math class="maruku-mathml" display="inline" xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>f</mi><mo>:</mo><mi>Δ</mi><mo>⟶</mo><mi>Δ</mi><mo>,</mo></mrow><annotation encoding="application/x-tex">f : \Delta \longrightarrow \Delta,</annotation></semantics></math> where <math class="maruku-mathml" display="inline" xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>Δ</mi><mo>=</mo><mo stretchy="false">{</mo><mi>z</mi><mo>∈</mo><mi>ℂ</mi><mo>:</mo><mo stretchy="false">|</mo><mi>z</mi><mo stretchy="false">|</mo><mo>&lt;</mo><mn>1</mn><mo stretchy="false">}</mo></mrow><annotation encoding="application/x-tex">\Delta=\{z\in\mathbb{C}: \vert z \vert \lt 1\}</annotation></semantics></math>, be analytic with <math class="maruku-mathml" display="inline" xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>a</mi><mo>∈</mo><mi>Δ</mi></mrow><annotation encoding="application/x-tex">a \in \Delta</annotation></semantics></math>. Then</p>
+<div class="maruku-equation"><math class="maruku-mathml" display="block" xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mrow><mo>|</mo><mfrac><mrow><mi>f</mi><mo stretchy="false">(</mo><mi>z</mi><mo stretchy="false">)</mo><mo>−</mo><mi>f</mi><mo stretchy="false">(</mo><mi>a</mi><mo stretchy="false">)</mo></mrow><mrow><mn>1</mn><mo>−</mo><mover><mrow><mi>f</mi><mo stretchy="false">(</mo><mi>a</mi><mo stretchy="false">)</mo></mrow><mo>¯</mo></mover><mi>f</mi><mo stretchy="false">(</mo><mi>z</mi><mo stretchy="false">)</mo></mrow></mfrac><mo>|</mo></mrow><mo>≤</mo><mrow><mo>|</mo><mfrac><mrow><mi>z</mi><mo>−</mo><mi>a</mi></mrow><mrow><mn>1</mn><mo>−</mo><mover><mi>a</mi><mo>¯</mo></mover><mi>z</mi></mrow></mfrac><mo>|</mo></mrow></mrow><annotation encoding="application/x-tex"> 
+\left\vert\frac{f(z)-f(a)}{1-\overline{f(a)}f(z)}\right\vert\le \left\vert\frac{z-a}{1-\overline{a}z}\right\vert 
+
+</annotation></semantics></math></div>
+<p>for all <math class="maruku-mathml" display="inline" xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mo stretchy="false">|</mo><mi>z</mi><mo stretchy="false">|</mo><mo>≤</mo><mn>1</mn></mrow><annotation encoding="application/x-tex">\vert z \vert \le 1</annotation></semantics></math> and</p>
+<div class="maruku-equation"><math class="maruku-mathml" display="block" xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mfrac><mrow><mo stretchy="false">|</mo><mi>f</mi><mo>′</mo><mo stretchy="false">(</mo><mi>a</mi><mo stretchy="false">)</mo><mo stretchy="false">|</mo></mrow><mrow><mn>1</mn><mo>−</mo><mo stretchy="false">|</mo><mi>f</mi><mo stretchy="false">(</mo><mi>a</mi><mo stretchy="false">)</mo><msup><mo stretchy="false">|</mo> <mn>2</mn></msup></mrow></mfrac><mo>≤</mo><mfrac><mn>1</mn><mrow><mn>1</mn><mo>−</mo><mo stretchy="false">|</mo><mi>a</mi><msup><mo stretchy="false">|</mo> <mn>2</mn></msup></mrow></mfrac><mo>.</mo></mrow><annotation encoding="application/x-tex">
+\frac{\vert f'(a)\vert}{1-\vert f(a)\vert^2}\le \frac{1}{1-\vert a \vert^2}.
+
+</annotation></semantics></math></div>
+<p>Furthermore, equality holds iff <math class="maruku-mathml" display="inline" xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>f</mi></mrow><annotation encoding="application/x-tex">f</annotation></semantics></math> realizes a conformal mapping of <math class="maruku-mathml" display="inline" xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>Δ</mi></mrow><annotation encoding="application/x-tex">\Delta</annotation></semantics></math> onto itself.</p>
+</div>
+  </body>
+</html>
index 8827108..42e37c5 100644 (file)
@@ -1,5 +1,22 @@
 2016-07-23  Frederic Wang  <fwang@igalia.com>
 
+        Reset font-style on the <math> element
+        https://bugs.webkit.org/show_bug.cgi?id=160074
+
+        Reviewed by Darin Adler.
+
+        Mathematical formulas with italic font-style render poorly (slanted operators, mathvariant
+        italic etc). We align on Gecko and make the user agent stylesheet reset the font-style to
+        'normal' by default. This addresses the concrete use case of formula inside theorem or
+        proposition statements, which are often written in italic.
+
+        Test: mathml/presentation/math-font-style.html
+
+        * css/mathml.css:
+        (math): Reset the font-style to normal.
+
+2016-07-23  Frederic Wang  <fwang@igalia.com>
+
         [MathML] PaintInfo state is not properly restored after applyTransform.
         https://bugs.webkit.org/show_bug.cgi?id=160077
 
index 6a1dbc6..271c002 100644 (file)
@@ -42,6 +42,12 @@ math {
     */
     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.