[MathML4] Simplification of the mstyle element

Hi,

Continuing with suggestions for future Math WG work, let's come back
again to the idea of simplifying the mstyle element. It duplicates the
CSS inheritance mechanism in a CSS-incompatible way and has many
exceptions that make it hard to understand: there are three different
types of inheritance described in the specification, mathbackground
applies more naturally to the element that bears the attribute than to
each token descendants, mpadded/mspace share attributes names that have
different syntax etc For example, in previous discussions the case of
displaystyle seemed really clear in the mind of spec authors but less in
the one of the various implementers.

In practice, many of the mstyle attributes are not useful and never
used. It is a burden for implementers since they essentially have to
reimplement a specific "attribute" inheritance mechanism to support the
general case even if the most prominent attributes have obvious mapping
to CSS. It is also a performance issue to perform the rendering and keep
it up-to-date since the rendering on any node may depend on its mstyle
ancestors.

Support for mstyle has been simplified in Gecko several years ago. When
this was reported to this mailing list, there have not been strong
complaints against the idea (only a few extra attributes were reported
to be used in the MathML3 test suite). There has not been any bug
reports regarding removal of attributes, confirming they were not used
(this contrasts with the case of displaystyle for which aligning on the
specification caused some trouble). Support for some important mstyle
attributes have been implemented in WebKit but there are no plans to
handle the general cases.

Given this, the proposal is as follows: restrict mstyle to attributes
used in practice listed below. Also the inheritance can in most cases be
more easily described with CSS rules or attribute mapping.

1) dir: mapped to the CSS direction property.

2) mathsize: mapped to font-size. Note that MathML has the keywords
"small", "normal", "big" that adds some parsing code before the mapping.
It's not clear whether these keywords are very important (small is 100%,
small/big are unspecified...) so they could be deprecated too to
simplify the mapping code.

3) mathbackground: mapped to CSS background property.

4) color: mapped to CSS color property.

5) displaystyle: this one will be preserved but inheritance can be more
clearly described to people familiar with CSS as equivalent to having a
CSS property with values false/true, which is inherited, has computed
value "as specified" and with the following rules in the user agent
stylesheet.

math {
  displaystyle: false;
}
math[display="block"] {
  displaystyle: true;
}
math[display="false"] {
  displaystyle: false;
}
math[displaystyle="false"] {
  displaystyle: false;
}
math[displaystyle="true"] {
  displaystyle: true;
}
mtable {
  displaystyle: false;
}
mtable[displaystyle="true"] {
  displaystyle: true;
}
mstyle[displaystyle="false"] {
  displaystyle: false;
}
mstyle[displaystyle="true"] {
  displaystyle: true;
}
mfrac > * {
  displaystyle: false;
}
mroot > :not(:first-child) {
  displaystyle: false;
}
msub > :not(:first-child),
msup > :not(:first-child),
msubsup > :not(:first-child),
mmultiscripts > :not(:first-child) {
  displaystyle: false;
}
munder > :not(:first-child),
mover > :not(:first-child),
munderover > :not(:first-child) {
  displaystyle: false;
}

6) mathvariant: this one will be preserved but inheritance can be more
clearly described to people familiar with CSS as mapped to a CSS
property with all the mathvariant values + an "auto" value (to handle
automatic italic), initial value "auto", which is inherited and has
computed value "as specified".

7) scriptsizemultiplier: can be described as a CSS property with
<number> values, initial value 0.71, computed value "as specified" and
which is inherited. It's not clear whether the attribute is really
useful as in practice it is left to its default value. Also this is in
conflicts with ScriptPercentScaleDown and ScriptScriptPercentScaleDown
properties of the MATH table.

8) scriptminsize: can be described as a CSS property with <length>
values, initial value 8pt, computed value "as specified" and which is
inherited. Again, it's not really clear whether the attribute is useful
as in practice it is left to its default value.

9) scriptlevel: This one must be preserved but it is not clear whether
it can be described as a pure CSS property without adding too much
complexities. There is a proposal on
http://www.mathml-association.org/MathMLinHTML5/S2.html#SS3 but the
increment in munderover/munder/mover should really depend on the
accent/accentunder property which itself depends on specified attributes
or implicit/explicit operator properties in the overscript/underscript
subtrees.

A rule to determine the computed value for font-size must also be
provided, for example:

FontSize_Child =
  max of ScriptMinSize_Parent and
         [FontSize_Parent times
          ScriptSizeMultiplier_Parent^(FontSize_Child - FontSize_Parent)]

with possible additional edge cases to handle.

Unless something has been forgotten above, all the other mstyle
attributes could be safely deprecated and removed.

-- 
Frédéric Wang

Received on Wednesday, 27 July 2016 08:10:56 UTC