The :literal
and :common
core properties establish a set of defaults for speaking every MathML element that MathML intent generators can assume and that AT should implement. That does not mean that the exact words are specified, only that AT chooses words that convey the default meaning. For example: msup
is spoken as “super” or “superscript” or some similar words and not “power” if that element or some ancestor includes the :literal
property.
The exact words may depend upon both the audience and the children of node. Some examples for $x^2$ if msup or some ancestor has the :literal
property:
For someone who is blind, it may be important to indicate the start and end of fractions, roots, etc., but for someone with dyslexia, the extra words might be “verbal noise.”
literal
propertyThe default meanings and special cases for all the MathML elements are:
ms
speaks its open/close deliminators in addition to its contents.mglyph
speaks the alt textmspace
, malginmark
, maligngroup
, and none
are either silent or generate pausesmsline
, indicates that it is a linemrow
– speaks the childrenmfrac
– arg1 “over” arg2msqrt
– “root” argmroot
– “root” index “of” contentsmerror
– indicates there is an error and speaks the contentsmfenced
– should speak the same as the equivalent mrow
notationmenclose
– should indicate the notation attributes along with the contents. For example, “box around arg” or “line under arg”msup
– arg1 “superscript” arg2. The exceptions are when the superscript is a pseudo-script character, in which case “superscript” is not spoken (e.g, $x^\prime$ is spoken “x prime”). See below for a list of pseudo-script characters.msub
– arg1 “subscript” arg2.msubsup
– arg1 “subscript” arg2“and superscript” arg3. As with msup
, exceptions are made when the superscript is a pseudo-script character.
mover
– arg1 “with” arg2 “above”. When arg2 is bar, hat, caret, tilde, dot (1-4 of them), acute, or grave, the speech is abbreviated to arg1 arg2 as in “x bar”.munder
– arg1 “with” arg2 “below”. When arg2 is bar, the speech is abbreviated to arg1 arg2 as in “x underbar”munderover
– arg1 “with” arg2 “below and” arg3 “above. When arg3 is one of the special cases for mover
, then the speech is abbreviated to arg1 arg3 “with” arg2 “below” as in “x bar with cup below”mmultiscripts
– indicates the scripts and their position in some way. E.g., “start-scripted … pre-subscript … pre-superscript … base … post-subscript … post-superscript … end-scripted”mtable
/mtr
/mlabeledtr
/mtd
– say something appropriate for tables (no recognition of determinants, matrices, vectors, etc)mstack
/mlongdiv
/msgroup
/msrow
/mscarries
/mscarry
) – say something about the layout, but not that it is addition, long division, repeated decimals, etc.maction
– speaks the selected child with maybe some indication of the actionsemantics
– speaks the presentation childcommon
propertyThe default meanings and special cases for all the MathML elements are:
ms
speaks its open/close deliminators in addition to its contents.mglyph
speaks the alt textmspace
, malginmark
, maligngroup
, and none
are either silent or generate pausesmsline
, indicates that it is a linemrow
– speaks the children
mfrac
– indicates it is division, but might have a number of special case rules depending on the arguments. For example “three quarters”, “x over y”, “a over b all over c”msqrt
– indicates it is a square rootmroot
– indicates it is a root with an index. There should be special cases for at least ‘2’ and ‘3’ as the indexmerror
– indicates there is an error and speaks the contentsmfenced
– should speak the same as the equivalent mrow
notationmenclose
– should indicate the notation attributes along with the contents. Special case speech might be appropriate when menclose looks like a similar notation that has special cases (e.g, notation="top"
looks the same as mover
with a “_” (or equivalent) second child).msup
– should assume that the notation is a power with the following special cases
msub
– indicates a subscript. Special cases:
mo
that has an explicit or default largeop attribute or because it has the :largeop
intent property)msubsup
– indicates a subscripted variable raised a power with the same special cases as msup
and msubsup
. This includes (read the same as for munderover)
mover
– indicates that the second argument is over the first.
Special cases:
munder
– indicates that the second argument is under the first. Special cases:
munderover
– indicates there is content above and below the base. Special case:
mmultiscripts
– indicates the scriptsmtable
/mtr
/mlabeledtr
/mtd
– say something appropriate for tables, making it clear which row and column each entry is in. Special cases:
mstack
/mlongdiv
/msgroup
/msrow
/mscarries
/mscarry
) – say something appropriate. This might be something like “math stack 323 plus 61 horizontal line 384”maction
– speaks the selected child with maybe some indication of the actionsemantics
– speaks the presentation childThe following is a minimum list of trig functions that should be recognized and spoken appropriately: “cos”, “cosec”, “cosech”, “cosh”, “cot”, “cotan”, “cotanh”, “coth”, “csc”, “csch”, “sec”, “sech”, “sin”, “sinh”, “tan”, “tang”, “tanh”, “tg”, “ln”, “log”, “lg”. Other languages may add localized versions to this list.
If these names are encountered, they typically are expanded to their full name: “csc” would be “co-secant” in English; “sinh” would be “hyperbolic sine”, etc.
As noted above, a trig function raised to a “-1” power should have special speech. For example, $sin^{-1} x$ might be spoken as “inverse sine of x”, “arc sine of x”, or “sine inverse of x”.
These are spoken in a special way, although maybe that is just the default way to speak those Unicode characters.
However, adding subscripts and superscripts of various types (e.g., $\mathbb {Z}^2$, $\mathbb {Z}^+$, and $\mathbb {Z}_2$) often have specialized speech such as “Z 2”.