From 102ebbabee1bcdff2145077aff7b47428de85151 Mon Sep 17 00:00:00 2001 From: mgros Date: Wed, 23 Sep 2026 00:36:24 +0200 Subject: [PATCH] Set CRLF line endings for .rs and .yaml files --- .editorconfig | 7 + .gitattributes | 2 + Rules/Languages/de/unicode.yaml | 930 ++++++++++++++++---------------- 3 files changed, 474 insertions(+), 465 deletions(-) create mode 100644 .editorconfig create mode 100644 .gitattributes diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 000000000..f8b039633 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,7 @@ +root = true + +[*.rs] +end_of_line = crlf + +[*.yaml] +end_of_line = crlf diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 000000000..40c212418 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,2 @@ +*.rs text eol=crlf +*.yaml text eol=crlf diff --git a/Rules/Languages/de/unicode.yaml b/Rules/Languages/de/unicode.yaml index f8b0ec641..2a093e90b 100644 --- a/Rules/Languages/de/unicode.yaml +++ b/Rules/Languages/de/unicode.yaml @@ -1,476 +1,476 @@ ---- - # Note to translators: - # most languages don't have two ways to pronounce 'a' -- if not need, remove the rules and change "B-Z" to "A-Z" - # some languages say the word for "uppercase" after the letter. Make sure to change that where appropriate by moving some code around - - "a-z": - - test: - if: "$TTS='none'" - then: [ T: "." ] # (en: '.', google translation) - else: [ spell: "'.'" ] - -# Capital letters are a little tricky: users can pick their favorite word (something that was requested) and - # screen readers have options to use pitch changes or beeps instead of or in addition to say "cap" - # Also, if a user can see the screen, they probably don't need to hear "cap", but if they specified an override, they must want to hear the override. - - - "A-Z": - - test: - if: "$CapitalLetters_Beep" - then: - - audio: - value: "beep.mp4" - replace: [] - - test: - if: "$CapitalLetters_UseWord" - then_test: - if: "$SpeechOverrides_CapitalLetters = ''" - then_test: - if: "$Impairment = 'Blindness'" - then: [T: "groß"] # (en: 'cap', google translation) - else: [x: "$SpeechOverrides_CapitalLetters"] - - pitch: - value: "$CapitalLetters_Pitch" - # note: processing of ranges converts '.' into the character, so it needs to be in quotes below - replace: [spell: "translate('.', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz')"] - - - "0-9": [T: "."] # (en: '.', google: 'A') - - - "!": # 0x21 - - test: - if: "ancestor-or-self::*[contains(@data-intent-property, ':structure:')]" - then_test: - if: "$Verbosity = ' '" - then: [T: "knall"] # 0x21 (en: 'bang', google translation) - else: [T: "ausrufezeichen"] # 0x21 (en: 'exclamation point') - else: [T: "fakultät"] # 0x21 (en: 'factorial') - - - "\"": [T: "anführungszeichen"] # 0x22 (en: 'quotation mark') - - "#": [T: "nummernzeichen"] # 0x23 (en: 'number') - - "$": [T: "dollar"] # 0x24 (en: 'dollars') - - "%": [T: "prozent"] # 0x25 (en: 'percent') - - "&": [T: "kaufmännisches und"] # 0x26 (en: 'ampersand') - - "'": [T: "hochkomma"] # 0x27 (en: 'apostrophe', MathPlayer: 'Hochkomma', google: 'apostroph') - - "(": # 0x28 - - test: - if: $SpeechStyle = 'ClearSpeak' or $SpeechStyle = 'SimpleSpeak' - then_test: - if: "$Verbosity='Terse'" - then: [T: "klammer auf"] # 0x28 (en: 'open', google translation) #unklar - else: [T: "klammer auf"] # 0x28 (en: 'open paren') - else: [T: "klammer auf"] # 0x28 (en: 'left paren') - - ")": # 0x29 - - test: - if: $SpeechStyle = 'ClearSpeak' or $SpeechStyle = 'SimpleSpeak' - then_test: - if: "$Verbosity='Terse'" - then: [T: "klammer zu"] # 0x29 (en: 'close', google translation) #unklar - else: [T: "klammer zu"] # 0x29 (en: 'close paren') - else: [T: "klammer zu"] # 0x29 (en: 'right paren') - - - "*": # 0x2a - test: - if: "parent::*[name(.)='msup' or name(.)='msubsup' or name(.)='skip-super']" - then: [T: "stern"] # 0x2a (en: 'star', google translation) - else: [T: "mal"] # 0x2a - - "+": [T: "plus"] # 0x2b - - ",": # 0x2c - # the following deals with the interaction of "," with "…" which sometimes wants the ',' to be silent - # that this test is here and not with "…" is not ideal, but seems simplest - test: - if: - - "$SpeechStyle != 'ClearSpeak' or $ClearSpeak_Ellipses = 'Auto' or " - # must be ClearSpeak and $ClearSpeak_Ellipses = 'AndSoOn' - # speak "comma" when not adjacent to '…' - - "( following-sibling::*[1][text()!= '…'] and preceding-sibling::*[1][text()!='…'] ) or " - # except if expression starts with '…' - - "../*[1][text()='…'] " - then: [T: "komma"] # (en: 'comma', google translation) - # else silent - - - "-": [T: "minus"] # 0x2d - - ".": # 0x2e - - test: - if: "parent::*[1][self::m:mn]" - then: [T: "punkt"] # (en: 'point', google translation) - else: [T: "punkt"] # (en: 'dot', google: 'punkt') - - "/": [T: "schrägstrich"] # 0x2f (en: 'divided by') - - ":": [T: "doppelpunkt"] # 0x3a (en: 'colon') - - ";": [T: "strichpunkt"] # 0x3b (en: 'semicolon') - - "<": # 0x3c - - test: - if: "$Verbosity!='Terse'" - then: [T: "ist"] # (en: 'is', google translation) - - T: "kleiner als" # (en: 'less than') - - "=": # 0x3d - - test: - if: "$Verbosity!='Terse'" - then: [T: "ist gleich"] # (en: 'is equal to', google translation) - else: [T: "ist gleich"] # (en: 'equals') - - - ">": # 0x3e - - test: - if: "$Verbosity!='Terse'" - then: [T: "ist"] # (en: 'is', google translation) - - T: "größer als" # (en: 'greater than') - - "?": [T: "fragezeichen"] # 0x3f (en: 'question mark', MathPlayer: 'Frgezeichen', google: 'fragezeichen') - - "@": [T: "ät-zeichen"] # 0x40 (en: 'at sign') - - "[": # 0x5b - - test: - if: $SpeechStyle = 'ClearSpeak' or $SpeechStyle = 'SimpleSpeak' - then: [T: "offene eckige klammer"] # (en: 'open bracket', google translation) #unklar - else: [T: "eckige klammer auf"] # (en: 'left bracket', MathPlayer: 'eckig Klammer auf', google: 'linke klammer') - - "\\": [T: "eckige klammer auf"] # 0x5c (en: 'back slash', MathPlayer: 'eckig Klammer auf', google: 'rückenstrich') - - "]": # 0x5d - - test: - if: $SpeechStyle = 'ClearSpeak' or $SpeechStyle = 'SimpleSpeak' - then: [T: "schließende eckige klammer"] # (en: 'close bracket', google translation) #unklar - else: [T: "eckige klammer zu"] # (en: 'right bracket') - - "^": [T: "zirkumflex"] # 0x5e (en: 'hat') - - "_": [T: "unterstrich"] # 0x5f (en: 'under bar', MathPlayer: 'under bar', google: 'unter bar') - - "`": [T: "gravis akzent"] # 0x60 (en: 'grave', MathPlayer: 'grave accent', google: 'grab') - - "{": # 0x7b - - test: - if: $SpeechStyle = 'ClearSpeak' or $SpeechStyle = 'SimpleSpeak' - then: [T: "offene geschweifte klammer"] # (en: 'open brace', google translation) - else: [T: "geschweifte klammer auf"] # (en: 'left brace') - - "|": # 0x7c - # note: for ClearSpeak and SimpleSpeak, "|" inside of sets is handled at the mrow level, same for 'sets' - - test: - - if: "$SpeechStyle != 'ClearSpeak' or not(preceding-sibling::*) or not(following-sibling::*)" - then: [T: "senkrechter strich"] # (en: 'vertical line', google translation) - - else_if: "$ClearSpeak_VerticalLine = 'SuchThat'" - then: [T: "so dass"] # (en: 'such that', google translation) - - else_if: "$ClearSpeak_VerticalLine = 'Given'" - then: [T: "gegeben"] # (en: 'given', google translation) - - else: [T: "teilt"] # (en: 'divides') - - - "}": # 0x7d - - test: - if: $SpeechStyle = 'ClearSpeak' or $SpeechStyle = 'SimpleSpeak' - then: [T: "schließende geschweifte klammer"] # (en: 'close brace', google translation) - else: [T: "geschweifte klammer zu"] # (en: 'right brace') - - - "~": [T: "tilde"] # 0x7e - - " ": # 0xa0 - - test: - if: "@data-empty-in-2D and ../../../../*[name(.)!='equations']" - then: [T: "leer"] # want to say something for fraction (etc) with empty child (en: 'empty', google translation) - else: [T: ""] - - - "¬": [T: "nicht"] # 0xac (en: 'not') - - "°": [T: "grad"] # 0xb0 (en: 'degrees') - - "±": [T: "plus minus"] # 0xb1 (en: 'plus or minus') - - "´": [T: "akut akzent"] # 0xb4 (en: 'acute', MathPlayer: 'acute accent', google: 'akut') - - "·": # 0xB7 - - test: - if: "$SpeechStyle != 'ClearSpeak' or $ClearSpeak_MultSymbolDot = 'Auto'" - then: [T: "mal"] # (en: 'times', google translation) - else: [T: "mal"] # (en: 'dot', MathPlayer: 'Punkt mittig', google: 'punkt') - - "×": # 0xd7 - - test: - if: "$SpeechStyle != 'ClearSpeak' or $ClearSpeak_MultSymbolX = 'Auto'" - then: [T: "mal"] # (en: 'times', google translation) - else_test: - if: $ClearSpeak_MultSymbolX = 'By' - then: [T: "von"] # (en: 'by', google translation) - else: [T: "mal"] # (en: 'cross', MathPlayer: 'times', google: 'kreuzen') #unklar - - "÷": [T: "geteilt durch"] # 0xf7 (en: 'divided by', MathPlayer: 'divides') - - "̀": [T: "accent grave"] # 0x300 (en: 'grave accent embellishment', google: 'grabakzentverzierung') - - "́": [T: "accent aigu"] # 0x301 (en: 'acute accent embellishment', google: 'akute akzentverzierung') - - "̂": [T: "zirkumflex"] # 0x302 (en: 'circumflex accent embellishment', google: 'zirma akzentverzierung') - - "̃": [T: "tilde"] # 0x303 (google: 'tilde verzierung') - - "̄": [T: "makron"] # 0x304 (en: 'macron embellishment', google: 'makron -verzierung') - - "̅": [T: "überstrich"] # 0x305 (google: 'überbärerverzierung') - - "̆": [T: "brevis"] # 0x306 (en: 'breve', google: 'breve') - - "̇": [T: "punkt darüber"] # 0x307 (google: 'punkt über verzierung') - - # Note: ClearSpeak has pref TriangleSymbol for "Δ", but that is wrong - - "Α-Ω": - - test: - if: "$CapitalLetters_Beep" - then: - - audio: - value: "beep.mp4" - replace: [] - - test: - if: "$CapitalLetters_UseWord" - then_test: - if: "$SpeechOverrides_CapitalLetters = ''" - then_test: - if: "$Impairment = 'Blindness'" - then: [T: "großbuchstabe"] # (en: 'cap', google translation) #großbuchstaben? - else: [x: "$SpeechOverrides_CapitalLetters"] - - pitch: - value: "$CapitalLetters_Pitch" - # note: processing of ranges converts '.' into the character, so it needs to be in quotes below - replace: [spell: "translate('.', 'ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡ΢ΣΤΥΦΧΨΩ', 'αβγδεζηθικλμνξοπρςστυφχψω')"] - - - "α": [T: "alpha"] # 0x3b1 - - "β": [T: "beta"] # 0x3b2 - - "γ": [T: "gamma"] # 0x3b3 - - "δ": [T: "delta"] # 0x3b4 - - "ε": [T: "epsilon"] # 0x3b5 - - "ζ": [T: "zeta"] # 0x3b6 - - "η": [T: "eta"] # 0x3b7 - - "θ": [T: "theta"] # 0x3b8 - - "ι": [T: "iota"] # 0x3b9 (google: 'jota') - - "κ": [T: "kappa"] # 0x3ba - - "λ": [T: "lambda"] # 0x3bb (en: 'lambda', google: 'lambda') - - "μ": [T: "mü"] # 0x3bc - - "ν": [T: "nü"] # 0x3bd - - "ξ": [T: "xi"] # 0x3be (en: 'zai', google: 'zai') - - "ο": [T: "omicron"] # 0x3bf - - "π": [T: "pi"] # 0x3c0 - - "ρ": [T: "rho"] # 0x3c1 - - "ς": [T: "sigma am wortende"] # 0x3c2 - - "σ": [T: "sigma"] # 0x3c3 - - "τ": [T: "tau"] # 0x3c4 - - "υ": [T: "üpsilon"] # 0x3c5 #ypsilon - - "φ": [T: "phi"] # 0x3c6 - - "χ": [T: "chi"] # 0x3c7 - - "ψ": [T: "psi"] # 0x3c8 - - "ω": [T: "omega"] # 0x3c9 - - "ϕ": [T: "phi"] # 0x3d5 (en: 'phi', google: 'phi') - - "ϖ": [T: "pi"] # 0x3d6 (en: 'pi', google: 'pi') - - "ϵ": [T: "epsilon"] # 0x3f5 - - "϶": [T: "umgekehrtes epsilon"] # 0x3f6 (en: 'reversed epsilon', MathPlayer: 'reversed epsilon', google: 'umgekehrter epsilon') - - - "⁡": # 0x2061 - - test: - if: "$Verbosity!='Terse' and not(preceding-sibling::*[1][IsInDefinition(., 'GeometryShapes')]) and - not(@data-changed='added' and ancestor-or-self::*[contains(@data-intent-property, ':structure:')])" - then: [T: "von"] # (en: 'of', google translation) - - "⁢": [T: ""] # 0x2062 - - "⁣": [T: ""] # 0x2063 - - "⁤": [T: "und"] # 0x2064 (en: 'and', google: 'und') - - "ℂℕℚℝℤ": # here we rely on this running through the table again to speak "cap xxx" - - T: "drei Strich" # (en: 'double-struck', MathPlayer: 'drei-strich', google: 'doppelter takt') - - spell: "translate('.', 'ℂℕℚℝℤ', 'CNQRZ')" - - - "℃": [T: "grad celsius"] # 0x2103 (google: 'grad celsius') - - "ℋℛℓ": # 0x210b #klären - - T: "schreibschrift" # (en: 'script', google: 'skript') - - spell: "translate('.', 'ℋℛℓ', 'HRl')" - - "ℜ": # 0x211c - - T: "frakturschrift groß r" # (en: 'fraktur', google: 'fraktur') - - spell: "'R'" - - - "ⅆⅇⅈⅉ": # 0x2146-9 - - T: "doppelstrich kursiv" # (en: 'double-struck italic', MathPlayer: 'angstroms', google: 'doppelt übertroffene kursivschrift') - - spell: "translate('.', 'ⅆⅇⅈⅉ', 'deij')" - - - "∥": # 0x2225 - - test: - if: "$Verbosity!='Terse'" - then: [T: "ist"] # (en: 'is', google translation) - - T: "parallel zu" # (en: 'parallel to') - - "∦": # 0x2226 - - test: - if: "$Verbosity!='Terse'" - then: [T: "ist"] # (en: 'is', google translation) - - T: "nicht parallel zu" # (en: 'not parallel to') - - "≤": # 0x2264 - - test: - if: "$Verbosity!='Terse'" - then: [T: "ist"] # (en: 'is', google translation) - - T: "kleiner gleich" - - "≥": # 0x2265 - - test: - if: "$Verbosity!='Terse'" - then: [T: "ist"] # (en: 'is', google translation) - - T: "größer gleich" # (en: 'greater than or equal to') - - # --- restored complex short definitions (prefer over unicode-full) --- - - "…": # 0x2026 - test: - if: - - "$SpeechStyle != 'ClearSpeak' or $ClearSpeak_Ellipses = 'Auto' or" - # must be ClearSpeak and $ClearSpeak_Ellipses = 'AndSoOn' - # speak '…' as 'and so on...' unless expr starts with '…' - - "../*[1][text()='…']" - then: [T: "punkt punkt punkt"] # (en: 'dot dot dot', google translation) - else_test: # must have $ClearSpeak_Ellipses = 'AndSoOn' - if: "count(following-sibling::*) = 0" - then: [T: "und so weiter"] # (en: 'and so on', google translation) - else: [T: "punkt punkt punkt"] # (en: 'and so on up to', MathPlayer: 'dot dot dot', google: 'und so weiter bis') #horizontale Ellipsis - - "→": # 0x2192 - - test: - if: "ancestor::*[2][self::m:limit]" - then: [T: "gegen"] # (en: 'approaches', google translation) - else: [T: "pfeil nach rechts"] # (en: 'right arrow', MathPlayer: 'rightwards arrow', google: 'rechter pfeil') - - "∂": # 0x2202 - - test: - if: "$Verbosity='Terse'" - then: [T: "teilweise"] # (en: 'partial', google translation) - else: [T: "partielle ableitung"] # (en: 'partial derivative', google: 'partielle ableitung') - - "∆": # 0x2206 - - test: - if: "$Verbosity!='Terse'" - then: [T: ""] # (en: 'the', google translation) - - T: "delta" # (en: 'laplacian of', MathPlayer: 'increment', google: 'laplace von') #unklar, sehr kontextabhängig - - "∇": # 0x2207 - - test: - if: "$Verbosity!='Terse'" - then: [T: "der"] # (en: 'the', google translation) - - T: "nabla-operator" # (en: 'gradient of', google: 'gradient von') #gradient nur einer der drei möglichen differentialoperatoren - - "∈": # 0x2208 - - test: - if: "$SpeechStyle != 'ClearSpeak'" - then: [T: "ein element von"] # (en: 'an element of', google translation) - # Several options for speaking elements in ClearSpeak -- they split between being inside a set or not and then the option - else_test: - if: "../../self::m:set or ../../../self::m:set" # inside a set - then_test: +--- + # Note to translators: + # most languages don't have two ways to pronounce 'a' -- if not need, remove the rules and change "B-Z" to "A-Z" + # some languages say the word for "uppercase" after the letter. Make sure to change that where appropriate by moving some code around + - "a-z": + - test: + if: "$TTS='none'" + then: [ T: "." ] # (en: '.', google translation) + else: [ spell: "'.'" ] + +# Capital letters are a little tricky: users can pick their favorite word (something that was requested) and + # screen readers have options to use pitch changes or beeps instead of or in addition to say "cap" + # Also, if a user can see the screen, they probably don't need to hear "cap", but if they specified an override, they must want to hear the override. + + - "A-Z": + - test: + if: "$CapitalLetters_Beep" + then: + - audio: + value: "beep.mp4" + replace: [] + - test: + if: "$CapitalLetters_UseWord" + then_test: + if: "$SpeechOverrides_CapitalLetters = ''" + then_test: + if: "$Impairment = 'Blindness'" + then: [T: "groß"] # (en: 'cap', google translation) + else: [x: "$SpeechOverrides_CapitalLetters"] + - pitch: + value: "$CapitalLetters_Pitch" + # note: processing of ranges converts '.' into the character, so it needs to be in quotes below + replace: [spell: "translate('.', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz')"] + + - "0-9": [T: "."] # (en: '.', google: 'A') + + - "!": # 0x21 + - test: + if: "ancestor-or-self::*[contains(@data-intent-property, ':structure:')]" + then_test: + if: "$Verbosity = ' '" + then: [T: "knall"] # 0x21 (en: 'bang', google translation) + else: [T: "ausrufezeichen"] # 0x21 (en: 'exclamation point') + else: [T: "fakultät"] # 0x21 (en: 'factorial') + + - "\"": [T: "anführungszeichen"] # 0x22 (en: 'quotation mark') + - "#": [T: "nummernzeichen"] # 0x23 (en: 'number') + - "$": [T: "dollar"] # 0x24 (en: 'dollars') + - "%": [T: "prozent"] # 0x25 (en: 'percent') + - "&": [T: "kaufmännisches und"] # 0x26 (en: 'ampersand') + - "'": [T: "hochkomma"] # 0x27 (en: 'apostrophe', MathPlayer: 'Hochkomma', google: 'apostroph') + - "(": # 0x28 + - test: + if: $SpeechStyle = 'ClearSpeak' or $SpeechStyle = 'SimpleSpeak' + then_test: + if: "$Verbosity='Terse'" + then: [T: "klammer auf"] # 0x28 (en: 'open', google translation) #unklar + else: [T: "klammer auf"] # 0x28 (en: 'open paren') + else: [T: "klammer auf"] # 0x28 (en: 'left paren') + - ")": # 0x29 + - test: + if: $SpeechStyle = 'ClearSpeak' or $SpeechStyle = 'SimpleSpeak' + then_test: + if: "$Verbosity='Terse'" + then: [T: "klammer zu"] # 0x29 (en: 'close', google translation) #unklar + else: [T: "klammer zu"] # 0x29 (en: 'close paren') + else: [T: "klammer zu"] # 0x29 (en: 'right paren') + + - "*": # 0x2a + test: + if: "parent::*[name(.)='msup' or name(.)='msubsup' or name(.)='skip-super']" + then: [T: "stern"] # 0x2a (en: 'star', google translation) + else: [T: "mal"] # 0x2a + - "+": [T: "plus"] # 0x2b + - ",": # 0x2c + # the following deals with the interaction of "," with "…" which sometimes wants the ',' to be silent + # that this test is here and not with "…" is not ideal, but seems simplest + test: + if: + - "$SpeechStyle != 'ClearSpeak' or $ClearSpeak_Ellipses = 'Auto' or " + # must be ClearSpeak and $ClearSpeak_Ellipses = 'AndSoOn' + # speak "comma" when not adjacent to '…' + - "( following-sibling::*[1][text()!= '…'] and preceding-sibling::*[1][text()!='…'] ) or " + # except if expression starts with '…' + - "../*[1][text()='…'] " + then: [T: "komma"] # (en: 'comma', google translation) + # else silent + + - "-": [T: "minus"] # 0x2d + - ".": # 0x2e + - test: + if: "parent::*[1][self::m:mn]" + then: [T: "punkt"] # (en: 'point', google translation) + else: [T: "punkt"] # (en: 'dot', google: 'punkt') + - "/": [T: "schrägstrich"] # 0x2f (en: 'divided by') + - ":": [T: "doppelpunkt"] # 0x3a (en: 'colon') + - ";": [T: "strichpunkt"] # 0x3b (en: 'semicolon') + - "<": # 0x3c + - test: + if: "$Verbosity!='Terse'" + then: [T: "ist"] # (en: 'is', google translation) + - T: "kleiner als" # (en: 'less than') + - "=": # 0x3d + - test: + if: "$Verbosity!='Terse'" + then: [T: "ist gleich"] # (en: 'is equal to', google translation) + else: [T: "ist gleich"] # (en: 'equals') + + - ">": # 0x3e + - test: + if: "$Verbosity!='Terse'" + then: [T: "ist"] # (en: 'is', google translation) + - T: "größer als" # (en: 'greater than') + - "?": [T: "fragezeichen"] # 0x3f (en: 'question mark', MathPlayer: 'Frgezeichen', google: 'fragezeichen') + - "@": [T: "ät-zeichen"] # 0x40 (en: 'at sign') + - "[": # 0x5b + - test: + if: $SpeechStyle = 'ClearSpeak' or $SpeechStyle = 'SimpleSpeak' + then: [T: "offene eckige klammer"] # (en: 'open bracket', google translation) #unklar + else: [T: "eckige klammer auf"] # (en: 'left bracket', MathPlayer: 'eckig Klammer auf', google: 'linke klammer') + - "\\": [T: "eckige klammer auf"] # 0x5c (en: 'back slash', MathPlayer: 'eckig Klammer auf', google: 'rückenstrich') + - "]": # 0x5d + - test: + if: $SpeechStyle = 'ClearSpeak' or $SpeechStyle = 'SimpleSpeak' + then: [T: "schließende eckige klammer"] # (en: 'close bracket', google translation) #unklar + else: [T: "eckige klammer zu"] # (en: 'right bracket') + - "^": [T: "zirkumflex"] # 0x5e (en: 'hat') + - "_": [T: "unterstrich"] # 0x5f (en: 'under bar', MathPlayer: 'under bar', google: 'unter bar') + - "`": [T: "gravis akzent"] # 0x60 (en: 'grave', MathPlayer: 'grave accent', google: 'grab') + - "{": # 0x7b + - test: + if: $SpeechStyle = 'ClearSpeak' or $SpeechStyle = 'SimpleSpeak' + then: [T: "offene geschweifte klammer"] # (en: 'open brace', google translation) + else: [T: "geschweifte klammer auf"] # (en: 'left brace') + - "|": # 0x7c + # note: for ClearSpeak and SimpleSpeak, "|" inside of sets is handled at the mrow level, same for 'sets' + - test: + - if: "$SpeechStyle != 'ClearSpeak' or not(preceding-sibling::*) or not(following-sibling::*)" + then: [T: "senkrechter strich"] # (en: 'vertical line', google translation) + - else_if: "$ClearSpeak_VerticalLine = 'SuchThat'" + then: [T: "so dass"] # (en: 'such that', google translation) + - else_if: "$ClearSpeak_VerticalLine = 'Given'" + then: [T: "gegeben"] # (en: 'given', google translation) + - else: [T: "teilt"] # (en: 'divides') + + - "}": # 0x7d + - test: + if: $SpeechStyle = 'ClearSpeak' or $SpeechStyle = 'SimpleSpeak' + then: [T: "schließende geschweifte klammer"] # (en: 'close brace', google translation) + else: [T: "geschweifte klammer zu"] # (en: 'right brace') + + - "~": [T: "tilde"] # 0x7e + - " ": # 0xa0 + - test: + if: "@data-empty-in-2D and ../../../../*[name(.)!='equations']" + then: [T: "leer"] # want to say something for fraction (etc) with empty child (en: 'empty', google translation) + else: [T: ""] + + - "¬": [T: "nicht"] # 0xac (en: 'not') + - "°": [T: "grad"] # 0xb0 (en: 'degrees') + - "±": [T: "plus minus"] # 0xb1 (en: 'plus or minus') + - "´": [T: "akut akzent"] # 0xb4 (en: 'acute', MathPlayer: 'acute accent', google: 'akut') + - "·": # 0xB7 + - test: + if: "$SpeechStyle != 'ClearSpeak' or $ClearSpeak_MultSymbolDot = 'Auto'" + then: [T: "mal"] # (en: 'times', google translation) + else: [T: "mal"] # (en: 'dot', MathPlayer: 'Punkt mittig', google: 'punkt') + - "×": # 0xd7 + - test: + if: "$SpeechStyle != 'ClearSpeak' or $ClearSpeak_MultSymbolX = 'Auto'" + then: [T: "mal"] # (en: 'times', google translation) + else_test: + if: $ClearSpeak_MultSymbolX = 'By' + then: [T: "von"] # (en: 'by', google translation) + else: [T: "mal"] # (en: 'cross', MathPlayer: 'times', google: 'kreuzen') #unklar + - "÷": [T: "geteilt durch"] # 0xf7 (en: 'divided by', MathPlayer: 'divides') + - "̀": [T: "accent grave"] # 0x300 (en: 'grave accent embellishment', google: 'grabakzentverzierung') + - "́": [T: "accent aigu"] # 0x301 (en: 'acute accent embellishment', google: 'akute akzentverzierung') + - "̂": [T: "zirkumflex"] # 0x302 (en: 'circumflex accent embellishment', google: 'zirma akzentverzierung') + - "̃": [T: "tilde"] # 0x303 (google: 'tilde verzierung') + - "̄": [T: "makron"] # 0x304 (en: 'macron embellishment', google: 'makron -verzierung') + - "̅": [T: "überstrich"] # 0x305 (google: 'überbärerverzierung') + - "̆": [T: "brevis"] # 0x306 (en: 'breve', google: 'breve') + - "̇": [T: "punkt darüber"] # 0x307 (google: 'punkt über verzierung') + + # Note: ClearSpeak has pref TriangleSymbol for "Δ", but that is wrong + - "Α-Ω": + - test: + if: "$CapitalLetters_Beep" + then: + - audio: + value: "beep.mp4" + replace: [] + - test: + if: "$CapitalLetters_UseWord" + then_test: + if: "$SpeechOverrides_CapitalLetters = ''" + then_test: + if: "$Impairment = 'Blindness'" + then: [T: "großbuchstabe"] # (en: 'cap', google translation) #großbuchstaben? + else: [x: "$SpeechOverrides_CapitalLetters"] + - pitch: + value: "$CapitalLetters_Pitch" + # note: processing of ranges converts '.' into the character, so it needs to be in quotes below + replace: [spell: "translate('.', 'ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡ΢ΣΤΥΦΧΨΩ', 'αβγδεζηθικλμνξοπρςστυφχψω')"] + + - "α": [T: "alpha"] # 0x3b1 + - "β": [T: "beta"] # 0x3b2 + - "γ": [T: "gamma"] # 0x3b3 + - "δ": [T: "delta"] # 0x3b4 + - "ε": [T: "epsilon"] # 0x3b5 + - "ζ": [T: "zeta"] # 0x3b6 + - "η": [T: "eta"] # 0x3b7 + - "θ": [T: "theta"] # 0x3b8 + - "ι": [T: "iota"] # 0x3b9 (google: 'jota') + - "κ": [T: "kappa"] # 0x3ba + - "λ": [T: "lambda"] # 0x3bb (en: 'lambda', google: 'lambda') + - "μ": [T: "mü"] # 0x3bc + - "ν": [T: "nü"] # 0x3bd + - "ξ": [T: "xi"] # 0x3be (en: 'zai', google: 'zai') + - "ο": [T: "omicron"] # 0x3bf + - "π": [T: "pi"] # 0x3c0 + - "ρ": [T: "rho"] # 0x3c1 + - "ς": [T: "sigma am wortende"] # 0x3c2 + - "σ": [T: "sigma"] # 0x3c3 + - "τ": [T: "tau"] # 0x3c4 + - "υ": [T: "üpsilon"] # 0x3c5 #ypsilon + - "φ": [T: "phi"] # 0x3c6 + - "χ": [T: "chi"] # 0x3c7 + - "ψ": [T: "psi"] # 0x3c8 + - "ω": [T: "omega"] # 0x3c9 + - "ϕ": [T: "phi"] # 0x3d5 (en: 'phi', google: 'phi') + - "ϖ": [T: "pi"] # 0x3d6 (en: 'pi', google: 'pi') + - "ϵ": [T: "epsilon"] # 0x3f5 + - "϶": [T: "umgekehrtes epsilon"] # 0x3f6 (en: 'reversed epsilon', MathPlayer: 'reversed epsilon', google: 'umgekehrter epsilon') + + - "⁡": # 0x2061 + - test: + if: "$Verbosity!='Terse' and not(preceding-sibling::*[1][IsInDefinition(., 'GeometryShapes')]) and + not(@data-changed='added' and ancestor-or-self::*[contains(@data-intent-property, ':structure:')])" + then: [T: "von"] # (en: 'of', google translation) + - "⁢": [T: ""] # 0x2062 + - "⁣": [T: ""] # 0x2063 + - "⁤": [T: "und"] # 0x2064 (en: 'and', google: 'und') + - "ℂℕℚℝℤ": # here we rely on this running through the table again to speak "cap xxx" + - T: "drei Strich" # (en: 'double-struck', MathPlayer: 'drei-strich', google: 'doppelter takt') + - spell: "translate('.', 'ℂℕℚℝℤ', 'CNQRZ')" + + - "℃": [T: "grad celsius"] # 0x2103 (google: 'grad celsius') + - "ℋℛℓ": # 0x210b #klären + - T: "schreibschrift" # (en: 'script', google: 'skript') + - spell: "translate('.', 'ℋℛℓ', 'HRl')" + - "ℜ": # 0x211c + - T: "frakturschrift groß r" # (en: 'fraktur', google: 'fraktur') + - spell: "'R'" + + - "ⅆⅇⅈⅉ": # 0x2146-9 + - T: "doppelstrich kursiv" # (en: 'double-struck italic', MathPlayer: 'angstroms', google: 'doppelt übertroffene kursivschrift') + - spell: "translate('.', 'ⅆⅇⅈⅉ', 'deij')" + + - "∥": # 0x2225 + - test: + if: "$Verbosity!='Terse'" + then: [T: "ist"] # (en: 'is', google translation) + - T: "parallel zu" # (en: 'parallel to') + - "∦": # 0x2226 + - test: + if: "$Verbosity!='Terse'" + then: [T: "ist"] # (en: 'is', google translation) + - T: "nicht parallel zu" # (en: 'not parallel to') + - "≤": # 0x2264 + - test: + if: "$Verbosity!='Terse'" + then: [T: "ist"] # (en: 'is', google translation) + - T: "kleiner gleich" + - "≥": # 0x2265 + - test: + if: "$Verbosity!='Terse'" + then: [T: "ist"] # (en: 'is', google translation) + - T: "größer gleich" # (en: 'greater than or equal to') + + # --- restored complex short definitions (prefer over unicode-full) --- + - "…": # 0x2026 + test: + if: + - "$SpeechStyle != 'ClearSpeak' or $ClearSpeak_Ellipses = 'Auto' or" + # must be ClearSpeak and $ClearSpeak_Ellipses = 'AndSoOn' + # speak '…' as 'and so on...' unless expr starts with '…' + - "../*[1][text()='…']" + then: [T: "punkt punkt punkt"] # (en: 'dot dot dot', google translation) + else_test: # must have $ClearSpeak_Ellipses = 'AndSoOn' + if: "count(following-sibling::*) = 0" + then: [T: "und so weiter"] # (en: 'and so on', google translation) + else: [T: "punkt punkt punkt"] # (en: 'and so on up to', MathPlayer: 'dot dot dot', google: 'und so weiter bis') #horizontale Ellipsis + - "→": # 0x2192 + - test: + if: "ancestor::*[2][self::m:limit]" + then: [T: "gegen"] # (en: 'approaches', google translation) + else: [T: "pfeil nach rechts"] # (en: 'right arrow', MathPlayer: 'rightwards arrow', google: 'rechter pfeil') + - "∂": # 0x2202 + - test: + if: "$Verbosity='Terse'" + then: [T: "teilweise"] # (en: 'partial', google translation) + else: [T: "partielle ableitung"] # (en: 'partial derivative', google: 'partielle ableitung') + - "∆": # 0x2206 + - test: + if: "$Verbosity!='Terse'" + then: [T: ""] # (en: 'the', google translation) + - T: "delta" # (en: 'laplacian of', MathPlayer: 'increment', google: 'laplace von') #unklar, sehr kontextabhängig + - "∇": # 0x2207 + - test: + if: "$Verbosity!='Terse'" + then: [T: "der"] # (en: 'the', google translation) + - T: "nabla-operator" # (en: 'gradient of', google: 'gradient von') #gradient nur einer der drei möglichen differentialoperatoren + - "∈": # 0x2208 + - test: + if: "$SpeechStyle != 'ClearSpeak'" + then: [T: "ein element von"] # (en: 'an element of', google translation) + # Several options for speaking elements in ClearSpeak -- they split between being inside a set or not and then the option + else_test: + if: "../../self::m:set or ../../../self::m:set" # inside a set + then_test: - if: $ClearSpeak_SetMemberSymbol = 'Auto' or $ClearSpeak_SetMemberSymbol = 'In' then: [T: "in"] - else_if: $ClearSpeak_SetMemberSymbol = 'Member' - then: [T: "element von"] # (en: 'member of', google translation) - - else_if: $ClearSpeak_SetMemberSymbol = 'Element' - then: [T: "element von"] # (en: 'element of', google translation) - - else: [T: "element von"] # $ClearSpeak_SetMemberSymbol = 'Belongs' (en: 'belonging to') - else_test: - - if: $ClearSpeak_SetMemberSymbol = 'Auto' or $ClearSpeak_SetMemberSymbol = 'Member' - then: [T: "ist ein element von"] # (en: 'is a member of', google translation) - - else_if: $ClearSpeak_SetMemberSymbol = 'Element' - then: [T: "ist ein element von"] # (en: 'is an element of', google translation) - - else_if: $ClearSpeak_SetMemberSymbol = 'In' - then: [T: "ist in"] # (en: 'is in', google translation) - - else: [T: "element von"] # $ClearSpeak_SetMemberSymbol = 'Belongs' (en: 'belongs to') - - "∉": # 0x2209 - # rule is identical to 0x2208 - - test: - if: "$SpeechStyle != 'ClearSpeak'" - then: [T: "ist kein element von"] # (en: 'is not an element of', google translation) - # Several options for speaking elements in ClearSpeak -- they split between being inside a set or not and then the option - else_test: - if: "../../self::m:set or ../../../self::m:set" # inside a set - then_test: + then: [T: "element von"] # (en: 'member of', google translation) + - else_if: $ClearSpeak_SetMemberSymbol = 'Element' + then: [T: "element von"] # (en: 'element of', google translation) + - else: [T: "element von"] # $ClearSpeak_SetMemberSymbol = 'Belongs' (en: 'belonging to') + else_test: + - if: $ClearSpeak_SetMemberSymbol = 'Auto' or $ClearSpeak_SetMemberSymbol = 'Member' + then: [T: "ist ein element von"] # (en: 'is a member of', google translation) + - else_if: $ClearSpeak_SetMemberSymbol = 'Element' + then: [T: "ist ein element von"] # (en: 'is an element of', google translation) + - else_if: $ClearSpeak_SetMemberSymbol = 'In' + then: [T: "ist in"] # (en: 'is in', google translation) + - else: [T: "element von"] # $ClearSpeak_SetMemberSymbol = 'Belongs' (en: 'belongs to') + - "∉": # 0x2209 + # rule is identical to 0x2208 + - test: + if: "$SpeechStyle != 'ClearSpeak'" + then: [T: "ist kein element von"] # (en: 'is not an element of', google translation) + # Several options for speaking elements in ClearSpeak -- they split between being inside a set or not and then the option + else_test: + if: "../../self::m:set or ../../../self::m:set" # inside a set + then_test: - if: $ClearSpeak_SetMemberSymbol = 'Auto' or $ClearSpeak_SetMemberSymbol = 'In' then: [T: "nicht in"] - else_if: $ClearSpeak_SetMemberSymbol = 'Member' - then: [T: "nicht element von"] # (en: 'not member of', google translation) - - else_if: $ClearSpeak_SetMemberSymbol = 'Element' - then: [T: "nicht element von"] # (en: 'not element of', google translation) - - else: [T: "nicht element von"] # $ClearSpeak_SetMemberSymbol = 'Belongs' (en: 'not belonging to') - else_test: - - if: $ClearSpeak_SetMemberSymbol = 'Auto' or $ClearSpeak_SetMemberSymbol = 'Member' - then: [T: "ist kein element von"] # (en: 'is not a member of', google translation) - - else_if: $ClearSpeak_SetMemberSymbol = 'Element' - then: [T: "ist kein element von"] # (en: 'is not an element of', google translation) - - else_if: $ClearSpeak_SetMemberSymbol = 'In' - then: [T: "ist nicht in"] # (en: 'is not in', google translation) - - else: [T: "nicht element von"] # $ClearSpeak_SetMemberSymbol = 'Belongs' (en: 'does not belong to') - - "∊": # 0x220a - - test: - if: "$SpeechStyle != 'ClearSpeak'" - then: [T: "ist ein element von"] # (en: 'is an element of', google translation) - # Several options for speaking elements in ClearSpeak -- they split between being inside a set or not and then the option - else_test: - if: "../../self::m:set or ../../../self::m:set" # inside a set - then_test: + then: [T: "nicht element von"] # (en: 'not member of', google translation) + - else_if: $ClearSpeak_SetMemberSymbol = 'Element' + then: [T: "nicht element von"] # (en: 'not element of', google translation) + - else: [T: "nicht element von"] # $ClearSpeak_SetMemberSymbol = 'Belongs' (en: 'not belonging to') + else_test: + - if: $ClearSpeak_SetMemberSymbol = 'Auto' or $ClearSpeak_SetMemberSymbol = 'Member' + then: [T: "ist kein element von"] # (en: 'is not a member of', google translation) + - else_if: $ClearSpeak_SetMemberSymbol = 'Element' + then: [T: "ist kein element von"] # (en: 'is not an element of', google translation) + - else_if: $ClearSpeak_SetMemberSymbol = 'In' + then: [T: "ist nicht in"] # (en: 'is not in', google translation) + - else: [T: "nicht element von"] # $ClearSpeak_SetMemberSymbol = 'Belongs' (en: 'does not belong to') + - "∊": # 0x220a + - test: + if: "$SpeechStyle != 'ClearSpeak'" + then: [T: "ist ein element von"] # (en: 'is an element of', google translation) + # Several options for speaking elements in ClearSpeak -- they split between being inside a set or not and then the option + else_test: + if: "../../self::m:set or ../../../self::m:set" # inside a set + then_test: - if: $ClearSpeak_SetMemberSymbol = 'Auto' or $ClearSpeak_SetMemberSymbol = 'In' then: [T: "in"] - else_if: $ClearSpeak_SetMemberSymbol = 'Member' - then: [T: "element von"] # (en: 'member of', google translation) - - else_if: $ClearSpeak_SetMemberSymbol = 'Element' - then: [T: "element von"] # (en: 'element of', google translation) - - else: [T: "element von"] # $ClearSpeak_SetMemberSymbol = 'Belongs' (en: 'belonging to') - else_test: - - if: $ClearSpeak_SetMemberSymbol = 'Auto' or $ClearSpeak_SetMemberSymbol = 'Member' - then: [T: "ist ein element von"] # (en: 'is a member of', google translation) - - else_if: $ClearSpeak_SetMemberSymbol = 'Element' - then: [T: "ist ein element von"] # (en: 'is an element of', google translation) - - else_if: $ClearSpeak_SetMemberSymbol = 'In' - then: [T: "ist in"] # (en: 'is in', google translation) - - else: [T: "element von"] # $ClearSpeak_SetMemberSymbol = 'Belongs' (en: 'belongs to') - - "∝": # 0x221d - - test: - if: "$Verbosity!='Terse'" - then: [T: "ist"] # (en: 'is', google translation) - - T: "proportional zu" # (en: 'proportional to') - - "∶": # 0x2236 - - test: - if: "$Verbosity!='Terse'" - then: [T: "ist"] # (en: 'is', google translation) #unklar - - T: "zu" # (en: 'to') - - "∾": # 0x223e - - test: - if: "$Verbosity!='Terse'" - then: [T: "ist"] # (en: 'is', google translation) - - T: "umgekehrtes stummes s" # (en: 'most positive', MathPlayer: 'inverted lazy s', google: 'am positivsten') - - "≠": # 0x2260 - - test: - if: "$Verbosity!='Terse'" - then: [T: "ist"] # (en: 'is', google translation) - - T: "ungleich" # (en: 'not equal to') - - "≡": # 0x2261 - - test: - if: "$Verbosity!='Terse'" - then: [T: "ist"] # (en: 'is', google translation) - - T: "identisch mit" # (en: 'identical to', SRE: 'kongruent mit') - - "⊂": # 0x2282 - - test: - if: "$Verbosity!='Terse'" - then: [T: "ist eine"] # (en: 'is a', google translation) - - T: "teilmenge von" # (en: 'subset of', MathPlayer: 'Teilmenge von', google: 'untergruppe von') - - "⊃": # 0x2283 - - test: - if: "$Verbosity!='Terse'" - then: [T: "ist eine"] # (en: 'is a', google translation) - - T: "obermenge von" # (en: 'superset of', MathPlayer: 'Obermenge von', google: 'superset von') - - "⊄": # 0x2284 - - test: - if: "$Verbosity!='Terse'" - then: [T: "ist"] # (en: 'is', google translation) - - T: "keine teilmenge von" # (en: 'not a subset of', MathPlayer: 'nicht Teilmenge von', google: 'keine teilmenge von') - - "⊅": # 0x2285 - - test: - if: "$Verbosity!='Terse'" - then: [T: "ist"] # (en: 'is', google translation) - - T: "keine obermenge von" # (en: 'not a superset of', MathPlayer: 'nicht Obermenge von', google: 'kein superset von') - - "⊆": # 0x2286 - - test: - if: "$Verbosity!='Terse'" - then: [T: "ist eine"] # (en: 'is a', google translation) + then: [T: "element von"] # (en: 'member of', google translation) + - else_if: $ClearSpeak_SetMemberSymbol = 'Element' + then: [T: "element von"] # (en: 'element of', google translation) + - else: [T: "element von"] # $ClearSpeak_SetMemberSymbol = 'Belongs' (en: 'belonging to') + else_test: + - if: $ClearSpeak_SetMemberSymbol = 'Auto' or $ClearSpeak_SetMemberSymbol = 'Member' + then: [T: "ist ein element von"] # (en: 'is a member of', google translation) + - else_if: $ClearSpeak_SetMemberSymbol = 'Element' + then: [T: "ist ein element von"] # (en: 'is an element of', google translation) + - else_if: $ClearSpeak_SetMemberSymbol = 'In' + then: [T: "ist in"] # (en: 'is in', google translation) + - else: [T: "element von"] # $ClearSpeak_SetMemberSymbol = 'Belongs' (en: 'belongs to') + - "∝": # 0x221d + - test: + if: "$Verbosity!='Terse'" + then: [T: "ist"] # (en: 'is', google translation) + - T: "proportional zu" # (en: 'proportional to') + - "∶": # 0x2236 + - test: + if: "$Verbosity!='Terse'" + then: [T: "ist"] # (en: 'is', google translation) #unklar + - T: "zu" # (en: 'to') + - "∾": # 0x223e + - test: + if: "$Verbosity!='Terse'" + then: [T: "ist"] # (en: 'is', google translation) + - T: "umgekehrtes stummes s" # (en: 'most positive', MathPlayer: 'inverted lazy s', google: 'am positivsten') + - "≠": # 0x2260 + - test: + if: "$Verbosity!='Terse'" + then: [T: "ist"] # (en: 'is', google translation) + - T: "ungleich" # (en: 'not equal to') + - "≡": # 0x2261 + - test: + if: "$Verbosity!='Terse'" + then: [T: "ist"] # (en: 'is', google translation) + - T: "identisch mit" # (en: 'identical to', SRE: 'kongruent mit') + - "⊂": # 0x2282 + - test: + if: "$Verbosity!='Terse'" + then: [T: "ist eine"] # (en: 'is a', google translation) + - T: "teilmenge von" # (en: 'subset of', MathPlayer: 'Teilmenge von', google: 'untergruppe von') + - "⊃": # 0x2283 + - test: + if: "$Verbosity!='Terse'" + then: [T: "ist eine"] # (en: 'is a', google translation) + - T: "obermenge von" # (en: 'superset of', MathPlayer: 'Obermenge von', google: 'superset von') + - "⊄": # 0x2284 + - test: + if: "$Verbosity!='Terse'" + then: [T: "ist"] # (en: 'is', google translation) + - T: "keine teilmenge von" # (en: 'not a subset of', MathPlayer: 'nicht Teilmenge von', google: 'keine teilmenge von') + - "⊅": # 0x2285 + - test: + if: "$Verbosity!='Terse'" + then: [T: "ist"] # (en: 'is', google translation) + - T: "keine obermenge von" # (en: 'not a superset of', MathPlayer: 'nicht Obermenge von', google: 'kein superset von') + - "⊆": # 0x2286 + - test: + if: "$Verbosity!='Terse'" + then: [T: "ist eine"] # (en: 'is a', google translation) - T: "teilmenge von oder gleich" # (en: 'subset of or equal to', MathPlayer: 'Teilmenge von odre gleich', google: 'teilmenge von oder gleich') - - "⊇": # 0x2287 - - test: - if: "$Verbosity!='Terse'" - then: [T: "ist eine"] # (en: 'is a', google translation) + - "⊇": # 0x2287 + - test: + if: "$Verbosity!='Terse'" + then: [T: "ist eine"] # (en: 'is a', google translation) - T: "obermenge von oder gleich" # (en: 'superset of or equal to', MathPlayer: 'Obermenge von oder gleich', google: 'superset von oder gleich') - - # --- restored short definitions that differ from unicode-full --- - - "–": [T: "halbgeviertstrich"] # 0x2013 (SRE: 'En Dash') - - "—": [T: "geviertstrich"] # 0x2014 (SRE: 'EM Dash') - - "―": [T: "horizontale linie"] # 0x2015 (en: 'horizontal bar', MathPlayer: 'horizontal bar', google: 'horizontale linie') - - "‖": [T: "doppelte senkrechte linie"] # 0x2016 (en: 'double vertical line', MathPlayer: 'double vertical bar', google: 'doppelte vertikale linie') - - "′": [T: "strich"] # 0x2032 (en: 'prime', MathPlayer: 'strich', google: 'prime') - - "″": [T: "zwei strich"] # 0x2033 (en: 'double prime', MathPlayer: 'zwei-strich', google: 'double prime') - - "‴": [T: "drei strich"] # 0x2034 (en: 'triple prime', MathPlayer: 'drei-strich', google: 'triple prime') - - "℉": [T: "grad fahrenheit"] # 0x2109 (google: 'grad fahrenheit') - - "ℎ": [T: "planck-konstante"] # 0x210e (en: 'planck constant', MathPlayer: 'planck constant', google: 'planck konstant') - - "Ω": [T: "ohm"] # 0x2126 (en: 'ohms', MathPlayer: 'ohm sign', google: 'ohm') - - "K": [T: "kelvin"] # 0x212a (en: 'kelvin', MathPlayer: 'degrees kelvin', google: 'kelvin') - - "Å": [T: "angström"] # 0x212b (en: 'angstroms', MathPlayer: 'angstroms', google: 'angstrome') - - "←": [T: "pfeil nach links"] # 0x2190 (en: 'leftwards arrow', MathPlayer: 'leftwards arrow', google: 'pfeil nach links') - - "↑": [T: "pfeil nach oben"] # 0x2191 (en: 'upwards arrow', MathPlayer: 'upwards arrow', google: 'nach oben pfeil') - - "↓": [T: "pfeil nach unten"] # 0x2193 (en: 'downwards arrow', MathPlayer: 'downwards arrow', google: 'nach unten pfeil') - - "⇒": [T: "doppelpfeil nach rechts"] # 0x21d2 (en: 'rightwards double arrow', MathPlayer: 'rightwards double arrow', google: 'richtiger doppelpfeil') - - "∏": [T: "produkt"] # 0x220f (en: 'product', MathPlayer: 'Product', google: 'produkt') - - "∐": [T: "koprodukt"] # 0x2210 (en: 'co-product', MathPlayer: 'coproduct', google: 'ko-produkt') - - "∑": [T: "summe"] # 0x2211 (en: 'sum') - - "∗": [T: "mal"] # 0x2217 (en: 'times', MathPlayer: 'asterisk operator', google: 'mal') - - "√": # 0x221a - - T: "quadratwurzel" # (en: 'square root of', MathPlayer: 'radical', google: 'quadratwurzel von') - - "∟": [T: "rechter winkel"] # 0x221f (en: 'right angle') - - "∠": [T: "winkel"] # 0x2220 (en: 'angle') - - "∡": [T: "gerichteter winkel"] # 0x2221 (en: 'measured angle', MathPlayer: 'measured angle', google: 'gemessener winkel') - - "∩": [T: "schnitt mit"] # 0x2229 (en: 'intersection') #Problem: Schnittmenge wenn alleinstehend vor Bezeichnung, schnitt wenn zwischen 2 Mengen - - "∪": [T: "vereinigt mit"] # 0x222a (en: 'union') #Problem: vereinigungsmenge wenn alleinstehend vor Bezeichnung, vereinigt mit wenn zwischen 2 Mengen - - "∫": [T: "integral"] # 0x222b (en: 'integral') - - "∬": [T: "doppelintegral"] # 0x222c (en: 'double integral') - - "∭": [T: "dreifachintegral"] # 0x222d (en: 'triple integral', MathPlayer: 'Dreifaches Integral', google: 'dreifachintegral') - - "∮": [T: "randintegral"] # 0x222e (en: 'contour integral', MathPlayer: 'Kontur-Integral', google: 'konturintegral') - - "∷": [T: "proportional"] # 0x2237 (en: 'as') - - "∼": [T: "tilde"] # 0x223c (en: 'varies with', MathPlayer: 'tilde operator', google: 'variiert mit') - - "∽": [T: "umgekehrte tilde"] # 0x223d (en: 'reversed tilde', MathPlayer: 'reversed tilde', google: 'umgekehrte tilde') - - "∿": [T: "sinuswelle"] # 0x223f (en: 'sine wave', MathPlayer: 'sine wave', google: 'sinus') + + # --- restored short definitions that differ from unicode-full --- + - "–": [T: "halbgeviertstrich"] # 0x2013 (SRE: 'En Dash') + - "—": [T: "geviertstrich"] # 0x2014 (SRE: 'EM Dash') + - "―": [T: "horizontale linie"] # 0x2015 (en: 'horizontal bar', MathPlayer: 'horizontal bar', google: 'horizontale linie') + - "‖": [T: "doppelte senkrechte linie"] # 0x2016 (en: 'double vertical line', MathPlayer: 'double vertical bar', google: 'doppelte vertikale linie') + - "′": [T: "strich"] # 0x2032 (en: 'prime', MathPlayer: 'strich', google: 'prime') + - "″": [T: "zwei strich"] # 0x2033 (en: 'double prime', MathPlayer: 'zwei-strich', google: 'double prime') + - "‴": [T: "drei strich"] # 0x2034 (en: 'triple prime', MathPlayer: 'drei-strich', google: 'triple prime') + - "℉": [T: "grad fahrenheit"] # 0x2109 (google: 'grad fahrenheit') + - "ℎ": [T: "planck-konstante"] # 0x210e (en: 'planck constant', MathPlayer: 'planck constant', google: 'planck konstant') + - "Ω": [T: "ohm"] # 0x2126 (en: 'ohms', MathPlayer: 'ohm sign', google: 'ohm') + - "K": [T: "kelvin"] # 0x212a (en: 'kelvin', MathPlayer: 'degrees kelvin', google: 'kelvin') + - "Å": [T: "angström"] # 0x212b (en: 'angstroms', MathPlayer: 'angstroms', google: 'angstrome') + - "←": [T: "pfeil nach links"] # 0x2190 (en: 'leftwards arrow', MathPlayer: 'leftwards arrow', google: 'pfeil nach links') + - "↑": [T: "pfeil nach oben"] # 0x2191 (en: 'upwards arrow', MathPlayer: 'upwards arrow', google: 'nach oben pfeil') + - "↓": [T: "pfeil nach unten"] # 0x2193 (en: 'downwards arrow', MathPlayer: 'downwards arrow', google: 'nach unten pfeil') + - "⇒": [T: "doppelpfeil nach rechts"] # 0x21d2 (en: 'rightwards double arrow', MathPlayer: 'rightwards double arrow', google: 'richtiger doppelpfeil') + - "∏": [T: "produkt"] # 0x220f (en: 'product', MathPlayer: 'Product', google: 'produkt') + - "∐": [T: "koprodukt"] # 0x2210 (en: 'co-product', MathPlayer: 'coproduct', google: 'ko-produkt') + - "∑": [T: "summe"] # 0x2211 (en: 'sum') + - "∗": [T: "mal"] # 0x2217 (en: 'times', MathPlayer: 'asterisk operator', google: 'mal') + - "√": # 0x221a + - T: "quadratwurzel" # (en: 'square root of', MathPlayer: 'radical', google: 'quadratwurzel von') + - "∟": [T: "rechter winkel"] # 0x221f (en: 'right angle') + - "∠": [T: "winkel"] # 0x2220 (en: 'angle') + - "∡": [T: "gerichteter winkel"] # 0x2221 (en: 'measured angle', MathPlayer: 'measured angle', google: 'gemessener winkel') + - "∩": [T: "schnitt mit"] # 0x2229 (en: 'intersection') #Problem: Schnittmenge wenn alleinstehend vor Bezeichnung, schnitt wenn zwischen 2 Mengen + - "∪": [T: "vereinigt mit"] # 0x222a (en: 'union') #Problem: vereinigungsmenge wenn alleinstehend vor Bezeichnung, vereinigt mit wenn zwischen 2 Mengen + - "∫": [T: "integral"] # 0x222b (en: 'integral') + - "∬": [T: "doppelintegral"] # 0x222c (en: 'double integral') + - "∭": [T: "dreifachintegral"] # 0x222d (en: 'triple integral', MathPlayer: 'Dreifaches Integral', google: 'dreifachintegral') + - "∮": [T: "randintegral"] # 0x222e (en: 'contour integral', MathPlayer: 'Kontur-Integral', google: 'konturintegral') + - "∷": [T: "proportional"] # 0x2237 (en: 'as') + - "∼": [T: "tilde"] # 0x223c (en: 'varies with', MathPlayer: 'tilde operator', google: 'variiert mit') + - "∽": [T: "umgekehrte tilde"] # 0x223d (en: 'reversed tilde', MathPlayer: 'reversed tilde', google: 'umgekehrte tilde') + - "∿": [T: "sinuswelle"] # 0x223f (en: 'sine wave', MathPlayer: 'sine wave', google: 'sinus')