---
- name: default
tag: math
match: "."
replace:
- with:
variables:
- ClearSpeak_Fractions: "IfThenElse($Verbosity='Verbose' and $ClearSpeak_Fractions='Auto', 'EndFrac', $ClearSpeak_Fractions)"
- ClearSpeak_AbsoluteValue: "IfThenElse($Verbosity='Verbose' and $ClearSpeak_AbsoluteValue='Auto', 'AbsEnd', $ClearSpeak_AbsoluteValue)"
- ClearSpeak_Roots: "IfThenElse($Verbosity='Verbose' and $ClearSpeak_Roots='Auto', 'RootEnd', $ClearSpeak_Roots)"
- ClearSpeak_Matrix: "IfThenElse($Verbosity='Verbose' and $ClearSpeak_Matrix='Auto', 'EndMatrix', $ClearSpeak_Matrix)"
- MatchingPause: false()
- IsColumnSilent: false()
replace:
- test:
if: "$MathRate = 100"
then: [x: "*"]
else:
- rate:
value: "$MathRate"
replace: [x: "*"]
- name: empty-mrow
tag: mrow
match: "not(*)"
replace:
- T: ""
- name: default
tag: mrow
match: "."
replace:
- insert:
nodes: "*"
replace: [pause: auto]
- name: default
tag: mn
match: "."
replace:
- bookmark: "@id"
- x: "translate(., $BlockSeparators, '')"
- name: default
tag: [mo, mtext]
match: "."
replace:
- bookmark: "@id"
- x: "text()"
- name: default
tag: mi
match: "."
replace:
- bookmark: "@id"
- test:
- if: "string-length(.) = 1 and text() != '_'" then: [x: "text()"]
- else_if: "@data-chem-element" then: [spell: "text()", pause: "short"]
else: [x: "translate(., '-_\u00A0', ' ')"]
- name: default
tag: ms
match: "."
replace:
- T: "die Zeichenfolge" - pause: short
- x: "text()"
- name: default
tag: mstyle
match: "."
replace: [x: "*"]
- name: literal-simple
tag: mfrac
match:
- "(IsNode(*[1],'leaf') and IsNode(*[2],'leaf')) and"
- "not(ancestor::*[name() != 'mrow'][1]/self::m:fraction)" replace:
- x: "*[1]"
- T: "durch" - x: "*[2]"
- pause: short
- name: literal-default
tag: mfrac
match: "."
replace:
- T: "beginn" - pause: short
- x: "*[1]"
- test:
if: "not(IsNode(*[1],'leaf'))"
then: [pause: short]
- T: "durch" - test:
if: "not(IsNode(*[2],'leaf'))"
then: [pause: short]
- x: "*[2]"
- pause: short
- test:
if: "$Impairment = 'Blindness'"
then: [T: "ende des bruchs"] - pause: medium
- name: literal-default
tag: msqrt
match: "."
replace:
- test:
if: "$Verbosity!='Terse'"
then: [T: "die"] - T: "wurzel"
- test:
if: "$Verbosity!='Terse'"
then: [T: "aus"] - x: "*[1]"
- pause: short
- test:
if: "not(IsNode(*[1],'leaf')) or $Impairment = 'Blindness'"
then: [T: "ende der wurzel"]
- name: literal-default
tag: mroot
match: "."
replace:
- test:
if: "$Verbosity!='Terse'"
then: [T: "die"] - T: "wurzel mit index " - x: "*[1]"
- pause: short
- T: "von" - x: "*[2]"
- pause: short
- test:
if: "not(IsNode(*[2],'leaf'))"
then: [T: "ende der wurzel"]
- name: simple-sub
tag: indexed-by
match: "count(*)=2 and $Verbosity='Terse' and *[2][self::m:mn and translate(., '.,', '')=.]"
replace:
- x: "*[1]"
- x: "*[2]"
- pause: short
- name: no-end-sub
tag: indexed-by
match: "count(*)=2 and *[2][self::m:mrow and *[2][.='']]"
replace:
- x: "*[1]"
- T: "Index" - x: "*[2]"
- pause: short
- name: literal
tag: msub
match: "."
replace:
- x: "*[1]"
- test:
if: "not($Verbosity='Terse' and *[2][self::m:mn and not(translate(., '.,', '')!=.)])" then: [T: "index"] - x: "*[2]"
- name: literal
tag: [msup, msubsup]
match: "."
replace:
- x: "*[1]"
- test:
if: "name(.)='msubsup'"
then:
- T: "index" - x: "*[2]"
- test:
if: "*[last()][translate(., '′″‴⁗†‡°*', '')='']"
then: [x: "*[last()]"]
else_test:
if: "ancestor-or-self::*[contains(@data-intent-property, ':literal:')]" then:
- T: "hoch" - x: "*[last()]"
- test:
if: "not(IsNode(*[last()], 'simple')) or $Impairment = 'Blindness'"
then: [T: "ende der hochstellung"] else:
- test:
if: "$Verbosity='Verbose'"
then: [T: "hochstellung"]
else: [T: "hochstellung"]
- x: "*[last()]"
- test:
if: "$Verbosity='Verbose'"
then: [T: "ende der hochstellung"]
else: [T: "ende der hochstellung"]
- name: default
tag: munder
match: "."
replace:
- test:
if: "not(IsNode(*[1], 'leaf'))"
then: [T: "größe"] - x: "*[1]"
- T: "mit" - x: "*[2]"
- T: "darunter"
- name: diacriticals
tag: mover
match: "*[1][self::m:mi] and *[2][translate(., '\u0306\u030c.\u00A8\u02D9\u20DB\u20DC`^ˇ~→¯_', '')='']"
replace:
- x: "*[1]"
- x: "*[2]"
- name: default
tag: mover
match: "."
replace:
- test:
if: "not(IsNode(*[1], 'leaf'))"
then: [T: "größe"] - x: "*[1]"
- T: "mit" - x: "*[2]"
- T: "darüber"
- name: default
tag: munderover
match: "."
replace:
- test:
if: "not(IsNode(*[1], 'leaf'))"
then: [T: "größe"] - x: "*[1]"
- T: "mit" - x: "*[2]"
- T: "darunter und" - x: "*[3]"
- T: "darüber"
- name: default
tag: mmultiscripts
match: "."
variables:
- Prescripts: "m:mprescripts/following-sibling::*"
- NumChildren: "count(*)" - Postscripts: "*[position()>1 and position() < (last() + ($NumChildren mod 2) -count($Prescripts))]"
replace:
- x: "*[1]"
- test:
if: "$Prescripts" then:
- with:
variables:
- PreSubscript: "IfThenElse($Verbosity='Verbose', 'pre subscript', 'pre sub')"
- PreSuperscript: "IfThenElse($Verbosity='Verbose', 'pre superscript', 'pre super')"
replace:
- test: if: "count($Prescripts) > 2"
then:
- T: "durch" - x: "count($Prescripts) div 2"
- T: "präskripte" - pause: short
- test:
if: "not($Prescripts[1][self::m:none])"
then:
- x: "$PreSubscript"
- x: "$Prescripts[1]"
- test:
if: "not($Prescripts[1][self::m:none] or $Prescripts[2][self::m:none])"
then: [T: "und"] - test:
if: "not($Prescripts[2][self::m:none])"
then:
- x: "$PreSuperscript"
- x: "$Prescripts[2]"
- pause: short
- test:
if: "count($Prescripts) > 2" then:
- test:
if: "not($Prescripts[3][self::m:none])"
then:
- x: "$PreSubscript"
- x: "$Prescripts[3]"
- test:
if: "not($Prescripts[3][self::m:none] or $Prescripts[4][self::m:none])"
then: [T: "und"] - test:
if: "not($Prescripts[4][self::m:none])"
then:
- x: "$PreSuperscript"
- x: "$Prescripts[4]"
- test:
if: "count($Prescripts) > 4" then:
- T: "und abwechselnde präskripte" - x: "$Prescripts[position() > 4]"
- T: "ende der präskripte" - test:
if: "$Postscripts"
then:
- with:
variables:
- PostSubscript: "IfThenElse($Verbosity='Verbose', 'subscript', 'sub')"
- PostSuperscript: "IfThenElse($Verbosity='Verbose', 'superscript', 'super')"
replace:
- test: if: "count($Postscripts) > 2"
then:
- test:
if: "$Prescripts"
then: [T: "und"] - T: "durch" - x: "count($Postscripts) div 2"
- T: "postskripte" - pause: short
- test:
if: "not($Postscripts[1][self::m:none])"
then:
- x: "$PostSubscript"
- x: "$Postscripts[1]"
- test:
if: "not($Postscripts[1][self::m:none] or $Postscripts[2][self::m:none])"
then: [T: "und"] - test:
if: "not($Postscripts[2][self::m:none])"
then:
- x: "$PostSuperscript"
- x: "$Postscripts[2]"
- test:
if: "count($Postscripts) > 2"
then:
- test:
if: "not($Postscripts[3][self::m:none])"
then:
- x: "$PostSubscript"
- x: "$Postscripts[3]"
- test:
if: "not($Postscripts[3][self::m:none] or $Postscripts[4][self::m:none])"
then: [T: "und"] - test:
if: "not($Postscripts[4][self::m:none])"
then:
- x: "$PostSuperscript"
- x: "$Postscripts[4]"
- test:
if: "count($Postscripts) > 4"
then:
- test:
if: "not($Postscripts[5][self::m:none])"
then:
- x: "$PostSubscript"
- x: "$Postscripts[5]"
- test:
if: "not($Postscripts[5][self::m:none] or $Postscripts[6][self::m:none])"
then: [T: "und"] - test:
if: "not($Postscripts[6][self::m:none])"
then:
- x: "$PostSuperscript"
- x: "$Postscripts[6]"
- test:
if: "count($Postscripts) > 6"
then:
- test:
if: "not($Postscripts[7][self::m:none])"
then:
- x: "$PostSubscript"
- x: "$Postscripts[7]"
- test:
if: "not($Postscripts[7][self::m:none] or $Postscripts[8][self::m:none])"
then: [T: "und"] - test:
if: "not($Postscripts[8][self::m:none])"
then:
- x: "$PostSuperscript"
- x: "$Postscripts[8]"
- test:
if: "count($Postscripts) > 8" then:
- T: "und wechselnde skripte" - x: "$Postscripts[position() > 8]"
- T: "ende der skripte"
- name: default
tag: mtable
variables:
- IsColumnSilent: "false()"
- NumColumns: "count(*[1]/*) - IfThenElse(*/self::m:mlabeledtr, 1, 0)"
match: "."
replace:
- T: "tabelle mit" - x: count(*)
- test:
if: count(*)=1
then: [T: "zeile"] else: [T: "zeilen"] - T: "und" - x: "$NumColumns"
- test:
if: "NumColumns=1"
then: [T: "spalte"] else: [T: "spalten"] - pause: long
- x: "*"
- name: default
tag: [mtr, mlabeledtr]
match: "."
replace:
- pause: medium
- T: "zeile" - x: "count(preceding-sibling::*)+1"
- test:
if: "self::m:mlabeledtr"
then:
- T: "mit der bezeichnung" - x: "*[1]/*"
- pause: short
- pause: medium
- test:
if: "self::m:mlabeledtr"
then: [x: "*[position()>1]"]
else: {x: "*"}
- name: default
tag: mtd
match: "."
replace:
- test:
if: "not($IsColumnSilent)"
then:
- T: "spalte" - x: "count(preceding-sibling::*)+IfThenElse(parent::m:mlabeledtr, 0, 1)"
- pause: medium
- x: "*"
- test:
- if: count(following-sibling::*) > 0
then: [pause: short]
- else_if: count(../following-sibling::*) > 0
then: [pause: medium]
else: [pause: long]
- name: empty-box
tag: menclose
match: "@notation='box' and *[self::m:mtext and .=' ']"
replace:
- T: "leere box"
- name: default
tag: menclose
match: "."
replace:
- test:
if: ".[contains(concat(' ', normalize-space(@notation), ' '), ' box ')]"
then: [T: "box", pause: short] - test:
if: ".[contains(@notation,'roundedbox')]"
then: [T: "runde box", pause: short] - test:
if: ".[contains(@notation,'circle')]"
then: [T: "kreis", pause: short] - test:
if: ".[ contains(concat(' ', normalize-space(@notation), ' '), ' left ') or contains(concat(' ', normalize-space(@notation), ' '), ' right ') or contains(@notation,'top') or contains(@notation,'bottom') ]"
then:
- T: "linie" - test:
if: ".[contains(concat(' ', normalize-space(@notation), ' '), ' left ')]"
then: [T: "links", pause: short] - test:
if: ".[contains(concat(' ', normalize-space(@notation), ' '), ' right ')]"
then: [T: "rechts", pause: short] - test:
if: ".[contains(@notation,'top')]"
then: [T: "oben", pause: short] - test:
if: ".[contains(@notation,'bottom')]"
then: [T: "unten", pause: short] - test:
if: ".[ contains(@notation,'updiagonalstrike') or contains(@notation,'downdiagonalstrike') or contains(@notation,'verticalstrike') or contains(@notation,'horizontalstrike') ]"
then:
- test:
if: ".[contains(@notation,'updiagonalstrike') and contains(@notation,'downdiagonalstrike')]"
then: [spell: "'x'", pause: short] else:
- test:
if: ".[contains(@notation,'updiagonalstrike')]"
then: [T: "diagonal nach oben", pause: short] - test:
if: ".[contains(@notation,'downdiagonalstrike')]"
then: [T: "diagonal nach unten", pause: short] - test:
if: ".[contains(@notation,'verticalstrike')]"
then: [T: "vertikal", pause: short] - test:
if: ".[contains(@notation,'horizontalstrike')]"
then: [T: "horizontal", pause: short] - T: "durchstreichen" - pause: short
- test:
if: ".[contains(@notation,'uparrow')]"
then: [T: "pfeil nach oben", pause: short] - test:
if: ".[contains(concat(' ', normalize-space(@notation), ' '), ' downarrow ')]"
then: [T: "pfeil nach unten", pause: short] - test:
if: ".[contains(@notation,'leftarrow')]"
then: [T: "pfeil nach links", pause: short] - test:
if: ".[contains(concat(' ', normalize-space(@notation), ' '), ' rightarrow ')]"
then: [T: "pfeil nach rechts", pause: short] - test:
if: ".[contains(@notation,'northeastarrow')]"
then: [T: "pfeil nach nordost", pause: short] - test:
if: ".[contains(concat(' ', normalize-space(@notation), ' '), ' southeastarrow ')]"
then: [T: "pfeil nach südost", pause: short] - test:
if: ".[contains(concat(' ', normalize-space(@notation), ' '), ' southwestarrow ')]"
then: [T: "pfeil nach südwest", pause: short] - test:
if: ".[contains(@notation,'northwestarrow')]"
then: [T: "pfeil nach nordwest", pause: short] - test:
if: ".[contains(@notation,'updownarrow')]"
then: [T: "doppelpfeil nach oben und unten", pause: short] - test:
if: ".[contains(@notation,'leftrightarrow')]"
then: [T: "doppelpfeil nach links und rechts", pause: short] - test:
if: ".[contains(@notation,'northeastsouthwestarrow')]"
then: [T: "doppelpfeil diagonal nach oben", pause: short] - test:
if: ".[contains(@notation,'northwestsoutheastarrow')]"
then: [T: "doppelpfeil diagonal nach unten", pause: short] - test:
if: ".[contains(@notation,'actuarial')]"
then: [T: "versicherungsmathematische symbol", pause: short] - test:
if: ".[contains(@notation,'madrub')]"
then: [T: "arabisches faktor-symbol", pause: short] - test:
if: ".[contains(@notation,'phasorangle')]"
then: [T: "phasenwinkel", pause: short] - test:
if: ".[contains(@notation,'longdiv') or not(@notation) or normalize-space(@notation) ='']" then: [T: "symbol für schriftliche division", pause: short] - test:
if: ".[contains(@notation,'radical')]"
then: [T: "quadratwurzel", pause: short] - T: "einschließen" - test:
if: "*[self::m:mtext and .=' ']"
then: [T: "leerzeichen"] else: [x: "*"]
- test:
if: "$Impairment = 'Blindness' and ( $SpeechStyle != 'SimpleSpeak' or not(IsNode(*[1], 'leaf')) )"
then: [T: "ende der einschliessung"] - pause: short
- name: semantics
tag: "semantics"
match: "*[@encoding='MathML-Presentation']"
replace:
- x: "*[@encoding='MathML-Presentation']/*[1]"
- name: semantics-default
tag: "semantics"
match: .
replace:
- x: "*[1]"
- name: apply-function
tag: "apply-function"
match: .
replace:
- x: "*[1]"
- T: "von"
- pause: auto
- x: "*[position() > 1]"
- name: silent-intent
tag: "*"
match: "count(*)>0 and contains(@data-intent-property, ':silent:')"
replace:
- x: "*"
- test:
if: "IsNode(., '2D')"
then: [pause: short]
else: [pause: auto]
- name: prefix-intent
tag: "*"
match: "count(*)>0 and contains(@data-intent-property, ':prefix:')"
replace:
- x: "SpeakIntentName(name(.), $Verbosity, 'prefix')"
- x: "*"
- test:
if: "not( IsBracketed(., '', '') or IsNode(*[last()], 'simple') )"
then: [x: "GetBracketingIntentName(name(.), $Verbosity, 'prefix', 'end')"]
- test:
if: "IsNode(., '2D')"
then: [pause: short]
else: [pause: auto]
- name: postfix-intent
tag: "*"
match: "count(*)>0 and contains(@data-intent-property, ':postfix:')"
replace:
- test:
if: "$Impairment = 'Blindness' and not( IsBracketed(., '', '') or IsNode(*[1], 'simple') )"
then: [x: "GetBracketingIntentName(name(.), $Verbosity, 'postfix', 'start')"]
- x: "*"
- x: "SpeakIntentName(name(.), $Verbosity, 'postfix')"
- name: infix-intent
tag: "*"
match: "count(*)>0 and contains(@data-intent-property, ':infix:')"
replace:
- test:
if: "$Impairment = 'Blindness' and not( IsBracketed(., '', '') or IsNode(*[1], 'simple') )"
then: [x: "GetBracketingIntentName(name(.), $Verbosity, 'infix', 'start')"]
- test:
if: "count(*) = 1" then:
- x: "SpeakIntentName(name(.), $Verbosity, 'infix')"
- pause: auto
- x: "*[1]"
else:
- insert:
nodes: "*"
replace: [x: "SpeakIntentName(name(.), $Verbosity, 'infix')", pause: auto]
- test:
if: "$Impairment = 'Blindness' and not( IsBracketed(., '', '') or IsNode(*[last()], 'simple') )"
then: [x: "GetBracketingIntentName(name(.), $Verbosity, 'infix', 'end')"]
- test:
if: "IsNode(., '2D')" then: [pause: short]
else: [pause: auto]
- name: function-intent
tag: "*"
match: "count(*)>0"
replace:
- x: "SpeakIntentName(name(.), $Verbosity, 'function')"
- test:
if: "$Verbosity != 'Terse' and not(contains(@data-intent-property, ':literal:')) and
not(count(*)=2 and (IsInDefinition(*[1], 'TrigFunctionNames') or IsInDefinition(name(.), 'TerseFunctionNames')) and IsNode(*[2], 'simple'))"
then: [T: "von", pause: auto] - insert:
nodes: "*"
replace:
- test:
if: "not(contains(@data-intent-property, ':literal:'))"
then: [x: "','"]
- pause: auto
- test:
if: "$Impairment = 'Blindness' and not(*[last()][IsBracketed(., '', '') or IsNode(., 'simple')] )"
then: [x: "GetBracketingIntentName(name(.), $Verbosity, 'function', 'end')"]
- test:
if: "IsNode(., '2D')"
then: [pause: short]
else: [pause: auto]
- name: default-text
tag: "*"
match: "."
replace:
- x: "translate(name(), '-_', ' ')"