From 3600135f9717d4b5fd7915588b78a814e2a9da99 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Moritz=20Gro=C3=9F?= Date: Thu, 23 Apr 2026 23:44:08 +0200 Subject: [PATCH 1/5] add some rules (with tests) for Hungarian (hu) --- Rules/Languages/hu/ClearSpeak_Rules.yaml | 766 ++++ Rules/Languages/hu/SharedRules/calculus.yaml | 56 + Rules/Languages/hu/SharedRules/default.yaml | 725 ++++ Rules/Languages/hu/SharedRules/general.yaml | 1078 +++++ Rules/Languages/hu/SharedRules/geometry.yaml | 79 + .../hu/SharedRules/linear-algebra.yaml | 36 + Rules/Languages/hu/SimpleSpeak_Rules.yaml | 350 ++ Rules/Languages/hu/definitions.yaml | 385 ++ Rules/Languages/hu/navigate.yaml | 1751 ++++++++ Rules/Languages/hu/overview.yaml | 112 + Rules/Languages/hu/unicode-full.yaml | 3802 +++++++++++++++++ Rules/Languages/hu/unicode.yaml | 576 +++ tests/Languages/hu.rs | 34 + tests/Languages/hu/ClearSpeak/functions.rs | 605 +++ tests/Languages/hu/ClearSpeak/large_ops.rs | 252 ++ tests/Languages/hu/ClearSpeak/menclose.rs | 266 ++ tests/Languages/hu/ClearSpeak/mfrac.rs | 332 ++ tests/Languages/hu/ClearSpeak/mroot.rs | 178 + tests/Languages/hu/ClearSpeak/msup.rs | 402 ++ tests/Languages/hu/ClearSpeak/multiline.rs | 203 + tests/Languages/hu/ClearSpeak/sets.rs | 570 +++ .../hu/ClearSpeak/symbols_and_adornments.rs | 398 ++ tests/Languages/hu/SimpleSpeak/functions.rs | 434 ++ tests/Languages/hu/SimpleSpeak/geometry.rs | 40 + tests/Languages/hu/SimpleSpeak/large_ops.rs | 252 ++ .../hu/SimpleSpeak/linear_algebra.rs | 120 + tests/Languages/hu/SimpleSpeak/mfrac.rs | 380 ++ tests/Languages/hu/SimpleSpeak/msup.rs | 401 ++ tests/Languages/hu/SimpleSpeak/multiline.rs | 80 + tests/Languages/hu/SimpleSpeak/sets.rs | 308 ++ tests/Languages/hu/SimpleSpeak/subscripts.rs | 71 + tests/Languages/hu/alphabets.rs | 446 ++ tests/Languages/hu/chemistry.rs | 787 ++++ tests/Languages/hu/intent.rs | 157 + tests/Languages/hu/mtable.rs | 1238 ++++++ tests/Languages/hu/shared.rs | 599 +++ tests/Languages/hu/units.rs | 565 +++ tests/languages.rs | 1 + 38 files changed, 18835 insertions(+) create mode 100644 Rules/Languages/hu/ClearSpeak_Rules.yaml create mode 100644 Rules/Languages/hu/SharedRules/calculus.yaml create mode 100644 Rules/Languages/hu/SharedRules/default.yaml create mode 100644 Rules/Languages/hu/SharedRules/general.yaml create mode 100644 Rules/Languages/hu/SharedRules/geometry.yaml create mode 100644 Rules/Languages/hu/SharedRules/linear-algebra.yaml create mode 100644 Rules/Languages/hu/SimpleSpeak_Rules.yaml create mode 100644 Rules/Languages/hu/definitions.yaml create mode 100644 Rules/Languages/hu/navigate.yaml create mode 100644 Rules/Languages/hu/overview.yaml create mode 100644 Rules/Languages/hu/unicode-full.yaml create mode 100644 Rules/Languages/hu/unicode.yaml create mode 100644 tests/Languages/hu.rs create mode 100644 tests/Languages/hu/ClearSpeak/functions.rs create mode 100644 tests/Languages/hu/ClearSpeak/large_ops.rs create mode 100644 tests/Languages/hu/ClearSpeak/menclose.rs create mode 100644 tests/Languages/hu/ClearSpeak/mfrac.rs create mode 100644 tests/Languages/hu/ClearSpeak/mroot.rs create mode 100644 tests/Languages/hu/ClearSpeak/msup.rs create mode 100644 tests/Languages/hu/ClearSpeak/multiline.rs create mode 100644 tests/Languages/hu/ClearSpeak/sets.rs create mode 100644 tests/Languages/hu/ClearSpeak/symbols_and_adornments.rs create mode 100644 tests/Languages/hu/SimpleSpeak/functions.rs create mode 100644 tests/Languages/hu/SimpleSpeak/geometry.rs create mode 100644 tests/Languages/hu/SimpleSpeak/large_ops.rs create mode 100644 tests/Languages/hu/SimpleSpeak/linear_algebra.rs create mode 100644 tests/Languages/hu/SimpleSpeak/mfrac.rs create mode 100644 tests/Languages/hu/SimpleSpeak/msup.rs create mode 100644 tests/Languages/hu/SimpleSpeak/multiline.rs create mode 100644 tests/Languages/hu/SimpleSpeak/sets.rs create mode 100644 tests/Languages/hu/SimpleSpeak/subscripts.rs create mode 100644 tests/Languages/hu/alphabets.rs create mode 100644 tests/Languages/hu/chemistry.rs create mode 100644 tests/Languages/hu/intent.rs create mode 100644 tests/Languages/hu/mtable.rs create mode 100644 tests/Languages/hu/shared.rs create mode 100644 tests/Languages/hu/units.rs diff --git a/Rules/Languages/hu/ClearSpeak_Rules.yaml b/Rules/Languages/hu/ClearSpeak_Rules.yaml new file mode 100644 index 000000000..7b6afd619 --- /dev/null +++ b/Rules/Languages/hu/ClearSpeak_Rules.yaml @@ -0,0 +1,766 @@ +--- +- name: pause + tag: "!*" + match: "not(self::m:math) and not($MatchingPause) and @data-intent-property[contains(., ':pause')]" + replace: + - with: + variables: [MatchingPause: "true()"] + replace: + - test: + - if: "contains(@data-intent-property, ':pause-long')" + then: [pause: long] + - else_if: "contains(@data-intent-property, ':pause-short')" + then: [pause: short] + else: [pause: medium] + - x: "." + +- name: intent-literal-silent + tag: [mi, mo, mn] + match: "contains(@data-intent-property, ':silent:')" + # say nothing + replace: [] + +# handling of negative numbers that come from 'intent' is hard -- we do something that is close to right here +- name: intent-literal-negative-number + tag: mn + match: "starts-with(text(), '-')" + replace: + - t: "minus" # phrase(10 'minus' 4 equals 6) + - x: "translate(text(), '-_', '')" + +- name: default + tag: square-root + match: "." + replace: + - test: + if: "$Verbosity!='Terse'" + then: [t: "the"] # phrase('the' square root of 25) + - test: + if: "$ClearSpeak_Roots = 'PosNegSqRoot' or $ClearSpeak_Roots = 'PosNegSqRootEnd'" + then: + - bookmark: "*[1]/@id" + - test: + if: "parent::*[self::m:minus and count(*)=1]" + then: [t: "negative"] # phrase(minus 4 is a 'negative' number) + else: [t: "positive"] # phrase(10 is a 'positive' number) + - t: "square root" # phrase(8 is the 'square root' of 64) + - test: + if: "$Verbosity!='Terse'" + then: [t: "of"] # phrase(the square root 'of' 5) + else: [pause: short] + - x: "*[1]" + - test: + - if: "$ClearSpeak_Roots = 'RootEnd' or $ClearSpeak_Roots = 'PosNegSqRootEnd'" + then: + - pause: short + - t: "end root" # phrase(the square root of x 'end root') + - pause: medium + - else_if: "IsNode(*[1], 'simple')" + then: [pause: short] + else: [pause: long] + +- name: default + tag: root + match: "." + replace: + - test: + if: "$Verbosity!='Terse'" + then: [t: "the"] # phrase(6 is 'the' square root of 36) + - test: + if: "$ClearSpeak_Roots = 'PosNegSqRoot' or $ClearSpeak_Roots = 'PosNegSqRootEnd'" + then: + - test: + if: "parent::*[(self::m:minus or self::m:plus) and count(*)=1]" + then: [bookmark: "parent/@id"] + - test: + if: "parent::m:minus" + then: [t: "negative"] # phrase(minus 6 is a 'negative' number) + else: [t: "positive"] # phrase(10 is a 'positive' number) + - test: + if: "*[2][self::m:mn and not(contains(., '.'))]" + then_test: + - if: "*[2][.='2']" + then: [t: "square root"] # phrase(5 is the 'square root' of 25) + - else_if: "*[2][.='3']" + then: [t: "cube root"] # phrase(5 is the 'cube root' of 625) + - else: [x: "ToOrdinal(*[2])", t: "root"] # phrase(the square 'root' of 25) + else: + - test: + if: "*[2][self::m:mi][string-length(.)=1]" + then: + - x: "*[2]" + - pronounce: [text: "-th", ipa: "θ", sapi5: "th", eloquence: "T"] + else: [x: "*[2]"] + - t: "root" # phrase(the square 'root' of 36) + - test: + if: "$Verbosity!='Terse'" + then: [t: "of"] # phrase(the square root 'of' 36) + - x: "*[1]" + - test: + if: "$ClearSpeak_Roots = 'RootEnd' or $ClearSpeak_Roots = 'PosNegSqRootEnd'" + then: + - pause: short + - t: "end root" # phrase(start the fifth root of x 'end root') + - pause: medium + else_test: + if: "IsNode(*[1], 'simple')" + then: [pause: short] + else: [pause: long] + +# The 'negative' rule interacts with the msqrt/mroot rules as those might pick off this case ("the negative square root of x") +- name: negative_and_positive + tag: [plus, minus] + match: "count(*)=1 and contains(@data-intent-property, ':prefix:')" + replace: + - test: + if: + - "*[1][self::m:square-root or self::m:root] and" + - "($ClearSpeak_Roots = 'PosNegSqRoot' or $ClearSpeak_Roots = 'PosNegSqRootEnd')" + then: [t: ""] + else: + - bookmark: "@id" + - test: + if: "self::m:minus" + then: [t: "negative"] # phrase(minus 5 is a 'negative' number) + else: [t: "positive"] # phrase(7 is a 'positive' number) + - x: "*[1]" + +# Fraction rules +# Mixed numbers mostly "just work" because the invisible char reads as "and" and other parts read properly on their own + +# Units (e.g., meters per second) +- name: per-fraction + tag: fraction + match: + - "$ClearSpeak_Fractions='Per' or" + - "(BaseNode(*[1])[contains(@data-intent-property, ':unit') or" + - " ( self::m:mrow and count(*)=3 and" # maybe a bit paranoid checking the structure... + - " *[1][self::m:mn] and *[2][.='\u2062'] and BaseNode(*[3])[contains(@data-intent-property, ':unit')] ) ] and" + - " BaseNode(*[2])[contains(@data-intent-property, ':unit')] )" + replace: + - x: "*[1]" + - t: "per" # phrase('5 meters 'per' second) + - x: "*[2]" + +- name: common-fraction + tag: fraction + match: + - "($ClearSpeak_Fractions='Auto' or $ClearSpeak_Fractions='Ordinal' or $ClearSpeak_Fractions='EndFrac') and" + - "*[1][self::m:mn][not(contains(., $DecimalSeparators)) and ($ClearSpeak_Fractions='Ordinal' or text()<20)] and" + - "*[2][self::m:mn][not(contains(., $DecimalSeparators)) and ($ClearSpeak_Fractions='Ordinal' or (2<= text() and text()<=10))]" + variables: [IsPlural: "*[1]!=1"] + replace: + - x: "*[1]" + - x: "ToOrdinal(*[2], true(), $IsPlural)" # extra args specify fractional ordinal and whether it is plural + +- name: fraction-over-simple + tag: fraction + match: + - "($ClearSpeak_Fractions='Over' or $ClearSpeak_Fractions='FracOver' or $ClearSpeak_Fractions='OverEndFrac') or" + - "( not($ClearSpeak_Fractions='General' or $ClearSpeak_Fractions='GeneralEndFrac') and" + - " (IsNode(*[1],'simple') and IsNode(*[2],'simple')) )" # simple fraction in ClearSpeak spec + replace: + - test: + if: "$ClearSpeak_Fractions='FracOver'" + then: + - test: + if: "$Verbosity!='Terse'" + then: [ot: "the"] + - t: "fraction" # phrase(the 'fraction' with 3 over 4) + - x: "*[1]" + - t: "over" # phrase(the fraction 3 'over' 4) + - x: "*[2]" + - test: + # very ugly!!! -- replicate nested ordinal fraction as they are an exception + if: "$ClearSpeak_Fractions='OverEndFrac' or ($ClearSpeak_Fractions='EndFrac' and not( ($ClearSpeak_Fractions='Auto' or $ClearSpeak_Fractions='Ordinal' or $ClearSpeak_Fractions='EndFrac') and *[1][*[1][self::m:mn][not(contains(., '.')) and ($ClearSpeak_Fractions='Ordinal' or text()<20)] and *[2][self::m:mn][not(contains(., '.')) and ($ClearSpeak_Fractions='Ordinal' or (2<= text() and text()<=10))] ] and *[2][*[1][self::m:mn][not(contains(., '.')) and ($ClearSpeak_Fractions='Ordinal' or text()<20)] and *[2][self::m:mn][not(contains(., '.')) and ($ClearSpeak_Fractions='Ordinal' or (2<= text() and text()<=10))] ] ) )" + then: + - pause: short + - t: "end fraction" # phrase(7 over 8 'end fraction') + - pause: short + +- # fraction with text or numbers followed by text in both numerator and denominator + name: fraction-over-text + tag: fraction + match: + - "not($ClearSpeak_Fractions='General' or $ClearSpeak_Fractions='GeneralEndFrac') and" + - "( " + - " ((*[1][self::m:mi or self::m:mtext][string-length(.)>1]) or " # fractions with text + - " (*[1][self::m:mrow][count(*)=3][ " + - " *[1][self::m:mn] and " + - " *[2][self::m:mo][.='⁢'] and " # invisible times + - " *[3][self::m:mi or self::m:mtext][string-length(.)>1] ]) ) and" + - " ((*[2][self::m:mi or self::m:mtext][string-length(.)>1]) or " # fractions with text + - " (*[2][self::m:mrow][count(*)=3][ " + - " *[1][self::m:mn] and " + - " *[2][self::m:mo][.='⁢'] and " # invisible times + - " *[3][self::m:mi or self::m:mtext][string-length(.)>1] ]) )" + - ")" + replace: + - x: "*[1]" + - t: "over" # phrase(the fraction 3 'over' 4) + - x: "*[2]" + - test: + if: "$ClearSpeak_Fractions='EndFrac' or $ClearSpeak_Fractions='OverEndFrac'" + then: + - pause: short + - t: "end fraction" # phrase(7 over 8 'end fraction') + - pause: short + +- name: default + tag: fraction + match: "." + replace: + - ot: "the" # phrase(5 is 'the' square toot of 25) + - t: "fraction with numerator" # phrase(the 'fraction with numerator' 6) + - test: + if: "not(IsNode(*[1], 'simple'))" + then: [pause: medium] + - x: "*[1]" + - pause: medium + - t: "and denominator" # phrase(the fraction with numerator 5 'and denominator' 8) + - x: "*[2]" + - pause: long + - test: + if: "$ClearSpeak_Fractions='EndFrac' or $ClearSpeak_Fractions='GeneralEndFrac'" + then: + - pause: short + - t: "end fraction" # phrase(the fraction with 3 over 4 'end fraction') + - pause: short + +# rules for functions raised to a power +# these could have been written on 'mrow' but putting them on msup seems more specific +# to see if it is a function, we look right to see if the following sibling is apply-function +- name: ClearSpeak-function-inverse + tag: inverse-function + match: "." + replace: + - test: + if: "$ClearSpeak_Trig = 'TrigInverse'" + then: [x: "*[1]", bookmark: "*[2]/@id", t: "inverse"] # phrase(8 over 5 is the 'inverse' of 5 over 8) + else_test: + if: "$ClearSpeak_Trig = 'ArcTrig'" + then: [bookmark: "*[2]/@id", t: "arc", x: "*[1]"] # phrase(the 'arc' of a circle) + else: [bookmark: "*[2]/@id", t: "inverse", x: "*[1]"] # default/Auto # phrase(8 over 5 is the 'inverse' of 5 over 8) + +- name: function-squared-or-cubed + tag: power + match: + - "*[2][self::m:mn][.='2' or .='3'] and" + - "following-sibling::*[1][self::m:mo][.='⁡']" #invisible function apply + replace: + - x: "*[1]" + - bookmark: "*[2]/@id" + - test: + if: "*[2][.='2']" + then: [t: "squared"] # phrase(25 equals 5 'squared') + else: [t: "cubed"] # phrase(625 equals 5 'cubed') + +- name: function-power + tag: power + match: + - "following-sibling::*[1][self::m:mo][.='⁡']" #invisible function apply + replace: + - test: + if: "$Verbosity!='Terse'" + then: [t: "the"] # phrase('the' third power of 2) + - bookmark: "*[2]/@id" + - test: + if: "*[2][self::m:mn][not(contains(., '.'))]" + then: [x: "ToOrdinal(*[2])"] + else: [x: "*[2]"] + - t: "power of" # phrase(the third 'power of' 6) + - pause: short + - x: "*[1]" + +- name: AfterPower-nested + tag: power + match: # directly a superscript or an mrow that contains a superscript + - "$ClearSpeak_Exponents = 'AfterPower' and" + - "*[2][self::m:power or self::m:power or self::m:mrow[m:power]]" + replace: + - x: "*[1]" + - t: "raised to the exponent" # phrase(5 'raised to the exponent' x plus 1) + - pause: short + - x: "*[2]" + - pause: short + - t: "end exponent" # phrase(5 raised to the exponent x plus 1 'end exponent') + +- name: AfterPower-default + tag: power + match: "$ClearSpeak_Exponents = 'AfterPower'" + replace: + - x: "*[1]" + - t: "raised to the power" # phrase(x is 'raised to the power' 4) + - x: "*[2]" + - pause: short + +- name: squared + tag: power + match: "*[2][self::m:mn][.='2'] and $ClearSpeak_Exponents = 'Auto'" + replace: + - x: "*[1]" + - bookmark: "*[2]/@id" + - t: "squared" # phrase(7 'squared' equals 49) + +- name: cubed + tag: power + match: "*[2][self::m:mn][.='3'] and $ClearSpeak_Exponents = 'Auto'" + replace: + - x: "*[1]" + - bookmark: "*[2]/@id" + - t: "cubed" # phrase(5 'cubed' equals 125) + +- name: simple-integer + tag: power + match: "*[2][self::m:mn][not(contains(., '.'))]" + replace: + - x: "*[1]" + - t: "to the" # phrase(2 raised 'to the' power 7) + - test: + if: "*[2][.>0]" + then: [x: "ToOrdinal(*[2])"] + else: [x: "*[2]"] + - test: + if: "$ClearSpeak_Exponents != 'Ordinal'" + then: [t: "power"] # phrase(2 raised to the 'power' 7) + +- name: simple-negative-integer + tag: power + match: + - "*[2][self::m:minus and count(*)=1 and " + - " *[1][self::m:mn][not(contains(., '.'))]" + - " ]" + replace: + - x: "*[1]" + - t: "to the" # phrase(2 raised 'to the' power 7) + - x: "*[2]" + - test: + if: "$ClearSpeak_Exponents != 'Ordinal'" + then: [t: "power"] # phrase(2 raised to the 'power' 7) + +- name: simple-var + tag: power + match: "*[2][self::m:mi][string-length(.)=1]" + replace: + - x: "*[1]" + - t: "to the" # phrase(3 raised 'to the' power 7) + - x: "*[2]" + - pronounce: [text: "-th", ipa: "θ", sapi5: "th", eloquence: "T"] + - test: + if: "$ClearSpeak_Exponents != 'Ordinal'" + then: [t: "power"] # phrase(2 raised to the 'power' 7) + +# match nested exponent, where the nested exponent is has the power 2 or 3 (n below) +# [xxx]^n, - [xxx]^n, [xxx] var^n, -[xxx] var^n +# where xxx is a number or common fraction (or a var in the first two forms) +# short of creating a specialized built-in function, I don't see a way to eliminate a lot of repetition in the matches +# also really bad is that the test of a common fraction is replicated here (four times!) +# Note: the ClearSpeak doc doesn't say these only apply when the pref is "Auto", +# but the test cases all fall back to "raised to the exponent" when not "Auto" +# If these are allowed for non-Auto values, then you end up with "...power power...". +- # [xxx]^n + name: nested-squared-or-cubed + tag: power + match: + - "$ClearSpeak_Exponents = 'Auto' and" + - "*[2][self::m:power][" + - " *[2][self::m:mn][.='2' or .='3'] and " # exp is 2 or 3 + # base is mn, mi, common fraction ([xxx] case) + - " *[1][self::m:mn or self::m:mi or " + - " self::m:fraction[*[1][self::m:mn][not(contains(., '.')) and text()<20] and" + - " *[2][self::m:mn][not(contains(., '.')) and 2<= text() and text()<=10]]" + - " ]" + - " ]" + replace: + - x: "*[1]" + - t: "raised to the" # phrase(x 'raised to the' second power) + - x: "*[2]" + - t: "power" # phrase(x raised to the second 'power') + +- # - [xxx]^n + name: nested-negative-squared-or-cubed + tag: power + match: + - "$ClearSpeak_Exponents = 'Auto' and" + - " *[2][self::m:minus and count(*)=1 and " + - " *[1]/*[1][self::m:power][" + - " *[2][self::m:mn][.='2' or .='3'] and " # exp is 2 or 3" + # base is mn, mi, common fraction ([xxx] case) + - " *[1][self::m:mn or self::m:mi or " + - " self::m:fraction[*[1][self::m:mn][not(contains(., '.')) and text()<20] and" + - " *[2][self::m:mn][not(contains(., '.')) and 2<= text() and text()<=10]]" + - " ]" + - " ]" + - " ]" + replace: + - x: "*[1]" + - t: "raised to the" # phrase(x 'raised to the' second power) + - x: "*[2]" + - t: "power" # phrase(x raised to the second 'power') + +- # [xxx] var^n + name: nested-var-squared-or-cubed + tag: power + match: + - "$ClearSpeak_Exponents = 'Auto' and" + - " *[2][self::m:mrow][count(*)=3][ " + - " *[3][self::m:power][" + - " *[2][self::m:mn][.='2' or .='3'] and " # exp is 2 or 3 + - " *[1][self::m:mi]" + - " ] and " + - " *[2][self::m:mo][.='⁢'] and " # invisible times + # base is mn, or common fraction ([xxx] case) + - " *[1][self::m:mn or " + - " self::m:fraction[*[1][self::m:mn][not(contains(., '.')) and text()<20] and" + - " *[2][self::m:mn][not(contains(., '.')) and 2<= text() and text()<=10]]" + - " ]" + - " ]" + replace: + - x: "*[1]" + - t: "raised to the" # phrase(x 'raised to the' second power) + - x: "*[2]" + - t: "power" # phrase(x raised to the second 'power') + +- # -[xxx] var^n + name: nested-negative-var-squared-or-cubed + tag: power + match: + - "$ClearSpeak_Exponents = 'Auto' and" + - " *[2][self::m:mrow][count(*)=3][ " + - " *[3][self::m:power][" + - " *[2][self::m:mn][.='2' or .='3'] and " # exp is 2 or 3 + - " *[1][self::m:mi]" + - " ] and " + - " *[2][self::m:mo][.='⁢'] and " # invisible times + - " *[1][self::m:minus and count(*)=1 and " + # base is mn, or common fraction ([xxx] case) + - " *[1][self::m:mn or " + - " self::m:fraction[*[1][self::m:mn][not(contains(., '.')) and text()<20] and" + - " *[2][self::m:mn][not(contains(., '.')) and 2<= text() and text()<=10]]" + - " ]" + - " ]" + - " ]" + replace: + - x: "*[1]" + - t: "raised to the" # phrase(x 'raised to the' second power) + - x: "*[2]" + - t: "power" # phrase(x raised to the second 'power') + +- name: default-exponent-power + tag: power + match: # directly a superscript or an mrow that contains a superscript + - "*[2][self::m:power or self::m:power or self::m:mrow[m:power]]" + replace: + - x: "*[1]" + - t: "raised to the exponent" # phrase(x is 'raised to the exponent') + - pause: short + - x: "*[2]" + - pause: short + - t: "end exponent" # phrase(and now 'end exponent' has been reached) + +- name: default + tag: power + match: "." + replace: + - x: "*[1]" + - t: "raised to the" # phrase(x 'raised to the' second power) + - x: "*[2]" + - t: "power" # phrase(x raised to the second 'power') + +# +# Some rules on mrows +# +- # the inference rules lump absolute value and cardinality together, so those rules are implemented here + name: ClearSpeak-absolute-value + tag: absolute-value + match: "." + variables: [WordToSay: "IfThenElse($ClearSpeak_AbsoluteValue = 'Cardinality', 'cardinality', 'absolute value')"] + replace: + - test: + if: "$Verbosity!='Terse'" + then: [t: "the"] # phrase('the' absolute value of 25) + - x: "$WordToSay" + - t: "of" # phrase(the absolute value 'of' 25) + - x: "*[1]" + - test: + if: "$ClearSpeak_AbsoluteValue = 'AbsEnd'" + then: + - pause: short + - t: "end" # phrase('end' absolute value) + - x: "$WordToSay" + - pause: short + +- name: set + tag: set + match: "." + replace: + - test: + - if: "count(*)=0" + then: [t: "the empty set"] # phrase('the empty set') + - else_if: "count(*)=2" + then: + - test: + if: "$Verbosity!='Terse'" + then: [t: "the"] # phrase('the' empty set) + - t: "empty set" # phrase(the 'empty set') + - else_if: "count(*[1]/*)=3 and *[1]/*[2][self::m:mo][.=':' or .='|' or .='∣']" + then: + - test: + if: "$Verbosity!='Terse'" + then: [t: "the"] # phrase('the' set of all integers) + - t: "set of" # phrase(this is a 'set of' numbers) + - test: + if: "$ClearSpeak_Sets != 'woAll'" + then: [t: "all"] # phrase(the set of 'all' integers) + - x: "*[1]/*[1]" + - t: "such that" # phrase(the set S 'such that' x is less than y) + - x: "*[1]/*[3]" + else: + - test: + if: "$ClearSpeak_Sets != 'SilentBracket'" + then: + - test: + if: "$Verbosity!='Terse'" + then: [t: "the"] # phrase('the' set of integers) + - t: "set" # phrase(this is a 'set' of integers) + - x: "*[1]" + +- # intervals are controlled by a ClearSpeak Preference -- parens/brackets don't have to match, so we avoid IsBracketed + # alternatively, we could have four (or ten) rules, but there is a lot of duplication if we do that + # this one rule handles all ten cases listed as part $ClearSpeak_Paren = 'Interval' + # note that *[2] is an mrow with X, ",", Y, so getting X or Y is a double index + name: ClearSpeak-intervals # avoid overriding with default "intervals" name + variables: + - is_intervals_start_infinity: "*[1][self::m:minus and count(*)=1 and *[1][.='∞']]" + - is_intervals_end_infinity: "*[2][.='∞'or (self::m:plus and count(*)=1 and *[1][.='∞'])]" + tag: [open-interval, open-closed-interval, closed-interval, closed-open-interval] + match: "." + replace: + - t: "the interval from" # phrase('the interval from' a to b) + - x: "*[1]" + - t: "to" # phrase(the interval from a 'to' b) + - x: "*[2]" + - pause: short + - test: + if: "not($is_intervals_start_infinity)" + then: + - test: + if: "starts-with(name(.), 'open')" + then: [t: "not"] # phrase(the interval from a to b 'not' including b) + - t: "including" # phrase(the interval from a to b not 'including' b) + - x: "*[1]" + # logic to deal with [not] arg #1 + - test: + if: "not($is_intervals_start_infinity or $is_intervals_end_infinity)" + then_test: + - if: "name(.)='open-interval'" + then: [t: "or"] # phrase(the interval including a 'or' b ) + - else_if: "name(.)='closed-interval'" + then: [t: "and"] # phrase(the interval including a 'and' b) + else: [t: "but"] # phrase(the interval including a 'but' not b) + # some ugly logic dealing with connectives: or, but, but, and (cleaner to be part of next clause?) + - test: + if: "not($is_intervals_end_infinity)" + then: + - test: + # there is some asymmetry to the test because of the and/or/but logic above + if: "not( name(.)='open-interval' or name(.)='closed-interval' ) or $is_intervals_start_infinity" + then: + - test: + if: "name(.) = 'open-interval' or name(.) = 'closed-open-interval'" + then: [t: "not"] # phrase(the interval 'not' including a) + - t: "including" # phrase(the interval not 'including' a) + - x: "*[2]" + + # onto the [not] [including]... part +- name: binomial-frac-vector + tag: matrix + match: + - "$ClearSpeak_Matrix = 'Combinatorics' and " + - "count(*[1]/*)=1 and count(*)=2" + replace: + - x: "*[1]/*[1]/*" # mtable/mtr/mtd + - t: "choose" # phrase(the binomial coefficient n 'choose' m) + - x: "*[2]/*[1]/*" + +- name: ClearSpeak-default + tag: [mtr, mlabeledtr] + match: "parent::m:matrix or parent::m:determinant" + variables: [NextLineIsContinuedRow: "following-sibling::*[1][contains(@data-intent-property, ':continued-row:')]"] + replace: + - pause: medium + - t: "row" # phrase(the first 'row' of a matrix) + - x: "count(preceding-sibling::*)+1" + - test: + if: ".[self::m:mlabeledtr]" + then: + - t: "with label" # phrase(the line 'with label' first equation) + - x: "*[1]/*" + - pause: short + - pause: medium + - test: + if: ".[self::m:mlabeledtr]" + then: [x: "*[position()>1]"] + else: [x: "*"] + +- # handle both log and ln + name: ClearSpeak-log + tag: mi + match: ".='log' or .='ln'" + replace: + - bookmark: "@id" + - test: + if: "$Verbosity!='Terse' and not(IsNode(following-sibling::*[2],'simple'))" + then: [t: "the"] # phrase('the' square root of 25) + - test: + - if: ".='log'" + then: [t: "log"] + - else_if: "$ClearSpeak_Log = 'LnAsNaturalLog'" + then: [t: "natural log"] # phrase(the 'natural log' of x) + else: [spell: "'ln'"] + +- name: ClearSpeak-multi-line + tag: [piecewise, system-of-equations, lines] # these are ignored in favor of the ClearSpeak prefs + match: "." + variables: + # Wikipedia has some tables where all the entire first column is empty (e.g., https://en.wikipedia.org/wiki/List_of_trigonometric_identities) + - LineCount: "count(*[not(contains(@data-intent-property, ':continued-row:'))])" + - NextLineIsContinuedRow: "false()" # default value + - IsColumnSilent: true() + replace: + - test: + - if: "$ClearSpeak_MultiLineOverview = 'Auto'" + then: + - x: "$LineCount" + - test: + - if: "($ClearSpeak_MultiLineLabel = 'Auto' and self::m:piecewise) or $ClearSpeak_MultiLineLabel = 'Case'" + then: [t: "case"] # phrase(this is the first 'case' of three cases) + - else_if: "$ClearSpeak_MultiLineLabel = 'Auto' or $ClearSpeak_MultiLineLabel = 'Line' or $ClearSpeak_MultiLineLabel = 'None'" # already dealt with Auto/Case + then: [t: "line"] # phrase(this is the first 'line' of three lines) + - else_if: "$ClearSpeak_MultiLineLabel = 'Constraint'" + then: [t: "constraint"] # phrase(this is the first 'constraint' of three constraints) + - else_if: "$ClearSpeak_MultiLineLabel = 'Equation'" + then: [t: "equation"] # phrase(this is the first 'equation' of three equations) + - else_if: "$ClearSpeak_MultiLineLabel = 'Row'" + then: [t: "row"] # phrase(this is the first 'row' of three rows) + - else_if: "$ClearSpeak_MultiLineLabel = 'Step'" + then: [t: "step"] # phrase(this is the first 'step' of three steps) + # else 'None -- don't say anything' + - test: + - if: "$LineCount != 1" + then: [ct: "s"] # plural # phrase(shown by the letter 's') + - pause: short + - x: "*" + - pause: long + +- name: ClearSpeak-default-multiline + tag: [mtr, mlabeledtr] + match: "parent::m:piecewise or parent::m:system-of-equations or parent::m:lines" + variables: [NextLineIsContinuedRow: "following-sibling::*[1][contains(@data-intent-property, ':continued-row:')]"] + replace: + - test: + if: "not($LineCount=1 or $ClearSpeak_MultiLineLabel='None' or contains(@data-intent-property, ':continued-row:'))" + then: + - pause: medium + - test: + - if: "($ClearSpeak_MultiLineLabel = 'Auto' and parent::m:piecewise) or $ClearSpeak_MultiLineLabel = 'Case'" + then: [t: "case"] # phrase(in this 'case' x is not equal to y) + - else_if: "$ClearSpeak_MultiLineLabel = 'Auto' or $ClearSpeak_MultiLineLabel = 'Line'" # already dealt with Auto/Case + then: [t: "line"] # phrase(the straight 'line' between x and y) + - else_if: "$ClearSpeak_MultiLineLabel = 'Constraint'" + then: [t: "constraint"] # phrase(there is a 'constraint' on possible values) + - else_if: "$ClearSpeak_MultiLineLabel = 'Equation'" + then: [t: "equation"] # phrase(the 'equation' pi r squared gives the area of a circle) + - else_if: "$ClearSpeak_MultiLineLabel = 'Row'" + then: [t: "row"] # phrase(the values on the top 'row' are relevant) + - else_if: "$ClearSpeak_MultiLineLabel = 'Step'" + then: [t: "step"] # phrase(this is a 'step' by step process) + # else 'None -- don't say anything' + - x: "count(preceding-sibling::*[not(contains(@data-intent-property, ':continued-row:'))]) + 1" + - test: + if: "self::m:mlabeledtr" + then: + - t: "with label" # phrase(the diagram is complete 'with label') + - x: "*[1]/*" + - test: + - if: "$ClearSpeak_MultiLineLabel='None'" + then: [pause: xlong] # need a very long pause with no line labels + - else_if: "not(contains(@data-intent-property, ':continued-row:'))" + then: [pause: medium] + - test: + if: "self::m:mlabeledtr" + then: [x: "*[position()>1]"] + else: [x: "*"] + +- name: ClearSpeak_Functions_None + tag: mo + match: + - ".='⁡' and $ClearSpeak_Functions = 'None' and" + - "not(preceding-sibling::*[1][IsInDefinition(., 'TrigFunctionNames')])" # Functions=None does not apply to "trig" functions + replace: + test: + if: "$ClearSpeak_ImpliedTimes = 'None'" + then: [t: ""] + else: [t: "times"] # phrase(5 'times' 3 equals 15) + +- name: no-times + tag: mo + match: + # Note: this rule is also part of the paren rule so that the parens speak + - ".='⁢' and $ClearSpeak_ImpliedTimes = 'None'" + replace: + - t: "" + +- name: ClearSpeak-times + tag: mo + match: + # say "times" when invisible times is followed by parens or a superscript that has a base with parens or "|"s + # if we aren't sure if it is times or not, don't say anything + - ".='⁢' and (not(@data-function-guess) or $ClearSpeak_Functions = 'None') and" + - "not(ancestor-or-self::*[contains(@data-intent-property, ':literal:')]) and (" + - " $ClearSpeak_ImpliedTimes = 'MoreImpliedTimes'" + - " or " + - " following-sibling::*[1][" + - " IsBracketed(., '(', ')') or IsBracketed(., '[', ']') or IsBracketed(., '|', '|') or " + # most of these aren't mentioned in ClearSpeak spec, but are (I think) expected uses of "times" + - " self::m:matrix or self::m:determinant or self::m:binomial or" # followed by parens + - " self::m:square-root or self::m:msqrt or self::m:root or self::m:mroot or" + - " (self::m:msub or self::m:msubsup or" + - " ((self::m:msup or self::m:power) and not(IsNode(*[1], 'leaf') and *[2][self::m:mn and (.=2 or '.=3')]))) and " # followed by msup, etc. + - " (*[1][self::m:mrow[IsBracketed(., '(', ')') or IsBracketed(., '[', ']') or IsBracketed(., '|', '|')] or " + - " self::m:matrix or self::m:determinant] or" # base has parens + - " not(IsNode(*[2], 'simple')) or " + - " (self::m:msubsup and not(IsNode(*[3], 'simple')))" + - " )" + - " ]" + # other possibility is the preceding element has parens (but not the following) + # this is not mentioned in the ClearSpeak rules or examples but seems like it should say "times". E.g, |x| y + - " or " + - " preceding-sibling::*[1][" + - " IsBracketed(., '(', ')') or IsBracketed(., '[', ']') or IsBracketed(., '|', '|')]" # followed by parens + - " )" + replace: + - t: "times" # phrase(5 'times' 3 equals 15) + +- name: no-say-parens + tag: mrow + match: + - "parent::*[not(self::m:msup) and not(self::m:msub) and not(self::m:msubsup) and not(self::m:power) and" + - " not(self::m:math) ] and " # rule out [x] standing alone + - "( IsBracketed(., '(', ')') or IsBracketed(., '[', ']') ) and " + - "not( $ClearSpeak_Functions = 'None' and " + - " (preceding-sibling::*[1][.='⁡'] or following-sibling::*[1][.='⁡']) ) and " + - "not( $ClearSpeak_ImpliedTimes = 'None' and " + - " (preceding-sibling::*[1][.='⁢'] or following-sibling::*[1][.='⁢']) ) and " + - "IsNode(*[2], 'simple') and" + - "not(preceding-sibling::*[1][.='\u2062' and @data-function-guess]) and" + - "not(ancestor-or-self::*[contains(@data-intent-property, ':literal:')])" + # missing clause: 'a positive fraction that is spoken as an ordinal + # (either by the Ordinal preference or by the default rules)' + replace: + - x: "*[2]" + +- include: "SharedRules/geometry.yaml" +- include: "SharedRules/linear-algebra.yaml" +- include: "SharedRules/general.yaml" +- include: "SharedRules/default.yaml" diff --git a/Rules/Languages/hu/SharedRules/calculus.yaml b/Rules/Languages/hu/SharedRules/calculus.yaml new file mode 100644 index 000000000..5a4b4af3d --- /dev/null +++ b/Rules/Languages/hu/SharedRules/calculus.yaml @@ -0,0 +1,56 @@ +--- + +- name: laplacian + tag: laplacian + match: "count(*) <= 1" # can be on ∇^2 or on enclosing mrow + replace: + - t: "LahPlahsian" # phrase('laplacian' of x) -- "LahPlahsian" sounds better with speech engines tested + - test: + if: "count(*) = 1" + then: + - test: + if: "$Verbosity!='Terse'" + then: [t: "of"] # phrase(function 'of' one variable) -- note OneCore voices spell out "div" + - test: + if: "not(IsNode(*[1], 'leaf'))" + then: [pause: short] + - x: "*[1]" + +- name: divergence + tag: divergence + match: "count(*) = 1" + replace: + - test: + if: "$Verbosity='Terse'" + then: [t: "dihv"] # phrase('div' is short for divergence) -- note OneCore voices spell out "div" + else: [t: "divergence of"] # phrase('divergence of' this function from the mean) + - test: + if: "not(IsNode(*[1], 'leaf'))" + then: [pause: short] + - x: "*[1]" + +- name: curl + tag: curl + match: "count(*) = 1" + replace: + - t: "curl" # phrase(the 'curl of' a field) + - test: + if: "$Verbosity!='Terse'" + then: [t: "of"] # phrase(function 'of' one variable) -- note OneCore voices spell out "div" + - test: + if: "not(IsNode(*[1], 'leaf'))" + then: [pause: short] + - x: "*[1]" + +- name: gradient + tag: gradient + match: "count(*) = 1" + replace: + - test: + if: "$Verbosity!='Terse'" + then: [t: "gradient of"] # phrase(the hill has a 'gradient of' five percent) + else: [t: "del"] # phrase(the delete key is labeled 'del') + - test: + if: "not(IsNode(*[1], 'leaf'))" + then: [pause: short] + - x: "*[1]" diff --git a/Rules/Languages/hu/SharedRules/default.yaml b/Rules/Languages/hu/SharedRules/default.yaml new file mode 100644 index 000000000..2a715c5a9 --- /dev/null +++ b/Rules/Languages/hu/SharedRules/default.yaml @@ -0,0 +1,725 @@ +--- +#default rules shared among several speech rules +- 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() + # should be set at mtable level, but unknown intents make that impossible to know + - IsColumnSilent: false() + replace: + - test: + if: "$MathRate = 100" + then: [x: "*"] + else: + - rate: + value: "$MathRate" + replace: [x: "*"] + +- name: empty-mrow + tag: mrow + match: "not(*)" + replace: + - t: " " # say nothing -- placeholder + +- name: default + tag: mrow + match: "." + replace: + - insert: + nodes: "*" + replace: [pause: auto] + +- name: default + tag: mn + match: "." + replace: + - bookmark: "@id" + - x: "translate(., $BlockSeparators, '')" # remove digit block separators + +- 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() != '_'" # need unicode.tdl to kick in for single letter tokens + then: [x: "text()"] + - else_if: "@data-chem-element" # NavMode=Character needs this + then: [spell: "text()", pause: "short"] + else: [x: "translate(., '-_\u00A0', ' ')"] # from intent literals or from extra spaces added (which get deleted) + +- name: default + tag: ms + match: "." + replace: + - t: "the string" # phrase('the string' is long) + - pause: short + - x: "text()" + +- name: default + tag: mstyle + match: "." + replace: [x: "*"] + + +- name: literal-simple + # don't include nested fractions. E.g, fraction a plus b over c + 1 end fraction" is ambiguous + # by simplistic SimpleSpeak's rules "b over c" is a fraction, but if we say nested fractions + # are never simple, then any 'over' applies only to enclosing "fraction...end fraction" pair. + tag: mfrac + match: + - "(IsNode(*[1],'leaf') and IsNode(*[2],'leaf')) and" + - "not(ancestor::*[name() != 'mrow'][1]/self::m:fraction)" # FIX: can't test for mrow -- what should be used??? + replace: + - x: "*[1]" + - t: "over" # phrase("the fraction x 'over' y") + - x: "*[2]" + - pause: short + +- name: literal-default + tag: mfrac + match: "." + replace: + - t: "start" # phrase("'start' fraction x over y end of fraction") + - pause: short + - x: "*[1]" + - test: + if: "not(IsNode(*[1],'leaf'))" + then: [pause: short] + - t: "over" # phrase("the fraction x 'over' y") + - test: + if: "not(IsNode(*[2],'leaf'))" + then: [pause: short] + - x: "*[2]" + - pause: short + - test: + if: "$Impairment = 'Blindness'" + then: [t: "end"] # phrase("start of fraction x over y 'end over'") + - pause: medium + + +# not sure what really should be said for these since we should not assume they are square roots +- name: literal-default + tag: msqrt + match: "." + replace: + - test: + if: "$Verbosity!='Terse'" + then: [t: "the"] # phrase("'the' root of x") + - t: "root" + - test: + if: "$Verbosity!='Terse'" + then: [t: "of"] # phrase("the root 'of' x") + - x: "*[1]" + - pause: short + - test: + if: "not(IsNode(*[1],'leaf')) or $Impairment = 'Blindness'" + then: [t: "end root", pause: medium] # phrase("root of x 'end root symbol'") + +# not sure what really should be said for these since we should not assume they are square roots +- name: literal-default + tag: mroot + match: "." + replace: + - test: + if: "$Verbosity!='Terse'" + then: [t: "the"] # phrase("'the' root of x") + - t: "root with index" # phrase("the 'root with index' 3 of 5") + - x: "*[1]" + - pause: short + - t: "of" # phrase("the root 'of' x") + - x: "*[2]" + - pause: short + - test: + if: "not(IsNode(*[2],'leaf'))" + then: [t: "end root symbol"] # phrase("root of x 'end root symbol'") + + +- name: simple-sub + tag: indexed-by + # invisible comma -- want "x 1 when subscript is an integer" + 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: "sub" # phrase(x 'sub' 2) + - x: "*[2]" + - pause: short + +- name: power-indexed-by + tag: power-indexed-by + match: "." + replace: + - x: "*[1]" + - t: "sub" # phrase(x 'sub' 2) + - x: "*[2]" + - pause: short + +# otherwise let definitions/default infix handle it + +- name: literal + tag: msub + match: "." + replace: + - x: "*[1]" + - test: + if: "not($Verbosity='Terse' and *[2][self::m:mn and not(translate(., '.,', '')!=.)])" # just say "x 1" for terse vs "x sub 1" + then: [t: "sub"] # phrase(x 'sub' 2) + - x: "*[2]" + + +- name: literal + tag: [msup, msubsup] + match: "." + replace: + - x: "*[1]" + - test: + if: "name(.)='msubsup'" + then: + - t: "sub" # phrase(x 'sub' 2) + - x: "*[2]" + - test: + if: "*[last()][translate(., '′″‴⁗†‡°*', '')='']" + then: [x: "*[last()]"] + else_test: + if: "ancestor-or-self::*[contains(@data-intent-property, ':literal:')]" # FIX: is this test necessary? + then: + - t: "super" # phrase(x 'super' 2) + - x: "*[last()]" + - test: + if: "not(IsNode(*[last()], 'simple')) or $Impairment = 'Blindness'" + then: [t: "end super"] # phrase(x super 2 'end of super') + else: + - test: + if: "$Verbosity='Verbose'" + then: [t: "superscript"] + else: [t: "super"] + - x: "*[last()]" + - test: + if: "$Verbosity='Verbose'" + then: [t: "end superscript"] + else: [t: "end super"] + +- name: default + tag: munder + match: "." + replace: + - test: + if: "not(IsNode(*[1], 'leaf'))" + then: [t: "quantity"] # phrase(phrase(x 'quantity' with y above it) + - x: "*[1]" + - t: "with" # phrase(x 'with' z below it) + - x: "*[2]" + - t: "below" # phrase(x with z 'below' it) + +- 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: "quantity"] # phrase(phrase(the 'quantity' x plus 1 with y above it) + - x: "*[1]" + - t: "with" # phrase(x modified 'with' y above it) + - x: "*[2]" + - t: "above" # phrase(x modified 'with' y above it) + +- name: default + tag: munderover + match: "." + replace: + - test: + if: "not(IsNode(*[1], 'leaf'))" + then: [t: "quantity"] # phrase(the 'quantity' x plus 1 with y above it) + - x: "*[1]" + - t: "with" # phrase(x modified 'with' y above it) + - x: "*[2]" + - t: "below and" # phrase(x modified with y 'below and' y above it) + - x: "*[3]" + - t: "above" # phrase(x modified with y 'above' it) + +- name: default + # Here we support up to 2 prescripts and up to 4 postscripts -- that should cover all reasonable cases + # If there are more, we just dump them out without regard to sup/super :-( + # FIX: this could use more special cases + # There is (currently) no way in MathCAT to deal with n-ary arguments other than "all" ('*') or an individual entry ('*[1]'). + tag: mmultiscripts + match: "." + variables: + # computing the number of postscripts is messy because of being optionally present -- we use "mod" to get the count right + - Prescripts: "m:mprescripts/following-sibling::*" + - NumChildren: "count(*)" # need to stash this since the count is wrong inside '*[...]' below + - Postscripts: "*[position()>1 and position() < (last() + ($NumChildren mod 2) -count($Prescripts))]" + replace: + - x: "*[1]" + - test: + if: "$Prescripts" # more common case + then: + - with: + variables: + - PreSubscript: "IfThenElse($Verbosity='Verbose', 'pre subscript', 'pre sub')" + - PreSuperscript: "IfThenElse($Verbosity='Verbose', 'pre superscript', 'pre super')" + replace: + - test: # only bother announcing if there is more than one prescript + if: "count($Prescripts) > 2" + then: + - t: "with" # phrase(substitute x 'with' y) + - x: "count($Prescripts) div 2" + - t: "prescripts" # phrase(in this equation certain 'prescripts' apply) + - 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: "and"] # phrase(10 is greater than 8 'and' less than 15) + - test: + if: "not($Prescripts[2][self::m:none])" + then: + - x: "$PreSuperscript" + - x: "$Prescripts[2]" + - pause: short + - test: + if: "count($Prescripts) > 2" # more common case + 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: "and"] # phrase(10 is grater than 8 'and' less than 15) + - test: + if: "not($Prescripts[4][self::m:none])" + then: + - x: "$PreSuperscript" + - x: "$Prescripts[4]" + - test: + if: "count($Prescripts) > 4" # give up and just dump them out so at least the content is there + then: + - t: "and alternating prescripts" # phrase(in this case there are values 'and alternating prescripts') + - x: "$Prescripts[position() > 4]" + - t: "end prescripts" # phrase(This is where 'end prescripts' occurs) + - test: + if: "$Postscripts" + then: + - with: + variables: + - PostSubscript: "IfThenElse($Verbosity='Verbose', 'subscript', 'sub')" + - PostSuperscript: "IfThenElse($Verbosity='Verbose', 'superscript', 'super')" + replace: + - test: # only bother announcing if there is more than one postscript + if: "count($Postscripts) > 2" + then: + - test: + if: "$Prescripts" + then: [t: "and"] # phrase(10 is greater than 8 'and' less than 15) + - t: "with" # phrase(substitute x 'with' y) + - x: "count($Postscripts) div 2" + - t: "postscripts" # phrase(this material includes several 'postscripts') + - 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: "and"] # phrase(10 is greater than 8 'and' less than 15) + - 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: "and"] # phrase(10 is greater than 8 'and' less than 15) + - 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: "and"] # phrase(10 is greater than 8 'and' less than 15) + - 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: "and"] # phrase(10 is less than 15 'and' greater than 5) + - test: + if: "not($Postscripts[8][self::m:none])" + then: + - x: "$PostSuperscript" + - x: "$Postscripts[8]" + - test: + if: "count($Postscripts) > 8" # give up and just dump them out so at least the content is there + then: + - t: "and alternating scripts" # phrase(this situation involves complexities 'and alternating scripts') + - x: "$Postscripts[position() > 8]" + - t: "end scripts" # phrase(At this point 'end scripts' occurs) + +- name: default + tag: mtable + variables: + - IsColumnSilent: "false()" + - NumColumns: "count(*[1]/*) - IfThenElse(*/self::m:mlabeledtr, 1, 0)" + match: "." + replace: + - t: "table with" # phrase(the 'table with' 3 rows) + - x: count(*) + - test: + if: count(*)=1 + then: [t: "row"] # phrase(the table with 1 'row') + else: [t: "rows"] # phrase(the table with 3 'rows') + - t: "and" # phrase(the table with 3 rows 'and' 4 columns) + - x: "$NumColumns" + - test: + if: "NumColumns=1" + then: [t: "column"] # phrase(the table with 3 rows and 1 'column') + else: [t: "columns"] # phrase(the table with 3 rows and 4 'columns') + - pause: long + - x: "*" + +- name: default + # callers/context should do that. + # this may get called from navigation -- in that case, there is no context to speak the row #, so don't do it + tag: [mtr, mlabeledtr] + match: "." + replace: + - pause: medium + - t: "row" # phrase(the first 'row' of a matrix) + - x: "count(preceding-sibling::*)+1" + - test: + if: "self::m:mlabeledtr" + then: + - t: "with label" # phrase(the line 'with label' first equation) + - x: "*[1]/*" + - pause: short + - pause: medium + - test: + if: "self::m:mlabeledtr" + then: [x: "*[position()>1]"] + else: [x: "*"] + +- name: default + tag: mtd + match: "." + replace: + - test: + # ClearSpeak normally speaks "column 1" even though it says the row number, which is a waste... + # The following is commented out but the count(...)!=0 probably belongs in other rule sets + # if: not($IsColumnSilent) and ($ClearSpeak_Matrix = 'SpeakColNum' or count(preceding-sibling::*) != 0) + if: "not($IsColumnSilent)" + then: + - t: "column" # phrase(the first 'column' of the matrix) + - x: "count(preceding-sibling::*)+IfThenElse(parent::m:mlabeledtr, 0, 1)" + - pause: medium + - x: "*" + - test: + # short pause after each element; medium pause if last element in a row; long pause for last element in matrix + - if: count(following-sibling::*) > 0 + then: [pause: short] + - else_if: count(../following-sibling::*) > 0 + then: [pause: medium] + else: [pause: long] + + +- name: empty-box + # The ordering below is the order in which words come out when there is more than one value + # Note: @notation can contain more than one value + tag: menclose + match: "@notation='box' and *[self::m:mtext and .=' ']" + replace: + - t: "empty box" # phrase(the 'empty box' contains no values) + +- name: default + # The ordering below is the order in which words come out when there is more than one value + # Note: @notation can contain more than one value + tag: menclose + match: "." + replace: + - test: + if: ".[contains(concat(' ', normalize-space(@notation), ' '), ' box ')]" + then: [t: "box", pause: short] # phrase(the 'box' around the expression) + - test: + if: ".[contains(@notation,'roundedbox')]" + then: [t: "round box", pause: short] # phrase(the 'round box' around the expression) + - test: + if: ".[contains(@notation,'circle')]" + then: [t: "circle", pause: short] # phrase(the 'circle' around the expression) + - 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: "line on" # phrase(draw a straight 'line' on the page) + - test: + if: ".[contains(concat(' ', normalize-space(@notation), ' '), ' left ')]" + then: [t: "left", pause: short] # phrase(line on 'left' of the expression) + - test: + if: ".[contains(concat(' ', normalize-space(@notation), ' '), ' right ')]" + then: [t: "right", pause: short] # phrase(line on 'right' of the expression) + - test: + if: ".[contains(@notation,'top')]" + then: [t: "top", pause: short] # phrase(line on 'top' of the expression) + - test: + if: ".[contains(@notation,'bottom')]" + then: [t: "bottom", pause: short] # phrase(line on the 'bottom' of the expression) + - 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] # seems better to say 'x cross out' than 'up diagonal, down diagonal cross out' + else: + - test: + if: ".[contains(@notation,'updiagonalstrike')]" + then: [t: "up diagonal", pause: short] # phrase(the line runs 'up diagonal') + - test: + if: ".[contains(@notation,'downdiagonalstrike')]" + then: [t: "down diagonal", pause: short] # phrase(the line runs 'down diagonal') + - test: + if: ".[contains(@notation,'verticalstrike')]" + then: [t: "vertical", pause: short] # phrase(the line is 'vertical') + - test: + if: ".[contains(@notation,'horizontalstrike')]" + then: [t: "horizontal", pause: short] # phrase(the line is 'horizontal') + - t: "cross out" # phrase(please 'cross out' the incorrect answer) + - pause: short + - test: + if: ".[contains(@notation,'uparrow')]" + then: [t: "up arrow", pause: short] # phrase(direction is shown by the 'up arrow') + - test: + if: ".[contains(concat(' ', normalize-space(@notation), ' '), ' downarrow ')]" + then: [t: "down arrow", pause: short] # phrase(the trend is shown by the 'down arrow') + - test: + if: ".[contains(@notation,'leftarrow')]" + then: [t: "left arrow", pause: short] # phrase(the 'left arrow' indicates going back) + - test: + if: ".[contains(concat(' ', normalize-space(@notation), ' '), ' rightarrow ')]" + then: [t: "right arrow", pause: short] # phrase(the 'right arrow' indicates moving forward) + - test: + if: ".[contains(@notation,'northeastarrow')]" + then: [t: "northeast arrow", pause: short] # phrase(direction is indicated by the 'northeast arrow') + - test: + if: ".[contains(concat(' ', normalize-space(@notation), ' '), ' southeastarrow ')]" + then: [t: "southeast arrow", pause: short] # phrase(direction is shown by the 'southeast arrow') + - test: + if: ".[contains(concat(' ', normalize-space(@notation), ' '), ' southwestarrow ')]" + then: [t: "southwest arrow", pause: short] # phrase(direction is shown by the 'southwest arrow') + - test: + if: ".[contains(@notation,'northwestarrow')]" + then: [t: "northwest arrow", pause: short] # phrase(direction is shown by the 'northwest arrow') + - test: + if: ".[contains(@notation,'updownarrow')]" + then: [t: "double ended vertical arrow", pause: short] # phrase(upward movement is indicated by the 'double ended vertical arrow') + - test: + if: ".[contains(@notation,'leftrightarrow')]" + then: [t: "double ended horizontal arrow", pause: short] # phrase(progress is indicated by the 'double ended horizontal arrow') + - test: + if: ".[contains(@notation,'northeastsouthwestarrow')]" + then: [t: "double ended up diagonal arrow", pause: short] # phrase(trend is indicated by the 'double ended up diagonal arrow') + - test: + if: ".[contains(@notation,'northwestsoutheastarrow')]" + then: [t: "double ended down diagonal arrow", pause: short] # phrase(trend is indicated by the 'double ended down diagonal arrow') + - test: + if: ".[contains(@notation,'actuarial')]" + then: [t: "actuarial symbol", pause: short] # phrase(the 'actuarial symbol' represents a specific quantity) + - test: + if: ".[contains(@notation,'madrub')]" + then: [t: "arabic factorial symbol", pause: short] # phrase(the 'arabic factorial symbol' represents a factorial operation) + - test: + if: ".[contains(@notation,'phasorangle')]" + then: [t: "phasor angle", pause: short] # phrase(the 'phasor angle' is used to measure electrical current) + - test: + if: ".[contains(@notation,'longdiv') or not(@notation) or normalize-space(@notation) ='']" # default + then: [t: "long division symbol", pause: short] # phrase(the 'long division symbol' indicates a long division calculation) + - test: + if: ".[contains(@notation,'radical')]" + then: [t: "square root", pause: short] # phrase(5 is the 'square root' of 25) + - t: "enclosing" # phrase(parentheses are 'enclosing' part of the equation) + - test: + if: "*[self::m:mtext and .=' ']" + then: [t: "space"] # otherwise there is complete silence # phrase(there is a 'space' between the words) + else: [x: "*"] + - test: + if: "$Impairment = 'Blindness' and ( $SpeechStyle != 'SimpleSpeak' or not(IsNode(*[1], 'leaf')) )" + then: [t: "end enclosure"] # phrase(reached the 'end enclosure' point) + - 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: "of" # phrase(the sine 'of' x ) + - pause: auto + - x: "*[position() > 1]" + +# Here are the intent hints that need to be handled: 'prefix' | 'infix' | 'postfix' | 'function' | 'silent' +- name: silent-intent + # uncaught intent -- the args have been inserted in the order of speech + 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 + # uncaught intent -- the args have been inserted in the order of speech + 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 + # uncaught intent -- the args have been inserted in the order of speech + 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 + # uncaught intent -- the args have been inserted in the order of speech + 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" # in cases such as continued-row, plus/minus might have just one child + 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')" # add (probably) a slightly longer pause if this came from a 2D node + then: [pause: short] + else: [pause: auto] + +- name: function-intent + # uncaught intent -- speak as foo of arg1 comma arg2 .... The MathML spec requires arguments to functions + 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: "of", pause: auto] # phrase(sine 'of' 5) + - insert: + nodes: "*" + replace: + - test: + if: "not(contains(@data-intent-property, ':literal:'))" + then: [x: "','"] + - pause: auto + - test: + # speak "end ..." if not bracketed or last child is not simple and not last node + 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 + # unknown leaf -- just speak the text -- could be a literal intent + tag: "*" + match: "." + replace: + - x: "translate(name(), '-_', ' ')" diff --git a/Rules/Languages/hu/SharedRules/general.yaml b/Rules/Languages/hu/SharedRules/general.yaml new file mode 100644 index 000000000..d6feca1dc --- /dev/null +++ b/Rules/Languages/hu/SharedRules/general.yaml @@ -0,0 +1,1078 @@ +--- + +# number-sets are a little messy in that the base was converted to a number-set, so we have to match that (simple) case last +- name: pos-neg-number-sets + tag: number-sets + match: "count(*)=2 and *[2][.='+' or .='-']" + replace: + - test: + if: "$Verbosity!='Terse'" + then: + - t: "the" # phrase('the' square root of 25 equals 5) + - bookmark: "*[2]/@id" + - test: + - if: "*[2][.='+']" + then: [t: "positive"] # phrase(set of all 'positive' integers less than 10) + else: [t: "negative"] # phrase(set of all 'negative' integers less than minus 10) + - bookmark: "*[1]/@id" + - test: + - if: "*[1][.='ℂ']" + then: [t: "complex numbers"] # phrase('complex numbers' consist of two parts) + - else_if: "*[1][.='ℕ']" + then: [t: "natural numbers"] # phrase('natural numbers' are numbers from 1 to infinity) + - else_if: "*[1][.='ℚ']" + then: [t: "rational numbers"] # phrase('rational numbers' are the fraction of 2 integers) + - else_if: "*[1][.='ℝ']" + then: [t: "real numbers"] # phrase('real numbers' can be both positive and negative) + - else_if: "*[1][.='ℤ']" + then: [t: "integers"] # phrase(positive 'integers' are natural numbers above 0) + else: [x: "*[1][text()]"] # shouldn't happen + +- name: dimension-number-sets + + # should be single digit integer at this point (e.g, R^3) + tag: number-sets + match: "count(*)=2" + replace: + - bookmark: "*[1]/@id" + - test: + - if: "*[1][.='ℂ']" + then: [t: "C"] # phrase(the letter 'C' used to represent complex number) + - else_if: "*[1][.='ℕ']" + then: [t: "N"] # phrase(the letter 'N' may represent natural numbers) + - else_if: "*[1][.='ℚ']" + then: [t: "Q"] # phrase(the letter 'Q' may represent rational numbers) + - else_if: "*[1][.='ℝ']" + then: [t: "R"] # phrase(the letter 'R' may represent real numbers) + - else_if: "*[1][.='ℤ']" + then: [t: "Z"] # phrase(the letter 'Z' may represent integers) + else: [x: "*[1][text()]"] # shouldn't happen + - bookmark: "*[2]/@id" + - x: "*[2]" + +- name: simple-number-sets + tag: number-sets + match: "count(*)=0" + replace: + - bookmark: "@id" + - test: + - if: ".='ℂ'" + then: [t: "the complex numbers"] # phrase('the complex numbers' include 2 parts) + - else_if: ".='ℕ'" + then: [t: "the natural numbers"] # phrase('the natural numbers' begin at 1) + - else_if: ".='ℚ'" + then: [t: "the rational numbers"] # phrase('the rational numbers' are the fraction of 2 integers) + - else_if: ".='ℝ'" + then: [t: "the real numbers"] # phrase('the real numbers' can be both positive and negative) + - else_if: ".='ℤ'" + then: [t: "the integers"] # phrase('the integers' are natural numbers above 0) + else: [x: "text()"] # shouldn't happen + +- name: real-part + tag: real-part + match: "." + replace: + - bookmark: "@id" + - t: "the real part" # phrase('the real part' of a complex number does not include the imaginary part) + +- name: imaginary-part + tag: imaginary-part + match: "." + replace: + - bookmark: "@id" + - t: "the imaginary part" # phrase('the imaginary part' is part of a complex number) + +# rules on scripted vertical bars ('evaluated at') +- name: evaluated-at-2 + tag: evaluate + match: "count(*)=2" + replace: + - x: "*[1]" + - pause: auto + - t: "evaluated at" # phrase(results were 'evaluated at' a given point) + - pause: auto + - x: "*[2]" + +- name: evaluated-at-3 + tag: evaluate + match: "count(*)=3" + replace: + - x: "*[1]" + - pause: auto + - t: "evaluated at" # phrase(results were 'evaluated at' this point) + - pause: auto + - x: "*[3]" + - t: "minus the same expression evaluated at" # phrase(this result is 'minus the same expression evaluated at' an earlier point) + - x: "*[2]" + +- name: permutation + # Not a default because the order of the args is reversed + tag: pochhammer + match: "count(*)=2 and contains(@data-intent-property, ':infix:')" + replace: + - x: "*[2]" + - t: "permutations of" # phrase(the solution involves several 'permutations of' values) + - x: "*[1]" + +- name: intervals + tag: [open-interval, open-closed-interval, closed-interval, closed-open-interval] + match: "count(*)=2" + replace: + - test: + if: "$Verbosity!='Terse'" + then: + - t: "the" # phrase('the' square root of 25 equals 5) + - x: "translate(name(.),'-', ' ')" + - test: + if: "$Verbosity!='Terse'" + then: + - t: "from" # phrase(subtracting 5 'from' 10 gives 5) + - x: "*[1]" + - t: "to" # phrase(adding 6 'to' 6 equals 12) + - x: "*[2]" + else: + - x: "*[1]" + - t: "comma" # phrase(use a 'comma' to divide large numbers or as a decimal point) + - x: "*[2]" + +- name: default-point + tag: point + match: "count(*)=2" + replace: + - test: + if: "$Verbosity!='Terse'" + then: + - t: "the" # phrase('the' square root of 25 equals 5) + - t: "point" # phrase(a decimal 'point' indicates the fraction component of a number) + - x: "*[1]" + - t: "comma" # phrase(use a 'comma' to divide large numbers or as a decimal point) + - x: "*[2]" + +- name: bigop-both + tag: large-op + match: "count(*) = 3" + replace: + - test: + if: "$Verbosity!='Terse'" + then: [t: "the"] # phrase('the' square root of 25 equals 5) + - x: "*[1]" + - t: "from" # phrase(subtracting 5 'from' 10 gives 5) + - x: "*[2]" + - pause: short + - t: "to" # phrase(adding 6 'to' 6 equals 12) + - x: "*[3]" + - test: + if: "following-sibling::*" + then: [t: "of"] # phrase(the square root 'of' 25 equals 5) + +- name: bigop-under + tag: large-op + match: "count(*)=2" + replace: + - test: + if: "$Verbosity!='Terse'" + then: [t: "the"] # phrase('the' square root of 25 equals 5) + - x: "*[1]" + - t: "over" # phrase(2 'over' 3 equals two thirds) + - x: "*[2]" + - test: + if: "following-sibling::*" + then: [t: "of"] # phrase(the square root 'of' 25 equals 5) + +- name: largeop + tag: mrow + match: "count(*)=2 and IsInDefinition(*[1], 'LargeOperators')" + replace: + - test: + if: "$Verbosity!='Terse'" + then: [t: "the"] # phrase('the' square root of 25 equals 5) + - x: "*[1]" + - t: "of" # phrase(the square root 'of' 25 equals 5) + - x: "*[2]" + +- name: repeating-decimal + tag: repeating-decimal + match: "." + replace: + - x: "*[1]" + - t: "with repeating digits" # phrase('with repeating digits') + - spell: "*[2]" + +- name: msubsup-skip-super + # handles single, double, etc., prime + tag: [skip-super, say-super] + match: "count(*)=3" + replace: + - x: "*[1]" + - test: + if: "$Verbosity='Verbose'" + then: [t: "subscript"] # phrase(a 'subscript' may be used to indicate an index) + else: [t: "sub"] # phrase(the result is 'sub' optimal) + - x: "*[2]" + - test: + if: "not(IsNode(*[2],'leaf') and $Impairment = 'Blindness')" + then: + - test: + if: "$Verbosity='Verbose'" + then: [t: "end subscript"] # phrase(this is the 'end subscript' position) + else: [t: "end sub"] # phrase(this is the 'end sub' position) + - pause: short + else_test: + if: "*[2][self::m:mi]" # need a pause in "x sub k prime" so the prime is not associated with the 'k' + then: [pause: short] + - test: + if: "name(.)='say-super'" + then_test: + if: "$Verbosity='Verbose'" + then: [t: "superscript"] # phrase(a 'superscript' number indicates raised to a power) + else: [t: "super"] # phrase(this is a 'super' set of numbers) + - x: "*[3]" + - pause: short + +# in terse mode, we just say "m" or "s", etc., not meters or seconds +- name: unit-terse + tag: unit + match: "$Verbosity = 'Terse' and string-length(.)=1" + replace: + - bookmark: "@id" + - spell: "text()" + +# the order of matching is +# 1. does it match the base of an SI unit +# 2. does it match an English unit (if in an English language) +# 3. does it match an SI prefix followed by an SI that accepts SI prefixes +# Due to this order, some things like "ft" and "cd" mean "feet" vs "femto-tonnes" and "pints" vs "pico-tonnes" +- name: unit + tag: unit + match: "." + variables: + # If the coefficient is singular, we don't add the plural ending. Finding the coefficient is tricky + # Normal case (A) "3m" (parents is mrow), but could also be (B) "3 m^2" (etc.) (parent is power/mrow) + # But it might be in a fraction as (C) "3 m/s" (parent is fraction/mrow) or (D) "3 m^2/s^2" (parent is power/fraction/mrow) + # or even (E) {3 m^2}/s (parent is power/mrow) + # If in a fraction, only look in the numerator to find the coefficient + # Note: we have a special case for pseudo-scripts like "°" (degrees) which are not powers -- they are essentially "1^°" + # The following "IfThenElse" logic returns the mrow that potentially contains the coefficient, if it exists + # The tests are in the order A, B & E, C, D + - MRowForCoefficient: "IfThenElse(parent::m:mrow, parent::m:mrow, + IfThenElse(parent::m:power, ancestor::*[2][self::m:mrow], + IfThenElse(parent::m:fraction and not(preceding-sibling::*), ancestor::*[2][self::m:mrow], + IfThenElse(parent::m:power[parent::m:fraction and not(preceding-sibling::*)], ancestor::*[3][self::m:mrow], false()) ) ) )" + - IsSingular: "(not($MRowForCoefficient) and parent::*[name(.)!='skip-super' or *[1][.=1]]) or + ($MRowForCoefficient and $MRowForCoefficient[(count(*) = 3 and *[1][self::m:mn and .=1] and *[2]='\u2062')])" + - Prefix: "''" + - Word: "''" + replace: + - bookmark: "@id" + - test: + # is the whole string match a SI Unit without a prefix? + - if: "DefinitionValue(., 'Speech', 'SIUnits') != ''" + then: + - set_variables: [Word: "DefinitionValue(., 'Speech', 'SIUnits')"] + - else_if: "DefinitionValue(., 'Speech', 'UnitsWithoutPrefixes') != ''" + then: + - set_variables: [Word: "DefinitionValue(., 'Speech', 'UnitsWithoutPrefixes')"] + - else_if: "DefinitionValue(., 'Speech', 'EnglishUnits') != ''" + then: + - set_variables: [Word: "DefinitionValue(., 'Speech', 'EnglishUnits')"] + + # do the first two chars match "da" and the remainder match an SIUnit + - else_if: "string-length(.) >= 3 and + substring(., 1, 2) = 'da' and + DefinitionValue(substring(., 3), 'Speech', 'SIUnits') != ''" + then: + - set_variables: + - Prefix: "DefinitionValue('da', 'Speech', 'SIPrefixes')" + - Word: "DefinitionValue(substring(., 3), 'Speech', 'SIUnits')" + + # does the first char match a prefix and the remainder match an SIUnit + - else_if: "string-length(.) >= 2 and + DefinitionValue(substring(., 1, 1), 'Speech', 'SIPrefixes') != '' and + DefinitionValue(substring(., 2), 'Speech', 'SIUnits') != ''" + then: + - set_variables: + - Prefix: "DefinitionValue(substring(., 1, 1), 'Speech', 'SIPrefixes')" + - Word: "DefinitionValue(substring(., 2), 'Speech', 'SIUnits')" + + # not a known unit -- just speak the text, possibly as a plural + - else: + - set_variables: + - Word: "text()" + + # somewhat complicated logic to avoid spaces around "-" as in "centi-grams" vs "centi - grams" -- probably doesn't matter + - test: + if: "$Prefix = ''" + then: + - test: + - if: "$IsSingular" + # HACK: '\uF8FE' is used internally for the concatenation char by 'ct' -- this gets the prefix concatenated to the base + then: [x: "$Word"] + - else_if: "DefinitionValue($Word, 'Speech', 'PluralForms') != ''" + then: [x: "DefinitionValue($Word, 'Speech', 'PluralForms')"] + else: [x: "$Word", ct: "s"] + else: + - x: "$Prefix" + - ct: "-" + - test: + - if: "$IsSingular" + # HACK: '\uF8FE' is used internally for the concatenation char by 'ct' -- this gets the prefix concatenated to the base + then: [x: "concat('\uF8FE', $Word)"] + - else_if: "DefinitionValue($Word, 'Speech', 'PluralForms') != ''" + then: [x: "concat('\uF8FE', DefinitionValue($Word, 'Speech', 'PluralForms'))"] + else: [x: "concat('\uF8FE', $Word)", ct: "s"] + +# need to reverse the order of speech: $ 3 -> 3 dollars +- name: currency + tag: mrow + match: "count(*)=3 and DefinitionValue(*[1], 'Speech', 'CurrencySymbols') != ''" + variables: + # If the amount is singular, we don't add the plural ending. + - IsSingular: "*[3][self::m:mn and .=1] and *[2]='\u2062'" + replace: + - bookmark: "*[3]/@id" + - x: "*[3]" + - test: + - if: "$IsSingular" + then: [x: "DefinitionValue(*[1], 'Speech', 'CurrencySymbols')"] + - else_if: "DefinitionValue(*[1], 'Speech', 'PluralForms') != ''" + then: [x: "DefinitionValue(*[1], 'Speech', 'PluralForms')"] + else: [x: "DefinitionValue(*[1], 'Speech', 'CurrencySymbols')", ct: "s"] + + +- name: sin + tag: mi + match: ".='sin'" + replace: + - bookmark: "@id" + - t: "sine" # phrase(the 'sine' of the angle) +- name: cos + tag: mi + match: ".='cos'" + replace: + - bookmark: "@id" + - test: + if: "$Verbosity='Terse'" + then: [t: "cos"] # phrase('cos' is the abbreviation for cosine) + else: [t: "cosine"] # phrase(find the 'cosine' in a right-angle triangle) +- name: tan + tag: mi + match: ".='tan' or .='tg'" + replace: + - bookmark: "@id" + - test: + if: "$Verbosity='Terse'" + then: [t: "tan"] # phrase(the 'tan' is the ratio of the opposite to the adjacent side of a right-angled triangle) + else: [t: "tangent"] # phrase(a 'tangent' is a straight line that touches a curve) +- name: sec + tag: mi + match: ".='sec'" + replace: + - bookmark: "@id" + - test: + if: "$Verbosity='Terse'" + then: [t: "seek"] # phrase(to 'seek' a solution) + else: [t: "secant"] # phrase(a 'secant' intersects a curve at two or more points) +- name: csc + tag: mi + match: ".='csc'" + replace: + - bookmark: "@id" + - test: + if: "$Verbosity='Terse'" + then: [t: "coseek"] # phrase(we will 'cosecant' a solution) + else: [t: "cosecant"] # phrase(the 'cosecant' is the reciprocal of the secant) +- name: cot + tag: mi + match: ".='cot'" + replace: + - bookmark: "@id" + - test: + if: "$Verbosity='Terse'" + then: [t: "cotan"] # phrase(find the 'cotangent' in a right-angle triangle) + else: [t: "cotangent"] # phrase(the 'cotangent' is the reciprocal of the tangent) + +- name: sinh + tag: mi + match: ".='sinh'" + replace: + - bookmark: "@id" + - test: + if: "$Verbosity='Terse'" + then: [t: "sinch"] # phrase(the word 'sinch' is an abbreviation for hyperbolic sine) + else: [t: "hyperbolic sine"] # phrase(the 'hyperbolic sine' is used in mathematics) +- name: cosh + tag: mi + match: ".='cosh'" + replace: + - bookmark: "@id" + - test: + if: "$Verbosity='Terse'" + then: [t: "cosh"] # phrase('cosh' is an abbreviation of hyperbolic cosine) + else: [t: "hyperbolic cosine"] # phrase(the 'hyperbolic cosine' is a mathematical function) +- name: tanh + tag: mi + match: ".='tanh'" + replace: + - bookmark: "@id" + - test: + if: "$Verbosity='Terse'" + then: [t: "tanch"] # phrase('tanch' is shorthand for hyperbolic tangent) + else: [t: "hyperbolic tangent"] # phrase('hyperbolic tangent' is a mathematical function) +- name: sech + tag: mi + match: ".='sech'" + replace: + - bookmark: "@id" + - test: + if: "$Verbosity='Terse'" + then: [t: "sheck"] # phrase('sheck' is shorthand for hyperbolic secant) + else: [t: "hyperbolic secant"] # phrase('hyperbolic secant' is a mathematical function) +- name: csch + tag: mi + match: ".='csch'" + replace: + - bookmark: "@id" + - test: + if: "$Verbosity='Terse'" + then: [t: "cosheck"] # phrase('cosheck' is shorthand for hyperbolic cosecant) + else: [t: "hyperbolic cosecant"] # phrase('hyperbolic cosecant' is a mathematical function) +- name: coth + tag: mi + match: ".='coth'" + replace: + - bookmark: "@id" + - test: + if: "$Verbosity='Terse'" + then: [t: "cotanch"] # phrase('cotanch' is shorthand for hyperbolic cotangent) + else: [t: "hyperbolic cotangent"] # phrase(the 'hyperbolic cotangent' is a mathematical function) +- name: exponential + tag: mi + match: ".='exp'" + replace: + - bookmark: "@id" + - test: + if: "$Verbosity='Terse'" + then: [t: "exp"] # phrase('exp' means exponential function) + else: [t: "exponential"] # phrase('exponential' function) +- name: covariance + tag: mi + match: ".='Cov'" + replace: + - bookmark: "@id" + - test: + if: "$Verbosity='Terse'" + then: [t: "Cov"] # phrase('Cov' is shorthand for the covariance function) + else: [t: "covariance"] # phrase('covariance' function) + +- + name: log # handle both log and ln (if in an mrow, 'intents' are used) + tag: mi + match: ".='log' or .='ln'" + replace: + - bookmark: "@id" + - test: + - if: "$Verbosity!='Terse'" + then: [t: "the"] # phrase('the' logarithm function is used in mathematics) + - test: + - if: ".= 'log'" + then: [t: "log"] # phrase(the 'log' function is used in mathematics) + - else_if: "$Verbosity='Terse'" + then: [spell: "'ln'"] + else: [t: "natural log"] # phrase(the 'natural log' function is used in mathematics) + + +- name: multi-line + # that eliminates the need for the if: else_if: ... + # IDEA: set a variable with the word to say for the row (e.g., RowLabel = Row/Case/Line/...) + tag: [piecewise, system-of-equations, lines] + match: "." + variables: + # Wikipedia has some tables where all the entire first column is empty (e.g., https://en.wikipedia.org/wiki/List_of_trigonometric_identities) + - LineCount: "count(*[not(contains(@data-intent-property, ':continued-row:'))])" + - NextLineIsContinuedRow: "false()" # default value + - IsColumnSilent: true() + replace: + - x: "$LineCount" + - test: + - if: "self::m:piecewise" + then: [t: "case"] # phrase(this is the first 'case' of three cases) + - else_if: "self::m:system-of-equations" + then: [t: "equation"] # phrase(this is the first 'equation' of three equations) + else: [t: "line"] # phrase(this is the first 'line' of three lines) + - test: + - if: "$LineCount != 1" + then: [ct: "s"] # plural + - pause: short + - x: "*" + - pause: long + + +- name: default-multiline + tag: [mtr, mlabeledtr] + match: "parent::m:piecewise or parent::m:system-of-equations or parent::m:lines" + variables: [NextLineIsContinuedRow: "following-sibling::*[1][contains(@data-intent-property, ':continued-row:')]"] + replace: + - test: + if: "not($LineCount=1 or contains(@data-intent-property, ':continued-row:'))" + then: + - pause: medium + - test: + - if: "parent::m:piecewise" + then: [t: "case"] # phrase('case' 1 of 10 cases) + - else_if: "parent::m:system-of-equations" + then: [t: "equation"] # phrase('equation' 1 of 10 equations) + else: [t: "line"] # phrase('line 1 of 10 lines) + - x: "count(preceding-sibling::*[not(contains(@data-intent-property, ':continued-row:'))]) + 1" + - test: + if: "self::m:mlabeledtr" + then: + - t: "with label" # phrase(the diagram is complete 'with label') + - x: "*[1]/*" + - test: + if: "not(contains(@data-intent-property, ':continued-row:'))" + then: [pause: medium] + - test: + if: "self::m:mlabeledtr" + then: [x: "*[position()>1]"] + else: [x: "*"] + +- name: default-multiline + tag: mtd + match: "parent::*[parent::m:piecewise or parent::m:system-of-equations or parent::m:lines]" + variables: [LongPause: "$SpeechStyle = 'ClearSpeak' and $ClearSpeak_MultiLinePausesBetweenColumns = 'Long'"] + replace: + - test: + if: "IsInDefinition(*[1], 'ComparisonOperators')" + then: [pause: short] + - test: + if: "*[1][@data-added!='missing-content']" + then: [x: "*"] + - test: + # no pause after each element; medium pause if last element in a row; long pause for last element in matrix unless ClearSpeak override + - if: "count(following-sibling::*) = 0 and not($NextLineIsContinuedRow)" + then_test: + if: "count(../following-sibling::*) > 0" + then_test: + if: "$LongPause" + then: [pause: long] + else: [pause: medium] + else_test: + if: "IsInDefinition(*[1], 'ComparisonOperators')" + then: [pause: short] + else: [pause: auto] + +# Matrix/Determinant rules +# matrix and determinant are the same other than "matrix"/"determinant" based on the bracketing chars +# the pausing logic is pushed down to the +# the rules either speak the s (to get "row n") or the s. "column n" spoken if $IsColumnSilent is false +- name: 1x1-matrix + tag: [matrix, determinant] + variables: [IsColumnSilent: true()] + match: "count(*)=1 and *[self::m:mtr][count(*) = 1]" + replace: + - ot: "the" # phrase('the' 1 by 1 matrix M) + - t: "1 by 1" # phrase(the '1 by 1' matrix) + - test: + if: "self::m:determinant" # just need to check the first bracket since we know it must be (, [, or | + then: [t: "determinant"] # phrase(the 2 by 2 'determinant')) + else: [t: "matrix"] # phrase(the 2 by 2 'matrix') + + - t: "with entry" # phrase(the 2 by 2 matrix 'with entry' x) + - x: "*[1]/*" + +# simpler reading methods for special case matrices +- name: zero-matrix + tag: matrix + # select all the non-zero entries -- if there are none of them, then it is a zero matrix + match: "not( */*/*[not(self::m:mn and .= 0)] )" + replace: + - t: "the" # phrase('the' 1 by 2 matrix M) + - x: count(*) + - t: "by" # phrase(the 1 'by' 2 matrix) + - x: count(*[self::m:mtr][1]/*) + - t: "zero matrix" # phrase(the 2 by 2 'zero matrix') + - pause: long + +- name: identity-matrix + tag: matrix + # every diagonal entry must be a literal 1, and every off-diagonal entry must be a literal 0 + match: + - "count(*) = count(*[1]/*) and " # matrix is square + - "not( */*[count(preceding-sibling::*) = count(../preceding-sibling::*)]/*[not(self::m:mn and .= 1)] ) and " # on-diagonal + - "not( */*[count(preceding-sibling::*) != count(../preceding-sibling::*)]/*[not(self::m:mn and .= 0)] )" # off-diagonal + replace: + - t: "the" # phrase('the' 1 by 2 matrix M) + - x: count(*) + - t: "by" # phrase(the 1 'by' 2 matrix) + - x: count(*[self::m:mtr][1]/*) + - t: "identity matrix" # phrase(the 2 by 2 'identity matrix') + - pause: long + +- name: diagonal-matrix + tag: matrix + # select all the non-zero entries...if they are not on the diagonal + # if there are any of them, then this isn't an identity matrix + match: + - "count(*) = count(*[1]/*) and " + - "not( */*/*[not(self::m:mn and .= 0)]" + - " [count(../preceding-sibling::*)!=count(../../preceding-sibling::*)]" + - " )" + replace: + - t: "the" # phrase('the' 1 by 2 matrix) + - x: count(*) + - t: "by" # phrase(the 1 'by' 2 matrix) + - x: count(*[self::m:mtr][1]/*) + - t: "diagonal matrix" # phrase(the 2 by 2 'diagonal matrix') + - pause: long + - insert: + # this lists the diagonal 'mtd's to be read, and they say "column nnn" before reading the contents + # there seems to be an xpath bug -- without the parens, the match fails for the + # test Languages::en::mtable::diagonal_matrix due to match failure (the third matching element seems to be missing) + nodes: "(*/*/*[not(self::m:mn and .= 0)]/..)" + replace: [pause: auto] + - pause: long + +# simpler reading methods for smaller matrices if the entries are simple +- name: 2-or-3x1-matrix + tag: matrix + variables: [IsColumnSilent: true()] + match: + - "$ClearSpeak_Matrix != 'SpeakColNum' and " # "simple" isn't used for this preference + - "*[self::m:mtr][count(*) = 1] and " # one column + - count(*)<=3 and # at least two rows + - IsNode(*/*/*,'simple') # IsNode() returns true if all the nodes are simple + replace: + - t: "the" # phrase('the' 2 by 2 matrix M) + - x: count(*) + - t: "by 1 column" # phrase(the 2 'by 1 column' matrix) + - test: + if: "$ClearSpeak_Matrix = 'Vector' or $ClearSpeak_Matrix = 'EndVector'" + then: [t: "vector"] # phrase(the 2 by 2 'vector') + else: [t: "matrix"] # phrase(the 2 by 2 'matrix') + - pause: long + - x: "*/*" + - test: + if: "$ClearSpeak_Matrix = 'EndMatrix' or $ClearSpeak_Matrix = 'EndVector'" + then: + - t: "end" # phrase('end' of matrix) + - test: + if: $ClearSpeak_Matrix = 'EndVector' + then: [t: "vector"] # phrase(the 2 column 'vector') + else: [t: "matrix"] # phrase(the 2 by 2 'matrix') + +- name: default-column-matrix + tag: matrix + variables: [IsColumnSilent: true()] + match: "*[self::m:mtr][count(*) = 1]" + replace: + - t: "the" # phrase('the' 2 by 2 matrix M) + - x: "count(*)" + - t: "by 1 column" # phrase(the 2 'by 1 column' matrix) + - test: + if: "$ClearSpeak_Matrix = 'Vector' or $ClearSpeak_Matrix = 'EndVector'" + then: [t: "vector"] # phrase(the 2 column 'vector') + else: [t: "matrix"] # phrase(the 2 by 2 'matrix') + - pause: long + - x: "*" # select the rows (mtr) + - test: + if: "$ClearSpeak_Matrix = 'EndMatrix' or $ClearSpeak_Matrix = 'EndVector'" + then: [t: "end matrix"] # phrase(the 'end of matrix' has been reached) + +- name: 1x2-or-3-matrix + tag: matrix + variables: [IsColumnSilent: "$SpeechStyle = 'SimpleSpeak' or ($SpeechStyle = 'ClearSpeak' and $ClearSpeak_Matrix != 'SpeakColNum')"] + match: + - "$ClearSpeak_Matrix != 'SpeakColNum' and " # "simple" isn't used for this preference + - count(*)=1 and # one row + - count(*[1]/*)<=3 and # at least two cols + - IsNode(*/*/*,'simple') # IsNode() returns true if all the nodes are simple + replace: + - t: "the 1 by" # phrase('the 1 by' 2 matrix) + - x: count(*/*) + - t: "row" # phrase(the 1 by 4 'row' matrix) + - test: + if: "$ClearSpeak_Matrix = 'Vector' or $ClearSpeak_Matrix = 'EndVector'" + then: [t: "vector"] # phrase('the 1 by' 2 row 'vector') + else: [t: "matrix"] # phrase('the 1 by' 2 'matrix') + - pause: long + - x: "*/*" + - test: + if: "$ClearSpeak_Matrix = 'EndMatrix' or $ClearSpeak_Matrix = 'EndVector'" + then: + - t: "end" # phrase(the 'end' of matrix has been reached) + - test: + if: $ClearSpeak_Matrix = 'EndMatrix' + then: [t: "matrix"] # phrase(the 2 by 2 'matrix') + else: [t: "vector"] # phrase(the 2 by 1 'vector') + +- name: default-row-matrix + tag: matrix + variables: [IsColumnSilent: "$SpeechStyle = 'ClearSpeak' and $ClearSpeak_Matrix = 'SilentColNum'"] + match: "count(*)=1" # one row + replace: + - t: "the 1 by" # phrase('the 1 by' 2 matrix) + - x: "count(*/*)" + - t: "row" # phrase(the 1 by 2 'row' matrix) + - test: + if: "$ClearSpeak_Matrix = 'Vector' or $ClearSpeak_Matrix = 'EndVector'" + then: [t: "vector"] # phrase(the 2 by 1 'vector') + else: [t: "matrix"] # phrase(the 2 by 2 'matrix') + - pause: long + - pause: medium + - x: "*/*" # select the cols (mtd) + - test: + if: "$ClearSpeak_Matrix = 'EndMatrix' or $ClearSpeak_Matrix = 'EndVector'" + then: + - t: "end" # phrase(the 'end' of matrix has been reached) + - test: + if: $ClearSpeak_Matrix = 'EndMatrix' + then: [t: "matrix"] # phrase(the 2 by 2 'matrix') + else: [t: "vector"] # phrase(the 2 by 1 'vector') + +- name: simple-small-matrix + tag: [matrix, determinant] + match: + - "$ClearSpeak_Matrix != 'SpeakColNum' and " # "simple" isn't used for this preference + - (count(*)<=3 and count(*[1]/*)<=3) and # no bigger than a 3x3 matrix + - IsNode(*/*/*,'simple') # IsNode() returns true if all the nodes are simple + variables: [IsColumnSilent: "$SpeechStyle = 'SimpleSpeak' or ($SpeechStyle = 'ClearSpeak' and $ClearSpeak_Matrix != 'SpeakColNum')"] + replace: + - t: "the" # phrase('the' 1 by 2 matrix M) + - x: count(*) + - t: "by" # phrase(the 1 'by' 2 matrix) + - x: count(*[self::m:mtr][1]/*) + - test: + if: "self::m:determinant" + then: [t: "determinant"] # phrase(the 2 by 2 'determinant') + else: [t: "matrix"] # phrase(the 2 by 2 'matrix') + - pause: long + - x: "*" + - test: + if: "$ClearSpeak_Matrix = 'EndMatrix' or $ClearSpeak_Matrix = 'EndVector'" + then: + - t: "end" # phrase(the 'end' of matrix has been reached) + - test: + if: "self::m:determinant" + then: [t: "determinant"] # phrase(the 2 by 2 'determinant') + else: [t: "matrix"] # phrase(the 2 by 2 'matrix') + +- name: default-matrix + tag: [matrix, determinant] + variables: [IsColumnSilent: "$SpeechStyle = 'ClearSpeak' and $ClearSpeak_Matrix = 'SilentColNum'"] + match: "." + replace: + - t: "the" # phrase('the' 1 by 2 matrix M) + - x: "count(*)" + - t: "by" # phrase(the 1 'by' 2 matrix) + - x: "count(*[self::m:mtr][1]/*)" + - test: + if: "self::m:determinant" + then: [t: "determinant"] # phrase(the 2 by 2 'determinant') + else: [t: "matrix"] # phrase(the 2 by 2 'matrix') + - pause: long + - x: "*" + - test: + if: "$ClearSpeak_Matrix = 'EndMatrix' or $ClearSpeak_Matrix = 'EndVector'" + then: + - t: "end" # phrase(the 'end' of matrix has been reached) + - test: + if: "self::m:determinant" + then: [t: "determinant"] # phrase(the 2 by 2 'determinant') + else: [t: "matrix"] # phrase(the 2 by 2 'matrix's) + +- name: chemistry-msub + tag: [chemical-formula] + match: "*[1][.='msub']" + replace: + - x: "*[2]" + - test: + if: "$Verbosity='Verbose'" + then: [t: "subscript"] # phrase(H 'subscript' 2) + else_test: + if: "$Verbosity='Medium'" + then: [t: "sub"] # phrase(H 'sub' 2) + - x: "*[3]" + +- name: dimension-by + tag: mrow + match: dimension-product + replace: + - insert: + nodes: "*" + replace: [t: "by", pause: auto] # phrase(3 'by' 5 matrix) + +- name: chemistry-msup + tag: [chemical-formula] + match: "count(*)=3 and *[1][.='msup']" + replace: + - x: "*[2]" + - test: + if: "$Verbosity='Verbose'" + then: [t: "superscript"] # phrase(H 'superscript' 2) + else_test: + if: "$Verbosity='Medium'" + then: [t: "super"] # phrase(H 'super' 2) + - x: "*[3]" + - test: + if: "following-sibling::*[1][.='+' or .='-']" # a little lazy -- assumes chemistry superscripts end with + or - + then: [pause: medium] + +- + # There currently is no way to do sub/super for n-ary number of args + # Instead, we just deal with up to two prescripts and up to four postscripts (repeating blocks of similar code [UGLY!]) + # This hopefully covers all reasonable cases... + name: chemistry-scripts + tag: [chemical-formula, chemical-nuclide] + variables: + # computing the number of postscripts is messy because of being optionally present -- we use "mod" to get the count right + - Prescripts: "m:mprescripts/following-sibling::*" + - NumChildren: "count(*)" # need to stash this since the count is wrong inside '*[...]' below + - Postscripts: "*[position()>1 and position() < (last() + ($NumChildren mod 2) -count($Prescripts))]" + match: . # should only be msubsup or mmultiscripts at this point + replace: + - test: + if: "$Prescripts" # we have at least one pre sub/super + then: + # nuclide: speak the superscript first + - test: + if: "not($Prescripts[2][self::m:none])" + then: + - test: + if: "$Verbosity='Verbose'" + then: [t: "superscript"] # phrase(H 'superscript' 2) + else_test: + if: "$Verbosity='Medium'" + then: [t: "super"] # phrase(H 'super' 2) + - x: "$Prescripts[2]" + - pause: "short" + - test: + if: "not($Prescripts[1][self::m:none])" + then: + - test: + if: "$Verbosity='Verbose'" + then: [t: "subscript"] # phrase(a 'subscript' may be used to indicate an index) + else_test: + if: "$Verbosity='Medium'" + then: [t: "sub"] # phrase(here is a 'sub' total) + - x: "$Prescripts[1]" + - pause: "short" + - test: + if: "count($Prescripts) > 2" # can this happen for chemistry??? we allow for one *extra* pre sub/super pair + then: + - test: + if: "not($Prescripts[4][self::m:none])" + then: + - test: + if: "$Verbosity='Verbose'" + then: [t: "superscript"] # phrase(H 'superscript' 2) + else_test: + if: "$Verbosity='Medium'" + then: [t: "super"] # phrase(H 'super' 2) + - x: "$Prescripts[4]" + - pause: "short" + - test: + if: "not($Prescripts[3][self::m:none])" + then: + - test: + if: "$Verbosity='Verbose'" + then: [t: "subscript"] # phrase(H 'subscript' 2) + else_test: + if: "$Verbosity='Medium'" + then: [t: "sub"] # phrase(H 'sub' 2) + - x: "$Prescripts[3]" + - pause: "short" + - x: "*[1]" # base + - test: + if: "$Postscripts" + then: + - test: + if: "not($Postscripts[1][self::m:none])" + then: + - test: + if: "$Verbosity='Verbose'" + then: [t: "subscript"] # phrase(phrase(H 'subscript' 2) + else_test: + if: "$Verbosity='Medium'" + then: [t: "sub"] # phrase(phrase(H 'sub' 2) + - x: "$Postscripts[1]" + - pause: "short" + - test: + if: "not($Postscripts[2][self::m:none])" + then: + - test: + if: "$Verbosity='Verbose'" + then: [t: "superscript"] # phrase(H 'superscript' 2) + else_test: + if: "$Verbosity='Medium'" + then: [t: "super"] # phrase(H 'super' 2) + - x: "$Postscripts[2]" + - pause: "short" + - test: + if: "count($Postscripts) > 2" + then: + - test: + if: "not($Postscripts[3][self::m:none])" + then: + - test: + if: "$Verbosity='Verbose'" + then: [t: "subscript"] # phrase(H 'subscript' 2) + else_test: + if: "$Verbosity='Medium'" + then: [t: "sub"] # phrase(H 'sub' 2) + - x: "$Postscripts[3]" + - pause: "short" + - test: + if: "not($Postscripts[4][self::m:none])" + then: + - test: + if: "$Verbosity='Verbose'" + then: [t: "superscript"] # phrase(H 'superscript' 2) + else_test: + if: "$Verbosity='Medium'" + then: [t: "super"] # phrase(H 'super' 2) + - x: "$Postscripts[4]" + - pause: "short" + - test: + if: "count($Postscripts) > 4" + then: + - test: + if: "not($Postscripts[5][self::m:none])" + then: + - test: + if: "$Verbosity='Verbose'" + then: [t: "subscript"] # phrase(H 'subscript' 2) + else_test: + if: "$Verbosity='Medium'" + then: [t: "sub"] # phrase(H 'sub' 2) + - x: "$Postscripts[5]" + - pause: "short" + - test: + if: "not($Postscripts[6][self::m:none])" + then: + - test: + if: "$Verbosity='Verbose'" + then: [t: "superscript"] # phrase(H 'superscript' 2) + else_test: + if: "$Verbosity='Medium'" + then: [t: "super"] # phrase(H 'super' 2) + - x: "$Postscripts[6]" + - pause: "short" + - test: + if: "count($Postscripts) > 6" + then: + - test: + if: "not($Postscripts[7][self::m:none])" + then: + - test: + if: "$Verbosity='Verbose'" + then: [t: "subscript"] # phrase(H 'subscript' 2) + else_test: + if: "$Verbosity='Medium'" + then: [t: "sub"] # phrase(H 'sub' 2) + - x: "$Postscripts[7]" + - pause: "short" + - test: + if: "not($Postscripts[8][self::m:none])" + then: + - test: + if: "$Verbosity='Verbose'" + then: [t: "superscript"] # phrase(H 'superscript' 2) + else_test: + if: "$Verbosity='Medium'" + then: [t: "super"] # phrase(H 'super' 2) + - x: "$Postscripts[8]" + - pause: "short" + - test: + if: "$Postscripts[last()][not(self::m:none)] and following-sibling::*[1][.='+' or .='-']" + then: [pause: medium] + +- name: chemistry + tag: chemical-equation + match: "." + replace: + - x: "*" + +- name: chemical-element + tag: chemical-element + match: "." + replace: + - bookmark: "@id" + - spell: text() + - pause: short + +- name: chemical-state + tag: chemical-state + match: "count(*)=1" + replace: + - bookmark: "*[1]/@id" + - test: + - if: ".='s'" + then: [t: "solid"] # phrase(Boron is a 'solid' in its natural state) + - else_if: ".='l'" + then: [t: "liquid"] # phrase(water is a 'liquid') + - else_if: ".='g'" + then: [t: "gas"] # phrase(hydrogen is a 'gas' ) + else: [t: "aqueous"] # phrase(an 'aqueous' solution is contained in water) + - pause: short + +- name: chemical-formula-operator-bond + tag: chemical-formula-operator + match: "@data-chemical-bond" + replace: + # FIX: this might be better/more efficient if in unicode.yaml + - bookmark: "@id" + - test: + - if: ".='-' or .=':'" + then: [t: "single bond"] # phrase(a 'single bond' is formed when two atoms share one pair of electrons) + - else_if: ".='=' or .='∷'" + then: [t: "double bond"] # phrase(a 'double bond' may occur when two atoms share two pairs of electrons) + - else_if: ".='≡'" + then: [t: "triple bond"] # phrase(a 'triple bond' occurs when two atoms share three pairs of electrons) + - else_if: ".='≣'" + then: [t: "quadruple bond"] # phrase(a 'quadruple bond' occurs when two atoms share four pairs of electrons) + else: [x: "text()"] + +- name: chemical-formula-operator + tag: chemical-formula-operator + match: "." + replace: + x: "text()" + +- name: chemical-arrow-operator + tag: chemical-arrow-operator + match: "." + replace: + # FIX: this might be better/more efficient if in unicode.yaml + - bookmark: "@id" + - test: + - if: ".='→' or .='⟶'" + then_test: + if: "$Verbosity='Terse'" + then: [t: "forms"] # phrase(hydrogen and oxygen 'forms' water ) + else: [t: "reacts to form"] # phrase(hydrogen and oxygen 'reacts to form' water) + - else_if: ".='⇌' or .='🣑'" # U+01F8D1 + then: [t: "is in equilibrium with"] # phrase(a reactant 'is in equilibrium with' a product) + - else_if: ".='🣓'" # U+1F8D3 + then: [t: "is in equilibrium biased to the left with"] # phrase(the reactant 'is in equilibrium biased to the left with' the product) + - else_if: ".='🣒'" # U+1F8D2 + then: [t: "is in equilibrium biased to the right with"] # phrase(the reactant 'is in equilibrium biased to the right with' the product) + else: [x: "*"] + +- name: chemical-equation-operator + tag: chemical-equation-operator + match: "." + replace: + - bookmark: "@id" + - x: "text()" + +- name: none + tag: none + match: "../../*[self::m:chemical-formula or self::m:chemical-nuclide]" + replace: + - t: "" # don't say anything + +- name: ignore-intent-wrapper + tag: intent-wrapper + match: "." + replace: + - x: "*" diff --git a/Rules/Languages/hu/SharedRules/geometry.yaml b/Rules/Languages/hu/SharedRules/geometry.yaml new file mode 100644 index 000000000..1b2fe2a71 --- /dev/null +++ b/Rules/Languages/hu/SharedRules/geometry.yaml @@ -0,0 +1,79 @@ +--- + +- name: line-segment + tag: line-segment + match: "count(*)=2" + replace: + - test: + if: "$Verbosity='Verbose'" + then: + - t: "the line segment from" # phrase('the line segment from' A to B) + - x: "*[1]" + - t: "to" # phrase(the line segment from A 'to' B) + - x: "*[2]" + else: + - t: "line segment" # phrase(the 'line segment' A B) + - x: "*[1]" + - x: "*[2]" + +- name: geometry-ray + tag: ray + match: "count(*)=2" + replace: + - test: + if: "$Verbosity='Verbose'" + then: + - t: "the ray from" # phrase('the ray from' A to B) + - x: "*[1]" + - t: "to" # phrase(the ray from A 'to' B) + - x: "*[2]" + else: + - t: "ray" # phrase(the 'ray'A B) + - x: "*[1]" + - x: "*[2]" + +- name: geometry-arc + tag: arc + match: "count(*)=2" + replace: + - test: + if: "$Verbosity='Verbose'" + then: [t: "the"] # phrase('the' arc A B C) + - t: "arc" # phrase(the 'arc' A B C) + - x: "*[1]" + - x: "*[2]" + +- name: measure-of-angle + tag: measure-of-angle + match: "count(*)=3" + replace: + - test: + if: "$Verbosity='Verbose'" + then: + - t: "the measure of the angle" # phrase('the measure of the angle' ABC) + else: + - t: "measure of angle" # phrase('measure of angle' ABC) + - x: "*[1]" + - x: "*[2]" + - x: "*[3]" + + +- name: coordinate + tag: coordinate + match: "." + replace: + - test: + if: "$Verbosity='Verbose'" + then: [t: "the"] # phrase('the' point at 1, 2) + - t: "point" # phrase(the 'point' at 1, 2) + - test: + if: "$Verbosity='Verbose'" + then: [t: "at"] # phrase('the' point at 1, 2) + - pause: short + - insert: + nodes: "*" + replace: [t: "comma", pause: auto] # phrase(f of x 'comma' y) + - pause: short + - test: + if: "($SpeechStyle='ClearSpeak' and $Verbosity='Verbose') or not(IsNode(*[last()],'leaf'))" + then: [t: "end point"] # phrase(start point, 'end point') diff --git a/Rules/Languages/hu/SharedRules/linear-algebra.yaml b/Rules/Languages/hu/SharedRules/linear-algebra.yaml new file mode 100644 index 000000000..9a6452628 --- /dev/null +++ b/Rules/Languages/hu/SharedRules/linear-algebra.yaml @@ -0,0 +1,36 @@ +--- + +- name: scalar-determinant + tag: determinant + match: "count(*)=1 and not(*[1][self::m:mtr])" + replace: + - test: + if: "$Verbosity='Verbose'" + then: + - t: "the" # phrase('the' square root of 25 equals 5) + - t: "determinant" # phrase(the 'determinant' of a matrix) + - test: + if: "$Verbosity!='Terse'" + then: + - t: "of" # phrase(systems 'of' linear equations) + - x: "*[1]" + - test: + if: "not(IsNode(*[1], 'simple')) and $Impairment = 'Blindness'" + then: [t: "end determinant"] # phrase('end determinant' of a matrix) + + +- name: subscripted-norm + tag: subscripted-norm + match: "count(*)=2" + replace: + - test: + if: "$Verbosity='Verbose'" + then: + - t: "the" # phrase('the' square root of 25 equals 5) + - x: "*[2]" + - t: "norm" # phrase(the 'norm' can be a measure of distance) + - test: + if: "$Verbosity!='Terse'" + then: + - t: "of" # phrase(systems 'of' linear equations) + - x: "*[1]" diff --git a/Rules/Languages/hu/SimpleSpeak_Rules.yaml b/Rules/Languages/hu/SimpleSpeak_Rules.yaml new file mode 100644 index 000000000..e9b65427e --- /dev/null +++ b/Rules/Languages/hu/SimpleSpeak_Rules.yaml @@ -0,0 +1,350 @@ +--- +- name: pause + tag: "!*" + match: "not(self::m:math) and not($MatchingPause) and @data-intent-property[contains(., ':pause')]" + replace: + - with: + variables: [MatchingPause: "true()"] + replace: + - test: + - if: "contains(@data-intent-property, ':pause-long')" + then: [pause: long] + - else_if: "contains(@data-intent-property, ':pause-short')" + then: [pause: short] + else: [pause: medium] + - x: "." + +- name: intent-literal-silent + tag: [mi, mo, mn] + match: "contains(@data-intent-property, ':silent:')" + # say nothing + replace: [] + +# handling of negative numbers that come from 'intent' is hard -- we do something that is close to right here +- name: intent-literal-negative-number + tag: mn + match: "starts-with(text(), '-')" + replace: + - t: "minus" # phrase(x 'minus' y) + - x: "translate(text(), '-_', '')" + +- name: default + tag: square-root + match: "." + replace: + - test: + if: "$Verbosity!='Terse'" + then: [t: "the"] # phrase('the' square root of x) + - t: "square root" # phrase(the 'square root' of x) + - test: + if: "$Verbosity!='Terse'" + then: [t: "of"] # phrase(the square root 'of' x) + else: [pause: short] + - x: "*[1]" + - pause: short + - test: + if: "not(IsNode(*[1], 'leaf')) and $Impairment = 'Blindness'" + then: [t: "end root", pause: medium] # phrase(start the square root of x 'end of root') + +- name: default + tag: root + match: "." + replace: + - test: + if: "$Verbosity!='Terse'" + then: [t: "the"] + - test: + if: "*[2][self::m:mn and not(contains(., '.'))]" + then_test: + - if: "*[2][.='2']" + then: [t: "square root"] # phrase(the 'square root' of x) + - else_if: "*[2][.='3']" + then: [t: "cube root"] # phrase(the 'cube root' of x) + - else: [x: "ToOrdinal(*[2])", t: "root"] # phrase(the square 'root' of 25) + else: + - test: + if: "*[2][self::m:mi][string-length(.)=1]" + then: + - x: "*[2]" + - pronounce: [text: "-th", ipa: "θ", sapi5: "th", eloquence: "T"] + else: [x: "*[2]"] + - t: "root" # phrase(the square 'root' of) + - test: + if: "$Verbosity!='Terse'" + then: [t: "of"] # phrase(the square root 'of' x) + - x: "*[1]" + - pause: short + - test: + if: "not(IsNode(*[1], 'leaf')) and $Impairment = 'Blindness'" + then: [t: "end root", pause: medium] # phrase(start the square root of x 'end of root') + +# Fraction rules +# Mixed numbers mostly "just work" because the invisible char reads as "and" and other parts read properly on their own +- name: common-fraction + tag: fraction + match: + - "*[1][self::m:mn][not(contains(., '.')) and text()<20] and" + - "*[2][self::m:mn][not(contains(., '.')) and 2<= text() and text()<=10]" + variables: [IsPlural: "*[1]!=1"] + replace: + - x: "*[1]" + - x: "ToOrdinal(*[2], true(), $IsPlural)" # extra args specify fractional ordinal and whether it is plural + +- name: common-fraction-mixed-number + tag: fraction + match: + - "preceding-sibling::*[1][self::m:mo][.='⁤'] and" # preceding element is invisible plus + - "*[1][self::m:mn][not(contains(., '.'))] and" + - "*[2][self::m:mn][not(contains(., '.'))]" + variables: [IsPlural: "*[1]!=1"] + replace: + - x: "*[1]" + - x: "ToOrdinal(*[2], true(), $IsPlural)" # extra args specify fractional ordinal and whether it is plural + + +# Units (e.g., meters per second, m^2/s^2, (3m^2)/s) +- name: per-fraction + tag: fraction + match: + - "BaseNode(*[1])[contains(@data-intent-property, ':unit') or" + - " ( self::m:mrow and count(*)=3 and" # maybe a bit paranoid checking the structure... + - " *[1][self::m:mn] and *[2][.='\u2062'] and BaseNode(*[3])[contains(@data-intent-property, ':unit')] ) ] and" + - "BaseNode(*[2])[contains(@data-intent-property, ':unit')] " + replace: + - x: "*[1]" + - t: "per" # phrase('5 meters 'per' second) + - x: "*[2]" + +- name: simple + # don't include nested fractions. E.g, fraction a plus b over c + 1 end fraction" is ambiguous + # by simplistic SimpleSpeak's rules "b over c" is a fraction, but if we say nested fractions + # are never simple, then any 'over' applies only to enclosing "fraction...end fraction" pair. + tag: fraction + match: + - "(IsNode(*[1],'leaf') and IsNode(*[2],'leaf')) and" + - "not(ancestor::*[name() != 'mrow'][1]/self::m:fraction)" # FIX: can't test for mrow -- what should be used??? + replace: + - x: "*[1]" + - t: "over" # phrase(the fraction 3 'over' 4) + - x: "*[2]" + - pause: short + +- name: default + tag: fraction + match: "." + replace: + - test: + if: "$Impairment = 'Blindness'" + then: [t: "fraction"] # phrase(the 'fraction' 3 over 4) + - pause: short + - x: "*[1]" + - test: + if: "not(IsNode(*[1],'leaf'))" + then: [pause: short] + - t: "over" # phrase(the fraction 3 'over' 4) + - test: + if: "not(IsNode(*[2],'leaf'))" + then: [pause: short] + - x: "*[2]" + - pause: short + - test: + if: "$Impairment = 'Blindness'" + then: [t: "end fraction"] # phrase(start 7 over 8 'end of fraction') + - pause: medium + +# rules for functions raised to a power +# these could have been written on 'mrow' but putting them on msup seems more specific +# to see if it is a function, we look right to see if the following sibling is apply-function +- name: inverse-function + tag: inverse-function + match: "." + replace: + - t: "inverse" # phrase(the 'inverse' of f) + - x: "*[1]" + +- name: function-squared-or-cubed + tag: power + match: + - "*[2][self::m:mn][.='2' or .='3'] and" + - "following-sibling::*[1][self::m:mo][.='⁡']" #invisible function apply + replace: + - x: "*[1]" + - bookmark: "*[2]/@id" + - test: + if: "*[2][.=2]" + then: [t: "squared"] # phrase(5 'squared' equals 25) + else: [t: "cubed"] # phrase(5 'cubed' equals 125) +- name: function-power + tag: power + match: + - "following-sibling::*[1][self::m:mo][.='⁡']" #invisible function apply + replace: + - test: + if: "$Verbosity!='Terse'" + then: [t: "the"] # # phrase('the' fourth power of 10) + - bookmark: "*[2]/@id" + - test: + if: "*[2][self::m:mn][not(contains(., '.'))]" + then: [x: "ToOrdinal(*[2])"] + else: [x: "*[2]"] + - t: "power of" # phrase(the fourth 'power of' 2) + - pause: short + - x: "*[1]" + +# non-function rules for power +- name: squared-or-cubed + tag: power + match: "*[2][self::m:mn][.='2' or .='3']" + replace: + - x: "*[1]" + - bookmark: "*[2]/@id" + - test: + if: "*[2][.=2]" + then: [t: "squared"] # phrase(5 'squared' equals 25) + else: [t: "cubed"] # phrase(5 'cubed' equals 125) + +- name: simple-integer + tag: power + match: "*[2][self::m:mn][not(contains(., '.'))]" + replace: + - x: "*[1]" + - t: "to the" # phrase(15 raised 'to the' second power equals 225) + - test: + if: "*[2][.>0]" + then: [x: "ToOrdinal(*[2])"] + else: [x: "*[2]"] +- name: simple-negative-integer + tag: power + match: + - "*[2][self::m:minus and count(*)=1 and" + - " *[1][self::m:mn][not(contains(., '.'))]]" + replace: + - x: "*[1]" + - t: "to the" # phrase(15 raised 'to the' second power equals 225) + - x: "*[2]" +- name: simple-var + tag: power + match: "*[2][self::m:mi][string-length(.)=1]" + replace: + - x: "*[1]" + - t: "to the" # phrase(15 raised 'to the' second power equals 225) + - x: "*[2]" + - pronounce: [text: "-th", ipa: "θ", sapi5: "th", eloquence: "T"] + +- name: simple + tag: power + match: "IsNode(*[2], 'leaf')" + replace: + - x: "*[1]" + - t: "to the" # phrase(15 raised 'to the' second power equals 225) + - x: "*[2]" + +- name: nested + # it won't end in "power" if the exponent is simple enough + # FIX: not that important, but this misses the case where the nested exp is a negative integer (change test if this is fixed) + # ending nested exponents with "...power power" sounds bad + tag: power + match: + - "*[2][" + - " (self::m:power and not(IsNode(*[2], 'leaf'))) or" # non-simple nested superscript + - " self::m:mrow[*[last()][self::m:power[not(IsNode(*[2], 'leaf'))]]]" # same as above but at the end of an mrow # FIX: need to figure out linear replacement + - " ]" + replace: + - x: "*[1]" + - t: "raised to the" # phrase(15 'raised to the' second power equals 225) + - x: "*[2]" + - pause: short + - test: + if: "$Impairment = 'Blindness'" + then: + - t: "end exponent" # phrase(start 2 raised to the exponent 4 'end of exponent') + - pause: short + else: + - pause: medium + +- name: default + tag: power + match: "." + replace: + - x: "*[1]" + - t: "raised to the" # phrase(15 'raised to the' second power equals 225) + - x: "*[2]" + - t: "power" # phrase(15 raised to the second 'power' equals 225) + - pause: short + +# +# Some rules on mrows +# +- name: set + tag: set + match: "." + replace: + - test: + - if: "count(*)=0" + then: + - test: + if: "$Verbosity!='Terse'" + then: [t: "the"] # phrase('the' empty set) + - t: "empty set" # phrase(when a set contains no value it is called an 'empty set' and this is valid) + - else_if: "count(*[1]/*)=3 and *[1]/*[2][self::m:mo][.=':' or .='|' or .='∣']" + then: + - test: + if: "$Verbosity!='Terse'" + then: [t: "the"] # phrase('the' set of all integers) + - t: "set of all" # phrase(the 'set of all' positive integers less than 10) + - x: "*[1]/*[1]" + - t: "such that" # phrase(x 'such that' x is less than y) + - x: "*[1]/*[3]" + else: + - test: + if: "$Verbosity!='Terse'" + then: [t: "the"] # phrase('the' set of integers) + - t: "set" # phrase(here is a 'set' of numbers) + - x: "*[1]" + +- name: times + tag: mo + match: + # say "times" when invisible times is followed by parens or a superscript that has a base with parens or "|"s + # added: say times is the superscript is not simple + # if we aren't sure if it is times or not, don't say anything + - ".='⁢' and" + - "not(@data-function-guess) and (" + - "not(ancestor-or-self::*[contains(@data-intent-property, ':literal:')]) and " + - " following-sibling::*[1][" + - " IsBracketed(., '(', ')') or IsBracketed(., '[', ']') or IsBracketed(., '|', '|') or " + - " self::m:matrix or self::m:determinant or self::m:binomial or" # followed by parens + - " self::m:square-root or self::m:msqrt or self::m:root or self::m:mroot or" + - " (self::m:msub or self::m:msubsup or" + - " ((self::m:msup or self::m:power) and not(IsNode(*[1], 'leaf') and *[2][self::m:mn and (.=2 or '.=3')]))) and " # followed by msup, etc. + - " (*[1][self::m:mrow[IsBracketed(., '(', ')') or IsBracketed(., '[', ']') or IsBracketed(., '|', '|')] or " + - " self::m:matrix or self::m:determinant] or" # base has parens + - " not(IsNode(*[2], 'simple')) or " + - " (self::m:msubsup and not(IsNode(*[3], 'simple')))" + - " )" + - " ]" # other possibility is the preceding element has parens (but not the following) + - " or " + - " preceding-sibling::*[1][" + - " IsBracketed(., '(', ')') or IsBracketed(., '[', ']') or IsBracketed(., '|', '|')]" # followed by parens + - " )" + replace: + - t: "times" # phrase(7 'times' 5 equals 35) + +- name: no-say-parens + tag: mrow + match: + - "parent::*[not(self::m:msup) and not(self::m:msub) and not(self::m:msubsup) and not(self::m:power) and" + - " not(self::m:math) ] and " # rule out [x] standing alone + - "( IsBracketed(., '(', ')') or IsBracketed(., '[', ']') ) and " + - "( IsNode(*[2], 'simple') ) and" + - "not(preceding-sibling::*[1][.='\u2062' and @data-function-guess]) and" + - "not(ancestor-or-self::*[contains(@data-intent-property, ':literal:')])" + # missing clause: 'a positive fraction that is spoken as an ordinal + # (either by the Ordinal preference or by the default rules_' + replace: + - x: "*[2]" + +- include: "SharedRules/geometry.yaml" +- include: "SharedRules/linear-algebra.yaml" +- include: "SharedRules/general.yaml" +- include: "SharedRules/default.yaml" diff --git a/Rules/Languages/hu/definitions.yaml b/Rules/Languages/hu/definitions.yaml new file mode 100644 index 000000000..40a5427d3 --- /dev/null +++ b/Rules/Languages/hu/definitions.yaml @@ -0,0 +1,385 @@ +--- +- include: "../../definitions.yaml" + +# If an "intent" is used, the 'terse:medium:verbose' speech for the intent name is given here for a prefix||infix||postfix||function fixity +# If only one ":" is used, the first part is used for 'terse' and the second part is used for 'medium' and 'verbose' +# If no ":"s are used, the same speech is used for all forms +# If bracketing words make sense, they are separated with ";"s +# Intent mappings must specify whether they are "prefix", "infix", "postfix", or "function" with an "=" sign +# If there are multiple fixities (e.g., see transpose), they are separated with "||" +# for readability, spaces can be used around any of the delimiter characters +# Note: if there are multiple fixities, the first one is used if the fixity is not given in the intent +- IntentMappings: { + "indexed-by": "infix= ; sub; end sub: end sub: end subscript", + "modified-variable": "silent= ", + "say-super": "infix=super: superscript: superscript", # used with 'mo' for superscripts (e.g, "<") + "skip-super": "silent=", # used with 'mo' for superscripts (e.g, "*") + + "absolute-value": "function= ; absolute value: the absolute value: the absolute value; end absolute value", + "binomial": "infix=binomial; choose; end binomial", + "dimension-product": "infix=by", + # "closed-interval": "other=closed-interval; from,to; end closed-interval", + "greatest-common-divisor": "function=gcd: the gcd: the greatest common divisor", + "imaginary-part": "function=imaginary part: the imaginary part: the imaginary part", + "least-common-multiple": "function=lcm: the lcm: the least common multiple", + # "large-op": "infix=over || other=from,to", + "limit": "prefix=limit as: the limit as: the limit as", + "lim-sup": "prefix=lim sup as: the limit superior as: the limit superior as", + "lim-inf": "prefix=lim inf as: the limit inferior as : the limit inferior as", + "logarithm-with-base": "prefix=log base: the log base: the log base", + "natural-logarithm": "function=l n: natural log: natural log", + "minus": "infix=minus || prefix=negative", + "plus": "infix=plus || prefix=positive", + # "pochhammer": "infix=permutations of", # arguments are in reverse order, so can't work here + "real-part": "function=the real part", + + "transpose": "postfix=transpose || function=transpose", + "norm": "function=; norm: norm: norm; end norm", + "trace": "function= ; trace : trace: the trace; end trace", + "dimension": "function=; dimension : dimension: the dimension; end dimension", + "homomorphism": "function= ; homomorphism : homomorphism: the homomorphism; end homomorphism", + "kernel": "function= ; kernel : kernel: the kernel; end kernel", + "vector": "function= ; vector || prefix=vector", + "cross-product": "infix=cross: cross product: cross product", + "dot-product": "infix=dot: dot product: dot: dot product", + + "divergence": "function= ; dihv: divergence: divergence; end divergence", + "curl": "function= ; curl; end curl", + "gradient": "function= ; del: gradient: gradient; end gradient", + "laplacian": "function=lahplahsian", # speech engines don't do a good job with "laplacian" + + "chemistry-concentration": "function= ; concentration: concentration of: the concentration of; end concentration", + } + + # Names of functions that in terse mode don't say "of" (or it's equivalent in other languages) +- TerseFunctionNames: { + "divergence", "gradient", "curl" + } + +- NavigationParts: { + # These are the parts of a formula that can be navigated to + "large-op": "base; lower limit; upper limit", + "mfrac": "numerator; denominator", + "fraction": "numerator; denominator", + "msqrt": "root", + "square-root": "root", + "mroot": "root; root index", + "root": "root; root index", + "msub": "base; subscript", + "sub": "base; subscript", + "logarithm-with-base": "base", + "indexed-by": "base; subscript", + "msup": "base; superscript", + "say-super": "base; superscript", + "skip-super": "base; superscript", + "power": "base; exponent", + "msubsup": "base; subscript; superscript", + "munder": "base; under limit", + "mover": "base; upper limit", + "munderover": "base; under limit; upper limit", + + # words for moving into and out of one of the parts (e.g., "move right 'out of' numerator, 'in' denominator") + # it's a hack to put them here, but at least they are grouped with the other navigation parts + "in": "in", + "out": "out of", + } + +- KnownWords: { + # MathCAT will put together some runs of three or more mi's (a common mistake), but skips those in alphabetical order. + # This is a list of exceptions so that they do get put together. Don't list words with repeated letters. + + # I asked bard and chatgpt for formula words that are alphabetical, and they failed. + # Here are the words I managed to find, but it almost certainly not complete. Change the list for other languages. + "Abel", "aery", "ails", "airy", "amps", "ceil", "cents", "chop", "flux", "flow", "knot", "most" + } + +- SIPrefixes: { + "Q": "quetta", "R": "ronna", "Y": "yotta", "Z": "zetta", "E": "exa", "P": "peta", "T": "tera", "G": "giga", "M": "mega", "k": "kilo", "h": "hecto", "da": "deka", + "d": "deci", "c": "centi", "m": "milli", "µ": "micro", "n": "nano", "p": "pico", "f": "femto", "a": "atto", "z": "zepto", "y": "yocto", "r": "ronto", "q": "quecto" + } + +# this is a list of all units that accept SIPrefixes +# from www.bipm.org/documents/20126/41483022/SI-Brochure-9-EN.pdf +# Prefixes may be used with any of the 29 SI units with special names +# The SI prefixes can be used with several of accepted units, but not, for example, with the non-SI units of time. +- SIUnits: { + # base units + "A": "amp", + "cd": "candela", + "K": "kelvin", "K": "kelvin", # U+212A + "g": "gram", + "m": "metre", # British spelling works for US also + "mol": "mole", + "s": "second", "sec": "second", # "sec" not actually legal + + # derived units + "Bq": "becquerel", + "C": "coulomb", + "°C": "degree celsius", "℃": "degree celsius", # should only take negative powers + "F": "farad", + "Gy": "gray", + "H": "henry", + "Hz": "hertz", + "J": "joule", + "kat": "katal", + "lm": "lumen", + "lx": "lux", + "N": "newton", + "Ω": "ohm", "Ω": "ohm", # Greek Cap letter, U+2126 OHM SIGN + "Pa": "pascal", + "S": "siemens", + "Sv": "sievert", + "T": "tesla", + "V": "volt", + "W": "watt", + "Wb": "weber", + + # accepted (plus a few variants) that take SI prefixes + "l": "litre", "L": "litre", "ℓ": "litre", # Should only take negative powers; British spelling works for US also + "t": "metric ton", # should only take positive powers + "Da": "dalton", + "Np": "neper", # should only take negative powers + "u": "atomic mass unit", # 'u' is correct: https://en.wikipedia.org/wiki/Dalton_(unit) + "eV": "electronvolt", + "rad": "radian", # should only take negative powers + "sr": "steradian", # should only take negative powers + + # others that take a prefix + "a": "annum", # should only take positive powers + "as": "arcsecond", # see en.wikipedia.org/wiki/Minute_and_second_of_arc + + # technically wrong, but used in practice with SI Units + "b": "bit", # should only take positive powers + "B": "byte", # should only take positive powers + "Bd": "baud", # should only take positive powers + } + + +- UnitsWithoutPrefixes: { + # time + "″": "second", "\"": "second", + "′": "minute", "'": "minute","min": "minute", + "h": "hour", "hr": "hour", "Hr": "hour", + "d": "day", "dy": "day", + "w": "week", "wk": "week", + "y": "year", "yr": "year", + + # angles + "°": "degree", "deg": "degree", # should only take negative powers + "arcmin": "arcminute", + "amin": "arcminute", + "am": "arcminute", + "MOA": "arcminute", + "arcsec": "arcsecond", + "asec": "arcsecond", + + # distance + "au": "astronomical unit", "AU": "astronomical unit", + "ltyr": "light year", "ly": "light year", + "pc": "parsec", + "Å": "angstrom", "Å": "angstrom", # U+00C5 and U+212B + "fm": "fermi", + + # others + "ha": "hectare", + # "B": "bel", # "B" more commonly means bytes + "dB": "decibel", # already logarithmic, so not used with SI prefixes + + "amu": "atomic mass unit", + "atm": "atmosphere", + "bar": "bar", + "cal": "calorie", + "Ci": "curie", + "grad": "gradian", + "M": "molar", + "R": "roentgen", + "rpm": "revolution per minute", + "℧": "m-h-o", + "dyn": "dyne", + "erg": "erg", + + # powers of 2 used with bits and bytes + "Kib": "kibi-bit", "Mib": "mebi-bit", "Gib": "gibi-bit", "Tib": "tebi-bit", "Pib": "pebi-bit", "Eib": "exbi-bit", "Zib": "zebi-bit", "Yib": "yobi-bit", + "KiB": "kibi-byte", "MiB": "mebi-byte", "GiB": "gibi-byte", "TiB": "tebi-byte", "PiB": "pebi-byte", "EiB": "exbi-byte", "ZiB": "zebi-byte", "YiB": "yobi-byte", + } + + # this will only be used if the language is English, so it can be empty for other countries +- EnglishUnits: { + # length + "in": "inch", + "ft": "foot", + "mi": "mile", + "rd": "rod", + "li": "link", + "ch": "chain", + + # area + "sq in": "square inch", "sq. in": "square inch", "sq. in.": "square inch", + "sq ft": "square foot", "sq. ft": "square foot", "sq. ft.": "square foot", + "sq yd": "square yard", "sq. yd": "square yard", "sq. yd.": "square yard", + "sq mi": "square mile", "sq. mi": "square mile", "sq. mi.": "square mile", + "ac": "acre", + "FBM": "board foot", + + # volume + "cu in": "cubic inch", "cu. in": "cubic inch", "cu. in.": "cubic inch", + "cu ft": "cubic foot", "cu. ft": "cubic foot", "cu. ft.": "cubic foot", + "cu yd": "cubic yard", "cu. yd": "cubic yard", "cu. yd.": "cubic yard", + "bbl": "barrel", "BBL": "barrel", + "pk": "peck", + "bu": "bushel", + "tsp": "teaspoon", + "tbl": "tablespoon", + + # liquid + "fl dr": "fluid dram", + "fl oz": "fluid ounce", + "gi": "gill", + "cp": "cup", "cup": "cup", + "pt": "pint", + "qt": "quart", + "gal": "gallon", + + # weight + "gr": "grain", + "dr": "dram", + "oz": "ounce", "℥": "ounce", + "lb": "pound", + "cwt": "hundredweight", + "dwt": "pennyweight", + "oz t": "troy ounce", + "lb t": "troy pound", + + # energy + "hp": "horsepower", + "BTU": "BTU", + "°F": "degree fahrenheit", "℉": "degree fahrenheit", + + # other + "mph": "mile per hour", + "mpg": "mile per gallon", + } + +- CurrencySymbols: { + "$": "dollar", "¢": "cent", "€": "euro", "£": "pound", "₡": "colón", "₤": "lira", "₨": "rupee", + "₩": "won", "₪": "shekel", "₱": "peso", "₹": "rupee", "₺": "lira", "₿": "bitcoin", + # could add more currencies... + } + +- PluralForms: { + # FIX: this needs to be flushed out + "inch": "inches", "square inch": "square inches", "cubic inch": "cubic inches", + "foot": "feet", "square foot": "square feet", "cubic foot": "cubic feet", + "board foot": "board feet", + "degree celsius": "degrees celsius", + "degree fahrenheit": "degrees fahrenheit", + "henry": "henries", + "hertz": "hertz", + "lux": "lux", + "siemens": "siemens", + "revolution per minute": "revolutions per minute", + "mile per hour": "miles per hour", + "mile per gallon": "miles per gallon", + "colón": "colones", "lira": "lire", "won": "won", "bitcoin": "bitcoin" + } + +# Lines starting with "#" are a comment +# Each definition in this file is of the form +# - name: { "...", "..." "..." } +# For numbers, +# - name: [] "...", "..." "..." ] + + +# ---------------- Cardinal and Ordinal Numbers -------------------------- +# The following definitions are used to convert numbers to words +# The are mainly used for ordinals, of which there are two cases: +# 1. Regular ordinals: first, second, third, ... +# 2. Ordinals used in the denominator of fractions (e.g, one half, one third) +# When used in the denominator of fractions, a plural version might be +# used (e.g., two halves, two thirds) +# Although a lot of languages are regular after a few entries, for generality, +# the following lists should be filled out even though they are the same +# or easily derived from others in many languages (e.g, an 's' is added for plurals). +# The larger ordinal numbers (e.g, millionth) is used when there are only +# '0's after that decimal place (e.g., 23000000).:w + +# All definitions start 0, 10, 100, etc. + +# The definitions for the "ones" should extend until a regular pattern begins +# The minimum length is 10. + +# For English, a regular pattern starts at twenty +- NumbersOnes: [ + "zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", + "ten", "eleven", "twelve", "thirteen", "fourteen", "fifteen", "sixteen", + "seventeen", "eighteen", "nineteen" + ] + +- NumbersOrdinalOnes: [ + "zeroth", "first", "second", "third", "fourth", "fifth", "sixth", "seventh", "eighth", "ninth", + "tenth", "eleventh", "twelfth", "thirteenth", "fourteenth", "fifteenth", "sixteenth", + "seventeenth", "eighteenth", "nineteenth" + ] + +- NumbersOrdinalPluralOnes: [ + "zeroth", "first", "seconds", "thirds", "fourths", "fifths", "sixths", "sevenths", "eighths", "ninths", + "tenths", "elevenths", "twelfths", "thirteenths", "fourteenths", "fifteenths", "sixteenths", + "seventeenths", "eighteenths", "nineteenths" + ] + + # stop when regularity begins +- NumbersOrdinalFractionalOnes: [ + "zero", "first", "half" + ] + + # stop when regularity begins +- NumbersOrdinalFractionalPluralOnes: [ + "zeros", "firsts", "halves" + ] + + + # What to use for multiples of 10 +- NumbersTens: [ + "", "ten", "twenty", "thirty", "forty", "fifty", "sixty", "seventy", "eighty", "ninety" + ] + +- NumbersOrdinalTens: [ + "", "tenth", "twentieth", "thirtieth", "fortieth", "fiftieth", "sixtieth", "seventieth", "eightieth", "ninetieth" + ] + +- NumbersOrdinalPluralTens: [ + "", "tenths", "twentieths", "thirtieths", "fortieths", "fiftieths", "sixtieths", "seventieths", "eightieths", "ninetieths" + ] + + +- NumbersHundreds: [ + "", "one hundred", "two hundred", "three hundred", "four hundred", "five hundred", + "six hundred", "seven hundred", "eight hundred", "nine hundred" + ] + +- NumbersOrdinalHundreds: [ + "", "one hundredth", "two hundredth", "three hundredth", "four hundredth", "five hundredth", + "six hundredth", "seven hundredth", "eight hundredth", "nine hundredth" + ] + +- NumbersOrdinalPluralHundreds: [ + "", "one hundredths", "two hundredths", "three hundredths", "four hundredths", "five hundredths", + "six hundredths", "seven hundredths", "eight hundredths", "nine hundredths" + ] + + + # At this point, hopefully the language is regular. If not, code needs to be written +- NumbersLarge: [ + "", "thousand", "million", "billion", "trillion", "quadrillion", + "quintillion", "sextillion", "septillion", "octillion", "nonillion", + ] + +- NumbersOrdinalLarge: [ + "", "thousandth", "millionth", "billionth", "trillionth", "quadrillionth", + "quintillionth", "sextillionth", "septillionth", "octillionth", "nonillionth" + ] + +- NumbersOrdinalPluralLarge: [ + "", "thousandths", "millionths", "billionths", "trillionths", "quadrillionths", + "quintillionths", "sextillionths", "septillionths", "octillionths", "nonillionths" + ] diff --git a/Rules/Languages/hu/navigate.yaml b/Rules/Languages/hu/navigate.yaml new file mode 100644 index 000000000..7559b4222 --- /dev/null +++ b/Rules/Languages/hu/navigate.yaml @@ -0,0 +1,1751 @@ +--- +# Documentation: +# +# The general form for many rules is: +# 1. Say the command if this is first rule to fire (MatchCounter) and depending upon "NavVerbosity"s value +# This will increment MatchCounter so that the command won't be spoken again +# 2. Say info about moving into/out of 2D structures +# 3. Set some variables and possibly recurse. +# If stopping, "NavNode" should be set. +# +# The meaning of NavVerbosity: +# * Verbose -- always echo the command and end points (e.g., "can't move right") +# * Medium -- only echo the command for obscure commands like the placemarker commands; also say end points +# * Terse -- no echo of commands or end points +# +# For the second item, a common set of rules is used. These rules require the variable "Move2D" +# to be set along with "Child2D", where "Move2D" is either 'in' or 'out'. +# +# In addition, the navigation rules make use of two functions: +# +# int DistanceFromLeaf(node, leftSide, treat2DElementsAsTokens) +# Returns the distance (number of children) until a leaf is reached by traversing the leftmost/rightmost child +# If 'treat2DElementsAsTokens' is true, then 2D notations such as fractions are treated like leaves +# A leaf has distance == 0 +# +# EdgeNode(node, "left"/"right", stopNodeName) +# Returns the stopNode if at left/right edge of named ancestor node. 'stopNodeName' can also be "2D" +# If the stopNode isn't found, the original node is returned +# Note: if stopNodeName=="math", then punctuation is taken into account since it isn't really part of the math +# +# A few other variables are of importance to Navigation +# NavMode -- Enhanced, Simple, Character +# ReadZoomLevel -- -1 for Enhanced, otherwise the distance from leaf the rules should maintain +# PlaceMarkerIndex + +# Note: the rules for saying a command and announcing what is said when moving in/out of a 2d exprs are hacks +# They depend upon special variables "SayCommand" and "Move2D" being set and if they are, the rules are activated. +# If/when functions can be defined in a rules file, it is likely these would be much better done via those functions +# as they would likely be much more efficient and also cleaner. + +# Rules for announcing the command +- name: say-command + tag: "!*" + match: "$SayCommand != ''" # value should be '', 'true', or 'false' + variables: [Prefix: "''"] + replace: + - test: + - if: "$MatchCounter = 0 and $SayCommand = 'true'" + then_test: + - if: "self::m:math and starts-with($NavCommand, 'ZoomOut')" + then: [t: "zoomed out all of the way", pause: "medium"] + - else_if: "IsNode(., 'leaf') and starts-with($NavCommand, 'ZoomIn')" + then: + - test: + - if: "string-length(.) = 1" + then: [t: "zoomed in all of the way"] # phrase('zoomed in all of the way') + - else_if: "$NavNodeOffset = 0" + then: [t: "zoomed in to first character"] # phrase('zoomed in to first character') + else: [t: "zoomed to character"] # phrase('zoomed in to character') + - pause: "medium" + else: + - test: + - if: "starts-with($NavCommand, 'Zoom')" + then: [set_variables: [Prefix: "'zoom'"]] # phrase('zoom' in to see more details) + - else_if: "starts-with($NavCommand, 'Move')" + then: [set_variables: [Prefix: "'move'"]] # phrase('move' to next entry in table) + - else_if: "starts-with($NavCommand, 'Read')" + then: [set_variables: [Prefix: "'read'"]] # phrase('read' to next entry in table) + - else_if: "starts-with($NavCommand, 'Describe')" + then: [set_variables: [Prefix: "'describe'"]] # phrase('describe' to next entry in table) + - test: + if: "$Prefix != ''" + then: + - x: "$Prefix" + - test: + - if: "substring($NavCommand, string-length($Prefix)+1) = 'In'" + then: [t: "in"] # phrase(zoom 'in' to see more details) + - else_if: "substring($NavCommand, string-length($Prefix)+1) = 'InAll'" + # HACK: '\uF8FE' is used internally for the concatenation char by 'ct' -- this gets "ed" concatenated to "zoom" + then: [t: "\uF8FEed in all of the way"] # phrase(zoom 'out all of the way' to see more details) + - else_if: "substring($NavCommand, string-length($Prefix)+1) = 'Out'" + then: [t: "out"] # phrase(zoom 'out' to see more details) + - else_if: "substring($NavCommand, string-length($Prefix)+1) = 'OutAll'" + # HACK: '\uF8FE' is used internally for the concatenation char by 'ct' -- this gets "ed" concatenated to "zoom" + then: [t: "\uF8FEed out all of the way"] # phrase(zoom 'out all of the way' to see more details) + - else_if: "substring($NavCommand, string-length($Prefix)+1) = 'Next'" + then: [t: "right"] # phrase(move to the 'right') + - else_if: "substring($NavCommand, string-length($Prefix)+1) = 'Previous'" + then: [t: "left"] # phrase(move to the 'left') + - else_if: "substring($NavCommand, string-length($Prefix)+1) = 'Current'" + then: [t: "current"] # phrase(who is the 'current' president) + - else_if: "substring($NavCommand, string-length($Prefix)+1) = 'LineStart'" + then: [t: "to start of line"] # phrase(move 'to start of line') + - else_if: "substring($NavCommand, string-length($Prefix)+1) = 'LineEnd'" + then: [t: "to end of line"] # phrase(move 'to end of line') + - pause: "medium" + - set_variables: [MatchCounter: "$MatchCounter + 1"] + +- name: into-or-out-of-silent + tag: "*" + # saying "out of row n" is not very useful, so skip it + match: "$Move2D != '' and (not(@data-from-mathml) or @data-from-mathml = name(.)) and + (name(.)='mrow' or name(.) = 'mtr' or name(.) = 'mlabeledtr' or @data-from-mathml = 'mtable')" + replace: [] + +- name: into-or-out-of-mtr + tag: [mtr, mlabeledtr] + match: "$Move2D = 'in'" + replace: + - t: "column" + - x: "count($Child2D/preceding-sibling::*)+1" + - pause: "medium" + +- name: into-or-out-of-mmultiscripts + tag: "*" + match: "$Move2D != '' and (@data-from-mathml='mmultiscripts' or self::m:mmultiscripts)" + replace: + - test: + if: "name($Child2D)!='none'" + then: + - with: + variables: + - NumPrecedingSiblings: "count($Child2D/preceding-sibling::*)" + replace: + - x: "$Move2D" + - test: + - if: "$NumPrecedingSiblings=0" + then: [t: "base"] # phrase(the 'base' of the power) + - else_if: "$Child2D/preceding-sibling::*[self::m:mprescripts]" # are we before mprescripts and hence are postscripts + then: + - test: # in postscripts -- base shifts by one + if: "$NumPrecedingSiblings mod 2 = 0" + then: [t: "pre-subscript"] # phrase(x with 'subscript' 2) + else: [t: "pre-superscript"] # phrase(x with 'superscript' 2) + else: + - test: + if: "$NumPrecedingSiblings mod 2 = 0" + then: [t: "superscript"] # phrase(x with 'pre-superscript' 2) + else: [t: "subscript"] # phrase(x with 'pre-subscript' 2) + - pause: "medium" + +# Rules for speaking what happens when moving into or out of a notation +- name: into-or-out-of-default + tag: "*" + # saying "out of row n" is not very useful, so skip it + # match: "$Move2D != '' and @data-from-mathml and @data-from-mathml != name(.) and count(*)>1 and @data-from-mathml != 'mtable'" + match: "$Move2D != '' and not(self::m:math or @data-from-mathml = 'mtable' or @data-from-mathml = 'mtd') " + replace: + - with: + variables: + - PartNumber: "count($Child2D/preceding-sibling::*)" + - PartName: "GetNavigationPartName(name(.), $PartNumber)" + replace: + - x: "$Move2D" + - test: + - if: "$PartName != ''" + then: [x: "$PartName"] + - else_if: "count(*) = 1" + then_test: + if: "$NavVerbosity = 'Verbose'" + then: [x: "translate(name(.), '-_', ' ')"] # e.g., "in absolute value" + else: + - t: "part" # phrase(the 'part' of the expression) + - x: "count($Child2D/preceding-sibling::*) + 1" + - pause: "medium" + +- name: default-move + # nothing to do (not 2D) -- need to catch $Move2D though so rules based on NavCommand don't trigger + tag: "*" + match: "$Move2D != ''" + replace: [] + +# ********* Go back to last position *************** +# This is first since start/end position shouldn't matter +- name: move-last-location + + + tag: "*" + match: "$NavCommand = 'MoveLastLocation'" + replace: + - test: + if: "$NavVerbosity != 'Terse'" + then: + - test: + - if: "$PreviousNavCommand = 'ZoomIn'" + then: [t: "undo zoom in"] # phrase('undo zoom in') + - else_if: "$PreviousNavCommand = 'ZoomOut'" + then: [t: "undo zoom out"] # phrase('undo zoom out') + - else_if: "$PreviousNavCommand = 'ZoomInAll'" + then: [t: "undo zooming in all of the way"] # phrase('undo zooming in all of the way') + - else_if: "$PreviousNavCommand = 'ZoomOutAll'" + then: [t: "undo zooming out all of the way"] # phrase('undo zooming out all of the way') + - else_if: "$PreviousNavCommand = 'MovePrevious' or $PreviousNavCommand = 'MovePreviousZoom'" + then: [t: "undo move left"] # phrase('undo move left') + - else_if: "$PreviousNavCommand = 'MoveNext' or $PreviousNavCommand = 'MoveNextZoom'" + then: [t: "undo move right"] # phrase('undo move right') + - else_if: "$PreviousNavCommand = 'None'" + then: [t: "no previous command"] # phrase('no previous command') + - pause: "medium" + - set_variables: [NavNode: "@id"] + +# many times, for typographic reasons, people include punctuation at the end of a math expr +# these rules detect that and skip speaking it (should be similar regular rule) +- name: skip-punct-at-end-zoom-in + tag: mrow + match: + - "($NavCommand = 'ZoomIn' or $NavCommand = 'ZoomInAll' or $NavCommand = 'MoveNextZoom' or $NavCommand = 'MovePreviousZoom') and" + - " parent::m:math and count(*)=2 and" + - " *[2][translate(.,'.,;:?', '')='']" + replace: + - x: "*[1]" + +# ********* ZoomIn *************** +- name: zoom-in-leaf + + tag: "*" + match: "($NavCommand = 'ZoomIn' or $NavCommand = 'ZoomInAll') and IsNode(., 'leaf')" + replace: + - with: + variables: [SayCommand: "string($NavVerbosity != 'Terse')"] + replace: [x: "."] + - test: + if: "$ReadZoomLevel !=-1" + then: + - set_variables: [ReadZoomLevel: "0"] + - set_variables: + - NavNode: "@id" + - NavNodeOffset: "IfThenElse(string-length(.) > 1 and $MatchCounter = 1 and $NavNodeOffset = 0, '1', '0')" + +# special case of zooming into a table -- move to the first row (if only one row, first column) +- name: zoom-in-table + tag: "*" + match: "$NavCommand = 'ZoomIn' and (name(.) = 'mtable' or (count(*)=1 and *[1][@data-from-mathml='mtable']))" + replace: + - with: + variables: [SayCommand: "string($NavVerbosity = 'Verbose')"] + replace: [x: "."] + - set_variables: [NavNode: "IfThenElse(count(*)=1, (*[1]/*[1]/@id), (*[1]/@id))"] + +- name: zoom-in-mrow-in-math + # zooming in only once is meaningless because 'math' has only a single child and it was spoken at the math level -- dig inside and do it again + tag: math + match: "$NavCommand = 'ZoomIn' or $NavCommand = 'MoveNextZoom' or $NavCommand = 'MovePreviousZoom'" + replace: + - test: + if: "$NavCommand = 'MovePreviousZoom'" + then: [x: "*[last()]"] + else: [x: "*[1]"] + +- # For msqrt and menclose, if the single child isn't an mrow, don't zoom in + name: zoom-in-again + tag: "*" + match: + - "($NavCommand = 'ZoomIn' or " + - " ($NavCommand = 'MoveNextZoom' or $NavCommand = 'MovePreviousZoom') and $NavMode='Enhanced') and " + - "count(*)=1 and + (*[1][self::m:mrow or @data-from-mathml='mrow'] and + not(@data-from-mathml='msqrt' or self::m:msqrt or @data-from-mathml='menclose' or self::m:menclose))" + replace: + - with: + variables: [SayCommand: "string($NavVerbosity = 'Verbose')"] + replace: [x: "."] + - test: + if: "not(*[1][self::m:mrow or @data-from-mathml='mrow'])" + then: + - with: + variables: [Move2D: "'in'", Child2D: "IfThenElse($NavCommand = 'MovePreviousZoom', (*[last()]), (*[1]))"] # phrase('in' the denominator) + replace: [x: "IfThenElse($NavCommand = 'MovePreviousZoom', 1, $Child2D)"] + - test: + if: "$NavCommand = 'MovePreviousZoom'" + then: [x: "*[last()]"] + else: [x: "*[1]"] + +- name: zoom-in-enhanced + tag: "*" + match: "$NavCommand = 'ZoomIn' and $NavMode='Enhanced'" + replace: + - with: + variables: [SayCommand: "string($NavVerbosity = 'Verbose')"] + replace: [x: "."] + - test: + - if: "self::m:mtr or self::m:mlabeledtr" + then: + - with: + variables: [Move2D: "'in'", Child2D: "*[1]/*[1]"] # phrase('in' the denominator) + replace: [x: "."] + - set_variables: [NavNode: "*[1]/*[1]/@id"] # skip mtd + - else_if: "*[1][self::m:mrow and (IsBracketed(., '(', ')', false) or IsBracketed(., '[', ']', false))]" # auto zoom + then: + - with: + variables: [Move2D: "'in'", Child2D: "*[1]"] # phrase('in' the denominator) + replace: [x: "."] + - set_variables: [NavNode: "*[1]/*[2]/@id"] # skip parens/brackets + else: + - with: + variables: [Move2D: "'in'", Child2D: "*[1]"] # phrase('in' the denominator) + replace: [x: "."] + # "(...)" to get around some weird parse bug" + - set_variables: + - NavNode: "*[1]/@id" + - NavNodeOffset: "IfThenElse(*[1]/@data-id-offset, (*[1]/@data-id-offset), '0')" + + +- name: zoom-in-simple + tag: "*" + match: "$NavCommand = 'ZoomIn' and $NavMode='Simple'" + replace: + - with: + variables: [SayCommand: "string($NavVerbosity = 'Verbose')"] + replace: [x: "."] + - test: + if: "$MatchCounter > 1 and IsNode(., '2D')" + then: + - set_variables: # time to stop, not going "in" to next thing, so before "Move2D" + - NavNode: "@id" + - NavNodeOffset: "IfThenElse(@data-id-offset, @data-id-offset, '0')" + else: + - with: + variables: [Move2D: "'in'", Child2D: "*[1]"] # phrase('in' the denominator) + replace: [x: "."] + - x: "*[1]" + + # At this point, we are zooming in on a non-2D element, non-leaf in Character mode +- name: zoom-in-2D-character + tag: "*" + match: "$NavCommand = 'ZoomIn' and (IsNode(., '2D') or not(IsNode(., 'mathml')))" + replace: + - with: + variables: [SayCommand: "string($NavVerbosity = 'Verbose')"] + replace: [x: "."] + - with: + variables: [Move2D: "'in'", Child2D: "*[1]"] # phrase('in' the denominator) + replace: [x: "."] + - test: + if: "$NavMode = 'Simple'" + then: + - set_variables: [NavNode: "*[1]/@id"] + else: + - with: + variables: [NavCommand: "'MoveNextZoom'"] + replace: [x: "*[1]"] + + # At this point, we are zooming in on a non-2D element, non-leaf in Character mode +- name: zoom-in-default + tag: "*" + match: "$NavCommand = 'ZoomIn'" + replace: + - with: + variables: [SayCommand: "string($NavVerbosity = 'Verbose')"] + replace: [x: "."] + - x: "*[1]" + + +- name: zoom-in-all-default + tag: "*" + match: "$NavCommand = 'ZoomInAll'" + replace: + - with: + variables: [SayCommand: "string($NavVerbosity = 'Verbose')"] + replace: [x: "."] + - with: + variables: [Move2D: "'in'", Child2D: "*[1]"] # phrase('in' the denominator) + replace: [x: "."] + - x: "*[1]" + +- name: zoom-out + tag: math + match: "$NavCommand = 'ZoomOut' or $NavCommand = 'ZoomOutAll'" + replace: + - with: + variables: [SayCommand: "string($NavVerbosity != 'Terse')"] + replace: [x: "."] + - set_variables: [NavNode: "*[1]/@id"] # no-op for $NavCommand = 'ZoomOut' + +- name: skip-punct-at-end-zoom-out + tag: mrow + match: + - "($NavCommand = 'ZoomOut' or $NavCommand = 'ZoomOutAll') and" + - " parent::m:math and count(*)=2 and" + - " *[2][translate(.,'.,;:?', '')='']" + replace: + - x: ".." + +- name: zoom-out-top + tag: "*" + match: + - "($NavCommand = 'ZoomOut' or $NavCommand = 'ZoomOutAll') and" + - "parent::m:math" + replace: + - x: ".." # let math rule deal with it + +- name: zoom-out-all-default + tag: "*" + match: "$NavCommand = 'ZoomOutAll'" + replace: + - with: + variables: [SayCommand: "string($NavVerbosity = 'Verbose')"] + replace: [x: "."] + - with: + variables: [Move2D: "'out of'", Child2D: "."] + replace: [x: ".."] + - x: ".." + +# deal with internal zooming: MoveNextZoom and MovePreviousZoom + +# start with Enhanced mode +- name: move-zoom-enhanced + tag: "*" + match: + - "($NavCommand = 'MoveNextZoom' or $NavCommand = 'MovePreviousZoom') and " + - "$NavMode = 'Enhanced'" + replace: + - with: + variables: [Move2D: "'in'", Child2D: "*[1]"] # phrase('in' the denominator) + replace: [x: "."] + - test: + - if: "count(*)> 1 or IsNode(., 'leaf') or + @data-from-mathml='msqrt' or self::m:msqrt or @data-from-mathml='menclose' or self::m:menclose" + then: + - set_variables: + - NavNode: "@id" + - NavNodeOffset: "IfThenElse(@data-id-offset, @data-id-offset, '0')" + else: [x: "*[1]"] + +- name: move-next-zoom-not-enhanced + # $ReadZoomLevel must be >= 0 + tag: "*" + match: "$NavCommand = 'MoveNextZoom'" + replace: + #don't bother with MatchCounter since we only get here if > 1 + - test: + if: "IsNode(., 'leaf') or $ReadZoomLevel >= DistanceFromLeaf(., false, $NavMode!='Character')" + then: + # - with: + # variables: [Move2D: "'in'", Child2D: "following-sibling::*[1]"] # phrase('in' the denominator) + # replace: [x: ".."] + - set_variables: + - NavNode: "@id" + - NavNodeOffset: "IfThenElse(@data-id-offset, @data-id-offset, '0')" + else: + - with: + variables: [Move2D: "'in'", Child2D: "*[1]"] # phrase('in' the denominator) + replace: [x: "."] + - x: "*[1]" + +- name: move-previous-zoom-not-enhanced + # $ReadZoomLevel must be >= 0 + tag: "*" + match: "$NavCommand = 'MovePreviousZoom'" + replace: + #don't bother with MatchCounter since we only get here if > 1 + - test: + if: "$ReadZoomLevel >= DistanceFromLeaf(., true, $NavMode!='Character')" + then: + # - with: + # variables: [Move2D: "'in'", Child2D: "preceding-sibling::*[1]"] # phrase('in' the denominator) + # replace: [x: ".."] + - set_variables: + - NavNode: "@id" + - NavNodeOffset: "IfThenElse(@data-id-offset, @data-id-offset, '0')" + else: + - with: + variables: [Move2D: "'in'", Child2D: "*[last()]"] # phrase('in' the denominator) + replace: [x: "."] + - x: "*[last()]" + +# ********* ZoomOut *************** +- name: zoom-out-default + tag: mtd + match: "$Move2D = '' and ($NavCommand = 'ZoomOut')" + replace: + - with: + variables: [SayCommand: "string($NavVerbosity = 'Verbose')"] + replace: [x: "."] + # we need to speak it here + # - t: "row" # phrase(the first 'row' of the matrix) + # # if we let the speech rules speak the row, it is given just the MathML for the row, so the row # will always be '1' + # - x: "count(../preceding-sibling::*)+1" + # - pause: medium + - set_variables: + - NavNode: "../@id" + - NavNodeOffset: "IfThenElse(../@data-id-offset, ../@data-id-offset, '0')" + +- name: zoom-out + # a row around a single element -- these might duplicate the position/offset, so we jump an extra level here + tag: "*" + match: "$NavCommand = 'ZoomOut'" + replace: + - with: + variables: [SayCommand: "string($NavVerbosity = 'Verbose')"] + replace: [x: "."] + - test: + - if: "$NavNodeOffset > 0 and IsNode(., 'leaf')" # Inside leaf -- just reset offset, intent offset doesn't change + then: + - set_variables: [NavNodeOffset: "0"] + # NavNode remains the same + - else_if: "$NavMode='Enhanced' and parent::*[self::m:mrow and (IsBracketed(., '(', ')', false) or IsBracketed(., '[', ']', false))]" + then: [x: ".."] # auto-zoom: move out a level and retry + else: + - with: + variables: [Move2D: "'out of'", Child2D: "."] # phrase('out of' the denominator) + replace: [x: ".."] + - test: + if: "parent::m:mtd" + then: [x: ".."] + else: + - test: + if: "DEBUG($ReadZoomLevel)!=-1" + then: [set_variables: [ReadZoomLevel: "DistanceFromLeaf(.., true, $NavMode!='Character')"]] + - set_variables: + - NavNode: "../@id" + - NavNodeOffset: "IfThenElse(../@data-id-offset, ../@data-id-offset, '0')" + +# ********* MoveStart/End *************** +- name: math-move-to-start-or-end + tag: math + match: "$NavCommand = 'MoveStart' or $NavCommand = 'MoveLineStart' or $NavCommand = 'MoveEnd' or $NavCommand = 'MoveLineEnd'" + replace: + - with: + variables: [MatchCounter: "$MatchCounter + 1"] + replace: + - test: + if: "$NavVerbosity = 'Verbose'" + then: + - test: + - if: "$NavCommand = 'MoveStart'" + then: [t: "move to start of math"] # phrase('move to start of math') + - else_if: "$NavCommand = 'MoveLineStart'" + then: [t: "move to start of line"] # phrase('move to start of line') + - else_if: "$NavCommand = 'MoveEnd'" + then: [t: "move to end of math"] # phrase('move to end of math') + else: [t: "move to end of line"] # "$NavCommand = 'MoveLineEnd'" # phrase('move to end of line') + - pause: "medium" + - test: + if: "$NavCommand = 'MoveStart' or $NavCommand = 'MoveLineStart'" + then: + # move inside of the mrow inside of 'math' or inside the fraction, etc (hence two levels down) + # Note: an apparent bug in the xpath code doesn't let me use IfThenElse for the 2 if: then: below + - with: + variables: [NavCommand: "'MoveNextZoom'"] + replace: + - test: + if: "*[1]/*[1]" # could be a x, so no grandchild + then: [x: "*[1]/*[1]"] + else: [x: "*[1]"] + else: + - with: + variables: [NavCommand: "'MovePreviousZoom'"] + replace: + - test: + if: "*[last()]/*[last()]" # could be a x, so no grandchild + then: [x: "*[last()]/*[last()]"] + else: [x: "*[last()]"] + +# We stop when the parent is 2d (e.g., frac), but not if in leaf base of msub/msup/msubsup/mmultiscripts because that's really on the same line +- name: move-to-start-or-end-2d + tag: "*" + match: + - "($NavCommand = 'MoveLineStart' or $NavCommand = 'MoveLineEnd') and IsNode(.., '2D') and" + - "not( IsNode(., 'leaf') and" + - " parent::*[1][self::m:msub or self::m:msup or self::m:msubsup or self::m:mmultiscripts or" + - " @data-from-mathml and" + - " (@data-from-mathml='msub' or @data-from-mathml='msup' or" + - " @data-from-mathml='msubsup' or @data-from-mathml='mmultiscripts')" + - " ] )" + replace: + - test: + if: "$NavVerbosity = 'Verbose'" + then: + - test: + if: "$NavCommand = 'MoveLineStart'" + then: [t: "move to start of line"] # phrase('move to start of line') + else: [t: "move to end of line"] # "$NavCommand = 'MoveLineEnd'" # phrase('move to end of line') + - pause: "medium" + - test: + if: "self::m:mrow or @data-from-mathml = 'mrow'" + then_test: + if: "$NavCommand = 'MoveLineStart'" + then: + - with: + variables: [NavCommand: "'MoveNextZoom'"] + replace: [x: "*[1]"] + else: + - with: + variables: [NavCommand: "'MovePreviousZoom'"] + replace: [x: "*[last()]"] + else: [set_variables: [NavNode: "@id"]] + +- name: move-to-start-or-end-default + tag: "*" + match: "$NavCommand = 'MoveStart' or $NavCommand = 'MoveLineStart' or $NavCommand = 'MoveEnd' or $NavCommand = 'MoveLineEnd'" + replace: + - with: + variables: [MatchCounter: "$MatchCounter + 1"] + replace: [x: ".."] + +# Table-related movement +# Typically, we need to zoom out to the mtd level, then we move the appropriate direction +- name: not-in-table + + + tag: math + match: + - "$NavCommand='MoveCellPrevious' or $NavCommand='MoveCellNext' or" + - "$NavCommand='MoveCellUp' or $NavCommand='MoveCellDown' or" + - "$NavCommand='MoveColumnStart' or $NavCommand='MoveColumnEnd' or" + - "$NavCommand='ReadCellCurrent'" + replace: + - t: "not in table" # phrase('not in table') + - pause: long + - set_variables: [SpeakExpression: "'false'"] + +- name: move-cell-previous + tag: mtd + match: "$NavCommand='MoveCellPrevious'" + replace: + - test: + if: "preceding-sibling::*" + then: + - test: + if: "$NavVerbosity = 'Verbose'" + then: + - t: "move left" # phrase('move left') + - pause: short + - test: + if: "$NavVerbosity != 'Terse'" + then: + - t: "column" # phrase(the first 'column' of the table) + - x: "count(preceding-sibling::*)" + - pause: medium + - test: + if: "$NavMode='Character'" + then: + - with: + variables: [NavCommand: "'MovePreviousZoom'"] + replace: [x: "preceding-sibling::*[1]"] + else: + - set_variables: [NavNode: "preceding-sibling::*[1]/*[1]/@id"] + else: + - t: "no previous column" # phrase('no previous column' in the table) + - set_variables: [SpeakExpression: "'false'"] + +- name: move-cell-next + tag: mtd + match: "$NavCommand='MoveCellNext'" + replace: + - test: + if: "following-sibling::*" + then: + - test: + if: "$NavVerbosity = 'Verbose'" + then: + - t: "move right" # phrase('move right') + - pause: short + - test: + if: "$NavVerbosity != 'Terse'" + then: + - t: "column" # phrase(the first 'column' in the table) + - x: "count(preceding-sibling::*)+2" + - pause: medium + - test: + if: "$NavMode='Character'" + then: + - with: + variables: [NavCommand: "'MoveNextZoom'"] + replace: [x: "following-sibling::*[1]"] + else: + - set_variables: [NavNode: "following-sibling::*[1]/*[1]/@id"] + else: + - t: "no next column" # phrase('no next column' in the table) + - set_variables: [SpeakExpression: "'false'"] + +- name: move-cell-up + tag: mtd + match: "$NavCommand='MoveCellUp'" + replace: + - test: + if: "../preceding-sibling::*" + then: + - with: + variables: [Column: "count(preceding-sibling::*)+1"] # store this because otherwise the value is used in the wrong context below + replace: + - test: + if: "$NavVerbosity = 'Verbose'" + then: + - t: "move up" # phrase('move up' to previous row in the table) + - pause: short + - test: + if: "$NavVerbosity != 'Terse'" + then: + - t: "row" # phrase(the previous 'row' in the table) + - x: "count(../preceding-sibling::*)" + - pause: short + - t: "column" # phrase(the previous 'column' in the table) + - x: "count(preceding-sibling::*)+1" + - pause: medium + - test: + if: "$NavMode='Character'" + then: + - with: + variables: [NavCommand: "'MoveNextZoom'"] + replace: [x: "../preceding-sibling::*[1]/*[$Column]"] + else: + - set_variables: [NavNode: "../preceding-sibling::*[1]/*[$Column]/*[1]/@id"] + else: + - t: "no previous row" # phrase('no previous row' in the table) + - set_variables: [SpeakExpression: "'false'"] + +- name: move-cell-down + tag: mtd + match: "$NavCommand='MoveCellDown'" + replace: + - test: + if: "../following-sibling::*" + then: + - with: + variables: [Column: "count(preceding-sibling::*)+1"] # store this because otherwise the value is used in the wrong context below + replace: + - test: + if: "$NavVerbosity = 'Verbose'" + then: + - t: "move down" # phrase('move down' to the next row in the table) + - pause: short + - test: + if: "$NavVerbosity != 'Terse'" + then: + - t: "row" # phrase(the next 'row' in the table) + - x: "count(../preceding-sibling::*)+2" + - pause: short + - t: "column" # phrase(the next 'column' in the table) + - x: "count(preceding-sibling::*)+1" + - pause: medium + - test: + if: "$NavMode='Character'" + then: + - with: + variables: [NavCommand: "'MoveNextZoom'"] + replace: [x: "../following-sibling::*[1]/*[$Column]"] + else: + - set_variables: [NavNode: "../following-sibling::*[1]/*[$Column]/*[1]/@id"] + else: + - t: "no next row" # phrase('no next row' in the table) + - set_variables: [SpeakExpression: "'false'"] + +- name: move-cell-up + tag: [mtr, mlabeledtr] + match: "$NavCommand='MoveCellUp'" + replace: + - test: + if: "$NavVerbosity = 'Verbose'" + then: + - t: "move to previous row" # phrase('move to previous row' in the table) + - pause: medium + - test: + if: "preceding-sibling::*" + then: + - test: + if: "$NavMode='Character'" + then: + - with: + variables: [NavCommand: "'MoveNextZoom'"] + replace: [x: "preceding-sibling::*[1]"] + else: + - set_variables: [NavNode: "preceding-sibling::*[1]/@id"] + else: + - t: "no previous row" # phrase('no previous row' in the table) + - set_variables: [SpeakExpression: "'false'"] + +- name: move-cell-down + tag: [mtr, mlabeledtr] + match: "$NavCommand='MoveCellDown'" + replace: + - test: + if: "$NavVerbosity = 'Verbose'" + then: + - t: "move to next row" # phrase('move to next row' in the table) + - pause: medium + - test: + if: "following-sibling::*" + then: + - test: + if: "$NavMode='Character'" + then: + - with: + variables: [NavCommand: "'MoveNextZoom'"] + replace: [x: "following-sibling::*[1]"] + else: + - set_variables: [NavNode: "following-sibling::*[1]/@id"] + else: + - t: "no next row" # phrase('no next row' in the table) + - set_variables: [SpeakExpression: "'false'"] + +- name: move-cell-previous + # if a row is selected, there is no previous/next column, so this is trivial + tag: [mtr, mlabeledtr] + match: "$NavCommand='MoveCellPrevious'" + replace: + - test: + if: "$NavVerbosity = 'Verbose'" + then: + - t: "move to previous column" # phrase('move to previous column' in the table) + - pause: medium + - t: "no previous column" # phrase('no previous column' in the table) + - set_variables: [SpeakExpression: "'false'"] + +- name: move-cell-next + # if a row is selected, there is no previous/next column, so this is trivial + tag: [mtr, mlabeledtr] + match: "$NavCommand='MoveCellNext'" + replace: + - test: + if: "$NavVerbosity = 'Verbose'" + then: + - t: "move to next column" # phrase('move to next column' in the table) + - pause: medium + - t: "no next column" # phrase('no next row' in the table) + - set_variables: [SpeakExpression: "'false'"] + +- name: default-read-cell + tag: "*" + match: "$NavCommand='ReadCellCurrent'" + replace: + - with: + variables: [MTD: "ancestor::m:mtd"] + replace: + - test: + if: "$MTD" + then: + - test: + if: "$NavVerbosity = 'Verbose'" + then: + - t: "read current entry" # phrase('read current entry' in the table) + - pause: medium + - test: + if: "$NavVerbosity != 'Terse'" + then: + - t: "row" # phrase(the previous 'row' in the table) + - x: "count($MTD[1]/../preceding-sibling::*)+1" + - pause: short + - t: "column" # phrase(the previous 'column' in the table) + - x: "count($MTD[1]/preceding-sibling::*)+1" + - pause: short + - set_variables: [NavNode: "$MTD[1]/*[1]/@id"] + else: + - t: "not in table" # phrase('not in table' or matrix) + - pause: long + - set_variables: [SpeakExpression: "'false'"] + +# mtd ? ( $NavCommand='MoveColumnStart' ) +# => MoveColStart { +# ruleRef = name(^^match); +# column = index(match); +# ::StartPosition = ^^match[0][index(match)][0].dfs; +# ::EndPosition = ^^match[0][index(match)][0].offset; +# }; + +# mtd ? ( $NavCommand='MoveColumnEnd' ) +# => MoveColEnd { +# ruleRef = name(^^match); +# column = index(match); +# ::StartPosition = ^^match[count(^^match)-1][index(match)][0].dfs; +# ::EndPosition = ^^match[count(^^match)-1][index(match)][0].offset; +# }; + + + +# # Rules for columnar math (mstack and mlongdiv) -- each row is an msrow or mscarries except for the start of mlongdiv +# # FIX: not dealing with different number of digits on different lines +# # FIX: not dealing with + (etc) on same line if they are on the right side (Dutch, others) +# # FIX: not dealing with intervening msline (say it and move on??) +# # FIX: not dealing with carries well +# # FIX: not dealing with navigation of first three children of mlongdiv +# char ? ( has_parent(match, 2) && name(^match)=="mn" && name(^^match)=="msrow" && +# ($NavCommand="MovePrevious" || $NavCommand='MoveCellPrevious') && has_previous(match) ) +# => MoveCell { +# ruleRef = name(^^match); +# wordRef = "previous"; +# ::StartPosition = previous(match).dfs; +# ::EndPosition = previous(match).offset; +# }; + +# # no previous child -- in first column -- don't move +# char ? ( has_parent(match, 2) && name(^match)=="mn" && name(^^match)=="msrow" && +# ($NavCommand="MovePrevious" || $NavCommand='MoveCellPrevious' ) ) +# => MoveCell { +# ruleRef = name(^^match); +# wordRef = "previous"; +# childIndex = -1; # key to know what to say for each notation +# ::SpeakAfterMove = false; +# }; + +# char ? ( has_parent(match, 2) && name(^match)=="mn" && name(^^match)=="msrow" && +# ($NavCommand="MoveNext" || $NavCommand='MoveCellNext') && has_next(match) ) +# => MoveCell { +# ruleRef = name(^^match); +# wordRef = "next"; +# ::StartPosition = next(match).dfs; +# ::EndPosition = next(match).offset; +# }; + +# # no next child -- in first column -- don't move +# char ? ( has_parent(match, 2) && name(^match)=="mn" && name(^^match)=="msrow" && +# ($NavCommand="MoveNext" || $NavCommand='MoveCellNext' ) ) +# => MoveCell { +# ruleRef = name(^^match); +# wordRef = "next"; +# childIndex = -1; # key to know what to say for each notation +# ::SpeakAfterMove = false; +# }; + +# char ? ( has_parent(match, 2) && name(^match)=="mn" && name(^^match)=="msrow" && +# $NavCommand='MoveCellUp' && has_previous(^^match) ) +# => MoveCell { +# ruleRef = name(^^match); +# wordRef = "up"; +# ::StartPosition = ^^^match[index(^^match)-1][-1][index(match)-count(^match)].dfs; +# ::EndPosition = ^^^match[index(^^match)-1][-1][index(match)-count(^match)].offset; +# }; + +# # no previous child -- in first column -- don't move +# char ? ( has_parent(match, 2) && name(^match)=="mn" && name(^^match)=="msrow" && +# $NavCommand='MoveCellUp' ) +# => MoveCell { +# ruleRef = name(^^match); +# wordRef = "up"; +# childIndex = -1; # key to know what to say for each notation +# ::SpeakAfterMove = false; +# }; + +# char ? ( has_parent(match, 2) && name(^match)=="mn" && name(^^match)=="msrow" && +# $NavCommand='MoveCellDown' && has_next(^^match) ) +# => MoveCell { +# ruleRef = name(^^match); +# wordRef = "down"; +# ::StartPosition = ^^^match[index(^^match)+1][-1][index(match)-count(^match)].dfs; +# ::EndPosition = ^^^match[index(^^match)+1][-1][index(match)-count(^match)].offset; +# }; + +# # no previous child -- in first column -- don't move +# char ? ( has_parent(match, 2) && name(^match)=="mn" && name(^^match)=="msrow" && +# $NavCommand='MoveCellDown' ) +# => MoveCell { +# ruleRef = name(^^match); +# wordRef = "down"; +# childIndex = -1; # key to know what to say for each notation +# ::SpeakAfterMove = false; +# }; + +# char ? ( has_parent(match, 2) && name(^match)=="mn" && name(^^match)=="msrow" && +# $NavCommand='MoveColumnStart' ) +# => MoveColStart { +# ruleRef = name(^^match); +# column = index(match); +# ::StartPosition = ^^^match[0][-1][index(match)-count(^match)].dfs; +# ::EndPosition = ^^^match[0][-1][index(match)-count(^match)].offset; +# }; + +# char ? ( has_parent(match, 2) && name(^match)=="mn" && name(^^match)=="msrow" && +# $NavCommand='MoveColumnEnd' ) +# => MoveColEnd { +# ruleRef = name(^^match); +# column = index(match); +# ::StartPosition = ^^^match[count(^^^match)-1][-1][index(match)-count(^match)].dfs; +# ::EndPosition = ^^^match[count(^^^match)-1][-1][index(match)-count(^match)].offset; +# }; + +# any ? ( (name(match)=="mn" || name(match)=="none") && +# has_parent(match) && name(^match)=="mscarries" && +# ($NavCommand="MovePrevious" || $NavCommand='MoveCellPrevious') && has_previous(match) ) +# => MoveCell { +# ruleRef = name(^match); +# wordRef = "previous"; +# ::StartPosition = previous(match).dfs; +# ::EndPosition = previous(match).offset; +# }; + +# # no previous child -- in first column -- don't move +# any ? ( (name(match)=="mn" || name(match)=="none") && +# has_parent(match) && name(^match)=="mscarries" && +# ($NavCommand="MovePrevious" || $NavCommand='MoveCellPrevious') ) +# => MoveCell { +# ruleRef = name(^match); +# wordRef = "previous"; +# childIndex = -1; # key to know what to say for each notation +# ::SpeakAfterMove = false; +# }; + +# any ? ( (name(match)=="mn" || name(match)=="none") && +# has_parent(match) && name(^match)=="mscarries" && +# ($NavCommand="MoveNext" || $NavCommand='MoveCellNext') && has_next(match) ) +# => MoveCell { +# ruleRef = name(^match); +# wordRef = "next"; +# ::StartPosition = next(match).dfs; +# ::EndPosition = next(match).offset; +# }; + +# # no next child -- in last column -- don't move +# any ? ( (name(match)=="mn" || name(match)=="none") && +# has_parent(match) && name(^match)=="mscarries" && +# ($NavCommand="MoveNext" || $NavCommand='MoveCellNext') ) +# => MoveCell { +# ruleRef = name(^match); +# wordRef = "next"; +# childIndex = -1; # key to know what to say for each notation +# ::SpeakAfterMove = false; +# }; + +# any ? ( (name(match)=="mn" || name(match)=="none") && +# has_parent(match) && name(^match)=="mscarries" && +# $NavCommand='MoveCellUp' && has_previous(^match) ) +# => MoveCell { +# ruleRef = name(^match); +# wordRef = "up"; +# ::StartPosition = ^^match[index(^match)-1][index(match)-count(^match)].dfs; +# ::EndPosition = ^^match[index(^match)-1][index(match)-count(^match)].offset; +# }; + +# # no previous child -- in first row -- don't move +# any ? ( (name(match)=="mn" || name(match)=="none") && +# has_parent(match) && name(^match)=="mscarries" && +# $NavCommand='MoveCellUp' ) +# => MoveCell { +# ruleRef = name(^match); +# wordRef = "up"; +# childIndex = -1; # key to know what to say for each notation +# ::SpeakAfterMove = false; +# }; + +# any ? ( (name(match)=="mn" || name(match)=="none") && +# has_parent(match) && name(^match)=="mscarries" && +# $NavCommand='MoveCellDown' && has_next(^match) ) +# => MoveCell { +# ruleRef = name(^match); +# wordRef = "down"; +# ::StartPosition = ^^match[index(^match)+1][-1][index(match)-count(^match)].dfs; +# ::EndPosition = ^^match[index(^match)+1][-1][index(match)-count(^match)].offset; +# }; + +# # no next child -- in last row -- don't move +# any ? ( (name(match)=="mn" || name(match)=="none") && +# has_parent(match) && name(^match)=="mscarries" && +# $NavCommand='MoveCellDown' ) +# => MoveCell { +# ruleRef = name(^match); +# wordRef = "down"; +# childIndex = -1; # key to know what to say for each notation +# ::SpeakAfterMove = false; +# }; + +# mn ? ( has_parent(match, 2) && name(^match)=="mn" && name(^^match)=="msrow" && +# $NavCommand='MoveColumnStart' ) +# => MoveColStart { +# ruleRef = name(^^match); +# column = index(match); +# ::StartPosition = ^^^match[0][-1][index(match)-count(^match)].dfs; +# ::EndPosition = ^^^match[0][-1][index(match)-count(^match)].offset; +# }; + +# mn ? ( has_parent(match, 2) && name(^match)=="mn" && name(^^match)=="msrow" && +# $NavCommand='MoveColumnEnd' ) +# => MoveColEnd { +# ruleRef = name(^^match); +# column = index(match); +# ::StartPosition = ^^^match[count(^^^match)-1][-1][index(match)-count(^match)].dfs; +# ::EndPosition = ^^^match[count(^^^match)-1][-1][index(match)-count(^match)].offset; +# }; + + + +- name: default-cell-move + + tag: "*" + match: + - "$NavCommand='MoveCellPrevious' or $NavCommand='MoveCellNext' or" + - "$NavCommand='MoveCellUp' or $NavCommand='MoveCellDown' or" + - "$NavCommand='MoveColumnStart' or $NavCommand='MoveColumnEnd' or" + - "$NavCommand='ReadCellCurrent'" + replace: + - test: + if: "ancestor::m:mtd" + then: + - x: "ancestor::m:mtd[1]" # try again on an mtd node + else: + - t: "not in table" # phrase('not in table' or matrix) + - pause: long + - set_variables: [SpeakExpression: "'false'"] + +# ======== Move/Read/Describe Next rules ================= + + +- name: move-next-character + tag: [mn, mi, mtext] + match: + - "($NavCommand = 'MoveNext' or $NavCommand = 'ReadNext' or $NavCommand = 'DescribeNext' or $NavCommand = 'MoveNextZoom') and" + - "$NavNodeOffset > 0 and" + - "($NavNodeOffset < string-length(.) or name(EdgeNode(., 'right', 'math'))!='math')" # not at edge of math + replace: + - test: + if: "$NavNodeOffset < string-length(.)" + then: + - with: + variables: [SayCommand: "string($NavVerbosity = 'Verbose')"] + replace: [x: "."] + - set_variables: [NavNodeOffset: "$NavNodeOffset + 1"] + else: + - with: + variables: [SayCommand: "string($NavVerbosity = 'Verbose')"] + replace: [x: "."] + - set_variables: [NavNodeOffset: "0"] + - x: "." + +# skip 'none' +- name: move-next-none + tag: [none, mprescripts] + match: + - "($NavCommand = 'MoveNext' or $NavCommand = 'ReadNext' or $NavCommand = 'DescribeNext' or $NavCommand = 'DescribePrevious' or $NavCommand = 'MoveNextZoom') and" + - "parent::*[1][name(.)='mmultiscripts'] and following-sibling::*" + replace: + - with: + variables: [Following: "following-sibling::*[1]"] + replace: + # two 'none's in a row -- move over and try again; one 'none', zoom in on next + - test: + if: "$Following[name(.)='none']" + then: [x: "$Following"] + else: + - with: + variables: [Move2D: "'in'", Child2D: "$Following"] # phrase('in' the denominator) + replace: [x: ".."] + - with: + variables: [NavCommand: "'MoveNextZoom'"] + replace: [x: "$Following"] + + + +# skip invisible chars except for Enhanced mode when "times" should be read +- name: move-next-invisible + tag: "*" + match: + - "($NavCommand = 'MoveNext' or $NavCommand = 'ReadNext' or $NavCommand = 'DescribeNext') and" + - "following-sibling::*[1][name(.)='mo' and translate(., '\u2061\u2062\u2063\u2064', '')='']" + replace: + - with: + variables: [SayCommand: "string($NavVerbosity = 'Verbose')"] + replace: [x: "."] + - test: + if: "following-sibling::*[1][.='\u2062' or .='\u2064'] and + ($NavMode='Enhanced' or ($NavMode='Simple' and following-sibling::*[2][not(IsNode(., 'mathml'))]))" # invisible times and plus + then: [set_variables: [NavNode: "following-sibling::*[1]/@id"]] + else: [x: "following-sibling::*[1]"] + +- name: move-next-no-auto-zoom-at-edge + # at edge of 2D and in a mode where moving right isn't an option + tag: "*" + variables: [EdgeNode: "EdgeNode(., 'right', '2D')"] + match: "$NavCommand = 'MoveNext' and $NavMode!='Character' and not($AutoZoomOut) and $EdgeNode/@id!=@id" + replace: + - test: + if: "$MatchCounter = 0 and $NavVerbosity = 'Verbose'" + then: + - t: "cannot move right" # phrase('cannot move right') + - pause: medium + - with: + variables: + - Move2D: "'end of'" + - Child2D: "$EdgeNode/*[last()]" + - MatchCounter: $MatchCounter + 1 + replace: [x: "$EdgeNode"] + - pause: long + - set_variables: [SpeakExpression: "'false'"] + +- name: move-next-no-auto-zoom-at-edge-math + # at edge of math -- no where to go (must be after we rule out being at the edge of 2D) because we want to speak that + tag: "*" + match: + - "($NavCommand = 'MoveNext' or $NavCommand = 'ReadNext' or $NavCommand = 'DescribeNext') and" + - "(self::m:math or name(EdgeNode(., 'right', 'math'))='math')" # at edge of math + replace: + - test: + if: "$MatchCounter = 0 and $NavVerbosity = 'Verbose'" + then: + - t: "cannot" # phrase('cannot' move right in expression) + - test: + - if: "$NavCommand = 'MoveNext'" + then: [t: "move"] # phrase('move' to next entry in table) + - else_if: "$NavCommand = 'ReadNext'" + then: [t: "read"] # phrase('read' next entry in table) + else: [t: "describe"] # phrase('describe' next entry in table) + - t: "right" # phrase(move 'right') + - pause: short + - t: "end of math" # phrase(move 'end of math') + - pause: long + - set_variables: [SpeakExpression: "'false'"] + +- name: move-next-auto-zoom-up-one-level + # Last child or in auto-zoom'd in-- move up a level and try again + # Note: we've already checked the for the case where we are at an edge and should not AutoZoomOut + tag: "*" + match: + - "($NavCommand = 'MoveNext' or $NavCommand = 'ReadNext' or $NavCommand = 'DescribeNext') and" + - "( not(following-sibling::*) or" + - " ( $NavMode='Enhanced' and " + - " count(following-sibling::*)=1 and (IsBracketed(.., '(', ')') or IsBracketed(.., '[', ']'))" + - " )" + - ")" + replace: + - with: + variables: [SayCommand: "string($NavVerbosity = 'Verbose')"] + replace: [x: "."] + - test: + if: "following-sibling::*" + then: + - with: + variables: [Move2D: "'in'", Child2D: "."] # phrase('in' the denominator) + replace: [x: ".."] + else: + - with: + variables: [Move2D: "'out of'", Child2D: "."] + replace: [x: ".."] + - x: ".." + +# At this point, if XXXNext, then we know there is must be a right sibling +- name: move-next-default + tag: mtd + match: "$Move2D = '' and ($NavCommand = 'MoveNext' or $NavCommand = 'ReadNext' or $NavCommand = 'DescribeNext')" + replace: + - with: + variables: [SayCommand: "string($NavVerbosity = 'Verbose')"] + replace: [x: "."] + - test: + if: "following-sibling::*" + then: + - test: + if: "$NavVerbosity = 'Verbose'" + then: + - t: "column" # phrase(the previous 'column' in the table) + - x: "count(preceding-sibling::*)+2" + - pause: short + - test: + if: "$NavMode = 'Character'" + then: + - with: + variables: [NavCommand: "'MoveNextZoom'"] + replace: [x: "following-sibling::*[1]"] + else: [set_variables: [NavNode: "following-sibling::*[1]/*[1]/@id"]] + else: + - x: ".." # try again at the row level + +- name: move-next-default + tag: [mtr, mlabeledtr] + match: "$Move2D = '' and + ($NavCommand = 'MoveNext' or $NavCommand = 'ReadNext' or $NavCommand = 'DescribeNext') and + following-sibling::*" + replace: + - with: + variables: [SayCommand: "string($NavVerbosity = 'Verbose')"] + replace: [x: "."] + - test: + if: "$NavMode = 'Character'" + then: + - with: + variables: [NavCommand: "'MoveNextZoom'"] + replace: [x: "following-sibling::*[1]"] + else: + - set_variables: [NavNode: "following-sibling::*[1]/@id"] + +- name: move-next-auto-zoom-parens + # auto-zoom into next child if next child is parenthesized expr + tag: "*" + match: + - "($NavCommand = 'MoveNext' or $NavCommand = 'ReadNext' or $NavCommand = 'DescribeNext') and" + - "$NavMode='Enhanced' and" + - "parent::m:mrow and following-sibling::* and" + - "following-sibling::*[1][self::m:mrow and count(*)=3 and " #exclude empty parens + - " (IsBracketed(., '(', ')') or IsBracketed(., '[', ']'))" + - " ]" + replace: + - with: + variables: [SayCommand: "string($NavVerbosity = 'Verbose')"] + replace: [x: "."] + - set_variables: [NavNode: "following-sibling::*[1]/*[2]/@id"] + +# normal cases for MoveNext +- name: move-next-locked-zoom-level + # locked zoom level + tag: "*" + match: + - "($NavCommand = 'MoveNext' or $NavCommand = 'ReadNext' or $NavCommand = 'DescribeNext') and" + - "$ReadZoomLevel>=0" + replace: + - with: + variables: [SayCommand: "string($NavVerbosity = 'Verbose')"] + replace: [x: "."] + - test: + # if in base (nothing before), we must be moving to a script, so "in" will be said + if: "preceding-sibling::* and following-sibling::*[1][name(.)='none']" + then: + - with: + variables: [Move2D: "'out of'", Child2D: "."] + replace: [x: ".."] + - x: "following-sibling::*[1]" + else: + - with: + variables: [Move2D: "'in'", Child2D: "following-sibling::*[1]"] # phrase('in' the denominator) + replace: [x: ".."] + - with: + variables: [NavCommand: "'MoveNextZoom'"] + replace: [x: "following-sibling::*[1]"] + +- name: move-next-default + tag: "*" + match: "$NavCommand = 'MoveNext' or $NavCommand = 'ReadNext' or $NavCommand = 'DescribeNext'" + replace: + - with: + variables: [SayCommand: "string($NavVerbosity = 'Verbose')"] + replace: [x: "."] + - test: + if: "following-sibling::*[1][@data-from-mathml='none' or @data-from-mathml='mprescripts']" + then: [x: "following-sibling::*[1]"] + else: + - test: + if: "IsNode(.., '2D') or not(IsNode(.., 'mathml'))" + then: + - with: + variables: [Move2D: "'in'", Child2D: "following-sibling::*[1]"] # phrase('in' the denominator) + replace: [x: ".."] + - set_variables: [NavNode: "following-sibling::*[1]/@id"] + +# ======== Move/Read/Describe Previous rules ================= + +# skip 'none' +- name: move-previous-none + tag: [none, mprescripts] + match: + - "($NavCommand = 'MovePrevious' or $NavCommand = 'ReadPrevious' or $NavCommand = 'DescribePrevious' or $NavCommand = 'MovePreviousZoom') and" + - "parent::*[1][name(.)='mmultiscripts'] and preceding-sibling::*" + replace: + - with: + variables: [Preceding: "preceding-sibling::*[1]"] + replace: + # two 'none's in a row -- move over and try again; one 'none', zoom in on preceding + - test: + if: "$Preceding[name(.)='none']" + then: [x: "$Preceding"] + else: + - with: + variables: [Move2D: "'in'", Child2D: "$Preceding"] # phrase('in' the denominator) + replace: [x: ".."] + - with: + variables: [NavCommand: "'MovePreviousZoom'"] + replace: [x: "$Preceding"] + + +# skip invisible chars except for Enhanced mode when "times" should be read +- name: move-previous-invisible + tag: "*" + match: + - "($NavCommand = 'MovePrevious' or $NavCommand = 'ReadPrevious' or $NavCommand = 'DescribePrevious') and" + - "preceding-sibling::*[1][name(.)='mo' and translate(., '\u2061\u2062\u2063\u2064', '')='']" + replace: + - with: + variables: [SayCommand: "string($NavVerbosity = 'Verbose')"] + replace: [x: "."] + - test: + if: "preceding-sibling::*[1][.='\u2062' or .='\u2064'] and $NavMode='Enhanced'" # invisible times and plus + then: [set_variables: [NavNode: "preceding-sibling::*[1]/@id"]] + else: [x: "preceding-sibling::*[1]"] + +# two rules for when can't move left +- name: move-previous-no-auto-zoom-at-edge + # at edge of 2D and in a mode where moving left isn't an option + tag: "*" + variables: [EdgeNode: "EdgeNode(., 'left', '2D')"] + match: "$NavCommand = 'MovePrevious' and $NavMode!='Character' and not($AutoZoomOut) and $EdgeNode/@id!=@id" + replace: + - test: + if: "$MatchCounter = 0 and $NavVerbosity = 'Verbose' and $NavCommand = 'MovePrevious'" + then: + - t: "cannot move left" # phrase('cannot move left' in expression) + - pause: medium + - with: + variables: + - Move2D: "'end of'" + - Child2D: "$EdgeNode/*[1]" + - MatchCounter: $MatchCounter + 1 + replace: [x: "$EdgeNode"] + - pause: long + +- name: move-previous-no-auto-zoom-at-edge-of-math + # at edge of math -- no where to go (must be after we rule out being at the edge of 2D) because we want to speak that + tag: "*" + match: + - "($NavCommand = 'MovePrevious' or $NavCommand = 'ReadPrevious' or $NavCommand = 'DescribePrevious') and" + - "(self::m:math or name(EdgeNode(., 'left', 'math'))='math')" + replace: + - t: "start of math" # phrase('start of math') + - pause: long + - set_variables: [SpeakExpression: "'false'"] + +- name: move-previous-at-end + tag: "*" + match: + - "($NavCommand = 'MovePrevious' or $NavCommand = 'ReadPrevious' or $NavCommand = 'DescribePrevious') and" + - "name(EdgeNode(., 'left', 'math'))='math'" # at edge of math + replace: + - test: + if: "$MatchCounter = 0 and $NavVerbosity = 'Verbose'" + then: + - t: "cannot move left" # phrase('cannot move left') + - pause: short + - with: + variables: [Move2D: "'start of'", Child2D: "."] + replace: [x: "."] + - pause: long + - set_variables: [SpeakExpression: "'false'"] + +- name: move-prev-character + tag: [mn, mi, mtext] + match: + - "($NavCommand = 'MovePrevious' or $NavCommand = 'ReadPrevious' or $NavCommand = 'DescribePrevious' or $NavCommand = 'MovePreviousZoom') and" + - "$NavNodeOffset > 0 and" + - "($NavNodeOffset > 1 or name(EdgeNode(., 'left', 'math'))!='math')" # not at edge of math + replace: + - test: + if: "$NavNodeOffset > 1" + then: + - with: + variables: [SayCommand: "string($NavVerbosity = 'Verbose')"] + replace: [x: "."] + - set_variables: [NavNodeOffset: "$NavNodeOffset - 1"] + else: + - with: + variables: [SayCommand: "string($NavVerbosity = 'Verbose')"] + replace: [x: "."] + - set_variables: [NavNodeOffset: "0"] + - x: "." + +- name: move-previous-auto-zoom-up-one-level + # Last child or in auto-zoom'd in-- move up a level and try again + # Note: we've already checked the for the case where we are at an edge and should not AutoZoomOut + tag: "*" + match: + - "($NavCommand = 'MovePrevious' or $NavCommand = 'ReadPrevious' or $NavCommand = 'DescribePrevious') and" + - "( not(preceding-sibling::*) or" + - " ( $NavMode='Enhanced' and " + - " count(preceding-sibling::*)=1 and (IsBracketed(.., '(', ')') or IsBracketed(.., '[', ']'))" + - " )" + - ")" + replace: + - with: + variables: [SayCommand: "string($NavVerbosity = 'Verbose')"] + replace: [x: "."] + - test: + if: "preceding-sibling::*" + then: + - with: + variables: [Move2D: "'in'", Child2D: "."] # phrase('in' the denominator) + replace: [x: ".."] + else: + - with: + variables: [Move2D: "'out of'", Child2D: "."] + replace: [x: ".."] + - x: ".." + +- name: move-previous-auto-zoom-parens + # auto-zoom into previous child if previous child is parenthesized expr + # Note: there is an asymmetry here from MoveNext because the base of a scripted might have parens for grouping, but not true for the script + tag: "*" + match: + - "($NavCommand = 'MovePrevious' or $NavCommand = 'ReadPrevious' or $NavCommand = 'DescribePrevious') and" + - "$NavMode='Enhanced' and" + - "preceding-sibling::* and" + - "(parent::m:mrow or parent::m:msub or parent::m:msup or" + - " (count(preceding-sibling::*)=1 and (parent::m:msubsup or parent::m:mmultiscripts))" # make sure moving into base + - ") and" + - "preceding-sibling::*[1][self::m:mrow and count(*)=3 and " #exclude empty parens + - " (IsBracketed(., '(', ')') or IsBracketed(., '[', ']'))" + - " ]" + replace: + - with: + variables: [SayCommand: "string($NavVerbosity = 'Verbose')"] + replace: [x: "."] + - test: + if: "not(parent::m:mrow)" + then: + - with: + variables: [Move2D: "'in'", Child2D: "preceding-sibling::*[1]"] # phrase('in' the denominator) + replace: [x: ".."] + - set_variables: [NavNode: "preceding-sibling::*[1]/*[2]/@id"] + +# normal cases for MovePrevious + +- name: move-previous-default + tag: mtd + match: "$Move2D = '' and + ($NavCommand = 'MovePrevious' or $NavCommand = 'ReadPrevious' or $NavCommand = 'DescribePrevious') and + preceding-sibling::*" + replace: + - with: + variables: [SayCommand: "string($NavVerbosity = 'Verbose')"] + replace: [x: "."] + - test: + if: "$NavVerbosity = 'Verbose'" + then: + - t: "column" # phrase(the first 'column' in the table) + - x: "count(preceding-sibling::*)" + - pause: short + - test: + if: "$NavMode = 'Character'" + then: + - with: + variables: [NavCommand: "'MovePreviousZoom'"] + replace: [x: "preceding-sibling::*[1]"] + else: [set_variables: [NavNode: "preceding-sibling::*[1]/*[last()]/@id"]] + +- name: move-previous-default + tag: [mtr, mlabeledtr] + match: "$Move2D = '' and ($NavCommand = 'MovePrevious' or $NavCommand = 'ReadPrevious' or $NavCommand = 'DescribePrevious')" + replace: + - with: + variables: [SayCommand: "string($NavVerbosity = 'Verbose')"] + replace: [x: "."] + - test: + if: "preceding-sibling::*" + then: + - test: + if: "$NavMode = 'Character'" + then: + - with: + variables: [NavCommand: "'MovePreviousZoom'"] + replace: [x: "preceding-sibling::*[1]"] + else: + - set_variables: [NavNode: "preceding-sibling::*[1]/@id"] + else: [x: ".."] # try again for after + +- name: move-previous-locked-zoom-level + # locked zoom level + tag: "*" + match: + - "($NavCommand = 'MovePrevious' or $NavCommand = 'ReadPrevious' or $NavCommand = 'DescribePrevious') and" + - "$ReadZoomLevel>=0" + replace: + - with: + variables: [SayCommand: "string($NavVerbosity = 'Verbose')"] + replace: [x: "."] + - test: + # if moving into base (nothing before), we must be moving to the base, so "in" will be said + if: "count(preceding-sibling::*) > 2 and preceding-sibling::*[1][name(.)='none']" + then: + - with: + variables: [Move2D: "'out of'", Child2D: "."] + replace: [x: ".."] + - x: "preceding-sibling::*[1]" # skip over 'none' + else: + - with: + variables: [Move2D: "'in'", Child2D: "preceding-sibling::*[1]"] # phrase('in' the denominator) + replace: [x: ".."] + - with: + variables: [NavCommand: "'MovePreviousZoom'"] + replace: [x: "preceding-sibling::*[1]"] + +- name: move-previous-default + tag: "*" + match: "$NavCommand = 'MovePrevious' or $NavCommand = 'ReadPrevious' or $NavCommand = 'DescribePrevious'" + replace: + - with: + variables: [SayCommand: "string($NavVerbosity = 'Verbose')"] + replace: [x: "."] + - test: + if: "preceding-sibling::*[1][@data-from-mathml='none' or @data-from-mathml='mprescripts']" + then: [x: "preceding-sibling::*[1]"] + else: + - test: + if: "IsNode(.., '2D') or not(IsNode(.., 'mathml'))" + then: + - with: + variables: [Move2D: "'in'", Child2D: "preceding-sibling::*[1]"] # phrase('in' the denominator) + replace: [x: ".."] + - set_variables: [NavNode: "preceding-sibling::*[1]/@id"] + +# ********* ReadZoomLevel toggle *************** +# These set ::NavMode + +- name: toggle-mode-up + tag: "*" + match: "$NavCommand = 'ToggleZoomLockUp'" + replace: + - test: + - if: "$NavMode = 'Enhanced'" + then: + - t: "character" # phrase(a mathematical 'character') + - set_variables: [NavMode: "'Character'", ReadZoomLevel: "1"] + - else_if: "$NavMode = 'Character'" + then: + - t: "simple" # phrase(a 'simple' way to do something) + - set_variables: [NavMode: "'Simple'", ReadZoomLevel: "1"] + - else: + - t: "enhanced" # phrase(an 'enhanced' way to do something) + - set_variables: [NavMode: "'Enhanced'", ReadZoomLevel: "-1"] + - t: "mode" # phrase(a simple 'mode' of use) + - pause: long + - test: + - if: "$NavMode != 'Enhanced'" # potentially need to zoom to the sibling + then: + - with: + variables: [MatchCounter: "$MatchCounter + 1", NavCommand: "'MoveNextZoom'"] + replace: [x: "."] + +- name: toggle-mode-down + tag: "*" + match: "$NavCommand = 'ToggleZoomLockDown'" + replace: + - test: + - if: "$NavMode = 'Enhanced'" + then: + - t: "simple" # phrase(a 'simple' way to do something) + - set_variables: [NavMode: "'Simple'", ReadZoomLevel: "1"] + - else_if: "$NavMode = 'Character'" + then: + - t: "enhanced" # phrase(an 'enhanced' way to do something) + - set_variables: [NavMode: "'Enhanced'", ReadZoomLevel: "-1"] + - else: + - t: "character" # phrase(a mathematical 'character') + - set_variables: [NavMode: "'Character'", ReadZoomLevel: "1"] + - t: "mode" # phrase(a simple 'mode' of use) + - pause: long + - test: + - if: "$NavMode != 'Enhanced'" # potentially need to zoom to the sibling + then: + - with: + variables: [MatchCounter: "$MatchCounter + 1", NavCommand: "'MoveNextZoom'"] + replace: [x: "."] + +- name: toggle-speech-describe + tag: "*" + match: "$NavCommand = 'ToggleSpeakMode'" + replace: + - test: + if: "$Overview = 'true'" + then: + - t: "speak expression after move" # phrase('speak expression after move') + - pause: long + - set_variables: [Overview: "'false'"] + else: + - t: "overview of expression after move" # phrase('overview of expression after move') + - pause: long + - set_variables: [Overview: "'true'"] + +- name: current + tag: "*" + match: "$NavCommand = 'ReadCurrent' or $NavCommand = 'DescribeCurrent'" + replace: + - test: + if: "$NavVerbosity = 'Verbose'" + then: + - test: + - if: "$NavCommand = 'ReadCurrent'" + then: [t: "read"] # phrase('read' next entry in table) + else: [t: "describe"] # phrase('describe' next entry in table) + - t: "current" # phrase('current' entry in table) + - pause: long + - set_variables: [NavNode: "@id"] + +# this needs to be near the end because we only test for 'Describe', "Read", etc., and we don't want to get 'DescribeNext', etc. +- name: placemarker + + tag: "*" + match: + - "starts-with($NavCommand, 'Read') or " + - "starts-with($NavCommand, 'Describe') or " + - "starts-with($NavCommand, 'MoveTo')" + replace: + - test: + if: "$NavVerbosity != 'Terse'" + then: + - test: + - if: "starts-with($NavCommand, 'Read')" + then: [t: "read"] # phrase('read' next entry in table) + - else_if: "starts-with($NavCommand, 'Describe')" + then: [t: "describe"] # phrase('describe' next entry in table) + - else_if: "starts-with($NavCommand, 'MoveTo')" + then: [t: "move to "] # phrase('move to' the next entry in table) + else: [t: "set"] # phrase('set' the value of the next entry in table) + - t: "placeholder" # phrase('placeholder' for the value) + - x: "$PlaceMarkerIndex" + - pause: long + - set_variables: [NavNode: "$PlaceMarker"] + +- name: set-placemarker + tag: "*" + match: "starts-with($NavCommand, 'SetPlacemarker')" + replace: + - test: + if: "$NavVerbosity != 'Terse'" + then: + - t: "set placeholder" # phrase('set placeholder' to the value) + - x: "$PlaceMarkerIndex" + - pause: long + - set_variables: [NavNode: "@id"] + +# ********* WhereAmI *************** + +# FIX: WhereAmI needs support from the Rust code to loop around and do speech at each iteration. +# Alternatively, it could insert a special token that Rust code does a "replace" on with the speech (e.g. SPEECH_AT{id}) +# or a new command "speak" which takes a node id +- name: where-am-i-start + tag: "*" + match: "($NavCommand = 'WhereAmI' or $NavCommand = 'WhereAmIAll') and $MatchCounter = 0" + replace: + - translate: "@id" + - pause: long + - with: + variables: [MatchCounter: "$MatchCounter + 1"] + replace: [x: ".."] + +- name: where-am-i-stop + tag: "*" + match: + - "($NavCommand = 'WhereAmI' or $NavCommand = 'WhereAmIAll') and $MatchCounter > 0 and" + # stopping conditions + - "(self::m:math or " + - " parent::*[self::m:math and (count(*)=1 or (count(*)=2 and *[2][.=',' or .='.' or .=';' or .='?']) ) ] " + - ")" + replace: + - test: + if: "$NavCommand = 'WhereAmI'" + then: + - t: "inside of nothing more" # phrase('inside of nothing more') + - pause: long + - set_variables: [SpeakExpression: "'false'"] + else: + - t: "inside" # phrase('inside' a big expression) + - pause: medium + - set_variables: [NavNode: "@id"] + +- name: where-am-i-middle + tag: "*" + match: "$NavCommand = 'WhereAmI' or $NavCommand = 'WhereAmIAll'" + replace: + - t: "inside" # phrase('inside' a big expression) + - pause: medium + - test: + - if: "$NavMode='Enhanced' and parent::*[self::m:mrow and (IsBracketed(., '(', ')', false) or IsBracketed(., '[', ']', false))]" + then: [x: ".."] # auto-zoom up + - else_if: "$NavCommand = 'WhereAmI'" + then: [set_variables: [NavNode: "@id"]] + else: + - translate: "@id" + - pause: long + - x: '..' diff --git a/Rules/Languages/hu/overview.yaml b/Rules/Languages/hu/overview.yaml new file mode 100644 index 000000000..ff48608e9 --- /dev/null +++ b/Rules/Languages/hu/overview.yaml @@ -0,0 +1,112 @@ +--- +# Provide an overview/outline/description of the math +# MathPlayer just tried to shorten things like "mfrac" by just saying "fraction" +# For mrow, it say up to 5 operands and just say "and n more things" for the rest +# This results in strings of varying length. Given human memory is about 7 words long, +# it would be better to aim for 7 words (maybe aim for a range of 6-10 words). +# Idea: +# Start by generating a terse form of the speech +# At every step when the strings are being joined +# a) if the #words <= 7, return the joined string +# b) otherwise, set verbosity to 'overview' and regenerate the expression and use that +# There is a balance that you want to maximize the info given, so 10 words is likely better then 3. +# That might mean that at the top level, we may want to allow the first few children to expand + + +- name: overview-default + tag: [mfrac, fraction] + match: "." + replace: + - test: + if: "IsNode(*[1], 'simple') and IsNode(*[2], 'simple')" + then: + - x: "*[1]" + - t: "per" + - x: "*[2]" + else: + - t: "tört" + +- name: overview-default + tag: [msqrt, "square-root"] + match: "." + replace: + - t: "négyzetgyök" + - test: + if: "IsNode(*[1], 'simple')" + then: + - x: "*[1]" + +- name: overview-default + tag: [mroot, root] + match: "." + replace: + - test: + if: "*[2][self::m:mn]" + then_test: + - if: "*[2][.='2']" + then: [t: "négyzetgyök"] + - else_if: "*[2][.='3']" + then: [t: "köbgyök"] + - else_if: "*[2][not(contains(., '.'))]" + then: [x: "ToOrdinal(*[2])", t: "gyök"] + else: + - test: + if: "*[2][self::m:mi][string-length(.)=1]" + then: + - x: "*[2]" + - pronounce: [text: "-th", ipa: "θ", sapi5: "th", eloquence: "T"] + else: [x: "*[2]"] + - t: "gyök" + - test: + if: "IsNode(*[1], 'simple')" + then: + - x: "*[1]" + +- name: matrix-override + tag: mrow + match: + - "*[2][self::m:mtable] and" + - "(IsBracketed(., '(', ')') or IsBracketed(., '[', ']') or IsBracketed(., '|', '|'))" + replace: + - x: count(*[2]/*) + - t: "szer" + - x: count(*[2]/*[self::m:mtr][1]/*) + - test: + if: "*[1][.='|']" # just need to check the first bracket since we know it must be (, [, or | + then: [t: "determináns"] + else: [t: "mátrix"] + +- name: overview-default + tag: mtable + match: "." + replace: + - x: count(*[2]/*) + - t: "szer" + - x: count(*[2]/*[self::m:mtr][1]/*) + - t: "táblázat" + +- name: short-mrow + tag: mrow + match: "count(*)<6" + replace: + - insert: + nodes: "*" + replace: [pause: auto] + +- name: long-mrow + tag: mrow + match: "." + replace: + - x: "*[1]" + - pause: auto + - x: "*[2]" + - pause: auto + - x: "*[3]" + - pause: auto + - x: "*[4]" + - pause: auto + - x: "*[5]" + - pause: auto + - t: "és így tovább" + +- include: "SimpleSpeak_Rules.yaml" diff --git a/Rules/Languages/hu/unicode-full.yaml b/Rules/Languages/hu/unicode-full.yaml new file mode 100644 index 000000000..eb4a6cbe4 --- /dev/null +++ b/Rules/Languages/hu/unicode-full.yaml @@ -0,0 +1,3802 @@ +--- + + + - "¢": [t: "cents"] # 0xa2 + - "£": [t: "pounds"] # 0xa3 + - "¤": [t: "currency sign"] # 0xa4 + - "¥": [t: "yen"] # 0xa5 + - "¦": [t: "broken bar"] # 0xa6 + - "§": [t: "section"] # 0xa7 + - "¨": [t: "double dot"] # 0xa8 + - "©": [t: "copyright"] # 0xa9 + - "ª": [t: "feminine ordinal indicator"] # 0xaa + - "¬": [t: "not"] # 0xac + - "«": [t: "left-pointing double angle quote mark"] # 0xab + - "¯": # 0xaf + - test: + if: "ancestor::m:modified-variable and preceding-sibling::*[1][self::m:mi]" + then: [t: "bar"] + else: [t: "line"] + - "²": [t: "two"] # 0xb2 + - "³": [t: "three"] # 0xb3 + - "´": [t: "acute"] # 0xb4 + - "µ": [t: "micro"] # 0xb5 + - "¹": [t: "one"] # 0xb9 + - "º": [t: "masculine ordinal indicator"] # 0xb9 + - "·": + - test: + if: "$SpeechStyle != 'ClearSpeak' or $ClearSpeak_MultSymbolDot = 'Auto'" + then: [t: "times"] + else: [t: "dot"] + - "×": # 0xd7 + - test: + if: "$SpeechStyle != 'ClearSpeak' or $ClearSpeak_MultSymbolX = 'Auto'" + then: [t: "times"] + else_test: + if: $ClearSpeak_MultSymbolX = 'By' + then: [t: "by"] + else: [t: "cross"] + - "÷": [t: "divided by"] # 0xf7 + - "¡": [t: "inverted exclamation mark"] # 0xa1 + - "¶": [t: "paragraph mark"] # 0xb6 + - "¿": [t: "inverted question mark"] # 0xbf + + - "ʰ": [t: "modifier small h"] # 0x2b0 + - "ʱ": [t: "modifier small h with hook"] # 0x2b1 + - "ʲ": [t: "modifier small j"] # 0x2b2 + - "ʳ": [t: "modifier small r"] # 0x2b3 + - "ʴ": [t: "modifier small turned r"] # 0x2b4 + - "ʵ": [t: "modifier small turned r with hook"] # 0x2b5 + - "ʶ": # 0x2b6 + - t: "modifier small inverted" + - spell: "translate('R', 'R', 'R')" + + - "ʷ": [t: "modifier small w"] # 0x2b7 + - "ʸ": [t: "modifier small y"] # 0x2b8 + - "ʹ": [t: "modifier prime"] # 0x2b9 + - "ʺ": [t: "modifier double prime"] # 0x2ba + - "ʻ": [t: "modifier turned comma"] # 0x2bb + - "ʼ": [t: "modifier apostrophe"] # 0x2bc + - "ʽ": [t: "modifier reversed comma"] # 0x2bd + - "ʾ": [t: "modifier right half ring"] # 0x2be + - "ʿ": [t: "modifier left half ring"] # 0x2bf + - "ˀ": [t: "modifier glottal stop"] # 0x2c0 + - "ˁ": [t: "modifier reversed glottal stop"] # 0x2c1 + - "˂": [t: "modifier left arrowhead"] # 0x2c2 + - "˃": [t: "modifier right arrowhead"] # 0x2c3 + - "˄": [t: "modifier up arrowhead"] # 0x2c4 + - "˅": [t: "modifier down arrowhead"] # 0x2c5 + - "ˆ": [t: "modifier circumflex accent"] # 0x2c6 + - "ˇ": [t: "check"] # 0x2c7 + - "ˈ": [t: "modifier vertical line"] # 0x2c8 + - "ˉ": [t: "modifier macron"] # 0x2c9 + - "ˊ": [t: "modifier acute accent"] # 0x2ca + - "ˋ": [t: "modifier grave accent"] # 0x2cb + - "ˌ": [t: "modifier low vertical line"] # 0x2cc + - "ˍ": [t: "modifier low macron"] # 0x2cd + - "ˎ": [t: "modifier low grave accent"] # 0x2ce + - "ˏ": [t: "modifier low acute accent"] # 0x2cf + - "ː": [t: "modifier triangular colon"] # 0x2d0 + - "ˑ": [t: "modifier half triangular colon"] # 0x2d1 + - "˒": [t: "modifier centered right half ring"] # 0x2d2 + - "˓": [t: "modifier centered left half ring"] # 0x2d3 + - "˔": [t: "modifier up tadck"] # 0x2d4 + - "˕": [t: "modifier down tack"] # 0x2d5 + - "˖": [t: "modifier plus sign"] # 0x2d6 + - "˗": [t: "modifier minus sign"] # 0x2d7 + - "˘": [t: "breve"] # 0x2d8 + - "˙": [t: "dot"] # 0x2d9 + - "˚": [t: "ring above"] # 0x2da + - "˛": [t: "ogonek"] # 0x2db + - "˜": [t: "small tilde"] # 0x2dc + - "˝": [t: "double acute accent"] # 0x2dd + - "˞": [t: "modifier rhotic hook"] # 0x2de + - "˟": [t: "modifier cross accent"] # 0x2df + - "ˠ": [t: "modifier small gamma"] # 0x2e0 + - "ˡ": [t: "modifier small l"] # 0x2e1 + - "ˢ": [t: "modifier small s"] # 0x2e2 + - "ˣ": [t: "modifier small x"] # 0x2e3 + - "ˤ": [t: "modifier small reversed glottal stop"] # 0x2e4 + - "˥": [t: "modifier extra-high tone bar"] # 0x2e5 + - "˦": [t: "modifier high tone bar"] # 0x2e6 + - "˧": [t: "modifier mid tone bar"] # 0x2e7 + - "˨": [t: "modifier low tone bar"] # 0x2e8 + - "˩": [t: "modifier extra-low tone bar"] # 0x2e9 + - "˪": [t: "modifier yin departing tone mark"] # 0x2ea + - "˫": [t: "modifier yang departing tone mark"] # 0x2eb + - "ˬ": [t: "modifier voicing"] # 0x2ec + - "˭": [t: "modifier unaspirated"] # 0x2ed + - "ˮ": [t: "modifier double apostrophe"] # 0x2ee + - "˯": [t: "modifier low down arrowhead"] # 0x2ef + - "˰": [t: "modifier low up arrowhead"] # 0x2f0 + - "˱": [t: "modifier low left arrowhead"] # 0x2f1 + - "˲": [t: "modifier low right arrowhead"] # 0x2f2 + - "˳": [t: "modifier low ring"] # 0x2f3 + - "˴": [t: "modifier middle grave accent"] # 0x2f4 + - "˵": [t: "modifier middle double grave accent"] # 0x2f5 + - "˶": [t: "modifier middle double acute accent"] # 0x2f6 + - "˷": [t: "modifier low tilde"] # 0x2f7 + - "˸": [t: "modifier raised colon"] # 0x2f8 + - "˹": [t: "modifier begin high tone"] # 0x2f9 + - "˺": [t: "modifier end high tone"] # 0x2fa + - "˻": [t: "modifier begin low tone"] # 0x2fb + - "˼": [t: "modifier end low tone"] # 0x2fc + - "˽": [t: "modifier shelf"] # 0x2fd + - "˾": [t: "modifier open shelf"] # 0x2fe + - "˿": [t: "modifier low left arrow"] # 0x2ff + - "̀": [t: "grave accent embellishment"] # 0x300 + - "́": [t: "acute accent embellishment"] # 0x301 + - "̂": [t: "circumflex accent embellishment"] # 0x302 + - "̃": [t: "tilde embellishment"] # 0x303 + - "̄": [t: "macron embellishment"] # 0x304 + - "̅": [t: "overbar embellishment"] # 0x305 + - "̆": [t: "breve embellishment"] # 0x306 + - "̇": [t: "dot above embellishment"] # 0x307 + - "̈": [t: "diaeresis embellishment"] # 0x308 + - "̉": [t: "hook above embellishment"] # 0x309 + - "̊": [t: "ring above embellishment"] # 0x30a + - "̋": [t: "double acute accent embellishment"] # 0x30b + - "̌": [t: "check"] # 0x30c + - "̍": [t: "vertical line above embellishment"] # 0x30d + - "̎": [t: "double vertical line above embellishment"] # 0x30e + - "̏": [t: "double grave accent embellishment"] # 0x30f + - "̐": [t: "candrabindu embellishment"] # 0x310 + - "̑": [t: "inverted breve embellishment"] # 0x311 + - "̒": [t: "turned comma above embellishment"] # 0x312 + - "̓": [t: "comma above embellishment"] # 0x313 + - "̔": [t: "reversed comma above embellishment"] # 0x314 + - "̕": [t: "comma above right embellishment"] # 0x315 + - "̖": [t: "grave accent below embellishment"] # 0x316 + - "̗": [t: "acute accent below embellishment"] # 0x317 + - "̘": [t: "left tack below embellishment"] # 0x318 + - "̙": [t: "right tack below embellishment"] # 0x319 + - "̚": [t: "left angle above embellishment"] # 0x31a + - "̛": [t: "horn embellishment"] # 0x31b + - "̜": [t: "left half ring below embellishment"] # 0x31c + - "̝": [t: "up tack below embellishment"] # 0x31d + - "̞": [t: "down tack below embellishment"] # 0x31e + - "̟": [t: "plus sign below embellishment"] # 0x31f + - "̠": [t: "minus sign below embellishment"] # 0x320 + - "̡": [t: "palatalized hook below embellishment"] # 0x321 + - "̢": [t: "retroflex hook below embellishment"] # 0x322 + - "̣": [t: "dot below embellishment"] # 0x323 + - "̤": [t: "diaeresis below embellishment"] # 0x324 + - "̥": [t: "ring below embellishment"] # 0x325 + - "̦": [t: "comma below embellishment"] # 0x326 + - "̧": [t: "cedilla embellishment"] # 0x327 + - "̨": [t: "ogonek embellishment"] # 0x328 + - "̩": [t: "vertical line below embellishment"] # 0x329 + - "̪": [t: "bridge below embellishment"] # 0x32a + - "̫": [t: "inverted double arch below embellishment"] # 0x32b + - "̬": [t: "caron below embellishment"] # 0x32c + - "̭": [t: "circumflex accent below embellishment"] # 0x32d + - "̮": [t: "breve below embellishment"] # 0x32e + - "̯": [t: "inverted breve below embellishment"] # 0x32f + - "̰": [t: "tilde below embellishment"] # 0x330 + - "̱": [t: "macron below embellishment"] # 0x331 + - "̲": [t: "low line embellishment"] # 0x332 + - "̳": [t: "double low line embellishment"] # 0x333 + - "̴": [t: "tilde overlay embellishment"] # 0x334 + - "̵": [t: "short stroke overlay embellishment"] # 0x335 + - "̶": [t: "long stroke overlay embellishment"] # 0x336 + - "̷": [t: "short solidus overlay embellishment"] # 0x337 + - "̸": [t: "long solidus overlay embellishment"] # 0x338 + - "̹": [t: "right half ring below embellishment"] # 0x339 + - "̺": [t: "inverted bridge below embellishment"] # 0x33a + - "̻": [t: "square below embellishment"] # 0x33b + - "̼": [t: "seagull below embellishment"] # 0x33c + - "̽": [t: "x above embellishment"] # 0x33d + - "̾": [t: "vertical tilde embellishment"] # 0x33e + - "̿": [t: "double overline embellishment"] # 0x33f + - "̀": [t: "grave tone mark embellishment"] # 0x340 + - "́": [t: "acute tone mark embellishment"] # 0x341 + - "͆": [t: "bridge above"] # 0x346 + + - "ΪΫϏ": # 0x3aa, 0x3ab, 0x3cf + - 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: "cap"] + else: [x: "$SpeechOverrides_CapitalLetters"] + - pitch: + value: "$CapitalLetters_Pitch" + replace: [spell: "translate('.', 'ΪΫϏ', 'ιυϗ')"] + - t: "with dialytika" + - "ϊ": [t: "iota with dialytika"] # 0x3ca + - "ϋ": [t: "upsilon with dialytika"] # 0x3cb + - "ό": [t: "omicron with tonos"] # 0x3cc + - "ύ": [t: "upsilon with tonos"] # 0x3cd + - "ώ": [t: "omega with tonos"] # 0x3ce + - "ϐ": [t: "beta"] # 0x3d0 + - "ϑ": [t: "theta"] # 0x3d1 + - "ϒ": [t: "upsilon with hook"] # 0x3d2 + - "ϓ": [t: "upsilon with acute and hook"] # 0x3d3 + - "ϔ": [t: "upsilon with diaeresis and hook"] # 0x3d4 + - "ϕ": [t: "phi"] # 0x3d5 + - "ϖ": [t: "pi"] # 0x3d6 + - "ϗ": [t: "kai"] # 0x3d7 + - "Ϙ": [t: "cap archaic koppa"] # 0x3d8 + - "ϙ": [t: "archaic koppa"] # 0x3d9 + - "ϵ": [t: "epsilon"] # 0x3f5 + - "϶": [t: "reversed epsilon"] # 0x3f6 + - "А-Я": # 0x410 - 0x42f + - 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: "cap"] + else: [x: "$SpeechOverrides_CapitalLetters"] + - pitch: + value: "$CapitalLetters_Pitch" + replace: [spell: "translate('.', 'АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ', 'абвгдежзийклмнопрстуфхцчшщъыьэюя')"] + - "а": [t: "a"] # 0x430 + - "б": [t: "be"] # 0x431 + - "в": [t: "ve"] # 0x432 + - "г": [t: "ghe"] # 0x433 + - "д": [t: "de"] # 0x434 + - "е": [t: "ie"] # 0x435 + - "ж": [t: "zhe"] # 0x436 + - "з": [t: "ze"] # 0x437 + - "и": [t: "i"] # 0x438 + - "й": [t: "short i"] # 0x439 + - "к": [t: "ka"] # 0x43a + - "л": [t: "el"] # 0x43b + - "м": [t: "em"] # 0x43c + - "н": [t: "en"] # 0x43d + - "о": [t: "o"] # 0x43e + - "п": [t: "pe"] # 0x43f + - "р": [t: "er"] # 0x440 + - "с": [t: "es"] # 0x441 + - "т": [t: "te"] # 0x442 + - "у": [t: "u"] # 0x443 + - "ф": [t: "ef"] # 0x444 + - "х": [t: "ha"] # 0x445 + - "ц": [t: "tse"] # 0x446 + - "ч": [t: "che"] # 0x447 + - "ш": [t: "sha"] # 0x448 + - "щ": [t: "shcha"] # 0x449 + - "ъ": [t: "hard sign"] # 0x44a + - "ы": [t: "yeru"] # 0x44b + - "ь": [t: "soft sign"] # 0x44c + - "э": [t: "e"] # 0x44d + - "ю": [t: "yu"] # 0x44e + - "я": [t: "ya"] # 0x44f + - "؆": [t: "Arabic-Indic cube root"] # 0x606 + - "؇": [t: "Arabic-Indic fourth root"] # 0x607 + - "؈": [t: "Arabic ray"] # 0x608 + - "‐": [t: "hyphen"] # 0x2010 + - "‑": [t: "hyphen"] # 0x2011 + - "‒": [t: "figure dash"] # 0x2012 + - "–": [t: "en dash"] # 0x2013 + - "—": [t: "em dash"] # 0x2014 + - "―": [t: "horizontal bar"] # 0x2015 + - "‖": [t: "double vertical line"] # 0x2016 + - "†": [t: "dagger"] # 0x2020 + - "‡": [t: "double dagger"] # 0x2021 + + - " - ": [t: " "] # 0x2000 - 0x2007 + + - "•": # 0x2022 + - test: + if: "@data-chem-formula-op" + then: [t: "dot"] + else: [t: "bullet"] + + - "…": # 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][.='…']" + then: [t: "dot dot dot"] + else_test: # must have $ClearSpeak_Ellipses = 'AndSoOn' + if: "count(following-sibling::*) = 0" + then: [t: "and so on"] + else: [t: "and so on up to"] + + - "‰": [t: "per mille"] # 0x2030 + - "‱": [t: "per ten thousand"] # 0x2031 + - "′": [t: "prime"] # 0x2032 + - "″": [t: "double prime"] # 0x2033 + - "‴": [t: "triple prime"] # 0x2034 + - "‵": [t: "reversed prime"] # 0x2035 + - "‶": [t: "reversed double prime"] # 0x2036 + - "‷": [t: "reversed triple prime"] # 0x2037 + - "‸": [t: "to the"] # 0x2038 + - "‹": [t: "single left pointing angle quote mark"] # 0x2039 + - "›": [t: "single right pointing angle quote mark"] # 0x203a + - "‼": # 0x203c + - test: + if: "ancestor-or-self::*[contains(@data-intent-property, ':literal:')]" + then: [t: "double exclamation point"] # 0x203c + else: [t: "double factorial"] # 0x203c + - "⁄": # 0x2044 + - test: + if: "ancestor-or-self::*[contains(@data-intent-property, ':literal:')]" + then: [t: "large slash"] # 0x203c + else: [t: "divided by"] # 0x203c + - "⁅": [t: "left square bracket with quill"] # 0x2045 + - "⁆": [t: "right square bracket with quill"] # 0x2046 + - "※": [t: "reference mark"] # 0x203b + - "‿": [t: "under tie"] # 0x203F + - "⁀": [t: "tie"] # 0x2040 + - "⁎": [t: "low asterisk"] # 0x204e + - "⁏": [t: "reversed semicolon"] # 0x204f + - "⁐": [t: "close up"] # 0x2050 + - "⁑": [t: "two vertical asterisks"] # 0x2051 + - "⁒": [t: "commercial minus sign"] # 0x2052 + - "⁗": [t: "quadruple prime"] # 0x2057 + - "⁠": [t: ""] # 0x2060 + - "⁰": [t: "to the zeroth power"] # 0x2070 + - "ⁱ": [t: "to the i-th power"] # 0x2071 + - "⁴": [t: "to the fourth power"] # 0x2074 + - "⁵": [t: "to the fifth power"] # 0x2075 + - "⁶": [t: "to the sixth power"] # 0x2076 + - "⁷": [t: "to the seventh power"] # 0x2077 + - "⁸": [t: "to the eighth power"] # 0x2078 + - "⁹": [t: "to the ninth power"] # 0x2079 + - "⁺": [t: "superscript plus sign"] # 0x207a + - "⁻": [t: "superscript minus"] # 0x207b + - "⁼": [t: "superscript equals sign"] # 0x207c + - "⁽": [t: "superscript left parenthesis"] # 0x207d + - "⁾": [t: "superscript right parenthesis"] # 0x207e + - "ⁿ": [t: "to the ennth power"] # 0x207f + - "₀": [t: "sub zero"] # 0x2080 + - "₁": [t: "sub one"] # 0x2081 + - "₂": [t: "sub two"] # 0x2082 + - "₃": [t: "sub three"] # 0x2083 + - "₄": [t: "sub four"] # 0x2084 + - "₅": [t: "sub five"] # 0x2085 + - "₆": [t: "sub six"] # 0x2086 + - "₇": [t: "sub seven"] # 0x2087 + - "₈": [t: "sub eight"] # 0x2088 + - "₉": [t: "sub nine"] # 0x2089 + - "₊": [t: "subscript plus sign"] # 0x208a + - "₋": [t: "subscript minus sign"] # 0x208b + - "₌": [t: "subscript equals sign"] # 0x208c + - "₍": [t: "subscript left parenthesis"] # 0x208d + - "₎": [t: "subscript right parenthesis"] # 0x208e + - "ₐ": [t: "sub A"] # 0x2090 + - "ₑ": [t: "sub E"] # 0x2091 + - "ₒ": [t: "sub O"] # 0x2092 + - "ₓ": [t: "sub X"] # 0x2093 + - "ₕ": [t: "sub H"] # 0x2095 + - "ₖ": [t: "sub K"] # 0x2096 + - "ₗ": [t: "sub L"] # 0x2097 + - "ₘ": [t: "sub M"] # 0x2098 + - "ₙ": [t: "sub N"] # 0x2099 + - "ₚ": [t: "sub P"] # 0x209a + - "ₛ": [t: "sub S"] # 0x209b + - "ₜ": [t: "sub T"] # 0x209c + - "₠": [t: "european currenty units"] # 0x20a0 + - "₡": [t: "colons"] # 0x20a1 + - "₢": [t: "cruzeiro"] # 0x20a2 + - "₣": [t: "franc"] # 0x20a3 + - "₤": [t: "lira"] # 0x20a4 + - "₥": [t: "mills"] # 0x20a5 + - "₦": [t: "naira"] # 0x20a6 + - "₧": [t: "peseta"] # 0x20a7 + - "₨": [t: "rupees"] # 0x20a8 + - "₩": [t: "won"] # 0x20a9 + - "₪": [t: "new sheqels"] # 0x20aa + - "₫": [t: "dong"] # 0x20ab + - "€": [t: "euros"] # 0x20ac + - "₭": [t: "kip"] # 0x20ad + - "₮": [t: "tugrik"] # 0x20ae + - "₯": [t: "drachma"] # 0x20af + - "₰": [t: "german pennies"] # 0x20b0 + - "₱": [t: "pesos"] # 0x20b1 + - "₲": [t: "guaranis"] # 0x20b2 + - "₳": [t: "australs"] # 0x20b3 + - "₴": [t: "hryvnias"] # 0x20b4 + - "₵": [t: "cedis"] # 0x20b5 + - "₶": [t: "livre tournois"] # 0x20b6 + - "₷": [t: "spesmilos"] # 0x20b7 + - "₸": [t: "tenges"] # 0x20b8 + - "₹": [t: "indian rupees"] # 0x20b9 + - "₺": [t: "turkish liras"] # 0x20ba + - "⃐": [t: "left harpoon above embellishment"] # 0x20d0 + - "⃑": [t: "right harpoon above embellishment"] # 0x20d1 + - "⃒": [t: "long vertical line overlay embellishment"] # 0x20d2 + - "⃓": [t: "short vertical line overlay embellishment"] # 0x20d3 + - "⃔": [t: "anticlockwise arrow above embellishment"] # 0x20d4 + - "⃕": [t: "clockwise arrow above embellishment"] # 0x20d5 + - "⃖": [t: "left arrow above embellishment"] # 0x20d6 + - "⃗": [t: "right arrow above embellishment"] # 0x20d7 + - "⃘": [t: "ring overlay embellishment"] # 0x20d8 + - "⃙": [t: "clockwise ring overlay embellishment"] # 0x20d9 + - "⃚": [t: "anticlockwise ring overlay embellishment"] # 0x20da + - "⃛": [t: "triple dot"] # 0x20db + - "⃜": [t: "quadruple dot"] # 0x20dc + - "⃝": [t: "enclosing circle embellishment"] # 0x20dd + - "⃞": [t: "enclosing square embellishment"] # 0x20de + - "⃟": [t: "enclosing diamond embellishment"] # 0x20df + - "⃠": [t: "enclosing circle backslash embellishment"] # 0x20e0 + - "⃡": [t: "left right arrow above embellishment"] # 0x20e1 + - "⃢": [t: "enclosing screen embellishment"] # 0x20e2 + - "⃣": [t: "enclosing keycap embellishment"] # 0x20e3 + - "⃤": [t: "enclosing upward pointing triangle embellishment"] # 0x20e4 + - "⃥": [t: "reverse solidus overlay embellishment"] # 0x20e5 + - "⃦": [t: "double verticle stroke embellishment"] # 0x20e6 + - "⃧": [t: "annuity symbol embellishment"] # 0x20e7 + - "⃨": [t: "triple underdot"] # 0x20e8 + - "⃩": [t: "wide bridge above embellishment"] # 0x20e9 + - "⃪": [t: "left arrow overlay embellishment"] # 0x20ea + - "⃫": [t: "long double solidus overlay embellishment"] # 0x20eb + - "⃬": [t: "right harpoon with barb down embellishment"] # 0x20ec + - "⃭": [t: "left harpoon with barb down embellishment"] # 0x20ed + - "⃮": [t: "left arrow below embellishment"] # 0x20ee + - "⃯": [t: "right arrow below embellishment"] # 0x20ef + - "⃰": [t: "asterisk above embellishment"] # 0x20f0 + - "℄": [t: "center line symbol"] # 0x2104 + - "℅": [t: "care of"] # 0x2105 + - "℆": [t: "cada una"] # 0x2106 + - "ℇ": [t: "euler's constant"] # 0x2107 + - "℈": [t: "scruples"] # 0x2108 + - "℉": [t: "degrees fahrenheit"] # 0x2109 + - "ℊ": [t: "script g"] # 0x210a + - "ℌℑℨℭ": # 0x210c, 0x2111, 0x2128, 0x212d + - t: "fraktur" + - spell: "translate('.', 'ℌℑℨℭ', 'HIZC')" + + - "ℍℙℾℿ": # 0x210d, 0x2119, 0x213e, 0x213f + - t: "double struck" + - spell: "translate('.', 'ℍℙℾℿ', 'HPΓΠ')" + + - "ℎ": [t: "planck constant"] # 0x210e + - "ℏ": [t: "h bar"] # 0x210f + + - "ℐℒ℘ℬℰℱℳ": # 0x2110, 0x2112, 0x2118, 0x2130, 0x2131, 0x2133 + - t: "script" + - spell: "translate('.', 'ℐℒ℘ℬℰℱℳ', 'ILPBEFM')" + + - "ℓ": [t: "script l"] # 0x2113 + - "℔": [t: "pounds"] # 0x2114 + - "№": [t: "number"] # 0x2116 + - "℥": [t: "ounces"] # 0x2125 + - "Ω": [t: "ohms"] # 0x2126 + - "℧": [t: "mhos"] # 0x2127 + - "℩": [t: "turned iota"] # 0x2129 + - "K": [t: "kelvin"] # 0x212a + - "Å": [t: "angstroms"] # 0x212b + - "ℯ": [t: "script e"] # 0x212f + + # coalesced some chars that use cap letters + - "Ⅎ℺⅁⅂⅃⅄": # 0x2132, 0x213a, 0x2141, 0x2142, 0x2143, 0x2144 + - test: + - if: "'.' = '℺'" + then: [t: "rotated"] + - else_if: "'.' = 'Ⅎ'" + then: [t: "turned"] + - else_if: "'.' = '⅃'" + then: [t: "reversed sans-serif"] + else: [t: "turned sans-serif"] + - spell: "translate('.', 'Ⅎ℺⅁⅂⅃⅄', 'FQGLLY')" + + - "ℴ": [t: "script o"] # 0x2134 + - "ℵ": [t: "first transfinite cardinal"] # 0x2135 + - "ℶ": [t: "second transfinite cardinal"] # 0x2136 + - "ℷ": [t: "third transfinite cardinal"] # 0x2137 + - "ℸ": [t: "fourth transfinite cardinal"] # 0x2138 + - "ℼ": [t: "double struck pi"] # 0x213c + - "ℽ": [t: "double struck gamma"] # 0x213d + - "⅀": [t: "double struck n-ary summation"] # 0x2140 + - "⅋": [t: "turned ampersand"] # 0x214b + - "⅌": [t: "per"] # 0x214c + - "ⅎ": [t: "turned F"] # 0x214e + - "¼": [t: "one quarter"] # 0x00bc + - "½": [t: "one half"] # 0x00bd + - "¾": [t: "three quarters"] # 0x00be + - "⅐": [t: "one seventh"] # 0x2150 + - "⅑": [t: "one ninth"] # 0x2151 + - "⅒": [t: "one tenth"] # 0x2152 + - "⅓": [t: "one third"] # 0x2153 + - "⅔": [t: "two thirds"] # 0x2154 + - "⅕": [t: "one fifth"] # 0x2155 + - "⅖": [t: "two fifths"] # 0x2156 + - "⅗": [t: "three fifths"] # 0x2157 + - "⅘": [t: "four fifths"] # 0x2158 + - "⅙": [t: "one sixth"] # 0x2159 + - "⅚": [t: "five sixths"] # 0x215a + - "⅛": [t: "one eighth"] # 0x215b + - "⅜": [t: "three eighths"] # 0x215c + - "⅝": [t: "five eighths"] # 0x215d + - "⅞": [t: "seven eighths"] # 0x215e + - "⅟": [t: "one over"] # 0x215f + - "Ⅰ": [t: "I"] # 0x2160 + - "Ⅱ": [t: "I I"] # 0x2161 + - "Ⅲ": [t: "I I I"] # 0x2162 + - "Ⅳ": [t: "I V"] # 0x2163 + - "Ⅴ": [t: "V"] # 0x2164 + - "Ⅵ": [t: "V I"] # 0x2165 + - "Ⅶ": [t: "V I I"] # 0x2166 + - "Ⅷ": [t: "V I I I"] # 0x2167 + - "Ⅸ": [t: "I X"] # 0x2168 + - "Ⅹ": [t: "X"] # 0x2169 + - "Ⅺ": [t: "X I"] # 0x216a + - "Ⅻ": [t: "X I I"] # 0x216b + - "Ⅼ": [t: "L"] # 0x216c + - "Ⅽ": [t: "C"] # 0x216d + - "Ⅾ": [t: "D"] # 0x216e + - "Ⅿ": [t: "M"] # 0x216f + - "ⅰ": [t: "I"] # 0x2170 + - "ⅱ": [t: "I I"] # 0x2171 + - "ⅲ": [t: "I I I"] # 0x2172 + - "ⅳ": [t: "I V"] # 0x2173 + - "ⅴ": [t: "V"] # 0x2174 + - "ⅵ": [t: "V I"] # 0x2175 + - "ⅶ": [t: "V I I"] # 0x2176 + - "ⅷ": [t: "V I I I"] # 0x2177 + - "ⅸ": [t: "I X"] # 0x2178 + - "ⅹ": [t: "X"] # 0x2179 + - "ⅺ": [t: "X I"] # 0x217a + - "ⅻ": [t: "X I I"] # 0x217b + - "ⅼ": [t: "L"] # 0x217c + - "ⅽ": [t: "C"] # 0x217d + - "ⅾ": [t: "D"] # 0x217e + - "ⅿ": [t: "M"] # 0x217f + - "↉": [t: "zero thirds"] # 0x2189 + - "↔": [t: "left right arrow"] # 0x2194 + - "↕": [t: "up down arrow"] # 0x2195 + - "↖": [t: "north west arrow"] # 0x2196 + - "↗": # 0x2197 + - test: + if: "ancestor::*[2][self::m:limit]" + then: [t: "approaches from below"] + else: [t: "north east arrow"] + + - "↘": # 0x2198 + - test: + if: "ancestor::*[2][self::m:limit]" + then: [t: "approaches from above"] + else: [t: "south east arrow"] + + - "↙": [t: "south west arrow"] # 0x2199 + - "↚": [t: "left arrow with stroke"] # 0x219a + - "↛": [t: "right arrow with stroke"] # 0x219b + - "↜": [t: "left wave arrow"] # 0x219c + - "↝": [t: "right wave arrow"] # 0x219d + - "↞": [t: "left two headed arrow"] # 0x219e + - "↟": [t: "up two headed arrow"] # 0x219f + - "↠": [t: "right two headed arrow"] # 0x21a0 + - "↡": [t: "down two headed arrow"] # 0x21a1 + - "↢": [t: "left arrow with tail"] # 0x21a2 + - "↣": [t: "right arrow with tail"] # 0x21a3 + - "↤": [t: "left arrow from bar"] # 0x21a4 + - "↥": [t: "up arrow from bar"] # 0x21a5 + - "↦": [t: "right arrow from bar"] # 0x21a6 + - "↧": [t: "down arrow from bar"] # 0x21a7 + - "↨": [t: "up down arrow with base"] # 0x21a8 + - "↩": [t: "left arrow with hook"] # 0x21a9 + - "↪": [t: "right arrow with hook"] # 0x21aa + - "↫": [t: "left arrow with loop"] # 0x21ab + - "↬": [t: "right arrow with loop"] # 0x21ac + - "↭": [t: "left right wave arrow"] # 0x21ad + - "↮": [t: "left right arrow with stroke"] # 0x21ae + - "↯": [t: "down zigzag arrow"] # 0x21af + - "↰": [t: "up arrow with tip left"] # 0x21b0 + - "↱": [t: "up arrow with tip right"] # 0x21b1 + - "↲": [t: "down arrow with tip left"] # 0x21b2 + - "↳": [t: "down arrow with tip right"] # 0x21b3 + - "↴": [t: "right arrow with corner down"] # 0x21b4 + - "↵": [t: "down arrow with corner left"] # 0x21b5 + - "↶": [t: "anticlockwise top semicircle arrow"] # 0x21b6 + - "↷": [t: "clockwise top semicircle arrow"] # 0x21b7 + - "↸": [t: "north west arrow to long bar"] # 0x21b8 + - "↹": [t: "left arrow to bar over right arrow to bar"] # 0x21b9 + - "↺": [t: "anticlockwise open circle arrow"] # 0x21ba + - "↻": [t: "clockwise open circle arrow"] # 0x21bb + - "↼": [t: "left harpoon up"] # 0x21bc + - "↽": [t: "left harpoon down"] # 0x21bd + - "↾": [t: "up harpoon right"] # 0x21be + - "↿": [t: "up harpoon left"] # 0x21bf + - "⇀": [t: "right harpoon up"] # 0x21c0 + - "⇁": [t: "right harpoon down"] # 0x21c1 + - "⇂": [t: "down harpoon right"] # 0x21c2 + - "⇃": [t: "down harpoon left"] # 0x21c3 + - "⇄": [t: "right arrow over left arrow"] # 0x21c4 + - "⇅": [t: "up arrow left of down arrow"] # 0x21c5 + - "⇆": [t: "left arrow over right arrow"] # 0x21c6 + - "⇇": [t: "left paired arrows"] # 0x21c7 + - "⇈": [t: "up paired arrows"] # 0x21c8 + - "⇉": [t: "right paired arrows"] # 0x21c9 + - "⇊": [t: "down paired arrows"] # 0x21ca + - "⇋": [t: "left harpoon over right harpoon"] # 0x21cb + - "⇌": [t: "right harpoon over left harpoon"] # 0x21cc + - "⇍": [t: "left double arrow with stroke"] # 0x21cd + - "⇎": [t: "left right double arrow with stroke"] # 0x21ce + - "⇏": [t: "right double arrow with stroke"] # 0x21cf + - "⇐": [t: "left double arrow"] # 0x21d0 + - "⇑": [t: "up double arrow"] # 0x21d1 + - "⇒": [t: "implies"] # 0x21d2 + - "⇓": [t: "down double arrow"] # 0x21d3 + - "⇔": [t: "if and only if"] # 0x21d4 + - "⇕": [t: "up down double arrow"] # 0x21d5 + - "⇖": [t: "north west double arrow"] # 0x21d6 + - "⇗": [t: "north east double arrow"] # 0x21d7 + - "⇘": [t: "south east double arrow"] # 0x21d8 + - "⇙": [t: "south west double arrow"] # 0x21d9 + - "⇚": [t: "left triple arrow"] # 0x21da + - "⇛": [t: "right triple arrow"] # 0x21db + - "⇜": [t: "left squiggle arrow"] # 0x21dc + - "⇝": [t: "right squiggle arrow"] # 0x21dd + - "⇞": [t: "up arrow with double stroke"] # 0x21de + - "⇟": [t: "down arrow with double stroke"] # 0x21df + - "⇠": [t: "left dashed arrow"] # 0x21e0 + - "⇡": [t: "up dashed arrow"] # 0x21e1 + - "⇢": [t: "right dashed arrow"] # 0x21e2 + - "⇣": [t: "down dashed arrow"] # 0x21e3 + - "⇤": [t: "left arrow to bar"] # 0x21e4 + - "⇥": [t: "right arrow to bar"] # 0x21e5 + - "⇦": [t: "left white arrow"] # 0x21e6 + - "⇧": [t: "up white arrow"] # 0x21e7 + - "⇨": [t: "right white arrow"] # 0x21e8 + - "⇩": [t: "down white arrow"] # 0x21e9 + - "⇪": [t: "up white arrow from bar"] # 0x21ea + - "⇫": [t: "up white arrow on pedestal"] # 0x21eb + - "⇬": [t: "up white arrow on pedestal with horizontal bar"] # 0x21ec + - "⇭": [t: "up white arrow on pedestal with vertical bar"] # 0x21ed + - "⇮": [t: "up white double arrow"] # 0x21ee + - "⇯": [t: "up white double arrow on pedestal"] # 0x21ef + - "⇰": [t: "right white arrow from wall"] # 0x21f0 + - "⇱": [t: "north west arrow to corner"] # 0x21f1 + - "⇲": [t: "south east arrow to corner"] # 0x21f2 + - "⇳": [t: "up down white arrow"] # 0x21f3 + - "⇴": [t: "right arrow with small circle"] # 0x21f4 + - "⇵": [t: "down arrow left of up arrow"] # 0x21f5 + - "⇶": [t: "three right arrows"] # 0x21f6 + - "⇷": [t: "left arrow with vertical stroke"] # 0x21f7 + - "⇸": [t: "right arrow with vertical stroke"] # 0x21f8 + - "⇹": [t: "left right arrow with vertical stroke"] # 0x21f9 + - "⇺": [t: "left arrow with double vertical stroke"] # 0x21fa + - "⇻": [t: "right arrow with double vertical stroke"] # 0x21fb + - "⇼": [t: "left right arrow with double vertical stroke"] # 0x21fc + - "⇽": [t: "left open headed arrow"] # 0x21fd + - "⇾": [t: "right open headed arrow"] # 0x21fe + - "⇿": [t: "left right open headed arrow"] # 0x21ff + - "∀": [t: "for all"] # 0x2200 + - "∁": # 0x2201 + - test: + if: "$Verbosity!='Terse'" + then: [t: "the"] + - t: "complement of" + - "∂": # 0x2202 + - test: + if: "$Verbosity='Terse'" + then: [t: "partial"] + else: [t: "partial derivative"] + - "∃": [t: "there exists"] # 0x2203 + - "∄": [t: "there does not exist"] # 0x2204 + - "∅": [t: "empty set"] # 0x2205 + - "∆": # 0x2206 + - test: + if: "following-sibling::*" + then_test: + if: "$Verbosity!='Terse'" + then: [t: "the LahPlahsian of"] # "LahPlahsian" sounds better than "laplacian" in speech engines tested + else: [t: "LahPlahsian"] + else: [t: "LahPlahsian"] + + - "∇": [t: "nahblah"] # 0x2207 + - "∉": # 0x2209 + # rule is identical to 0x2208 + - test: + if: "$SpeechStyle != 'ClearSpeak'" + then: [t: "is not an element of"] + # 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: "not in"] + - else_if: $ClearSpeak_SetMemberSymbol = 'Member' + then: [t: "not member of"] + - else_if: $ClearSpeak_SetMemberSymbol = 'Element' + then: [t: "not element of"] + - else: [t: "not belonging to"] # $ClearSpeak_SetMemberSymbol = 'Belongs' + else_test: + - if: $ClearSpeak_SetMemberSymbol = 'Auto' or $ClearSpeak_SetMemberSymbol = 'Member' + then: [t: "is not a member of"] + - else_if: $ClearSpeak_SetMemberSymbol = 'Element' + then: [t: "is not an element of"] + - else_if: $ClearSpeak_SetMemberSymbol = 'In' + then: [t: "is not in"] + - else: [t: "does not belong to"] # $ClearSpeak_SetMemberSymbol = 'Belongs' + - "∊": # 0x220a + - test: + if: "$SpeechStyle != 'ClearSpeak'" + then: + - test: + if: "$Verbosity!='Terse' and not(parent::m:set)" # "the set x is an element of ..." sounds bad + then: [t: "is"] + - t: "an element of" + # 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: "member of"] + - else_if: $ClearSpeak_SetMemberSymbol = 'Element' + then: [t: "element of"] + - else: [t: "belonging to"] # $ClearSpeak_SetMemberSymbol = 'Belongs' + else_test: + - if: $ClearSpeak_SetMemberSymbol = 'Auto' or $ClearSpeak_SetMemberSymbol = 'Member' + then: [t: "is a member of"] + - else_if: $ClearSpeak_SetMemberSymbol = 'Element' + then: [t: "is an element of"] + - else_if: $ClearSpeak_SetMemberSymbol = 'In' + then: [t: "is in"] + - else: [t: "belongs to"] # $ClearSpeak_SetMemberSymbol = 'Belongs' + - "∋": [t: "contains the member"] # 0x220b + - "∌": [t: "does not contain the member"] # 0x220c + - "∍": [t: "contains the member"] # 0x220d + - "∎": [t: "end of proof"] # 0x220e + - "∏": [t: "product"] # 0x220f + - "∐": [t: "coproduct"] # 0x2210 + - "∑": [t: "sum"] # 0x2211 + - "−": [t: "minus"] # 0x2212 + - "∓": [t: "minus or plus"] # 0x2213 + - "∔": [t: "dot plus"] # 0x2214 + - "∕": [t: "divided by"] # 0x2215 + - "∖": [t: "set minus"] # 0x2216 + - "∗": [t: "times"] # 0x2217 + - "∘": [t: "composed with"] # 0x2218 + - "∙": # 0x2219 + - test: + if: "@data-chem-formula-op" + then: [t: "dot"] + else: [t: "times"] + + - "√": # 0x221a + - test: + if: "$Verbosity!='Terse'" + then: [t: "the"] + - t: "square root of" + - "∛": # 0x221b + - test: + if: "$Verbosity!='Terse'" + then: [t: "the"] + - t: "cube root of" + - "∜": # 0x221c + - test: + if: "$Verbosity!='Terse'" + then: [t: "the"] + - t: "fourth root of" + - "∝": # 0x221d + - test: + if: "$Verbosity!='Terse'" + then: [t: "is"] + - t: "proportional to" + - "∞": [t: "infinity"] # 0x221e + - "∟": [t: "right angle"] # 0x221f + - "∠": [t: "angle"] # 0x2220 + - "∡": [t: "measured angle"] # 0x2221 + - "∢": [t: "spherical angle"] # 0x2222 + - "∣": [t: "divides"] # 0x2223 + - "∤": [t: "does not divide"] # 0x2224 + - "∧": [t: "and"] # 0x2227 + - "∨": [t: "or"] # 0x2228 + - "∩": [t: "intersection"] # 0x2229 + - "∪": [t: "union"] # 0x222a + - "∫": [t: "integral"] # 0x222b + - "∬": [t: "double integral"] # 0x222c + - "∭": [t: "triple integral"] # 0x222d + - "∮": [t: "contour integral"] # 0x222e + - "∯": [t: "surface integral"] # 0x222f + - "∰": [t: "volume integral"] # 0x2230 + - "∱": [t: "clockwise integral"] # 0x2231 + - "∲": [t: "clockwise contour integral"] # 0x2232 + - "∳": [t: "anticlockwise contour integral"] # 0x2233 + - "∴": [t: "therefore"] # 0x2234 + - "∵": [t: "because"] # 0x2235 + - "∶": # 0x2236 + - test: + if: "$Verbosity!='Terse'" + then: [t: "is"] + - t: "to" + - "∷": [t: "as"] # 0x2237 + - "∸": [t: "dot minus"] # 0x2238 + - "∹": [t: "has excess compared to"] # 0x2239 + - "∺": # 0x223a + - test: + if: "$Verbosity!='Terse'" + then: [t: "is"] + - t: "geometrically proportional to" + - "∻": # 0x223b + - test: + if: "$Verbosity!='Terse'" + then: [t: "is"] + - t: "homothetic to" + - "∼": [t: "varies with"] # 0x223c + - "∽": [t: "reversed tilde"] # 0x223d + - "∾": # 0x223e + - test: + if: "$Verbosity!='Terse'" + then: [t: "is"] + - t: "most positive" + - "∿": [t: "sine wave"] # 0x223f + - "≀": [t: "wreath product"] # 0x2240 + - "≁": [t: "not tilde"] # 0x2241 + - "≂": [t: "minus tilde"] # 0x2242 + - "≃": # 0x2243 + - test: + if: "$Verbosity!='Terse'" + then: [t: "is"] + - t: "asymptotically equal to" + - "≄": # 0x2244 + - test: + if: "$Verbosity!='Terse'" + then: [t: "is"] + - t: "not asymptotically equal to" + - "≅": # 0x2245 + - test: + if: "$Verbosity!='Terse'" + then: [t: "is"] + - t: "congruent to" + - "≆": # 0x2246 + - test: + if: "$Verbosity!='Terse'" + then: [t: "is"] + - t: "approximately but not actually equal to" + - "≇": # 0x2247 + - test: + if: "$Verbosity!='Terse'" + then: [t: "is"] + - t: "not congruent to" + - "≈": # 0x2248 + - test: + if: "$Verbosity!='Terse'" + then: [t: "is"] + - t: "approximately equal to" + - "≉": # 0x2249 + - test: + if: "$Verbosity!='Terse'" + then: [t: "is"] + - t: "not approximately equal to" + - "≊": # 0x224a + - test: + if: "$Verbosity!='Terse'" + then: [t: "is"] + - t: "approximately equal or equal to" + - "≋": [t: "triple tilde"] # 0x224b + - "≌": [t: "are all equal to"] # 0x224c + - "≍": # 0x224d + - test: + if: "$Verbosity!='Terse'" + then: [t: "is"] + - t: "equivalent to" + - "≎": # 0x224e + - test: + if: "$Verbosity!='Terse'" + then: [t: "is"] + - t: "geometrically equivalent to" + - "≏": # 0x224f + - test: + if: "$Verbosity!='Terse'" + then: [t: "the"] + - t: "difference between" + - "≐": [t: "approaches the limit"] # 0x2250 + - "≑": # 0x2251 + - test: + if: "$Verbosity!='Terse'" + then: [t: "is"] + - t: "geometrically equal to" + - "≒": # 0x2252 + - test: + if: "$Verbosity!='Terse'" + then: [t: "is"] + - t: "approximately equal to or the image of" + - "≓": # 0x2253 + - test: + if: "$Verbosity!='Terse'" + then: [t: "is the"] + - t: "image of or approximately equal to" + - "≔": [t: "colon equals"] # 0x2254 + - "≕": [t: "equals colon"] # 0x2255 + - "≖": [t: "ring in equal to"] # 0x2256 + - "≗": # 0x2257 + - test: + if: "$Verbosity!='Terse'" + then: [t: "is"] + - t: "approximately equal to" + - "≘": [t: "corresponds to"] # 0x2258 + - "≙": [t: "estimates"] # 0x2259 + - "≚": # 0x225a + - test: + if: "$Verbosity!='Terse'" + then: [t: "is"] + - t: "equiangular to" + - "≛": [t: "star equals"] # 0x225b + - "≜": [t: "delta equals"] # 0x225c + - "≝": [t: "is defined to be"] # 0x225d + - "≞": # 0x225e + - test: + if: "$Verbosity!='Terse'" + then: [t: "is"] + - t: "measured by" + - "≟": [t: "has an unknown relationship with"] # 0x225f + - "≠": # 0x2260 + - test: + if: "$Verbosity!='Terse'" + then: [t: "is"] + - t: "not equal to" + - "≡": # 0x2261 + - test: + if: "$Verbosity!='Terse'" + then: [t: "is"] + - t: "identical to" + - "≢": # 0x2262 + - test: + if: "$Verbosity!='Terse'" + then: [t: "is"] + - t: "not identical to" + - "≣": # 0x2263 + - test: + if: "$Verbosity!='Terse'" + then: [t: "is"] + - t: "strictly equivalent to" + - "≦": [t: "less than over equal to"] # 0x2266 + - "≧": [t: "greater than over equal to"] # 0x2267 + - "≨": # 0x2268 + - test: + if: "$Verbosity!='Terse'" + then: [t: "is"] + - t: "less than but not equal to" + - "≩": # 0x2269 + - test: + if: "$Verbosity!='Terse'" + then: [t: "is"] + - t: "greater than but not equal to" + - "≪": # 0x226a + - test: + if: "$Verbosity!='Terse'" + then: [t: "is"] + - t: "much less than" + - "≫": # 0x226b + - test: + if: "$Verbosity!='Terse'" + then: [t: "is"] + - t: "much greater than" + - "≬": # 0x226c + - test: + if: "$Verbosity!='Terse'" + then: [t: "is"] + - t: "between" + - "≭": # 0x226d + - test: + if: "$Verbosity!='Terse'" + then: [t: "is"] + - t: "not equivalent to" + - "≮": # 0x226e + - test: + if: "$Verbosity!='Terse'" + then: [t: "is"] + - t: "not less than" + - "≯": # 0x226f + - test: + if: "$Verbosity!='Terse'" + then: [t: "is"] + - t: "not greater than" + - "≰": # 0x2270 + - test: + if: "$Verbosity!='Terse'" + then: [t: "is"] + - t: "neither less than nor equal to" + - "≱": # 0x2271 + - test: + if: "$Verbosity!='Terse'" + then: [t: "is"] + - t: "neither greater than nor equal to" + - "≲": # 0x2272 + - test: + if: "$Verbosity!='Terse'" + then: [t: "is"] + - t: "less than or equivalent to" + - "≳": # 0x2273 + - test: + if: "$Verbosity!='Terse'" + then: [t: "is"] + - t: "greater than or equivalent to" + - "≴": # 0x2274 + - test: + if: "$Verbosity!='Terse'" + then: [t: "is"] + - t: "neither less than nor equivalent to" + - "≵": # 0x2275 + - test: + if: "$Verbosity!='Terse'" + then: [t: "is"] + - t: "neither greater than nor equivalent to" + - "≶": # 0x2276 + - test: + if: "$Verbosity!='Terse'" + then: [t: "is"] + - t: "less than or greater than" + - "≷": # 0x2277 + - test: + if: "$Verbosity!='Terse'" + then: [t: "is"] + - t: "greater than or less than" + - "≸": # 0x2278 + - test: + if: "$Verbosity!='Terse'" + then: [t: "is"] + - t: "neither less than nor greater than" + - "≹": # 0x2279 + - test: + if: "$Verbosity!='Terse'" + then: [t: "is"] + - t: "neither greater than nor less than" + - "≺": [t: "precedes"] # 0x227a + - "≻": [t: "succeeds"] # 0x227b + - "≼": [t: "precedes or is equal to"] # 0x227c + - "≽": [t: "succeeds or is equal to"] # 0x227d + - "≾": [t: "precedes or is equivalent to"] # 0x227e + - "≿": [t: "succeeds or is equivalent to"] # 0x227f + - "⊀": [t: "does not precede"] # 0x2280 + - "⊁": [t: "does not succeed"] # 0x2281 + - "⊂": # 0x2282 + - test: + if: "$Verbosity!='Terse'" + then: [t: "is a"] + - t: "subset of" + - "⊃": # 0x2283 + - test: + if: "$Verbosity!='Terse'" + then: [t: "is a"] + - t: "superset of" + - "⊄": # 0x2284 + - test: + if: "$Verbosity!='Terse'" + then: [t: "is"] + - t: "not a subset of" + - "⊅": # 0x2285 + - test: + if: "$Verbosity!='Terse'" + then: [t: "is"] + - t: "not a superset of" + - "⊆": # 0x2286 + - test: + if: "$Verbosity!='Terse'" + then: [t: "is a"] + - t: "subset of or equal to" + - "⊇": # 0x2287 + - test: + if: "$Verbosity!='Terse'" + then: [t: "is a"] + - t: "superset of or equal to" + - "⊈": # 0x2288 + - test: + if: "$Verbosity!='Terse'" + then: [t: "is"] + - t: "neither a subset of nor equal to" + - "⊉": # 0x2289 + - test: + if: "$Verbosity!='Terse'" + then: [t: "is"] + - t: "neither a superset of nor equal to" + - "⊊": [t: "subset of with not equal to"] # 0x228a + - "⊋": [t: "superset of with not equal to"] # 0x228b + - "⊌": [t: "multiset"] # 0x228c + - "⊍": [t: "multiset multiplication"] # 0x228d + - "⊎": [t: "multiset union"] # 0x228e + - "⊏": [t: "square image of"] # 0x228f + - "⊐": [t: "square original of"] # 0x2290 + - "⊑": [t: "square image of or equal to"] # 0x2291 + - "⊒": [t: "square original of or equal to"] # 0x2292 + - "⊓": [t: "square cap"] # 0x2293 + - "⊔": [t: "square cup"] # 0x2294 + - "⊕": [t: "circled plus"] # 0x2295 + - "⊖": [t: "circled minus"] # 0x2296 + - "⊗": [t: "circled times"] # 0x2297 + - "⊘": [t: "circled slash"] # 0x2298 + - "⊙": [t: "circled dot operator"] # 0x2299 + - "⊚": [t: "circled ring"] # 0x229a + - "⊛": [t: "circled asterisk"] # 0x229b + - "⊜": [t: "circled equals"] # 0x229c + - "⊝": [t: "circled dash"] # 0x229d + - "⊞": [t: "squared plus"] # 0x229e + - "⊟": [t: "squared minus"] # 0x229f + - "⊠": [t: "squared times"] # 0x22a0 + - "⊡": [t: "squared dot operator"] # 0x22a1 + - "⊢": [t: "proves"] # 0x22a2 + - "⊣": [t: "does not yield"] # 0x22a3 + - "⊤": [t: "top"] # 0x22a4 + - "⊥": # 0x22a5 + - test: + if: "$Verbosity!='Terse'" + then: [t: "is"] + - t: "bottom" + - "⊦": [t: "reduces to"] # 0x22a6 + - "⊧": [t: "models"] # 0x22a7 + - "⊨": # 0x22a8 + - test: + if: "$Verbosity!='Terse'" + then: [t: "is"] + - t: "true" + - "⊩": [t: "forces"] # 0x22a9 + - "⊪": [t: "triple vertical bar right turnstile"] # 0x22aa + - "⊫": [t: "double vertical bar double right turnstile"] # 0x22ab + - "⊬": [t: "does not prove"] # 0x22ac + - "⊭": # 0x22ad + - test: + if: "$Verbosity!='Terse'" + then: [t: "is"] + - t: "not true" + - "⊮": [t: "does not force"] # 0x22ae + - "⊯": [t: "negated double vertical bar double right turnstile"] # 0x22af + - "⊰": [t: "precedes under relation"] # 0x22b0 + - "⊱": [t: "succeeds under relation"] # 0x22b1 + - "⊲": # 0x22b2 + - test: + if: "$Verbosity!='Terse'" + then: [t: "is"] + - t: "a normal subgroup of" + - "⊳": [t: "contains as a normal subgroup"] # 0x22b3 + - "⊴": # 0x22b4 + - test: + if: "$Verbosity!='Terse'" + then: [t: "is"] + - t: "a normal subgroup of or equal to" + - "⊵": [t: "contains as a normal subgroup or equal to"] # 0x22b5 + - "⊶": # 0x22b6 + - test: + if: "$Verbosity!='Terse'" + then: [t: "is"] + - t: "the original of" + - "⊷": # 0x22b7 + - test: + if: "$Verbosity!='Terse'" + then: [t: "is"] + - t: "an image of" + - "⊸": [t: "multimap"] # 0x22b8 + - "⊹": [t: "hermitian conjugate matrix"] # 0x22b9 + - "⊺": [t: "intercalate"] # 0x22ba + - "⊻": [t: "xor"] # 0x22bb + - "⊼": [t: "nand"] # 0x22bc + - "⊽": [t: "nor"] # 0x22bd + - "⊾": [t: "right angle with arc"] # 0x22be + - "⊿": [t: "right triangle"] # 0x22bf + - "⋀": [t: "logical and"] # 0x22c0 + - "⋁": [t: "logical or"] # 0x22c1 + - "⋂": [t: "intersection"] # 0x22c2 + - "⋃": [t: "union"] # 0x22c3 + - "⋄": [t: "diamond operator"] # 0x22c4 + - "⋅": # 0x22c5 + - test: + if: "@data-chem-formula-op" + then: [t: "dot"] + else: [t: "times"] + + - "⋆": [t: "times"] # 0x22c6 + - "⋇": [t: "division times"] # 0x22c7 + - "⋈": [t: "bowtie"] # 0x22c8 + - "⋉": # 0x22c9 + - test: + if: "$Verbosity!='Terse'" + then: [t: "is"] + - t: "the left normal factor semidirect product of" + - "⋊": # 0x22ca + - test: + if: "$Verbosity!='Terse'" + then: [t: "is"] + - t: "the right normal factor semidirect product of" + - "⋋": # 0x22cb + - test: + if: "$Verbosity!='Terse'" + then: [t: "is"] + - t: "the left semidirect product of" + - "⋌": # 0x22cc + - test: + if: "$Verbosity!='Terse'" + then: [t: "is"] + - t: "the right semidirect product of" + - "⋍": [t: "reversed tilde equals"] # 0x22cd + - "⋎": [t: "curly logical or"] # 0x22ce + - "⋏": [t: "curly logical and"] # 0x22cf + - "⋐": # 0x22d0 + - test: + if: "$Verbosity!='Terse'" + then: [t: "is"] + - t: "a double subset of" + - "⋑": # 0x22d1 + - test: + if: "$Verbosity!='Terse'" + then: [t: "is"] + - t: "a double superset of" + - "⋒": # 0x22d2 + - test: + if: "$Verbosity!='Terse'" + then: [t: "the"] + - t: "double intersection of" + - "⋓": # 0x22d3 + - test: + if: "$Verbosity!='Terse'" + then: [t: "the"] + - t: "double union of" + - "⋔": # 0x22d4 + - test: + if: "$Verbosity!='Terse'" + then: [t: "the"] + - t: "proper intersection of" + - "⋕": # 0x22d5 + - test: + if: "$Verbosity!='Terse'" + then: [t: "is"] + - t: "equal to and parallel to" + - "⋖": [t: "less than with dot"] # 0x22d6 + - "⋗": [t: "greater than with dot"] # 0x22d7 + - "⋘": # 0x22d8 + - test: + if: "$Verbosity!='Terse'" + then: [t: "is"] + - t: "very much less than" + - "⋙": # 0x22d9 + - test: + if: "$Verbosity!='Terse'" + then: [t: "is"] + - t: "very much greater than" + - "⋚": # 0x22da + - test: + if: "$Verbosity!='Terse'" + then: [t: "is"] + - t: "less than equal to or greater than" + - "⋛": # 0x22db + - test: + if: "$Verbosity!='Terse'" + then: [t: "is"] + - t: "greater than equal to or less than" + - "⋜": # 0x22dc + - test: + if: "$Verbosity!='Terse'" + then: [t: "is"] + - t: "equal to or less than" + - "⋝": # 0x22dd + - test: + if: "$Verbosity!='Terse'" + then: [t: "is"] + - t: "equal to or greater than" + - "⋞": # 0x22de + - test: + if: "$Verbosity!='Terse'" + then: [t: "is"] + - t: "equal to or precedes" + - "⋟": # 0x22df + - test: + if: "$Verbosity!='Terse'" + then: [t: "is"] + - t: "equal to or succeeds" + - "⋠": [t: "does not precede nor is equal to"] # 0x22e0 + - "⋡": [t: "does not succeed nor is equal to"] # 0x22e1 + - "⋢": [t: "not square image of or equal to"] # 0x22e2 + - "⋣": [t: "not square original of or equal to"] # 0x22e3 + - "⋤": [t: "square image of or not equal to"] # 0x22e4 + - "⋥": [t: "square original of or not equal to"] # 0x22e5 + - "⋦": # 0x22e6 + - test: + if: "$Verbosity!='Terse'" + then: [t: "is"] + - t: "less than but not equivalent to" + - "⋧": # 0x22e7 + - test: + if: "$Verbosity!='Terse'" + then: [t: "is"] + - t: "greater than but not equivalent to" + - "⋨": [t: "precedes but is not equivalent to"] # 0x22e8 + - "⋩": [t: "succeeds but is not equivalent to"] # 0x22e9 + - "⋪": # 0x22ea + - test: + if: "$Verbosity!='Terse'" + then: [t: "is"] + - t: "not a normal subgroup of" + - "⋫": [t: "does not contain as a normal subgroup"] # 0x22eb + - "⋬": # 0x22ec + - test: + if: "$Verbosity!='Terse'" + then: [t: "is"] + - t: "not a normal subgroup of nor is equal to" + - "⋭": [t: "does not contain as a normal subgroup nor is equal to"] # 0x22ed + - "⋮": [t: "vertical ellipsis"] # 0x22ee + - "⋯": [t: "dot dot dot"] # 0x22ef + - "⋰": [t: "up diagonal ellipsis"] # 0x22f0 + - "⋱": [t: "diagonal ellipsis"] # 0x22f1 + - "⋲": [t: "element of with long horizontal stroke"] # 0x22f2 + - "⋳": [t: "element of with vertical bar at end of horizontal stroke"] # 0x22f3 + - "⋴": [t: "element of with vertical bar at end of horizontal stroke"] # 0x22f4 + - "⋵": [t: "element of with dot above"] # 0x22f5 + - "⋶": [t: "element of with overbar"] # 0x22f6 + - "⋷": [t: "element of with overbar"] # 0x22f7 + - "⋸": [t: "element of with underbar"] # 0x22f8 + - "⋹": [t: "element of with two horizontal strokes"] # 0x22f9 + - "⋺": [t: "contains with long horizontal stroke"] # 0x22fa + - "⋻": [t: "contains with vertical bar at end of horizontal stroke"] # 0x22fb + - "⋼": [t: "contains with vertical bar at end of horizontal stroke"] # 0x22fc + - "⋽": [t: "contains with overbar"] # 0x22fd + - "⋾": [t: "contains with overbar"] # 0x22fe + - "⋿": [t: "z notation bag membership"] # 0x22ff + - "⌀": [t: "diameter"] # 0x2300 + - "⌁": [t: "electric arrow"] # 0x2301 + - "⌂": [t: "house"] # 0x2302 + - "⌃": [t: "up arrowhead"] # 0x2303 + - "⌄": [t: "down arrowhead"] # 0x2304 + - "⌅": [t: "projective"] # 0x2305 + - "⌆": [t: "perspective"] # 0x2306 + - "⌇": [t: "wavy line"] # 0x2307 + - "⌈": [t: "left ceiling"] # 0x2308 + - "⌉": [t: "right ceiling"] # 0x2309 + - "⌊": [t: "left floor"] # 0x230a + - "⌋": [t: "right floor"] # 0x230b + - "⌌": [t: "bottom right crop"] # 0x230c + - "⌍": [t: "bottom left crop"] # 0x230d + - "⌎": [t: "top right crop"] # 0x230e + - "⌏": [t: "top left crop"] # 0x230f + - "⌐": [t: "reversed not sign"] # 0x2310 + - "⌑": [t: "square lozenge"] # 0x2311 + - "⌒": [t: "arc"] # 0x2312 + - "⌓": [t: "segment"] # 0x2313 + - "⌔": [t: "sector"] # 0x2314 + - "⌕": [t: "telephone recorder"] # 0x2315 + - "⌖": [t: "position indicator crosshairs"] # 0x2316 + - "⌗": [t: "viewdata square"] # 0x2317 + - "⌘": [t: "place of interest sign"] # 0x2318 + - "⌙": [t: "turned not sign"] # 0x2319 + - "⌚": [t: "watch"] # 0x231a + - "⌛": [t: "hourglass"] # 0x231b + - "⌜": [t: "top left corner"] # 0x231c + - "⌝": [t: "top right corner"] # 0x231d + - "⌞": [t: "bottom left corner"] # 0x231e + - "⌟": [t: "bottom right corner"] # 0x231f + - "⌠": [t: "top half integral"] # 0x2320 + - "⌡": [t: "bottom half integral"] # 0x2321 + - "⌢": [t: "frown"] # 0x2322 + - "⌣": [t: "smile"] # 0x2323 + - "⌤": [t: "up arrowhead between two horizontal bars"] # 0x2324 + - "⌥": [t: "option key"] # 0x2325 + - "⌦": [t: "erase to the right"] # 0x2326 + - "⌧": [t: "x in a rectangle box"] # 0x2327 + - "⌨": [t: "keyboard"] # 0x2328 + - "〈": [t: "left pointing angle bracket"] # 0x2329 + - "〉": [t: "right pointing angle bracket"] # 0x232a + - "⌫": [t: "erase to the left"] # 0x232b + - "⌬": [t: "benzene ring"] # 0x232c + - "⌭": [t: "cylindricity"] # 0x232d + - "⌮": [t: "all around profile"] # 0x232e + - "⌯": [t: "symmetry"] # 0x232f + - "⌰": [t: "total runout"] # 0x2330 + - "⌱": [t: "dimension origin"] # 0x2331 + - "⌲": [t: "conical taper"] # 0x2332 + - "⌳": [t: "slope"] # 0x2333 + - "⌴": [t: "counterbore"] # 0x2334 + - "⌵": [t: "countersink"] # 0x2335 + - "⌶": [t: "apl i beam"] # 0x2336 + - "⌽": [t: "apl circle stile"] # 0x233d + - "⌿": [t: "apl slash bar"] # 0x233f + - "⍰": [t: "unknown box"] # 0x2370 + - "⍼": [t: "right angle with down zigzag arrow"] # 0x237c + - "⎔": [t: "hexagon"] # 0x2394 + - "⎕": [t: "box"] # 0x2395 + - "⎶": [t: "bottom square bracket over top square bracket"] # 0x23b6 + - "⏜": [t: "top paren"] # 0x23dc + - "⏝": [t: "bottom paren"] # 0x23dd + - "⏞": [t: "top brace"] # 0x23de + - "⏟": [t: "bottom brace"] # 0x23df + - "⏠": [t: "top tortoise shell bracket"] # 0x23e0 + - "⏡": [t: "bottom tortoise shell bracket"] # 0x23e1 + - "⏢": [t: "white trapezium"] # 0x23e2 + - "⏣": [t: "benzene right with circle"] # 0x23e3 + - "⏤": [t: "straightness"] # 0x23e4 + - "⏥": [t: "flatness"] # 0x23e5 + - "⏦": # 0x23e6 + - spell: "ac" + - t: "current" + - "⏧": [t: "electrical intersection"] # 0x23e7 + - "①-⑨": # 0x2460 - 0x2469 + - t: "circled" + - spell: "translate('.', '①②③④⑤⑥⑦⑧⑨', '123456789')" + - "⑩": [t: "circled ten"] # 0x2469 + - "⑪": [t: "circled eleven"] # 0x246a + - "⑫": [t: "circled twelve"] # 0x246b + - "⑬": [t: "circled thirteen"] # 0x246c + - "⑭": [t: "circled fourteen"] # 0x246d + - "⑮": [t: "circled fifteen"] # 0x246e + - "⑯": [t: "circled sixteen"] # 0x246f + - "⑰": [t: "circled seventeen"] # 0x2470 + - "⑱": [t: "circled eighteen"] # 0x2471 + - "⑳": [t: "circled twenty"] # 0x2473 + - "⑴-⑼": # 0x2474 - 0x247d + - t: "parenthesized" + - spell: "translate('.', '⑴⑵⑶⑷⑸⑹⑺⑻⑼', '123456789')" + - "⑽": [t: "parenthesized ten"] # 0x247d + - "⑾": [t: "parenthesized eleven"] # 0x247e + - "⑿": [t: "parenthesized twelve"] # 0x247f + - "⒀": [t: "parenthesized thirteen"] # 0x2480 + - "⒁": [t: "parenthesized fourteen"] # 0x2481 + - "⒂": [t: "parenthesized fifteen"] # 0x2482 + - "⒃": [t: "parenthesized sixteen"] # 0x2483 + - "⒄": [t: "parenthesized seventeen"] # 0x2484 + - "⒅": [t: "parenthesized eighteen"] # 0x2485 + - "⒆": [t: "parenthesized nineteen"] # 0x2486 + - "⒇": [t: "parenthesized twenty"] # 0x2487 + - "⒈-⒐": # 0x2488 - 0x2491 + - spell: "translate('.', '⒈⒉⒊⒋⒌⒍⒎⒏⒐', '123456789')" + - t: "with period" + - "⒑": [t: "ten with period"] # 0x2491 + - "⒒": [t: "eleven with period"] # 0x2492 + - "⒓": [t: "twelve with period"] # 0x2493 + - "⒔": [t: "thirteen with period"] # 0x2494 + - "⒕": [t: "fourteen with period"] # 0x2495 + - "⒖": [t: "fifteen with period"] # 0x2496 + - "⒗": [t: "sixteen with period"] # 0x2497 + - "⒘": [t: "seventeen with period"] # 0x2498 + - "⒙": [t: "eighteen with period"] # 0x2499 + - "⒚": [t: "nineteen with period"] # 0x249a + - "⒛": [t: "twenty with period"] # 0x249b + - "⒜-⒵": # 0x249c - 0x24b5 + - t: "parenthesized" + - spell: "translate('.', '⒜⒝⒞⒟⒠⒡⒢⒣⒤⒥⒦⒧⒨⒩⒪⒫⒬⒭⒮⒯⒰⒱⒲⒳⒴⒵', 'abcdefghijklmnopqrstuvwxyz')" + + - "Ⓐ-ⓩ": # 0x24b6 - 0x24cf + - t: "circled" + - spell: "translate('.', 'ⒶⒷⒸⒹⒺⒻⒼⒽⒾⒿⓀⓁⓂⓃⓄⓅⓆⓇⓈⓉⓊⓋⓌⓍⓎⓏ', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" + + - "🅐-🅩": # 0x1f150 - 0x1f169 + - t: "black circled" + - spell: "translate('.', '🅐🅑🅒🅓🅔🅕🅖🅗🅘🅙🅚🅛🅜🅝🅞🅟🅠🅡🅢🅣🅤🅥🅦🅧🅨🅩', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" + + - "ⓐ-ⓩ": # 0x24d0 - 0x24e9 + - t: "circled" + - spell: "translate('.', 'ⓐⓑⓒⓓⓔⓕⓖⓗⓘⓙⓚⓛⓜⓝⓞⓟⓠⓡⓢⓣⓤⓥⓦⓧⓨⓩ', 'abcdefghijklmnopqrstuvwxyz')" + - "⓪": [t: "circled zero"] # 0x24ea + - "⓫": [t: "black circled eleven"] # 0x24eb + - "⓬": [t: "black circled twelve"] # 0x24ec + - "⓭": [t: "black circled thirteen"] # 0x24ed + - "⓮": [t: "black circled fourteen"] # 0x24ee + - "⓯": [t: "black circled fifteen"] # 0x24ef + - "⓰": [t: "black circled sixteen"] # 0x24f0 + - "⓱": [t: "black circled seventeen"] # 0x24f1 + - "⓲": [t: "black circled eighteen"] # 0x24f2 + - "⓳": [t: "black circled nineteen"] # 0x24f3 + - "⓴": [t: "black circled twenty"] # 0x24f4 + - "⓵-⓽": # 0x24f5 - 0x24fe + - t: "double circled" + - spell: "translate('.', '⓵⓶⓷⓸⓹⓺⓻⓼⓽', '123456789')" + - "⓾": [t: "double circled ten"] # 0x24fe + - "⓿": [t: "black circled zero"] # 0x24ff + - "■": [t: "black square"] # 0x25a0 + - "□": [t: "white square"] # 0x25a1 + - "▢": [t: "white square with rounded corners"] # 0x25a2 + - "▣": [t: "white square containing small black square"] # 0x25a3 + - "▤": [t: "square with horizontal fill"] # 0x25a4 + - "▥": [t: "square with vertical fill"] # 0x25a5 + - "▦": [t: "square with orthogonal crosshatch fill"] # 0x25a6 + - "▧": [t: "square with upper left to lower right fill"] # 0x25a7 + - "▨": [t: "square with upper right to lower left fill"] # 0x25a8 + - "▩": [t: "square with diagonal crosshatch fill"] # 0x25a9 + - "▪": [t: "black small square"] # 0x25aa + - "▫": [t: "white small square"] # 0x25ab + - "▬": [t: "black rectangle"] # 0x25ac + - "▭": [t: "white rectangle"] # 0x25ad + - "▮": [t: "black vertical rectangle"] # 0x25ae + - "▯": [t: "white vertical rectangle"] # 0x25af + - "▰": [t: "black parallelogram"] # 0x25b0 + - "▱": [t: "white parallelogram"] # 0x25b1 + - "▲": [t: "black up pointing triangle"] # 0x25b2 + - "△": [t: "triangle"] # 0x25b3 + - "▴": [t: "black up pointing small triangle"] # 0x25b4 + - "▵": [t: "white up pointing small triangle"] # 0x25b5 + - "▶": [t: "black right pointing triangle"] # 0x25b6 + - "▷": [t: "white right pointing triangle"] # 0x25b7 + - "▸": [t: "black right pointing small triangle"] # 0x25b8 + - "▹": [t: "white right pointing small triangle"] # 0x25b9 + - "►": [t: "black right pointing pointer"] # 0x25ba + - "▻": [t: "white right pointing pointer"] # 0x25bb + - "▼": [t: "black down pointing triangle"] # 0x25bc + - "▽": [t: "white down pointing triangle"] # 0x25bd + - "▾": [t: "black down pointing small triangle"] # 0x25be + - "▿": [t: "white down pointing small triangle"] # 0x25bf + - "◀": [t: "black left pointing triangle"] # 0x25c0 + - "◁": [t: "white left pointing triangle"] # 0x25c1 + - "◂": [t: "black left pointing small triangle"] # 0x25c2 + - "◃": [t: "white left pointing small triangle"] # 0x25c3 + - "◄": [t: "black left pointing pointer"] # 0x25c4 + - "◅": [t: "white left pointing pointer"] # 0x25c5 + - "◆": [t: "black diamond"] # 0x25c6 + - "◇": [t: "white diamond"] # 0x25c7 + - "◈": [t: "white diamond containing black small diamond"] # 0x25c8 + - "◉": [t: "fisheye"] # 0x25c9 + - "◊": [t: "lozenge"] # 0x25ca + - "○": [t: "white circle"] # 0x25cb + - "◌": [t: "dotted circle"] # 0x25cc + - "◍": [t: "circle with vertical fill"] # 0x25cd + - "◎": [t: "bullseye"] # 0x25ce + - "●": [t: "black circle"] # 0x25cf + - "◐": [t: "circle with left half black"] # 0x25d0 + - "◑": [t: "circle with right half black"] # 0x25d1 + - "◒": [t: "circle with lower half black"] # 0x25d2 + - "◓": [t: "circle with upper half black"] # 0x25d3 + - "◔": [t: "circle with upper right quadrant black"] # 0x25d4 + - "◕": [t: "circle with all but upper left quadrant black"] # 0x25d5 + - "◖": [t: "left half black circle"] # 0x25d6 + - "◗": [t: "right half black circle"] # 0x25d7 + - "◘": [t: "inverse bullet"] # 0x25d8 + - "◙": [t: "inverse white circle"] # 0x25d9 + - "◚": [t: "upper half inverse white circle"] # 0x25da + - "◛": [t: "lower half inverse white circle"] # 0x25db + - "◜": [t: "upper left quadrant circular arc"] # 0x25dc + - "◝": [t: "upper right quadrant circular arc"] # 0x25dd + - "◞": [t: "lower right quadrant circular arc"] # 0x25de + - "◟": [t: "lower left quadrant circular arc"] # 0x25df + - "◠": [t: "upper half circle"] # 0x25e0 + - "◡": [t: "lower half circle"] # 0x25e1 + - "◢": [t: "black lower right triangle"] # 0x25e2 + - "◣": [t: "black lower left triangle"] # 0x25e3 + - "◤": [t: "black upper left triangle"] # 0x25e4 + - "◥": [t: "black upper right triangle"] # 0x25e5 + - "◦": [t: "composition"] # 0x25e6 + - "◧": [t: "square with left half black"] # 0x25e7 + - "◨": [t: "square with right half black"] # 0x25e8 + - "◩": [t: "square with upper left half black"] # 0x25e9 + - "◪": [t: "square with lower right half black"] # 0x25ea + - "◫": [t: "white square with bisecting line"] # 0x25eb + - "◬": [t: "white up pointing triangle with dot"] # 0x25ec + - "◭": [t: "up pointing triangle with left half black"] # 0x25ed + - "◮": [t: "up pointing triangle with right half black"] # 0x25ee + - "◯": [t: "large circle"] # 0x25ef + - "◰": [t: "white square with upper left quadrant"] # 0x25f0 + - "◱": [t: "white square with lower left quadrant"] # 0x25f1 + - "◲": [t: "white square with lower right quadrant"] # 0x25f2 + - "◳": [t: "white square with upper right quadrant"] # 0x25f3 + - "◴": [t: "white circle with upper left quadrant"] # 0x25f4 + - "◵": [t: "white circle with lower left quadrant"] # 0x25f5 + - "◶": [t: "white circle with lower right quadrant"] # 0x25f6 + - "◷": [t: "white circle with upper right quadrant"] # 0x25f7 + - "◸": [t: "upper left triangle"] # 0x25f8 + - "◹": [t: "upper right triangle"] # 0x25f9 + - "◺": [t: "lower left triangle"] # 0x25fa + - "◻": [t: "white medium square"] # 0x25fb + - "◼": [t: "black medium square"] # 0x25fc + - "◽": [t: "white medium small square"] # 0x25fd + - "◾": [t: "black medium small square"] # 0x25fe + - "◿": [t: "lower right triangle"] # 0x25ff + - "★": [t: "black star"] # 0x2605 + - "☆": [t: "white star"] # 0x2606 + - "☉": [t: "sun"] # 0x2609 + - "☌": [t: "conjunction"] # 0x260c + - "☒": [t: "ballot box with x"] # 0x2612 + - "☽": [t: "waxing moon"] # 0x263d + - "☾": [t: "waning moon"] # 0x263e + - "☿": [t: "mercury"] # 0x263f + - "♀": [t: "female"] # 0x2640 + - "♁": [t: "earth"] # 0x2641 + - "♂": [t: "male"] # 0x2642 + - "♃": [t: "jupiter"] # 0x2643 + - "♄": [t: "saturn"] # 0x2644 + - "♅": [t: "uranus"] # 0x2645 + - "♆": [t: "neptune"] # 0x2646 + - "♇": [t: "pluto"] # 0x2647 + - "♈": [t: "aries"] # 0x2648 + - "♉": [t: "taurus"] # 0x2649 + - "♩": [t: "quarter note"] # 0x2669 + - "♭": [t: "flat"] # 0x266d + - "♮": [t: "natural"] # 0x266e + - "♯": [t: "sharp"] # 0x266f + - "♠": [t: "black spade suit"] # 0x2660 + - "♡": [t: "white heart suit"] # 0x2661 + - "♢": [t: "white diamond suit"] # 0x2662 + - "♣": [t: "black club suit"] # 0x2663 + - "♤": [t: "white spade suit"] # 0x2664 + - "♥": [t: "black heart suit"] # 0x2665 + - "♦": [t: "black diamond suit"] # 0x2666 + - "♧": [t: "white club suit"] # 0x2667 + - "⚀": [t: "die face 1"] # 0x2680 + - "⚁": [t: "die face 2"] # 0x2681 + - "⚂": [t: "die face 3"] # 0x2682 + - "⚃": [t: "die face 4"] # 0x2683 + - "⚄": [t: "die face 5"] # 0x2684 + - "⚅": [t: "die face 6"] # 0x2685 + - "⚆": [t: "white circle with dot right"] # 0x2686 + - "⚇": [t: "white circle wiht two dots"] # 0x2687 + - "⚈": [t: "black circle with dot right"] # 0x2688 + - "⚉": [t: "black circle wiht two dots"] # 0x2689 + - "⚪": [t: "medium white circle"] # 0x26aa + - "⚫": [t: "medium black circle"] # 0x26ab + - "⚬": [t: "medium small white circle"] # 0x26ac + - "⚲": [t: "neuter"] # 0x26b2 + - "✓": [t: "check mark"] # 0x2713 + - "✠": [t: "maltese cross"] # 0x2720 + - "✪": [t: "circled white star"] # 0x272a + - "✶": [t: "six pionted black star"] # 0x2736 + - "❨": [t: "medium left parentheses ornament"] # 0x2768 + - "❩": [t: "medium right parentheses ornament"] # 0x2769 + - "❪": [t: "medium flattened left parentheses ornament"] # 0x276a + - "❫": [t: "medium flattened right parentheses ornament"] # 0x276b + - "❬": [t: "medium left-pointing angle bracket ornament"] # 0x276c + - "❭": [t: "medium right-pointing angle bracket ornament"] # 0x276d + - "❮": [t: "heavy left-pointing angle quotation mark ornament"] # 0x276e + - "❯": [t: "heavy right-pointing angle quotation mark ornament"] # 0x276f + - "❰": [t: "heavy left-pointing angle bracket ornament"] # 0x2770 + - "❱": [t: "heavy right-pointing angle bracket ornament"] # 0x2771 + - "❲": [t: "light left tortoise shell bracket ornament"] # 0x2772 + - "❳": [t: "light right tortoise shell bracket ornament"] # 0x2773 + - "❴": [t: "medium left brace ornament"] # 0x2774 + - "❵": [t: "medium right brace ornament"] # 0x2775 + - "❶": [t: "black circled one"] # 0x2776 + - "❷": [t: "black circled two"] # 0x2777 + - "❸": [t: "black circled three"] # 0x2778 + - "❹": [t: "black circled four"] # 0x2779 + - "❺": [t: "black circled five"] # 0x277a + - "❻": [t: "black circled six"] # 0x277b + - "❼": [t: "black circled seven"] # 0x277c + - "❽": [t: "black circled eight"] # 0x277d + - "❾": [t: "black circled nine"] # 0x277e + - "❿": [t: "black circled ten"] # 0x277f + - "➀": [t: "circled sans serif one"] # 0x2780 + - "➁": [t: "circled sans serif two"] # 0x2781 + - "➂": [t: "circled sans serif three"] # 0x2782 + - "➃": [t: "circled sans serif four"] # 0x2783 + - "➄": [t: "circled sans serif five"] # 0x2784 + - "➅": [t: "circled sans serif six"] # 0x2785 + - "➆": [t: "circled sans serif seven"] # 0x2786 + - "➇": [t: "circled sans serif eight"] # 0x2787 + - "➈": [t: "circled sans serif nine"] # 0x2788 + - "➉": [t: "circled sans serif ten"] # 0x2789 + - "➊": [t: "black circled sans serif one"] # 0x278a + - "➋": [t: "black circled sans serif two"] # 0x278b + - "➌": [t: "black circled sans serif three"] # 0x278c + - "➍": [t: "black circled sans serif four"] # 0x278d + - "➎": [t: "black circled sans serif five"] # 0x278e + - "➏": [t: "black circled sans serif six"] # 0x278f + - "➐": [t: "black circled sans serif seven"] # 0x2790 + - "➑": [t: "black circled sans serif eight"] # 0x2791 + - "➒": [t: "black circled sans serif nine"] # 0x2792 + - "➓": [t: "black circled sans serif ten"] # 0x2793 + - "➔": [t: "heavy wide-headed right arrow"] # 0x2794 + - "➕": [t: "heavy plus sign"] # 0x2795 + - "➖": [t: "heavy minus sign"] # 0x2796 + - "➗": [t: "heavy division sign"] # 0x2797 + - "➘": [t: "heavy south east arrow"] # 0x2798 + - "➙": [t: "heavy right arrow"] # 0x2799 + - "➚": [t: "heavy north east arrow"] # 0x279a + - "➛": [t: "drafting point right arrow"] # 0x279b + - "➜": [t: "heavy round-tipped right arrow"] # 0x279c + - "➝": [t: "triangle-headed right arrow"] # 0x279d + - "➞": [t: "heavy triangle-headed right arrow"] # 0x279e + - "➟": [t: "dashed triangle-headed right arrow"] # 0x279f + - "➠": [t: "heavy dashed triangle-headed right arrow"] # 0x27a0 + - "➡": [t: "black right arrow"] # 0x27a1 + - "➢": [t: "three d top lighted right arrow"] # 0x27a2 + - "➣": [t: "three d bottom lighted right arrow"] # 0x27a3 + - "➤": [t: "black right arrowhead"] # 0x27a4 + - "➥": [t: "heavy black curved down and right arrow"] # 0x27a5 + - "➦": [t: "heavy black curved up and right arrow"] # 0x27a6 + - "➧": [t: "squat black right arrow"] # 0x27a7 + - "➨": [t: "heavy concave-pointed black right arrow"] # 0x27a8 + - "➩": [t: "right-shaded white right arrow"] # 0x27a9 + - "➪": [t: "left-shaded white right arrow"] # 0x27aa + - "➫": [t: "back-tilted shadowed white right arrow"] # 0x27ab + - "➬": [t: "front-tilted shadowed white right arrow"] # 0x27ac + - "➭": [t: "heavy lower right-shadowed white right arrow"] # 0x27ad + - "➮": [t: "heavy upper right-shadowed white right arrow"] # 0x27ae + - "➯": [t: "notched lower right-shadowed white right arrow"] # 0x27af + - "➱": [t: "notched upper right-shadowed white right arrow"] # 0x27b1 + - "➲": [t: "circled heavy white right arrow"] # 0x27b2 + - "➳": [t: "white-feathered right arrow"] # 0x27b3 + - "➴": [t: "black-feathered south east arrow"] # 0x27b4 + - "➵": [t: "black-feathered right arrow"] # 0x27b5 + - "➶": [t: "black-feathered north east arrow"] # 0x27b6 + - "➷": [t: "heavy black-feathered south east arrow"] # 0x27b7 + - "➸": [t: "heavy black-feathered right arrow"] # 0x27b8 + - "➹": [t: "heavy black-feathered north east arrow"] # 0x27b9 + - "➺": [t: "teradrop-barbed right arrow"] # 0x27ba + - "➻": [t: "heavy teardrop-shanked right arrow"] # 0x27bb + - "➼": [t: "wedge-tailed right arrow"] # 0x27bc + - "➽": [t: "heavy wedge-tailed right arrow"] # 0x27bd + - "➾": [t: "open-outlined right arrow"] # 0x27be + - "⟀": [t: "three dimensional angle"] # 0x27c0 + - "⟁": [t: "white triangle containing small white triangle"] # 0x27c1 + - "⟂": # 0x27c2 + - test: + if: "$Verbosity!='Terse'" + then: [t: "is"] + - t: "perpendicular to" + - "⟃": # 0x27c3 + - test: + if: "$Verbosity!='Terse'" + then: [t: "is"] + - t: "an open subset of" + - "⟄": # 0x27c4 + - test: + if: "$Verbosity!='Terse'" + then: [t: "is"] + - t: "an open superset of" + - "⟅": [t: "left s-shaped bag delimiter"] # 0x27c5 + - "⟆": [t: "right s-shaped bag delimiter"] # 0x27c6 + - "⟇": [t: "or with dot inside"] # 0x27c7 + - "⟈": [t: "reverse solidus preceding subset"] # 0x27c8 + - "⟉": [t: "superset preceding solidus"] # 0x27c9 + - "⟊": [t: "vertical bar with horizontal stroke"] # 0x27ca + - "⟋": [t: "mathematical rising diagonal"] # 0x27cb + - "⟌": [t: "long division"] # 0x27cc + - "⟍": [t: "mathematical falling diagonal"] # 0x27cd + - "⟎": [t: "squared logical and"] # 0x27ce + - "⟏": [t: "squared logical or"] # 0x27cf + - "⟐": [t: "white diamond with centered dot"] # 0x27d0 + - "⟑": [t: "and with dot"] # 0x27d1 + - "⟒": [t: "element of opening up"] # 0x27d2 + - "⟓": [t: "lower right corner with dot"] # 0x27d3 + - "⟔": [t: "upper left corner with dot"] # 0x27d4 + - "⟕": [t: "left outer join"] # 0x27d5 + - "⟖": [t: "right outer join"] # 0x27d6 + - "⟗": [t: "full outer join"] # 0x27d7 + - "⟘": [t: "large up tack"] # 0x27d8 + - "⟙": [t: "large down tack"] # 0x27d9 + - "⟚": [t: "left and right double turnstile"] # 0x27da + - "⟛": [t: "left and right tack"] # 0x27db + - "⟜": [t: "left multimap"] # 0x27dc + - "⟝": [t: "long right tack"] # 0x27dd + - "⟞": [t: "long left tack"] # 0x27de + - "⟟": [t: "up tack with circle above"] # 0x27df + - "⟠": [t: "lozenge divided by horizontal rule"] # 0x27e0 + - "⟡": [t: "white concave sided diamond"] # 0x27e1 + - "⟢": [t: "white concave sided diamond with left tick"] # 0x27e2 + - "⟣": [t: "white concave sided diamond with right tick"] # 0x27e3 + - "⟤": [t: "white square with left tick"] # 0x27e4 + - "⟥": [t: "white square with right tick"] # 0x27e5 + - "⟦": [t: "left white square bracket"] # 0x27e6 + - "⟧": [t: "right white square bracket"] # 0x27e7 + - "⟨": [t: "left angle bracket"] # 0x27e8 + - "⟩": [t: "right angle bracket"] # 0x27e9 + - "⟪": [t: "left double angle bracket"] # 0x27ea + - "⟫": [t: "right double angle bracket"] # 0x27eb + - "⟬": [t: "left white tortoise shell bracket"] # 0x27ec + - "⟭": [t: "right white tortoise shell bracket"] # 0x27ed + - "⟮": [t: "left flattened parenthesis"] # 0x27ee + - "⟯": [t: "right flattened parenthesis"] # 0x27ef + - "⟰": [t: "up quadruple arrow"] # 0x27f0 + - "⟱": [t: "down quadruple arrow"] # 0x27f1 + - "⟲": [t: "anticlockwise gapped circle arrow"] # 0x27f2 + - "⟳": [t: "clockwise gapped circle arrow"] # 0x27f3 + - "⟴": [t: "right arrow with circled plus"] # 0x27f4 + - "⟵": [t: "long left arrow"] # 0x27f5 + - "⟶": [t: "long right arrow"] # 0x27f6 + - "⟷": [t: "long left right arrow"] # 0x27f7 + - "⟸": [t: "long left double arrow"] # 0x27f8 + - "⟹": [t: "implies"] # 0x27f9 + - "⟺": [t: "if and only if"] # 0x27fa + - "⟻": [t: "long left arrow from bar"] # 0x27fb + - "⟼": [t: "long right arrow from bar"] # 0x27fc + - "⟽": [t: "long left double arrow from bar"] # 0x27fd + - "⟾": [t: "long right double arrow from bar"] # 0x27fe + - "⟿": [t: "long right squiggle arrow"] # 0x27ff + - "⤀": [t: "right two headed arrow with vertical stroke"] # 0x2900 + - "⤁": [t: "right two headed arrow with double vertical stroke"] # 0x2901 + - "⤂": [t: "left double arrow with vertical stroke"] # 0x2902 + - "⤃": [t: "right double arrow with vertical stroke"] # 0x2903 + - "⤄": [t: "left right double arrow with vertical stroke"] # 0x2904 + - "⤅": [t: "right two headed arrow from bar"] # 0x2905 + - "⤆": [t: "left double arrow from bar"] # 0x2906 + - "⤇": [t: "right double arrow from bar"] # 0x2907 + - "⤈": [t: "down arrow with horizontal stroke"] # 0x2908 + - "⤉": [t: "up arrow with horizontal stroke"] # 0x2909 + - "⤊": [t: "up triple arrow"] # 0x290a + - "⤋": [t: "down triple arrow"] # 0x290b + - "⤌": [t: "left double dash arrow"] # 0x290c + - "⤍": [t: "right double dash arrow"] # 0x290d + - "⤎": [t: "left triple dash arrow"] # 0x290e + - "⤏": [t: "right triple dash arrow"] # 0x290f + - "⤐": [t: "right two headed triple dash arrow"] # 0x2910 + - "⤑": [t: "right arrow with dotted stem"] # 0x2911 + - "⤒": [t: "up arrow to bar"] # 0x2912 + - "⤓": [t: "down arrow to bar"] # 0x2913 + - "⤔": [t: "right arrow with tail and vertical stroke"] # 0x2914 + - "⤕": [t: "right arrow with tail and double vertical stroke"] # 0x2915 + - "⤖": [t: "right two headed arrow with tail"] # 0x2916 + - "⤗": [t: "right two headed arrow with tail with vertical stroke"] # 0x2917 + - "⤘": [t: "right two headed arrow with tail with double vertical stroke"] # 0x2918 + - "⤙": [t: "left arrow tail"] # 0x2919 + - "⤚": [t: "right arrow tail"] # 0x291a + - "⤛": [t: "left double arrow tail"] # 0x291b + - "⤜": [t: "right double arrow tail"] # 0x291c + - "⤝": [t: "left arrow to filled diamond"] # 0x291d + - "⤞": [t: "right arrow to filled diamond"] # 0x291e + - "⤟": [t: "left arrow from bar to filled diamond"] # 0x291f + - "⤠": [t: "right arrow from bar to filled diamond"] # 0x2920 + - "⤡": [t: "north west and south east arrow"] # 0x2921 + - "⤢": [t: "north east and south west arrow"] # 0x2922 + - "⤣": [t: "north west arrow with hook"] # 0x2923 + - "⤤": [t: "north east arrow with hook"] # 0x2924 + - "⤥": [t: "south east arrow with hook"] # 0x2925 + - "⤦": [t: "south west arrow with hook"] # 0x2926 + - "⤧": [t: "north west arrow and north east arrow"] # 0x2927 + - "⤨": [t: "north east arrow and south east arrow"] # 0x2928 + - "⤩": [t: "south east arrow and south west arrow"] # 0x2929 + - "⤪": [t: "south west arrow and north west arrow"] # 0x292a + - "⤫": [t: "rising diagonal crossing falling diagonal"] # 0x292b + - "⤬": [t: "falling diagonal crossing rising diagonal"] # 0x292c + - "⤭": [t: "south east arrow crossing north east arrow"] # 0x292d + - "⤮": [t: "north east arrow crossing south east arrow"] # 0x292e + - "⤯": [t: "falling diagonal crossing north east arrow"] # 0x292f + - "⤰": [t: "rising diagonal crossing south east arrow"] # 0x2930 + - "⤱": [t: "north east arrow crossing north west arrow"] # 0x2931 + - "⤲": [t: "north west arrow crossing north east arrow"] # 0x2932 + - "⤳": [t: "wave arrow pointing directly right"] # 0x2933 + - "⤴": [t: "arrow pointing right then curving up"] # 0x2934 + - "⤵": [t: "arrow pointing right then curving down"] # 0x2935 + - "⤶": [t: "arrow pointing down then curving left"] # 0x2936 + - "⤷": [t: "arrow pointing down then curving right"] # 0x2937 + - "⤸": [t: "right side arc clockwise arrow"] # 0x2938 + - "⤹": [t: "left side arc anticlockwise arrow"] # 0x2939 + - "⤺": [t: "top arc anticlockwise arrow"] # 0x293a + - "⤻": [t: "bottom arc anticlockwise arrow"] # 0x293b + - "⤼": [t: "top arc clockwise arrow with minus"] # 0x293c + - "⤽": [t: "top arc anticlockwise arrow with plus"] # 0x293d + - "⤾": [t: "lower right semicircular clockwise arrow"] # 0x293e + - "⤿": [t: "lower left semicircular anticlockwise arrow"] # 0x293f + - "⥀": [t: "anticlockwise closed circle arrow"] # 0x2940 + - "⥁": [t: "clockwise closed circle arrow"] # 0x2941 + - "⥂": [t: "right arrow above short left arrow"] # 0x2942 + - "⥃": [t: "left arrow above short right arrow"] # 0x2943 + - "⥄": [t: "short right arrow above left arrow"] # 0x2944 + - "⥅": [t: "right arrow with plus below"] # 0x2945 + - "⥆": [t: "left arrow with plus below"] # 0x2946 + - "⥇": [t: "right arrow through x"] # 0x2947 + - "⥈": [t: "left right arrow through circle"] # 0x2948 + - "⥉": [t: "up two headed arrow from circle"] # 0x2949 + - "⥊": [t: "left barb up right barb down harpoon"] # 0x294a + - "⥋": [t: "left barb down right barb up harpoon"] # 0x294b + - "⥌": [t: "up barb right down barb left harpoon"] # 0x294c + - "⥍": [t: "up barb left down barb right harpoon"] # 0x294d + - "⥎": [t: "left barb up right barb up harpoon"] # 0x294e + - "⥏": [t: "up barb right down barb right harpoon"] # 0x294f + - "⥐": [t: "left barb down right barb down harpoon"] # 0x2950 + - "⥑": [t: "up barb left down barb left harpoon"] # 0x2951 + - "⥒": [t: "left harpoon with barb up to bar"] # 0x2952 + - "⥓": [t: "right harpoon with barb up to bar"] # 0x2953 + - "⥔": [t: "up harpoon with barb right to bar"] # 0x2954 + - "⥕": [t: "down harpoon with barb right to bar"] # 0x2955 + - "⥖": [t: "left harpoon with barb down to bar"] # 0x2956 + - "⥗": [t: "right harpoon with barb down to bar"] # 0x2957 + - "⥘": [t: "up harpoon with barb left to bar"] # 0x2958 + - "⥙": [t: "down harpoon with barb left to bar"] # 0x2959 + - "⥚": [t: "left harpoon with barb up from bar"] # 0x295a + - "⥛": [t: "right harpoon with barb up from bar"] # 0x295b + - "⥜": [t: "up harpoon with barb right from bar"] # 0x295c + - "⥝": [t: "down harpoon with barb right from bar"] # 0x295d + - "⥞": [t: "left harpoon with barb down from bar"] # 0x295e + - "⥟": [t: "right harpoon with barb down from bar"] # 0x295f + - "⥠": [t: "up harpoon with barb left from bar"] # 0x2960 + - "⥡": [t: "down harpoon with barb left from bar"] # 0x2961 + - "⥢": [t: "left harpoon with barb up above left harpoon with barb down"] # 0x2962 + - "⥣": [t: "up harpoon with barb left beside up harpoon with barb right"] # 0x2963 + - "⥤": [t: "right harpoon with barb up above right harpoon with barb down"] # 0x2964 + - "⥥": [t: "down harpoon with barb left beside down harpoon with barb right"] # 0x2965 + - "⥦": [t: "left harpoon with barb up above right harpoon with barb up"] # 0x2966 + - "⥧": [t: "left harpoon with barb down above right harpoon with barb down"] # 0x2967 + - "⥨": [t: "right harpoon with barb up above left harpoon with barb up"] # 0x2968 + - "⥩": [t: "right harpoon with barb down above left harpoon with barb down"] # 0x2969 + - "⥪": [t: "left harpoon with barb up above long dash"] # 0x296a + - "⥫": [t: "left harpoon with barb down below long dash"] # 0x296b + - "⥬": [t: "right harpoon with barb up above long dash"] # 0x296c + - "⥭": [t: "right harpoon with barb down below long dash"] # 0x296d + - "⥮": [t: "up harpoon with barb left beside down harpoon with barb right"] # 0x296e + - "⥯": [t: "down harpoon with barb left beside up harpoon with barb right"] # 0x296f + - "⥰": [t: "right double arrow with rounded head"] # 0x2970 + - "⥱": [t: "equals above right arrow"] # 0x2971 + - "⥲": [t: "tilde operator above right arrow"] # 0x2972 + - "⥳": [t: "left arrow above tilde operator"] # 0x2973 + - "⥴": [t: "right arrow above tilde operator"] # 0x2974 + - "⥵": [t: "right arrow above almost equal to"] # 0x2975 + - "⥶": [t: "less than above left arrow"] # 0x2976 + - "⥷": [t: "left arrow through less than"] # 0x2977 + - "⥸": [t: "greater than above right arrow"] # 0x2978 + - "⥹": [t: "subset above right arrow"] # 0x2979 + - "⥺": [t: "left arrow through subset"] # 0x297a + - "⥻": [t: "superset above left arrow"] # 0x297b + - "⥼": [t: "left fish tail"] # 0x297c + - "⥽": [t: "right fish tail"] # 0x297d + - "⥾": [t: "up fish tail"] # 0x297e + - "⥿": [t: "down fish tail"] # 0x297f + - "⦀": [t: "triple vertical bar delimiter"] # 0x2980 + - "⦁": [t: "z notation spot"] # 0x2981 + - "⦂": [t: "z notation type colon"] # 0x2982 + - "⦃": [t: "left white brace"] # 0x2983 + - "⦄": [t: "right white brace"] # 0x2984 + - "⦅": [t: "left white parenthesis"] # 0x2985 + - "⦆": [t: "right white parenthesis"] # 0x2986 + - "⦇": [t: "z notation left image bracket"] # 0x2987 + - "⦈": [t: "z notation right image bracket"] # 0x2988 + - "⦉": [t: "z notation left binding bracket"] # 0x2989 + - "⦊": [t: "z notation right binding bracket"] # 0x298a + - "⦋": [t: "left square bracket with underbar"] # 0x298b + - "⦌": [t: "right square bracket with underbar"] # 0x298c + - "⦍": [t: "left square bracket with tick in top corner"] # 0x298d + - "⦎": [t: "right square bracket with tick in bottom corner"] # 0x298e + - "⦏": [t: "left square bracket with tick in bottom corner"] # 0x298f + - "⦐": [t: "right square bracket with tick in top corner"] # 0x2990 + - "⦑": [t: "left angle bracket with dot"] # 0x2991 + - "⦒": [t: "right angle bracket with dot"] # 0x2992 + - "⦓": [t: "left arc less than bracket"] # 0x2993 + - "⦔": [t: "right arc greater than bracket"] # 0x2994 + - "⦕": [t: "double left arc greater than bracket"] # 0x2995 + - "⦖": [t: "double right arc less than bracket"] # 0x2996 + - "⦗": [t: "left black tortoise shell bracket"] # 0x2997 + - "⦘": [t: "right black tortoise shell bracket"] # 0x2998 + - "⦙": [t: "dotted fence"] # 0x2999 + - "⦚": [t: "vertical zigzag line"] # 0x299a + - "⦛": [t: "measured angle opening left"] # 0x299b + - "⦜": [t: "right angle variant with square"] # 0x299c + - "⦝": [t: "measured right angle with dot"] # 0x299d + - "⦞": [t: "angle with s inside"] # 0x299e + - "⦟": [t: "acute angle"] # 0x299f + - "⦠": [t: "spherical angle opening left"] # 0x29a0 + - "⦡": [t: "spherical angle opening up"] # 0x29a1 + - "⦢": [t: "turned angle"] # 0x29a2 + - "⦣": [t: "reversed angle"] # 0x29a3 + - "⦤": [t: "angle with underbar"] # 0x29a4 + - "⦥": [t: "reversed angle with underbar"] # 0x29a5 + - "⦦": [t: "oblique angle opening up"] # 0x29a6 + - "⦧": [t: "oblique angle opening down"] # 0x29a7 + - "⦨": [t: "measured angle with open arm ending in arrow pointing up and to the right"] # 0x29a8 + - "⦩": [t: "measured angle with open arm ending in arrow pointing up and to the left"] # 0x29a9 + - "⦪": [t: "measured angle with open arm ending in arrow pointing down and to the right"] # 0x29aa + - "⦫": [t: "measured angle with open arm ending in arrow pointing down and to the left"] # 0x29ab + - "⦬": [t: "measured angle with open arm ending in arrow pointing right and up"] # 0x29ac + - "⦭": [t: "measured angle with open arm ending in arrow pointing left and up"] # 0x29ad + - "⦮": [t: "measured angle with open arm ending in arrow pointing right and down"] # 0x29ae + - "⦯": [t: "measured angle with open arm ending in arrow pointing left and down"] # 0x29af + - "⦰": [t: "reversed empty set"] # 0x29b0 + - "⦱": [t: "empty set with overbar"] # 0x29b1 + - "⦲": [t: "empty set with small circle above"] # 0x29b2 + - "⦳": [t: "empty set with right arrow above"] # 0x29b3 + - "⦴": [t: "empty set with left arrow above"] # 0x29b4 + - "⦵": [t: "circle with horizontal bar"] # 0x29b5 + - "⦶": [t: "circled vertical bar"] # 0x29b6 + - "⦷": [t: "circled parallel"] # 0x29b7 + - "⦸": [t: "circled reverse solidus"] # 0x29b8 + - "⦹": [t: "circled perpendicular"] # 0x29b9 + - "⦺": [t: "circled divided by horizontal bar and top half divided by vertical bar"] # 0x29ba + - "⦻": [t: "circle with superimposed x"] # 0x29bb + - "⦼": [t: "circled anticlockwise rotated division sign"] # 0x29bc + - "⦽": [t: "up arrow through circle"] # 0x29bd + - "⦾": [t: "circled white bullet"] # 0x29be + - "⦿": [t: "circled bullet"] # 0x29bf + - "⧀": [t: "circled less than"] # 0x29c0 + - "⧁": [t: "circled greater than"] # 0x29c1 + - "⧂": [t: "circle with small circle to the right"] # 0x29c2 + - "⧃": [t: "circle with two horizontal strokes to the right"] # 0x29c3 + - "⧄": [t: "squared rising diagonal slash"] # 0x29c4 + - "⧅": [t: "squared falling diagonal slash"] # 0x29c5 + - "⧆": [t: "squared asterisk"] # 0x29c6 + - "⧇": [t: "squared small circle"] # 0x29c7 + - "⧈": [t: "squared square"] # 0x29c8 + - "⧉": [t: "two joined squares"] # 0x29c9 + - "⧊": [t: "triangle with dot above"] # 0x29ca + - "⧋": [t: "triangle with underbar"] # 0x29cb + - "⧌": [t: "s in triangle"] # 0x29cc + - "⧍": [t: "triangle with serifs at bottom"] # 0x29cd + - "⧎": [t: "right triangle above left triangle"] # 0x29ce + - "⧏": [t: "left triangle beside vertical bar"] # 0x29cf + - "⧐": [t: "vertical bar beside right triangle"] # 0x29d0 + - "⧑": [t: "bowtie with left half black"] # 0x29d1 + - "⧒": [t: "bowtie with right half black"] # 0x29d2 + - "⧓": [t: "black bowtie"] # 0x29d3 + - "⧔": [t: "times with left half black"] # 0x29d4 + - "⧕": [t: "times with right half black"] # 0x29d5 + - "⧖": [t: "white hourglass"] # 0x29d6 + - "⧗": [t: "black hourglass"] # 0x29d7 + - "⧘": [t: "left wiggly fence"] # 0x29d8 + - "⧙": [t: "right wiggly fence"] # 0x29d9 + - "⧚": [t: "left double wiggly fence"] # 0x29da + - "⧛": [t: "right double wiggly fence"] # 0x29db + - "⧜": [t: "incomplete infinity"] # 0x29dc + - "⧝": [t: "tie over infinity"] # 0x29dd + - "⧞": [t: "infinity negated with vertical bar"] # 0x29de + - "⧟": [t: "double-ended multimap"] # 0x29df + - "⧠": [t: "square with contoured outline"] # 0x29e0 + - "⧡": [t: "increases as"] # 0x29e1 + - "⧢": [t: "shuffle product"] # 0x29e2 + - "⧣": [t: "equals sign and slanted parallel"] # 0x29e3 + - "⧤": [t: "equals sign and slanted parallel with tilde above"] # 0x29e4 + - "⧥": [t: "identical to and slanted parallel"] # 0x29e5 + - "⧦": [t: "gleich stark"] # 0x29e6 + - "⧧": [t: "thermodynamic"] # 0x29e7 + - "⧨": [t: "down pointing triangle with left half black"] # 0x29e8 + - "⧩": [t: "down pointing triangle with right half black"] # 0x29e9 + - "⧪": [t: "black diamond with down arrow"] # 0x29ea + - "⧫": [t: "black lozenge"] # 0x29eb + - "⧬": [t: "white circle with down arrow"] # 0x29ec + - "⧭": [t: "black circle with down arrow"] # 0x29ed + - "⧮": [t: "error-barred white square"] # 0x29ee + - "⧯": [t: "error-barred black square"] # 0x29ef + - "⧰": [t: "error-barred white diamond"] # 0x29f0 + - "⧱": [t: "error-barred black diamond"] # 0x29f1 + - "⧲": [t: "error-barred white circle"] # 0x29f2 + - "⧳": [t: "error-barred black circle"] # 0x29f3 + - "⧴": [t: "rule-delayed"] # 0x29f4 + - "⧵": [t: "reverse solidus operator"] # 0x29f5 + - "⧶": [t: "solidus with overbar"] # 0x29f6 + - "⧷": [t: "reverse solidus with horizontal stroke"] # 0x29f7 + - "⧸": [t: "big solidus"] # 0x29f8 + - "⧹": [t: "big reverse solidus"] # 0x29f9 + - "⧺": [t: "double plus"] # 0x29fa + - "⧻": [t: "triple plus"] # 0x29fb + - "⧼": [t: "left pointing curved angle bracket"] # 0x29fc + - "⧽": [t: "right pointing curved angle bracket"] # 0x29fd + - "⧾": [t: "tiny"] # 0x29fe + - "⧿": [t: "miny"] # 0x29ff + - "⨀": [t: "circled dot operator"] # 0x2a00 + - "⨁": [t: "circled plus operator"] # 0x2a01 + - "⨂": [t: "circled times operator"] # 0x2a02 + - "⨃": [t: "union operator with dot"] # 0x2a03 + - "⨄": [t: "union operator with plus"] # 0x2a04 + - "⨅": [t: "square intersection operator"] # 0x2a05 + - "⨆": [t: "square union operator"] # 0x2a06 + - "⨇": [t: "two logical and operator"] # 0x2a07 + - "⨈": [t: "two logical or operator"] # 0x2a08 + - "⨉": [t: "times operator"] # 0x2a09 + - "⨊": [t: "modulo two sum"] # 0x2a0a + - "⨋": [t: "summation with integral"] # 0x2a0b + - "⨌": [t: "quadruple integral operator"] # 0x2a0c + - "⨍": [t: "finite part integral"] # 0x2a0d + - "⨎": [t: "integral with double stroke"] # 0x2a0e + - "⨏": [t: "integral average with slash"] # 0x2a0f + - "⨐": [t: "circulation function"] # 0x2a10 + - "⨑": [t: "anticlockwise integration"] # 0x2a11 + - "⨒": [t: "line integration with rectangular path around pole"] # 0x2a12 + - "⨓": [t: "line integration with semicircular path around pole"] # 0x2a13 + - "⨔": [t: "line integration not including the pole"] # 0x2a14 + - "⨕": [t: "integral around a point operator"] # 0x2a15 + - "⨖": [t: "quaternion integral operator"] # 0x2a16 + - "⨗": [t: "integral with left arrow with hook"] # 0x2a17 + - "⨘": [t: "integral with times sign"] # 0x2a18 + - "⨙": [t: "integral with intersection"] # 0x2a19 + - "⨚": [t: "integral with union"] # 0x2a1a + - "⨛": [t: "integral with overbar"] # 0x2a1b + - "⨜": [t: "integral with underbar"] # 0x2a1c + - "⨝": [t: "join"] # 0x2a1d + - "⨞": [t: "large left triangle operator"] # 0x2a1e + - "⨟": [t: "z notation schema composition"] # 0x2a1f + - "⨠": [t: "z notation schema piping"] # 0x2a20 + - "⨡": [t: "z notation schema projection"] # 0x2a21 + - "⨢": [t: "plus sign with circle above"] # 0x2a22 + - "⨣": [t: "plus sign with circumflex accent above"] # 0x2a23 + - "⨤": [t: "plus sign with tilde above"] # 0x2a24 + - "⨥": [t: "plus sign with dot below"] # 0x2a25 + - "⨦": [t: "plus sign with tilde below"] # 0x2a26 + - "⨧": [t: "plus sign with subscript two"] # 0x2a27 + - "⨨": [t: "plus sign with black triangle"] # 0x2a28 + - "⨩": [t: "minus sign with comma above"] # 0x2a29 + - "⨪": [t: "minus sign with dot below"] # 0x2a2a + - "⨫": [t: "minus sign with falling dots"] # 0x2a2b + - "⨬": [t: "minus sign with rising dots"] # 0x2a2c + - "⨭": [t: "plus sign in left half circle"] # 0x2a2d + - "⨮": [t: "plus sign in right half circle"] # 0x2a2e + - "⨯": # 0x2a2f + - test: + if: "$Verbosity='Terse'" + then: [t: "cross"] + else: [t: "cross product"] + - "⨰": [t: "multiplication sign with dot above"] # 0x2a30 + - "⨱": [t: "multiplication sign with underbar"] # 0x2a31 + - "⨲": [t: "semidirect product with bottom closed"] # 0x2a32 + - "⨳": [t: "smash product"] # 0x2a33 + - "⨴": [t: "multiplication sign in left half circle"] # 0x2a34 + - "⨵": [t: "multiplication sign in right half circle"] # 0x2a35 + - "⨶": [t: "circled multiplication sign with circumflex accent"] # 0x2a36 + - "⨷": [t: "multiplication sign in double circle"] # 0x2a37 + - "⨸": [t: "circled division sign"] # 0x2a38 + - "⨹": [t: "plus sign in triangle"] # 0x2a39 + - "⨺": [t: "minus sign in triangle"] # 0x2a3a + - "⨻": [t: "multiplication sign in triangle"] # 0x2a3b + - "⨼": [t: "interior product"] # 0x2a3c + - "⨽": [t: "righthand interior product"] # 0x2a3d + - "⨾": [t: "z notation relational composition"] # 0x2a3e + - "⨿": [t: "amalgamation or coproduct"] # 0x2a3f + - "⩀": [t: "intersection with dot"] # 0x2a40 + - "⩁": [t: "union with minus sign"] # 0x2a41 + - "⩂": [t: "union with overbar"] # 0x2a42 + - "⩃": [t: "intersection with overbar"] # 0x2a43 + - "⩄": [t: "intersection with logical and"] # 0x2a44 + - "⩅": [t: "union with logical or"] # 0x2a45 + - "⩆": [t: "union above intersection"] # 0x2a46 + - "⩇": [t: "intersection above union"] # 0x2a47 + - "⩈": [t: "union above bar above intersection"] # 0x2a48 + - "⩉": [t: "intersection above bar above union"] # 0x2a49 + - "⩊": [t: "union beside and joined with union"] # 0x2a4a + - "⩋": [t: "intersection beside and joined with intersection"] # 0x2a4b + - "⩌": [t: "closed union with serifs"] # 0x2a4c + - "⩍": [t: "closed intersection with serifs"] # 0x2a4d + - "⩎": [t: "double square intersection"] # 0x2a4e + - "⩏": [t: "double square union"] # 0x2a4f + - "⩐": [t: "closed union with serifs and smash product"] # 0x2a50 + - "⩑": [t: "logical and with dot above"] # 0x2a51 + - "⩒": [t: "logical or with dot above"] # 0x2a52 + - "⩓": [t: "double logical and"] # 0x2a53 + - "⩔": [t: "double logical or"] # 0x2a54 + - "⩕": [t: "two intersecting logical and"] # 0x2a55 + - "⩖": [t: "two intersecting logical or"] # 0x2a56 + - "⩗": [t: "sloping large or"] # 0x2a57 + - "⩘": [t: "sloping large and"] # 0x2a58 + - "⩙": [t: "logical or overlapping logical and"] # 0x2a59 + - "⩚": [t: "logical and with middle stem"] # 0x2a5a + - "⩛": [t: "logical or with middle stem"] # 0x2a5b + - "⩜": [t: "logical and with horizontal dash"] # 0x2a5c + - "⩝": [t: "logical or with horizontal dash"] # 0x2a5d + - "⩞": [t: "logical and with double overbar"] # 0x2a5e + - "⩟": [t: "logical and with underbar"] # 0x2a5f + - "⩠": [t: "logical and with double underbar"] # 0x2a60 + - "⩡": [t: "small vee with underbar"] # 0x2a61 + - "⩢": [t: "logical or with double overbar"] # 0x2a62 + - "⩣": [t: "logical or with double underbar"] # 0x2a63 + - "⩤": [t: "z notation domain antirestriction"] # 0x2a64 + - "⩥": [t: "z notation range antirestriction"] # 0x2a65 + - "⩦": [t: "equals sign with dot below"] # 0x2a66 + - "⩧": [t: "identical with dot above"] # 0x2a67 + - "⩨": [t: "triple horizontal bar with double vertical stroke"] # 0x2a68 + - "⩩": [t: "triple horizontal bar with triple vertical stroke"] # 0x2a69 + - "⩪": [t: "tilde operator with dot above"] # 0x2a6a + - "⩫": [t: "tilde operator with rising dots"] # 0x2a6b + - "⩬": [t: "similar minus similar"] # 0x2a6c + - "⩭": [t: "congruent with dot above"] # 0x2a6d + - "⩮": [t: "equals with asterisk"] # 0x2a6e + - "⩯": [t: "almost equal to with circumflex accent"] # 0x2a6f + - "⩰": [t: "approximately equal to or equal to"] # 0x2a70 + - "⩱": [t: "equals sign above plus sign"] # 0x2a71 + - "⩲": [t: "plus sign above equals sign"] # 0x2a72 + - "⩳": [t: "equals sign above tilde operator"] # 0x2a73 + - "⩴": [t: "double colon equal"] # 0x2a74 + - "⩵": [t: "two consecutive equals signs"] # 0x2a75 + - "⩶": [t: "three consecutive equals signs"] # 0x2a76 + - "⩷": [t: "equals sign with two dots above and two dots below"] # 0x2a77 + - "⩸": [t: "equivalent with four dots above"] # 0x2a78 + - "⩹": [t: "less than with circle inside"] # 0x2a79 + - "⩺": [t: "greater than with circle inside"] # 0x2a7a + - "⩻": [t: "less than with question mark above"] # 0x2a7b + - "⩼": [t: "greater than with question mark above"] # 0x2a7c + - "⩽": [t: "less than or slanted equal to"] # 0x2a7d + - "⩾": [t: "greater than or slanted equal to"] # 0x2a7e + - "⩿": [t: "less than or slanted equal to with dot inside"] # 0x2a7f + - "⪀": [t: "greater than or slanted equal to with dot inside"] # 0x2a80 + - "⪁": [t: "less than or slanted equal to with dot above"] # 0x2a81 + - "⪂": [t: "greater than or slanted equal to with dot above"] # 0x2a82 + - "⪃": [t: "less than or slanted equal to with dot above right"] # 0x2a83 + - "⪄": [t: "greater than or slanted equal to with dot above left"] # 0x2a84 + - "⪅": [t: "less than or approximate"] # 0x2a85 + - "⪆": [t: "greater than or approximate"] # 0x2a86 + - "⪇": [t: "less than and single line not equal to"] # 0x2a87 + - "⪈": [t: "greater than and single line not equal to"] # 0x2a88 + - "⪉": [t: "less than and not approximate"] # 0x2a89 + - "⪊": [t: "greater than and not approximate"] # 0x2a8a + - "⪋": [t: "less than above double line equal above greater than"] # 0x2a8b + - "⪌": [t: "greater than above double line equal above less than"] # 0x2a8c + - "⪍": [t: "less than above similar or equal"] # 0x2a8d + - "⪎": [t: "greater than above similar or equal"] # 0x2a8e + - "⪏": [t: "less than above similar above greater than"] # 0x2a8f + - "⪐": [t: "greater than above similar above less than"] # 0x2a90 + - "⪑": [t: "less than above greater than above double line equal"] # 0x2a91 + - "⪒": [t: "greater than above less than above double line equal"] # 0x2a92 + - "⪓": [t: "less than above slanted equal above greater than above slanted equal"] # 0x2a93 + - "⪔": [t: "greater than above slanted equal above less than above slanted equal"] # 0x2a94 + - "⪕": [t: "slanted equal to or less than"] # 0x2a95 + - "⪖": [t: "slanted equal to or greater than"] # 0x2a96 + - "⪗": [t: "slanted equal to or less than with dot inside"] # 0x2a97 + - "⪘": [t: "slanted equal to or greater than with dot inside"] # 0x2a98 + - "⪙": [t: "double line equal to or less than"] # 0x2a99 + - "⪚": [t: "double line equal to or greater than"] # 0x2a9a + - "⪛": [t: "double line slanted equal to or less than"] # 0x2a9b + - "⪜": [t: "double line slanted equal to or greater than"] # 0x2a9c + - "⪝": [t: "similar or less than"] # 0x2a9d + - "⪞": [t: "similar or greater than"] # 0x2a9e + - "⪟": [t: "similar above less than above equals sign"] # 0x2a9f + - "⪠": [t: "similar above greater than above equals sign"] # 0x2aa0 + - "⪡": [t: "double nested less than"] # 0x2aa1 + - "⪢": [t: "double nested greater than"] # 0x2aa2 + - "⪣": [t: "double nested less than with underbar"] # 0x2aa3 + - "⪤": [t: "greater than overlapping less than"] # 0x2aa4 + - "⪥": [t: "greater than beside less than"] # 0x2aa5 + - "⪦": [t: "less than closed by curve"] # 0x2aa6 + - "⪧": [t: "greater than closed by curve"] # 0x2aa7 + - "⪨": [t: "less than closed by curve above slanted equal"] # 0x2aa8 + - "⪩": [t: "greater than closed by curve above slanted equal"] # 0x2aa9 + - "⪪": [t: "smaller than"] # 0x2aaa + - "⪫": [t: "larger than"] # 0x2aab + - "⪬": [t: "smaller than or equal to"] # 0x2aac + - "⪭": [t: "larger than or equal to"] # 0x2aad + - "⪮": [t: "equals sign with bumpy above"] # 0x2aae + - "⪯": [t: "precedes above single line equals sign"] # 0x2aaf + - "⪰": [t: "succeeds above single line equals sign"] # 0x2ab0 + - "⪱": [t: "precedes above single line not equal to"] # 0x2ab1 + - "⪲": [t: "succeeds above single line not equal to"] # 0x2ab2 + - "⪳": [t: "precedes above equals sign"] # 0x2ab3 + - "⪴": [t: "succeeds above equals sign"] # 0x2ab4 + - "⪵": [t: "precedes above not equal to"] # 0x2ab5 + - "⪶": [t: "succeeds above not equal to"] # 0x2ab6 + - "⪷": [t: "precedes above almost equal to"] # 0x2ab7 + - "⪸": [t: "succeeds above almost equal to"] # 0x2ab8 + - "⪹": [t: "precedes above not almost equal to"] # 0x2ab9 + - "⪺": [t: "succeeds above not almost equal to"] # 0x2aba + - "⪻": [t: "double precedes"] # 0x2abb + - "⪼": [t: "double succeeds"] # 0x2abc + - "⪽": [t: "subset with dot"] # 0x2abd + - "⪾": [t: "superset with dot"] # 0x2abe + - "⪿": [t: "subset with plus sign below"] # 0x2abf + - "⫀": [t: "superset with plus sign below"] # 0x2ac0 + - "⫁": [t: "subset with multiplication sign below"] # 0x2ac1 + - "⫂": [t: "superset with multiplication sign below"] # 0x2ac2 + - "⫃": [t: "subset of or equal to with dot above"] # 0x2ac3 + - "⫄": [t: "superset of or equal to with dot above"] # 0x2ac4 + - "⫅": [t: "subset of above equals sign"] # 0x2ac5 + - "⫆": [t: "superset of above equals sign"] # 0x2ac6 + - "⫇": [t: "subset of above tilde operator"] # 0x2ac7 + - "⫈": [t: "superset of above tilde operator"] # 0x2ac8 + - "⫉": [t: "subset of above almost equal to"] # 0x2ac9 + - "⫊": [t: "superset of above almost equal to"] # 0x2aca + - "⫋": [t: "subset above not equal to"] # 0x2acb + - "⫌": [t: "superset of above not equal to"] # 0x2acc + - "⫍": [t: "square left open box operator"] # 0x2acd + - "⫎": [t: "square right open box operator"] # 0x2ace + - "⫏": [t: "closed subset"] # 0x2acf + - "⫐": [t: "closed superset"] # 0x2ad0 + - "⫑": [t: "closed subset or equal to"] # 0x2ad1 + - "⫒": [t: "closed superset or equal to"] # 0x2ad2 + - "⫓": [t: "subset above superset"] # 0x2ad3 + - "⫔": [t: "superset above subset"] # 0x2ad4 + - "⫕": [t: "subset above subset"] # 0x2ad5 + - "⫖": [t: "superset above superset"] # 0x2ad6 + - "⫗": [t: "superset beside subset"] # 0x2ad7 + - "⫘": [t: "superset beside and joined by dash with subset"] # 0x2ad8 + - "⫙": [t: "element of opening down"] # 0x2ad9 + - "⫚": [t: "pitchfork with tee top"] # 0x2ada + - "⫛": [t: "transversal intersection"] # 0x2adb + - "⫝̸": [t: "forking"] # 0x2adc + - "⫝": [t: "nonforking"] # 0x2add + - "⫞": [t: "short left tack"] # 0x2ade + - "⫟": [t: "short down tack"] # 0x2adf + - "⫠": [t: "short up tack"] # 0x2ae0 + - "⫡": [t: "perpendicular with s"] # 0x2ae1 + - "⫢": [t: "vertical bar triple right turnstile"] # 0x2ae2 + - "⫣": [t: "double vertical bar left turnstile"] # 0x2ae3 + - "⫤": [t: "vertical bar double left turnstile"] # 0x2ae4 + - "⫥": [t: "double vertical bar double left turnstile"] # 0x2ae5 + - "⫦": [t: "long dash from left member of double vertical"] # 0x2ae6 + - "⫧": [t: "short down tack with overbar"] # 0x2ae7 + - "⫨": [t: "short up tack with underbar"] # 0x2ae8 + - "⫩": [t: "short up tack above short down tack"] # 0x2ae9 + - "⫪": [t: "double down tack"] # 0x2aea + - "⫫": [t: "double up tack"] # 0x2aeb + - "⫬": [t: "double stroke not sign"] # 0x2aec + - "⫭": [t: "reversed double stroke not sign"] # 0x2aed + - "⫮": [t: "does not divide with reversed negation slash"] # 0x2aee + - "⫯": [t: "vertical line with circle above"] # 0x2aef + - "⫰": [t: "vertical line with circle below"] # 0x2af0 + - "⫱": [t: "down tack with circle below"] # 0x2af1 + - "⫲": [t: "parallel with horizontal stroke"] # 0x2af2 + - "⫳": [t: "parallel with tilde operator"] # 0x2af3 + - "⫴": [t: "triple vertical bar binary relation"] # 0x2af4 + - "⫵": [t: "triple vertical bar with horizontal stroke"] # 0x2af5 + - "⫶": [t: "triple colon operator"] # 0x2af6 + - "⫷": [t: "triple nested less than"] # 0x2af7 + - "⫸": [t: "triple nested greater than"] # 0x2af8 + - "⫹": [t: "double line slanted less than or equal to"] # 0x2af9 + - "⫺": [t: "double line slanted greater than or equal to"] # 0x2afa + - "⫻": [t: "triple solidus binary relation"] # 0x2afb + - "⫼": [t: "large triple vertical bar operator"] # 0x2afc + - "⫽": [t: "double solidus operator"] # 0x2afd + - "⫾": [t: "white vertical bar"] # 0x2afe + - "⫿": [t: "white vertical bar"] # 0x2aff + - "⬀": [t: "north east white arrow"] # 0x2b00 + - "⬁": [t: "north west white arrow"] # 0x2b01 + - "⬂": [t: "south east white arrow"] # 0x2b02 + - "⬃": [t: "south west white arrow"] # 0x2b03 + - "⬄": [t: "left right white arrow"] # 0x2b04 + - "⬅": [t: "left black arrow"] # 0x2b05 + - "⬆": [t: "up black arrow"] # 0x2b06 + - "⬇": [t: "down black arrow"] # 0x2b07 + - "⬈": [t: "north east black arrow"] # 0x2b08 + - "⬉": [t: "north west black arrow"] # 0x2b09 + - "⬊": [t: "south east black arrow"] # 0x2b0a + - "⬋": [t: "south west black arrow"] # 0x2b0b + - "⬌": [t: "left right black arrow"] # 0x2b0c + - "⬍": [t: "up down black arrow"] # 0x2b0d + - "⬎": [t: "right arrow with tip down"] # 0x2b0e + - "⬏": [t: "right arrow with tip up"] # 0x2b0f + - "⬐": [t: "left arrow with tip down"] # 0x2b10 + - "⬑": [t: "left arrow with tip up"] # 0x2b11 + - "⬒": [t: "square with top half black"] # 0x2b12 + - "⬓": [t: "square with bottom half black"] # 0x2b13 + - "⬔": [t: "square with upper right diagonal half black"] # 0x2b14 + - "⬕": [t: "square with lower left diagonal half black"] # 0x2b15 + - "⬖": [t: "diamond with left half black"] # 0x2b16 + - "⬗": [t: "diamond with right half black"] # 0x2b17 + - "⬘": [t: "diamond with top half black"] # 0x2b18 + - "⬙": [t: "diamond with bottom half black"] # 0x2b19 + - "⬚": [t: "box"] # 0x2b1a + - "⬛": [t: "black large square"] # 0x2b1b + - "⬜": [t: "white large square"] # 0x2b1c + - "⬝": [t: "black very small square"] # 0x2b1d + - "⬞": [t: "white very small square"] # 0x2b1e + - "⬟": [t: "black pentagon"] # 0x2b1f + - "⬠": [t: "white pentagon"] # 0x2b20 + - "⬡": [t: "white hexagon"] # 0x2b21 + - "⬢": [t: "black hexagon"] # 0x2b22 + - "⬣": [t: "horizontal black hexagon"] # 0x2b23 + - "⬤": [t: "black large circle"] # 0x2b24 + - "⬥": [t: "black medium diamond"] # 0x2b25 + - "⬦": [t: "white medium diamond"] # 0x2b26 + - "⬧": [t: "black medium lozenge"] # 0x2b27 + - "⬨": [t: "white medium lozenge"] # 0x2b28 + - "⬩": [t: "black small diamond"] # 0x2b29 + - "⬪": [t: "black small lozenge"] # 0x2b2a + - "⬫": [t: "white small lozenge"] # 0x2b2b + - "⬬": [t: "black horizontal ellipse"] # 0x2b2c + - "⬭": [t: "white horizontal ellipse"] # 0x2b2d + - "⬮": [t: "black vertical ellipse"] # 0x2b2e + - "⬯": [t: "white vertical ellipse"] # 0x2b2f + - "⬰": [t: "left arrow with small circle"] # 0x2b30 + - "⬱": [t: "three left arrows"] # 0x2b31 + - "⬲": [t: "left arrow with circled plus"] # 0x2b32 + - "⬳": [t: "long left squiggle arrow"] # 0x2b33 + - "⬴": [t: "left two headed arrow with vertical stroke"] # 0x2b34 + - "⬵": [t: "left two headed arrow with double vertical stroke"] # 0x2b35 + - "⬶": [t: "left two headed arrow from bar"] # 0x2b36 + - "⬷": [t: "left two headed triple dash arrow"] # 0x2b37 + - "⬸": [t: "left arrow with dotted stem"] # 0x2b38 + - "⬹": [t: "left arrow with tail with vertical stroke"] # 0x2b39 + - "⬺": [t: "left arrow with tail with double vertical stroke"] # 0x2b3a + - "⬻": [t: "left two headed arrow with tail"] # 0x2b3b + - "⬼": [t: "left two headed arrow with tail with vertical stroke"] # 0x2b3c + - "⬽": [t: "left two headed arrow with tail with double vertical stroke"] # 0x2b3d + - "⬾": [t: "left arrow through x"] # 0x2b3e + - "⬿": [t: "wave arrow pointing directly left"] # 0x2b3f + - "⭀": [t: "equals sign above left arrow"] # 0x2b40 + - "⭁": [t: "reverse tilde operator above left arrow"] # 0x2b41 + - "⭂": [t: "left arrow above reverse almost equal to"] # 0x2b42 + - "⭃": [t: "right arrow through greater than"] # 0x2b43 + - "⭄": [t: "right arrow through superset"] # 0x2b44 + - "⭅": [t: "left quadruple arrow"] # 0x2b45 + - "⭆": [t: "right quadruple arrow"] # 0x2b46 + - "⭇": [t: "reverse tilde operator above right arrow"] # 0x2b47 + - "⭈": [t: "right arrow above reverse almost equal to"] # 0x2b48 + - "⭉": [t: "tilde operator above left arrow"] # 0x2b49 + - "⭊": [t: "left arrow above almost equal to"] # 0x2b4a + - "⭋": [t: "left arrow above reverse tilde operator"] # 0x2b4b + - "⭌": [t: "right arrow above reverse tilde operator"] # 0x2b4c + - "⭐": [t: "white medium star"] # 0x2b50 + - "⭑": [t: "black small star"] # 0x2b51 + - "⭒": [t: "white small star"] # 0x2b52 + - "⭓": [t: "black right pointing pentagon"] # 0x2b53 + - "⭔": [t: "white right pointing pentagon"] # 0x2b54 + - "⭕": [t: "heavy large circle"] # 0x2b55 + - "⭖": [t: "heavy oval with oval inside"] # 0x2b56 + - "⭗": [t: "heavy circle with circle inside"] # 0x2b57 + - "⭘": [t: "heavy circle"] # 0x2b58 + - "⭙": [t: "heavy circled saltire"] # 0x2b59 + - "⸀": [t: "right angle substitution marker"] # 0x2e00 + - "⸁": [t: "right angle dotted substitution marker"] # 0x2e01 + - "⸂": [t: "left substitution bracket"] # 0x2e02 + - "⸃": [t: "right substitution bracket"] # 0x2e03 + - "⸄": [t: "left dotted substitution bracket"] # 0x2e04 + - "⸅": [t: "right dotted substitution bracket"] # 0x2e05 + - "⸆": [t: "raised interpolation marker"] # 0x2e06 + - "⸇": [t: "raised dotted interpolation marker"] # 0x2e07 + - "⸈": [t: "dotted transposition marker marker"] # 0x2e08 + - "⸉": [t: "left transposition bracket"] # 0x2e09 + - "⸊": [t: "right transposition bracket"] # 0x2e0a + - "⸋": [t: "raised square"] # 0x2e0b + - "⸌": [t: "left raised omission bracket"] # 0x2e0c + - "⸍": [t: "right raised omission bracket"] # 0x2e0d + - "⸎": [t: "editorial coronis"] # 0x2e0e + - "⸏": [t: "paragraphos"] # 0x2e0f + - "⸐": [t: "forked paragraphos"] # 0x2e10 + - "⸑": [t: "reversed forked paragraphos"] # 0x2e11 + - "⸒": [t: "hypodiastole"] # 0x2e12 + - "⸓": [t: "dotted obelos"] # 0x2e13 + - "⸔": [t: "down ancora"] # 0x2e14 + - "⸕": [t: "up ancora"] # 0x2e15 + - "⸖": [t: "dotted right pointing angle"] # 0x2e16 + - "⸗": [t: "double oblique hyphen"] # 0x2e17 + - "⸘": [t: "inverted interrobang"] # 0x2e18 + - "⸙": [t: "palm branch"] # 0x2e19 + - "⸚": [t: "hyphen with diaeresis"] # 0x2e1a + - "⸛": [t: "tilde with ring above"] # 0x2e1b + - "⸜": [t: "left low paraphrase bracket"] # 0x2e1c + - "⸝": [t: "right low paraphrase bracket"] # 0x2e1d + - "⸞": [t: "tilde with dot above"] # 0x2e1e + - "⸟": [t: "tilde with dot below"] # 0x2e1f + - "⸠": [t: "left vertical bar with quill"] # 0x2e20 + - "⸡": [t: "right vertical bar with quill"] # 0x2e21 + - "⸢": [t: "top left half bracket"] # 0x2e22 + - "⸣": [t: "top right half bracket"] # 0x2e23 + - "⸤": [t: "bottom left half bracket"] # 0x2e24 + - "⸥": [t: "bottom right half bracket"] # 0x2e25 + - "⸦": [t: "left sideways u bracket"] # 0x2e26 + - "⸧": [t: "right sideways u bracket"] # 0x2e27 + - "⸨": [t: "left double parentheses"] # 0x2e28 + - "⸩": [t: "right double parentheses"] # 0x2e29 + - "⸪": [t: "two dots over one dot punctuation"] # 0x2e2a + - "⸫": [t: "one dot over two dots punctuation"] # 0x2e2b + - "⸬": [t: "squared four dot punctuation"] # 0x2e2c + - "⸭": [t: "five dot mark"] # 0x2e2d + - "⸮": [t: "reversed question mark"] # 0x2e2e + - "ⸯ": [t: "vertical tilde"] # 0x2e2f + - "⸰": [t: "ring point"] # 0x2e30 + - "⸱": [t: "word separator middle dot"] # 0x2e31 + - "⸲": [t: "turned comma"] # 0x2e32 + - "⸳": [t: "raised dot"] # 0x2e33 + - "⸴": [t: "raised comma"] # 0x2e34 + - "⸵": [t: "turned semicolon"] # 0x2e35 + - "⸶": [t: "dagger with left guard"] # 0x2e36 + - "⸷": [t: "dagger with right guard"] # 0x2e37 + - "⸸": [t: "turned dagger"] # 0x2e38 + - "⸹": [t: "top half section sign"] # 0x2e39 + - "⸺": [t: "two em dash"] # 0x2e3a + - "⸻": [t: "three em dash"] # 0x2e3b + - "〃": [t: "ditto mark"] # 0x3003 + - "〈": [t: "left angle bracket"] # 0x3008 + - "〉": [t: "right angle bracket"] # 0x3009 + - "《": [t: "left double angle bracket"] # 0x300a + - "》": [t: "right double angle bracket"] # 0x300b + - "「": [t: "left corner bracket"] # 0x300c + - "」": [t: "right corner bracket"] # 0x300d + - "『": [t: "left white corner bracket"] # 0x300e + - "』": [t: "right white corner bracket"] # 0x300f + - "【": [t: "left black lenticular bracket"] # 0x3010 + - "】": [t: "right black lenticular bracket"] # 0x3011 + - "〔": [t: "left tortoise shell bracket"] # 0x3014 + - "〕": [t: "right tortoise shell bracket"] # 0x3015 + - "〖": [t: "left white lenticular bracket"] # 0x3016 + - "〗": [t: "right white lenticular bracket"] # 0x3017 + - "〘": [t: "left white tortoise shell bracket"] # 0x3018 + - "〙": [t: "right white tortoise shell bracket"] # 0x3019 + - "〚": [t: "left white square bracket"] # 0x301a + - "〛": [t: "right white square bracket"] # 0x301b + - "〜": [t: "wave dash"] # 0x301c + - "〰": [t: "wavy dash"] # 0x3030 + - "㉈": [t: "circled number ten on black square"] # 0x3248 + - "㉉": [t: "circled number twenty on black square"] # 0x3249 + - "㉊": [t: "circled number thirty on black square"] # 0x324a + - "㉋": [t: "circled number forty on blacks square"] # 0x324b + - "㉌": [t: "circled number fifty on black square"] # 0x324c + - "㉍": [t: "circled number sixty on black square"] # 0x324d + - "㉎": [t: "circled number seventy on black square"] # 0x324e + - "㉏": [t: "circled number eighty on black square"] # 0x324f + - "㉑": [t: "circled number twenty one"] # 0x3251 + - "㉒": [t: "circled number twenty two"] # 0x3252 + - "㉓": [t: "circled number twenty three"] # 0x3253 + - "㉔": [t: "circled number twenty four"] # 0x3254 + - "㉕": [t: "circled number twenty five"] # 0x3255 + - "㉖": [t: "circled number twenty six"] # 0x3256 + - "㉗": [t: "circled number twenty seven"] # 0x3257 + - "㉘": [t: "circled number twenty eight"] # 0x3258 + - "㉙": [t: "circled number twenty nine"] # 0x3259 + - "㉚": [t: "circled number thirty"] # 0x325a + - "㉛": [t: "circled number thirty one"] # 0x325b + - "㉜": [t: "circled number thirty two"] # 0x325c + - "㉝": [t: "circled number thirty three"] # 0x325d + - "㉞": [t: "circled number thirty four"] # 0x325e + - "㉟": [t: "circled number thirty five"] # 0x325f + - "㊱": [t: "circled number thirty six"] # 0x32b1 + - "㊲": [t: "circled number thirty seven"] # 0x32b2 (GPT-5.4 translation) + - "㊳": [t: "circled number thirty eight"] # 0x32b3 (GPT-5.4 translation) + - "㊴": [t: "circled number thirty nine"] # 0x32b4 (GPT-5.4 translation) + - "㊵": [t: "circled number forty"] # 0x32b5 (GPT-5.4 translation) + - "㊶": [t: "circled number forty one"] # 0x32b6 (GPT-5.4 translation) + - "㊷": [t: "circled number forty two"] # 0x32b7 (GPT-5.4 translation) + - "㊸": [t: "circled number forty three"] # 0x32b8 (GPT-5.4 translation) + - "㊹": [t: "circled number forty four"] # 0x32b9 (GPT-5.4 translation) + - "㊺": [t: "circled number forty five"] # 0x32ba (GPT-5.4 translation) + - "㊻": [t: "circled number forty six"] # 0x32bb (GPT-5.4 translation) + - "㊼": [t: "circled number forty seven"] # 0x32bc (GPT-5.4 translation) + - "㊽": [t: "circled number forty eight"] # 0x32bd (GPT-5.4 translation) + - "㊾": [t: "circled number forty nine"] # 0x32be (GPT-5.4 translation) + - "㊿": [t: "circled number fifty"] # 0x32bf (GPT-5.4 translation) + - "㋌": [t: "mercury"] # 0x32cc + - "㋍": [t: "ergs"] # 0x32cd + - "㋎": [t: "electron volts"] # 0x32ce + - "㋏": [t: "limited liability sign"] # 0x32cf + - "㍱": [t: "hectopascals"] # 0x3371 + - "㍲": [t: "daltons"] # 0x3372 + - "㍳": [t: "astronomical units"] # 0x3373 + - "㍴": [t: "bars"] # 0x3374 + - "㍵": [t: "o v"] # 0x3375 + - "㍶": [t: "parsecs"] # 0x3376 + - "㍷": [t: "decimeters"] # 0x3377 + - "㍸": [t: "decimeters squared"] # 0x3378 + - "㍹": [t: "decimeters cubed"] # 0x3379 + - "㍺": [t: "instrumental units"] # 0x337a + - "㎀": [t: "picoamps"] # 0x3380 + - "㎁": [t: "nanoamps"] # 0x3381 + - "㎂": [t: "microamps"] # 0x3382 + - "㎃": [t: "milliamps"] # 0x3383 + - "㎄": [t: "kiloamps"] # 0x3384 + - "㎅": [t: "kilobytes"] # 0x3385 + - "㎆": [t: "megabytes"] # 0x3386 + - "㎇": [t: "gigabytes"] # 0x3387 + - "㎈": [t: "calories"] # 0x3388 + - "㎉": [t: "kilocalories"] # 0x3389 + - "㎊": [t: "picofarads"] # 0x338a + - "㎋": [t: "nanofarads"] # 0x338b + - "㎌": [t: "microfarads"] # 0x338c + - "㎍": [t: "micrograms"] # 0x338d + - "㎎": [t: "milligrams"] # 0x338e + - "㎏": [t: "kilograms"] # 0x338f + - "㎐": [t: "hertz"] # 0x3390 + - "㎑": [t: "kilohertz"] # 0x3391 + - "㎒": [t: "megahertz"] # 0x3392 + - "㎓": [t: "gigahertz"] # 0x3393 + - "㎔": [t: "terahertz"] # 0x3394 + - "㎕": [t: "microliters"] # 0x3395 + - "㎖": [t: "milliliters"] # 0x3396 + - "㎗": [t: "deciliters"] # 0x3397 + - "㎘": [t: "kiloliters"] # 0x3398 + - "㎙": [t: "femtometers"] # 0x3399 + - "㎚": [t: "nanometers"] # 0x339a + - "㎛": [t: "micrometers"] # 0x339b + - "㎜": [t: "millimeters"] # 0x339c + - "㎝": [t: "centimeters"] # 0x339d + - "㎞": [t: "kilometers"] # 0x339e + - "㎟": [t: "millimeters squared"] # 0x339f + - "㎠": [t: "centimeters squared"] # 0x33a0 + - "㎡": [t: "meters squared"] # 0x33a1 + - "㎢": [t: "kilometers squared"] # 0x33a2 + - "㎣": [t: "millimeters cubed"] # 0x33a3 + - "㎤": [t: "centimeters cubed"] # 0x33a4 + - "㎥": [t: "meters cubed"] # 0x33a5 + - "㎦": [t: "kilometers cubed"] # 0x33a6 + - "㎧": [t: "meters per second"] # 0x33a7 + - "㎨": [t: "meters per second squared"] # 0x33a8 + - "㎩": [t: "pascals"] # 0x33a9 + - "㎪": [t: "kilopascals"] # 0x33aa + - "㎫": [t: "megapascals"] # 0x33ab + - "㎬": [t: "gigapascals"] # 0x33ac + - "㎭": [t: "rads"] # 0x33ad + - "㎮": [t: "rads per second"] # 0x33ae + - "㎯": [t: "rads per second squared"] # 0x33af + - "㎰": [t: "picoseconds"] # 0x33b0 + - "㎱": [t: "nanoseconds"] # 0x33b1 + - "㎲": [t: "microseconds"] # 0x33b2 + - "㎳": [t: "milliseconds"] # 0x33b3 + - "㎴": [t: "picovolts"] # 0x33b4 + - "㎵": [t: "nanovolts"] # 0x33b5 + - "㎶": [t: "microvolts"] # 0x33b6 + - "㎷": [t: "millivolts"] # 0x33b7 + - "㎸": [t: "kilovolts"] # 0x33b8 + - "㎹": [t: "megavolts"] # 0x33b9 + - "㎺": [t: "picowatts"] # 0x33ba + - "㎻": [t: "nanowatts"] # 0x33bb + - "㎼": [t: "microwatts"] # 0x33bc + - "㎽": [t: "milliwatts"] # 0x33bd + - "㎾": [t: "kilowatts"] # 0x33be + - "㎿": [t: "megawatts"] # 0x33bf + - "㏀": [t: "kilo-ohms"] # 0x33c0 + - "㏁": [t: "megaohms"] # 0x33c1 + - "㏂": [t: "attometers"] # 0x33c2 + - "㏃": [t: "becquerels"] # 0x33c3 + - "㏄": [t: "cubic centimeters"] # 0x33c4 + - "㏅": [t: "candelas"] # 0x33c5 + - "㏆": [t: "coulombs per kilogram"] # 0x33c6 + - "㏇": [t: "cap C, o, period"] # 0x33c7 (I have no idea what this is) + - "㏈": [t: "decibels"] # 0x33c8 + - "㏉": [t: "grays"] # 0x33c9 + - "㏊": [t: "hectares"] # 0x33ca + - "㏋": [t: "horsepower"] # 0x33cb + - "㏌": [t: "inches"] # 0x33cc + - "㏍": [t: "kilokelvins"] # 0x33cd + - "㏎": [t: "kilometers"] # 0x33ce + - "㏏": [t: "knots"] # 0x33cf + - "㏐": [t: "lumens"] # 0x33d0 + - "㏑": [t: "natural log"] # 0x33d1 + - "㏒": [t: "logarithm"] # 0x33d2 + - "㏓": [t: "lux"] # 0x33d3 + - "㏔": [t: "millibarns"] # 0x33d4 + - "㏕": [t: "mills"] # 0x33d5 + - "㏖": [t: "moles"] # 0x33d6 + - "㏗": [t: "p h"] # 0x33d7 + - "㏘": [t: "picometers"] # 0x33d8 + - "㏙": [t: "parts per million"] # 0x33d9 + - "㏚": [t: "petaroentgens"] # 0x33da + - "㏛": [t: "steradians"] # 0x33db + - "㏜": [t: "sieverts"] # 0x33dc + - "㏝": [t: "webers"] # 0x33dd + - "㏞": [t: "volts per meter"] # 0x33de + - "㏟": [t: "amps per meter"] # 0x33df + - "㏿": [t: "gallons"] # 0x33ff + - "": [t: "equals with hat below"] # 0xe900 + - "": [t: "equals with plus above"] # 0xe901 + - "": [t: "equals with plus below"] # 0xe902 + - "": [t: "tilde with plus above"] # 0xe903 + - "": [t: "tilde with plus below"] # 0xe904 + - "": [t: "equal double over greater than"] # 0xe908 + - "": [t: "equal double over less than"] # 0xe909 + - "": [t: "contains or equal to"] # 0xe90a + - "": [t: "superset of or equal to"] # 0xe90b + - "": [t: "subset of or equal to"] # 0xe90c + - "": [t: "equal over less than"] # 0xe90d + - "": [t: "element of or equal to"] # 0xe912 + - "": [t: "equal to or greater than"] # 0xe913 + - "": [t: "approximate superset of"] # 0xe914 + - "": [t: "approximate subset of"] # 0xe915 + - "": [t: "superset of with dot includes as sub relation"] # 0xe916 + - "": [t: "subset of with dot is included in as sub relation"] # 0xe917 + - "": [t: "equal with dot below"] # 0xe918 + - "": [t: "left dot over minus over right dot"] # 0xe919 + - "": [t: "right dot over minus over left dot"] # 0xe91a + - "": [t: "almost equal to minus"] # 0xe91f + - "": [t: "double square cup"] # 0xe920 + - "": [t: "double square cap"] # 0xe921 + - "": [t: "less than equal to or greater than"] # 0xe922 + - "": [t: "tilde with dot"] # 0xe924 + - "": [t: "tilde with two dots"] # 0xe925 + - "": [t: "less than greater than or equal to"] # 0xe926 + - "": [t: "greater than less than or equal to"] # 0xe927 + - "": [t: "equivalent to or less than"] # 0xe928 + - "": [t: "equivalent to or greater than"] # 0xe929 + - "": [t: "left open box operator"] # 0xe92a + - "": [t: "right open box operator"] # 0xe92b + - "": [t: "identical to with dot"] # 0xe92c + - "": [t: "greater than equal to or less than"] # 0xe92d + - "": [t: "bar operator"] # 0xe92e + - "": [t: "double bar operator"] # 0xe92f + - "": [t: "triple bar operator"] # 0xe930 + - "": [t: "less than or approximately equal to"] # 0xe932 + - "": [t: "greater than or approximately equal to"] # 0xe933 + - "": [t: "nested less than"] # 0xe936 + - "": [t: "nested greater than"] # 0xe937 + - "": [t: "precedes or equivalent to"] # 0xe93a + - "": [t: "succeeds or equivalent to"] # 0xe93b + - "": [t: "precedes over equal"] # 0xe940 + - "": [t: "succeeds over equal"] # 0xe941 + - "": [t: "less equal slanted greater"] # 0xe942 + - "": [t: "greater equal slanted less"] # 0xe943 + - "": [t: "satisfied by"] # 0xe948 + - "": [t: "lazy s"] # 0xe949 + - "": [t: "not assertion"] # 0xe94a + - "": [t: "double equal"] # 0xe94b + - "": [t: "triple equal"] # 0xe94c + - "": [t: "rule delayed"] # 0xe94d + - "": [t: "alias delimiter"] # 0xe94e + - "": [t: "normal subgroup of with bar"] # 0xe950 + - "": [t: "contains as normal subgroup with bar"] # 0xe951 + - "": [t: "round implies"] # 0xe954 + - "": [t: "smile under bar"] # 0xe955 + - "": [t: "frown over bar"] # 0xe956 + - "": [t: "superset of or almost equal to"] # 0xe957 + - "": [t: "subset of or almost equal to"] # 0xe958 + - "": [t: "greater than almost equal to or less than"] # 0xe959 + - "": [t: "less than almost equal or greater than"] # 0xe95a + - "": [t: "double logical or"] # 0xe95c + - "": [t: "double logical and"] # 0xe95d + - "": [t: "logical or with double bar below"] # 0xe95e + - "": [t: "logical or with bar below"] # 0xe95f + - "": [t: "almost equal over equal"] # 0xe962 + - "": [t: "left pointing triangle with bisecting bar"] # 0xe964 + - "": [t: "right pointing triangle with bisecting bar"] # 0xe965 + - "": [t: "equals with dotted top line"] # 0xe966 + - "": [t: "precedes with colon"] # 0xe967 + - "": [t: "succeeds with colon"] # 0xe968 + - "": [t: "smaller than or equal slanted"] # 0xe969 + - "": [t: "larger than or equal slanted"] # 0xe96a + - "": [t: "nested very much less than"] # 0xe96b + - "": [t: "nested very much greater than"] # 0xe96c + - "": [t: "difference between variant"] # 0xe96d + - "": [t: "less than greater than overlay"] # 0xe96e + - "": [t: "logical or logical and overlay"] # 0xe96f + - "": [t: "superset over superset"] # 0xe970 + - "": [t: "subset over subset"] # 0xe971 + - "": [t: "superset over subset"] # 0xe972 + - "": [t: "subset over superset"] # 0xe973 + - "": [t: "triple vertical bar"] # 0xe979 + - "": [t: "paired quadruple vertical dots"] # 0xe97a + - "": [t: "perpendicular over bar"] # 0xe97b + - "": [t: "left turnstile double vertical bar"] # 0xe97c + - "": [t: "double left turnstile double vertical bar"] # 0xe97d + - "": [t: "perpendicular over inverted perpendicular"] # 0xe97e + - "": [t: "double left turnstile vertical bar"] # 0xe97f + - "": [t: "spherical angle opening up"] # 0xe980 + - "": [t: "double slash"] # 0xe981 + - "": [t: "right angle with corner"] # 0xe982 + - "": [t: "circled vertical bar"] # 0xe984 + - "": [t: "circled division sign"] # 0xe985 + - "": [t: "dashed solidus"] # 0xe986 + - "": [t: "dashed backslash"] # 0xe987 + - "": [t: "dashed mid line"] # 0xe988 + - "": [t: "dashed vertical bar"] # 0xe989 + - "": [t: "perpendicular with s"] # 0xe98a + - "": [t: "angle with s"] # 0xe98b + - "": [t: "spherical angle opening left"] # 0xe98c + - "": [t: "angle opening left"] # 0xe98d + - "": [t: "vertical bar with double hook"] # 0xe98e + - "": [t: "medium dot operator free radical"] # 0xe98f + - "": [t: "white up pointing triangle above bar"] # 0xe990 + - "": [t: "identical and parallel to"] # 0xe991 + - "": [t: "smash product"] # 0xe992 + - "": [t: "triple bar operator with horizontal bar"] # 0xe993 + - "": [t: "identical to with double slash"] # 0xe994 + - "": [t: "triple crossed bars"] # 0xe995 + - "": [t: "vertical bar over circle"] # 0xe996 + - "": [t: "vertical proportional to"] # 0xe997 + - "": [t: "black last quarter moon"] # 0xe998 + - "": [t: "black first quarter moon"] # 0xe999 + - "": [t: "negative sine wave"] # 0xe9a0 + - "": [t: "parenthesized dot"] # 0xe9a1 + - "": [t: "parens"] # 0xe9a2 + - "": [t: "white smile"] # 0xe9a3 + - "": [t: "white frown"] # 0xe9a4 + - "": [t: "hexagon"] # 0xe9a5 + - "": [t: "equivalent to over plus"] # 0xe9a6 + - "": [t: "plus over equivalent to"] # 0xe9a7 + - "": [t: "intersection serifs"] # 0xe9b0 + - "": [t: "union serifs"] # 0xe9b1 + - "": [t: "square intersection serifs"] # 0xe9b2 + - "": [t: "square union serifs"] # 0xe9b3 + - "": [t: "precedes equivalent to or succeeds"] # 0xe9e0 + - "": [t: "succeeds equivalent to or precedes"] # 0xe9e1 + - "": [t: "precedes almost equal to or succeeds"] # 0xe9e2 + - "": [t: "succeeds almost equal to or precedes"] # 0xe9e3 + - "": [t: "less than equivalent to or greater than"] # 0xe9f0 + - "": [t: "greater than equivalent to or less than"] # 0xe9f1 + - "": [t: "not vert much less than"] # 0xea00 + - "": [t: "not vert much greater than"] # 0xea01 + - "": [t: "not much less than variant"] # 0xea02 + - "": [t: "not much greater than variant"] # 0xea03 + - "": [t: "less vert not double equals"] # 0xea04 + - "": [t: "gt vert not double equals"] # 0xea05 + - "": [t: "not less than or equal to"] # 0xea06 + - "": [t: "not greater than or equal to"] # 0xea07 + - "": [t: "neither equal to nor less than"] # 0xea09 + - "": [t: "does not contain or equal to"] # 0xea0a + - "": [t: "neither superset of nor equal to"] # 0xea0b + - "": [t: "neither subset of nor equal to"] # 0xea0c + - "": [t: "reverse solidus subset"] # 0xea0d + - "": [t: "neither equal to nor greater than"] # 0xea0e + - "": [t: "not minus tilde operator"] # 0xea0f + - "": [t: "neither equal to nor less than"] # 0xea10 + - "": [t: "not tilde operator"] # 0xea11 + - "": [t: "not element of or equal to"] # 0xea12 + - "": [t: "neither equal to nor greater than"] # 0xea13 + - "": [t: "not almost equal"] # 0xea14 + - "": [t: "not succeeds similar"] # 0xea15 + - "": [t: "less than or slanted equal to with slash"] # 0xea16 + - "": [t: "greater than or slanted equal to with slash"] # 0xea17 + - "": [t: "superset solidus"] # 0xea1a + - "": [t: "does not contain"] # 0xea1b + - "": [t: "not less than or equal to"] # 0xea1d + - "": [t: "not greater than or equal to"] # 0xea1e + - "": [t: "not almost equal to minus"] # 0xea1f + - "": [t: "negated set membership dot above"] # 0xea22 + - "": [t: "not vert angle"] # 0xea2c + - "": [t: "not parallel slanted"] # 0xea2d + - "": [t: "not bar operator"] # 0xea2e + - "": [t: "not double bar operator"] # 0xea2f + - "": [t: "not triple bar operator"] # 0xea30 + - "": [t: "less than but not approximately equal to"] # 0xea32 + - "": [t: "greater than but not approximately equal to"] # 0xea33 + - "": [t: "less than or not equal to"] # 0xea34 + - "": [t: "greater than or not equal to"] # 0xea35 + - "": [t: "not nested less than"] # 0xea36 + - "": [t: "not nested greater than"] # 0xea37 + - "": [t: "not much less than"] # 0xea38 + - "": [t: "not much greater than"] # 0xea39 + - "": [t: "precedes but not equivalent to"] # 0xea3a + - "": [t: "succeeds but not equivalent to"] # 0xea3b + - "": [t: "precedes but not equal to"] # 0xea3c + - "": [t: "succeeds but not equal to"] # 0xea3d + - "": [t: "does not equal or precede"] # 0xea3e + - "": [t: "does not equal or succeed"] # 0xea3f + - "": [t: "precedes but not equal to"] # 0xea40 + - "": [t: "succeeds but not equal to"] # 0xea41 + - "": [t: "not subset of nor equal to"] # 0xea42 + - "": [t: "not superset of nor equal to"] # 0xea43 + - "": [t: "subset of or not equal to"] # 0xea44 + - "": [t: "superset of or not equal to"] # 0xea45 + - "": [t: "not subset of nor equal to"] # 0xea46 + - "": [t: "not superset of nor equal to"] # 0xea47 + - "": [t: "not triple less than"] # 0xea48 + - "": [t: "not triple greater than"] # 0xea49 + - "": [t: "not precedes equals"] # 0xea4c + - "": [t: "not succeeds equals"] # 0xea4d + - "": [t: "not normal subgroup of with bar"] # 0xea50 + - "": [t: "does not contain as normal subgroup with bar"] # 0xea51 + - "": [t: "not difference between"] # 0xea52 + - "": [t: "not geometrically equivalent to"] # 0xea53 + - "": [t: "not vert similar"] # 0xea54 + - "": [t: "not equal or similar"] # 0xea55 + - "": [t: "not vert approximate"] # 0xea56 + - "": [t: "not approximately identical to"] # 0xea57 + - "": [t: "not bumpy equals"] # 0xea58 + - "": [t: "not bumpy single equals"] # 0xea59 + - "": [t: "not equal dot"] # 0xea5a + - "": [t: "reverse not equivalent"] # 0xea5b + - "": [t: "not square subset"] # 0xea60 + - "": [t: "not square superset"] # 0xea61 + - "": [t: "not almost equal over equal"] # 0xea62 + - "": [t: "not strictly equivalent to"] # 0xea63 + - "": [t: "not congruent dot"] # 0xea64 + - "": [t: "reverse not equal"] # 0xea65 + - "": [t: "not vert left triangle equals"] # 0xea70 + - "": [t: "not vert right triangle equals"] # 0xea71 + - "": [t: "not partial"] # 0xea80 + - "": [t: "arrow embellishment extender"] # 0xeb00 + - "": [t: "arrow right over arrow left"] # 0xeb01 + - "": [t: "arrow right over arrow left"] # 0xeb02 + - "": [t: "harpoon right over harpoon left"] # 0xeb03 + - "": [t: "harpoon right over harpoon left"] # 0xeb04 + - "": [t: "double arrow northeast southwest"] # 0xeb05 + - "": [t: "double arrow northwest southeast"] # 0xeb06 + - "": [t: "horizontal harpoon extender"] # 0xeb07 + - "": [t: "anticlockwise arc left arrow"] # 0xeb08 + - "": [t: "anticlockwise arc right arrow"] # 0xeb09 + - "": [t: "large right arrow accent"] # 0xeb0b + - "": [t: "large left arrow accent"] # 0xeb0c + - "": [t: "left arrowhead"] # 0xeb0d + - "": [t: "right arrowhead"] # 0xeb0e + - "": [t: "large left right arrow with stroke"] # 0xeb0f + - "": [t: "horizontal double arrow extender"] # 0xeb10 + - "": [t: "large left right double arrow with stroke"] # 0xeb11 + - "": [t: "down arrow left of up arrow"] # 0xeb12 + - "": [t: "left arrow with corner down"] # 0xeb13 + - "": [t: "right arrow with corner up"] # 0xeb14 + - "": [t: "left arrow with corner up"] # 0xeb15 + - "": [t: "anticlockwise top semicircle arrow with plus"] # 0xeb16 + - "": [t: "clockwise top semicircle arrow with minus"] # 0xeb17 + - "": [t: "right arrow with tail with stroke"] # 0xeb18 + - "": [t: "right harpoon down"] # 0xeb19 + - "": [t: "left harpoon down"] # 0xeb1a + - "": [t: "left right harpoon down"] # 0xeb1b + - "": [t: "left right harpoon up"] # 0xeb1c + - "": [t: "up down harpoon left"] # 0xeb1d + - "": [t: "up down harpoon right"] # 0xeb1e + - "": [t: "up arrow to the right of down arrow"] # 0xeb1f + - "": [t: "left harpoon to bar with barb up"] # 0xeb20 + - "": [t: "right harpoon to bar with barb up"] # 0xeb21 + - "": [t: "left harpoon to bar with barb down"] # 0xeb22 + - "": [t: "right harpoon to bar with barb down"] # 0xeb23 + - "": [t: "left harpoon from bar with barb up"] # 0xeb24 + - "": [t: "right harpoon from bar with barb up"] # 0xeb25 + - "": [t: "left harpoon from bar with barb down"] # 0xeb26 + - "": [t: "right harpoon from bar with barb down"] # 0xeb27 + - "": [t: "up harpoon to bar with barb left"] # 0xeb28 + - "": [t: "down harpoon to bar with barb left"] # 0xeb29 + - "": [t: "up harpoon to bar with barb right"] # 0xeb2a + - "": [t: "down harpoon to bar with barb right"] # 0xeb2b + - "": [t: "up harpoon from bar with barb left"] # 0xeb2c + - "": [t: "down harpoon from bar with barb left"] # 0xeb2d + - "": [t: "up harpoon from bar with barb right"] # 0xeb2e + - "": [t: "down harpoon from bar with barb right"] # 0xeb2f + - "": [t: "up arrow to bar"] # 0xeb30 + - "": [t: "down arrow to bar"] # 0xeb31 + - "": [t: "up harpoon to the left of down harpoon"] # 0xeb32 + - "": [t: "up harpoon to the right of down harpoon"] # 0xeb33 + - "": [t: "up arrowhead"] # 0xeb34 + - "": [t: "down arrowhead"] # 0xeb35 + - "": [t: "double harpoon with left barb down right barb up"] # 0xeb36 + - "": [t: "double harpoon with left barb up right barb down"] # 0xeb37 + - "": [t: "left arrow over bar"] # 0xeb38 + - "": [t: "right arrow over bar"] # 0xeb39 + - "": [t: "left arrow under bar"] # 0xeb3a + - "": [t: "right arrow under bar"] # 0xeb3b + - "": [t: "left right triple arrow"] # 0xeb3c + - "": [t: "double arrow northeast southeast"] # 0xeb3f + - "": [t: "anticlockwise left semicircle arrow"] # 0xeb40 + - "": [t: "clockwise left semicircle arrow"] # 0xeb41 + - "": [t: "left open circle left right arrow"] # 0xeb42 + - "": [t: "right arrow over tilde"] # 0xeb44 + - "": [t: "left arrow over tilde"] # 0xeb45 + - "": [t: "left harpoon over bar"] # 0xeb48 + - "": [t: "right harpoon over bar"] # 0xeb49 + - "": [t: "left harpoon under bar"] # 0xeb4a + - "": [t: "right harpoon under bar"] # 0xeb4b + - "": [t: "squat black left arrow"] # 0xeb4c + - "": [t: "clockwise right semicircle arrow"] # 0xeb50 + - "": [t: "anticlockwise right semicircle arrow"] # 0xeb51 + - "": [t: "left open circle left right harpoon"] # 0xeb52 + - "": [t: "up arrow left of vertical bar"] # 0xeb58 + - "": [t: "down arrow left of vertical bar"] # 0xeb59 + - "": [t: "up arrow right of vertical bar"] # 0xeb5a + - "": [t: "down arrow right of vertical bar"] # 0xeb5b + - "": [t: "right arrow with extended down hook"] # 0xeb5c + - "": [t: "left arrow with extended hook"] # 0xeb5d + - "": [t: "left arrow with extended down hook"] # 0xeb5e + - "": [t: "right arrow with extended hook"] # 0xeb5f + - "": [t: "not right arrow wavy"] # 0xeb60 + - "": [t: "not right arrow curved"] # 0xeb61 + - "": [t: "up harpoon left of vertical bar"] # 0xeb68 + - "": [t: "down harpoon left of vertical bar"] # 0xeb69 + - "": [t: "up harpoon right of vertical bar"] # 0xeb6a + - "": [t: "down harpoon right of vertical bar"] # 0xeb6b + - "": [t: "vertical double arrow extender"] # 0xeb6c + - "": [t: "vertical harpoon with barb left extender"] # 0xeb6d + - "": [t: "vertical harpoon with barb right extender"] # 0xeb6e + - "": [t: "right harpoon over left harpoon right"] # 0xeb6f + - "": [t: "right harpoon over left harpoon left"] # 0xeb70 + - "": [t: "left harpoon over right harpoon right"] # 0xeb71 + - "": [t: "left harpoon over right harpoon left"] # 0xeb72 + - "": [t: "left arrow from bar arrowhead"] # 0xeb73 + - "": [t: "left right arrow from bar extender"] # 0xeb74 + - "": [t: "left arrow from bar tail"] # 0xeb75 + - "": [t: "right arrow from bar tail"] # 0xeb76 + - "": [t: "right arrow from bar arrowhead"] # 0xeb77 + - "": [t: "up harpoon from bar with barb left arrowhead"] # 0xeb78 + - "": [t: "right arrow over left arrow right"] # 0xeb79 + - "": [t: "right arrow over left arrow left"] # 0xeb7a + - "": [t: "left arrow over right arrow right"] # 0xeb7b + - "": [t: "left arrow over right arrow left"] # 0xeb7c + - "": [t: "up arrow from bar arrowhead"] # 0xeb7d + - "": [t: "up arrow from bar tail"] # 0xeb7e + - "": [t: "down arrow from bar tail"] # 0xeb7f + - "": [t: "down arrow from bar arrowhead"] # 0xeb80 + - "": [t: "down harpoon from bar with barb right arrowhead"] # 0xeb81 + - "": [t: "up harpoon to the left of down harpoon bottom"] # 0xeb82 + - "": [t: "up harpoon to the left of down harpoon extender"] # 0xeb83 + - "": [t: "down harpoon to the left of up harpoon top"] # 0xeb84 + - "": [t: "up harpoon to the left of down harpoon top"] # 0xeb85 + - "": [t: "down harpoon to the left of the up harpoon extender"] # 0xeb86 + - "": [t: "down harpoon to the left of the up harpoon bottom"] # 0xeb87 + - "": [t: "up arrow left of down arrow bottom"] # 0xeb88 + - "": [t: "down arrow left of up arrow top"] # 0xeb89 + - "": [t: "up arrow left of down arrow top"] # 0xeb8a + - "": [t: "down arrow left of up arrow bottom"] # 0xeb8b + - "": [t: "left right arrows extender"] # 0xeb8c + - "": [t: "north east arrow extender"] # 0xeb8d + - "": [t: "north west arrow extender"] # 0xeb8e + - "": [t: "down pointing brace left"] # 0xec00 + - "": [t: "down pointing brace mid"] # 0xec01 + - "": [t: "down pointing brace right"] # 0xec02 + - "": [t: "horizontal brace extender"] # 0xec03 + - "": [t: "up pointing brace left"] # 0xec04 + - "": [t: "up pointing brace mid"] # 0xec05 + - "": [t: "up-pointing brace right"] # 0xec06 + - "": [t: "left vertical bar"] # 0xec07 + - "": [t: "right vertical bar"] # 0xec08 + - "": [t: "left double vertical bar"] # 0xec09 + - "": [t: "right double vertical bar"] # 0xec0a + - "": [t: "horizontal bracket extender"] # 0xec0b + - "": [t: "under square bracket"] # 0xec0c + - "⎵": [t: "under square bracket"] # 0x23b5 + - "": [t: "over square bracket"] # 0xec0d + - "⎴": [t: "over square bracket"] # 0x23b4 + - "": [t: "under bracket left"] # 0xec0e + - "": [t: "under bracket right"] # 0xec0f + - "": [t: "over bracket left"] # 0xec10 + - "": [t: "over bracket right"] # 0xec11 + - "": [t: "left parens 1"] # 0xec12 + - "": [t: "left parens 2"] # 0xec13 + - "": [t: "left parens 3"] # 0xec14 + - "": [t: "left parens 4"] # 0xec15 + - "": [t: "right parens 1"] # 0xec16 + - "": [t: "right parens 2"] # 0xec17 + - "": [t: "right parens 3"] # 0xec18 + - "": [t: "right parens 4"] # 0xec19 + - "": [t: "radical 1"] # 0xec1a + - "": [t: "radical 2"] # 0xec1b + - "": [t: "radical 3"] # 0xec1c + - "": [t: "radical 4"] # 0xec1d + - "": [t: "radical 5"] # 0xec1e + - "": [t: "radical bottom"] # 0xec1f + - "": [t: "radical vertical extender"] # 0xec20 + - "": [t: "radical top"] # 0xec21 + - "": [t: "left white bracket top"] # 0xec22 + - "": [t: "left white bracket extender"] # 0xec23 + - "": [t: "left white bracket bottom"] # 0xec24 + - "": [t: "right white bracket top"] # 0xec25 + - "": [t: "right white bracket extender"] # 0xec26 + - "": [t: "right white bracket bottom"] # 0xec27 + - "": [t: "left white curly bracket"] # 0xec30 + - "": [t: "right white curly bracket"] # 0xec31 + - "": [t: "long division sign"] # 0xec32 + - "": [t: "long division sign extender"] # 0xec33 + - "": [t: "short division"] # 0xec34 + - "": [t: "double southwest to northeast em bond"] # 0xec40 + - "": [t: "double northwest to southeast em bond"] # 0xec41 + - "": [t: "single horizontal em bond"] # 0xec42 + - "": [t: "double horizontal em bond"] # 0xec43 + - "": [t: "triple horizontal em bond"] # 0xec44 + - "": [t: "single vertical em bond"] # 0xec45 + - "": [t: "double vertical em bond"] # 0xec46 + - "": [t: "triple vertical em bond"] # 0xec47 + - "": [t: "less than em bond"] # 0xec48 + - "": [t: "greater than em bond"] # 0xec49 + - "": [t: "single horizontal en bond"] # 0xec4a + - "": [t: "double horizontal en bond"] # 0xec4b + - "": [t: "triple horizontal en bond"] # 0xec4c + - "": [t: "top left rectangle"] # 0xec80 + - "": [t: "bottom left rectangle"] # 0xec81 + - "": [t: "top right rectangle"] # 0xec90 + - "": [t: "bottom right rectangle"] # 0xec91 + - "": [t: "synthetic division corner"] # 0xec92 + - "": [t: "synthetic division horizontal extender"] # 0xec93 + - "": [t: "synthetic division vertical extender"] # 0xec94 + - "": [t: "left ceiling floor extender"] # 0xec95 + - "": [t: "right ceiling floor extender"] # 0xec96 + - "": [t: "over bracket extender"] # 0xec97 + - "": [t: "vertical bar extender"] # 0xec98 + - "": [t: "left double vertical bar extender"] # 0xec99 + - "": [t: "horizontal bar extender"] # 0xec9a + - "": [t: "under bracket extender"] # 0xec9c + - "": [t: "down pointing paren right"] # 0xec9d + - "": [t: "down pointing paren extender"] # 0xec9e + - "": [t: "down pointing paren left"] # 0xec9f + - "": [t: "up pointing brace extender"] # 0xeca0 + - "": [t: "up pointing paren left"] # 0xeca1 + - "": [t: "up pointing paren extender"] # 0xeca2 + - "": [t: "up pointing paren right"] # 0xeca3 + - "": [t: "down pointing brace extender"] # 0xeca4 + - "": [t: "planck constant over two pi bar"] # 0xed00 + - "": [t: "mirror g"] # 0xed01 + - "": [t: "dotless j"] # 0xed02 + - "": [t: "digamma"] # 0xed03 + - "ϝ": [t: "digamma"] # 0x3dd + - "": [t: "d"] # 0xed10 + - "ⅆ": [t: "d"] # 0x2146 + - "": [t: "e"] # 0xed11 + - "ⅇ": [t: "e"] # 0x2147 + - "": [t: "i"] # 0xed12 + - "ⅈ": [t: "i"] # 0x2148 + - "": [t: "j"] # 0xed13 + - "ⅅ": + - spell: "translate('.', 'ⅅ', 'DD')" # 0xed16, 0x2145 + +# The private use chars are from MathType + - "": [t: "anticlockwise contour integral loop"] # 0xee00 + - "": [t: "clockwise contour integral loop"] # 0xee01 + - "": [t: ""] # 0xee04 + - "": [t: ""] # 0xee05 + - "": [t: ""] # 0xee06 + - "": [t: ""] # 0xee07 + - "": [t: ""] # 0xee08 + - "": [t: ""] # 0xee09 + - "": [t: ""] # 0xee0a + - "": [t: ""] # 0xee0b + - "": [t: ""] # 0xee0c + - "": [t: "joint status embellishment"] # 0xee0d + - "": [t: "joint status embellishment left"] # 0xee0e + - "": [t: "joint status embellishment right"] # 0xee0f + - "": [t: "joint status embellishment extender"] # 0xee10 + - "": [t: "integral loop"] # 0xee11 + - "": [t: "integral loop double"] # 0xee12 + - "": [t: "integral loop triple"] # 0xee13 + - "": [t: "expanding integral loop double"] # 0xee15 + - "": [t: "expanding integral loop triple"] # 0xee16 + - "": [t: "asymptotically equal to accent"] # 0xee17 + - "": [t: "equal sign accent"] # 0xee18 + - "": [t: "quadruple prime"] # 0xee19 + - "": [t: "bar accent with open circle left"] # 0xee1a + - "": [t: "bar accent with closed circle left"] # 0xee1b + - "": [t: "bar accent with open circle right"] # 0xee1c + - "": [t: "bar accent with over dot"] # 0xee1d + - "": [t: "bar accent with under dot"] # 0xee1e + - "": [t: "bar accent with double over dot"] # 0xee1f + - "": [t: "bar accent with double under dot"] # 0xee20 + - "": [t: "bar accent with caret"] # 0xee21 + - "": [t: "thick under bar accent"] # 0xee22 + - "": [t: "bar accent with closed circle right"] # 0xee23 + - "": [t: "large dot above"] # 0xee24 + - "": [t: "alignment mark"] # 0xef00 + - "": [t: ""] # 0xef01 + - "​": [t: ""] # 0x200b + - "": [t: ""] # 0xef02 + - " ": [t: ""] # 0x2009 + - "": [t: ""] # 0xef03 + - " ": [t: ""] # 0x205f + - "": [t: ""] # 0xef04 + - "": [t: ""] # 0xef05 + - "": [t: ""] # 0xef06 + - "": [t: ""] # 0xef07 + - "": [t: ""] # 0xef08 + - "": [t: ""] # 0xef09 + - "": [t: ""] # 0xef0a + - " ": [t: ""] # 0x200a + - "": [t: ""] # 0xef22 + - "": [t: ""] # 0xef23 + - "": [t: ""] # 0xef24 + - "": [t: ""] # 0xef29 + - "": [t: "missing term"] # 0xef41 + - "": [t: "clockwise contour integral arrow on left"] # 0xef80 + - "": [t: "integral with square"] # 0xef81 + - "": [t: "integral with slash"] # 0xef82 + - "": [t: "reversed integral"] # 0xef83 + - "": [t: "double zero over double zero"] # 0xef90 + - "": [t: "zero with slash"] # 0xef91 + + # fraktur chars in math alphabetic block and also MathType private use area + # Some of these are reserved because they were used in Plane 0 -- that shouldn't be an issue other than causing the other chars to not display + - "𝔄-𝔜": # 0x1d504 - 0x1d51d ('z' version is reserved) + - t: "fraktur" + - spell: "translate('.', '𝔄𝔅𝔆𝔇𝔈𝔉𝔊𝔋𝔌𝔍𝔎𝔏𝔐𝔑𝔒𝔓𝔔𝔕𝔖𝔗𝔘𝔙𝔚𝔛𝔜', 'ABCDEFGHIJKLMNOPQRSTUVWXY')" + + - "-": # 0xf000 - 0xf018 + - t: "fraktur" + - spell: "translate('.', '', 'ABCDEFGHIJKLMNOPQRSTUVWXY')" + + - "𝔞-𝔷": # 0x1d51e - 0x1d537 + - t: "fraktur" + - spell: "translate('.', '𝔞𝔟𝔠𝔡𝔢𝔣𝔤𝔥𝔦𝔧𝔨𝔩𝔪𝔫𝔬𝔭𝔮𝔯𝔰𝔱𝔲𝔳𝔴𝔵𝔶𝔷', 'abcdefghijklmnopqrstuvwxyz')" + - "-": # 0xf01a - 0xf033 + - t: "fraktur" + - spell: "translate('.', '', 'abcdefghijklmnopqrstuvwxyz')" + + - "𝕬-𝖅": # 0x1D56C - 0x1D585 + - t: "fraktur" + - test: + if: "not($IgnoreBold)" + then: [t: "bold"] + - spell: "translate('.', '𝕬𝕭𝕮𝕯𝕰𝕱𝕲𝕳𝕴𝕵𝕶𝕷𝕸𝕹𝕺𝕻𝕼𝕽𝕾𝕿𝖀𝖁𝖂𝖃𝖄𝖅', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" + + - "-": # 0xf040 - 0xf059 + - t: "fraktur" + - test: + if: "not($IgnoreBold)" + then: [t: "bold"] + - spell: "translate('.', '', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" + + - "𝖆-𝖟": # 0x1d586 - 0x1d59f + - t: "fraktur" + - test: + if: "not($IgnoreBold)" + then: [t: "bold"] + - spell: "translate('.', '𝖆𝖇𝖈𝖉𝖊𝖋𝖌𝖍𝖎𝖏𝖐𝖑𝖒𝖓𝖔𝖕𝖖𝖗𝖘𝖙𝖚𝖛𝖜𝖝𝖞𝖟', 'abcdefghijklmnopqrstuvwxyz')" + - "-": # 0xf05a - 0xf073 + - t: "fraktur" + - test: + if: "not($IgnoreBold)" + then: [t: "bold"] + - spell: "translate('.', '', 'abcdefghijklmnopqrstuvwxyz')" + + # double struck (blackboard bold) chars in math alphabetic block and also MathType private use area + # Some of these are reserved because they were used in Plane 0 -- that shouldn't be an issue other than causing the other chars to not display + - "𝔸-𝕐": # 0x1d504 - 0x1d51d ('z' version is reserved) + - t: "double struck" + - spell: "translate('.', '𝔸𝔹𝔺𝔻𝔼𝔽𝔾𝔿𝕀𝕁𝕂𝕃𝕄𝕅𝕆𝕇𝕈𝕉𝕊𝕋𝕌𝕍𝕎𝕏𝕐', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" + + - "-": # 0xf080 - 0xf098 + - t: "double struck" + - spell: "translate('.', '', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" + + - "𝕒-𝕫": # 0x1d552 - 0x1d56b + - t: "double struck" + - spell: "translate('.', '𝕒𝕓𝕔𝕕𝕖𝕗𝕘𝕙𝕚𝕛𝕜𝕝𝕞𝕟𝕠𝕡𝕢𝕣𝕤𝕥𝕦𝕧𝕨𝕩𝕪𝕫', 'abcdefghijklmnopqrstuvwxyz')" + - "-": # 0xf09a - 0xf0b3 + - t: "double struck" + - spell: "translate('.', '', 'abcdefghijklmnopqrstuvwxyz')" + - "𝟘-𝟡": # 0x1d7d8 - 0x1d7e1 + - t: "double struck" + - spell: "translate('.', '𝟘𝟙𝟚𝟛𝟜𝟝𝟞𝟟𝟠𝟡', '0123456789')" + - "-": # 0xf0c0 - 0xf0c9 + - t: "double struck" + - spell: "translate('.', '', '0123456789')" + + - "": [t: "double struck nahblah"] # 0xf0ca + - "": [t: "double struck euler constant"] # 0xf0cb + + # script chars in math alphabetic block and also MathType private use area + - "𝒜-𝒵": # 0x1d49c - 0x1d4b5 + - t: "script" + - spell: "translate('.', '𝒜𝒝𝒞𝒟𝒠𝒡𝒢𝒣𝒤𝒥𝒦𝒧𝒨𝒩𝒪𝒫𝒬𝒭𝒮𝒯𝒰𝒱𝒲𝒳𝒴𝒵', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" + + - "-": # 0xf100 - 0xf119 + - t: "script" + - spell: "translate('.', '', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" + + - "𝒶-𝓏": # 0x1d4b6 - 0x1d4cf + - t: "script" + - spell: "translate('.', '𝒶𝒷𝒸𝒹𝒺𝒻𝒼𝒽𝒾𝒿𝓀𝓁𝓂𝓃𝓄𝓅𝓆𝓇𝓈𝓉𝓊𝓋𝓌𝓍𝓎𝓏', 'abcdefghijklmnopqrstuvwxyz')" + - "-": # 0xf11a - 0xf133 + - t: "script" + - spell: "translate('.', '', 'abcdefghijklmnopqrstuvwxyz')" + + # bold script chars in math alphabetic block and also MathType private use area + - "𝓐-𝓩": # 0x1d4d0 - 0x1d4e9 + - t: "script" + - test: + if: "not($IgnoreBold)" + then: [t: "bold"] + - spell: "translate('.', '𝓐𝓑𝓒𝓓𝓔𝓕𝓖𝓗𝓘𝓙𝓚𝓛𝓜𝓝𝓞𝓟𝓠𝓡𝓢𝓣𝓤𝓥𝓦𝓧𝓨𝓩', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" + + - "-": # 0xf140 - 0xf159 + - t: "script" + - test: + if: "not($IgnoreBold)" + then: [t: "bold"] + - spell: "translate('.', '', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" + + - "𝓪-𝔃": # 0x1d4ea - 0x1d503 + - t: "script" + - test: + if: "not($IgnoreBold)" + then: [t: "bold"] + - spell: "translate('.', '𝓪𝓫𝓬𝓭𝓮𝓯𝓰𝓱𝓲𝓳𝓴𝓵𝓶𝓷𝓸𝓹𝓺𝓻𝓼𝓽𝓾𝓿𝔀𝔁𝔂𝔃', 'abcdefghijklmnopqrstuvwxyz')" + - "-": # 0xf15a - 0xf173 + - t: "script" + - test: + if: "not($IgnoreBold)" + then: [t: "bold"] + - spell: "translate('.', '', 'abcdefghijklmnopqrstuvwxyz')" + + - "-": # 0xf180 - 0xf199 + - spell: "translate('.', '', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" + + - "": # 0xf19a + - 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: "cap"] + else: [x: "$SpeechOverrides_CapitalLetters"] + - pitch: + value: "$CapitalLetters_Pitch" + replace: [t: "ligature ae"] + - "": # 0xf19b + - 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: "cap"] + else: [x: "$SpeechOverrides_CapitalLetters"] + - pitch: + value: "$CapitalLetters_Pitch" + replace: [t: "sharp s"] + - "": # 0xf19c + - 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: "cap"] + else: [x: "$SpeechOverrides_CapitalLetters"] + - pitch: + value: "$CapitalLetters_Pitch" + replace: [t: "o with stroke"] + + # MathType only has a few of the cap Greek letters in PUA + - "": # 0xf201 - 0xf209 + - t: "double struck" + - spell: "translate('.', '', 'ΔΨΛΠΣΘΓΩΥ')" + + - "-": # 0xf220 - 0xf236 + - t: "double struck" + - spell: "translate('.', '', 'ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡ΢ΣΤΥΦΧΨΩ')" + + - "": [t: "double struck final sigma"] # 0xf237 + - "": [t: "double struck rho"] # 0xf250 + - "": [t: "double struck phi"] # 0xf251 + - "𝐀-𝐙": # 0x1d400 - 0x1d419 + - test: + if: "not($IgnoreBold)" + then: [t: "bold"] + - spell: "translate('.', '𝐀𝐁𝐂𝐃𝐄𝐅𝐆𝐇𝐈𝐉𝐊𝐋𝐌𝐍𝐎𝐏𝐐𝐑𝐒𝐓𝐔𝐕𝐖𝐗𝐘𝐙', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" + + - "-": # 0xf260 - 0xf279 + - test: + if: "not($IgnoreBold)" + then: [t: "bold"] + - spell: "translate('.', '', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" + + - "𝐚-𝐳": # 0x1d41a - 0x1d433 + - test: + if: "not($IgnoreBold)" + then: [t: "bold"] + - spell: "translate('.', '𝐚𝐛𝐜𝐝𝐞𝐟𝐠𝐡𝐢𝐣𝐤𝐥𝐦𝐧𝐨𝐩𝐪𝐫𝐬𝐭𝐮𝐯𝐰𝐱𝐲𝐳', 'abcdefghijklmnopqrstuvwxyz')" + + - "-": # 0xf27a - 0xf293 + - test: + if: "not($IgnoreBold)" + then: [t: "bold"] + - spell: "translate('.', '', 'abcdefghijklmnopqrstuvwxyz')" + + - "𝐴-𝑍": # 0x1d434 - 0x1d44d + - spell: "translate('.', '𝐴𝐵𝐶𝐷𝐸𝐹𝐺𝐻𝐼𝐽𝐾𝐿𝑀𝑁𝑂𝑃𝑄𝑅𝑆𝑇𝑈𝑉𝑊𝑋𝑌𝑍', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" + + - "-": # 0xf294 - 0xf2ad + - spell: "translate('.', '', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" + + - "𝑎-𝑧": # 0x1d44e - 0x1d467 + - spell: "translate('.', '𝑎𝑏𝑐𝑑𝑒𝑓𝑔𝑕𝑖𝑗𝑘𝑙𝑚𝑛𝑜𝑝𝑞𝑟𝑠𝑡𝑢𝑣𝑤𝑥𝑦𝑧', 'abcdefghijklmnopqrstuvwxyz')" + + - "-": # 0xf2ae - 0xf2c7 + - spell: "translate('.', '', 'abcdefghijklmnopqrstuvwxyz')" + + - "𝑨-𝒁": # 0x1d468 - 0x1d481 + # - t: "bold italic" + - test: + if: "not($IgnoreBold)" + then: [t: "bold"] + - spell: "translate('.', '𝑨𝑩𝑪𝑫𝑬𝑭𝑮𝑯𝑰𝑱𝑲𝑳𝑴𝑵𝑶𝑷𝑸𝑹𝑺𝑻𝑼𝑽𝑾𝑿𝒀𝒁', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" + + - "-": # 0xf2c8 - 0xf2e1 + # - t: "bold italic" + - test: + if: "not($IgnoreBold)" + then: [t: "bold"] + - spell: "translate('.', '', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" + + - "𝒂-𝒛": # 0x1d482 - 0x1d49b + # - t: "bold italic" + - test: + if: "not($IgnoreBold)" + then: [t: "bold"] + - spell: "translate('.', '𝒂𝒃𝒄𝒅𝒆𝒇𝒈𝒉𝒊𝒋𝒌𝒍𝒎𝒏𝒐𝒑𝒒𝒓𝒔𝒕𝒖𝒗𝒘𝒙𝒚𝒛', 'abcdefghijklmnopqrstuvwxyz')" + + - "-": # 0xf2e2 - 0xf2fb + # - t: "bold italic" + - test: + if: "not($IgnoreBold)" + then: [t: "bold"] + - spell: "translate('.', '', 'abcdefghijklmnopqrstuvwxyz')" + + - "𝖠-𝖹": # 0x1d5a0 - 0x1d5b9 + - spell: "translate('.', '𝖠𝖡𝖢𝖣𝖤𝖥𝖦𝖧𝖨𝖩𝖪𝖫𝖬𝖭𝖮𝖯𝖰𝖱𝖲𝖳𝖴𝖵𝖶𝖷𝖸𝖹', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" + + - "-": # 0xf300 - 0xf319 + - spell: "translate('.', '', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" + + - "𝖺-𝗓": # 0x1d5ba - 0x1d5d3 + - spell: "translate('.', '𝖺𝖻𝖼𝖽𝖾𝖿𝗀𝗁𝗂𝗃𝗄𝗅𝗆𝗇𝗈𝗉𝗊𝗋𝗌𝗍𝗎𝗏𝗐𝗑𝗒𝗓', 'abcdefghijklmnopqrstuvwxyz')" + + - "-": # 0xf31a - 0xf333 + - spell: "translate('.', '', 'abcdefghijklmnopqrstuvwxyz')" + + - "𝗔-𝗭": # 0x1d5d4 - 0x1d5ed + - test: + if: "not($IgnoreBold)" + then: [t: "bold"] + - spell: "translate('.', '𝗔𝗕𝗖𝗗𝗘𝗙𝗚𝗛𝗜𝗝𝗞𝗟𝗠𝗡𝗢𝗣𝗤𝗥𝗦𝗧𝗨𝗩𝗪𝗫𝗬𝗭', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" + + - "-": # 0xf334 - 0xf34d + - test: + if: "not($IgnoreBold)" + then: [t: "bold"] + - spell: "translate('.', '', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" + + - "𝗮-𝘇": # 0x1d5ee - 0x1d607 + - test: + if: "not($IgnoreBold)" + then: [t: "bold"] + - spell: "translate('.', '𝗮𝗯𝗰𝗱𝗲𝗳𝗴𝗵𝗶𝗷𝗸𝗹𝗺𝗻𝗼𝗽𝗾𝗿𝘀𝘁𝘂𝘃𝘄𝘅𝘆𝘇', 'abcdefghijklmnopqrstuvwxyz')" + + - "-": # 0xf34e - 0xf367 + - test: + if: "not($IgnoreBold)" + then: [t: "bold"] + - spell: "translate('.', '', 'abcdefghijklmnopqrstuvwxyz')" + - "𝘈-𝘡": # 0x1d608 - 0x1d621 + # - t: "italic" + - spell: "translate('.', '𝘈𝘉𝘊𝘋𝘌𝘍𝘎𝘏𝘐𝘑𝘒𝘓𝘔𝘕𝘖𝘗𝘘𝘙𝘚𝘛𝘜𝘝𝘞𝘟𝘠𝘡', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" + - "-": # 0xf368 - 0xf381 + # - t: "italic" + - spell: "translate('.', '', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" + + - "𝘢-𝘻": # 0x1d622 - 0x1d63b + # - t: "italic" + - spell: "translate('.', '𝘢𝘣𝘤𝘥𝘦𝘧𝘨𝘩𝘪𝘫𝘬𝘭𝘮𝘯𝘰𝘱𝘲𝘳𝘴𝘵𝘶𝘷𝘸𝘹𝘺𝘻', 'abcdefghijklmnopqrstuvwxyz')" + + - "-": # 0xf382 - 0xf39b + # - t: "italic" + - spell: "translate('.', '', 'abcdefghijklmnopqrstuvwxyz')" + + - "𝘼-𝙕": # 0x1d63c - 0x1d655 + # - t: "bold italic" + - test: + if: "not($IgnoreBold)" + then: [t: "bold"] + - spell: "translate('.', '𝘼𝘽𝘾𝘿𝙀𝙁𝙂𝙃𝙄𝙅𝙆𝙇𝙈𝙉𝙊𝙋𝙌𝙍𝙎𝙏𝙐𝙑𝙒𝙓𝙔𝙕', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" + + - "-": # 0xf39c - 0xf3b5 + # - t: "bold italic" + - test: + if: "not($IgnoreBold)" + then: [t: "bold"] + - spell: "translate('.', '', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" + + - "𝙖-𝙯": # 0x1d656 - 0x1d66f + # - t: "bold italic" + - test: + if: "not($IgnoreBold)" + then: [t: "bold"] + - spell: "translate('.', '𝙖𝙗𝙘𝙙𝙚𝙛𝙜𝙝𝙞𝙟𝙠𝙡𝙢𝙣𝙤𝙥𝙦𝙧𝙨𝙩𝙪𝙫𝙬𝙭𝙮𝙯', 'abcdefghijklmnopqrstuvwxyz')" + + - "-": # 0xf3b6 - 0xf3cf + # - t: "bold italic" + - test: + if: "not($IgnoreBold)" + then: [t: "bold"] + - spell: "translate('.', '', 'abcdefghijklmnopqrstuvwxyz')" + + - "𝙰-𝚉": # 0x1d670 - 0x1d689 + - spell: "translate('.', '𝙰𝙱𝙲𝙳𝙴𝙵𝙶𝙷𝙸𝙹𝙺𝙻𝙼𝙽𝙾𝙿𝚀𝚁𝚂𝚃𝚄𝚅𝚆𝚇𝚈𝚉', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" + + - "-": # 0xf3d0 - 0xf3e9 + - spell: "translate('.', '', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" + + - "𝚊-𝚣": # 0x1d68a - 0x1d6a3 + - spell: "translate('.', '𝚊𝚋𝚌𝚍𝚎𝚏𝚐𝚑𝚒𝚓𝚔𝚕𝚖𝚗𝚘𝚙𝚚𝚛𝚜𝚝𝚞𝚟𝚠𝚡𝚢𝚣', 'abcdefghijklmnopqrstuvwxyz')" + + - "-": # 0xf3ea - 0xf403 + - spell: "translate('.', '', 'abcdefghijklmnopqrstuvwxyz')" + + - "": [t: "dotless i"] # 0xf404 + - "𝚤": [t: "dotless i"] # 0x1d6a4 + - "𝚥": [t: "dotless j"] # 0x1d6a5 + + - "𝚨-𝛀": # 0x1d6a8 - 0x1d6c0 + - test: + if: "not($IgnoreBold)" + then: [t: "bold"] + - spell: "translate('.', '𝚨𝚩𝚪𝚫𝚬𝚭𝚮𝚯𝚰𝚱𝚲𝚳𝚴𝚵𝚶𝚷𝚸𝚹𝚺𝚻𝚼𝚽𝚾𝚿𝛀', 'ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡ΢ΣΤΥΦΧΨΩ')" + + - "-": # 0xf408 - 0xf420 + - test: + if: "not($IgnoreBold)" + then: [t: "bold"] + - spell: "translate('.', '', 'ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡ΢ΣΤΥΦΧΨΩ')" + + - "𝛂-𝛚": # 0x1d6c2 - 0x1d6da + - test: + if: "not($IgnoreBold)" + then: [t: "bold"] + - spell: "translate('.', '𝛂𝛃𝛄𝛅𝛆𝛇𝛈𝛉𝛊𝛋𝛌𝛍𝛎𝛏𝛐𝛑𝛒𝛓𝛔𝛕𝛖𝛗𝛘𝛙𝛚', 'αβγδεζηθικλμνξοπρςστυφχψω')" + + - "-": # 0xf422 - 0xf43a + - test: + if: "not($IgnoreBold)" + then: [t: "bold"] + - spell: "translate('.', '', 'αβγδεζηθικλμνξοπρςστυφχψω')" + + - "": [t: "bold nahblah"] # 0xf421 + - "𝛁": [t: "bold nahblah"] # 0x1d6c1 + + - "𝛛𝛜𝛝𝛞𝛟𝛠𝛡": # 0x1D6DB - 0x1D6E1 + - test: + if: "not($IgnoreBold)" + then: [t: "bold"] + - spell: "translate('.', '𝛛𝛜𝛝𝛞𝛟𝛠𝛡', '∂εθκφρπ')" + + - "": # 0xF43C - 0xF441 + - test: + if: "not($IgnoreBold)" + then: [t: "bold"] + - spell: "translate('.', '', '∂εθκφρπ')" + + - "𝛢-𝛺": # 0x1d6e2 - 0x1d6fa + # - t: "italic" + - spell: "translate('.', '𝛢𝛣𝛤𝛥𝛦𝛧𝛨𝛩𝛪𝛫𝛬𝛭𝛮𝛯𝛰𝛱𝛲𝛳𝛴𝛵𝛶𝛷𝛸𝛹𝛺', 'ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡ΢ΣΤΥΦΧΨΩ')" + + - "-": # 0xf442 - 0xf45a + # - t: "italic" + - spell: "translate('.', '', 'ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡ΢ΣΤΥΦΧΨΩ')" + + - "𝛼-𝜔": # 0x1d6fc - 0x1d714 + # - t: "italic" + - spell: "translate('.', '𝛼𝛽𝛾𝛿𝜀𝜁𝜂𝜃𝜄𝜅𝜆𝜇𝜈𝜉𝜊𝜋𝜌𝜍𝜎𝜏𝜐𝜑𝜒𝜓𝜔', 'αβγδεζηθικλμνξοπρςστυφχψω')" + + - "-": # 0xf45c - 0xf474 + # - t: "italic" + - spell: "translate('.', '', 'αβγδεζηθικλμνξοπρςστυφχψω')" + + - "": [t: "italic nahblah"] # 0xf45b + - "𝛻": [t: "italic nahblah"] # 0x1d6fb + + - "𝜕𝜖𝜗𝜘𝜙𝜚𝜛": # 0x1d715 - 0x1d71b + # - t: "italic" + - spell: "translate('.', '𝜕𝜖𝜗𝜘𝜙𝜚𝜛', '∂εθκφρπ')" + + - "": # 0xf475 - 0xf47b + # - t: "italic" + - spell: "translate('.', '', '∂εθκφρπ')" + + - "𝜜-𝜴": # 0x1d71c - 0x1d734 + # - t: "bold italic" + - test: + if: "not($IgnoreBold)" + then: [t: "bold"] + - spell: "translate('.', '𝜜𝜝𝜞𝜟𝜠𝜡𝜢𝜣𝜤𝜥𝜦𝜧𝜨𝜩𝜪𝜫𝜬𝜭𝜮𝜯𝜰𝜱𝜲𝜳𝜴', 'ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡ΢ΣΤΥΦΧΨΩ')" + + - "-": # 0xf47c - 0xf494 + # - t: "bold italic" + - test: + if: "not($IgnoreBold)" + then: [t: "bold"] + - spell: "translate('.', '', 'ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡ΢ΣΤΥΦΧΨΩ')" + + - "𝜶-𝝎": # 0x1d736 - 0x1d74e + # - t: "bold italic" + - test: + if: "not($IgnoreBold)" + then: [t: "bold"] + - spell: "translate('.', '𝜶𝜷𝜸𝜹𝜺𝜻𝜼𝜽𝜾𝜿𝝀𝝁𝝂𝝃𝝄𝝅𝝆𝝇𝝈𝝉𝝊𝝋𝝌𝝍𝝎', 'αβγδεζηθικλμνξοπρςστυφχψω')" + + - "-": # 0xf496 - 0xf4ae + # - t: "bold italic" + - test: + if: "not($IgnoreBold)" + then: [t: "bold"] + - spell: "translate('.', '', 'αβγδεζηθικλμνξοπρςστυφχψω')" + + - "𝝏𝝐𝝑𝝒𝝓𝝔𝝕": # 0x1d74f - 0x1d755 + # - t: "bold italic" + - test: + if: "not($IgnoreBold)" + then: [t: "bold"] + - spell: "translate('.', '𝝏𝝐𝝑𝝒𝝓𝝔𝝕', '∂εθκφρπ')" + + - "": # 0xf422 - 0xf43a + # - t: "bold italic" + - test: + if: "not($IgnoreBold)" + then: [t: "bold"] + - spell: "translate('.', '', '∂εθκφρπ')" + + - "𝜵": [t: "bold italic nahblah"] # 0x1d735 + - "": [t: "bold italic nahblah"] # 0xf495 + + - "𝝖-𝝮": # 0x1d756 - 0x1d76e + - test: + if: "not($IgnoreBold)" + then: [t: "bold"] + - spell: "translate('.', '𝝖𝝗𝝘𝝙𝝚𝝛𝝜𝝝𝝞𝝟𝝠𝝡𝝢𝝣𝝤𝝥𝝦𝝧𝝨𝝩𝝪𝝫𝝬𝝭𝝮', 'ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡ΢ΣΤΥΦΧΨΩ')" + - "-": # 0xf4b6 - 0xf4ce + - test: + if: "not($IgnoreBold)" + then: [t: "bold"] + - spell: "translate('.', '', 'ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡ΢ΣΤΥΦΧΨΩ')" + + - "𝝰-𝞈": # 0x1d770 - 0x1d788 + - test: + if: "not($IgnoreBold)" + then: [t: "bold"] + - spell: "translate('.', '𝝰𝝱𝝲𝝳𝝴𝝵𝝶𝝷𝝸𝝹𝝺𝝻𝝼𝝽𝝾𝝿𝞀𝞁𝞂𝞃𝞄𝞅𝞆𝞇𝞈', 'αβγδεζηθικλμνξοπρςστυφχψω')" + + - "-": # 0xf4d0 - 0xf4e8 + - test: + if: "not($IgnoreBold)" + then: [t: "bold"] + - spell: "translate('.', '', 'αβγδεζηθικλμνξοπρςστυφχψω')" + + - "𝞉𝞊𝞋𝞌𝞍𝞎𝞏": # 0x1d789 - 0x1d78f + - test: + if: "not($IgnoreBold)" + then: [t: "bold"] + - spell: "translate('.', '𝞉𝞊𝞋𝞌𝞍𝞎𝞏', '∂εθκφρπ')" + + - "": # 0xf4e9 - 0xf4ef + - test: + if: "not($IgnoreBold)" + then: [t: "bold"] + - spell: "translate('.', '', '∂εθκφρπ')" + + - "": [t: "bold nahblah"] # 0xf4cf + - "𝝯": [t: "bold nahblah"] # 0x1d76f + + - "𝞐-𝞨": # 0x1d790 - 0x1d7a8 + # - t: "bold italic" + - test: + if: "not($IgnoreBold)" + then: [t: "bold"] + - spell: "translate('.', '𝞐𝞑𝞒𝞓𝞔𝞕𝞖𝞗𝞘𝞙𝞚𝞛𝞜𝞝𝞞𝞟𝞠𝞡𝞢𝞣𝞤𝞥𝞦𝞧𝞨', 'ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡ΢ΣΤΥΦΧΨΩ')" + + - "-": # 0xf4f0 - 0xf508 + # - t: "bold italic" + - test: + if: "not($IgnoreBold)" + then: [t: "bold"] + - spell: "translate('.', '', 'ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡ΢ΣΤΥΦΧΨΩ')" + + - "𝞪-𝟂": # 0x1d7aa - 0x1d7c2 + # - t: "bold italic" + - test: + if: "not($IgnoreBold)" + then: [t: "bold"] + - spell: "translate('.', '𝞪𝞫𝞬𝞭𝞮𝞯𝞰𝞱𝞲𝞳𝞴𝞵𝞶𝞷𝞸𝞹𝞺𝞻𝞼𝞽𝞾𝞿𝟀𝟁𝟂', 'αβγδεζηθικλμνξοπρςστυφχψω')" + + - "-": # 0xf50a - 0xf522 + # - t: "bold italic" + - test: + if: "not($IgnoreBold)" + then: [t: "bold"] + - spell: "translate('.', '', 'αβγδεζηθικλμνξοπρςστυφχψω')" + + - "𝟃𝟄𝟅𝟆𝟇𝟈𝟉": # 0x1d7c3 - 0x1d7c9 + # - t: "bold italic" + - test: + if: "not($IgnoreBold)" + then: [t: "bold"] + - spell: "translate('.', '𝟃𝟄𝟅𝟆𝟇𝟈𝟉', '∂εθκφρπ')" + + - "": # 0xf523 - 0xf529 + # - t: "bold italic" + - test: + if: "not($IgnoreBold)" + then: [t: "bold"] + - spell: "translate('.', '', '∂εθκφρπ')" + + - "": [t: "bold nahblah"] # 0xf509 + - "𝞩": [t: "bold nahblah"] # 0x1d7a9 + + - "-": # 0xf52e - 0xf537 (old MathType) + - test: + if: "not($IgnoreBold)" + then: [t: "bold"] + - spell: "translate('.', '', '0123456789')" + + - "𝟎-𝟗": # 0x1d7ce - 0x1d7d7 + - test: + if: "not($IgnoreBold)" + then: [t: "bold"] + - spell: "translate('.', '𝟎𝟏𝟐𝟑𝟒𝟓𝟔𝟕𝟖𝟗', '0123456789')" + + - "-": # 0xf52e - 0xf537 (old MathType) + - test: + if: "not($IgnoreBold)" + then: [t: "bold"] + - spell: "translate('.', '', '0123456789')" + + - "𝟬-𝟵": # 0x1D7EC - 0x1D7F5 + - test: + if: "not($IgnoreBold)" + then: [t: "bold"] + - spell: "translate('.', '𝟬𝟭𝟮𝟯𝟰𝟱𝟲𝟳𝟴𝟵', '0123456789')" + + - "-": # 0xf556 - 0xf55f (old MathType) + - spell: "translate('.', '', '0123456789')" + + - "𝟢-𝟫": # 0x1d7e2 - 0x1d7eb + - spell: "translate('.', '𝟶𝟷𝟸𝟹𝟺𝟻𝟼𝟽𝟾𝟿', '0123456789')" + + - "𝟶-𝟿": # 0x1d7f6 - 0x1d7ff + - spell: "translate('.', '𝟶𝟷𝟸𝟹𝟺𝟻𝟼𝟽𝟾𝟿', '0123456789')" + + + - "": [t: "unknown character"] # 0xf700 + - "": [t: "lower right and lower left triangles"] # 0xf726 + - "": [t: "horizontal ellipsis extender"] # 0xf72d + - "": [t: "midline horizontal ellipsis extender"] # 0xf72e + - "": [t: "radical extender"] # 0xf8e5 + - "": [t: "vertical arrow extender"] # 0xf8e6 + - "": [t: "horizontal arrow extender"] # 0xf8e7 + - "": [t: "registered sign sans serif"] # 0xf8e8 + - "": [t: "copyright sign sans serif"] # 0xf8e9 + - "": [t: "trade mark sign sans serif"] # 0xf8ea + - "": [t: "left paren top"] # 0xf8eb + - "": [t: "left paren extender"] # 0xf8ec + - "": [t: "left paren bottom"] # 0xf8ed + - "": [t: "left bracket top"] # 0xf8ee + - "": [t: "left bracket extender"] # 0xf8ef + - "": [t: "left bracket bottom"] # 0xf8f0 + - "": [t: "left brace top"] # 0xf8f1 + - "": [t: "left brace mid"] # 0xf8f2 + - "": [t: "left brace bottom"] # 0xf8f3 + - "": [t: "brace extender"] # 0xf8f4 + - "": [t: "integral extender"] # 0xf8f5 + - "": [t: "right paren top"] # 0xf8f6 + - "": [t: "right paren extender"] # 0xf8f7 + - "": [t: "right paren bottom"] # 0xf8f8 + - "": [t: "right bracket top"] # 0xf8f9 + - "": [t: "right bracket extender"] # 0xf8fa + - "": [t: "right bracket bottom"] # 0xf8fb + - "": [t: "right brace top"] # 0xf8fc + - "": [t: "right brace mid"] # 0xf8fd + - "": [t: "right brace bottom"] # 0xf8fe + - "": [t: "apple logo"] # 0xf8ff + - "ff": [t: "ff"] # 0xfb00 + - "fi": [t: "fi"] # 0xfb01 + - "fl": [t: "fl"] # 0xfb02 + - "ffi": [t: "ffi"] # 0xfb03 + - "ffl": [t: "ffl"] # 0xfb04 + - "ſt": [t: "ft"] # 0xfb05 + - "st": [t: "st"] # 0xfb06 + - "﬩": [t: "hebrew letter alternative plus"] # 0xfb29 + - "︠": [t: "ligature left half embellishment"] # 0xfe20 + - "︡": [t: "ligature right half embellishment"] # 0xfe21 + - "︢": [t: "double tilde left half embellishment"] # 0xfe22 + - "︣": [t: "double tilde right half embellishment"] # 0xfe23 + - "︤": [t: "macron left half embellishment"] # 0xfe24 + - "︥": [t: "macron right half embellishment"] # 0xfe25 + - "︦": [t: "conjoining macron embellishment"] # 0xfe26 + - "︵": [t: "over paren"] # 0xfe35 + - "︶": [t: "under paren"] # 0xfe36 + - "︷": [t: "over brace"] # 0xfe37 + - "︸": [t: "under brace"] # 0xfe38 + - "︿": [t: "over angle bracket"] # 0xfe3f + - "﹀": [t: "under angle bracket"] # 0xfe40 + - "﹡": [t: "small asterisk"] # 0xfe61 + - "﹢": [t: "small plus"] # 0xfe62 + - "﹣": [t: "small minus"] # 0xfe63 + - "﹤": [t: "small less than"] # 0xfe64 + - "﹥": [t: "small greater than"] # 0xfe65 + - "﹦": [t: "small equals"] # 0xfe66 + - "+": [t: "fullwidth plus sign"] # 0xff0b + - "<": [t: "less than"] # 0xff1c + - "=": [t: "equals"] # 0xff1d + - ">": [t: "greater than"] # 0xff1e + - "\": [t: "backslash"] # 0xff3c + - "^": [t: "hat"] # 0xff3e + - "|": # 0xff5c + # note: for ClearSpeak and SimpleSpeak, "|" inside of sets is handled at the mrow level, same for 'sets' + - with: + variables: [DefaultToGiven: "count(preceding-sibling::*)=1 and count(following-sibling::*)=1 and ../../../*[1][.='P']"] # P(A|B) + replace: + - test: + - if: "$SpeechStyle != 'ClearSpeak'" + then_test: + if: "$DefaultToGiven" + then: [t: "given"] + else: [t: "vertical line"] + - else_if: "not(preceding-sibling::*) or not(following-sibling::*)" + then: [t: "vertical line"] + - else_if: "$ClearSpeak_VerticalLine = 'SuchThat'" + then: [t: "such that"] + - else_if: "$ClearSpeak_VerticalLine = 'Given' or $DefaultToGiven" + then: [t: "given"] + - else: [t: "divides"] + - "~": [t: "tilde"] # 0xff5e + - "¬": [t: "not"] # 0xffe2 + - "←": [t: "left arrow"] # 0xffe9 + - "↑": [t: "up arrow"] # 0xffea + - "→": [t: "right arrow"] # 0xffeb + - "↓": [t: "down arrow"] # 0xffec + - "": [t: "unknown or missing object"] # 0xfffc + - "�": [t: "unknown or missing character"] # 0xfffd + + - "🣑": [t: "is in equilibrium with"] # 0x1F8D1 + - "🣒": [t: "is in equilibrium biased to the right with"] # 0x1F8D2 + - "🣓": [t: "is in equilibrium biased to the left with"] # 0x1F8D3 + +# MathJax v4 has adopted these PUA values for some partial chem bonds that aren't in Unicode + - "\uE410": [t: "partial bond "] # 0xe410 + - "\uE411": [t: "double partial bond "] # 0xe411 + - "\uE412": [t: "triple partial bond "] # 0xe412 + +# MathJax v4 also adopted these PUA values for some arrows thar are in Unicode +# Hopefully these will be exported properly in future versions of MathJax + - "\uE428": [spell: "'⟵'"] # 0xe428 defer to def of arrow + - "\uE429": [spell: "'⟶'"] # 0xe429 defer to def of arrow + - "\uE42A": [spell: "'⟷'"] # 0xe42a defer to def of arrow + - "\uE408": [spell: "'🣑'"] # 0xe408 defer to def of arrow + - "\uE409": [spell: "'🣒'"] # 0xe409 defer to def of arrow + - "\uE40A": [spell: "'🣓'"] # 0xe40a defer to def of arrow + - "\uE42B": [spell: "'⇄'"] # 0xe42b defer to def of arrow + - "\uE42C": [spell: "'←'"] # 0xe42c defer to def of arrow + - "\uE42D": [spell: "'→'"] # 0xe42d defer to def of arrow + - "\uE42E": [spell: "'⇄'"] # 0xe42e defer to def of arrow diff --git a/Rules/Languages/hu/unicode.yaml b/Rules/Languages/hu/unicode.yaml new file mode 100644 index 000000000..7232b56ed --- /dev/null +++ b/Rules/Languages/hu/unicode.yaml @@ -0,0 +1,576 @@ +--- + # 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": + - test: + if: "$TTS='none'" + then: [t: "eigh"] # long "a" sound in all speech engines I tested (espeak, MS SAPI, eloquence, + else: [spell: "'a'"] # AWS Polly, ReadSpeaker, NaturalReader, google cloud, nuance, ibm watson) + - "b-z": + - test: + if: "$TTS='none'" + then: [t: "."] + 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": + - 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: "cap"] + else: [x: "$SpeechOverrides_CapitalLetters"] + - pitch: + value: "$CapitalLetters_Pitch" + replace: + - test: + if: "$TTS='none'" + then: [t: "eigh"] + else: [spell: "'a'"] + + - "B-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: "cap"] + 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('.', 'BCDEFGHIJKLMNOPQRSTUVWXYZ', 'bcdefghijklmnopqrstuvwxyz')"] + + - "0-9": [t: "."] + + - " ": [t: " "] # 0x20 + + - "!": # 0x21 + - test: + if: "ancestor-or-self::*[contains(@data-intent-property, ':literal:')]" + then_test: + if: "$Verbosity = 'Terse'" + then: [t: "bang"] # 0x21 + else: [t: "exclamation point"] # 0x21 + else: [t: "factorial"] # 0x21 + + - "\"": [t: "quotation mark"] # 0x22 + - "#": [t: "number"] # 0x23 + - "$": [t: "dollars"] # 0x24 + - "%": [t: "percent"] # 0x25 + - "&": [t: "ampersand"] # 0x26 + - "'": [t: "apostrophe"] # 0x27 + - "(": # 0x28 + - test: + if: $SpeechStyle = 'ClearSpeak' or $SpeechStyle = 'SimpleSpeak' + then_test: + if: "$Verbosity='Terse'" + then: [t: "open"] # 0x28 + else: [t: "open paren"] # 0x28 + else: [t: "left paren"] # 0x28 + - ")": # 0x29 + - test: + if: $SpeechStyle = 'ClearSpeak' or $SpeechStyle = 'SimpleSpeak' + then_test: + if: "$Verbosity='Terse'" + then: [t: "close"] # 0x29 + else: [t: "close paren"] # 0x29 + else: [t: "right paren"] # 0x29 + + - "*": # 0x2a + test: + if: "parent::*[name(.)='msup' or name(.)='msubsup' or name(.)='skip-super']" + then: [t: "star"] # 0x2a + else: [t: "times"] # 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][.='…'] " + then: + - t: "comma" # (en: 'comma', google translation) + - test: + if: "$Verbosity != Terse" + then: [pause: short] + # else silent + + - "-": [t: "minus"] # 0x2d + - ".": # 0x2e + - test: + if: "parent::*[1][self::m:mn]" + then: [t: "point"] + else: [t: "dot"] + - "/": # 0x2f + - test: + if: "ancestor-or-self::*[contains(@data-intent-property, ':literal:')]" + then: [t: "slash"] # 0x2f + else: [t: "divided by"] # 0x2f + + - ":": [t: "colon"] # 0x3a + - ";": [t: "semicolon"] # 0x3b + - "<": # 0x3c + - test: + if: "$Verbosity!='Terse'" + then: [t: "is"] + - t: "less than" + - "=": # 0x3d + - test: + if: "$Verbosity!='Terse'" + then: [t: "is equal to"] + else: [t: "equals"] + + - ">": # 0x3e + - test: + if: "$Verbosity!='Terse'" + then: [t: "is"] + - t: "greater than" + - "?": [t: "question mark"] # 0x3f + - "@": [t: "at sign"] # 0x40 + - "[": # 0x5b + - test: + if: $SpeechStyle = 'ClearSpeak' or $SpeechStyle = 'SimpleSpeak' + then: [t: "open bracket"] + else: [t: "left bracket"] + - "\\": [t: "back slash"] # 0x5c + - "]": # 0x5d + - test: + if: $SpeechStyle = 'ClearSpeak' or $SpeechStyle = 'SimpleSpeak' + then: [t: "close bracket"] + else: [t: "right bracket"] + - "^": # 0x5e + - test: + if: "parent::m:modified-variable or parent::m:mover" + then: [t: "hat"] + else: [t: "caret"] + - "_": [t: "under bar"] # 0x5f + - "`": [t: "grave"] # 0x60 + - "{": # 0x7b + - test: + if: $SpeechStyle = 'ClearSpeak' or $SpeechStyle = 'SimpleSpeak' + then: [t: "open brace"] + else: [t: "left brace"] + - "|": # 0x7c + # note: for ClearSpeak and SimpleSpeak, "|" inside of sets is handled at the mrow level, same for 'sets' + - with: + variables: [DefaultToGiven: "count(preceding-sibling::*)=1 and count(following-sibling::*)=1 and ../../../*[1][.='P']"] # P(A|B) + replace: + - test: + - if: "ancestor-or-self::*[contains(@data-intent-property, ':literal:')]" + then: [t: "vertical line"] + - else_if: "$SpeechStyle != 'ClearSpeak'" + then_test: + - if: "$DefaultToGiven" + then: [t: "given"] + - else_if: "preceding-sibling::*[1][self::m:mn and not(contains(., $DecimalSeparators))] and + following-sibling::*[1][self::m:mn and not(contains(., $DecimalSeparators))]" + then: [t: "divides"] + else: [t: "vertical line"] + - else_if: "not(preceding-sibling::*) or not(following-sibling::*)" + then: [t: "vertical line"] + - else_if: "$ClearSpeak_VerticalLine = 'SuchThat'" + then: [t: "such that"] + - else_if: "$ClearSpeak_VerticalLine = 'Given' or $DefaultToGiven" + then: [t: "given"] + - else: [t: "divides"] + + - "}": # 0x7d + - test: + if: $SpeechStyle = 'ClearSpeak' or $SpeechStyle = 'SimpleSpeak' + then: [t: "close brace"] + else: [t: "right brace"] + + - "~": [t: "tilde"] # 0x7e + - " ": # 0xa0 + - test: + # could be mtext in mtd or mtext in an mrow that is a concatenation of mtd's. Is there a better solution? + if: "@data-empty-in-2D and not(ancestor::*[self::m:piecewise or self::m:system-of-equations or self::m:lines])" + then: [t: "empty"] # want to say something for fraction (etc) with empty child + else: [t: ""] + + - "¬": [t: "not"] # 0xac + - "°": [t: "degrees"] # 0xb0 + - "±": [t: "plus or minus"] # 0xb1 + - "´": [t: "acute"] # 0xb4 + - "·": # 0xB7 + - test: + if: "ancestor-or-self::*[contains(@data-intent-property, ':literal:')] or not($SpeechStyle = 'ClearSpeak' and $ClearSpeak_MultSymbolDot = 'Auto')" + then: [t: "dot"] + else: [t: "times"] + - "×": # 0xd7 + - test: + if: "$SpeechStyle = 'ClearSpeak'" + then_test: + - if: "$ClearSpeak_MultSymbolX = 'Auto'" + then: [t: "times"] + - else_if: "$ClearSpeak_MultSymbolX = 'By'" + then: [t: "by"] + else: [t: "cross"] + else_test: + if: "ancestor-or-self::*[contains(@data-intent-property, ':literal:')]" + then: [t: "cross"] + else: [t: "times"] + + - "÷": [t: "divided by"] # 0xf7 + - "̀": [t: "grave accent embellishment"] # 0x300 + - "́": [t: "acute accent embellishment"] # 0x301 + - "̂": [t: "circumflex accent embellishment"] # 0x302 + - "̃": [t: "tilde embellishment"] # 0x303 + - "̄": [t: "macron embellishment"] # 0x304 + - "̅": [t: "overbar embellishment"] # 0x305 + - "̆": [t: "breve"] # 0x306 + - "̇": [t: "dot above embellishment"] # 0x307 + + # 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: "cap"] + 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 + - "κ": [t: "kappa"] # 0x3ba + - "λ": [t: "lambda"] # 0x3bb + - "μ": [t: "mu"] # 0x3bc + - "ν": [t: "nu"] # 0x3bd + - "ξ": [t: "zai"] # 0x3be + - "ο": [t: "omicron"] # 0x3bf + - "π": [t: "pi"] # 0x3c0 + - "ρ": [t: "rho"] # 0x3c1 + - "ς": [t: "final sigma"] # 0x3c2 + - "σ": [t: "sigma"] # 0x3c3 + - "τ": [t: "tau"] # 0x3c4 + - "υ": [t: "upsilon"] # 0x3c5 + - "φ": [t: "phi"] # 0x3c6 + - "χ": [t: "chi"] # 0x3c7 + - "ψ": [t: "psi"] # 0x3c8 + - "ω": [t: "omega"] # 0x3c9 + - "ϕ": [t: "phi"] # 0x3d5 + - "ϖ": [t: "pi"] # 0x3d6 + - "ϵ": [t: "epsilon"] # 0x3f5 + - "϶": [t: "reversed epsilon"] # 0x3f6 + + - "–": [t: "en dash"] # 0x2013 + - "—": [t: "em dash"] # 0x2014 + - "―": [t: "horizontal bar"] # 0x2015 + - "‖": [t: "double vertical line"] # 0x2016 + - "…": # 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][.='…']" + then: [t: "dot dot dot"] + else_test: # must have $ClearSpeak_Ellipses = 'AndSoOn' + if: "count(following-sibling::*) = 0" + then: [t: "and so on"] + else: [t: "and so on up to"] + + - "⁡": # 0x2061 + - test: + # skip saying "of" when Terse and a trig function, when it is a shape (does this happen?), or we are in :literal mode + if: "not( + ( $Verbosity='Terse' or ($SpeechStyle = 'ClearSpeak' and IsNode(following-sibling::*[1],'simple')) and + preceding-sibling::*[1][IfThenElse($SpeechStyle='ClearSpeak', + IsInDefinition(., 'ClearSpeakTrigFunctionNames'), + IsInDefinition(., 'TrigFunctionNames') )] + ) or + preceding-sibling::*[1][IsInDefinition(., 'GeometryShapes')] or + (@data-changed='added' and ancestor-or-self::*[contains(@data-intent-property, ':literal:')]) + )" + then: [t: "of"] + - "⁢": [t: ""] # 0x2062 + - "⁣": [t: ""] # 0x2063 + - "⁤": [t: "and"] # 0x2064 + - "′": [t: "prime"] # 0x2032 + - "″": [t: "double prime"] # 0x2033 + - "‴": [t: "triple prime"] # 0x2034 + + - "ℂℕℚℝℤ": # here we rely on this running through the table again to speak "cap xxx" + - t: "double-struck" + - spell: "translate('.', 'ℂℕℚℝℤ', 'CNQRZ')" + + - "℃": [t: "degrees celsius"] # 0x2103 + - "℉": [t: "degrees fahrenheit"] # 0x2109 + - "ℋℛℓ": # 0x210b + - t: "script" + - spell: "translate('.', 'ℋℛℓ', 'HRl')" + - "ℎ": [t: "planck constant"] # 0x210e + - "ℜ": # 0x211c + - t: "fraktur" + - spell: "'R'" + + - "Ω": [t: "ohms"] # 0x2126 + - "K": [t: "kelvin"] # 0x212a + - "Å": [t: "angstroms"] # 0x212b + - "ⅆⅇⅈⅉ": # 0x2146-9 + - t: "double-struck italic" + - spell: "translate('.', 'ⅆⅇⅈⅉ', 'deij')" + + - "←": [t: "left arrow"] # 0x2190 + - "↑": [t: "up arrow"] # 0x2191 + - "→": # 0x2192 + - test: + if: "ancestor::*[2][self::m:limit]" + then: [t: "approaches"] + else: [t: "right arrow"] + + - "↓": [t: "down arrow"] # 0x2193 + - "⇒": [t: "right double arrow"] # 0x21d2 + - "∀": [t: "for all"] # 0x2200 + - "∂": # 0x2202 + - test: + if: "$Verbosity='Terse'" + then: [t: "partial"] + else: [t: "partial derivative"] + - "∃": [t: "there exists"] # 0x2203 + - "∄": [t: "there does not exist"] # 0x2204 + - "∅": [t: "empty set"] # 0x2205 + - "∆": # 0x2206 + - test: + if: "$Verbosity!='Terse'" + then: [t: "the"] + - t: "laplacian of" + - "∈": # 0x2208 + - test: + if: "$SpeechStyle != 'ClearSpeak'" + then: + - test: + if: "$Verbosity!='Terse' and not(ancestor::*[self::m:set])" # "the set x is an element of ..." sounds bad" + then: [t: "is"] + - t: "an element of" + # 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: "member of"] + - else_if: $ClearSpeak_SetMemberSymbol = 'Element' + then: [t: "element of"] + - else: [t: "belonging to"] # $ClearSpeak_SetMemberSymbol = 'Belongs' + else_test: + - if: $ClearSpeak_SetMemberSymbol = 'Auto' or $ClearSpeak_SetMemberSymbol = 'Member' + then: [t: "is a member of"] + - else_if: $ClearSpeak_SetMemberSymbol = 'Element' + then: [t: "is an element of"] + - else_if: $ClearSpeak_SetMemberSymbol = 'In' + then: [t: "is in"] + - else: [t: "belongs to"] # $ClearSpeak_SetMemberSymbol = 'Belongs' + - "∉": # 0x2209 + # rule is identical to 0x2208 + - test: + if: "$SpeechStyle != 'ClearSpeak'" + then: + - test: + if: "$Verbosity!='Terse'" + then: [t: "is"] + - t: "not an element of" + # 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: "not in"] + - else_if: $ClearSpeak_SetMemberSymbol = 'Member' + then: [t: "not member of"] + - else_if: $ClearSpeak_SetMemberSymbol = 'Element' + then: [t: "not element of"] + - else: [t: "not belonging to"] # $ClearSpeak_SetMemberSymbol = 'Belongs' + else_test: + - if: $ClearSpeak_SetMemberSymbol = 'Auto' or $ClearSpeak_SetMemberSymbol = 'Member' + then: [t: "is not a member of"] + - else_if: $ClearSpeak_SetMemberSymbol = 'Element' + then: [t: "is not an element of"] + - else_if: $ClearSpeak_SetMemberSymbol = 'In' + then: [t: "is not in"] + - else: [t: "does not belong to"] # $ClearSpeak_SetMemberSymbol = 'Belongs' + - "∊": # 0x220a + - test: + if: "$SpeechStyle != 'ClearSpeak'" + then: + - test: + if: "$Verbosity!='Terse' and not(ancestor::*[self::m:set])" # "the set x is an element of ..." sounds bad" + then: [t: "is"] + - t: "an element of" + # 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: "member of"] + - else_if: $ClearSpeak_SetMemberSymbol = 'Element' + then: [t: "element of"] + - else: [t: "belonging to"] # $ClearSpeak_SetMemberSymbol = 'Belongs' + else_test: + - if: $ClearSpeak_SetMemberSymbol = 'Auto' or $ClearSpeak_SetMemberSymbol = 'Member' + then: [t: "is a member of"] + - else_if: $ClearSpeak_SetMemberSymbol = 'Element' + then: [t: "is an element of"] + - else_if: $ClearSpeak_SetMemberSymbol = 'In' + then: [t: "is in"] + - else: [t: "belongs to"] # $ClearSpeak_SetMemberSymbol = 'Belongs' + - "∏": [t: "product"] # 0x220f + - "∐": [t: "co-product"] # 0x2210 + - "∑": [t: "sum"] # 0x2211 + - "−": [t: "minus"] # 0x2212 + - "∓": [t: "minus or plus"] # 0x2213 + - "∗": [t: "times"] # 0x2217 + - "∘": [t: "composed with"] # 0x2218 + - "√": # 0x221a + - test: + if: "$Verbosity!='Terse'" + then: [t: "the"] + - t: "square root of" + - "∝": # 0x221d + - test: + if: "$Verbosity!='Terse'" + then: [t: "is"] + - t: "proportional to" + - "∞": [t: "infinity"] # 0x221e + - "∟": [t: "right angle"] # 0x221f + - "∠": [t: "angle"] # 0x2220 + - "∡": [t: "measured angle"] # 0x2221 + - "∣": [t: "divides"] # 0x2223 + - "∤": [t: "does not divide"] # 0x2224 + - "∥": # 0x2225 + - test: + if: "ancestor-or-self::*[contains(@data-intent-property, ':literal:')]" + then: [t: "double vertical line"] + else: + - test: + if: "$Verbosity!='Terse'" + then: [t: "is"] + - t: "parallel to" + - "∦": # 0x2226 + - test: + if: "$Verbosity!='Terse'" + then: [t: "is"] + - t: "not parallel to" + - "∧": [t: "and"] # 0x2227 + - "∨": [t: "or"] # 0x2228 + - "∩": [t: "intersection"] # 0x2229 + - "∪": [t: "union"] # 0x222a + - "∫": [t: "integral"] # 0x222b + - "∬": [t: "double integral"] # 0x222c + - "∭": [t: "triple integral"] # 0x222d + - "∮": [t: "contour integral"] # 0x222e + - "∶": # 0x2236 + - test: + if: "$Verbosity!='Terse'" + then: [t: "is"] + - t: "to" + - "∷": [t: "as"] # 0x2237 + - "∼": [t: "varies with"] # 0x223c + - "∽": [t: "reversed tilde"] # 0x223d + - "∾": # 0x223e + - test: + if: "$Verbosity!='Terse'" + then: [t: "is"] + - t: "most positive" + - "∿": [t: "sine wave"] # 0x223f + - "≠": # 0x2260 + - test: + if: "$Verbosity!='Terse'" + then: [t: "is"] + - t: "not equal to" + - "≡": # 0x2261 + - test: + if: "$Verbosity!='Terse'" + then: [t: "is"] + - t: "identical to" + - "≤": # 0x2264 + - test: + if: "$Verbosity!='Terse'" + then: [t: "is"] + - t: "less than or equal to" + - "≥": # 0x2265 + - test: + if: "$Verbosity!='Terse'" + then: [t: "is"] + - t: "greater than or equal to" + - "≦": [t: "less than over equal to"] # 0x2266 + - "≧": [t: "greater than over equal to"] # 0x2267 + - "≺": [t: "precedes"] # 0x227a + - "≻": [t: "succeeds"] # 0x227b + - "⊂": # 0x2282 + - test: + if: "$Verbosity!='Terse'" + then: [t: "is a"] + - t: "subset of" + - "⊃": # 0x2283 + - test: + if: "$Verbosity!='Terse'" + then: [t: "is a"] + - t: "superset of" + - "⊄": # 0x2284 + - test: + if: "$Verbosity!='Terse'" + then: [t: "is"] + - t: "not a subset of" + - "⊅": # 0x2285 + - test: + if: "$Verbosity!='Terse'" + then: [t: "is"] + - t: "not a superset of" + - "⊆": # 0x2286 + - test: + if: "$Verbosity!='Terse'" + then: [t: "is a"] + - t: "subset of or equal to" + - "⊇": # 0x2287 + - test: + if: "$Verbosity!='Terse'" + then: [t: "is a"] + - t: "superset of or equal to" diff --git a/tests/Languages/hu.rs b/tests/Languages/hu.rs new file mode 100644 index 000000000..45bce3f9c --- /dev/null +++ b/tests/Languages/hu.rs @@ -0,0 +1,34 @@ +#![allow(non_snake_case)] + +mod ClearSpeak { + mod functions; + mod large_ops; + mod menclose; + mod mfrac; + mod mroot; + mod msup; + mod sets; + mod symbols_and_adornments; + mod multiline; +} + +mod SimpleSpeak { + mod functions; + mod large_ops; + // mod menclose; + mod mfrac; + // mod mroot; + mod msup; + mod sets; + mod geometry; + mod linear_algebra; + mod multiline; + mod subscripts; +} +mod shared; +mod units; +mod chemistry; +mod alphabets; +mod intent; +mod mtable; + diff --git a/tests/Languages/hu/ClearSpeak/functions.rs b/tests/Languages/hu/ClearSpeak/functions.rs new file mode 100644 index 000000000..ec54ad232 --- /dev/null +++ b/tests/Languages/hu/ClearSpeak/functions.rs @@ -0,0 +1,605 @@ +/// Tests for: +/// * functions including trig functions, logs, and functions to powers +/// * implied times/functional call and explicit times/function call +/// * parens +/// These are all intertwined, so they are in one file +use crate::common::*; +use anyhow::Result; + +// AI generated +#[test] +fn trig_names() -> Result<()> { + let expr = " + sinx+ + cosy+ + tanz+ + secα+ + cscϕ+ + cotφ + "; + test("hu", "ClearSpeak", expr, "sine x plus cosine y plus tangent z plus secant alpha, plus cosecant phi, plus cotangent phi")?; + return Ok(()); + +} + +// AI generated +#[test] +fn hyperbolic_trig_names() -> Result<()> { + let expr = " + sinhx+ + coshy+ + tanhz+ + sechα+ + cschϕ+ + cothφ + "; + test("hu", "ClearSpeak", expr, "hyperbolic sine of x, plus \ + hyperbolic cosine of y, plus \ + hyperbolic tangent of z, plus \ + hyperbolic secant of alpha, plus \ + hyperbolic cosecant of phi, plus \ + hyperbolic cotangent of phi")?; + return Ok(()); + +} + + +// AI generated +#[test] +fn inverse_trig() -> Result<()> { + let expr = "sin-1x"; + test("hu", "ClearSpeak", expr, "inverse sine of x")?; + return Ok(()); + +} + +// AI generated +#[test] +fn inverse_trig_trig_inverse() -> Result<()> { + let expr = "tan-1x"; + test_ClearSpeak("hu", "ClearSpeak_Trig", "TrigInverse",expr, + "tangent inverse of x")?; + return Ok(()); + +} + +// AI generated +#[test] +fn inverse_trig_arc() -> Result<()> { + let expr = "cosh-1x"; + test_ClearSpeak("hu", "ClearSpeak_Trig", "ArcTrig",expr, + "arc hyperbolic cosine of x")?; + return Ok(()); + +} + +// AI generated +#[test] +fn trig_squared() -> Result<()> { + let expr = "sin2x"; + test("hu", "ClearSpeak", expr, "sine squared of x")?; + return Ok(()); + +} + +// AI generated +#[test] +fn trig_cubed() -> Result<()> { + let expr = "tan3x"; + test("hu", "ClearSpeak", expr, "tangent cubed of x")?; + return Ok(()); + +} + +// AI generated +#[test] +fn trig_fourth() -> Result<()> { + let expr = "sec4x"; + test("hu", "ClearSpeak", expr, "the fourth power of, secant of x")?; + return Ok(()); + +} + + +// AI generated +#[test] +fn trig_power_other() -> Result<()> { + let expr = "sinh>n-1x"; + test("hu", "ClearSpeak", expr, "the n minus 1 power of, hyperbolic sine of x")?; + return Ok(()); + +} + +// AI generated +#[test] +fn simple_log() -> Result<()> { + let expr = " logx "; + test("hu", "ClearSpeak", expr, "log x")?; + return Ok(()); + +} + +// AI generated +#[test] +fn normal_log() -> Result<()> { + let expr = "log(x+y)"; + test("hu", "ClearSpeak", expr, "the log of, open paren x plus y, close paren")?; + return Ok(()); + +} + +// AI generated +#[test] +fn simple_log_with_base() -> Result<()> { + let expr = " logbx "; + test("hu", "ClearSpeak", expr, "the log base b, of x")?; + return Ok(()); + +} + +// AI generated +#[test] +fn normal_log_with_base() -> Result<()> { + let expr = "logb(x+y)"; + test("hu", "ClearSpeak", expr, "the log base b, of, open paren x plus y, close paren")?; + return Ok(()); + +} + +// AI generated +#[test] +fn simple_ln() -> Result<()> { + let expr = " lnx "; + test("hu", "ClearSpeak", expr, "l n x")?; + return Ok(()); + +} + +// AI generated +#[test] +fn normal_ln() -> Result<()> { + let expr = "ln(x+y)"; + test("hu", "ClearSpeak", expr, "the l n of, open paren x plus y, close paren")?; + return Ok(()); + +} + + +// AI generated +#[test] +fn simple_natural_log() -> Result<()> { + let expr = " lnx "; + test_ClearSpeak("hu", "ClearSpeak_Log", "LnAsNaturalLog",expr, + "natural log x")?; + return Ok(()); + +} + + +// AI generated +#[test] +fn natural_log() -> Result<()> { + let expr = "ln(x+y)"; + test_ClearSpeak("hu", "ClearSpeak_Log", "LnAsNaturalLog",expr, + "the natural log of, open paren x plus y, close paren")?; + return Ok(()); + +} + + +// AI generated +#[test] +fn explicit_function_call_with_parens() -> Result<()> { + let expr = "t(x)"; + test("hu", "ClearSpeak", expr, "t of x")?; + return Ok(()); + +} + + +// AI generated +#[test] +fn explicit_times_with_parens() -> Result<()> { + let expr = "t(x)"; + test("hu", "ClearSpeak", expr, "t times x")?; + return Ok(()); + +} + +// AI generated +#[test] +fn explicit_function_call() -> Result<()> { + let expr = "tx"; + test("hu", "ClearSpeak", expr, "t of x")?; + return Ok(()); + +} + +// AI generated +#[test] +fn explicit_times() -> Result<()> { + let expr = "tx"; + test("hu", "ClearSpeak", expr, "t x")?; + return Ok(()); + +} + + +// AI generated +#[test] +fn test_functions_none_pref() -> Result<()> { + let expr = " + log(x+y) + + + f(x+y) + "; + test_ClearSpeak("hu", "ClearSpeak_Functions", "None",expr, + "the log of, open paren x plus y, close paren; plus, f times, open paren x plus y, close paren")?; + return Ok(()); + +} + +// AI generated +#[test] +fn test_functions_none_pref_multiple_args() -> Result<()> { + let expr = " + B ( 2,6 ) + "; + test_ClearSpeak("hu", "ClearSpeak_Functions", "None",expr, + "cap b times, open paren 2 comma, 6, close paren")?; + return Ok(()); + +} + + +/* + * Tests for times + */ +// AI generated +#[test] +fn no_times_binomial() -> Result<()> { + let expr = "x y"; + test("hu", "ClearSpeak", expr, "x y")?; + return Ok(()); + +} + +// AI generated +#[test] +fn times_following_paren() -> Result<()> { + let expr = " + 2 + ( 3 ) + "; + test("hu", "ClearSpeak", expr, "2 times 3")?; + return Ok(()); + +} + +// AI generated +#[test] +fn times_preceding_paren() -> Result<()> { + let expr = " + ( 2 ) + 3 + "; + test("hu", "ClearSpeak", expr, "2 times 3")?; + return Ok(()); + +} + +// AI generated +#[test] +fn times_sqrt() -> Result<()> { + let expr = " + a + b + = + ab + "; + test("hu", "ClearSpeak", expr, "the square root of eigh; times the square root of b; is equal to, the square root of eigh b")?; + return Ok(()); + +} + +// AI generated +#[test] +fn more_implied_times() -> Result<()> { + let expr = " + + + + ( + 2x + ) + 2 + + + "; + test_ClearSpeak("hu", "ClearSpeak_ImpliedTimes", "MoreImpliedTimes",expr, + "open paren 2 times x, close paren squared")?; + return Ok(()); + +} + +// AI generated +#[test] +fn explicit_times_more_implied_times() -> Result<()> { + let expr = "tx"; + test_ClearSpeak("hu", "ClearSpeak_ImpliedTimes", "MoreImpliedTimes",expr, "t times x")?; + return Ok(()); + +} + +// AI generated +#[test] +fn explicit_times_none_simple_right() -> Result<()> { + let expr = "2[3 ]"; + test_ClearSpeak("hu", "ClearSpeak_ImpliedTimes", "None", + expr, "2, open bracket 3 close bracket")?; + return Ok(()); + +} + +// AI generated +#[test] +fn explicit_times_none_simple_left() -> Result<()> { + let expr = "(21)x"; + test_ClearSpeak("hu", "ClearSpeak_ImpliedTimes", "None", + expr, "open paren 2 minus 1, close paren; x")?; + return Ok(()); + +} + +// AI generated +#[test] +fn explicit_times_none_superscript() -> Result<()> { + let expr = " + f(x)= +x +2 + +( + +x+1 +) + "; + test_ClearSpeak_prefs("hu", + vec![("ClearSpeak_ImpliedTimes", "None"), ("ClearSpeak_Functions", "None")], + expr, "f open paren x close paren; is equal to; x squared, open paren x plus 1, close paren")?; + return Ok(()); + +} + +/* + * Tests for parens + */ + #[test] + fn no_parens_number() -> Result<()> { + let expr = " + ( + 25 + ) + x + "; + test("hu", "ClearSpeak", expr, "25 times x")?; + return Ok(()); + + } + + #[test] + fn no_parens_monomial() -> Result<()> { + let expr = " + b + ( + xy + ) + "; + test("hu", "ClearSpeak", expr, "b, open paren x y close paren")?; + return Ok(()); + + } + + #[test] + fn no_parens_negative_number() -> Result<()> { + let expr = " + 2+ + ( + 2 + ) + "; + test("hu", "ClearSpeak", expr, "2 plus negative 2")?; + return Ok(()); + + } + + + #[test] + fn no_parens_negative_number_with_var() -> Result<()> { + let expr = " + ( + 2x + ) + + +1 + "; + test("hu", "ClearSpeak", expr, "negative 2 x, plus 1")?; + return Ok(()); + + } + + #[test] + fn parens_superscript() -> Result<()> { + let expr = " + + + + ( + 2x + ) + 2 + + + "; + test("hu", "ClearSpeak", expr, "open paren 2 x close paren squared")?; + return Ok(()); + + } + + #[test] + fn no_parens_fraction() -> Result<()> { + let expr = " + 2 + + + + ( + 12 + ) + "; + test("hu", "ClearSpeak", expr, "2 plus 1 half")?; + return Ok(()); + + } + + + // Tests for the ten types of intervals in ClearSpeak + #[test] + fn parens_interval_open_open() -> Result<()> { + let expr = " + ( + c,d + ) + "; + test_ClearSpeak("hu", "ClearSpeak_Paren", "Interval",expr, + "the interval from c to d, not including c or d")?; + return Ok(()); + +} + +// AI generated +#[test] + fn parens_interval_closed_open() -> Result<()> { + let expr = " + [ + c,d + ) + "; + test_ClearSpeak("hu", "ClearSpeak_Paren", "Interval ",expr, + "the interval from c to d, including c but not including d")?; + return Ok(()); + +} + + +// AI generated +#[test] +fn parens_interval_open_closed() -> Result<()> { + let expr = " + ( + c,d + ] + "; + test_ClearSpeak("hu", "ClearSpeak_Paren", "Interval ",expr, + "the interval from c to d, not including c but including d")?; + return Ok(()); + +} + + +// AI generated +#[test] +fn parens_interval_closed_closed() -> Result<()> { + let expr = " + [ + c,d + ] +"; +test_ClearSpeak("hu", "ClearSpeak_Paren", "Interval ",expr, +"the interval from c to d, including c and d")?; +return Ok(()); + +} + + #[test] + fn parens_interval_neg_infinity_open_open() -> Result<()> { + let expr = " + ( + - ,d + ) + "; + test_ClearSpeak("hu", "ClearSpeak_Paren", "Interval ",expr, + "the interval from negative infinity to d, not including d")?; + return Ok(()); + +} + + #[test] + fn parens_interval_neg_infinity_closed_open() -> Result<()> { + let expr = " + ( + - ,d + ] + "; + test_ClearSpeak("hu", "ClearSpeak_Paren", "Interval ",expr, + "the interval from negative infinity to d, including d")?; + return Ok(()); + +} + + +// AI generated +#[test] +fn parens_interval_open_open_infinity() -> Result<()> { + let expr = " + ( + c, + ) + "; + test_ClearSpeak("hu", "ClearSpeak_Paren", "Interval ",expr, + "the interval from c to infinity, not including c")?; + return Ok(()); + +} + + +// AI generated +#[test] +fn parens_interval_closed_open_infinity() -> Result<()> { + let expr = " + [ + c, + ) + "; + test_ClearSpeak("hu", "ClearSpeak_Paren", "Interval ",expr, +"the interval from c to infinity, including c")?; +return Ok(()); + +} + +// AI generated +#[test] +fn parens_interval_neg_infinity_to_infinity() -> Result<()> { + let expr = " + ( + - , + ) + "; + test_ClearSpeak("hu", "ClearSpeak_Paren", "Interval ",expr, + "the interval from negative infinity to infinity")?; + return Ok(()); + +} + +// AI generated +#[test] +fn parens_interval_neg_infinity_to_pos_infinity() -> Result<()> { + let expr = " + ( + - ,+ + ) + "; + test_ClearSpeak("hu", "ClearSpeak_Paren", "Interval ",expr, + "the interval from negative infinity to positive infinity")?; + return Ok(()); + +} diff --git a/tests/Languages/hu/ClearSpeak/large_ops.rs b/tests/Languages/hu/ClearSpeak/large_ops.rs new file mode 100644 index 000000000..6e8da7fab --- /dev/null +++ b/tests/Languages/hu/ClearSpeak/large_ops.rs @@ -0,0 +1,252 @@ +use crate::common::*; +use anyhow::Result; + +// AI generated +#[test] +fn sum_both() -> Result<()> { + let expr = " + + + n=1 + 10 + + n + "; + test("hu", "ClearSpeak", expr, "the sum from n is equal to 1, to 10 of n")?; + return Ok(()); + +} + +// AI generated +#[test] +fn sum_under() -> Result<()> { + let expr = " + + + S + + i + "; + test("hu", "ClearSpeak", expr, "the sum over cap s of i")?; + return Ok(()); + +} +// AI generated +#[test] +fn sum_both_msubsup() -> Result<()> { + let expr = " + + + n=1 + 10 + + n + "; + test("hu", "ClearSpeak", expr, "the sum from n is equal to 1, to 10 of n")?; + return Ok(()); + +} + +// AI generated +#[test] +fn sum_sub() -> Result<()> { + let expr = " + + + S + + i + "; + test("hu", "ClearSpeak", expr, "the sum over cap s of i")?; + return Ok(()); + +} + +// AI generated +#[test] +fn sum() -> Result<()> { + let expr = " + + ai + "; + test("hu", "ClearSpeak", expr, "the sum of eigh sub i")?; + return Ok(()); + +} + +// AI generated +#[test] +fn product_both() -> Result<()> { + let expr = " + + + n=1 + 10 + + n + "; + test("hu", "ClearSpeak", expr, "the product from n is equal to 1, to 10 of n")?; + return Ok(()); + +} + +// AI generated +#[test] +fn product_under() -> Result<()> { + let expr = " + + + S + + i + "; + test("hu", "ClearSpeak", expr, "the product over cap s of i")?; + return Ok(()); + +} + +// AI generated +#[test] +fn product() -> Result<()> { + let expr = " + + ai + "; + test("hu", "ClearSpeak", expr, "the product of eigh sub i")?; + return Ok(()); + +} + +// AI generated +#[test] +fn intersection_both() -> Result<()> { + let expr = " + + + i=1 + 10 + + Si + "; + test("hu", "ClearSpeak", expr, "the intersection from i is equal to 1, to 10 of; cap s sub i")?; + return Ok(()); + +} + +// AI generated +#[test] +fn intersection_under() -> Result<()> { + let expr = " + + + C + + Si + "; + test("hu", "ClearSpeak", expr, "the intersection over cap c of, cap s sub i")?; + return Ok(()); + +} + +// AI generated +#[test] +fn intersection() -> Result<()> { + let expr = " + + Si + "; + test("hu", "ClearSpeak", expr, "the intersection of cap s sub i")?; + return Ok(()); + +} + +// AI generated +#[test] +fn union_both() -> Result<()> { + let expr = " + + + i=1 + 10 + + Si + "; + test("hu", "ClearSpeak", expr, "the union from i is equal to 1, to 10 of; cap s sub i")?; + return Ok(()); + +} + +// AI generated +#[test] +fn union_under() -> Result<()> { + let expr = " + + + C + + Si + "; + test("hu", "ClearSpeak", expr, "the union over cap c of, cap s sub i")?; + return Ok(()); + +} + +// AI generated +#[test] +fn union() -> Result<()> { + let expr = " + + Si + "; + test("hu", "ClearSpeak", expr, "the union of cap s sub i")?; + return Ok(()); + +} + +// AI generated +#[test] +fn integral_both() -> Result<()> { + let expr = " + + + + 0 + 1 + + f(x ) + + dx + "; + test("hu", "ClearSpeak", expr, "the integral from 0, to 1 of, f of x; d x")?; + return Ok(()); + +} + +// AI generated +#[test] +fn integral_under() -> Result<()> { + let expr = " + + + + + f(x ) + dx + "; + test("hu", "ClearSpeak", expr, "the integral over the real numbers of; f of x d x")?; + return Ok(()); + +} + +// AI generated +#[test] +fn integral() -> Result<()> { + let expr = " + + f(x ) + dx + "; + test("hu", "ClearSpeak", expr, "the integral of f of x d x")?; + return Ok(()); + +} \ No newline at end of file diff --git a/tests/Languages/hu/ClearSpeak/menclose.rs b/tests/Languages/hu/ClearSpeak/menclose.rs new file mode 100644 index 000000000..45f20fd07 --- /dev/null +++ b/tests/Languages/hu/ClearSpeak/menclose.rs @@ -0,0 +1,266 @@ +use crate::common::*; +use anyhow::Result; + +// AI generated +#[test] +fn menclose_actuarial() -> Result<()> { + let expr = " + 3+2i + "; + test("hu", "ClearSpeak", expr, "actuarial symbol, enclosing 3 plus 2 i end enclosure")?; + return Ok(()); + +} + +// AI generated +#[test] +fn menclose_box() -> Result<()> { + let expr = " + 3+2i + "; + test("hu", "ClearSpeak", expr, "box, circle, enclosing 3 plus 2 i end enclosure")?; + return Ok(()); + +} + +// AI generated +#[test] +fn menclose_left() -> Result<()> { + let expr = " + 32 + "; + test("hu", "ClearSpeak", expr, "line on left, enclosing 3 halves end enclosure")?; + return Ok(()); + +} + +// AI generated +#[test] +fn menclose_right() -> Result<()> { + let expr = " + 32 + "; + test("hu", "ClearSpeak", expr, "line on right, enclosing 3 halves end enclosure")?; + return Ok(()); + +} + +// AI generated +#[test] +fn menclose_top_bottom() -> Result<()> { + let expr = " + 32 + "; + test("hu", "ClearSpeak", expr, "line on top, bottom, enclosing 3 halves end enclosure")?; + return Ok(()); + +} + +// AI generated +#[test] +fn menclose_updiagonalstrike() -> Result<()> { + let expr = " + 32 + "; + test("hu", "ClearSpeak", expr, "up diagonal, cross out, enclosing 3 halves end enclosure")?; + return Ok(()); + +} + +// AI generated +#[test] +fn menclose_downdiagonalstrike() -> Result<()> { + let expr = " + 32 + "; + test("hu", "ClearSpeak", expr, "down diagonal, cross out, enclosing 3 halves end enclosure")?; + return Ok(()); + +} + +// AI generated +#[test] +fn menclose_cross_out() -> Result<()> { + let expr = " + 32 + "; + test("hu", "ClearSpeak", expr, "x, cross out, enclosing 3 halves end enclosure")?; + return Ok(()); + +} + +// AI generated +#[test] +fn menclose_vertical_horizontal_strike() -> Result<()> { + let expr = " + 32 + "; + test("hu", "ClearSpeak", expr, "vertical, horizontal, cross out, enclosing 3 halves end enclosure")?; + return Ok(()); + +} + +// AI generated +#[test] +fn menclose_leftarrow() -> Result<()> { + let expr = " + 32 + "; + test("hu", "ClearSpeak", expr, "left arrow, enclosing 3 halves end enclosure")?; + return Ok(()); + +} + +// AI generated +#[test] +fn menclose_right_up_down_arrow() -> Result<()> { + let expr = " + 32 + "; + test("hu", "ClearSpeak", expr, "up arrow, down arrow, right arrow, enclosing 3 halves end enclosure")?; + return Ok(()); + +} + +// AI generated +#[test] +fn menclose_northeastarrow() -> Result<()> { + let expr = " + 32 + "; + test("hu", "ClearSpeak", expr, "northeast arrow, enclosing 3 halves end enclosure")?; + return Ok(()); + +} + +// AI generated +#[test] +fn menclose_other_single_arrows() -> Result<()> { + let expr = " + 32 + "; + test("hu", "ClearSpeak", expr, "southeast arrow, southwest arrow, northwest arrow, enclosing 3 halves end enclosure")?; + return Ok(()); + +} + +// AI generated +#[test] +fn menclose_northwestsoutheastarrow() -> Result<()> { + let expr = " + 32 + "; + test("hu", "ClearSpeak", expr, "double ended down diagonal arrow, enclosing 3 halves end enclosure")?; + return Ok(()); + +} + +// AI generated +#[test] +fn menclose_other_double_arrows() -> Result<()> { + let expr = " + 32 + "; + test("hu", "ClearSpeak", expr, "double ended vertical arrow, double ended horizontal arrow, double ended up diagonal arrow, enclosing 3 halves end enclosure")?; + return Ok(()); + +} + +// AI generated +#[test] +fn menclose_madrub() -> Result<()> { + let expr = " + 32 + "; + test("hu", "ClearSpeak", expr, "arabic factorial symbol, enclosing 3 halves end enclosure")?; + return Ok(()); + +} + +// AI generated +#[test] +fn menclose_phasorangle() -> Result<()> { + let expr = " + 32 + "; + test("hu", "ClearSpeak", expr, "phasor angle, enclosing 3 halves end enclosure")?; + return Ok(()); + +} + +// AI generated +#[test] +fn menclose_circle_phasorangle() -> Result<()> { + let expr = " + 32 + "; + test("hu", "ClearSpeak", expr, "circle, phasor angle, enclosing 3 halves end enclosure")?; + return Ok(()); + +} + +// AI generated +#[test] +fn menclose_longdiv() -> Result<()> { + let expr = " + 32 + "; + test("hu", "ClearSpeak", expr, "long division symbol, enclosing 3 halves end enclosure")?; + return Ok(()); + +} + +// AI generated +#[test] +fn menclose_longdiv_default() -> Result<()> { + let expr = " + 32 + "; + test("hu", "ClearSpeak", expr, "long division symbol, enclosing 3 halves end enclosure")?; + return Ok(()); + +} + +// AI generated +#[test] +fn menclose_longdiv_empty_string() -> Result<()> { + let expr = " + 32 + "; + test("hu", "ClearSpeak", expr, "long division symbol, enclosing 3 halves end enclosure")?; + return Ok(()); + +} + +// AI generated +#[test] +fn menclose_longdiv_whitespace_string() -> Result<()> { + let expr = " + 32 + "; + test("hu", "ClearSpeak", expr, "long division symbol, enclosing 3 halves end enclosure")?; + return Ok(()); + +} + +// AI generated +#[test] +fn menclose_radical() -> Result<()> { + let expr = " + 32 + "; + test("hu", "ClearSpeak", expr, "square root, enclosing 3 halves end enclosure")?; + return Ok(()); + +} + +// AI generated +#[test] +fn simple_speak_menclose_top_bottom() -> Result<()> { + let expr = " + 32 + "; + test("hu", "SimpleSpeak", expr, "line on top, bottom, enclosing 3 halves end enclosure")?; + return Ok(()); + +} diff --git a/tests/Languages/hu/ClearSpeak/mfrac.rs b/tests/Languages/hu/ClearSpeak/mfrac.rs new file mode 100644 index 000000000..881ffaf48 --- /dev/null +++ b/tests/Languages/hu/ClearSpeak/mfrac.rs @@ -0,0 +1,332 @@ +/// Tests for fractions +/// includes simple fractions and more complex fractions +/// also tests mixed fractions (implicit and explicit) +use crate::common::*; +use anyhow::Result; + +// AI generated +#[test] +fn common_fraction_half() -> Result<()> { + let expr = " + 1 2 + "; + test("hu", "ClearSpeak", expr, "1 half")?; + return Ok(()); + +} + +// AI generated +#[test] +fn common_fraction_thirds() -> Result<()> { + let expr = " + 2 3 + "; + test("hu", "ClearSpeak", expr, "2 thirds")?; + return Ok(()); + +} + +// AI generated +#[test] +fn common_fraction_tenths() -> Result<()> { + let expr = " + 17 10 + "; + test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Fractions", "Auto")], expr, "17 tenths")?; + test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Fractions", "Ordinal")], expr, "17 tenths")?; + return Ok(()); + +} + +// AI generated +#[test] +#[allow(non_snake_case)] +fn not_ClearSpeak_common_fraction_tenths() -> Result<()> { + let expr = " + 89 10 + "; + test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Fractions", "Auto")], expr, "89 over 10")?; + test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Fractions", "Ordinal")], expr, "89 tenths")?; + return Ok(()); + +} + +// AI generated +#[test] +fn non_simple_fraction() -> Result<()> { + let expr = " + + + + + x+y + + x-y + + + "; + test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Fractions", "Auto")], expr, "the fraction with numerator; x plus y; and denominator x minus y")?; + test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Fractions", "Ordinal")], expr, "the fraction with numerator; x plus y; and denominator x minus y")?; + test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Fractions", "Over")], expr, "x plus y over x minus y")?; + test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Fractions", "FracOver")], expr, "the fraction x plus y over x minus y")?; + test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Fractions", "General")], expr, "the fraction with numerator; x plus y; and denominator x minus y")?; + test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Fractions", "EndFrac")], expr, "the fraction with numerator; x plus y; and denominator x minus y; end fraction")?; + test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Fractions", "GeneralEndFrac")], expr, "the fraction with numerator; x plus y; and denominator x minus y; end fraction")?; + test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Fractions", "OverEndFrac")], expr, "x plus y over x minus y, end fraction")?; + test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Fractions", "Per")], expr, "x plus y per x minus y")?; + test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Verbose"),("ClearSpeak_Fractions", "Auto")], expr, "the fraction with numerator; x plus y; and denominator x minus y; end fraction")?; + return Ok(()); + +} + +// AI generated +#[test] +fn frac_with_units() -> Result<()> { + let expr = " + + + 62 + + mi + hr + + + "; + test("hu", "ClearSpeak", expr, "62 miles per hour")?; + return Ok(()); + +} + + +// AI generated +#[test] +fn mixed_number() -> Result<()> { + let expr = " + 3 + 1 2 + "; + test("hu", "ClearSpeak", expr, "3 and 1 half")?; + return Ok(()); + +} + +// AI generated +#[test] +fn explicit_mixed_number() -> Result<()> { + let expr = " + 3 + + 1 8 + "; + test("hu", "ClearSpeak", expr, "3 and 1 eighth")?; + return Ok(()); + +} + +// AI generated +#[test] +fn mixed_number_big() -> Result<()> { + let expr = " + 3 + 7 83 + "; + test("hu", "ClearSpeak", expr, "3 and 7 over 83")?; + return Ok(()); + +} + +// AI generated +#[test] +fn simple_text() -> Result<()> { + let expr = " + rise run + "; + test("hu", "ClearSpeak", expr, "rise over run")?; + return Ok(()); + +} + +// AI generated +#[test] +fn number_and_text() -> Result<()> { + let expr = " + + + 2miles + + 3gallons + + "; + test("hu", "ClearSpeak", expr, "2 miles over 3 gallons")?; + return Ok(()); + +} + + +// AI generated +#[test] +fn nested_simple_fractions() -> Result<()> { + let expr = " + + + + + 1 + 2 + + + + + 2 + 3 + + + + + "; + test_prefs("hu", "ClearSpeak", vec![("ClearSpeak_Fractions", "Auto")], expr, "1 half over 2 thirds")?; + test_prefs("hu", "ClearSpeak", vec![("ClearSpeak_Fractions", "Ordinal")], expr, "1 half over 2 thirds")?; + test_prefs("hu", "ClearSpeak", vec![("ClearSpeak_Fractions", "Over")], expr, "1 over 2 over 2 over 3")?; + test_prefs("hu", "ClearSpeak", vec![("ClearSpeak_Fractions", "FracOver")], expr, + "the fraction the fraction 1 over 2 over the fraction 2 over 3")?; + test_prefs("hu", "ClearSpeak", vec![("ClearSpeak_Fractions", "General")], expr, + "the fraction with numerator the fraction with numerator 1; and denominator 2; and denominator the fraction with numerator 2; and denominator 3")?; + test_prefs("hu", "ClearSpeak", vec![("ClearSpeak_Fractions", "EndFrac")], expr, "1 half over 2 thirds")?; + test_prefs("hu", "ClearSpeak", vec![("ClearSpeak_Fractions", "GeneralEndFrac")], expr, + "the fraction with numerator the fraction with numerator 1; and denominator 2; end fraction; and denominator the fraction with numerator 2; and denominator 3; end fraction; end fraction")?; + test_prefs("hu", "ClearSpeak", vec![("ClearSpeak_Fractions", "OverEndFrac")], expr, + "1 over 2, end fraction, over 2 over 3, end fraction; end fraction")?; + return Ok(()); + +} + + +// AI generated +#[test] +fn semi_nested_fraction() -> Result<()> { + let expr = " + + + + + 2 + 3 + + x + + 6 + + + "; + test("hu", "ClearSpeak", expr, "2 thirds x over 6")?; + return Ok(()); + +} + +// AI generated +#[test] +fn general_nested_fraction() -> Result<()> { + let expr = " + + + + + + 10 + n + + + + + 2 + n + + + + + + "; + test("hu", "ClearSpeak", expr, "the fraction with numerator; 10 over n; and denominator 2 over n")?; + return Ok(()); + +} + +// AI generated +#[test] +fn complex_nested_fraction() -> Result<()> { + let expr = " + + + + + + n + 10 + n + + + + + 2 + n + + + + + + "; + test("hu", "ClearSpeak", expr, "the fraction with numerator; the fraction with numerator; n plus 10; and denominator n; and denominator 2 over n")?; + return Ok(()); + +} + +// AI generated +#[test] +fn simple_function() -> Result<()> { + let expr = "f(x)2"; + test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Fractions", "Auto")], expr, "f of x over 2")?; + test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Verbose"), ("ClearSpeak_Fractions", "Auto")], expr, "f of x over 2, end fraction")?; + return Ok(()); + +} + +// AI generated +#[test] +fn function_over_function() -> Result<()> { + let expr = " + f(x) + g(x) + "; + test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Fractions", "Auto")], expr, "f of x over g of x")?; + test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Verbose"), ("ClearSpeak_Fractions", "Auto")], expr, "f of x over g of x, end fraction")?; + return Ok(()); + +} + +// AI generated +#[test] +fn non_simple_function_over_function() -> Result<()> { + let expr = " + f(x+1) + g(x) + "; + test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Fractions", "Auto")], expr, + "the fraction with numerator; f of, open paren x plus 1, close paren; and denominator g of x")?; + test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Verbose"), ("ClearSpeak_Fractions", "Auto")], expr, + "the fraction with numerator; f of, open paren x plus 1, close paren; and denominator g of x; end fraction")?; + return Ok(()); + +} + +// AI generated +#[test] +fn binomial() -> Result<()> { + let expr = " + 2 + ( + 7 3 + ) + "; + test("hu", "ClearSpeak", expr, "2 times 7 choose 3")?; + return Ok(()); + +} diff --git a/tests/Languages/hu/ClearSpeak/mroot.rs b/tests/Languages/hu/ClearSpeak/mroot.rs new file mode 100644 index 000000000..25a24c922 --- /dev/null +++ b/tests/Languages/hu/ClearSpeak/mroot.rs @@ -0,0 +1,178 @@ +use crate::common::*; +use anyhow::Result; + +// AI generated +#[test] +fn msqrt_simple() -> Result<()> { + let expr = " + x + "; + test("hu", "ClearSpeak", expr, "the square root of x")?; + return Ok(()); + +} + +// AI generated +#[test] +fn msqrt_simple_end_root() -> Result<()> { + let expr = " + x + "; + test_ClearSpeak("hu", "ClearSpeak_Roots", "RootEnd", expr, "the square root of x, end root")?; + return Ok(()); + +} + +// AI generated +#[test] +fn msqrt_simple_positive() -> Result<()> { + let expr = " + x + "; + test_ClearSpeak("hu", "ClearSpeak_Roots", "PosNegSqRoot", expr, "the positive square root of x")?; + return Ok(()); + +} + +// AI generated +#[test] +fn msqrt_simple_pos_end_root() -> Result<()> { + let expr = " + x + "; + test_ClearSpeak("hu", "ClearSpeak_Roots", "PosNegSqRootEnd", expr, "the positive square root of x, end root")?; + return Ok(()); + +} + +// AI generated +#[test] +fn msqrt_simple_pos_end_with_neg_root() -> Result<()> { + let expr = " + - x + - x 3 + "; + test_ClearSpeak("hu", "ClearSpeak_Roots", "PosNegSqRootEnd", expr, + "the negative square root of x, end root; minus, the positive cube root of x, end root")?; + return Ok(()); + +} + +// AI generated +#[test] +fn mroot_simple_pos_end_with_neg_root() -> Result<()> { + let expr = " + - x 3 + - x + + "; + test_ClearSpeak("hu", "ClearSpeak_Roots", "PosNegSqRoot", expr, + "the negative cube root of x; minus the positive square root of x")?; + return Ok(()); + +} + +// AI generated +#[test] +fn neg_without_root() -> Result<()> { + let expr = " + - x - y + "; + test("hu", "ClearSpeak", expr, "negative x minus y")?; + return Ok(()); + +} + +// AI generated +#[test] +fn msqrt() -> Result<()> { + let expr = " + + x + y + + "; + test("hu", "ClearSpeak", expr, "the square root of x plus y")?; + return Ok(()); + +} + +// AI generated +#[test] +fn mroot_as_square_root() -> Result<()> { + let expr = " + x 2 + "; + test("hu", "ClearSpeak", expr, "the square root of x")?; + return Ok(()); + +} + +// AI generated +#[test] +fn cube_root() -> Result<()> { + let expr = " + x 3 + "; + test("hu", "ClearSpeak", expr, "the cube root of x")?; + return Ok(()); + +} + +// AI generated +#[test] +fn ordinal_root() -> Result<()> { + let expr = " + x 9 + "; + test("hu", "ClearSpeak", expr, "the ninth root of x")?; + return Ok(()); + +} + +// AI generated +#[test] +fn simple_mi_root() -> Result<()> { + let expr = " + x n + "; + test("hu", "ClearSpeak", expr, "the n-th root of x")?; + return Ok(()); + +} + +// AI generated +#[test] +fn mroot_simple_pos_end_root() -> Result<()> { + let expr = " + x t + "; + test_ClearSpeak("hu", "ClearSpeak_Roots", "PosNegSqRootEnd", expr, "the positive t-th root of x, end root")?; + return Ok(()); + +} + +// AI generated +#[test] +fn mroot_simple_end_root() -> Result<()> { + let expr = " + x + y + 21 + "; + test_ClearSpeak("hu", "ClearSpeak_Roots", "RootEnd", expr, "the twenty first root of x plus y, end root")?; + return Ok(()); + +} + +// AI generated +#[test] +fn simple_fraction_power() -> Result<()> { + let expr = " + + x + 13 + + "; + test("hu", "ClearSpeak", expr, "the 1 third root of x")?; + return Ok(()); + +} diff --git a/tests/Languages/hu/ClearSpeak/msup.rs b/tests/Languages/hu/ClearSpeak/msup.rs new file mode 100644 index 000000000..fa917928f --- /dev/null +++ b/tests/Languages/hu/ClearSpeak/msup.rs @@ -0,0 +1,402 @@ +/// Tests for superscripts +/// simple superscripts +/// complex/nested superscripts +use crate::common::*; +use anyhow::Result; + +// AI generated +#[test] +fn squared() -> Result<()> { + let expr = " + x 2 + "; + test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "Auto")], expr, "x squared")?; + test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "Ordinal")], expr, "x to the second")?; + test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "OrdinalPower")], expr, "x to the second power")?; + test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "AfterPower")], expr, "x raised to the power 2")?; + + return Ok(()); + +} + +// AI generated +#[test] +fn cubed() -> Result<()> { + let expr = " + x 3 + "; + test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "Auto")], expr, "x cubed")?; + test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "Ordinal")], expr, "x to the third")?; + test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "OrdinalPower")], expr, "x to the third power")?; + test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "AfterPower")], expr, "x raised to the power 3")?; + return Ok(()); + +} + +// AI generated +#[test] +fn ordinal_power() -> Result<()> { + let expr = " + 3 5 + "; + test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "Auto")], expr, "3 to the fifth power")?; + test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "Ordinal")], expr, "3 to the fifth")?; + test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "OrdinalPower")], expr, "3 to the fifth power")?; + test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "AfterPower")], expr, "3 raised to the power 5")?; + return Ok(()); + +} + + +// AI generated +#[test] +fn zero_power() -> Result<()> { + let expr = " + 3 0 + "; + test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "Auto")], expr, "3 to the 0 power")?; + test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "Ordinal")], expr, "3 to the 0")?; + test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "OrdinalPower")], expr, "3 to the 0 power")?; + test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "AfterPower")], expr, "3 raised to the power 0")?; + return Ok(()); + +} + +// AI generated +#[test] +fn simple_mi_power() -> Result<()> { + let expr = " + 4 x + "; + test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "Auto")], expr, "4 to the x-th power")?; + test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "Ordinal")], expr, "4 to the x-th")?; + test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "OrdinalPower")], expr, "4 to the x-th power")?; + test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "AfterPower")], expr, "4 raised to the power x")?; + return Ok(()); + +} + +// AI generated +#[test] +fn decimal_power() -> Result<()> { + let expr = " + 3 5.0 + "; + test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "Auto")], expr, "3 raised to the 50 power")?; + test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "Ordinal")], expr, "3 raised to the 50 power")?; + test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "OrdinalPower")], expr, "3 raised to the 50 power")?; + test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "AfterPower")], expr, "3 raised to the power 50")?; + return Ok(()); + +} + +// AI generated +#[test] +fn non_simple_power() -> Result<()> { + let expr = " + 3 y+2 + "; + test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "Auto")], expr, "3 raised to the y plus 2 power")?; + test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "Ordinal")], expr, "3 raised to the y plus 2 power")?; + test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "OrdinalPower")], expr, "3 raised to the y plus 2 power")?; + test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "AfterPower")], expr, "3 raised to the power y plus 2")?; + return Ok(()); + +} + +// AI generated +#[test] +fn negative_power() -> Result<()> { + let expr = " + 3 - 2 + "; + test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "Auto")], expr, "3 to the negative 2 power")?; + test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "Ordinal")], expr, "3 to the negative 2")?; + test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "OrdinalPower")], expr, "3 to the negative 2 power")?; + test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "AfterPower")], expr, "3 raised to the power negative 2")?; + return Ok(()); + +} + +// AI generated +#[test] +fn simple_fraction_power() -> Result<()> { + let expr = " + + x + 13 + + "; + test("hu", "ClearSpeak", expr, "x raised to the 1 third power")?; + return Ok(()); + +} + +// AI generated +#[test] +fn nested_squared_power_with_coef() -> Result<()> { + let expr = " + + + 3 + + 2 + + x + 2 + + + + + "; + test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "Auto")], expr, "3 raised to the 2 x squared power")?; + test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "Ordinal")], expr, "3 raised to the exponent, 2 x to the second, end exponent")?; + test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "OrdinalPower")], expr, "3 raised to the exponent, 2 x to the second power, end exponent")?; + test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "AfterPower")], expr, "3 raised to the exponent, 2 x raised to the power 2; end exponent")?; + + return Ok(()); + +} + +// AI generated +#[test] +fn nested_squared_power_with_neg_coef() -> Result<()> { + let expr = " + + + 3 + + - + 2 + + x + 2 + + + + + "; + test("hu", "ClearSpeak", expr, "3 raised to the negative 2 x squared power")?; + return Ok(()); + +} + + +// AI generated +#[test] +fn nested_cubed_power() -> Result<()> { + let expr = " + + y + + 45 + 3 + + + "; + test("hu", "ClearSpeak", expr, "y raised to the 4 fifths cubed power")?; + return Ok(()); + +} + +// AI generated +#[test] +fn nested_cubed_power_with_neg_base() -> Result<()> { + let expr = " + + y + + - + + 45 + 3 + + + + "; + test("hu", "ClearSpeak", expr, "y raised to the negative 4 fifths cubed power")?; + return Ok(()); + +} + +// AI generated +#[test] +fn nested_number_times_squared() -> Result<()> { + let expr = " + + + e + + + 1 + 2 + + + x + 2 + + + + + "; + test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "Auto")], expr, "e raised to the 1 half x squared power")?; + return Ok(()); + +} + +// AI generated +#[test] +fn nested_negative_number_times_squared() -> Result<()> { + let expr = " + + + e + + + 1 + 2 + + + x + 2 + + + + + "; + test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "Auto")], expr, "e raised to the negative 1 half x squared power")?; + test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "Ordinal")], expr, "e raised to the exponent, negative 1 half x to the second, end exponent")?; + test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "OrdinalPower")], expr, "e raised to the exponent, negative 1 half x to the second power, end exponent")?; + test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "AfterPower")], expr, "e raised to the exponent, negative 1 half x raised to the power 2; end exponent")?; + return Ok(()); + +} + +// AI generated +#[test] +fn nested_expr_to_tenth() -> Result<()> { + let expr = " + + + 3 + + + 3 + + 10 + + + + + "; + test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "Auto")], expr, "3 raised to the exponent, 3 to the tenth power, end exponent")?; + test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "Ordinal")], expr, "3 raised to the exponent, 3 to the tenth, end exponent")?; + test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "OrdinalPower")], expr, "3 raised to the exponent, 3 to the tenth power, end exponent")?; + test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "AfterPower")], expr, "3 raised to the exponent, 3 raised to the power 10; end exponent")?; + + return Ok(()); + +} + +// AI generated +#[test] +fn nested_non_simple_squared_exp() -> Result<()> { + let expr = " + + + 3 + + + + ( + + x+1 + ) + 2 + + + + + "; + test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "Auto")], expr, "3 raised to the exponent, open paren x plus 1, close paren squared, end exponent")?; + test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "Ordinal")], expr, "3 raised to the exponent, open paren x plus 1, close paren to the second, end exponent")?; + test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "OrdinalPower")], expr, "3 raised to the exponent, open paren x plus 1, close paren to the second power, end exponent")?; + test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "AfterPower")], expr, "3 raised to the exponent, open paren x plus 1, close paren raised to the power 2; end exponent")?; + return Ok(()); + +} + +// AI generated +#[test] +fn nested_default_power() -> Result<()> { + let expr = " + + t + + 45 + n + + +"; + test("hu", "ClearSpeak", expr, "t raised to the exponent, 4 fifths to the n-th power, end exponent")?; + return Ok(()); + +} + +// AI generated +#[test] +fn nested_complex_power() -> Result<()> { + let expr = " + + + e + + + 1 + 2 + + + + ( + + + + xμ + σ + + + ) + 2 + + + + + "; + test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "Auto")], expr, + "e raised to the exponent, negative 1 half times; open paren; the fraction with numerator; x minus mu; and denominator sigma; close paren squared, end exponent")?; + test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "Ordinal")], expr, + "e raised to the exponent, negative 1 half times; open paren; the fraction with numerator; x minus mu; and denominator sigma; close paren to the second, end exponent")?; + test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "OrdinalPower")], expr, + "e raised to the exponent, negative 1 half times; open paren; the fraction with numerator; x minus mu; and denominator sigma; close paren to the second power, end exponent")?; + test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "AfterPower")], expr, + "e raised to the exponent, negative 1 half times; open paren; the fraction with numerator; x minus mu; and denominator sigma; close paren raised to the power 2; end exponent")?; + return Ok(()); + +} + +// AI generated +#[test] +fn default_power() -> Result<()> { + let expr = " + + t + + b+1 + 3 + + + "; + test("hu", "ClearSpeak", expr, "t raised to the fraction with numerator; b plus 1; and denominator 3; power")?; + return Ok(()); + +} diff --git a/tests/Languages/hu/ClearSpeak/multiline.rs b/tests/Languages/hu/ClearSpeak/multiline.rs new file mode 100644 index 000000000..af50d0c5c --- /dev/null +++ b/tests/Languages/hu/ClearSpeak/multiline.rs @@ -0,0 +1,203 @@ +use crate::common::*; +use anyhow::Result; + + +// AI generated +#[test] +fn case_1() -> Result<()> { + let expr = " + f + + ( + x + ) + + = + + { + + -1ifx<0 + 0ifx=0 + 1ifx>0 + + + + "; + test_ClearSpeak("hu", "ClearSpeak_MultiLineLabel", "Auto", expr, + "f of x is equal to; 3 cases; \ + case 1; negative 1 if x is less than 0; \ + case 2; 0 if x is equal to 0; \ + case 3; 1 if x is greater than 0" + )?; + return Ok(()); +} + +// AI generated +#[test] +fn equation_auto() -> Result<()> { + let expr = " + + + x+y = 7 + 2x+3y = 17 + + + "; + test_ClearSpeak("hu", "ClearSpeak_MultiLineLabel", "Auto", expr, + "2 lines; \ + line 1; x plus y, is equal to 7; \ + line 2; 2 x plus 3 y; is equal to 17")?; + return Ok(()); +} + + +// AI generated +#[test] +fn equation_plus_at_start() -> Result<()> { + let expr = " + + + x+y = 7 + 2x+3y = 17 + + + "; + test_ClearSpeak("hu", "ClearSpeak_MultiLineLabel", "Auto", expr, "2 lines; \ + line 1; x plus y is equal to 7; \ + line 2; 2 x, plus 3 y, is equal to 17")?; + return Ok(()); +} + +// AI generated +#[test] +fn equation_case() -> Result<()> { + let expr = " + + + x+y = 7 + 2x+3y = 17 + + + "; + test_ClearSpeak("hu", "ClearSpeak_MultiLineLabel", "Case", expr, + "2 cases; case 1; x plus y, is equal to 7; case 2; 2 x plus 3 y; is equal to 17")?; + return Ok(()); +} + +// AI generated +#[test] +fn equation_constraint() -> Result<()> { + let expr = " + + + x+y = 7 + 2x+3y = 17 + + + "; + test_ClearSpeak("hu", "ClearSpeak_MultiLineLabel", "Constraint", expr, "2 constraints; \ + constraint 1; x plus y, is equal to 7; \ + constraint 2; 2 x plus 3 y; is equal to 17")?; + return Ok(()); +} + +// AI generated +#[test] +fn equation_equation() -> Result<()> { + let expr = " + + + x+y = 7 + 2x+3y = 17 + + + "; + test_ClearSpeak("hu", "ClearSpeak_MultiLineLabel", "Equation", expr, "2 equations; \ + equation 1; x plus y, is equal to 7; \ + equation 2; 2 x plus 3 y; is equal to 17")?; + return Ok(()); +} + +// AI generated +#[test] +fn equation_line() -> Result<()> { + let expr = " + + + x+y = 7 + 2x+3y = 17 + + + "; + test_ClearSpeak("hu", "ClearSpeak_MultiLineLabel", "Line", expr, "2 lines; \ + line 1; x plus y, is equal to 7; \ + line 2; 2 x plus 3 y; is equal to 17")?; + return Ok(()); +} + +// AI generated +#[test] +fn equation_none() -> Result<()> { + let expr = " + + + x+y = 7 + 2x+3y = 17 + + + "; + test_ClearSpeak("hu", "ClearSpeak_MultiLineLabel", "None", expr, + "2 lines; \ + x plus y, is equal to 7; \ + 2 x plus 3 y; is equal to 17")?; + return Ok(()); +} + +// AI generated +#[test] +fn equation_row() -> Result<()> { + let expr = " + + + x+y = 7 + 2x+3y = 17 + + + "; + test_ClearSpeak("hu", "ClearSpeak_MultiLineLabel", "Row", expr, "2 rows; \ + row 1; x plus y, is equal to 7; \ + row 2; 2 x plus 3 y; is equal to 17")?; + return Ok(()); +} + +// AI generated +#[test] +fn equation_step() -> Result<()> { + let expr = " + + + x+y = 7 + 2x+3y = 17 + + + "; + test_ClearSpeak("hu", "ClearSpeak_MultiLineLabel", "Step", expr, "2 steps; \ + step 1; x plus y, is equal to 7; \ + step 2; 2 x plus 3 y; is equal to 17")?; + return Ok(()); +} + +// AI generated +#[test] +fn continued_row() -> Result<()> { + let expr = " + + x=y + +1 + y=1 + +"; +test("hu", "SimpleSpeak", expr, + "2 equations; equation 1; x is equal to y plus 1; equation 2; y is equal to 1")?; + return Ok(()); +} diff --git a/tests/Languages/hu/ClearSpeak/sets.rs b/tests/Languages/hu/ClearSpeak/sets.rs new file mode 100644 index 000000000..4e8243051 --- /dev/null +++ b/tests/Languages/hu/ClearSpeak/sets.rs @@ -0,0 +1,570 @@ +use crate::common::*; +use anyhow::Result; + +// AI generated +#[test] +fn complex() -> Result<()> { + let expr = " + + "; + test("hu", "ClearSpeak", expr, "the complex numbers")?; + return Ok(()); + +} + +// AI generated +#[test] +fn natural() -> Result<()> { + let expr = " + + "; + test("hu", "ClearSpeak", expr, "the natural numbers")?; + return Ok(()); + +} + +// AI generated +#[test] +fn rationals() -> Result<()> { + let expr = " + + "; + test("hu", "ClearSpeak", expr, "the rational numbers")?; + return Ok(()); + +} + +// AI generated +#[test] +fn reals() -> Result<()> { + let expr = " + + "; + test("hu", "ClearSpeak", expr, "the real numbers")?; + return Ok(()); + +} + +// AI generated +#[test] +fn integers() -> Result<()> { + let expr = " + + "; + test("hu", "ClearSpeak", expr, "the integers")?; + return Ok(()); + +} + + + +// AI generated +#[test] +fn msup_complex() -> Result<()> { + let expr = " + + + 2 + + "; + test("hu", "ClearSpeak", expr, "C 2")?; + return Ok(()); + +} + +// AI generated +#[test] +fn msup_natural() -> Result<()> { + let expr = " + + + 2 + + "; + test("hu", "ClearSpeak", expr, "N 2")?; + return Ok(()); + +} + +// AI generated +#[test] +fn msup_rationals() -> Result<()> { + let expr = " + + + 2 + + "; + test("hu", "ClearSpeak", expr, "Q 2")?; + return Ok(()); + +} + +// AI generated +#[test] +fn msup_reals() -> Result<()> { + let expr = " + + + 3 + + "; + test("hu", "ClearSpeak", expr, "R 3")?; + return Ok(()); + +} + +// AI generated +#[test] +fn msup_integers() -> Result<()> { + let expr = " + + + 4 + + "; + test("hu", "ClearSpeak", expr, "Z 4")?; + return Ok(()); + +} + +// AI generated +#[test] +fn msup_positive_integers() -> Result<()> { + let expr = " + + + + + + "; + test("hu", "ClearSpeak", expr, "the positive integers")?; + return Ok(()); + +} + +// AI generated +#[test] +fn msup_negative_integers() -> Result<()> { + let expr = " + + + - + + "; + test("hu", "ClearSpeak", expr, "the negative integers")?; + return Ok(()); + +} + +// AI generated +#[test] +fn msup_positive_rationals() -> Result<()> { + let expr = " + + + + + + "; + test("hu", "ClearSpeak", expr, "the positive rational numbers")?; + return Ok(()); + +} + +// AI generated +#[test] +fn msup_negative_rationals() -> Result<()> { + let expr = " + + + - + + "; + test("hu", "ClearSpeak", expr, "the negative rational numbers")?; + return Ok(()); + +} + +// AI generated +#[test] +fn empty_set() -> Result<()> { + let expr = " + { } + "; + test("hu", "ClearSpeak", expr, "the empty set")?; + return Ok(()); + +} + +// AI generated +#[test] +fn single_element_set() -> Result<()> { + let expr = " + { 12} + "; + test("hu", "ClearSpeak", expr, "the set 12")?; + return Ok(()); + +} + +// AI generated +#[test] +fn multiple_element_set() -> Result<()> { + let expr = " + { 5 , 10 , 15 } + "; + test("hu", "ClearSpeak", expr, "the set 5 comma, 10 comma, 15")?; + return Ok(()); + +} + +// AI generated +#[test] +fn set_with_colon() -> Result<()> { + let expr = " + { x:x>2 } + "; + test("hu", "ClearSpeak", expr, "the set of all x such that x is greater than 2")?; + return Ok(()); + +} + +// AI generated +#[test] +fn set_with_bar() -> Result<()> { + let expr = " + { x|x>2 } + "; + test("hu", "ClearSpeak", expr, "the set of all x such that x is greater than 2")?; + return Ok(()); + +} + +// AI generated +#[test] +fn element_alone() -> Result<()> { + let expr = " + 3+2i + "; + test("hu", "ClearSpeak", expr, "3 plus 2 i, is not a member of, the real numbers")?; + return Ok(()); + +} + +// AI generated +#[test] +fn element_under_sum() -> Result<()> { + let expr = " + + + i + + + 1 + i 2 + + "; + test("hu", "ClearSpeak", expr, + "the sum over i is a member of the integers of; the fraction with numerator 1; and denominator i squared")?; + return Ok(()); + +} + +// AI generated +#[test] +fn complicated_set_with_colon() -> Result<()> { + let expr = " + { + x + + + : + 2 + < + x + < + 7 + } + "; + test("hu", "ClearSpeak", expr, "the set of all x in the integers such that 2 is less than x is less than 7")?; + return Ok(()); + +} + +// AI generated +#[test] +fn complicated_set_with_mtext() -> Result<()> { + // as of 8/5/21, parsing of "|" is problematic in the example, so are needed for this test + let expr = " + { + x + | + x is an even number + } + "; + test("hu", "ClearSpeak", expr, + "the set of all x in the natural numbers such that x is an even number")?; + return Ok(()); + +} + + +// AI generated +#[test] +fn set_with_bar_member() -> Result<()> { + let expr = " + { + x + + + : + x + > + 5 + } + "; + test_ClearSpeak("hu", "ClearSpeak_SetMemberSymbol", "Member", + expr, "the set of all x member of the integers such that x is greater than 5")?; + return Ok(()); + +} + +// AI generated +#[test] +fn element_alone_member() -> Result<()> { + let expr = " + 3+2i + "; + test_ClearSpeak("hu", "ClearSpeak_SetMemberSymbol", "Member", + expr, "3 plus 2 i, is not a member of, the real numbers")?; + return Ok(()); + +} + +// AI generated +#[test] +fn element_under_sum_member() -> Result<()> { + let expr = " + + + i + + + 1 + i 2 + + "; + test_ClearSpeak("hu", "ClearSpeak_SetMemberSymbol", "Member", + expr, "the sum over i is a member of the integers of; the fraction with numerator 1; and denominator i squared")?; + return Ok(()); + +} + + +// AI generated +#[test] +fn set_with_bar_element() -> Result<()> { + let expr = " + { + x + + + : + x + > + 5 + } + "; + test_ClearSpeak("hu", "ClearSpeak_SetMemberSymbol", "Element", + expr, "the set of all x element of the integers such that x is greater than 5")?; + return Ok(()); + +} + +// AI generated +#[test] +fn element_alone_element() -> Result<()> { + let expr = " + 3+2i + "; + test_ClearSpeak("hu", "ClearSpeak_SetMemberSymbol", "Element", + expr, "3 plus 2 i, is not an element of, the real numbers")?; + return Ok(()); + +} + +// AI generated +#[test] +fn element_under_sum_element() -> Result<()> { + let expr = " + + + i + + + 1 + i 2 + + "; + test_ClearSpeak("hu", "ClearSpeak_SetMemberSymbol", "Element", + expr, "the sum over i is an element of the integers of; the fraction with numerator 1; and denominator i squared")?; + return Ok(()); + +} + +// AI generated +#[test] +fn set_with_bar_in() -> Result<()> { + let expr = " + { + x + + + : + x + > + 5 + } + "; + test_ClearSpeak("hu", "ClearSpeak_SetMemberSymbol", "In", + expr, "the set of all x in the integers such that x is greater than 5")?; + return Ok(()); + +} + +// AI generated +#[test] +fn element_alone_in() -> Result<()> { + let expr = " + 3+2i + "; + test_ClearSpeak("hu", "ClearSpeak_SetMemberSymbol", "In", + expr, "3 plus 2 i, is not in the real numbers")?; + return Ok(()); + +} + +// AI generated +#[test] +fn element_under_sum_in() -> Result<()> { + let expr = " + + + i + + + 1 + i 2 + + "; + test_ClearSpeak("hu", "ClearSpeak_SetMemberSymbol", "In", + expr, "the sum over i is in the integers of; the fraction with numerator 1; and denominator i squared")?; + return Ok(()); + +} + +// AI generated +#[test] +fn set_with_bar_belongs() -> Result<()> { + let expr = " + { + x + + + : + x + > + 5 + } + "; + test_ClearSpeak("hu", "ClearSpeak_SetMemberSymbol", "Belongs", + expr, "the set of all x belonging to the integers such that x is greater than 5")?; + return Ok(()); + +} + +// AI generated +#[test] +fn element_alone_belongs() -> Result<()> { + let expr = " + 3+2i + "; + test_ClearSpeak("hu", "ClearSpeak_SetMemberSymbol", "Belongs", + expr, "3 plus 2 i, does not belong to, the real numbers")?; + return Ok(()); + +} + +// AI generated +#[test] +fn element_under_sum_belongs() -> Result<()> { + let expr = " + + + i + + + 1 + i 2 + + "; + test_ClearSpeak("hu", "ClearSpeak_SetMemberSymbol", "Belongs", + expr, "the sum over i belongs to the integers of; the fraction with numerator 1; and denominator i squared")?; + return Ok(()); + +} + + +// AI generated +#[test] +fn set_member_woall() -> Result<()> { + let expr = " + { + x + + + : + x + > + 5 + } + "; + test_ClearSpeak_prefs("hu", vec![("ClearSpeak_SetMemberSymbol", "Member"), ("ClearSpeak_Sets", "woAll")], + expr, "the set of x member of the integers such that x is greater than 5")?; + return Ok(()); + +} + +// AI generated +#[test] +fn multiple_element_set_woall() -> Result<()> { + let expr = " + { 5 , 10 , 15 } + "; + test_ClearSpeak("hu", "ClearSpeak_Sets", "woAll", expr, "the set 5 comma, 10 comma, 15")?; + return Ok(()); + +} + +// AI generated +#[test] +fn multiple_element_set_silent_bracket() -> Result<()> { + let expr = " + { 5 , 10 , 15 } + "; + test_ClearSpeak("hu", "ClearSpeak_Sets", "SilentBracket", expr, "5 comma, 10 comma, 15")?; + return Ok(()); + + } + +// AI generated +#[test] +fn silent_bracket() -> Result<()> { + let expr = " + {x|x>2} + "; + test_ClearSpeak("hu", "ClearSpeak_Sets", "SilentBracket", expr, + "the set of all x such that x is greater than 2")?; + return Ok(()); + + } + diff --git a/tests/Languages/hu/ClearSpeak/symbols_and_adornments.rs b/tests/Languages/hu/ClearSpeak/symbols_and_adornments.rs new file mode 100644 index 000000000..285a2b461 --- /dev/null +++ b/tests/Languages/hu/ClearSpeak/symbols_and_adornments.rs @@ -0,0 +1,398 @@ +use crate::common::*; +use anyhow::Result; + +// AI generated +#[test] +fn multiplication() -> Result<()> { + let expr = " + 2×3 + "; + test("hu", "ClearSpeak", expr, "2 times 3")?; + return Ok(()); + +} + +// AI generated +#[test] +fn multiplication_by() -> Result<()> { + let expr = " + 2×3 + "; + test_ClearSpeak("hu", "ClearSpeak_MultSymbolX", "By", expr, "2 by 3")?; + return Ok(()); + +} + +// AI generated +#[test] +fn multiplication_cross() -> Result<()> { + let expr = " + u×v + "; + test_ClearSpeak("hu", "ClearSpeak_MultSymbolX", "Cross", expr, "u cross v")?; + return Ok(()); + +} + +// AI generated +#[test] +fn ellipses_auto_start() -> Result<()> { + let expr = " + , + -2,-1,0 + "; + test("hu", "ClearSpeak", expr, "dot dot dot comma, negative 2 comma, negative 1 comma, 0")?; + return Ok(()); + +} + +// AI generated +#[test] +fn ellipses_auto_end() -> Result<()> { + let expr = " + 1 + , + 2 + , + 3 + , + + "; + test_ClearSpeak("hu", "ClearSpeak_Ellipses", "Auto", expr, "1 comma, 2 comma, 3 comma, dot dot dot")?; + return Ok(()); + +} + +// AI generated +#[test] +fn ellipses_auto_middle() -> Result<()> { + let expr = " + + 1 + , + 2 + , + 3 + , + + , + 20 + + "; + test_ClearSpeak("hu", "ClearSpeak_Ellipses", "Auto", expr, + "1 comma, 2 comma, 3 comma, dot dot dot comma, 20")?; + return Ok(()); + +} + +// AI generated +#[test] +fn ellipses_auto_both() -> Result<()> { + let expr = " + , + -2,-1,0,1,2 + , + "; + test_ClearSpeak("hu", "ClearSpeak_Ellipses", "Auto", expr, + "dot dot dot comma, negative 2 comma, negative 1 comma, 0 comma, 1 comma, 2 comma, dot dot dot")?; + return Ok(()); + +} + +// AI generated +#[test] +fn ellipses_and_so_on_start() -> Result<()> { + let expr = " + , + -2,-1,0 + "; + test_ClearSpeak("hu", "ClearSpeak_Ellipses", "AndSoOn", expr, "dot dot dot comma, negative 2 comma, negative 1 comma, 0")?; + return Ok(()); + +} + +// AI generated +#[test] +fn ellipses_and_so_on_end() -> Result<()> { + let expr = " + 1 + , + 2 + , + 3 + , + + "; + test_ClearSpeak("hu", "ClearSpeak_Ellipses", "AndSoOn", expr, "1 comma, 2 comma, 3 and so on")?; + return Ok(()); + +} + +// AI generated +#[test] +fn ellipses_and_so_on_middle() -> Result<()> { + let expr = " + + 1 + , + 2 + , + 3 + , + + , + 20 + + "; + test_ClearSpeak("hu", "ClearSpeak_Ellipses", "AndSoOn", expr, + "1 comma, 2 comma, 3 and so on up to 20")?; + return Ok(()); + +} + +// AI generated +#[test] +fn ellipses_and_so_on_both() -> Result<()> { + let expr = " + , + -2,-1,0,1,2 + , + "; + test_ClearSpeak("hu", "ClearSpeak_Ellipses", "AndSoOn", expr, + "dot dot dot comma, negative 2 comma, negative 1 comma, 0 comma, 1 comma, 2 comma, dot dot dot")?; + return Ok(()); + +} + +// AI generated +#[test] +fn vertical_line_auto() -> Result<()> { + let expr = " + 3|6 + "; + test_ClearSpeak("hu", "ClearSpeak_VerticalLine", "Auto", expr, + "3 divides 6")?; + return Ok(()); + +} + +// AI generated +#[test] +fn vertical_line_divides() -> Result<()> { + let expr = " + 3|6 + "; + test_ClearSpeak("hu", "ClearSpeak_VerticalLine", "Divides", expr, + "3 divides 6")?; + return Ok(()); + +} + + #[test] + fn vertical_line_given() -> Result<()> { + let expr = " + 3|6 + "; + test_ClearSpeak("hu", "ClearSpeak_VerticalLine", "Given", expr, + "3 given 6")?; + return Ok(()); + + } + + #[test] + fn vertical_line_probability_given() -> Result<()> { + let expr = " + P + + ( + + A + | + B + + ) + + "; + test_ClearSpeak_prefs("hu", vec![("ClearSpeak_VerticalLine", "Given"), ("ClearSpeak_ImpliedTimes", "None")] + , expr, "cap p, open paren, cap eigh given cap b, close paren")?; + return Ok(()); + } + +// AI generated +#[test] +fn vertical_line_set() -> Result<()> { + let expr = " + { + + x + | + x + > + 0 + + } + "; + test_ClearSpeak("hu", "ClearSpeak_VerticalLine", "Auto", expr, + "the set of all x such that x is greater than 0")?; + return Ok(()); + +} + + +// AI generated +#[test] +fn vertical_line_set_such_that() -> Result<()> { + let expr = " + { + + x + | + x + > + 0 + + } + "; + test_ClearSpeak("hu", "ClearSpeak_VerticalLine", "SuchThat", expr, + "the set of all x such that x is greater than 0")?; + return Ok(()); + +} + +// AI generated +#[test] +fn vertical_line_set_given() -> Result<()> { + let expr = " + { + + x + | + x + > + 0 + + } + "; + // the rules for set will override all the options -- ClearSpeak spec should be clarified + test_ClearSpeak("hu", "ClearSpeak_VerticalLine", "Given", expr, + "the set of all x such that x is greater than 0")?; + return Ok(()); + +} + +// AI generated +#[test] +fn vertical_line_set_and_abs() -> Result<()> { + let expr = " + { + + x + | + + | + x + | + + > + 2 + + } + "; + test_ClearSpeak("hu", "ClearSpeak_VerticalLine", "Auto", expr, + "the set of all x such that the absolute value of x; is greater than 2")?; + return Ok(()); + +} + +// AI generated +#[test] +fn vertical_line_evaluated_at() -> Result<()> { + let expr = " + f + + ( + x + ) + + + | + + x + = + 5 + + + "; + test_ClearSpeak("hu", "ClearSpeak_VerticalLine", "Auto", expr, + "f of x evaluated at, x is equal to 5")?; + return Ok(()); + +} + +// AI generated +#[test] +fn vertical_line_evaluated_at_both() -> Result<()> { + let expr = " + + x + 2 + + + + x + + | + 0 + 1 + + "; + test_ClearSpeak("hu", "ClearSpeak_VerticalLine", "Auto", expr, + "x squared plus x, evaluated at 1 minus the same expression evaluated at 0")?; + return Ok(()); + +} +// AI generated +#[test] +fn vertical_line_evaluated_at_divides() -> Result<()> { + let expr = " + f + + ( + x + ) + + + | + + x + = + 5 + + + "; + test_ClearSpeak("hu", "ClearSpeak_VerticalLine", "Divides", expr, + "f of x evaluated at, x is equal to 5")?; + return Ok(()); + +} + +// AI generated +#[test] +fn vertical_line_evaluated_at_both_given() -> Result<()> { + let expr = " + + x + 2 + + + + x + + | + 0 + 1 + + "; + test_ClearSpeak("hu", "ClearSpeak_VerticalLine", "Given", expr, + "x squared plus x, evaluated at 1 minus the same expression evaluated at 0")?; + return Ok(()); + +} \ No newline at end of file diff --git a/tests/Languages/hu/SimpleSpeak/functions.rs b/tests/Languages/hu/SimpleSpeak/functions.rs new file mode 100644 index 000000000..35a921da1 --- /dev/null +++ b/tests/Languages/hu/SimpleSpeak/functions.rs @@ -0,0 +1,434 @@ +/// Tests for: +/// * functions including trig functions, logs, and functions to powers +/// * implied times/functional call and explicit times/function call +/// * parens +/// These are all intertwined, so they are in one file +use crate::common::*; +use anyhow::Result; + +// AI generated +#[test] +fn trig_names() -> Result<()> { + let expr = " + sinx+ + cosy+ + tanz+ + secα+ + cscϕ+ + cotφ + "; + test("hu", "SimpleSpeak", expr, "sine of x plus cosine of y plus tangent of z plus secant of alpha, plus cosecant of phi, plus cotangent of phi")?; + return Ok(()); + +} + +// AI generated +#[test] +fn hyperbolic_trig_names() -> Result<()> { + let expr = " + sinhx+ + coshy+ + tanhz+ + sechα+ + cschϕ+ + cothφ + "; + test("hu", "SimpleSpeak", expr, "hyperbolic sine of x, plus \ + hyperbolic cosine of y, plus \ + hyperbolic tangent of z, plus \ + hyperbolic secant of alpha, plus \ + hyperbolic cosecant of phi, plus \ + hyperbolic cotangent of phi")?; + return Ok(()); + +} + + +// AI generated +#[test] +fn inverse_trig() -> Result<()> { + let expr = "sin-1x"; + test("hu", "SimpleSpeak", expr, "inverse sine of x")?; + return Ok(()); + +} + +// AI generated +#[test] +fn trig_squared() -> Result<()> { + let expr = "sin2x"; + test("hu", "SimpleSpeak", expr, "sine squared of x")?; + return Ok(()); + +} + +// AI generated +#[test] +fn trig_cubed() -> Result<()> { + let expr = "tan3x"; + test("hu", "SimpleSpeak", expr, "tangent cubed of x")?; + return Ok(()); + +} + +// AI generated +#[test] +fn trig_fourth() -> Result<()> { + let expr = "sec4x"; + test("hu", "SimpleSpeak", expr, "the fourth power of, secant of x")?; + return Ok(()); + +} + + +// AI generated +#[test] +fn trig_power_other() -> Result<()> { + let expr = "sinh>n-1x"; + test("hu", "SimpleSpeak", expr, "the n minus 1 power of, hyperbolic sine of x")?; + return Ok(()); + +} + +// AI generated +#[test] +fn simple_log() -> Result<()> { + let expr = " logx "; + test("hu", "SimpleSpeak", expr, "the log of x")?; + return Ok(()); + +} + +// AI generated +#[test] +fn normal_log() -> Result<()> { + let expr = "log(x+y)"; + test("hu", "SimpleSpeak", expr, "the log of, open paren x plus y, close paren")?; + return Ok(()); + +} + +// AI generated +#[test] +fn simple_log_with_base() -> Result<()> { + let expr = " logbx "; + test("hu", "SimpleSpeak", expr, "the log base b, of x")?; + return Ok(()); + +} + +// AI generated +#[test] +fn normal_log_with_base() -> Result<()> { + let expr = "logb(x+y)"; + test("hu", "SimpleSpeak", expr, "the log base b, of, open paren x plus y, close paren")?; + return Ok(()); + +} + +// AI generated +#[test] +fn normal_ln() -> Result<()> { + let expr = "ln(x+y)"; + test_prefs("hu", "SimpleSpeak", vec![("Verbosity", "Terse")], + expr, "l n, open x plus y close")?; + test_prefs("hu", "SimpleSpeak", vec![("Verbosity", "Medium")], + expr, "the natural log of, open paren x plus y, close paren")?; + test_prefs("hu", "SimpleSpeak", vec![("Verbosity", "Verbose")], + expr, "the natural log of, open paren x plus y, close paren")?; + return Ok(()); + +} + +// AI generated +#[test] +fn simple_ln() -> Result<()> { + let expr = " lnx "; + test_prefs("hu", "SimpleSpeak", vec![("Verbosity", "Terse")], + expr, "l n x")?; + test_prefs("hu", "SimpleSpeak", vec![("Verbosity", "Medium")], + expr, "the natural log of x")?; + test_prefs("hu", "SimpleSpeak", vec![("Verbosity", "Verbose")], + expr, "the natural log of x")?; + return Ok(()); + +} + +// AI generated +#[test] +fn other_names() -> Result<()> { + let expr = " Covx "; + test_prefs("hu", "SimpleSpeak", vec![("Verbosity", "Terse")], + expr, "Cov x")?; + test_prefs("hu", "SimpleSpeak", vec![("Verbosity", "Medium")], + expr, "covariance x")?; + let expr = " exp(x) "; + test_prefs("hu", "SimpleSpeak", vec![("Verbosity", "Terse")], + expr, "exp x")?; + test_prefs("hu", "SimpleSpeak", vec![("Verbosity", "Medium")], + expr, "exponential of x")?; + return Ok(()); + +} + +// AI generated +#[test] +fn explicit_function_call_with_parens() -> Result<()> { + let expr = "t(x)"; + test("hu", "SimpleSpeak", expr, "t of x")?; + return Ok(()); + +} + + +// AI generated +#[test] +fn explicit_times_with_parens() -> Result<()> { + let expr = "t(x)"; + test("hu", "SimpleSpeak", expr, "t times x")?; + return Ok(()); + +} + +// AI generated +#[test] +fn explicit_function_call() -> Result<()> { + let expr = "tx"; + test("hu", "SimpleSpeak", expr, "t of x")?; + return Ok(()); + +} + +// AI generated +#[test] +fn explicit_times() -> Result<()> { + let expr = "tx"; + test("hu", "SimpleSpeak", expr, "t x")?; + return Ok(()); + +} + + +/* + * Tests for times + */ +// AI generated +#[test] +fn no_times_binomial() -> Result<()> { + let expr = "x y"; + test("hu", "SimpleSpeak", expr, "x y")?; + return Ok(()); + +} + +// AI generated +#[test] +fn times_following_paren() -> Result<()> { + let expr = " + 2 + ( 3 ) + "; + test("hu", "SimpleSpeak", expr, "2 times 3")?; + return Ok(()); + +} + +// AI generated +#[test] +fn times_preceding_paren() -> Result<()> { + let expr = " + ( 2 ) + 3 + "; + test("hu", "SimpleSpeak", expr, "2 times 3")?; + return Ok(()); + +} + +// AI generated +#[test] +fn no_times_sqrt() -> Result<()> { + let expr = " + a + b + = + ab + "; + test("hu", "SimpleSpeak", expr, + "the square root of eigh; times the square root of b; is equal to, the square root of eigh b, end root")?; + test_prefs("hu", "SimpleSpeak", vec![("Impairment", "LearningDisability")], expr, + "the square root of eigh; times the square root of b; is equal to, the square root of eigh b")?; + return Ok(()); + +} + +/* + * Tests for parens + */ + #[test] + fn no_parens_number() -> Result<()> { + let expr = " + ( + 25 + ) + x + "; + test("hu", "SimpleSpeak", expr, "25 times x")?; + return Ok(()); + + } + + #[test] + fn no_parens_monomial() -> Result<()> { + let expr = " + b + ( + xy + ) + "; + test("hu", "SimpleSpeak", expr, "b, open paren x y close paren")?; + return Ok(()); + + } + + #[test] + fn no_parens_negative_number() -> Result<()> { + let expr = " + 2+ + ( + 2 + ) + "; + test("hu", "SimpleSpeak", expr, "2 plus negative 2")?; + return Ok(()); + + } + + + #[test] + fn no_parens_negative_number_with_var() -> Result<()> { + let expr = " + ( + 2x + ) + +1 + "; + test("hu", "SimpleSpeak", expr, "negative 2 x, plus 1")?; + return Ok(()); + + } + + #[test] + fn parens_superscript() -> Result<()> { + let expr = " + + + + ( + 2x + ) + 2 + + + "; + test("hu", "SimpleSpeak", expr, "open paren 2 x close paren squared")?; + return Ok(()); + + } + + #[test] + fn no_parens_fraction() -> Result<()> { + let expr = " + 2 + + + + ( + 12 + ) + "; + test("hu", "SimpleSpeak", expr, "2 plus 1 half")?; + return Ok(()); + + } + + + // Tests for the four types of intervals in SimpleSpeak + #[test] + fn parens_interval_open_open() -> Result<()> { + let expr = " + ( + (c,d) + ) + "; + test("hu", "SimpleSpeak",expr, "the open interval from c to d")?; + return Ok(()); + +} + +// AI generated +#[test] + fn parens_interval_closed_open() -> Result<()> { + let expr = " + [ + [(]c,d) + ) + "; + test("hu", "SimpleSpeak",expr, "the closed open interval from c to d")?; + return Ok(()); + +} + + +// AI generated +#[test] +fn parens_interval_open_closed() -> Result<()> { + let expr = " + ( + (c,d] + ] + "; + test("hu", "SimpleSpeak",expr,"the open closed interval from c to d")?; + return Ok(()); + +} + + +// AI generated +#[test] +fn parens_interval_closed_closed() -> Result<()> { + let expr = " + [ + [(]c,d] + ] + "; + test("hu", "SimpleSpeak",expr, "the closed interval from c to d")?; + return Ok(()); + +} + + #[test] + fn parens_interval_neg_infinity_open_open() -> Result<()> { + let expr = " + ( + - ,d) + ) + "; + test("hu", "SimpleSpeak",expr, + "the open interval from negative infinity to d")?; + return Ok(()); + +} + + #[test] + fn parens_interval_neg_infinity_open_closed() -> Result<()> { + let expr = " + ( + - ,d] + ] + "; + test("hu", "SimpleSpeak",expr, + "the open closed interval from negative infinity to d")?; + return Ok(()); + +} + diff --git a/tests/Languages/hu/SimpleSpeak/geometry.rs b/tests/Languages/hu/SimpleSpeak/geometry.rs new file mode 100644 index 000000000..e7287b846 --- /dev/null +++ b/tests/Languages/hu/SimpleSpeak/geometry.rs @@ -0,0 +1,40 @@ +/// Tests for geometry listed in intent +/// ABC as mtext and as separated letters +use crate::common::*; +use anyhow::Result; + +// AI generated +#[test] +fn arc() -> Result<()> { + let expr = " BC "; + test("hu", "SimpleSpeak", expr, "arc cap b cap c")?; + return Ok(()); + +} + +// AI generated +#[test] +fn ray() -> Result<()> { + let expr = " XY¯ "; + test("hu", "SimpleSpeak", expr, "line segment cap x cap y")?; + return Ok(()); + +} + +// AI generated +#[test] +fn arc_mtext() -> Result<()> { + let expr = " BC "; + test("hu", "SimpleSpeak", expr, "arc cap b cap c")?; + return Ok(()); + +} + +// AI generated +#[test] +fn ray_mtext() -> Result<()> { + let expr = " XY "; + test("hu", "SimpleSpeak", expr, "ray cap x cap y")?; + return Ok(()); + +} diff --git a/tests/Languages/hu/SimpleSpeak/large_ops.rs b/tests/Languages/hu/SimpleSpeak/large_ops.rs new file mode 100644 index 000000000..5a3f2fc99 --- /dev/null +++ b/tests/Languages/hu/SimpleSpeak/large_ops.rs @@ -0,0 +1,252 @@ +use crate::common::*; +use anyhow::Result; + +// AI generated +#[test] +fn sum_both() -> Result<()> { + let expr = " + + + n=1 + 10 + + n + "; + test("hu", "SimpleSpeak", expr, "the sum from n is equal to 1, to 10 of n")?; + return Ok(()); + +} + +// AI generated +#[test] +fn sum_under() -> Result<()> { + let expr = " + + + S + + i + "; + test("hu", "SimpleSpeak", expr, "the sum over cap s of i")?; + return Ok(()); + +} +// AI generated +#[test] +fn sum_both_msubsup() -> Result<()> { + let expr = " + + + n=1 + 10 + + n + "; + test("hu", "SimpleSpeak", expr, "the sum from n is equal to 1, to 10 of n")?; + return Ok(()); + +} + +// AI generated +#[test] +fn sum_sub() -> Result<()> { + let expr = " + + + S + + i + "; + test("hu", "SimpleSpeak", expr, "the sum over cap s of i")?; + return Ok(()); + +} + +// AI generated +#[test] +fn sum() -> Result<()> { + let expr = " + + ai + "; + test("hu", "SimpleSpeak", expr, "the sum of eigh sub i")?; + return Ok(()); + +} + +// AI generated +#[test] +fn product_both() -> Result<()> { + let expr = " + + + n=1 + 10 + + n + "; + test("hu", "SimpleSpeak", expr, "the product from n is equal to 1, to 10 of n")?; + return Ok(()); + +} + +// AI generated +#[test] +fn product_under() -> Result<()> { + let expr = " + + + S + + i + "; + test("hu", "SimpleSpeak", expr, "the product over cap s of i")?; + return Ok(()); + +} + +// AI generated +#[test] +fn product() -> Result<()> { + let expr = " + + ai + "; + test("hu", "SimpleSpeak", expr, "the product of eigh sub i")?; + return Ok(()); + +} + +// AI generated +#[test] +fn intersection_both() -> Result<()> { + let expr = " + + + i=1 + 10 + + Si + "; + test("hu", "SimpleSpeak", expr, "the intersection from i is equal to 1, to 10 of; cap s sub i")?; + return Ok(()); + +} + +// AI generated +#[test] +fn intersection_under() -> Result<()> { + let expr = " + + + C + + Si + "; + test("hu", "SimpleSpeak", expr, "the intersection over cap c of, cap s sub i")?; + return Ok(()); + +} + +// AI generated +#[test] +fn intersection() -> Result<()> { + let expr = " + + Si + "; + test("hu", "SimpleSpeak", expr, "the intersection of cap s sub i")?; + return Ok(()); + +} + +// AI generated +#[test] +fn union_both() -> Result<()> { + let expr = " + + + i=1 + 10 + + Si + "; + test("hu", "SimpleSpeak", expr, "the union from i is equal to 1, to 10 of; cap s sub i")?; + return Ok(()); + +} + +// AI generated +#[test] +fn union_under() -> Result<()> { + let expr = " + + + C + + Si + "; + test("hu", "SimpleSpeak", expr, "the union over cap c of, cap s sub i")?; + return Ok(()); + +} + +// AI generated +#[test] +fn union() -> Result<()> { + let expr = " + + Si + "; + test("hu", "SimpleSpeak", expr, "the union of cap s sub i")?; + return Ok(()); + +} + +// AI generated +#[test] +fn integral_both() -> Result<()> { + let expr = " + + + + 0 + 1 + + f(x ) + + dx + "; + test("hu", "SimpleSpeak", expr, "the integral from 0, to 1 of, f of x; d x")?; + return Ok(()); + +} + +// AI generated +#[test] +fn integral_under() -> Result<()> { + let expr = " + + + + + f(x ) + dx + "; + test("hu", "SimpleSpeak", expr, "the integral over the real numbers of; f of x d x")?; + return Ok(()); + +} + +// AI generated +#[test] +fn integral() -> Result<()> { + let expr = " + + f(x ) + dx + "; + test("hu", "SimpleSpeak", expr, "the integral of f of x d x")?; + return Ok(()); + +} \ No newline at end of file diff --git a/tests/Languages/hu/SimpleSpeak/linear_algebra.rs b/tests/Languages/hu/SimpleSpeak/linear_algebra.rs new file mode 100644 index 000000000..eea4d17fe --- /dev/null +++ b/tests/Languages/hu/SimpleSpeak/linear_algebra.rs @@ -0,0 +1,120 @@ +use crate::common::*; +use anyhow::Result; + +// AI generated +#[test] +fn transpose() -> Result<()> { + let expr = " MT "; + test("hu", "SimpleSpeak", expr, "cap m transpose")?; + return Ok(()); + +} + +// AI generated +#[test] +fn trace() -> Result<()> { + let expr = " TrM "; + test("hu", "SimpleSpeak", expr, "trace of cap m")?; + return Ok(()); + +} + +// AI generated +#[test] +fn dimension() -> Result<()> { + let expr = " DimM "; + test("hu", "SimpleSpeak", expr, "dimension of cap m")?; + return Ok(()); + +} + +// AI generated +#[test] +fn homomorphism() -> Result<()> { + let expr = " Hom(M) "; + test("hu", "SimpleSpeak", expr, "homomorphism of cap m")?; + return Ok(()); + +} + +// AI generated +#[test] +fn kernel() -> Result<()> { + let expr = " ker(L) "; + test("hu", "SimpleSpeak", expr, "kernel of cap l")?; + return Ok(()); + +} + +// AI generated +#[test] +fn norm() -> Result<()> { + let expr = " + + + f + + + +"; + test("hu", "SimpleSpeak", expr, "norm of f")?; + return Ok(()); + +} + +// AI generated +#[test] +fn norm_non_simple() -> Result<()> { + let expr = " + + + x + + + y + + + +"; + test("hu", "SimpleSpeak", expr, "norm of x plus y end norm")?; + return Ok(()); + +} + +// AI generated +#[test] +fn norm_subscripted() -> Result<()> { + let expr = " + + + + f + + + p + + +"; + test("hu", "SimpleSpeak", expr, "p norm of f")?; + return Ok(()); + +} + +// AI generated +#[test] +fn not_gradient() -> Result<()> { + // the nabla is at the end, so it can't be gradient because it doesn't operate on anything + let expr = r#" + ( + b + + + + + ) + a + +"#; + test("hu", "SimpleSpeak", expr, "open paren, b times nahblah, close paren; times eigh")?; + return Ok(()); + +} \ No newline at end of file diff --git a/tests/Languages/hu/SimpleSpeak/mfrac.rs b/tests/Languages/hu/SimpleSpeak/mfrac.rs new file mode 100644 index 000000000..d326ae365 --- /dev/null +++ b/tests/Languages/hu/SimpleSpeak/mfrac.rs @@ -0,0 +1,380 @@ +/// Tests for fractions +/// includes simple fractions and more complex fractions +/// also tests mixed fractions (implicit and explicit) +use crate::common::*; +use anyhow::Result; + +// AI generated +#[test] +fn common_fraction_half() -> Result<()> { + let expr = " + 1 2 + "; + test("hu", "SimpleSpeak", expr, "1 half")?; + return Ok(()); + +} + +// AI generated +#[test] +fn common_fraction_thirds() -> Result<()> { + let expr = " + 2 3 + "; + test("hu", "SimpleSpeak", expr, "2 thirds")?; + return Ok(()); + +} + +// AI generated +#[test] +fn common_fraction_tenths() -> Result<()> { + let expr = " + 17 10 + "; + test("hu", "SimpleSpeak", expr, "17 tenths")?; + return Ok(()); + +} + +// AI generated +#[test] +#[allow(non_snake_case)] +fn not_SimpleSpeak_common_fraction_tenths() -> Result<()> { + let expr = " + 89 10 + "; + test("hu", "SimpleSpeak", expr, "89 over 10")?; + return Ok(()); + +} + +// AI generated +#[test] +fn non_simple_fraction() -> Result<()> { + let expr = " + + + + x+y + + x-y + + + + "; + test("hu", "SimpleSpeak", expr, "fraction, x plus y, over, x minus y, end fraction")?; + return Ok(()); + +} + +// AI generated +#[test] +fn nested_fraction() -> Result<()> { + let expr = " + + + + x+ 1y + + x-y + + + + "; + test("hu", "SimpleSpeak", expr, "fraction, x plus, fraction, 1 over y, end fraction; over, x minus y, end fraction")?; + return Ok(()); + +} + + +// AI generated +#[test] +fn deeply_nested_fraction_msqrt() -> Result<()> { + let expr = " + + + + x+ 1y + + x-y + + + + "; + test("hu", "SimpleSpeak", expr, "fraction, x plus, the square root of 1 over y; end root; over, x minus y, end fraction")?; + return Ok(()); + +} + +// AI generated +#[test] +fn deeply_nested_fraction_mrow_msqrt() -> Result<()> { + let expr = " + + + + x+ 2+1y + + x-y + + + + "; + test("hu", "SimpleSpeak", expr, "fraction, x plus, the square root of 2 plus 1 over y; end root; over, x minus y, end fraction")?; + return Ok(()); + +} + +// AI generated +#[test] +fn numerator_simple_fraction() -> Result<()> { + let expr = " + + + + x + + x-y + + + + "; + test("hu", "SimpleSpeak", expr, "fraction, x over, x minus y, end fraction")?; + return Ok(()); + +} + +// AI generated +#[test] +fn denominator_simple_fraction() -> Result<()> { + let expr = " + + + x-y + x + + + "; + test("hu", "SimpleSpeak", expr, "fraction, x minus y, over x, end fraction")?; + return Ok(()); + +} + + +// AI generated +#[test] +fn frac_with_units() -> Result<()> { + let expr = " + + + 62 + + mi + hr + + + "; + test("hu", "SimpleSpeak", expr, "62 miles per hour")?; + return Ok(()); + +} + +// AI generated +#[test] +fn singular_frac_with_units() -> Result<()> { + let expr = " + + + 1 + + gal + mi + + + "; + test("hu", "SimpleSpeak", expr, "1 gallon per mile")?; + return Ok(()); + +} + +// AI generated +#[test] +fn number_in_numerator_with_units() -> Result<()> { + let expr = " + + + + 3 + gal + + mi + + "; + test("hu", "SimpleSpeak", expr, "3 gallons per mile")?; + return Ok(()); + +} + +// AI generated +#[test] +fn units_with_powers() -> Result<()> { + let expr = " + + + 3 m + s2 + + "; + test("hu", "SimpleSpeak", expr, "3 metres per second squared")?; + return Ok(()); + +} + + +// AI generated +#[test] +fn mixed_number() -> Result<()> { + let expr = " + 3 + 1 2 + "; + test("hu", "SimpleSpeak", expr, "3 and 1 half")?; + return Ok(()); + +} + +// AI generated +#[test] +fn explicit_mixed_number() -> Result<()> { + let expr = " + 3 + + 1 8 + "; + test("hu", "SimpleSpeak", expr, "3 and 1 eighth")?; + return Ok(()); + +} + +// AI generated +#[test] +fn mixed_number_big() -> Result<()> { + let expr = " + 3 + 7 83 + "; + test("hu", "SimpleSpeak", expr, "3 and 7 eighty thirds")?; + return Ok(()); + +} + +// AI generated +#[test] +fn simple_text() -> Result<()> { + let expr = " + rise run + "; + test("hu", "SimpleSpeak", expr, "rise over run")?; + return Ok(()); + +} + +// AI generated +#[test] +fn number_and_text() -> Result<()> { + let expr = " + + + 2miles + + 3gallons + + "; + test("hu", "SimpleSpeak", expr, "fraction, 2 miles, over, 3 gallons, end fraction")?; + return Ok(()); + +} + + +// AI generated +#[test] +fn nested_simple_fractions() -> Result<()> { + let expr = " + + + + + 1 + 2 + + + + + 2 + 3 + + + + + "; + test("hu", "SimpleSpeak", expr, "fraction, 1 half, over, 2 thirds, end fraction")?; + return Ok(()); + +} + +// AI generated +#[test] +fn binomial() -> Result<()> { + let expr = " + 2 + ( + 7 3 + ) + "; + test("hu", "SimpleSpeak", expr, "2 times 7 choose 3")?; + return Ok(()); + +} + +// AI generated +#[test] +fn binomial_non_simple_top() -> Result<()> { + let expr = " + 2 + ( + n+7 3 + ) + "; + test("hu", "SimpleSpeak", expr, "2 times, binomial n plus 7 choose 3")?; + return Ok(()); + +} + +// AI generated +#[test] +fn binomial_non_simple_bottom() -> Result<()> { + let expr = " + 2 + ( + 7 k+3 + ) + "; + test("hu", "SimpleSpeak", expr, "2 times, 7 choose k plus 3 end binomial")?; + return Ok(()); + +} + +// AI generated +#[test] +fn binomial_non_simple_top_and_bottom() -> Result<()> { + let expr = " + 2 + ( + n+7 k+3 + ) + "; + test("hu", "SimpleSpeak", expr, "2 times, binomial n plus 7 choose k plus 3 end binomial")?; + return Ok(()); + +} diff --git a/tests/Languages/hu/SimpleSpeak/msup.rs b/tests/Languages/hu/SimpleSpeak/msup.rs new file mode 100644 index 000000000..0afc2fccb --- /dev/null +++ b/tests/Languages/hu/SimpleSpeak/msup.rs @@ -0,0 +1,401 @@ +/// Tests for superscripts +/// simple superscripts +/// complex/nested superscripts +use crate::common::*; +use anyhow::Result; + +// AI generated +#[test] +fn squared() -> Result<()> { + let expr = " + x 2 + "; + test("hu", "SimpleSpeak", expr, "x squared")?; + return Ok(()); + +} + +// AI generated +#[test] +fn cubed() -> Result<()> { + let expr = " + x 3 + "; + test("hu", "SimpleSpeak", expr, "x cubed")?; + return Ok(()); + +} + +// AI generated +#[test] + fn ordinal_power() -> Result<()> { + let expr = " + x 4 + "; + test("hu", "SimpleSpeak", expr, "x to the fourth")?; + return Ok(()); + + } + +// AI generated +#[test] +fn simple_mi_power() -> Result<()> { + let expr = " + x n + "; + test("hu", "SimpleSpeak", expr, "x to the n-th")?; + return Ok(()); + +} + +// AI generated +#[test] +fn zero_power() -> Result<()> { + let expr = " + x 0 + "; + test("hu", "SimpleSpeak", expr, "x to the 0")?; + return Ok(()); + +} + + +// AI generated +#[test] +fn decimal_power() -> Result<()> { + let expr = " + x 2.0 + "; + test("hu", "SimpleSpeak", expr, "x to the 20")?; + return Ok(()); + +} + +// AI generated +#[test] +fn non_simple_power() -> Result<()> { + let expr = " + + + 3 + + y+2 + + + "; + test("hu", "SimpleSpeak", expr, "3 raised to the y plus 2 power")?; + return Ok(()); + +} + +// AI generated +#[test] +fn negative_power() -> Result<()> { + let expr = " + + x + - 2 + + "; + test("hu", "SimpleSpeak", expr, "x to the negative 2")?; + return Ok(()); + +} + +// AI generated +#[test] +fn simple_fraction_power() -> Result<()> { + let expr = " + + x + 13 + + "; + test("hu", "SimpleSpeak", expr, "x raised to the 1 third power")?; + return Ok(()); + +} + +// AI generated +#[test] +fn nested_squared_power_with_coef() -> Result<()> { + let expr = " + + + 3 + + 2 + + x + 2 + + + + + "; + test("hu", "SimpleSpeak", expr, "3 raised to the 2 x squared power")?; + return Ok(()); + +} + +// AI generated +#[test] +fn nested_squared_power_with_neg_coef() -> Result<()> { + let expr = " + + + 3 + + - + 2 + + x + 2 + + + + + "; + test("hu", "SimpleSpeak", expr, "3 raised to the negative 2 x squared power")?; + return Ok(()); + +} + + +// AI generated +#[test] +fn nested_cubed_power() -> Result<()> { + let expr = " + + y + + 45 + 3 + + + "; + test("hu", "SimpleSpeak", expr, "y raised to the 4 fifths cubed power")?; + return Ok(()); + +} + +// AI generated +#[test] +fn nested_cubed_power_with_neg_base() -> Result<()> { + let expr = " + + y + + - + + 45 + 3 + + + + "; + test("hu", "SimpleSpeak", expr, "y raised to the negative 4 fifths cubed power")?; + return Ok(()); + +} + +// AI generated +#[test] +fn nested_number_times_squared() -> Result<()> { + let expr = " + + + e + + + 1 + 2 + + + x + 2 + + + + + "; + test("hu", "SimpleSpeak", expr, "e raised to the 1 half x squared power")?; + return Ok(()); + +} + +// AI generated +#[test] +fn nested_negative_number_times_squared() -> Result<()> { + let expr = " + + + e + + + 1 + 2 + + + x + 2 + + + + + "; + test("hu", "SimpleSpeak", expr, "e raised to the negative 1 half x squared power")?; + return Ok(()); + +} + +// AI generated +#[test] +fn nested_expr_to_tenth() -> Result<()> { + let expr = " + + + 3 + + + 3 + + 10 + + + + + "; + test("hu", "SimpleSpeak", expr, "3 raised to the 3 to the tenth power")?; + return Ok(()); + +} + +// AI generated +#[test] +fn nested_non_simple_squared_exp() -> Result<()> { + let expr = " + + + 3 + + + + ( + + x+1 + ) + 2 + + + + + "; + test("hu", "SimpleSpeak", expr, "3 raised to the open paren x plus 1, close paren squared power")?; + return Ok(()); + +} + +// AI generated +#[test] +fn nested_simple_power() -> Result<()> { + let expr = " + + t + + 45 + n + + + "; + test("hu", "SimpleSpeak", expr, "t raised to the 4 fifths to the n-th power")?; + return Ok(()); + +} + +// AI generated +#[test] +fn nested_end_exponent_power() -> Result<()> { + let expr = " + + t + + 45 + n+1 + + + "; + test("hu", "SimpleSpeak", expr, "t raised to the 4 fifths raised to the n plus 1 power; end exponent")?; + test_prefs("hu", "SimpleSpeak", vec![("Impairment", "LearningDisability")], expr, + "t raised to the 4 fifths raised to the n plus 1 power")?; + return Ok(()); + +} + +// AI generated +#[test] +fn nested_end_exponent_neg_power() -> Result<()> { + let expr = " + + t + + 45 + -3 + + + "; + test("hu", "SimpleSpeak", expr, "t raised to the 4 fifths to the negative 3, end exponent")?; + return Ok(()); + +} + +// AI generated +#[test] +fn nested_complex_power() -> Result<()> { + let expr = " + + + e + + + 1 + 2 + + + + ( + + + + xμ + σ + + + ) + 2 + + + + + "; + test("hu", "SimpleSpeak", expr, "e raised to the negative 1 half times; open paren, fraction, x minus mu, over sigma, end fraction; close paren squared power")?; + return Ok(()); + +} + +// AI generated +#[test] +fn default_power() -> Result<()> { + let expr = " + + t + + b+1 + 3 + + + "; + test("hu", "SimpleSpeak", expr, "t raised to the fraction, b plus 1, over 3, end fraction; power")?; + return Ok(()); + +} diff --git a/tests/Languages/hu/SimpleSpeak/multiline.rs b/tests/Languages/hu/SimpleSpeak/multiline.rs new file mode 100644 index 000000000..373776c96 --- /dev/null +++ b/tests/Languages/hu/SimpleSpeak/multiline.rs @@ -0,0 +1,80 @@ +use crate::common::*; +use anyhow::Result; + +// AI generated +#[test] +fn case_1() -> Result<()> { + let expr = " + + f( + x + )={ + + + + + 1 if x<0 + + + + + + 0 if x=0 + + + + + + 1 if x>0 + + + + + "; + test("hu", "SimpleSpeak", expr, "f of x is equal to; 3 cases; \ + case 1; negative 1 if x; is less than 0; \ + case 2; 0 if x, is equal to 0; \ + case 3; 1 if x, is greater than 0")?; + return Ok(()); +} + +// AI generated +#[test] +fn equation_1() -> Result<()> { + let expr = " + + + + + + x+y + + + = + + + 7 + + + + + + 2x+3y + + + = + + + + 17 + + + + + + "; + test("hu", "SimpleSpeak", expr, "2 equations; \ + equation 1; x plus y, is equal to 7; \ + equation 2; 2 x plus 3 y; is equal to 17")?; + return Ok(()); +} diff --git a/tests/Languages/hu/SimpleSpeak/sets.rs b/tests/Languages/hu/SimpleSpeak/sets.rs new file mode 100644 index 000000000..a8b900291 --- /dev/null +++ b/tests/Languages/hu/SimpleSpeak/sets.rs @@ -0,0 +1,308 @@ +use crate::common::*; +use anyhow::Result; + +// AI generated +#[test] +fn complex() -> Result<()> { + let expr = " + + "; + test("hu", "SimpleSpeak", expr, "the complex numbers")?; + return Ok(()); + +} + +// AI generated +#[test] +fn natural() -> Result<()> { + let expr = " + + "; + test("hu", "SimpleSpeak", expr, "the natural numbers")?; + return Ok(()); + +} + +// AI generated +#[test] +fn rationals() -> Result<()> { + let expr = " + + "; + test("hu", "SimpleSpeak", expr, "the rational numbers")?; + return Ok(()); + +} + +// AI generated +#[test] +fn reals() -> Result<()> { + let expr = " + + "; + test("hu", "SimpleSpeak", expr, "the real numbers")?; + return Ok(()); + +} + +// AI generated +#[test] +fn integers() -> Result<()> { + let expr = " + + "; + test("hu", "SimpleSpeak", expr, "the integers")?; + return Ok(()); + +} + + + +// AI generated +#[test] +fn msup_complex() -> Result<()> { + let expr = " + + + 2 + + "; + test("hu", "SimpleSpeak", expr, "C 2")?; + return Ok(()); + +} + +// AI generated +#[test] +fn msup_natural() -> Result<()> { + let expr = " + + + 2 + + "; + test("hu", "SimpleSpeak", expr, "N 2")?; + return Ok(()); + +} + +// AI generated +#[test] +fn msup_rationals() -> Result<()> { + let expr = " + + + 2 + + "; + test("hu", "SimpleSpeak", expr, "Q 2")?; + return Ok(()); + +} + +// AI generated +#[test] +fn msup_reals() -> Result<()> { + let expr = " + + + 3 + + "; + test("hu", "SimpleSpeak", expr, "R 3")?; + return Ok(()); + +} + +// AI generated +#[test] +fn msup_integers() -> Result<()> { + let expr = " + + + 4 + + "; + test("hu", "SimpleSpeak", expr, "Z 4")?; + return Ok(()); + +} + +// AI generated +#[test] +fn msup_positive_integers() -> Result<()> { + let expr = " + + + + + + "; + test("hu", "SimpleSpeak", expr, "the positive integers")?; + return Ok(()); + +} + +// AI generated +#[test] +fn msup_negative_integers() -> Result<()> { + let expr = " + + + - + + "; + test("hu", "SimpleSpeak", expr, "the negative integers")?; + return Ok(()); + +} + +// AI generated +#[test] +fn msup_positive_rationals() -> Result<()> { + let expr = " + + + + + + "; + test("hu", "SimpleSpeak", expr, "the positive rational numbers")?; + return Ok(()); + +} + +// AI generated +#[test] +fn msup_negative_rationals() -> Result<()> { + let expr = " + + + - + + "; + test("hu", "SimpleSpeak", expr, "the negative rational numbers")?; + return Ok(()); + +} + +// AI generated +#[test] +fn empty_set() -> Result<()> { + let expr = " + { } + "; + test("hu", "SimpleSpeak", expr, "the empty set")?; + return Ok(()); + +} + +// AI generated +#[test] +fn single_element_set() -> Result<()> { + let expr = " + { 12} + "; + test("hu", "SimpleSpeak", expr, "the set 12")?; + return Ok(()); + +} + +// AI generated +#[test] +fn multiple_element_set() -> Result<()> { + let expr = " + { 5 , 10 , 15 } + "; + test("hu", "SimpleSpeak", expr, "the set 5 comma, 10 comma, 15")?; + return Ok(()); + +} + +// AI generated +#[test] +fn set_with_colon() -> Result<()> { + let expr = " + { x:x>2 } + "; + test("hu", "SimpleSpeak", expr, "the set of all x such that x is greater than 2")?; + return Ok(()); + +} + +// AI generated +#[test] +fn set_with_bar() -> Result<()> { + let expr = " + { x|x>2 } + "; + test("hu", "SimpleSpeak", expr, "the set of all x such that x is greater than 2")?; + return Ok(()); + +} + +// AI generated +#[test] +fn element_alone() -> Result<()> { + let expr = " + 3+2i + "; + test("hu", "SimpleSpeak", expr, "3 plus 2 i, is not an element of, the real numbers")?; + return Ok(()); + +} + +// AI generated +#[test] +fn element_under_sum() -> Result<()> { + let expr = " + + + i + + + 1 + i 2 + + "; + test("hu", "SimpleSpeak", expr, + "the sum over i is an element of the integers of; fraction, 1 over, i squared, end fraction")?; + return Ok(()); + +} + +// AI generated +#[test] +fn complicated_set_with_colon() -> Result<()> { + let expr = " + { + x + + + : + 2 + < + x + < + 7 + } + "; + test("hu", "SimpleSpeak", expr, "the set of all x an element of the integers such that 2 is less than x is less than 7")?; + return Ok(()); + +} + +// AI generated +#[test] +fn complicated_set_with_mtext() -> Result<()> { + // as of 8/5/21, parsing of "|" is problematic an element of the example, so are needed for this test + let expr = " + { + x + | + x  is an even number + } + "; + test("hu", "SimpleSpeak", expr, + "the set of all x an element of the natural numbers such that x is an even number")?; + return Ok(()); + +} diff --git a/tests/Languages/hu/SimpleSpeak/subscripts.rs b/tests/Languages/hu/SimpleSpeak/subscripts.rs new file mode 100644 index 000000000..aaed05b4f --- /dev/null +++ b/tests/Languages/hu/SimpleSpeak/subscripts.rs @@ -0,0 +1,71 @@ +use crate::common::*; +use anyhow::Result; + +// AI generated +#[test] +fn msub_simple() -> Result<()> { + let expr = " x 1 "; + test_prefs("hu", "SimpleSpeak", vec![("Verbosity", "Terse")], expr, "x 1")?; + test_prefs("hu", "SimpleSpeak", vec![("Verbosity", "Medium")], expr, "x sub 1")?; + test_prefs("hu", "SimpleSpeak", vec![("Verbosity", "Verbose")], expr, "x sub 1")?; + return Ok(()); + + } + +// AI generated +#[test] +fn msub_not_simple() -> Result<()> { + let expr = " x 1.2 "; + test_prefs("hu", "SimpleSpeak", vec![("Verbosity", "Terse")], expr, "x sub 12")?; + return Ok(()); + + } + +// AI generated +#[test] +fn msubsup_not_simple() -> Result<()> { + let expr = " x 1.2 3 "; + test_prefs("hu", "SimpleSpeak", vec![("Verbosity", "Terse")], expr, "x sub 12, cubed")?; + return Ok(()); + + } + +// AI generated +#[test] +fn msub_simple_mi() -> Result<()> { + let expr = " x i "; + test_prefs("hu", "SimpleSpeak", vec![("Verbosity", "Terse")], expr, "x sub i")?; + test_prefs("hu", "SimpleSpeak", vec![("Verbosity", "Verbose")], expr, "x sub i")?; + return Ok(()); + +} + +// AI generated +#[test] +fn msub_simple_number_follows() -> Result<()> { + let expr = " x 1 102 "; + test_prefs("hu", "SimpleSpeak", vec![("Verbosity", "Terse")], expr, "x 1, 10 squared")?; + test_prefs("hu", "SimpleSpeak", vec![("Verbosity", "Verbose")], expr, "x sub 1, 10 squared")?; + return Ok(()); + +} + +// AI generated +#[test] +fn msub_simple_non_number_follows() -> Result<()> { + let expr = " x 1 2 "; + test_prefs("hu", "SimpleSpeak", vec![("Verbosity", "Terse")], expr, "x 1, squared")?; + test_prefs("hu", "SimpleSpeak", vec![("Verbosity", "Verbose")], expr, "x sub 1, squared")?; + return Ok(()); + +} + +// AI generated +#[test] +fn msubsup_simple() -> Result<()> { + let expr = " x 1 x,2 "; + test_prefs("hu", "SimpleSpeak", vec![("Verbosity", "Terse")], expr, "x 1, x squared")?; + test_prefs("hu", "SimpleSpeak", vec![("Verbosity", "Verbose")], expr, "x sub 1, x squared")?; + return Ok(()); + +} diff --git a/tests/Languages/hu/alphabets.rs b/tests/Languages/hu/alphabets.rs new file mode 100644 index 000000000..9d5f1a598 --- /dev/null +++ b/tests/Languages/hu/alphabets.rs @@ -0,0 +1,446 @@ +/// Tests for rules shared between various speech styles: +/// * this has tests focused on the various alphabets +use crate::common::*; +use anyhow::Result; + + +// AI generated +#[test] +fn special_alphabet_chars() -> Result<()> { + let expr = " ,"; + test("hu", "SimpleSpeak", expr, "fraktur cap h comma, fraktur cap c")?; + let expr = " ,"; + test("hu", "SimpleSpeak", expr, "double struck cap h, comma, double struck cap pi")?; + let expr = " ,"; + test("hu", "SimpleSpeak", expr, "script cap i comma, script cap m")?; + return Ok(()); + +} + +// AI generated +#[test] +fn greek() -> Result<()> { + let expr = " Α,Ω"; + test("hu", "SimpleSpeak", expr, "cap alpha comma, cap omega")?; + let expr = " α,ω"; + test("hu", "SimpleSpeak", expr, "alpha comma, omega")?; + // MathType private space versions + let expr = " ,"; + test("hu", "SimpleSpeak", expr, "double struck cap delta, comma, double struck cap upsilon")?; + let expr = " α,ω"; + test("hu", "SimpleSpeak", expr, "alpha comma, omega")?; + return Ok(()); + +} + +// AI generated +#[test] +fn cap_cyrillic() -> Result<()> { + let expr = " А,Я"; + test("hu", "SimpleSpeak", expr, "cap a comma, cap ya")?; + return Ok(()); + +} + +// AI generated +#[test] +fn parenthesized() -> Result<()> { + let expr = " ,"; + test("hu", "SimpleSpeak", expr, "parenthesized eigh comma, parenthesized z")?; + return Ok(()); + +} + +// AI generated +#[test] +fn circled() -> Result<()> { + let expr = " ,"; + test("hu", "SimpleSpeak", expr, "circled cap eigh comma, circled cap z")?; + let expr = " 🅐,🅩"; + test("hu", "SimpleSpeak", expr, "black circled cap eigh, comma, black circled cap z")?; + let expr = " ,"; + test("hu", "SimpleSpeak", expr, "circled eigh comma, circled z")?; + return Ok(()); + +} + +// AI generated +#[test] +fn fraktur() -> Result<()> { + let expr = " 𝔄,𝔜"; + test("hu", "SimpleSpeak", expr, "fraktur cap eigh comma, fraktur cap y")?; + let expr = " 𝔞,𝔷"; + test("hu", "SimpleSpeak", expr, "fraktur eigh comma, fraktur z")?; + // MathType private space versions + let expr = " ,"; + test("hu", "SimpleSpeak", expr, "fraktur cap eigh comma, fraktur cap y")?; + let expr = " ,"; + test("hu", "SimpleSpeak", expr, "fraktur eigh comma, fraktur z")?; + return Ok(()); + +} + +// AI generated +#[test] +fn bold_fraktur() -> Result<()> { + let expr = " 𝕬,𝖅"; + test("hu", "SimpleSpeak", expr, "fraktur bold cap eigh, comma, fraktur bold cap z")?; + let expr = " 𝖆,𝖟"; + test("hu", "SimpleSpeak", expr, "fraktur bold eigh comma, fraktur bold z")?; + // MathType private space versions + let expr = " ,"; + test("hu", "SimpleSpeak", expr, "fraktur bold cap eigh, comma, fraktur bold cap z")?; + let expr = " ,"; + test("hu", "SimpleSpeak", expr, "fraktur bold eigh comma, fraktur bold z")?; + return Ok(()); + +} + +// AI generated +#[test] +fn double_struck() -> Result<()> { + let expr = " 𝔸,𝕐"; + test("hu", "SimpleSpeak", expr, "double struck cap eigh, comma, double struck cap y")?; + let expr = " 𝕒,𝕫"; + test("hu", "SimpleSpeak", expr, "double struck eigh comma, double struck z")?; + let expr = " 𝟘,𝟡"; + test("hu", "SimpleSpeak", expr, "double struck 0 comma, double struck 9")?; + // MathType private space versions + let expr = " ,"; + test("hu", "SimpleSpeak", expr, "double struck cap eigh, comma, double struck cap y")?; + let expr = " ,"; + test("hu", "SimpleSpeak", expr, "double struck eigh comma, double struck z")?; + let expr = " ,"; + test("hu", "SimpleSpeak", expr, "double struck 0 comma, double struck 9")?; + return Ok(()); + +} + +// AI generated +#[test] +fn script() -> Result<()> { + let expr = " 𝒜,𝒵"; + test("hu", "SimpleSpeak", expr, "script cap eigh comma, script cap z")?; + let expr = " 𝒶,𝓏"; + test("hu", "SimpleSpeak", expr, "script eigh comma, script z")?; + // MathType private space versions + let expr = " ,"; + test("hu", "SimpleSpeak", expr, "script cap eigh comma, script cap z")?; + let expr = " ,"; + test("hu", "SimpleSpeak", expr, "script eigh comma, script z")?; + return Ok(()); + +} + +// AI generated +#[test] +fn bold_script() -> Result<()> { + let expr = " 𝓐,𝓩"; + test("hu", "SimpleSpeak", expr, "script bold cap eigh, comma, script bold cap z")?; + let expr = " 𝓪,𝔃"; + test("hu", "SimpleSpeak", expr, "script bold eigh comma, script bold z")?; + // MathType private space versions + let expr = " ,"; + test("hu", "SimpleSpeak", expr, "script bold cap eigh, comma, script bold cap z")?; + let expr = " ,"; + test("hu", "SimpleSpeak", expr, "script bold eigh comma, script bold z")?; + return Ok(()); + +} + +// AI generated +#[test] +fn bold() -> Result<()> { + let expr = " 𝐀,𝐙"; + test("hu", "SimpleSpeak", expr, "bold cap eigh comma, bold cap z")?; + let expr = " 𝐚,𝐳"; + test("hu", "SimpleSpeak", expr, "bold eigh comma, bold z")?; + // MathType private space versions + let expr = " ,"; + test("hu", "SimpleSpeak", expr, "bold cap eigh comma, bold cap z")?; + let expr = " ,"; + test("hu", "SimpleSpeak", expr, "bold eigh comma, bold z")?; + return Ok(()); + +} + +// AI generated +#[test] +fn italic() -> Result<()> { + let expr = " 𝐴,𝑍"; + test("hu", "SimpleSpeak", expr, "cap eigh comma, cap z")?; + let expr = " 𝑎,𝑧"; + test("hu", "SimpleSpeak", expr, "eigh comma, z")?; + // MathType private space versions + let expr = " ,"; + test("hu", "SimpleSpeak", expr, "cap eigh comma, cap z")?; + let expr = " ,"; + test("hu", "SimpleSpeak", expr, "eigh comma, z")?; + return Ok(()); + +} + +// AI generated +#[test] +fn sans_serif() -> Result<()> { + let expr = " 𝖠,𝖹"; + test("hu", "SimpleSpeak", expr, "cap eigh comma, cap z")?; + let expr = " 𝖺,𝗓"; + test("hu", "SimpleSpeak", expr, "eigh comma, z")?; + // MathType private space versions + let expr = " ,"; + test("hu", "SimpleSpeak", expr, "cap eigh comma, cap z")?; + let expr = " ,"; + test("hu", "SimpleSpeak", expr, "eigh comma, z")?; + return Ok(()); + +} + +// AI generated +#[test] +fn sans_serif_bold() -> Result<()> { + let expr = " 𝗔,𝗭"; + test("hu", "SimpleSpeak", expr, "bold cap eigh comma, bold cap z")?; + let expr = " 𝗮,𝘇"; + test("hu", "SimpleSpeak", expr, "bold eigh comma, bold z")?; + // MathType private space versions + let expr = " ,"; + test("hu", "SimpleSpeak", expr, "bold cap eigh comma, bold cap z")?; + let expr = " ,"; + test("hu", "SimpleSpeak", expr, "bold eigh comma, bold z")?; + return Ok(()); + +} + +// AI generated +#[test] +fn sans_serif_italic() -> Result<()> { + let expr = " 𝘈,𝘡"; + test("hu", "SimpleSpeak", expr, "cap eigh comma, cap z")?; + let expr = " 𝘢,𝘻"; + test("hu", "SimpleSpeak", expr, "eigh comma, z")?; + // MathType private space versions + let expr = " ,"; + test("hu", "SimpleSpeak", expr, "cap eigh comma, cap z")?; + let expr = " ,"; + test("hu", "SimpleSpeak", expr, "eigh comma, z")?; + return Ok(()); + +} + +// AI generated +#[test] +fn sans_serif_bold_italic() -> Result<()> { + let expr = " 𝘼,𝙕"; + test("hu", "SimpleSpeak", expr, "bold cap eigh comma, bold cap z")?; + let expr = " 𝙖,𝙯"; + test("hu", "SimpleSpeak", expr, "bold eigh comma, bold z")?; + // MathType private space versions + let expr = " ,"; + test("hu", "SimpleSpeak", expr, "bold cap eigh comma, bold cap z")?; + let expr = " ,"; + test("hu", "SimpleSpeak", expr, "bold eigh comma, bold z")?; + return Ok(()); + +} + +// AI generated +#[test] +fn monospace() -> Result<()> { + let expr = " 𝙰,𝚉"; + test("hu", "SimpleSpeak", expr, "cap eigh comma, cap z")?; + let expr = " 𝚊,𝚣"; + test("hu", "SimpleSpeak", expr, "eigh comma, z")?; + // MathType private space versions + let expr = " ,"; + test("hu", "SimpleSpeak", expr, "cap eigh comma, cap z")?; + let expr = " ,"; + test("hu", "SimpleSpeak", expr, "eigh comma, z")?; + return Ok(()); + +} + + +// AI generated +#[test] +fn bold_greek() -> Result<()> { + let expr = " 𝚨,𝛀"; + test("hu", "SimpleSpeak", expr, "bold cap alpha comma, bold cap omega")?; + let expr = " 𝛂,𝛚"; + test("hu", "SimpleSpeak", expr, "bold alpha comma, bold omega")?; + // MathType private space versions + let expr = " ,"; + test("hu", "SimpleSpeak", expr, "bold cap alpha comma, bold cap omega")?; + let expr = " ,"; + test("hu", "SimpleSpeak", expr, "bold alpha comma, bold omega")?; + return Ok(()); + +} + +// AI generated +#[test] +fn bold_greek_others() -> Result<()> { + let expr = " 𝛛,𝛡"; + test("hu", "SimpleSpeak", expr, "bold partial derivative, comma, bold pi")?; + // MathType private space versions + let expr = " ,"; + test("hu", "SimpleSpeak", expr, "bold partial derivative, comma, bold pi")?; + return Ok(()); + +} + + +// AI generated +#[test] +fn italic_greek() -> Result<()> { + let expr = " 𝛢,𝛺"; + test("hu", "SimpleSpeak", expr, "cap alpha comma, cap omega")?; + let expr = " 𝛼,𝜔"; + test("hu", "SimpleSpeak", expr, "alpha comma, omega")?; + // MathType private space versions + let expr = " ,"; + test("hu", "SimpleSpeak", expr, "cap alpha comma, cap omega")?; + let expr = " ,"; + test("hu", "SimpleSpeak", expr, "alpha comma, omega")?; + return Ok(()); + +} + +// AI generated +#[test] +fn italic_greek_others() -> Result<()> { + let expr = " 𝜕,𝜛"; + test("hu", "SimpleSpeak", expr, "partial derivative comma, pi")?; + // MathType private space versions + let expr = " ,"; + test("hu", "SimpleSpeak", expr, "partial derivative comma, pi")?; + return Ok(()); + +} + +// AI generated +#[test] +fn bold_italic_greek() -> Result<()> { + let expr = " 𝜜,𝜴"; + test("hu", "SimpleSpeak", expr, "bold cap alpha comma, bold cap omega")?; + let expr = " 𝜶,𝝎"; + test("hu", "SimpleSpeak", expr, "bold alpha comma, bold omega")?; + // MathType private space versions + let expr = " ,"; + test("hu", "SimpleSpeak", expr, "bold cap alpha comma, bold cap omega")?; + let expr = " ,"; + test("hu", "SimpleSpeak", expr, "bold alpha comma, bold omega")?; + return Ok(()); + +} + +// AI generated +#[test] +fn bold_italic_greek_others() -> Result<()> { + let expr = " 𝝏,𝝕"; + test("hu", "SimpleSpeak", expr, "bold partial derivative, comma, bold pi")?; + // MathType private space versions + let expr = " ,"; + test("hu", "SimpleSpeak", expr, "bold partial derivative, comma, bold pi")?; + return Ok(()); + +} + +// AI generated +#[test] +fn sans_serif_bold_greek() -> Result<()> { + let expr = " 𝝖,𝝮"; + test("hu", "SimpleSpeak", expr, "bold cap alpha comma, bold cap omega")?; + let expr = " 𝝰,𝞈"; + test("hu", "SimpleSpeak", expr, "bold alpha comma, bold omega")?; + // MathType private space versions + let expr = " ,"; + test("hu", "SimpleSpeak", expr, "bold cap alpha comma, bold cap omega")?; + let expr = " ,"; + test("hu", "SimpleSpeak", expr, "bold alpha comma, bold omega")?; + return Ok(()); + +} + +// AI generated +#[test] +fn sans_serif_bold_greek_others() -> Result<()> { + let expr = " 𝞉,𝞏"; + test("hu", "SimpleSpeak", expr, "bold partial derivative, comma, bold pi")?; + // MathType private space versions + let expr = " ,"; + test("hu", "SimpleSpeak", expr, "bold partial derivative, comma, bold pi")?; + return Ok(()); + +} + +// AI generated +#[test] +fn sans_serif_bold_italic_greek() -> Result<()> { + let expr = " 𝞐,𝞨"; + test("hu", "SimpleSpeak", expr, "bold cap alpha comma, bold cap omega")?; + let expr = " 𝞪,𝟂"; + test("hu", "SimpleSpeak", expr, "bold alpha comma, bold omega")?; + // MathType private space versions + let expr = " ,"; + test("hu", "SimpleSpeak", expr, "bold cap alpha comma, bold cap omega")?; + let expr = " ,"; + test("hu", "SimpleSpeak", expr, "bold alpha comma, bold omega")?; + return Ok(()); + +} + +// AI generated +#[test] +fn sans_serif_bold_italic_greek_others() -> Result<()> { + let expr = " 𝟃,𝟉"; + test("hu", "SimpleSpeak", expr, "bold partial derivative, comma, bold pi")?; + // MathType private space versions + let expr = " ,"; + test("hu", "SimpleSpeak", expr, "bold partial derivative, comma, bold pi")?; + return Ok(()); + +} + +// AI generated +#[test] +fn pua_regular() -> Result<()> { + let expr = " ,"; + test("hu", "SimpleSpeak", expr, "cap eigh comma, cap z")?; + return Ok(()); + +} + +// AI generated +#[test] +fn turned() -> Result<()> { + let expr = " ,"; + test("hu", "SimpleSpeak", expr, "turned cap f comma, turned sans-serif cap y")?; + return Ok(()); + + } + +// AI generated +#[test] +fn unicode_typo_regressions() -> Result<()> { + test("hu", "SimpleSpeak", "", "to the i-th power")?; + test("hu", "SimpleSpeak", "", "conjunction")?; + Ok(()) +} + +// AI generated +#[test] +fn enclosed_numbers() -> Result<()> { + let expr = " ,"; + test("hu", "SimpleSpeak", expr, "circled 1 comma, circled 9")?; + let expr = " ,"; + test("hu", "SimpleSpeak", expr, "black circled one comma, circled number fifty")?; + let expr = " ,"; + test("hu", "SimpleSpeak", expr, "parenthesized 1 comma, parenthesized 9")?; + let expr = " ,"; + test("hu", "SimpleSpeak", expr, "1 with period comma, 9 with period")?; + let expr = " ,"; + test("hu", "SimpleSpeak", expr, "double circled 1 comma, double circled 9")?; + return Ok(()); + +} diff --git a/tests/Languages/hu/chemistry.rs b/tests/Languages/hu/chemistry.rs new file mode 100644 index 000000000..51612bd96 --- /dev/null +++ b/tests/Languages/hu/chemistry.rs @@ -0,0 +1,787 @@ +/// Tests for rules shared between various speech styles: +/// * modified var +use crate::common::*; +use anyhow::Result; + +// AI generated +#[test] +fn salt() -> Result<()> { + let expr = "NaCl"; + test_prefs("hu", "SimpleSpeak", vec![("Verbosity", "Terse")], expr, "cap n eigh, cap c l")?; + return Ok(()); + +} + +// AI generated +#[test] +fn water() -> Result<()> { + let expr = "H2O"; + test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Terse")], expr, "cap h, 2 cap o")?; + test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Medium")], expr, "cap h, sub 2 cap o")?; + test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Verbose")], expr, "cap h, subscript 2, cap o")?; + return Ok(()); + +} + +// AI generated +#[test] +fn carbon() -> Result<()> { + let expr = "C"; // not enough to trigger recognition + test_prefs("hu", "SimpleSpeak", vec![("Verbosity", "Terse")], expr, "cap c")?; + return Ok(()); + +} + +// AI generated +#[test] +fn sulfate() -> Result<()> { + let expr = " + [SO4] + 2 + "; + test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Medium")], expr, "open bracket, cap s, cap o, sub 4; close bracket super 2 minus")?; + return Ok(()); + +} + +// AI generated +#[test] +fn aluminum_sulfate() -> Result<()> { + let expr = "Al2 + (SO4)3"; + test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Terse")], expr, "cap eigh l, 2, open cap s, cap o, 4, close 3")?; + test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Medium")], expr, "cap eigh l, sub 2; open paren, cap s, cap o, sub 4; close paren sub 3")?; + test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Verbose")], expr, "cap eigh l, subscript 2; open paren, cap s, cap o, subscript 4; close paren subscript 3")?; + return Ok(()); + +} + +// AI generated +#[test] +fn ethanol_bonds() -> Result<()> { + let expr = " + + C + H 3 + + C + H 2 + + O + H + + "; + test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Terse")], expr, "cap c, cap h, 3 single bond cap c, cap h, 2 single bond cap o, cap h")?; + + return Ok(()); + +} + +// AI generated +#[test] +fn dichlorine_hexoxide() -> Result<()> { + let expr = " + + [ClO2] + + + + + [ClO4] + - + + "; + test_prefs("hu", "SimpleSpeak", vec![("Verbosity", "Terse")], + expr, "open bracket, cap c l, cap o, 2, close bracket plus; \ + open bracket, cap c l, cap o, 4, close bracket minus")?; + test_prefs("hu", "SimpleSpeak", vec![("Verbosity", "Medium")], + expr, "open bracket, cap c l, cap o, sub 2; close bracket super plus; \ + open bracket, cap c l, cap o, sub 4; close bracket super minus")?; + test_prefs("hu", "SimpleSpeak", vec![("Verbosity", "Verbose")], + expr, "open bracket, cap c l, cap o, subscript 2; close bracket superscript plus; \ + open bracket, cap c l, cap o, subscript 4; close bracket superscript minus")?; + return Ok(()); + +} + + +// AI generated +#[test] +fn ethylene_with_bond() -> Result<()> { + let expr = " + H2C + = + CH2 + "; + test_prefs("hu", "SimpleSpeak", vec![("Verbosity", "Terse")], expr, "cap h, 2 cap c, double bond cap c, cap h, 2")?; + return Ok(()); + +} + +// AI generated +#[test] +fn ferric_chloride_aq() -> Result<()> { + let expr = " + Fe + Cl3 + (aq) + "; + test_prefs("hu", "SimpleSpeak", vec![("Verbosity", "Terse")], expr, "cap f e, cap c l, 3 aqueous")?; + return Ok(()); + + } + +// AI generated +#[test] +fn ethylene_with_colon_bond() -> Result<()> { + let expr = " + H2C + :: + CH2 + "; + test_prefs("hu", "SimpleSpeak", vec![("Verbosity", "Terse")], expr, "cap h, 2 cap c, double bond cap c, cap h, 2")?; + return Ok(()); + +} + +// AI generated +#[test] +fn beta_decay() -> Result<()> { + let expr = " + + C + + 6 + 14 + + + + N + + 7 + 14 + + + + + e + + + + 1 + + 0 + + "; + test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Terse")], expr, + "14, 6, cap c; forms, 14, 7, cap n; plus 0, negative 1, e")?; + test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Medium")], expr, + "super 14, sub 6, cap c; reacts to form; super 14, sub 7, cap n; plus super 0, sub negative 1, e")?; + test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Verbose")], expr, + "superscript 14, subscript 6, cap c; reacts to form; superscript 14, subscript 7, cap n; plus, superscript 0, subscript negative 1, e")?; + return Ok(()); + +} + +// AI generated +#[test] +fn mhchem_beta_decay() -> Result<()> { + let expr = " + + + + + + + A + + + + + + + + + 6 + + + + + + + + + 14 + + + + + + + + + + + + A + + + + + + + + + 2 + + + + + + + + 6 + + + + + + + + + + + + 2 + + + + + + + + 14 + + + + + + C + + + + + + + + + + + + A + + + + + + + + + 7 + + + + + + + + + 14 + + + + + + + + + + + + A + + + + + + + + + 2 + + + + + + + + 7 + + + + + + + + + + + + 2 + + + + + + + + 14 + + + + + + N + + + + + + + + + + + A + + + + + + + + + + 1 + + + + + + + + + 0 + + + + + + + + + + + + A + + + + + + + + + 2 + + + + + + + + + 1 + + + + + + + + + + + + 2 + + + + + + + + 0 + + + + + + e + + + "; + test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Terse")], expr, + "14, 6, cap c; forms, 14, 7, cap n; plus 0, negative 1, e")?; + test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Medium")], expr, + "super 14, sub 6, cap c; reacts to form; super 14, sub 7, cap n; plus super 0, sub negative 1, e")?; + test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Verbose")], expr, + "superscript 14, subscript 6, cap c; reacts to form; superscript 14, subscript 7, cap n; plus, superscript 0, subscript negative 1, e")?; + return Ok(()); + +} + +// AI generated +#[test] +fn hcl_na_yields() -> Result<()> { + let expr = " + 2HCl+2Na + + 2NaCl+ + H 2 + + "; + test_prefs("hu", "SimpleSpeak", vec![("Verbosity", "Verbose")], expr, + "2, cap h, cap c l; plus 2 cap n eigh; reacts to form; 2, cap n eigh, cap c l; plus cap h, subscript 2")?; + return Ok(()); + +} + +// AI generated +#[test] +fn mhchem_so4_2plus() -> Result<()> { + let expr = " + + + SO + + + + + + + A + + + + + + + + 4 + + + + + + + + + + A + + + + + + 2 + + + + + + "; + test_prefs("hu", "SimpleSpeak", vec![("Verbosity", "Terse")], expr, "cap s; cap o, 4, 2 plus")?; + test_prefs("hu", "SimpleSpeak", vec![("Verbosity", "Medium")], expr, "cap s; cap o, sub 4, super 2 plus")?; + test_prefs("hu", "SimpleSpeak", vec![("Verbosity", "Verbose")], expr, "cap s; cap o, subscript 4, superscript 2 plus")?; + return Ok(()); + +} + + +// AI generated +#[test] +fn mhchem_hcl_aq_etc() -> Result<()> { + let expr = " + + 2 + + + + + HCl + + + ( + + aq + + ) + + + + + 2 + + + + + Na + + + ( + + s + + ) + + + + + + 2 + + + + + NaCl + + + ( + + aq + + ) + + + + + + H + + + + + + + A + + + + + + + + 2 + + + + + + ( + + g + + ) + + "; + test_prefs("hu", "SimpleSpeak", vec![("Verbosity", "Terse")], + expr, "2, cap h, cap c l, aqueous; plus, 2, cap n eigh, solid; forms; 2, cap n eigh, cap c l, aqueous; plus, cap h, 2, gas")?; + + return Ok(()); + +} + + +// AI generated +#[test] +fn mhchem_barbed_equilibrium() -> Result<()> { + let expr = " + + + + H + 2 + + + + + ( + g + ) + + + + + + + + I + 2 + + + + + ( + g + ) + + + + + + + - + + + - + + + + + 2 + + + H + + I + + + ( + g + ) + + + + + "; + test_prefs("hu", "SimpleSpeak", vec![("Verbosity", "Terse")], + expr, "cap h, 2, gas; plus; cap i, 2, gas; is in equilibrium with, 2, cap h, cap i, gas")?; + return Ok(()); + +} + + + +// AI generated +#[test] +fn mhchem_roman_in_superscript() -> Result<()> { + let expr = " + + + Fe + + II + + + + Fe + + III + + + + O + 4 + + + + "; + test_prefs("hu", "SimpleSpeak", vec![("Verbosity", "Terse")], + expr, "cap f e, 2; cap f e, 3; cap o, 4")?; + return Ok(()); + +} + + +// AI generated +#[test] +fn dropped_msubsup_bug_358() -> Result<()> { + let expr = r#" + + + 2 + + + SO + + 2 + + + + + + + + + O + + 2 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 2 + + + SO + + 3 + + + + + + + + "#; + test_prefs("hu", "SimpleSpeak", vec![("Verbosity", "Terse")], + expr, "2, cap s, cap o, 2; plus; cap o, 2 is in equilibrium with, 2, cap s, cap o, 3")?; + return Ok(()); + +} + + diff --git a/tests/Languages/hu/intent.rs b/tests/Languages/hu/intent.rs new file mode 100644 index 000000000..0e5af2d02 --- /dev/null +++ b/tests/Languages/hu/intent.rs @@ -0,0 +1,157 @@ +/// Tests for rules shared between various speech styles: +/// * this has tests focused on the various alphabets +use crate::common::*; +use anyhow::Result; + + +// AI generated +#[test] +fn silent_intent() -> Result<()> { + let expr = " 2 x "; + test("hu", "SimpleSpeak", expr, "2 x")?; + test("hu", "LiteralSpeak", expr, "2 x")?; + return Ok(()); + +} + +// AI generated +#[test] +fn prefix_intent() -> Result<()> { + let expr = r#" x T "#; + test("hu", "SimpleSpeak", expr, "testing x")?; + return Ok(()); + +} + +// AI generated +#[test] +fn postfix_intent() -> Result<()> { + let expr = r#" x T "#; + test("hu", "SimpleSpeak", expr, "x testing")?; + return Ok(()); + +} + +// AI generated +#[test] +fn infix_intent() -> Result<()> { + let expr = r#" + x + y + z + "#; + test("hu", "SimpleSpeak", expr, "x testing y testing z testing 2")?; + return Ok(()); + +} + +// AI generated +#[test] +fn infix_intent_no_args() -> Result<()> { + // this is illegal intent, so it is just an mrow with one child + let expr = r#" + x + "#; + test("hu", "SimpleSpeak", expr, "x")?; + return Ok(()); + +} + +// AI generated +#[test] +fn infix_intent_one_arg() -> Result<()> { + let expr = r#" + x + "#; + // Note: we say the intent name because there are infix plus/minus with a single arg due to continued rows or combined columns + test("hu", "SimpleSpeak", expr, "testing x")?; + return Ok(()); + +} + +// AI generated +#[test] +fn function_intent() -> Result<()> { + let expr = r#" + x + y + z + "#; + test("hu", "SimpleSpeak", expr, "testing of x comma, y comma, z comma, 2")?; + return Ok(()); + +} + +// AI generated +#[test] +fn function_no_args_intent() -> Result<()> { + // this is illegal intent, so it is just an mrow with one child + let expr = r#" + x + "#; + test("hu", "SimpleSpeak", expr, "x")?; + return Ok(()); + +} + +// AI generated +#[test] +fn function_one_arg_intent() -> Result<()> { + let expr = r#" + x + "#; + test("hu", "SimpleSpeak", expr, "testing of x")?; + return Ok(()); + +} + +// AI generated +#[test] +fn silent_intent_mi() -> Result<()> { + let expr = " 2 x"; + test("hu", "SimpleSpeak", expr, "2")?; + test("hu", "ClearSpeak", expr, "2")?; + return Ok(()); + +} + +// AI generated +#[test] +fn silent_intent_msup() -> Result<()> { + let expr = " + + H + 2 + "; + test("hu", "SimpleSpeak", expr, "cap h 2")?; + test("hu", "ClearSpeak", expr, "cap h 2")?; + return Ok(()); + +} + +// AI generated +#[test] +fn silent_intent_underscore() -> Result<()> { + let expr = " + + H + 2 + "; + test("hu", "SimpleSpeak", expr, "cap h 2")?; + test("hu", "ClearSpeak", expr, "cap h 2")?; + return Ok(()); + +} + +// AI generated +#[test] +fn intent_prob_x() -> Result<()> { + let expr = " + + x + P + "; + test("hu", "ClearSpeak", expr, "probability of x")?; + return Ok(()); + +} diff --git a/tests/Languages/hu/mtable.rs b/tests/Languages/hu/mtable.rs new file mode 100644 index 000000000..86ba304c5 --- /dev/null +++ b/tests/Languages/hu/mtable.rs @@ -0,0 +1,1238 @@ +use crate::common::*; +use anyhow::Result; + +// AI generated +#[test] +fn matrix_1x1() -> Result<()> { + let expr = " + + + ( + + 3 + + ) + + "; + test("hu", "ClearSpeak", expr, "the 1 by 1 matrix with entry 3")?; + test("hu", "SimpleSpeak", expr, "the 1 by 1 matrix with entry 3")?; + return Ok(()); + +} + +// AI generated +#[test] +fn determinant_1x1() -> Result<()> { + let expr = " + + + | + + 3 + + | + + "; + test("hu", "ClearSpeak", expr, "the 1 by 1 determinant with entry 3")?; + test("hu", "SimpleSpeak", expr, "the 1 by 1 determinant with entry 3")?; + return Ok(()); + +} + + +// AI generated +#[test] +fn matrix_1x2() -> Result<()> { + let expr = " + + + ( + + + + 3 + + + 5 + + + + ) + + "; + test("hu", "ClearSpeak", expr, "the 1 by 2 row matrix; 3, 5")?; + test("hu", "SimpleSpeak", expr, "the 1 by 2 row matrix; 3, 5")?; + return Ok(()); + +} + + +// AI generated +#[test] +fn matrix_1x3() -> Result<()> { + let expr = " + + + ( + + + + -x + + + 5 + + + 12 + + + + ) + + "; + test("hu", "ClearSpeak", expr, "the 1 by 3 row matrix; negative x, 5, 12")?; + test("hu", "SimpleSpeak", expr, "the 1 by 3 row matrix; negative x, 5, 12")?; + return Ok(()); + +} + +// AI generated +#[test] +fn matrix_2x1_not_simple() -> Result<()> { + let expr = " + + + ( + + + + + x+1 + + + + + + + x-1 + + + + ) + + "; + test("hu", "ClearSpeak", expr, "the 2 by 1 column matrix; row 1; x plus 1; row 2; x minus 1")?; + test("hu", "SimpleSpeak", expr, "the 2 by 1 column matrix; row 1; x plus 1; row 2; x minus 1")?; + return Ok(()); + +} +// AI generated +#[test] +fn matrix_3x1_not_simple() -> Result<()> { + let expr = " + + + ( + + + + + x + + + + + + + a + + + + + + + x + + x+1 + + + + + + ) + "; + test("hu", "SimpleSpeak", expr, "the 3 by 1 column matrix; \ + row 1; x; \ + row 2; eigh; \ + row 3; fraction, x over, x plus 1, end fraction")?; + test("hu", "ClearSpeak", expr, "the 3 by 1 column matrix; \ + row 1; x; \ + row 2; eigh; \ + row 3; the fraction with numerator x; and denominator x plus 1")?; + return Ok(()); + +} + +// AI generated +#[test] +fn determinant_2x2() -> Result<()> { + let expr = " + + | + + + + 2 + + + 1 + + + + + 7 + + + 5 + + + + + | + "; + test("hu", "ClearSpeak", expr, "the 2 by 2 determinant; row 1; 2, 1; row 2; 7, 5")?; + test("hu", "SimpleSpeak", expr, "the 2 by 2 determinant; row 1; 2, 1; row 2; 7, 5")?; + return Ok(()); + +} + +// AI generated +#[test] +fn matrix_2x3() -> Result<()> { + let expr = " + + + [ + + + + 3 + + + 1 + + + 4 + + + + + 0 + + + 2 + + + 6 + + + + ] + + "; + test("hu", "ClearSpeak", expr, "the 2 by 3 matrix; row 1; 3, 1, 4; row 2; 0, 2, 6")?; + test("hu", "SimpleSpeak", expr, "the 2 by 3 matrix; row 1; 3, 1, 4; row 2; 0, 2, 6")?; + return Ok(()); + +} + +// AI generated +#[test] +fn matrix_2x3_labeled() -> Result<()> { + let expr = " + + + [ + + + + (3.1) + + + 3 + + + 1 + + + 4 + + + + + 0 + + + 2 + + + 6 + + + + ] + + "; + test("hu", "ClearSpeak", expr, + "the 2 by 3 matrix; row 1 with label (3.1); column 1; 3, column 2; 1, column 3; 4; \ + row 2; column 1; 0, column 2; 2, column 3; 6")?; + test("hu", "SimpleSpeak", expr, + "the 2 by 3 matrix; row 1 with label (3.1); column 1; 3, column 2; 1, column 3; 4; \ + row 2; column 1; 0, column 2; 2, column 3; 6")?; + return Ok(()); + +} + +// AI generated +#[test] +fn matrix_3x1() -> Result<()> { + let expr = " + + + [ + + + + 1 + + + + + 2 + + + + + 3 + + + ] + + "; + test("hu", "ClearSpeak", expr, "the 3 by 1 column matrix; 1; 2; 3")?; + test("hu", "SimpleSpeak", expr, "the 3 by 1 column matrix; 1; 2; 3")?; + return Ok(()); + +} + +// AI generated +#[test] +fn matrix_4x1() -> Result<()> { + let expr = " + + + ( + + + + 3 + + + + + 6 + + + + + 1 + + + + + 2 + + + + ) + + "; + test("hu", "ClearSpeak", expr, "the 4 by 1 column matrix; row 1; 3; row 2; 6; row 3; 1; row 4; 2")?; + test("hu", "SimpleSpeak", expr, "the 4 by 1 column matrix; row 1; 3; row 2; 6; row 3; 1; row 4; 2")?; + return Ok(()); + +} + +// AI generated +#[test] +fn matrix_4x1_labeled() -> Result<()> { + let expr = " + + + ( + + + + 3 + + + + + 6 + + + + + 1 + + + + + (3.1) + + + 2 + + + + ) + + "; + test("hu", "ClearSpeak", expr, + "the 4 by 1 column matrix; row 1; 3; row 2; 6; row 3; 1; row 4 with label (3.1); 2")?; + test("hu", "SimpleSpeak", expr, + "the 4 by 1 column matrix; row 1; 3; row 2; 6; row 3; 1; row 4 with label (3.1); 2")?; + return Ok(()); + +} + +// AI generated +#[test] +fn matrix_1x4() -> Result<()> { + let expr = " + + + ( + + + + 3 + + + 6 + + + 1 + + + 2 + + + + ) + + "; + test("hu", "ClearSpeak", expr, "the 1 by 4 row matrix; column 1; 3, column 2; 6, column 3; 1, column 4; 2")?; + test("hu", "SimpleSpeak", expr, "the 1 by 4 row matrix; column 1; 3, column 2; 6, column 3; 1, column 4; 2")?; + return Ok(()); + +} + +// AI generated +#[test] +fn matrix_4x4() -> Result<()> { + let expr = " + + + ( + + + + 0 + + + 3 + + + 4 + + + 3 + + + + + 2 + + + 1 + + + 0 + + + 9 + + + + + 3 + + + 0 + + + 2 + + + 1 + + + + + 6 + + + 2 + + + 9 + + + 0 + + + + ) + + "; + test("hu", "ClearSpeak", expr, "the 4 by 4 matrix; \ + row 1; column 1; 0, column 2; 3, column 3; 4, column 4; 3; \ + row 2; column 1; 2, column 2; 1, column 3; 0, column 4; 9; \ + row 3; column 1; 3, column 2; 0, column 3; 2, column 4; 1; \ + row 4; column 1; 6, column 2; 2, column 3; 9, column 4; 0")?; + test("hu", "SimpleSpeak", expr, "the 4 by 4 matrix; \ + row 1; column 1; 0, column 2; 3, column 3; 4, column 4; 3; \ + row 2; column 1; 2, column 2; 1, column 3; 0, column 4; 9; \ + row 3; column 1; 3, column 2; 0, column 3; 2, column 4; 1; \ + row 4; column 1; 6, column 2; 2, column 3; 9, column 4; 0")?; + return Ok(()); +} + +// AI generated +#[test] +fn matrix_4x2() -> Result<()> { + let expr = " + + + ( + + + + 1 + + + 3 + + + + + 4 + + + 2 + + + + + 2 + + + 1 + + + + + 0 + + + 5 + + + + + ) + + "; + test("hu", "ClearSpeak", expr, "the 4 by 2 matrix; \ + row 1; column 1; 1, column 2; 3; \ + row 2; column 1; 4, column 2; 2; \ + row 3; column 1; 2, column 2; 1; \ + row 4; column 1; 0, column 2; 5\ + ")?; + test("hu", "SimpleSpeak", expr, "the 4 by 2 matrix; \ + row 1; column 1; 1, column 2; 3; \ + row 2; column 1; 4, column 2; 2; \ + row 3; column 1; 2, column 2; 1; \ + row 4; column 1; 0, column 2; 5\ + ")?; + return Ok(()); +} + +// put absolute value test here since it is related to determinate and is small for its own file +// AI generated +#[test] +fn simple_absolute_value() -> Result<()> { + let expr = " + | x | + "; + test("hu", "SimpleSpeak", expr, "the absolute value of x")?; + test("hu", "ClearSpeak", expr, "the absolute value of x")?; + test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Terse"), ("ClearSpeak_AbsoluteValue", "Auto")], expr, "absolute value of x")?; + test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Verbose"), ("ClearSpeak_AbsoluteValue", "AbsEnd")], + expr, "the absolute value of x, end absolute value")?; + return Ok(()); +} + +// AI generated +#[test] +fn absolute_value_plus_1() -> Result<()> { +let expr = " + | + x+1 + | + "; + test("hu", "ClearSpeak", expr, "the absolute value of x plus 1")?; + test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Terse"), ("ClearSpeak_AbsoluteValue", "AbsEnd")], + expr, "absolute value of x plus 1, end absolute value")?; + return Ok(()); +} + +// AI generated +#[test] +fn simple_cardinality_value() -> Result<()> { + let expr = " + | S | + "; + test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_AbsoluteValue", "Cardinality")], expr, + "the cardinality of cap s")?; + return Ok(()); +} + +// Test preferences +// AI generated +#[test] +fn simple_matrix_speak_col_num() -> Result<()> { +let expr = " + + ( + + + + 2 + 1 + + + 7 + 5 + + + ) + "; + test_ClearSpeak("hu", "ClearSpeak_Matrix", "SpeakColNum", + expr, "the 2 by 2 matrix; row 1; column 1; 2, column 2; 1; row 2; column 1; 7, column 2; 5")?; + return Ok(()); +} + +// AI generated +#[test] +fn col_matrix_3x1_speak_col_num() -> Result<()> { +let expr = " + + ( + + + + 1 + + + 2 + + + 3 + + + ) + "; +test_ClearSpeak("hu", "ClearSpeak_Matrix", "SpeakColNum", + expr, "the 3 by 1 column matrix; row 1; 1; row 2; 2; row 3; 3")?; + return Ok(()); +} + +// AI generated +#[test] +fn row_matrix_1x2_speak_col_num() -> Result<()> { +let expr = " + + [ + + + + 1 2 + + + ] + "; +test_ClearSpeak("hu", "ClearSpeak_Matrix", "SpeakColNum", + expr, "the 1 by 2 row matrix; column 1; 1, column 2; 2")?; + return Ok(()); +} + +// AI generated +#[test] +fn matrix_2x2_speak_col_num() -> Result<()> { +let expr = "( + + + b11 + b12 + + + b21 + b22 + + + )"; +test_ClearSpeak("hu", "ClearSpeak_Matrix", "SpeakColNum", + expr, "the 2 by 2 matrix; row 1; column 1; b sub 1 1; column 2; b sub 1 2; \ + row 2; column 1; b sub 2 1; column 2; b sub 2 2")?; + return Ok(()); +} + + +// AI generated +#[test] +fn simple_matrix_silent_col_num() -> Result<()> { +let expr = " + + ( + + + + 2 + 1 + + + 7 + 5 + + + ) + "; + test_ClearSpeak("hu", "ClearSpeak_Matrix", "SilentColNum", + expr, "the 2 by 2 matrix; row 1; 2, 1; row 2; 7, 5")?; + return Ok(()); +} + +// AI generated +#[test] +fn col_matrix_3x1_silent_col_num() -> Result<()> { +let expr = " + + ( + + + + 1 + + + 2 + + + 3 + + + ) + "; +test_ClearSpeak("hu", "ClearSpeak_Matrix", "SilentColNum", + expr, "the 3 by 1 column matrix; 1; 2; 3")?; + return Ok(()); +} + +// AI generated +#[test] +fn row_matrix_1x2_silent_col_num() -> Result<()> { +let expr = " + + [ + + + + 1 2 + + + ] + "; +test_ClearSpeak("hu", "ClearSpeak_Matrix", "SilentColNum", + expr, "the 1 by 2 row matrix; 1, 2")?; + return Ok(()); +} + +// AI generated +#[test] +fn matrix_2x2_silent_col_num() -> Result<()> { +let expr = "( + + + b11 + b12 + + + b21 + b22 + + + )"; +test_ClearSpeak("hu", "ClearSpeak_Matrix", "SilentColNum", + expr, "the 2 by 2 matrix; row 1; b sub 1 1; b sub 1 2; \ + row 2; b sub 2 1; b sub 2 2")?; + return Ok(()); + } + + +// AI generated +#[test] +fn simple_matrix_end_matrix() -> Result<()> { +let expr = " + + ( + + + + 2 + 1 + + + 7 + 5 + + + ) + "; + test_ClearSpeak("hu", "ClearSpeak_Matrix", "EndMatrix", + expr, "the 2 by 2 matrix; row 1; 2, 1; row 2; 7, 5; end matrix")?; + return Ok(()); + } + +// AI generated +#[test] +fn col_matrix_3x1_end_matrix() -> Result<()> { +let expr = " + + ( + + + + 1 + + + 2 + + + 3 + + + ) + "; +test_ClearSpeak("hu", "ClearSpeak_Matrix", "EndMatrix", + expr, "the 3 by 1 column matrix; 1; 2; 3; end matrix")?; + return Ok(()); + } + +// AI generated +#[test] +fn row_matrix_1x2_end_matrix() -> Result<()> { +let expr = " + + [ + + + + 1 2 + + + ] + "; +test_ClearSpeak("hu", "ClearSpeak_Matrix", "EndMatrix", + expr, "the 1 by 2 row matrix; 1, 2; end matrix")?; + return Ok(()); + } + +// AI generated +#[test] +fn matrix_2x2_end_matrix() -> Result<()> { +let expr = "( + + + b11 + b12 + + + b21 + b22 + + + )"; +test_ClearSpeak("hu", "ClearSpeak_Matrix", "EndMatrix", + expr, "the 2 by 2 matrix; row 1; column 1; b sub 1 1; column 2; b sub 1 2; \ + row 2; column 1; b sub 2 1; column 2; b sub 2 2; end matrix")?; + return Ok(()); + } + + +// AI generated +#[test] +fn simple_matrix_vector() -> Result<()> { +let expr = " + + ( + + + + 2 + 1 + + + 7 + 5 + + + ) + "; + test_ClearSpeak("hu", "ClearSpeak_Matrix", "Vector", + expr, "the 2 by 2 matrix; row 1; 2, 1; row 2; 7, 5")?; + return Ok(()); + } + +// AI generated +#[test] +fn col_matrix_3x1_vector() -> Result<()> { +let expr = " + + ( + + + + 1 + + + 2 + + + 3 + + + ) + "; +test_ClearSpeak("hu", "ClearSpeak_Matrix", "Vector", + expr, "the 3 by 1 column vector; 1; 2; 3")?; + return Ok(()); + } + +// AI generated +#[test] +fn row_matrix_1x2_vector() -> Result<()> { +let expr = " + + [ + + + + 1 2 + + + ] + "; +test_ClearSpeak("hu", "ClearSpeak_Matrix", "Vector", + expr, "the 1 by 2 row vector; 1, 2")?; + return Ok(()); + } + +// AI generated +#[test] +fn matrix_2x2_vector() -> Result<()> { +let expr = "( + + + b11 + b12 + + + b21 + b22 + + + )"; +test_ClearSpeak("hu", "ClearSpeak_Matrix", "Vector", + expr, "the 2 by 2 matrix; row 1; column 1; b sub 1 1; column 2; b sub 1 2; \ + row 2; column 1; b sub 2 1; column 2; b sub 2 2")?; + return Ok(()); + } + + +// AI generated +#[test] +fn simple_matrix_end_vector() -> Result<()> { +let expr = " + + ( + + + + 2 + 1 + + + 7 + 5 + + + ) + "; + test_ClearSpeak("hu", "ClearSpeak_Matrix", "EndVector", + expr, "the 2 by 2 matrix; row 1; 2, 1; row 2; 7, 5; end matrix")?; + return Ok(()); + } + +// AI generated +#[test] +fn col_matrix_3x1_end_vector() -> Result<()> { +let expr = " + + ( + + + + 1 + + + 2 + + + 3 + + + ) + "; +test_ClearSpeak("hu", "ClearSpeak_Matrix", "EndVector", + expr, "the 3 by 1 column vector; 1; 2; 3; end vector")?; + return Ok(()); + } + +// AI generated +#[test] +fn row_matrix_1x2_end_vector() -> Result<()> { +let expr = " + + [ + + + + 1 2 + + + ] + "; +test_ClearSpeak("hu", "ClearSpeak_Matrix", "EndVector", + expr, "the 1 by 2 row vector; 1, 2; end vector")?; + return Ok(()); + } + +// AI generated +#[test] +fn matrix_2x2_end_vector() -> Result<()> { +let expr = "( + + + b11 + b12 + + + b21 + b22 + + + )"; +test_ClearSpeak("hu", "ClearSpeak_Matrix", "EndVector", + expr, "the 2 by 2 matrix; row 1; column 1; b sub 1 1; column 2; b sub 1 2; \ + row 2; column 1; b sub 2 1; column 2; b sub 2 2; end matrix")?; + return Ok(()); + } + + + +// AI generated +#[test] +fn matrix_binomial() -> Result<()> { + let expr = " + ( + 32 + ) + "; + test_ClearSpeak("hu", "ClearSpeak_Matrix", "Combinatorics", expr, "3 choose 2")?; + return Ok(()); + } + +// AI generated +#[test] +fn matrix_times() -> Result<()> { + let expr = " + 1234 + abcd + "; + test("hu", "SimpleSpeak", expr, + "the 2 by 2 matrix; row 1; 1, 2; row 2; 3, 4; times, the 2 by 2 matrix; row 1; eigh, b; row 2; c, d")?; + return Ok(()); + } + +// AI generated +#[test] +fn unknown_mtable_property() -> Result<()> { + let expr = " + + + + a + + + = + + + + b + + + c + + d + + + + + + + + + + e + + f + + + + "; + test("hu", "ClearSpeak", expr, + "2 lines; line 1; eigh is equal to, b plus c minus d; line 2; plus e minus f")?; + return Ok(()); + } + + +// AI generated +#[test] +fn zero_matrix() -> Result<()> { + let expr = " + [ + + 00 + 00 + + ] + "; + test("hu", "SimpleSpeak", expr, + "the 2 by 2 zero matrix")?; + return Ok(()); + } + +// AI generated +#[test] +fn identity_matrix() -> Result<()> { + let expr = " + ( + + 100 + 010 + 001 + + ) + "; + test("hu", "SimpleSpeak", expr, + "the 3 by 3 identity matrix")?; + return Ok(()); + } + +// AI generated +#[test] +fn identity_matrix_false_positive_negative_one() -> Result<()> { + let expr = " + [ + + 10 + 0-1 + + ] + "; + test_prefs("hu", "SimpleSpeak", vec![("Verbosity", "Terse")], + expr, "the 2 by 2 diagonal matrix; column 1; 1; column 2; negative 1")?; + Ok(()) +} + +// AI generated +#[test] +fn identity_matrix_false_positive_zero_diagonal() -> Result<()> { + let expr = " + [ + + 10 + 00 + + ] + "; + test_prefs("hu", "SimpleSpeak", vec![("Verbosity", "Terse")], + expr, "the 2 by 2 diagonal matrix; column 1; 1")?; + Ok(()) +} + +// AI generated +#[test] +fn diagonal_matrix() -> Result<()> { + let expr = " + ( + + 200 + 010 + 00x2 + + ) + "; + test_prefs("hu", "SimpleSpeak", vec![("Verbosity", "Terse")], + expr, "the 3 by 3 diagonal matrix; column 1; 2; column 2; 1; column 3; x squared")?; + // test_prefs("hu", "SimpleSpeak", vec![("Verbosity", "Verbose")], + // expr, "the 3 by 3 diagonal matrix; row 1, column 1, 2; row 2, column 2, 1; row 3, column 3, x squared"); + return Ok(()); + } + +// AI generated +#[test] +fn single_line_with_label() -> Result<()> { + let expr = r#" + + + (2) + 𝑏 = 2 + + + "#; + test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Terse")], + expr, "1 line, with label 2; b equals 2")?; + test_prefs("hu", "SimpleSpeak", vec![("Verbosity", "Terse")], + expr, "1 equation, with label 2; b equals 2")?; + return Ok(()); + } diff --git a/tests/Languages/hu/shared.rs b/tests/Languages/hu/shared.rs new file mode 100644 index 000000000..12968c6c9 --- /dev/null +++ b/tests/Languages/hu/shared.rs @@ -0,0 +1,599 @@ +/// Tests for rules shared between various speech styles: +/// * modified var +use crate::common::*; +use anyhow::Result; + +// AI generated +#[test] +fn modified_vars() -> Result<()> { + let expr = " + a ` + b ~ + c ̆ + b ̌ + c ` + + r ˇ + + x . + y ˙ + z ¨ + u + v + + x ^ + + t + "; + test("hu", "SimpleSpeak", expr, + "eigh grave, b tilde, c breve, b check, c grave; plus \ + r check plus; x dot, y dot, z double dot, u triple dot, v quadruple dot; plus x hat, plus vector t")?; + return Ok(()); + +} + +// AI generated +#[test] +fn limit() -> Result<()> { + let expr = " + + lim + x 0 + + + + sin x + x + + + "; + test("hu", "SimpleSpeak", expr, "the limit as x approaches 0, of, fraction, sine of x, over x, end fraction")?; + test_prefs("hu", "SimpleSpeak", vec![("Impairment", "LearningDisability")], expr, + "the limit as x approaches 0, of; sine of x, over x")?; + return Ok(()); + +} + +// AI generated +#[test] +fn limit_from_below() -> Result<()> { + let expr = " + + lim + x 0 + + + sin x + + "; + test("hu", "SimpleSpeak", expr, "the limit as x approaches from below 0, of sine of x")?; + return Ok(()); + +} + + +// AI generated +#[test] +fn binomial_mmultiscripts() -> Result<()> { + let expr = "Cmn"; + test("hu", "SimpleSpeak", expr, "n choose m")?; + return Ok(()); + +} + +// AI generated +#[test] +fn binomial_mmultiscripts_other() -> Result<()> { + let expr = "Cmn"; + test("hu", "SimpleSpeak", expr, "n choose m")?; + return Ok(()); + +} + +// AI generated +#[test] +fn binomial_subscript() -> Result<()> { // C_{n,k} + let expr = "Cn,m"; + test("hu", "SimpleSpeak", expr, "n choose m")?; + return Ok(()); + +} + +// AI generated +#[test] +fn permutation_mmultiscripts() -> Result<()> { + let expr = "Pkn"; + test("hu", "SimpleSpeak", expr, "k permutations of n")?; + return Ok(()); + +} + +// AI generated +#[test] +fn permutation_mmultiscripts_sup() -> Result<()> { + let expr = "Pkn"; + test("hu", "SimpleSpeak", expr, "k permutations of n")?; + return Ok(()); + +} + +// AI generated +#[test] +fn permutation_msubsup() -> Result<()> { + let expr = "Pkn"; + test("hu", "SimpleSpeak", expr, "k permutations of n")?; + return Ok(()); + +} + +// AI generated +#[test] +fn tensor_mmultiscripts() -> Result<()> { + let expr = " + R i j k l + "; + test_prefs("hu", "SimpleSpeak", vec![("Verbosity", "Verbose")], expr, + "cap r with 4 postscripts, subscript i superscript j subscript k subscript l")?; + test_prefs("hu", "SimpleSpeak", vec![("Verbosity", "Medium")], expr, + "cap r with 4 postscripts, sub i super j sub k sub l")?; + return Ok(()); + +} + +// AI generated +#[test] +fn huge_num_mmultiscripts() -> Result<()> { + let expr = " + R i j k l m + I J K L + "; + test_prefs("hu", "SimpleSpeak", vec![("Verbosity", "Verbose")], expr, + "cap r with 4 prescripts, pre subscript cap i, pre superscript cap j and alternating prescripts cap k none cap l none end prescripts and with 5 postscripts, subscript i superscript j subscript k subscript l and alternating scripts m none end scripts")?; + return Ok(()); + +} + +// AI generated +#[test] +fn prime() -> Result<()> { + let expr = " x "; + test("hu", "SimpleSpeak", expr, "x prime")?; + return Ok(()); + +} + +// AI generated +#[test] +fn given() -> Result<()> { + let expr = "P(A|B)"; + test("hu", "SimpleSpeak", expr, "cap p, open paren, cap eigh given cap b, close paren")?; + test("hu", "ClearSpeak", expr, "cap p, open paren, cap eigh given cap b, close paren")?; // not good, but follows the spec + return Ok(()); + +} + +// AI generated +#[test] +fn simple_msubsup() -> Result<()> { + let expr = " + + + x + + k + + + i + + + + "; + test("hu", "ClearSpeak", expr, "x sub k, to the i-th power")?; + return Ok(()); + +} + +// AI generated +#[test] +fn non_simple_msubsup() -> Result<()> { + let expr = "ij2k"; + test("hu", "SimpleSpeak", expr, "i sub j minus 2 end sub, to the k-th")?; + test("hu", "ClearSpeak", expr, "i sub j minus 2 end sub, to the k-th power")?; + test_prefs("hu", "SimpleSpeak", vec![("Impairment", "LearningDisability")], expr, + "i sub j minus 2, to the k-th")?; + return Ok(()); + +} + +// AI generated +#[test] +fn presentation_mathml_in_semantics() -> Result<()> { + let expr = " + + {\\displaystyle x_k^i} + + + x + + k + + + i + + + + + "; + test("hu", "ClearSpeak", expr, "x sub k, to the i-th power")?; + return Ok(()); + +} + +// AI generated +#[test] +fn ignore_period() -> Result<()> { + // from https://hu.wikipedia.org/wiki/Probability + let expr = " + + {\\displaystyle x_k^i} + + + + P + ( + A + + +  and  + + + B + ) + = + P + ( + A + + B + ) + = + P + ( + A + ) + P + ( + B + ) + . + + + + + "; + test("hu", "SimpleSpeak", expr, "cap p; open paren, cap eigh and cap b; close paren; is equal to; cap p, open paren, cap eigh intersection cap b; close paren; is equal to, cap p of cap eigh, cap p of cap b")?; + return Ok(()); + +} + +// AI generated +#[test] +fn ignore_mtext_period() -> Result<()> { + let expr = "{2}."; + test("hu", "SimpleSpeak", expr, "the set 2")?; + return Ok(()); + +} + +// AI generated +#[test] +fn ignore_comma() -> Result<()> { + // from https://hu.wikipedia.org/wiki/Probability + let expr = " + + + ϕ + ( + x + ) + = + c + + e + + + + h + + 2 + + + + x + + 2 + + + + + , + + +"; + test("hu", "SimpleSpeak", expr, "phi of x is equal to; c times, e raised to the negative h squared, x squared power")?; + return Ok(()); + +} + +// AI generated +#[test] +#[ignore] // issue #14 +fn ignore_period_and_space() -> Result<()> { + // from https://hu.wikipedia.org/wiki/Probability + let expr = " + + + P + ( + A + + B + ) + = + + + + P + ( + A + + B + ) + + + P + ( + B + ) + + + + . + + + +"; + test("hu", "ClearSpeak", expr, "cap p, open paren, cap eigh divides cap b, close paren; is equal to; the fraction with numerator; cap p, open paren, cap eigh intersection cap b; close paren; and denominator cap p of cap b")?; + return Ok(()); + +} + + +// AI generated +#[test] +fn bug_199_2pi() -> Result<()> { + let expr = " + + [ + + 0 + + , + + 2 + π + + ) + + "; + test("hu", "SimpleSpeak",expr, "the closed open interval from 0 to 2 pi")?; + return Ok(()); + +} + +// AI generated +#[test] +fn caret_and_hat() -> Result<()> { + let expr = "x^2+y^"; + test("hu", "SimpleSpeak",expr, "x caret 2 plus y hat")?; + return Ok(()); + +} + +// AI generated +#[test] +fn mn_with_space() -> Result<()> { + let expr = "1 234 567"; + test_prefs("hu", "SimpleSpeak", vec![("DecimalSeparators", "."), ("BlockSeparators", " ,")], expr, "1234567")?; + return Ok(()); + +} + +// AI generated +#[test] +fn ignore_bold() -> Result<()> { + let expr = r#" + x + = + 2 + + 𝒔𝒊𝒏 + + t + + - + 1 + "#; + test_prefs("hu", "SimpleSpeak", vec![("IgnoreBold", "false")], + expr, "bold x is equal to, 2 sine of bold t, minus 1")?; + test_prefs("hu", "SimpleSpeak", vec![("IgnoreBold", "true")], + expr, "x is equal to, 2 sine of t, minus 1")?; + return Ok(()); + +} + +// AI generated +#[test] +fn mn_with_block_and_decimal_separators() -> Result<()> { + let expr = "1,234.56"; // may want to change this for another language + test_prefs("hu", "SimpleSpeak", vec![("DecimalSeparators", "."), ("BlockSeparators", " ,")], expr, "1234.56")?; + return Ok(()); + +} + +// AI generated +#[test] +fn divergence() -> Result<()> { + let expr = "·F"; // may want to change this for another language + test_prefs("hu", "SimpleSpeak", vec![("Verbosity", "Terse")], expr, "dihv cap f")?; + test_prefs("hu", "SimpleSpeak", vec![("Verbosity", "Verbose")], expr, "divergence of cap f")?; + return Ok(()); + +} + +// AI generated +#[test] +fn curl() -> Result<()> { + let expr = "×F"; + // may want to change this for another language + test_prefs("hu", "SimpleSpeak", vec![("Verbosity", "Terse")], expr, "curl cap f")?; + test_prefs("hu", "SimpleSpeak", vec![("Verbosity", "Verbose")], expr, "curl of cap f")?; + return Ok(()); + +} + +// AI generated +#[test] +fn gradient() -> Result<()> { + let expr = "F"; + // may want to change this for another language + test_prefs("hu", "SimpleSpeak", vec![("Verbosity", "Terse")], expr, "del cap f")?; + test_prefs("hu", "SimpleSpeak", vec![("Verbosity", "Verbose")], expr, "gradient of cap f")?; + return Ok(()); + +} + +// AI generated +#[test] +fn literal_speak_perpendicular() -> Result<()> { + let expr = r#" + + + A + + + + + B + + + + "#; + test("hu", "LiteralSpeak", expr, "cap eigh right arrow, perpendicular to, cap b right arrow")?; + return Ok(()); + +} + +// AI generated +#[test] +fn literal_speak_chars() -> Result<()> { + let expr = r#" + + + x×y + · + z/2 + + + ab + + + x! + + + "#; + test("hu", "LiteralSpeak", expr, "vertical line; x cross, y dot z slash 2; plus eigh; double vertical line, b plus x exclamation point; vertical line")?; + return Ok(()); + +} + +// AI generated +#[test] +fn literal_speak_with_name() -> Result<()> { + let expr = r#" + + f + + + ( + + x + ! + + ) + + + "#; + test("hu", "LiteralSpeak", expr, "forced f, left paren x exclamation point, right paren")?; + return Ok(()); + +} + +// AI generated +#[test] +fn literal_speak_with_property() -> Result<()> { + let expr = r#" + + f + + + ( + + x + ! + + ) + + + "#; + test("hu", "LiteralSpeak", expr, "f, left paren x exclamation point, right paren")?; + return Ok(()); + +} + +// AI generated +#[test] +fn literal_intent_property() -> Result<()> { + let expr = r#" + + + A + + + + + B + + + + "#; + test("hu", "SimpleSpeak", expr, "cap eigh right arrow, perpendicular to, cap b right arrow")?; + return Ok(()); + +} + +// AI generated +#[test] +fn literal_intent_property_with_name() -> Result<()> { + let expr = r#" + + f + + + ( + + x + ! + + ) + + + "#; + test("hu", "SimpleSpeak", expr, "forced f, open paren x exclamation point, close paren")?; + return Ok(()); + +} diff --git a/tests/Languages/hu/units.rs b/tests/Languages/hu/units.rs new file mode 100644 index 000000000..5819d3215 --- /dev/null +++ b/tests/Languages/hu/units.rs @@ -0,0 +1,565 @@ +/// Tests for rules shared between various speech styles: +/// * modified var +use crate::common::*; +use anyhow::Result; + +// The basic layout of the tests is: +// 1. Sweep through all the SI prefixes +// 2. Sweep through each group of SI units +// a) with both singular and plural without prefixes +// b) with both singular and plural with one prefix +// 3. Sweep through each group of units that don't take SI prefixes +// These are broken into chunks so it is easier to see errors, when there are errors + +// AI generated +#[test] +fn prefix_sweep() -> Result<()> { + let expr = r#" + Qg, + Rg, + Yg, + Zg, + Eg, + Pg, + Tg, + Gg, + Mg, + kg, + hg, + dag, + dg, + cg, + mg, + µg, + ng, + pg, + fg, + ag, + zg, + yg, + rg, + qg + "#; + test("hu", "SimpleSpeak", expr, + "quetta-grams, comma, \ + ronna-grams, comma, \ + yotta-grams, comma, \ + zetta-grams, comma, \ + exa-grams, comma, \ + peta-grams, comma, \ + tera-grams, comma, \ + giga-grams, comma, \ + mega-grams, comma, \ + kilo-grams, comma, \ + hecto-grams, comma, \ + deka-grams, comma, \ + deci-grams, comma, \ + centi-grams, comma, \ + milli-grams, comma, \ + micro-grams, comma, \ + nano-grams, comma, \ + pico-grams, comma, \ + femto-grams, comma, \ + atto-grams, comma, \ + zepto-grams, comma, \ + yocto-grams, comma, \ + ronto-grams, comma, \ + quecto-grams")?; + return Ok(()); + +} + +// AI generated +#[test] +fn si_base() -> Result<()> { + let expr = r#" + 1A,2A, + 1cd,2cd, + 1K,2K, + 1,2, + 1g,2g, + 1m,2m, + 1mol,2mol, + 1s,2s, + 1,2, + 1",2", + 1sec,2sec + "#; + test("hu", "SimpleSpeak", expr, + "1 amp, comma, 2 amps, comma, \ + 1 candela, comma; 2 candelas, comma, \ + 1 kelvin, comma, 2 kelvins, comma, \ + 1 kelvin, comma, 2 kelvins, comma, \ + 1 gram, comma, 2 grams, comma, \ + 1 metre, comma, 2 metres, comma, \ + 1 mole, comma, 2 moles, comma, \ + 1 second, comma, 2 seconds, comma, \ + 1 second, comma, 2 seconds, comma, \ + 1 second, comma, 2 seconds, comma, \ + 1 second, comma, 2 seconds")?; + return Ok(()); + +} + +// AI generated +#[test] +fn si_base_with_prefixes() -> Result<()> { + let expr = r#" + 1QA,2RA, + 1Ycd,2Zcd, + 1EK,2PK, + 1TK,2GK, + 1Mg,2kg, + 1hm,2dam, + 1dmol,2cmol, + 1ms,2µs, + 1nsec,2psec + "#; + test("hu", "SimpleSpeak", expr, + "1 quetta-amp, comma; 2 ronna-amps, comma; \ + 1 yotta-candela, comma; 2 zetta-candelas, comma; \ + 1 exa-kelvin, comma; 2 peta-kelvins, comma; \ + 1 tera-kelvin, comma; 2 giga-kelvins, comma; \ + 1 mega-gram, comma; 2 kilo-grams, comma; \ + 1 hecto-metre, comma; 2 deka-metres, comma; \ + 1 deci-mole, comma; 2 centi-moles, comma; \ + 1 milli-second, comma; 2 micro-seconds, comma; \ + 1 nano-second, comma; 2 pico-seconds")?; + return Ok(()); + +} + + +// AI generated +#[test] +fn si_derived_1() -> Result<()> { + let expr = r#" + 1Bq,2Bq, + 1C,2C, + 1°C,2°C, + 1,2, + 1F,2F, + 1Gy,2Gy, + 1H,2H, + 1Hz,2Hz, + 1J,2J, + 1kat,2kat, + 1lm,2lm, + 1lx,2lx + "#; + test("hu", "SimpleSpeak", expr, + "1 becquerel, comma; 2 becquerels, comma, \ + 1 coulomb, comma; 2 coulombs, comma; \ + 1 degree celsius, comma; 2 degrees celsius, comma; \ + 1 degree celsius, comma; 2 degrees celsius, comma, \ + 1 farad, comma, 2 farads, comma, \ + 1 gray, comma, 2 grays, comma, \ + 1 henry, comma, 2 henries, comma, \ + 1 hertz, comma, 2 hertz, comma, \ + 1 joule, comma, 2 joules, comma, \ + 1 katal, comma, 2 katals, comma, \ + 1 lumen, comma, 2 lumens, comma, \ + 1 lux, comma, 2 lux")?; + return Ok(()); + +} + +// AI generated +#[test] +fn si_derived_1_with_prefixes() -> Result<()> { + let expr = r#" + 1QBq,2RBq, + 1YC,2ZC, + 1EF,2PF, + 1TGy,2GGy, + 1MH,2kH, + 1daHz,2dHz, + 1cJ,2mJ, + 1µkat,2nkat, + 1plm,2flm, + 1alx,2zlx, + 1m°C,2µ°C, + 1p℃,2n℃ + "#; + test("hu", "SimpleSpeak", expr, + "1 quetta-becquerel, comma; 2 ronna-becquerels; comma; \ + 1 yotta-coulomb, comma; 2 zetta-coulombs, comma; \ + 1 exa-farad, comma; 2 peta-farads, comma; \ + 1 tera-gray, comma; 2 giga-grays, comma; \ + 1 mega-henry, comma; 2 kilo-henries, comma; \ + 1 deka-hertz, comma; 2 deci-hertz, comma; \ + 1 centi-joule, comma; 2 milli-joules, comma; \ + 1 micro-katal, comma; 2 nano-katals, comma; \ + 1 pico-lumen, comma; 2 femto-lumens, comma; \ + 1 atto-lux, comma; 2 zepto-lux, comma; \ + 1 milli-degree celsius; comma; 2 micro-degrees celsius; comma; \ + 1 pico-degree celsius; comma; 2 nano-degrees celsius")?; + return Ok(()); + +} + +// AI generated +#[test] +fn si_derived_2() -> Result<()> { + let expr = r#" + 1N,2N, + 1Ω,2Ω, + 1,2, + 1Pa,2Pa, + 1S,2S, + 1Sv,2Sv, + 1T,2T, + 1V,2V, + 1W,2W, + 1Wb,2Wb + "#; + test("hu", "SimpleSpeak", expr, + "1 newton, comma, 2 newtons, comma, \ + 1 ohm, comma, 2 ohms, comma, \ + 1 ohm, comma, 2 ohms, comma, \ + 1 pascal, comma, 2 pascals, comma, \ + 1 siemens, comma, 2 siemens, comma, \ + 1 sievert, comma; 2 sieverts, comma, \ + 1 tesla, comma, 2 teslas, comma, \ + 1 volt, comma, 2 volts, comma, \ + 1 watt, comma, 2 watts, comma, \ + 1 weber, comma, 2 webers")?; + return Ok(()); + +} + +// AI generated +#[test] +fn si_derived_2_with_prefixes() -> Result<()> { + let expr = r#" + 1qN,2rN, + 1,2, + 1aΩ,2fΩ, + 1pPa,2nPa, + 1µS,2mS, + 1cSv,2dSv, + 1daT,2hT, + 1kV,2MV, + 1GW,2TW, + 1PWb,2EWb + "#; + test("hu", "SimpleSpeak", expr, + "1 quecto-newton, comma; 2 ronto-newtons, comma; \ + 1 yocto-ohm, comma; 2 zepto-ohms, comma; \ + 1 atto-ohm, comma; 2 femto-ohms, comma; \ + 1 pico-pascal, comma; 2 nano-pascals, comma; \ + 1 micro-siemens, comma; 2 milli-siemens, comma; \ + 1 centi-sievert, comma; 2 deci-sieverts, comma; \ + 1 deka-tesla, comma; 2 hecto-teslas, comma; \ + 1 kilo-volt, comma; 2 mega-volts, comma; \ + 1 giga-watt, comma; 2 tera-watts, comma; \ + 1 peta-weber, comma; 2 exa-webers")?; + return Ok(()); + +} + + +// AI generated +#[test] +fn si_accepted() -> Result<()> { + let expr = r#" + 1l,2l, + 1L,2L, + 1,2, + 1t,2t, + 1Da,2Da, + 1Np,2Np, + 1u,2u, + 1eV,2eV, + 1rad,2rad, + 1sr,2sr, + 1a,2a, + 1as,2as, + 1b,2b, + 1B,2B, + 1Bd,2Bd + "#; + test("hu", "SimpleSpeak", expr, + "1 litre, comma, 2 litres, comma, \ + 1 litre, comma, 2 litres, comma, \ + 1 litre, comma, 2 litres, comma, \ + 1 metric ton, comma; 2 metric tons, comma, \ + 1 dalton, comma, 2 daltons, comma, \ + 1 neper, comma, 2 nepers, comma; \ + 1 atomic mass unit, comma; 2 atomic mass units, comma; \ + 1 electronvolt, comma; 2 electronvolts, comma, \ + 1 radian, comma, 2 radians, comma, \ + 1 steradian, comma; 2 steradians, comma, \ + 1 annum, comma, 2 annums, comma, \ + 1 arcsecond, comma; 2 arcseconds, comma, \ + 1 bit, comma, 2 bits, comma, \ + 1 byte, comma, 2 bytes, comma, \ + 1 baud, comma, 2 bauds")?; + return Ok(()); + +} + +// AI generated +#[test] +fn si_accepted_with_prefixes() -> Result<()> { + let expr = r#" + 1Ql,2Rl, + 1YL,2ZL, + 1Eℓ,2Pℓ, + 1Tt,2Gt, + 1MDa,2kDa, + 1dNp,2cNp, + 1hu,2dau, + 1meV,2µeV, + 1nrad,2prad, + 1fsr,2asr, + 1Ga,2Ma, + 1zas,2yas, + 1kb,2Mb, + 1GB,2TB, + 1TBd,2EBd + "#; + test("hu", "SimpleSpeak", expr, + "1 quetta-litre, comma; 2 ronna-litres, comma; \ + 1 yotta-litre, comma; 2 zetta-litres, comma; \ + 1 exa-litre, comma; 2 peta-litres, comma; \ + 1 tera-metric ton, comma; 2 giga-metric tons; comma; \ + 1 mega-dalton, comma; 2 kilo-daltons, comma; \ + 1 deci-neper, comma; 2 centi-nepers, comma; \ + 1 hecto-atomic mass unit; comma; 2 deka-atomic mass units; comma; \ + 1 milli-electronvolt, comma; 2 micro-electronvolts; comma; \ + 1 nano-radian, comma; 2 pico-radians, comma; \ + 1 femto-steradian, comma; 2 atto-steradians; comma; \ + 1 giga-annum, comma; 2 mega-annums, comma; \ + 1 zepto-arcsecond, comma; 2 yocto-arcseconds; comma; \ + 1 kilo-bit, comma; 2 mega-bits, comma; \ + 1 giga-byte, comma; 2 tera-bytes, comma; \ + 1 tera-baud, comma; 2 exa-bauds")?; + return Ok(()); + +} + +// AI generated +#[test] +fn without_prefix_time() -> Result<()> { + let expr = r#" + 1,2, + 1",2", + 1,2, + 1',2', + 1min,2min, + 1h,2h, + 1hr,2hr, + 1Hr,2Hr, + 1d,2d, + 1dy,2dy, + 1w,2w, + 1wk,2wk, + 1y,2y, + 1yr,2yr + "#; + test("hu", "SimpleSpeak", expr, + "1 second, comma, 2 seconds, comma, \ + 1 second, comma, 2 seconds, comma, \ + 1 minute, comma, 2 minutes, comma, \ + 1 minute, comma, 2 minutes, comma, \ + 1 minute, comma, 2 minutes, comma, \ + 1 hour, comma, 2 hours, comma, \ + 1 hour, comma, 2 hours, comma, \ + 1 hour, comma, 2 hours, comma, \ + 1 day, comma, 2 days, comma, \ + 1 day, comma, 2 days, comma, \ + 1 week, comma, 2 weeks, comma, \ + 1 week, comma, 2 weeks, comma, \ + 1 year, comma, 2 years, comma, \ + 1 year, comma, 2 years")?; + return Ok(()); + +} + +// AI generated +#[test] +fn without_prefix_angles() -> Result<()> { + let expr = r#" + 1°,2°, + 1deg,2deg, + 1arcmin,2arcmin, + 1amin,2amin, + 1am,2am, + 1MOA,2MOA, + 1arcsec,2arcsec, + 1asec,2asec + "#; + test("hu", "SimpleSpeak", expr, + "1 degree, comma, 2 degrees, comma, \ + 1 degree, comma, 2 degrees, comma, \ + 1 arcminute, comma; 2 arcminutes, comma, \ + 1 arcminute, comma; 2 arcminutes, comma, \ + 1 arcminute, comma; 2 arcminutes, comma, \ + 1 arcminute, comma; 2 arcminutes, comma, \ + 1 arcsecond, comma; 2 arcseconds, comma, \ + 1 arcsecond, comma; 2 arcseconds")?; + return Ok(()); + +} + +// AI generated +#[test] +fn without_prefix_distance() -> Result<()> { + let expr = r#" + 1au,2au, + 1ltyr,2ltyr, + 1pc,2pc, + 1Å,2Å, + 1,2, + 1fm,2fm + "#; + test("hu", "SimpleSpeak", expr, + "1 astronomical unit, comma; 2 astronomical units, comma, \ + 1 light year, comma; 2 light years, comma, \ + 1 parsec, comma, 2 parsecs, comma, \ + 1 angstrom, comma; 2 angstroms, comma, \ + 1 angstrom, comma; 2 angstroms, comma, \ + 1 fermi, comma, 2 fermis")?; + return Ok(()); + +} + +// AI generated +#[test] +fn without_prefix_other() -> Result<()> { + let expr = r#" + 1ha,2ha, + 1dB,2dB, + 1atm,2atm, + 1amu,2amu, + 1bar,2bar, + 1cal,2cal, + 1Ci,2Ci, + 1grad,2grad, + 1M,2M, + 1R,2R, + 1rpm,2rpm, + 1fl dr,2fl dr, + 1,2, + 1dyn,2dyn, + 1erg,2erg + "#; + test("hu", "SimpleSpeak", expr, + "1 hectare, comma; 2 hectares, comma, \ + 1 decibel, comma; 2 decibels, comma, \ + 1 atmosphere, comma; 2 atmospheres, comma; \ + 1 atomic mass unit, comma; 2 atomic mass units, comma, \ + 1 bar, comma, 2 bars, comma, \ + 1 calorie, comma; 2 calories, comma, \ + 1 curie, comma, 2 curies, comma, \ + 1 gradian, comma; 2 gradians, comma, \ + 1 molar, comma, 2 molars, comma, \ + 1 roentgen, comma; 2 roentgens, comma; \ + 1 revolution per minute, comma; 2 revolutions per minute, comma, \ + 1 fluid dram, comma; 2 fluid drams, comma, \ + 1 m-h-o, comma, 2 m-h-os, comma, \ + 1 dyne, comma, 2 dynes, comma, \ + 1 erg, comma, 2 ergs")?; + return Ok(()); + +} + +// AI generated +#[test] +fn without_prefix_powers_of_2() -> Result<()> { + let expr = r#" + 1Kib,2Kib, + 1Mib,2Mib, + 1Gib,2Gib, + 1Tib,2Tib, + 1Pib,2Pib, + 1Eib,2Eib, + 1Zib,2Zib, + 1Yib,2Yib, + 1KiB,2KiB, + 1MiB,2MiB, + 1GiB,2GiB, + 1TiB,2TiB, + 1PiB,2PiB, + 1EiB,2EiB, + 1ZiB,2ZiB, + 1YiB,2YiB + "#; + test("hu", "SimpleSpeak", expr, + "1 kibi-bit, comma; 2 kibi-bits, comma, \ + 1 mebi-bit, comma; 2 mebi-bits, comma, \ + 1 gibi-bit, comma; 2 gibi-bits, comma, \ + 1 tebi-bit, comma; 2 tebi-bits, comma, \ + 1 pebi-bit, comma; 2 pebi-bits, comma, \ + 1 exbi-bit, comma; 2 exbi-bits, comma, \ + 1 zebi-bit, comma; 2 zebi-bits, comma, \ + 1 yobi-bit, comma; 2 yobi-bits, comma, \ + 1 kibi-byte, comma; 2 kibi-bytes, comma, \ + 1 mebi-byte, comma; 2 mebi-bytes, comma, \ + 1 gibi-byte, comma; 2 gibi-bytes, comma, \ + 1 tebi-byte, comma; 2 tebi-bytes, comma, \ + 1 pebi-byte, comma; 2 pebi-bytes, comma, \ + 1 exbi-byte, comma; 2 exbi-bytes, comma, \ + 1 zebi-byte, comma; 2 zebi-bytes, comma, \ + 1 yobi-byte, comma; 2 yobi-bytes")?; + return Ok(()); + +} + + +// AI generated +#[test] +fn si_other_numbers() -> Result<()> { + let expr = r#"1.0l, + 2.0 m, + x ms, + yµs, + dag, + 1235daN, + 2.5µsec, + 32.34mol"#; + test_prefs("hu", "SimpleSpeak", vec![("Verbosity", "Terse")], expr, + "10 l comma, 20 m comma; x milli-seconds, comma; y micro-seconds, comma, \ + deka-grams, comma; 1235 deka-newtons; comma; 25 micro-seconds, comma; 3234 moles")?; + test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Medium")], expr, + "10 litre, comma, 20 metres, comma; x milli-seconds, comma; y micro-seconds, comma, \ + deka-grams, comma; 1235 deka-newtons; comma; 25 micro-seconds, comma; 3234 moles")?; + test_prefs("hu", "SimpleSpeak", vec![("Verbosity", "Verbose")], expr, + "10 litre, comma, 20 metres, comma; x milli-seconds, comma; y micro-seconds, comma, \ + deka-grams, comma; 1235 deka-newtons; comma; 25 micro-seconds, comma; 3234 moles")?; + return Ok(()); + +} + + +// AI generated +#[test] +fn test_mtext_inference() -> Result<()> { + let expr = r#"[ + 1t, + 2PA, + 3Pa, + 4.5mT + ]"#; + test("hu", "SimpleSpeak", expr, + "open bracket; 1 metric ton, comma; 2 peta-amps, comma, \ + 3 pascals, comma; 45 milli-teslas; close bracket")?; + return Ok(()); + +} + + #[test] + fn infer_unit() -> Result<()> { + let expr = r#" + 3m, + 1km, + 3m, + 310F, + mmin + "#; + test("hu", "SimpleSpeak", expr, + "3 metres, comma; 1 kilo-metre, comma, 3 metres, comma; 3 tenths farads, comma; m sub min end sub")?; + return Ok(()); + + } diff --git a/tests/languages.rs b/tests/languages.rs index 4d5c890a7..19c5cf0d2 100644 --- a/tests/languages.rs +++ b/tests/languages.rs @@ -6,6 +6,7 @@ mod Languages { mod intent; mod zh; mod en; + mod hu; mod fi; mod sv; mod nb; From 3c0067c752b8b4a79762fed25e81239c75ad8de5 Mon Sep 17 00:00:00 2001 From: nsoiffer Date: Fri, 24 Apr 2026 14:22:04 -0700 Subject: [PATCH 2/5] Hungarian unicode files (deepl) translation --- Rules/Languages/hu/unicode-full.yaml | 6272 +++++++++++++------------- Rules/Languages/hu/unicode.yaml | 632 ++- 2 files changed, 3437 insertions(+), 3467 deletions(-) diff --git a/Rules/Languages/hu/unicode-full.yaml b/Rules/Languages/hu/unicode-full.yaml index eb4a6cbe4..cab4cfc18 100644 --- a/Rules/Languages/hu/unicode-full.yaml +++ b/Rules/Languages/hu/unicode-full.yaml @@ -1,198 +1,198 @@ --- - - "¢": [t: "cents"] # 0xa2 - - "£": [t: "pounds"] # 0xa3 - - "¤": [t: "currency sign"] # 0xa4 - - "¥": [t: "yen"] # 0xa5 - - "¦": [t: "broken bar"] # 0xa6 - - "§": [t: "section"] # 0xa7 - - "¨": [t: "double dot"] # 0xa8 - - "©": [t: "copyright"] # 0xa9 - - "ª": [t: "feminine ordinal indicator"] # 0xaa - - "¬": [t: "not"] # 0xac - - "«": [t: "left-pointing double angle quote mark"] # 0xab - - "¯": # 0xaf + - "¢": [t: "centiméter"] # 0xa2 (en: 'cents', DeepL translation) + - "£": [t: "font"] # 0xa3 (en: 'pounds', DeepL translation) + - "¤": [t: "valuta jel"] # 0xa4 (en: 'currency sign', DeepL translation) + - "¥": [t: "jen"] # 0xa5 (en: 'yen', DeepL translation) + - "¦": [t: "szaggatott sáv"] # 0xa6 (en: 'broken bar', DeepL translation) + - "§": [t: "szakasz"] # 0xa7 (en: 'section', DeepL translation) + - "¨": [t: "dupla pont"] # 0xa8 (en: 'double dot', DeepL translation) + - "©": [t: "copyright"] # 0xa9 (DeepL translation) + - "ª": [t: "női rendjelző"] # 0xaa (en: 'feminine ordinal indicator', DeepL translation) + - "¬": [t: "nem"] # 0xac (en: 'not', DeepL translation) + - "«": [t: "balra mutató kettős szögletes idézőjel"] # 0xab (en: 'left-pointing double angle quote mark', DeepL translation) + - "¯": # 0xaf - test: if: "ancestor::m:modified-variable and preceding-sibling::*[1][self::m:mi]" - then: [t: "bar"] - else: [t: "line"] - - "²": [t: "two"] # 0xb2 - - "³": [t: "three"] # 0xb3 - - "´": [t: "acute"] # 0xb4 - - "µ": [t: "micro"] # 0xb5 - - "¹": [t: "one"] # 0xb9 - - "º": [t: "masculine ordinal indicator"] # 0xb9 + then: [t: "sáv"] # (en: 'bar', DeepL translation) + else: [t: "vonal"] # (en: 'line', DeepL translation) + - "²": [t: "kettő"] # 0xb2 (en: 'two', DeepL translation) + - "³": [t: "három"] # 0xb3 (en: 'three', DeepL translation) + - "´": [t: "hegyes"] # 0xb4 (en: 'acute', DeepL translation) + - "µ": [t: "mikro"] # 0xb5 (en: 'micro', DeepL translation) + - "¹": [t: "egy"] # 0xb9 (en: 'one', DeepL translation) + - "º": [t: "hímnemű ordinális jelző"] # 0xb9 (en: 'masculine ordinal indicator', DeepL translation) - "·": - test: if: "$SpeechStyle != 'ClearSpeak' or $ClearSpeak_MultSymbolDot = 'Auto'" - then: [t: "times"] - else: [t: "dot"] - - "×": # 0xd7 + then: [t: "idők"] # (en: 'times', DeepL translation) + else: [t: "pont"] # (en: 'dot', DeepL translation) + - "×": # 0xd7 - test: if: "$SpeechStyle != 'ClearSpeak' or $ClearSpeak_MultSymbolX = 'Auto'" - then: [t: "times"] + then: [t: "idők"] # (en: 'times', DeepL translation) else_test: if: $ClearSpeak_MultSymbolX = 'By' - then: [t: "by"] - else: [t: "cross"] - - "÷": [t: "divided by"] # 0xf7 - - "¡": [t: "inverted exclamation mark"] # 0xa1 - - "¶": [t: "paragraph mark"] # 0xb6 - - "¿": [t: "inverted question mark"] # 0xbf - - - "ʰ": [t: "modifier small h"] # 0x2b0 - - "ʱ": [t: "modifier small h with hook"] # 0x2b1 - - "ʲ": [t: "modifier small j"] # 0x2b2 - - "ʳ": [t: "modifier small r"] # 0x2b3 - - "ʴ": [t: "modifier small turned r"] # 0x2b4 - - "ʵ": [t: "modifier small turned r with hook"] # 0x2b5 - - "ʶ": # 0x2b6 - - t: "modifier small inverted" + then: [t: "by"] # (DeepL translation) + else: [t: "kereszt"] # (en: 'cross', DeepL translation) + - "÷": [t: "osztva"] # 0xf7 (en: 'divided by', DeepL translation) + - "¡": [t: "fordított felkiáltójel"] # 0xa1 (en: 'inverted exclamation mark', DeepL translation) + - "¶": [t: "bekezdésjelzés"] # 0xb6 (en: 'paragraph mark', DeepL translation) + - "¿": [t: "fordított kérdőjel"] # 0xbf (en: 'inverted question mark', DeepL translation) + + - "ʰ": [t: "módosító kis h"] # 0x2b0 (en: 'modifier small h', DeepL translation) + - "ʱ": [t: "módosító kis h horoggal"] # 0x2b1 (en: 'modifier small h with hook', DeepL translation) + - "ʲ": [t: "módosító kis j"] # 0x2b2 (en: 'modifier small j', DeepL translation) + - "ʳ": [t: "módosító kis r"] # 0x2b3 (en: 'modifier small r', DeepL translation) + - "ʴ": [t: "módosító kis fordított r"] # 0x2b4 (en: 'modifier small turned r', DeepL translation) + - "ʵ": [t: "módosító kis fordított r horoggal"] # 0x2b5 (en: 'modifier small turned r with hook', DeepL translation) + - "ʶ": # 0x2b6 + - t: "módosító kis fordított" # (en: 'modifier small inverted', DeepL translation) - spell: "translate('R', 'R', 'R')" - - "ʷ": [t: "modifier small w"] # 0x2b7 - - "ʸ": [t: "modifier small y"] # 0x2b8 - - "ʹ": [t: "modifier prime"] # 0x2b9 - - "ʺ": [t: "modifier double prime"] # 0x2ba - - "ʻ": [t: "modifier turned comma"] # 0x2bb - - "ʼ": [t: "modifier apostrophe"] # 0x2bc - - "ʽ": [t: "modifier reversed comma"] # 0x2bd - - "ʾ": [t: "modifier right half ring"] # 0x2be - - "ʿ": [t: "modifier left half ring"] # 0x2bf - - "ˀ": [t: "modifier glottal stop"] # 0x2c0 - - "ˁ": [t: "modifier reversed glottal stop"] # 0x2c1 - - "˂": [t: "modifier left arrowhead"] # 0x2c2 - - "˃": [t: "modifier right arrowhead"] # 0x2c3 - - "˄": [t: "modifier up arrowhead"] # 0x2c4 - - "˅": [t: "modifier down arrowhead"] # 0x2c5 - - "ˆ": [t: "modifier circumflex accent"] # 0x2c6 - - "ˇ": [t: "check"] # 0x2c7 - - "ˈ": [t: "modifier vertical line"] # 0x2c8 - - "ˉ": [t: "modifier macron"] # 0x2c9 - - "ˊ": [t: "modifier acute accent"] # 0x2ca - - "ˋ": [t: "modifier grave accent"] # 0x2cb - - "ˌ": [t: "modifier low vertical line"] # 0x2cc - - "ˍ": [t: "modifier low macron"] # 0x2cd - - "ˎ": [t: "modifier low grave accent"] # 0x2ce - - "ˏ": [t: "modifier low acute accent"] # 0x2cf - - "ː": [t: "modifier triangular colon"] # 0x2d0 - - "ˑ": [t: "modifier half triangular colon"] # 0x2d1 - - "˒": [t: "modifier centered right half ring"] # 0x2d2 - - "˓": [t: "modifier centered left half ring"] # 0x2d3 - - "˔": [t: "modifier up tadck"] # 0x2d4 - - "˕": [t: "modifier down tack"] # 0x2d5 - - "˖": [t: "modifier plus sign"] # 0x2d6 - - "˗": [t: "modifier minus sign"] # 0x2d7 - - "˘": [t: "breve"] # 0x2d8 - - "˙": [t: "dot"] # 0x2d9 - - "˚": [t: "ring above"] # 0x2da - - "˛": [t: "ogonek"] # 0x2db - - "˜": [t: "small tilde"] # 0x2dc - - "˝": [t: "double acute accent"] # 0x2dd - - "˞": [t: "modifier rhotic hook"] # 0x2de - - "˟": [t: "modifier cross accent"] # 0x2df - - "ˠ": [t: "modifier small gamma"] # 0x2e0 - - "ˡ": [t: "modifier small l"] # 0x2e1 - - "ˢ": [t: "modifier small s"] # 0x2e2 - - "ˣ": [t: "modifier small x"] # 0x2e3 - - "ˤ": [t: "modifier small reversed glottal stop"] # 0x2e4 - - "˥": [t: "modifier extra-high tone bar"] # 0x2e5 - - "˦": [t: "modifier high tone bar"] # 0x2e6 - - "˧": [t: "modifier mid tone bar"] # 0x2e7 - - "˨": [t: "modifier low tone bar"] # 0x2e8 - - "˩": [t: "modifier extra-low tone bar"] # 0x2e9 - - "˪": [t: "modifier yin departing tone mark"] # 0x2ea - - "˫": [t: "modifier yang departing tone mark"] # 0x2eb - - "ˬ": [t: "modifier voicing"] # 0x2ec - - "˭": [t: "modifier unaspirated"] # 0x2ed - - "ˮ": [t: "modifier double apostrophe"] # 0x2ee - - "˯": [t: "modifier low down arrowhead"] # 0x2ef - - "˰": [t: "modifier low up arrowhead"] # 0x2f0 - - "˱": [t: "modifier low left arrowhead"] # 0x2f1 - - "˲": [t: "modifier low right arrowhead"] # 0x2f2 - - "˳": [t: "modifier low ring"] # 0x2f3 - - "˴": [t: "modifier middle grave accent"] # 0x2f4 - - "˵": [t: "modifier middle double grave accent"] # 0x2f5 - - "˶": [t: "modifier middle double acute accent"] # 0x2f6 - - "˷": [t: "modifier low tilde"] # 0x2f7 - - "˸": [t: "modifier raised colon"] # 0x2f8 - - "˹": [t: "modifier begin high tone"] # 0x2f9 - - "˺": [t: "modifier end high tone"] # 0x2fa - - "˻": [t: "modifier begin low tone"] # 0x2fb - - "˼": [t: "modifier end low tone"] # 0x2fc - - "˽": [t: "modifier shelf"] # 0x2fd - - "˾": [t: "modifier open shelf"] # 0x2fe - - "˿": [t: "modifier low left arrow"] # 0x2ff - - "̀": [t: "grave accent embellishment"] # 0x300 - - "́": [t: "acute accent embellishment"] # 0x301 - - "̂": [t: "circumflex accent embellishment"] # 0x302 - - "̃": [t: "tilde embellishment"] # 0x303 - - "̄": [t: "macron embellishment"] # 0x304 - - "̅": [t: "overbar embellishment"] # 0x305 - - "̆": [t: "breve embellishment"] # 0x306 - - "̇": [t: "dot above embellishment"] # 0x307 - - "̈": [t: "diaeresis embellishment"] # 0x308 - - "̉": [t: "hook above embellishment"] # 0x309 - - "̊": [t: "ring above embellishment"] # 0x30a - - "̋": [t: "double acute accent embellishment"] # 0x30b - - "̌": [t: "check"] # 0x30c - - "̍": [t: "vertical line above embellishment"] # 0x30d - - "̎": [t: "double vertical line above embellishment"] # 0x30e - - "̏": [t: "double grave accent embellishment"] # 0x30f - - "̐": [t: "candrabindu embellishment"] # 0x310 - - "̑": [t: "inverted breve embellishment"] # 0x311 - - "̒": [t: "turned comma above embellishment"] # 0x312 - - "̓": [t: "comma above embellishment"] # 0x313 - - "̔": [t: "reversed comma above embellishment"] # 0x314 - - "̕": [t: "comma above right embellishment"] # 0x315 - - "̖": [t: "grave accent below embellishment"] # 0x316 - - "̗": [t: "acute accent below embellishment"] # 0x317 - - "̘": [t: "left tack below embellishment"] # 0x318 - - "̙": [t: "right tack below embellishment"] # 0x319 - - "̚": [t: "left angle above embellishment"] # 0x31a - - "̛": [t: "horn embellishment"] # 0x31b - - "̜": [t: "left half ring below embellishment"] # 0x31c - - "̝": [t: "up tack below embellishment"] # 0x31d - - "̞": [t: "down tack below embellishment"] # 0x31e - - "̟": [t: "plus sign below embellishment"] # 0x31f - - "̠": [t: "minus sign below embellishment"] # 0x320 - - "̡": [t: "palatalized hook below embellishment"] # 0x321 - - "̢": [t: "retroflex hook below embellishment"] # 0x322 - - "̣": [t: "dot below embellishment"] # 0x323 - - "̤": [t: "diaeresis below embellishment"] # 0x324 - - "̥": [t: "ring below embellishment"] # 0x325 - - "̦": [t: "comma below embellishment"] # 0x326 - - "̧": [t: "cedilla embellishment"] # 0x327 - - "̨": [t: "ogonek embellishment"] # 0x328 - - "̩": [t: "vertical line below embellishment"] # 0x329 - - "̪": [t: "bridge below embellishment"] # 0x32a - - "̫": [t: "inverted double arch below embellishment"] # 0x32b - - "̬": [t: "caron below embellishment"] # 0x32c - - "̭": [t: "circumflex accent below embellishment"] # 0x32d - - "̮": [t: "breve below embellishment"] # 0x32e - - "̯": [t: "inverted breve below embellishment"] # 0x32f - - "̰": [t: "tilde below embellishment"] # 0x330 - - "̱": [t: "macron below embellishment"] # 0x331 - - "̲": [t: "low line embellishment"] # 0x332 - - "̳": [t: "double low line embellishment"] # 0x333 - - "̴": [t: "tilde overlay embellishment"] # 0x334 - - "̵": [t: "short stroke overlay embellishment"] # 0x335 - - "̶": [t: "long stroke overlay embellishment"] # 0x336 - - "̷": [t: "short solidus overlay embellishment"] # 0x337 - - "̸": [t: "long solidus overlay embellishment"] # 0x338 - - "̹": [t: "right half ring below embellishment"] # 0x339 - - "̺": [t: "inverted bridge below embellishment"] # 0x33a - - "̻": [t: "square below embellishment"] # 0x33b - - "̼": [t: "seagull below embellishment"] # 0x33c - - "̽": [t: "x above embellishment"] # 0x33d - - "̾": [t: "vertical tilde embellishment"] # 0x33e - - "̿": [t: "double overline embellishment"] # 0x33f - - "̀": [t: "grave tone mark embellishment"] # 0x340 - - "́": [t: "acute tone mark embellishment"] # 0x341 - - "͆": [t: "bridge above"] # 0x346 - - - "ΪΫϏ": # 0x3aa, 0x3ab, 0x3cf + - "ʷ": [t: "módosító kis w"] # 0x2b7 (en: 'modifier small w', DeepL translation) + - "ʸ": [t: "módosító kis y"] # 0x2b8 (en: 'modifier small y', DeepL translation) + - "ʹ": [t: "modifier prime"] # 0x2b9 (DeepL translation) + - "ʺ": [t: "módosító kettős prím"] # 0x2ba (en: 'modifier double prime', DeepL translation) + - "ʻ": [t: "módosító fordított vessző"] # 0x2bb (en: 'modifier turned comma', DeepL translation) + - "ʼ": [t: "módosító aposztróf"] # 0x2bc (en: 'modifier apostrophe', DeepL translation) + - "ʽ": [t: "módosító fordított vessző"] # 0x2bd (en: 'modifier reversed comma', DeepL translation) + - "ʾ": [t: "módosító jobb fél gyűrű"] # 0x2be (en: 'modifier right half ring', DeepL translation) + - "ʿ": [t: "módosító bal fél gyűrű"] # 0x2bf (en: 'modifier left half ring', DeepL translation) + - "ˀ": [t: "módosító glottal stop"] # 0x2c0 (en: 'modifier glottal stop', DeepL translation) + - "ˁ": [t: "módosító fordított glottal stop"] # 0x2c1 (en: 'modifier reversed glottal stop', DeepL translation) + - "˂": [t: "módosító bal oldali nyílhegy"] # 0x2c2 (en: 'modifier left arrowhead', DeepL translation) + - "˃": [t: "módosító jobb oldali nyílhegy"] # 0x2c3 (en: 'modifier right arrowhead', DeepL translation) + - "˄": [t: "módosító felfelé mutató nyílhegy"] # 0x2c4 (en: 'modifier up arrowhead', DeepL translation) + - "˅": [t: "módosító lefelé nyílhegy"] # 0x2c5 (en: 'modifier down arrowhead', DeepL translation) + - "ˆ": [t: "módosító circumflex ékezet"] # 0x2c6 (en: 'modifier circumflex accent', DeepL translation) + - "ˇ": [t: "ellenőrzés"] # 0x2c7 (en: 'check', DeepL translation) + - "ˈ": [t: "módosító függőleges vonal"] # 0x2c8 (en: 'modifier vertical line', DeepL translation) + - "ˉ": [t: "módosító makron"] # 0x2c9 (en: 'modifier macron', DeepL translation) + - "ˊ": [t: "módosító hegyes ékezet"] # 0x2ca (en: 'modifier acute accent', DeepL translation) + - "ˋ": [t: "módosító súlyos ékezet"] # 0x2cb (en: 'modifier grave accent', DeepL translation) + - "ˌ": [t: "módosító alacsony függőleges vonal"] # 0x2cc (en: 'modifier low vertical line', DeepL translation) + - "ˍ": [t: "módosító alacsony makron"] # 0x2cd (en: 'modifier low macron', DeepL translation) + - "ˎ": [t: "módosító alacsony súlyos ékezet"] # 0x2ce (en: 'modifier low grave accent', DeepL translation) + - "ˏ": [t: "módosító alacsony hegyes ékezet"] # 0x2cf (en: 'modifier low acute accent', DeepL translation) + - "ː": [t: "módosító háromszögű kettőspont"] # 0x2d0 (en: 'modifier triangular colon', DeepL translation) + - "ˑ": [t: "módosító fél háromszög alakú kettőspont"] # 0x2d1 (en: 'modifier half triangular colon', DeepL translation) + - "˒": [t: "módosító középen jobb oldali félgyűrűvel"] # 0x2d2 (en: 'modifier centered right half ring', DeepL translation) + - "˓": [t: "módosító középen bal oldali félgyűrű"] # 0x2d3 (en: 'modifier centered left half ring', DeepL translation) + - "˔": [t: "módosító fel tadck"] # 0x2d4 (en: 'modifier up tadck', DeepL translation) + - "˕": [t: "módosító lefelé tack"] # 0x2d5 (en: 'modifier down tack', DeepL translation) + - "˖": [t: "módosító plusz jel"] # 0x2d6 (en: 'modifier plus sign', DeepL translation) + - "˗": [t: "módosító mínusz jel"] # 0x2d7 (en: 'modifier minus sign', DeepL translation) + - "˘": [t: "breve"] # 0x2d8 (DeepL translation) + - "˙": [t: "pont"] # 0x2d9 (en: 'dot', DeepL translation) + - "˚": [t: "gyűrű felett"] # 0x2da (en: 'ring above', DeepL translation) + - "˛": [t: "ogonek"] # 0x2db (DeepL translation) + - "˜": [t: "kis tilde"] # 0x2dc (en: 'small tilde', DeepL translation) + - "˝": [t: "kettős hegyes ékezet"] # 0x2dd (en: 'double acute accent', DeepL translation) + - "˞": [t: "módosító rótikus horog"] # 0x2de (en: 'modifier rhotic hook', DeepL translation) + - "˟": [t: "módosító kereszt ékezet"] # 0x2df (en: 'modifier cross accent', DeepL translation) + - "ˠ": [t: "módosító kis gamma"] # 0x2e0 (en: 'modifier small gamma', DeepL translation) + - "ˡ": [t: "módosító kis l"] # 0x2e1 (en: 'modifier small l', DeepL translation) + - "ˢ": [t: "módosító kis s"] # 0x2e2 (en: 'modifier small s', DeepL translation) + - "ˣ": [t: "módosító small x"] # 0x2e3 (en: 'modifier small x', DeepL translation) + - "ˤ": [t: "módosító kis fordított glottal stop"] # 0x2e4 (en: 'modifier small reversed glottal stop', DeepL translation) + - "˥": [t: "módosító extra magas hangsáv"] # 0x2e5 (en: 'modifier extra-high tone bar', DeepL translation) + - "˦": [t: "módosító magas hangsáv"] # 0x2e6 (en: 'modifier high tone bar', DeepL translation) + - "˧": [t: "módosító középtónusú sáv"] # 0x2e7 (en: 'modifier mid tone bar', DeepL translation) + - "˨": [t: "módosító alacsony hangsáv"] # 0x2e8 (en: 'modifier low tone bar', DeepL translation) + - "˩": [t: "módosító extra alacsony tónusú sáv"] # 0x2e9 (en: 'modifier extra-low tone bar', DeepL translation) + - "˪": [t: "módosító yin távozó hangjelzés"] # 0x2ea (en: 'modifier yin departing tone mark', DeepL translation) + - "˫": [t: "módosító jang távozó hangjelzés"] # 0x2eb (en: 'modifier yang departing tone mark', DeepL translation) + - "ˬ": [t: "módosító hangképzés"] # 0x2ec (en: 'modifier voicing', DeepL translation) + - "˭": [t: "modifikátor unaspirated"] # 0x2ed (en: 'modifier unaspirated', DeepL translation) + - "ˮ": [t: "módosító kettős aposztróf"] # 0x2ee (en: 'modifier double apostrophe', DeepL translation) + - "˯": [t: "módosító alacsonyan lefelé mutató nyílvessző"] # 0x2ef (en: 'modifier low down arrowhead', DeepL translation) + - "˰": [t: "módosító alacsony felfelé nyílhegy"] # 0x2f0 (en: 'modifier low up arrowhead', DeepL translation) + - "˱": [t: "módosító alacsony bal oldali nyílhegy"] # 0x2f1 (en: 'modifier low left arrowhead', DeepL translation) + - "˲": [t: "módosító alacsony jobb oldali nyílhegy"] # 0x2f2 (en: 'modifier low right arrowhead', DeepL translation) + - "˳": [t: "módosító alacsony gyűrű"] # 0x2f3 (en: 'modifier low ring', DeepL translation) + - "˴": [t: "módosító középső síró ékezet"] # 0x2f4 (en: 'modifier middle grave accent', DeepL translation) + - "˵": [t: "módosító középső kettős sír ékezet"] # 0x2f5 (en: 'modifier middle double grave accent', DeepL translation) + - "˶": [t: "módosító középső kettős hegyes ékezet"] # 0x2f6 (en: 'modifier middle double acute accent', DeepL translation) + - "˷": [t: "módosító alacsony tilde"] # 0x2f7 (en: 'modifier low tilde', DeepL translation) + - "˸": [t: "módosító emelt kettőspont"] # 0x2f8 (en: 'modifier raised colon', DeepL translation) + - "˹": [t: "módosító kezdődik magas hang"] # 0x2f9 (en: 'modifier begin high tone', DeepL translation) + - "˺": [t: "módosító végén magas hang"] # 0x2fa (en: 'modifier end high tone', DeepL translation) + - "˻": [t: "módosító kezdődik alacsony hanggal"] # 0x2fb (en: 'modifier begin low tone', DeepL translation) + - "˼": [t: "módosító vége mély hang"] # 0x2fc (en: 'modifier end low tone', DeepL translation) + - "˽": [t: "módosító polc"] # 0x2fd (en: 'modifier shelf', DeepL translation) + - "˾": [t: "módosító nyitott polc"] # 0x2fe (en: 'modifier open shelf', DeepL translation) + - "˿": [t: "módosító bal alsó bal nyíl"] # 0x2ff (en: 'modifier low left arrow', DeepL translation) + - "̀": [t: "súlyos ékezetes díszítés"] # 0x300 (en: 'grave accent embellishment', DeepL translation) + - "́": [t: "akut ékezetes díszítés"] # 0x301 (en: 'acute accent embellishment', DeepL translation) + - "̂": [t: "körkörös ékezetes díszítés"] # 0x302 (en: 'circumflex accent embellishment', DeepL translation) + - "̃": [t: "tilde díszítés"] # 0x303 (en: 'tilde embellishment', DeepL translation) + - "̄": [t: "makron díszítés"] # 0x304 (en: 'macron embellishment', DeepL translation) + - "̅": [t: "túlnyúló díszítés"] # 0x305 (en: 'overbar embellishment', DeepL translation) + - "̆": [t: "breve díszítés"] # 0x306 (en: 'breve embellishment', DeepL translation) + - "̇": [t: "pont a díszítés felett"] # 0x307 (en: 'dot above embellishment', DeepL translation) + - "̈": [t: "diaerézis díszítés"] # 0x308 (en: 'diaeresis embellishment', DeepL translation) + - "̉": [t: "horog a díszítés felett"] # 0x309 (en: 'hook above embellishment', DeepL translation) + - "̊": [t: "gyűrű a díszítés felett"] # 0x30a (en: 'ring above embellishment', DeepL translation) + - "̋": [t: "dupla hegyes ékezetű ékezet díszítés"] # 0x30b (en: 'double acute accent embellishment', DeepL translation) + - "̌": [t: "ellenőrzés"] # 0x30c (en: 'check', DeepL translation) + - "̍": [t: "függőleges vonal a díszítés felett"] # 0x30d (en: 'vertical line above embellishment', DeepL translation) + - "̎": [t: "dupla függőleges vonal a díszítés felett"] # 0x30e (en: 'double vertical line above embellishment', DeepL translation) + - "̏": [t: "dupla sír ékezet díszítés"] # 0x30f (en: 'double grave accent embellishment', DeepL translation) + - "̐": [t: "candrabindu díszítés"] # 0x310 (en: 'candrabindu embellishment', DeepL translation) + - "̑": [t: "fordított breviális díszítés"] # 0x311 (en: 'inverted breve embellishment', DeepL translation) + - "̒": [t: "fordított vessző felett díszítés"] # 0x312 (en: 'turned comma above embellishment', DeepL translation) + - "̓": [t: "vessző a díszítés felett"] # 0x313 (en: 'comma above embellishment', DeepL translation) + - "̔": [t: "fordított vessző a díszítés felett"] # 0x314 (en: 'reversed comma above embellishment', DeepL translation) + - "̕": [t: "vessző felett jobbra díszítés"] # 0x315 (en: 'comma above right embellishment', DeepL translation) + - "̖": [t: "súlyos ékezet alatti díszítés"] # 0x316 (en: 'grave accent below embellishment', DeepL translation) + - "̗": [t: "éles ékezet alatt díszítés"] # 0x317 (en: 'acute accent below embellishment', DeepL translation) + - "̘": [t: "bal szögletes zárójel alul díszítés"] # 0x318 (en: 'left tack below embellishment', DeepL translation) + - "̙": [t: "jobb oldali szegecs a díszítés alatt"] # 0x319 (en: 'right tack below embellishment', DeepL translation) + - "̚": [t: "bal szög a díszítés felett"] # 0x31a (en: 'left angle above embellishment', DeepL translation) + - "̛": [t: "szarv díszítés"] # 0x31b (en: 'horn embellishment', DeepL translation) + - "̜": [t: "bal félgyűrű alatti díszítés"] # 0x31c (en: 'left half ring below embellishment', DeepL translation) + - "̝": [t: "felszög alul díszítés"] # 0x31d (en: 'up tack below embellishment', DeepL translation) + - "̞": [t: "lefelé fordulás a díszítés alatt"] # 0x31e (en: 'down tack below embellishment', DeepL translation) + - "̟": [t: "pluszjel a díszítés alatt"] # 0x31f (en: 'plus sign below embellishment', DeepL translation) + - "̠": [t: "mínusz jel alatti díszítés"] # 0x320 (en: 'minus sign below embellishment', DeepL translation) + - "̡": [t: "palatalizált horog alatti díszítés"] # 0x321 (en: 'palatalized hook below embellishment', DeepL translation) + - "̢": [t: "retroflex horog alatti díszítés"] # 0x322 (en: 'retroflex hook below embellishment', DeepL translation) + - "̣": [t: "pont alatt díszítés"] # 0x323 (en: 'dot below embellishment', DeepL translation) + - "̤": [t: "diaerézis a díszítés alatt"] # 0x324 (en: 'diaeresis below embellishment', DeepL translation) + - "̥": [t: "gyűrű a díszítés alatt"] # 0x325 (en: 'ring below embellishment', DeepL translation) + - "̦": [t: "vessző a díszítés alatt"] # 0x326 (en: 'comma below embellishment', DeepL translation) + - "̧": [t: "cedilla díszítés"] # 0x327 (en: 'cedilla embellishment', DeepL translation) + - "̨": [t: "ogonek díszítés"] # 0x328 (en: 'ogonek embellishment', DeepL translation) + - "̩": [t: "függőleges vonal a díszítés alatt"] # 0x329 (en: 'vertical line below embellishment', DeepL translation) + - "̪": [t: "híd alatti díszítés"] # 0x32a (en: 'bridge below embellishment', DeepL translation) + - "̫": [t: "fordított kettős ív a díszítés alatt"] # 0x32b (en: 'inverted double arch below embellishment', DeepL translation) + - "̬": [t: "caron alatti díszítés"] # 0x32c (en: 'caron below embellishment', DeepL translation) + - "̭": [t: "körkörös ékezet a díszítés alatt"] # 0x32d (en: 'circumflex accent below embellishment', DeepL translation) + - "̮": [t: "breve alatti díszítés"] # 0x32e (en: 'breve below embellishment', DeepL translation) + - "̯": [t: "fordított breve alatti díszítés"] # 0x32f (en: 'inverted breve below embellishment', DeepL translation) + - "̰": [t: "tilde alul díszítés"] # 0x330 (en: 'tilde below embellishment', DeepL translation) + - "̱": [t: "makron alatti díszítés"] # 0x331 (en: 'macron below embellishment', DeepL translation) + - "̲": [t: "alacsony vonal díszítés"] # 0x332 (en: 'low line embellishment', DeepL translation) + - "̳": [t: "kettős alacsony vonalú díszítés"] # 0x333 (en: 'double low line embellishment', DeepL translation) + - "̴": [t: "tilde feletti díszítés"] # 0x334 (en: 'tilde overlay embellishment', DeepL translation) + - "̵": [t: "rövid vonallal felrakott díszítés"] # 0x335 (en: 'short stroke overlay embellishment', DeepL translation) + - "̶": [t: "hosszú vonás overlay díszítés"] # 0x336 (en: 'long stroke overlay embellishment', DeepL translation) + - "̷": [t: "rövid solidus feletti díszítés"] # 0x337 (en: 'short solidus overlay embellishment', DeepL translation) + - "̸": [t: "hosszú solidus feletti díszítés"] # 0x338 (en: 'long solidus overlay embellishment', DeepL translation) + - "̹": [t: "jobb oldali félgyűrű alatt díszítés"] # 0x339 (en: 'right half ring below embellishment', DeepL translation) + - "̺": [t: "fordított híd alatti díszítés"] # 0x33a (en: 'inverted bridge below embellishment', DeepL translation) + - "̻": [t: "négyzet alatti díszítéssel"] # 0x33b (en: 'square below embellishment', DeepL translation) + - "̼": [t: "sirály alul díszítés"] # 0x33c (en: 'seagull below embellishment', DeepL translation) + - "̽": [t: "x feletti díszítés"] # 0x33d (en: 'x above embellishment', DeepL translation) + - "̾": [t: "függőleges tilde díszítés"] # 0x33e (en: 'vertical tilde embellishment', DeepL translation) + - "̿": [t: "dupla felülvonali díszítés"] # 0x33f (en: 'double overline embellishment', DeepL translation) + - "̀": [t: "súlyos hangjelzés díszítés"] # 0x340 (en: 'grave tone mark embellishment', DeepL translation) + - "́": [t: "hegyes tónusjel díszítés"] # 0x341 (en: 'acute tone mark embellishment', DeepL translation) + - "͆": [t: "híd felett"] # 0x346 (en: 'bridge above', DeepL translation) + + - "ΪΫϏ": # 0x3aa, 0x3ab, 0x3cf - test: if: "$CapitalLetters_Beep" then: @@ -205,30 +205,30 @@ if: "$SpeechOverrides_CapitalLetters = ''" then_test: if: "$Impairment = 'Blindness'" - then: [t: "cap"] + then: [t: "nagybetű"] # (en: 'cap', DeepL translation) else: [x: "$SpeechOverrides_CapitalLetters"] - pitch: value: "$CapitalLetters_Pitch" replace: [spell: "translate('.', 'ΪΫϏ', 'ιυϗ')"] - - t: "with dialytika" - - "ϊ": [t: "iota with dialytika"] # 0x3ca - - "ϋ": [t: "upsilon with dialytika"] # 0x3cb - - "ό": [t: "omicron with tonos"] # 0x3cc - - "ύ": [t: "upsilon with tonos"] # 0x3cd - - "ώ": [t: "omega with tonos"] # 0x3ce - - "ϐ": [t: "beta"] # 0x3d0 - - "ϑ": [t: "theta"] # 0x3d1 - - "ϒ": [t: "upsilon with hook"] # 0x3d2 - - "ϓ": [t: "upsilon with acute and hook"] # 0x3d3 - - "ϔ": [t: "upsilon with diaeresis and hook"] # 0x3d4 - - "ϕ": [t: "phi"] # 0x3d5 - - "ϖ": [t: "pi"] # 0x3d6 - - "ϗ": [t: "kai"] # 0x3d7 - - "Ϙ": [t: "cap archaic koppa"] # 0x3d8 - - "ϙ": [t: "archaic koppa"] # 0x3d9 - - "ϵ": [t: "epsilon"] # 0x3f5 - - "϶": [t: "reversed epsilon"] # 0x3f6 - - "А-Я": # 0x410 - 0x42f + - t: "dialitikával" # (en: 'with dialytika', DeepL translation) + - "ϊ": [t: "jota dialitikával"] # 0x3ca (en: 'iota with dialytika', DeepL translation) + - "ϋ": [t: "felszilon dialitikával"] # 0x3cb (en: 'upsilon with dialytika', DeepL translation) + - "ό": [t: "omikron tonossal"] # 0x3cc (en: 'omicron with tonos', DeepL translation) + - "ύ": [t: "upsilon tonossal"] # 0x3cd (en: 'upsilon with tonos', DeepL translation) + - "ώ": [t: "omega tonossal"] # 0x3ce (en: 'omega with tonos', DeepL translation) + - "ϐ": [t: "béta"] # 0x3d0 (en: 'beta', DeepL translation) + - "ϑ": [t: "théta"] # 0x3d1 (en: 'theta', DeepL translation) + - "ϒ": [t: "felfelé mutató horoggal"] # 0x3d2 (en: 'upsilon with hook', DeepL translation) + - "ϓ": [t: "felfelé mutató hegyes és kampós szög"] # 0x3d3 (en: 'upsilon with acute and hook', DeepL translation) + - "ϔ": [t: "upsilon diaerézissel és horoggal"] # 0x3d4 (en: 'upsilon with diaeresis and hook', DeepL translation) + - "ϕ": [t: "phi"] # 0x3d5 (DeepL translation) + - "ϖ": [t: "pi"] # 0x3d6 (DeepL translation) + - "ϗ": [t: "kai"] # 0x3d7 (DeepL translation) + - "Ϙ": [t: "nagybetűs archaikus koppa"] # 0x3d8 (en: 'cap archaic koppa', DeepL translation) + - "ϙ": [t: "archaikus koppa"] # 0x3d9 (en: 'archaic koppa', DeepL translation) + - "ϵ": [t: "epsilon"] # 0x3f5 (DeepL translation) + - "϶": [t: "fordított epsilon"] # 0x3f6 (en: 'reversed epsilon', DeepL translation) + - "А-Я": # 0x410 - 0x42f - test: if: "$CapitalLetters_Beep" then: @@ -241,3001 +241,3001 @@ if: "$SpeechOverrides_CapitalLetters = ''" then_test: if: "$Impairment = 'Blindness'" - then: [t: "cap"] + then: [t: "nagybetű"] # (en: 'cap', DeepL translation) else: [x: "$SpeechOverrides_CapitalLetters"] - pitch: value: "$CapitalLetters_Pitch" replace: [spell: "translate('.', 'АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ', 'абвгдежзийклмнопрстуфхцчшщъыьэюя')"] - - "а": [t: "a"] # 0x430 - - "б": [t: "be"] # 0x431 - - "в": [t: "ve"] # 0x432 - - "г": [t: "ghe"] # 0x433 - - "д": [t: "de"] # 0x434 - - "е": [t: "ie"] # 0x435 - - "ж": [t: "zhe"] # 0x436 - - "з": [t: "ze"] # 0x437 - - "и": [t: "i"] # 0x438 - - "й": [t: "short i"] # 0x439 - - "к": [t: "ka"] # 0x43a - - "л": [t: "el"] # 0x43b - - "м": [t: "em"] # 0x43c - - "н": [t: "en"] # 0x43d - - "о": [t: "o"] # 0x43e - - "п": [t: "pe"] # 0x43f - - "р": [t: "er"] # 0x440 - - "с": [t: "es"] # 0x441 - - "т": [t: "te"] # 0x442 - - "у": [t: "u"] # 0x443 - - "ф": [t: "ef"] # 0x444 - - "х": [t: "ha"] # 0x445 - - "ц": [t: "tse"] # 0x446 - - "ч": [t: "che"] # 0x447 - - "ш": [t: "sha"] # 0x448 - - "щ": [t: "shcha"] # 0x449 - - "ъ": [t: "hard sign"] # 0x44a - - "ы": [t: "yeru"] # 0x44b - - "ь": [t: "soft sign"] # 0x44c - - "э": [t: "e"] # 0x44d - - "ю": [t: "yu"] # 0x44e - - "я": [t: "ya"] # 0x44f - - "؆": [t: "Arabic-Indic cube root"] # 0x606 - - "؇": [t: "Arabic-Indic fourth root"] # 0x607 - - "؈": [t: "Arabic ray"] # 0x608 - - "‐": [t: "hyphen"] # 0x2010 - - "‑": [t: "hyphen"] # 0x2011 - - "‒": [t: "figure dash"] # 0x2012 - - "–": [t: "en dash"] # 0x2013 - - "—": [t: "em dash"] # 0x2014 - - "―": [t: "horizontal bar"] # 0x2015 - - "‖": [t: "double vertical line"] # 0x2016 - - "†": [t: "dagger"] # 0x2020 - - "‡": [t: "double dagger"] # 0x2021 - - - " - ": [t: " "] # 0x2000 - 0x2007 - - - "•": # 0x2022 + - "а": [t: "а"] # 0x430 (en: 'a', DeepL translation) + - "б": [t: "be"] # 0x431 (DeepL translation) + - "в": [t: "ve"] # 0x432 (DeepL translation) + - "г": [t: "ghe"] # 0x433 (DeepL translation) + - "д": [t: "de"] # 0x434 (DeepL translation) + - "е": [t: "azaz"] # 0x435 (en: 'ie', DeepL translation) + - "ж": [t: "zhe"] # 0x436 (DeepL translation) + - "з": [t: "ze"] # 0x437 (DeepL translation) + - "и": [t: "и"] # 0x438 (en: 'i', DeepL translation) + - "й": [t: "rövid i"] # 0x439 (en: 'short i', DeepL translation) + - "к": [t: "ka"] # 0x43a (DeepL translation) + - "л": [t: "el"] # 0x43b (DeepL translation) + - "м": [t: "em"] # 0x43c (DeepL translation) + - "н": [t: "en"] # 0x43d (DeepL translation) + - "о": [t: "о"] # 0x43e (en: 'o', DeepL translation) + - "п": [t: "pe"] # 0x43f (DeepL translation) + - "р": [t: "er"] # 0x440 (DeepL translation) + - "с": [t: "es"] # 0x441 (DeepL translation) + - "т": [t: "te"] # 0x442 (DeepL translation) + - "у": [t: "у"] # 0x443 (en: 'u', DeepL translation) + - "ф": [t: "ef"] # 0x444 (DeepL translation) + - "х": [t: "ha"] # 0x445 (DeepL translation) + - "ц": [t: "tse"] # 0x446 (DeepL translation) + - "ч": [t: "che"] # 0x447 (DeepL translation) + - "ш": [t: "sha"] # 0x448 (DeepL translation) + - "щ": [t: "shcha"] # 0x449 (DeepL translation) + - "ъ": [t: "kemény jel"] # 0x44a (en: 'hard sign', DeepL translation) + - "ы": [t: "yeru"] # 0x44b (DeepL translation) + - "ь": [t: "lágy jel"] # 0x44c (en: 'soft sign', DeepL translation) + - "э": [t: "э"] # 0x44d (en: 'e', DeepL translation) + - "ю": [t: "yu"] # 0x44e (DeepL translation) + - "я": [t: "ya"] # 0x44f (DeepL translation) + - "؆": [t: "arab-indikus köbgyök"] # 0x606 (en: 'Arabic-Indic cube root', DeepL translation) + - "؇": [t: "arab-indiai negyedik gyök"] # 0x607 (en: 'Arabic-Indic fourth root', DeepL translation) + - "؈": [t: "arab sugár"] # 0x608 (en: 'Arabic ray', DeepL translation) + - "‐": [t: "kötőjel"] # 0x2010 (en: 'hyphen', DeepL translation) + - "‑": [t: "kötőjel"] # 0x2011 (en: 'hyphen', DeepL translation) + - "‒": [t: "számjeles kötőjel"] # 0x2012 (en: 'figure dash', DeepL translation) + - "–": [t: "en kötőjel"] # 0x2013 (en: 'en dash', DeepL translation) + - "—": [t: "em kötőjel"] # 0x2014 (en: 'em dash', DeepL translation) + - "―": [t: "vízszintes sáv"] # 0x2015 (en: 'horizontal bar', DeepL translation) + - "‖": [t: "dupla függőleges vonal"] # 0x2016 (en: 'double vertical line', DeepL translation) + - "†": [t: "tőr"] # 0x2020 (en: 'dagger', DeepL translation) + - "‡": [t: "dupla tőr"] # 0x2021 (en: 'double dagger', DeepL translation) + + - " - ": [t: "‡"] # 0x2000 - 0x2007 (en: ' ', DeepL translation) + + - "•": # 0x2022 - test: if: "@data-chem-formula-op" - then: [t: "dot"] - else: [t: "bullet"] + then: [t: "pont"] # (en: 'dot', DeepL translation) + else: [t: "golyó"] # (en: 'bullet', DeepL translation) - - "…": # 0x2026 + - "…": # 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][.='…']" - then: [t: "dot dot dot"] - else_test: # must have $ClearSpeak_Ellipses = 'AndSoOn' + then: [t: "pont pont pont pont"] # (en: 'dot dot dot', DeepL translation) + else_test: # must have $ClearSpeak_Ellipses = 'AndSoOn' if: "count(following-sibling::*) = 0" - then: [t: "and so on"] - else: [t: "and so on up to"] - - - "‰": [t: "per mille"] # 0x2030 - - "‱": [t: "per ten thousand"] # 0x2031 - - "′": [t: "prime"] # 0x2032 - - "″": [t: "double prime"] # 0x2033 - - "‴": [t: "triple prime"] # 0x2034 - - "‵": [t: "reversed prime"] # 0x2035 - - "‶": [t: "reversed double prime"] # 0x2036 - - "‷": [t: "reversed triple prime"] # 0x2037 - - "‸": [t: "to the"] # 0x2038 - - "‹": [t: "single left pointing angle quote mark"] # 0x2039 - - "›": [t: "single right pointing angle quote mark"] # 0x203a - - "‼": # 0x203c + then: [t: "és így tovább"] # (en: 'and so on', DeepL translation) + else: [t: "és így tovább egészen"] # (en: 'and so on up to', DeepL translation) + + - "‰": [t: "per mille"] # 0x2030 (DeepL translation) + - "‱": [t: "per tízezer"] # 0x2031 (en: 'per ten thousand', DeepL translation) + - "′": [t: "prím"] # 0x2032 (en: 'prime', DeepL translation) + - "″": [t: "dupla prím"] # 0x2033 (en: 'double prime', DeepL translation) + - "‴": [t: "hármas prím"] # 0x2034 (en: 'triple prime', DeepL translation) + - "‵": [t: "fordított prím"] # 0x2035 (en: 'reversed prime', DeepL translation) + - "‶": [t: "fordított dupla prímszám"] # 0x2036 (en: 'reversed double prime', DeepL translation) + - "‷": [t: "fordított hármas prím"] # 0x2037 (en: 'reversed triple prime', DeepL translation) + - "‸": [t: "a"] # 0x2038 (en: 'to the', DeepL translation) + - "‹": [t: "egyetlen balra mutató szögletes idézőjel"] # 0x2039 (en: 'single left pointing angle quote mark', DeepL translation) + - "›": [t: "egyszerű jobbra mutató szögletes idézőjel"] # 0x203a (en: 'single right pointing angle quote mark', DeepL translation) + - "‼": # 0x203c - test: if: "ancestor-or-self::*[contains(@data-intent-property, ':literal:')]" - then: [t: "double exclamation point"] # 0x203c - else: [t: "double factorial"] # 0x203c - - "⁄": # 0x2044 + then: [t: "dupla felkiáltójel"] # 0x203c (en: 'double exclamation point', DeepL translation) + else: [t: "dupla faktoriális"] # 0x203c (en: 'double factorial', DeepL translation) + - "⁄": # 0x2044 - test: if: "ancestor-or-self::*[contains(@data-intent-property, ':literal:')]" - then: [t: "large slash"] # 0x203c - else: [t: "divided by"] # 0x203c - - "⁅": [t: "left square bracket with quill"] # 0x2045 - - "⁆": [t: "right square bracket with quill"] # 0x2046 - - "※": [t: "reference mark"] # 0x203b - - "‿": [t: "under tie"] # 0x203F - - "⁀": [t: "tie"] # 0x2040 - - "⁎": [t: "low asterisk"] # 0x204e - - "⁏": [t: "reversed semicolon"] # 0x204f - - "⁐": [t: "close up"] # 0x2050 - - "⁑": [t: "two vertical asterisks"] # 0x2051 - - "⁒": [t: "commercial minus sign"] # 0x2052 - - "⁗": [t: "quadruple prime"] # 0x2057 - - "⁠": [t: ""] # 0x2060 - - "⁰": [t: "to the zeroth power"] # 0x2070 - - "ⁱ": [t: "to the i-th power"] # 0x2071 - - "⁴": [t: "to the fourth power"] # 0x2074 - - "⁵": [t: "to the fifth power"] # 0x2075 - - "⁶": [t: "to the sixth power"] # 0x2076 - - "⁷": [t: "to the seventh power"] # 0x2077 - - "⁸": [t: "to the eighth power"] # 0x2078 - - "⁹": [t: "to the ninth power"] # 0x2079 - - "⁺": [t: "superscript plus sign"] # 0x207a - - "⁻": [t: "superscript minus"] # 0x207b - - "⁼": [t: "superscript equals sign"] # 0x207c - - "⁽": [t: "superscript left parenthesis"] # 0x207d - - "⁾": [t: "superscript right parenthesis"] # 0x207e - - "ⁿ": [t: "to the ennth power"] # 0x207f - - "₀": [t: "sub zero"] # 0x2080 - - "₁": [t: "sub one"] # 0x2081 - - "₂": [t: "sub two"] # 0x2082 - - "₃": [t: "sub three"] # 0x2083 - - "₄": [t: "sub four"] # 0x2084 - - "₅": [t: "sub five"] # 0x2085 - - "₆": [t: "sub six"] # 0x2086 - - "₇": [t: "sub seven"] # 0x2087 - - "₈": [t: "sub eight"] # 0x2088 - - "₉": [t: "sub nine"] # 0x2089 - - "₊": [t: "subscript plus sign"] # 0x208a - - "₋": [t: "subscript minus sign"] # 0x208b - - "₌": [t: "subscript equals sign"] # 0x208c - - "₍": [t: "subscript left parenthesis"] # 0x208d - - "₎": [t: "subscript right parenthesis"] # 0x208e - - "ₐ": [t: "sub A"] # 0x2090 - - "ₑ": [t: "sub E"] # 0x2091 - - "ₒ": [t: "sub O"] # 0x2092 - - "ₓ": [t: "sub X"] # 0x2093 - - "ₕ": [t: "sub H"] # 0x2095 - - "ₖ": [t: "sub K"] # 0x2096 - - "ₗ": [t: "sub L"] # 0x2097 - - "ₘ": [t: "sub M"] # 0x2098 - - "ₙ": [t: "sub N"] # 0x2099 - - "ₚ": [t: "sub P"] # 0x209a - - "ₛ": [t: "sub S"] # 0x209b - - "ₜ": [t: "sub T"] # 0x209c - - "₠": [t: "european currenty units"] # 0x20a0 - - "₡": [t: "colons"] # 0x20a1 - - "₢": [t: "cruzeiro"] # 0x20a2 - - "₣": [t: "franc"] # 0x20a3 - - "₤": [t: "lira"] # 0x20a4 - - "₥": [t: "mills"] # 0x20a5 - - "₦": [t: "naira"] # 0x20a6 - - "₧": [t: "peseta"] # 0x20a7 - - "₨": [t: "rupees"] # 0x20a8 - - "₩": [t: "won"] # 0x20a9 - - "₪": [t: "new sheqels"] # 0x20aa - - "₫": [t: "dong"] # 0x20ab - - "€": [t: "euros"] # 0x20ac - - "₭": [t: "kip"] # 0x20ad - - "₮": [t: "tugrik"] # 0x20ae - - "₯": [t: "drachma"] # 0x20af - - "₰": [t: "german pennies"] # 0x20b0 - - "₱": [t: "pesos"] # 0x20b1 - - "₲": [t: "guaranis"] # 0x20b2 - - "₳": [t: "australs"] # 0x20b3 - - "₴": [t: "hryvnias"] # 0x20b4 - - "₵": [t: "cedis"] # 0x20b5 - - "₶": [t: "livre tournois"] # 0x20b6 - - "₷": [t: "spesmilos"] # 0x20b7 - - "₸": [t: "tenges"] # 0x20b8 - - "₹": [t: "indian rupees"] # 0x20b9 - - "₺": [t: "turkish liras"] # 0x20ba - - "⃐": [t: "left harpoon above embellishment"] # 0x20d0 - - "⃑": [t: "right harpoon above embellishment"] # 0x20d1 - - "⃒": [t: "long vertical line overlay embellishment"] # 0x20d2 - - "⃓": [t: "short vertical line overlay embellishment"] # 0x20d3 - - "⃔": [t: "anticlockwise arrow above embellishment"] # 0x20d4 - - "⃕": [t: "clockwise arrow above embellishment"] # 0x20d5 - - "⃖": [t: "left arrow above embellishment"] # 0x20d6 - - "⃗": [t: "right arrow above embellishment"] # 0x20d7 - - "⃘": [t: "ring overlay embellishment"] # 0x20d8 - - "⃙": [t: "clockwise ring overlay embellishment"] # 0x20d9 - - "⃚": [t: "anticlockwise ring overlay embellishment"] # 0x20da - - "⃛": [t: "triple dot"] # 0x20db - - "⃜": [t: "quadruple dot"] # 0x20dc - - "⃝": [t: "enclosing circle embellishment"] # 0x20dd - - "⃞": [t: "enclosing square embellishment"] # 0x20de - - "⃟": [t: "enclosing diamond embellishment"] # 0x20df - - "⃠": [t: "enclosing circle backslash embellishment"] # 0x20e0 - - "⃡": [t: "left right arrow above embellishment"] # 0x20e1 - - "⃢": [t: "enclosing screen embellishment"] # 0x20e2 - - "⃣": [t: "enclosing keycap embellishment"] # 0x20e3 - - "⃤": [t: "enclosing upward pointing triangle embellishment"] # 0x20e4 - - "⃥": [t: "reverse solidus overlay embellishment"] # 0x20e5 - - "⃦": [t: "double verticle stroke embellishment"] # 0x20e6 - - "⃧": [t: "annuity symbol embellishment"] # 0x20e7 - - "⃨": [t: "triple underdot"] # 0x20e8 - - "⃩": [t: "wide bridge above embellishment"] # 0x20e9 - - "⃪": [t: "left arrow overlay embellishment"] # 0x20ea - - "⃫": [t: "long double solidus overlay embellishment"] # 0x20eb - - "⃬": [t: "right harpoon with barb down embellishment"] # 0x20ec - - "⃭": [t: "left harpoon with barb down embellishment"] # 0x20ed - - "⃮": [t: "left arrow below embellishment"] # 0x20ee - - "⃯": [t: "right arrow below embellishment"] # 0x20ef - - "⃰": [t: "asterisk above embellishment"] # 0x20f0 - - "℄": [t: "center line symbol"] # 0x2104 - - "℅": [t: "care of"] # 0x2105 - - "℆": [t: "cada una"] # 0x2106 - - "ℇ": [t: "euler's constant"] # 0x2107 - - "℈": [t: "scruples"] # 0x2108 - - "℉": [t: "degrees fahrenheit"] # 0x2109 - - "ℊ": [t: "script g"] # 0x210a - - "ℌℑℨℭ": # 0x210c, 0x2111, 0x2128, 0x212d - - t: "fraktur" + then: [t: "nagy átlós vonal"] # 0x203c (en: 'large slash', DeepL translation) + else: [t: "osztva"] # 0x203c (en: 'divided by', DeepL translation) + - "⁅": [t: "bal szögletes zárójel tollal"] # 0x2045 (en: 'left square bracket with quill', DeepL translation) + - "⁆": [t: "jobb oldali szögletes zárójel tollal"] # 0x2046 (en: 'right square bracket with quill', DeepL translation) + - "※": [t: "referenciajel"] # 0x203b (en: 'reference mark', DeepL translation) + - "‿": [t: "alá kötés"] # 0x203F (en: 'under tie', DeepL translation) + - "⁀": [t: "nyakkendő"] # 0x2040 (en: 'tie', DeepL translation) + - "⁎": [t: "alacsony csillaggal"] # 0x204e (en: 'low asterisk', DeepL translation) + - "⁏": [t: "fordított pontosvessző"] # 0x204f (en: 'reversed semicolon', DeepL translation) + - "⁐": [t: "közelről"] # 0x2050 (en: 'close up', DeepL translation) + - "⁑": [t: "két függőleges csillag"] # 0x2051 (en: 'two vertical asterisks', DeepL translation) + - "⁒": [t: "kereskedelmi mínusz jel"] # 0x2052 (en: 'commercial minus sign', DeepL translation) + - "⁗": [t: "négyszeres prím"] # 0x2057 (en: 'quadruple prime', DeepL translation) + - "⁠": [t: ""] # 0x2060 + - "⁰": [t: "a nulladik hatványig"] # 0x2070 (en: 'to the zeroth power', DeepL translation) + - "ⁱ": [t: "i-edik hatványig"] # 0x2071 (en: 'to the i-th power', DeepL translation) + - "⁴": [t: "a negyedik hatványig"] # 0x2074 (en: 'to the fourth power', DeepL translation) + - "⁵": [t: "ötödik hatványra"] # 0x2075 (en: 'to the fifth power', DeepL translation) + - "⁶": [t: "hatodik hatványra"] # 0x2076 (en: 'to the sixth power', DeepL translation) + - "⁷": [t: "hetedik hatványra"] # 0x2077 (en: 'to the seventh power', DeepL translation) + - "⁸": [t: "az ath hatványra"] # 0x2078 (en: 'to the eighth power', DeepL translation) + - "⁹": [t: "a kilencedik hatványra"] # 0x2079 (en: 'to the ninth power', DeepL translation) + - "⁺": [t: "felsőbbrendű plusz jel"] # 0x207a (en: 'superscript plus sign', DeepL translation) + - "⁻": [t: "feliratos mínusz"] # 0x207b (en: 'superscript minus', DeepL translation) + - "⁼": [t: "feljebb írt egyenlőségjel"] # 0x207c (en: 'superscript equals sign', DeepL translation) + - "⁽": [t: "feliratos bal oldali zárójel"] # 0x207d (en: 'superscript left parenthesis', DeepL translation) + - "⁾": [t: "feliratos jobb oldali zárójel"] # 0x207e (en: 'superscript right parenthesis', DeepL translation) + - "ⁿ": [t: "a legnagyobb erővel"] # 0x207f (en: 'to the ennth power', DeepL translation) + - "₀": [t: "sub nulla"] # 0x2080 (en: 'sub zero', DeepL translation) + - "₁": [t: "egyes alosztály"] # 0x2081 (en: 'sub one', DeepL translation) + - "₂": [t: "sub kettő"] # 0x2082 (en: 'sub two', DeepL translation) + - "₃": [t: "sub három"] # 0x2083 (en: 'sub three', DeepL translation) + - "₄": [t: "alnégyes"] # 0x2084 (en: 'sub four', DeepL translation) + - "₅": [t: "sub five"] # 0x2085 (DeepL translation) + - "₆": [t: "sub hat"] # 0x2086 (en: 'sub six', DeepL translation) + - "₇": [t: "sub seven"] # 0x2087 (DeepL translation) + - "₈": [t: "sub at"] # 0x2088 (en: 'sub eight', DeepL translation) + - "₉": [t: "sub nine"] # 0x2089 (DeepL translation) + - "₊": [t: "alulírott plusz jel"] # 0x208a (en: 'subscript plus sign', DeepL translation) + - "₋": [t: "alárendelő mínusz jel"] # 0x208b (en: 'subscript minus sign', DeepL translation) + - "₌": [t: "indexált egyenlőségjel"] # 0x208c (en: 'subscript equals sign', DeepL translation) + - "₍": [t: "index balra zárójelben"] # 0x208d (en: 'subscript left parenthesis', DeepL translation) + - "₎": [t: "subscript jobb oldali zárójel"] # 0x208e (en: 'subscript right parenthesis', DeepL translation) + - "ₐ": [t: "a. al"] # 0x2090 (en: 'sub A', DeepL translation) + - "ₑ": [t: "sub e"] # 0x2091 (en: 'sub E', DeepL translation) + - "ₒ": [t: "sub o"] # 0x2092 (en: 'sub O', DeepL translation) + - "ₓ": [t: "sub x"] # 0x2093 (en: 'sub X', DeepL translation) + - "ₕ": [t: "h részhalmaz"] # 0x2095 (en: 'sub H', DeepL translation) + - "ₖ": [t: "sub k"] # 0x2096 (en: 'sub K', DeepL translation) + - "ₗ": [t: "alul l"] # 0x2097 (en: 'sub L', DeepL translation) + - "ₘ": [t: "sub m"] # 0x2098 (en: 'sub M', DeepL translation) + - "ₙ": [t: "n alatti n"] # 0x2099 (en: 'sub N', DeepL translation) + - "ₚ": [t: "sub p"] # 0x209a (en: 'sub P', DeepL translation) + - "ₛ": [t: "sub s"] # 0x209b (en: 'sub S', DeepL translation) + - "ₜ": [t: "sub t"] # 0x209c (en: 'sub T', DeepL translation) + - "₠": [t: "európai áramegységek"] # 0x20a0 (en: 'european currenty units', DeepL translation) + - "₡": [t: "kettőspontok"] # 0x20a1 (en: 'colons', DeepL translation) + - "₢": [t: "cruzeiro"] # 0x20a2 (DeepL translation) + - "₣": [t: "frank"] # 0x20a3 (en: 'franc', DeepL translation) + - "₤": [t: "líra"] # 0x20a4 (en: 'lira', DeepL translation) + - "₥": [t: "malmok"] # 0x20a5 (en: 'mills', DeepL translation) + - "₦": [t: "naira"] # 0x20a6 (DeepL translation) + - "₧": [t: "peseta"] # 0x20a7 (DeepL translation) + - "₨": [t: "rúpiák"] # 0x20a8 (en: 'rupees', DeepL translation) + - "₩": [t: "nyert"] # 0x20a9 (en: 'won', DeepL translation) + - "₪": [t: "új sheqel"] # 0x20aa (en: 'new sheqels', DeepL translation) + - "₫": [t: "dong"] # 0x20ab (DeepL translation) + - "€": [t: "euró"] # 0x20ac (en: 'euros', DeepL translation) + - "₭": [t: "kip"] # 0x20ad (DeepL translation) + - "₮": [t: "tugrik"] # 0x20ae (DeepL translation) + - "₯": [t: "drachma"] # 0x20af (DeepL translation) + - "₰": [t: "német fillér"] # 0x20b0 (en: 'german pennies', DeepL translation) + - "₱": [t: "peso"] # 0x20b1 (en: 'pesos', DeepL translation) + - "₲": [t: "guaranis"] # 0x20b2 (DeepL translation) + - "₳": [t: "ausztrálok"] # 0x20b3 (en: 'australs', DeepL translation) + - "₴": [t: "hrivnyák"] # 0x20b4 (en: 'hryvnias', DeepL translation) + - "₵": [t: "cedi"] # 0x20b5 (en: 'cedis', DeepL translation) + - "₶": [t: "livre tournois"] # 0x20b6 (DeepL translation) + - "₷": [t: "spesmilos"] # 0x20b7 (DeepL translation) + - "₸": [t: "tenges"] # 0x20b8 (DeepL translation) + - "₹": [t: "indiai rúpia"] # 0x20b9 (en: 'indian rupees', DeepL translation) + - "₺": [t: "török líra"] # 0x20ba (en: 'turkish liras', DeepL translation) + - "⃐": [t: "bal szigony felett díszítés"] # 0x20d0 (en: 'left harpoon above embellishment', DeepL translation) + - "⃑": [t: "jobb szigony a díszítés felett"] # 0x20d1 (en: 'right harpoon above embellishment', DeepL translation) + - "⃒": [t: "hosszú függőleges vonal feletti díszítés"] # 0x20d2 (en: 'long vertical line overlay embellishment', DeepL translation) + - "⃓": [t: "rövid függőleges vonallal fedett díszítés"] # 0x20d3 (en: 'short vertical line overlay embellishment', DeepL translation) + - "⃔": [t: "az óramutató járásával ellentétes irányú nyíl a díszítés felett"] # 0x20d4 (en: 'anticlockwise arrow above embellishment', DeepL translation) + - "⃕": [t: "óramutató járásával megegyező irányú nyíl a díszítés felett"] # 0x20d5 (en: 'clockwise arrow above embellishment', DeepL translation) + - "⃖": [t: "bal nyíl a díszítés felett"] # 0x20d6 (en: 'left arrow above embellishment', DeepL translation) + - "⃗": [t: "jobbra nyíl fölött díszítés"] # 0x20d7 (en: 'right arrow above embellishment', DeepL translation) + - "⃘": [t: "gyűrű feletti díszítés"] # 0x20d8 (en: 'ring overlay embellishment', DeepL translation) + - "⃙": [t: "óramutató járásával megegyező gyűrűs feliratú díszítés"] # 0x20d9 (en: 'clockwise ring overlay embellishment', DeepL translation) + - "⃚": [t: "óramutató járásával ellentétes irányú gyűrű feletti díszítés"] # 0x20da (en: 'anticlockwise ring overlay embellishment', DeepL translation) + - "⃛": [t: "hármas pont"] # 0x20db (en: 'triple dot', DeepL translation) + - "⃜": [t: "négyes pont"] # 0x20dc (en: 'quadruple dot', DeepL translation) + - "⃝": [t: "bezáró kör díszítés"] # 0x20dd (en: 'enclosing circle embellishment', DeepL translation) + - "⃞": [t: "záró négyzet alakú díszítés"] # 0x20de (en: 'enclosing square embellishment', DeepL translation) + - "⃟": [t: "zárt gyémánt díszítés"] # 0x20df (en: 'enclosing diamond embellishment', DeepL translation) + - "⃠": [t: "bezáró kör visszafelé irányuló díszítés"] # 0x20e0 (en: 'enclosing circle backslash embellishment', DeepL translation) + - "⃡": [t: "balra jobbra nyíl a díszítés felett"] # 0x20e1 (en: 'left right arrow above embellishment', DeepL translation) + - "⃢": [t: "körülzáró képernyő díszítés"] # 0x20e2 (en: 'enclosing screen embellishment', DeepL translation) + - "⃣": [t: "zárt kulcsosházas díszítés"] # 0x20e3 (en: 'enclosing keycap embellishment', DeepL translation) + - "⃤": [t: "zárt felfelé mutató háromszög díszítés"] # 0x20e4 (en: 'enclosing upward pointing triangle embellishment', DeepL translation) + - "⃥": [t: "fordított solidus feletti díszítés"] # 0x20e5 (en: 'reverse solidus overlay embellishment', DeepL translation) + - "⃦": [t: "kettős függőleges vonás díszítés"] # 0x20e6 (en: 'double verticle stroke embellishment', DeepL translation) + - "⃧": [t: "járadékszimbólum díszítés"] # 0x20e7 (en: 'annuity symbol embellishment', DeepL translation) + - "⃨": [t: "háromszoros aláhúzás"] # 0x20e8 (en: 'triple underdot', DeepL translation) + - "⃩": [t: "széles híd a díszítés felett"] # 0x20e9 (en: 'wide bridge above embellishment', DeepL translation) + - "⃪": [t: "bal nyíl feletti díszítés"] # 0x20ea (en: 'left arrow overlay embellishment', DeepL translation) + - "⃫": [t: "hosszú kettős szolidus feliratú feliratos díszítés"] # 0x20eb (en: 'long double solidus overlay embellishment', DeepL translation) + - "⃬": [t: "jobb szigony lefelé szúrós díszítéssel"] # 0x20ec (en: 'right harpoon with barb down embellishment', DeepL translation) + - "⃭": [t: "bal szigony lefelé szúrós díszítéssel"] # 0x20ed (en: 'left harpoon with barb down embellishment', DeepL translation) + - "⃮": [t: "balra nyíl alatti díszítés"] # 0x20ee (en: 'left arrow below embellishment', DeepL translation) + - "⃯": [t: "jobbra mutató nyíl alatt díszítés"] # 0x20ef (en: 'right arrow below embellishment', DeepL translation) + - "⃰": [t: "csillag a díszítés felett"] # 0x20f0 (en: 'asterisk above embellishment', DeepL translation) + - "℄": [t: "középvonal szimbólum"] # 0x2104 (en: 'center line symbol', DeepL translation) + - "℅": [t: "care of"] # 0x2105 (DeepL translation) + - "℆": [t: "cada una"] # 0x2106 (DeepL translation) + - "ℇ": [t: "euler-állandó"] # 0x2107 (en: 'euler's constant', DeepL translation) + - "℈": [t: "skrupulusok"] # 0x2108 (en: 'scruples', DeepL translation) + - "℉": [t: "fok fahrenheit"] # 0x2109 (en: 'degrees fahrenheit', DeepL translation) + - "ℊ": [t: "írás g"] # 0x210a (en: 'script g', DeepL translation) + - "ℌℑℨℭ": # 0x210c, 0x2111, 0x2128, 0x212d + - t: "fraktur" # (DeepL translation) - spell: "translate('.', 'ℌℑℨℭ', 'HIZC')" - - "ℍℙℾℿ": # 0x210d, 0x2119, 0x213e, 0x213f - - t: "double struck" + - "ℍℙℾℿ": # 0x210d, 0x2119, 0x213e, 0x213f + - t: "kettős ütés" # (en: 'double struck', DeepL translation) - spell: "translate('.', 'ℍℙℾℿ', 'HPΓΠ')" - - "ℎ": [t: "planck constant"] # 0x210e - - "ℏ": [t: "h bar"] # 0x210f + - "ℎ": [t: "planck-állandó"] # 0x210e (en: 'planck constant', DeepL translation) + - "ℏ": [t: "h bar"] # 0x210f (DeepL translation) - - "ℐℒ℘ℬℰℱℳ": # 0x2110, 0x2112, 0x2118, 0x2130, 0x2131, 0x2133 - - t: "script" + - "ℐℒ℘ℬℰℱℳ": # 0x2110, 0x2112, 0x2118, 0x2130, 0x2131, 0x2133 + - t: "script" # (DeepL translation) - spell: "translate('.', 'ℐℒ℘ℬℰℱℳ', 'ILPBEFM')" - - "ℓ": [t: "script l"] # 0x2113 - - "℔": [t: "pounds"] # 0x2114 - - "№": [t: "number"] # 0x2116 - - "℥": [t: "ounces"] # 0x2125 - - "Ω": [t: "ohms"] # 0x2126 - - "℧": [t: "mhos"] # 0x2127 - - "℩": [t: "turned iota"] # 0x2129 - - "K": [t: "kelvin"] # 0x212a - - "Å": [t: "angstroms"] # 0x212b - - "ℯ": [t: "script e"] # 0x212f + - "ℓ": [t: "írás l"] # 0x2113 (en: 'script l', DeepL translation) + - "℔": [t: "font"] # 0x2114 (en: 'pounds', DeepL translation) + - "№": [t: "szám"] # 0x2116 (en: 'number', DeepL translation) + - "℥": [t: "unciák"] # 0x2125 (en: 'ounces', DeepL translation) + - "Ω": [t: "ohm"] # 0x2126 (en: 'ohms', DeepL translation) + - "℧": [t: "mhos"] # 0x2127 (DeepL translation) + - "℩": [t: "fordított jota"] # 0x2129 (en: 'turned iota', DeepL translation) + - "K": [t: "kelvin"] # 0x212a (DeepL translation) + - "Å": [t: "angström"] # 0x212b (en: 'angstroms', DeepL translation) + - "ℯ": [t: "írás e"] # 0x212f (en: 'script e', DeepL translation) # coalesced some chars that use cap letters - - "Ⅎ℺⅁⅂⅃⅄": # 0x2132, 0x213a, 0x2141, 0x2142, 0x2143, 0x2144 + - "Ⅎ℺⅁⅂⅃⅄": # 0x2132, 0x213a, 0x2141, 0x2142, 0x2143, 0x2144 - test: - if: "'.' = '℺'" - then: [t: "rotated"] + then: [t: "forgatott"] # (en: 'rotated', DeepL translation) - else_if: "'.' = 'Ⅎ'" - then: [t: "turned"] + then: [t: "fordított"] # (en: 'turned', DeepL translation) - else_if: "'.' = '⅃'" - then: [t: "reversed sans-serif"] - else: [t: "turned sans-serif"] + then: [t: "fordított sans-serif"] # (en: 'reversed sans-serif', DeepL translation) + else: [t: "fordított sans-serif"] # (en: 'turned sans-serif', DeepL translation) - spell: "translate('.', 'Ⅎ℺⅁⅂⅃⅄', 'FQGLLY')" - - "ℴ": [t: "script o"] # 0x2134 - - "ℵ": [t: "first transfinite cardinal"] # 0x2135 - - "ℶ": [t: "second transfinite cardinal"] # 0x2136 - - "ℷ": [t: "third transfinite cardinal"] # 0x2137 - - "ℸ": [t: "fourth transfinite cardinal"] # 0x2138 - - "ℼ": [t: "double struck pi"] # 0x213c - - "ℽ": [t: "double struck gamma"] # 0x213d - - "⅀": [t: "double struck n-ary summation"] # 0x2140 - - "⅋": [t: "turned ampersand"] # 0x214b - - "⅌": [t: "per"] # 0x214c - - "ⅎ": [t: "turned F"] # 0x214e - - "¼": [t: "one quarter"] # 0x00bc - - "½": [t: "one half"] # 0x00bd - - "¾": [t: "three quarters"] # 0x00be - - "⅐": [t: "one seventh"] # 0x2150 - - "⅑": [t: "one ninth"] # 0x2151 - - "⅒": [t: "one tenth"] # 0x2152 - - "⅓": [t: "one third"] # 0x2153 - - "⅔": [t: "two thirds"] # 0x2154 - - "⅕": [t: "one fifth"] # 0x2155 - - "⅖": [t: "two fifths"] # 0x2156 - - "⅗": [t: "three fifths"] # 0x2157 - - "⅘": [t: "four fifths"] # 0x2158 - - "⅙": [t: "one sixth"] # 0x2159 - - "⅚": [t: "five sixths"] # 0x215a - - "⅛": [t: "one eighth"] # 0x215b - - "⅜": [t: "three eighths"] # 0x215c - - "⅝": [t: "five eighths"] # 0x215d - - "⅞": [t: "seven eighths"] # 0x215e - - "⅟": [t: "one over"] # 0x215f - - "Ⅰ": [t: "I"] # 0x2160 - - "Ⅱ": [t: "I I"] # 0x2161 - - "Ⅲ": [t: "I I I"] # 0x2162 - - "Ⅳ": [t: "I V"] # 0x2163 - - "Ⅴ": [t: "V"] # 0x2164 - - "Ⅵ": [t: "V I"] # 0x2165 - - "Ⅶ": [t: "V I I"] # 0x2166 - - "Ⅷ": [t: "V I I I"] # 0x2167 - - "Ⅸ": [t: "I X"] # 0x2168 - - "Ⅹ": [t: "X"] # 0x2169 - - "Ⅺ": [t: "X I"] # 0x216a - - "Ⅻ": [t: "X I I"] # 0x216b - - "Ⅼ": [t: "L"] # 0x216c - - "Ⅽ": [t: "C"] # 0x216d - - "Ⅾ": [t: "D"] # 0x216e - - "Ⅿ": [t: "M"] # 0x216f - - "ⅰ": [t: "I"] # 0x2170 - - "ⅱ": [t: "I I"] # 0x2171 - - "ⅲ": [t: "I I I"] # 0x2172 - - "ⅳ": [t: "I V"] # 0x2173 - - "ⅴ": [t: "V"] # 0x2174 - - "ⅵ": [t: "V I"] # 0x2175 - - "ⅶ": [t: "V I I"] # 0x2176 - - "ⅷ": [t: "V I I I"] # 0x2177 - - "ⅸ": [t: "I X"] # 0x2178 - - "ⅹ": [t: "X"] # 0x2179 - - "ⅺ": [t: "X I"] # 0x217a - - "ⅻ": [t: "X I I"] # 0x217b - - "ⅼ": [t: "L"] # 0x217c - - "ⅽ": [t: "C"] # 0x217d - - "ⅾ": [t: "D"] # 0x217e - - "ⅿ": [t: "M"] # 0x217f - - "↉": [t: "zero thirds"] # 0x2189 - - "↔": [t: "left right arrow"] # 0x2194 - - "↕": [t: "up down arrow"] # 0x2195 - - "↖": [t: "north west arrow"] # 0x2196 - - "↗": # 0x2197 + - "ℴ": [t: "írás o"] # 0x2134 (en: 'script o', DeepL translation) + - "ℵ": [t: "első transzfinit kardinális"] # 0x2135 (en: 'first transfinite cardinal', DeepL translation) + - "ℶ": [t: "második transzfinit kardinális"] # 0x2136 (en: 'second transfinite cardinal', DeepL translation) + - "ℷ": [t: "harmadik transzfinit kardinális"] # 0x2137 (en: 'third transfinite cardinal', DeepL translation) + - "ℸ": [t: "negyedik transzfinit kardinális"] # 0x2138 (en: 'fourth transfinite cardinal', DeepL translation) + - "ℼ": [t: "dupla leütött pi"] # 0x213c (en: 'double struck pi', DeepL translation) + - "ℽ": [t: "dupla csapott gamma"] # 0x213d (en: 'double struck gamma', DeepL translation) + - "⅀": [t: "kettős leütött n-es összegzés"] # 0x2140 (en: 'double struck n-ary summation', DeepL translation) + - "⅋": [t: "fordított erősítőjel"] # 0x214b (en: 'turned ampersand', DeepL translation) + - "⅌": [t: "per"] # 0x214c (DeepL translation) + - "ⅎ": [t: "fordított f"] # 0x214e (en: 'turned F', DeepL translation) + - "¼": [t: "egy negyed"] # 0x00bc (en: 'one quarter', DeepL translation) + - "½": [t: "egy fél"] # 0x00bd (en: 'one half', DeepL translation) + - "¾": [t: "háromnegyedes zárójel"] # 0x00be (en: 'three quarters', DeepL translation) + - "⅐": [t: "egy hetedik"] # 0x2150 (en: 'one seventh', DeepL translation) + - "⅑": [t: "egy kilencedik"] # 0x2151 (en: 'one ninth', DeepL translation) + - "⅒": [t: "egy tized"] # 0x2152 (en: 'one tenth', DeepL translation) + - "⅓": [t: "egyharmad"] # 0x2153 (en: 'one third', DeepL translation) + - "⅔": [t: "két harmad"] # 0x2154 (en: 'two thirds', DeepL translation) + - "⅕": [t: "egy ötödik"] # 0x2155 (en: 'one fifth', DeepL translation) + - "⅖": [t: "két ötöd"] # 0x2156 (en: 'two fifths', DeepL translation) + - "⅗": [t: "három ötödik"] # 0x2157 (en: 'three fifths', DeepL translation) + - "⅘": [t: "négy ötöd"] # 0x2158 (en: 'four fifths', DeepL translation) + - "⅙": [t: "egy hatod"] # 0x2159 (en: 'one sixth', DeepL translation) + - "⅚": [t: "öt hatod"] # 0x215a (en: 'five sixths', DeepL translation) + - "⅛": [t: "egy ath"] # 0x215b (en: 'one eighth', DeepL translation) + - "⅜": [t: "három aths"] # 0x215c (en: 'three eighths', DeepL translation) + - "⅝": [t: "öt at"] # 0x215d (en: 'five eighths', DeepL translation) + - "⅞": [t: "hét atlasz"] # 0x215e (en: 'seven eighths', DeepL translation) + - "⅟": [t: "egy fölött"] # 0x215f (en: 'one over', DeepL translation) + - "Ⅰ": [t: "Ⅰ"] # 0x2160 (en: 'I', DeepL translation) + - "Ⅱ": [t: "i i"] # 0x2161 (en: 'I I', DeepL translation) + - "Ⅲ": [t: "i i i i"] # 0x2162 (en: 'I I I', DeepL translation) + - "Ⅳ": [t: "i v"] # 0x2163 (en: 'I V', DeepL translation) + - "Ⅴ": [t: "Ⅴ"] # 0x2164 (en: 'V', DeepL translation) + - "Ⅵ": [t: "v i"] # 0x2165 (en: 'V I', DeepL translation) + - "Ⅶ": [t: "v i i"] # 0x2166 (en: 'V I I', DeepL translation) + - "Ⅷ": [t: "v i i i i"] # 0x2167 (en: 'V I I I', DeepL translation) + - "Ⅸ": [t: "i x"] # 0x2168 (en: 'I X', DeepL translation) + - "Ⅹ": [t: "Ⅹ"] # 0x2169 (en: 'X', DeepL translation) + - "Ⅺ": [t: "x i"] # 0x216a (en: 'X I', DeepL translation) + - "Ⅻ": [t: "x i i"] # 0x216b (en: 'X I I', DeepL translation) + - "Ⅼ": [t: "Ⅼ"] # 0x216c (en: 'L', DeepL translation) + - "Ⅽ": [t: "Ⅽ"] # 0x216d (en: 'C', DeepL translation) + - "Ⅾ": [t: "Ⅾ"] # 0x216e (en: 'D', DeepL translation) + - "Ⅿ": [t: "Ⅿ"] # 0x216f (en: 'M', DeepL translation) + - "ⅰ": [t: "ⅰ"] # 0x2170 (en: 'I', DeepL translation) + - "ⅱ": [t: "i i"] # 0x2171 (en: 'I I', DeepL translation) + - "ⅲ": [t: "i i i i"] # 0x2172 (en: 'I I I', DeepL translation) + - "ⅳ": [t: "i v"] # 0x2173 (en: 'I V', DeepL translation) + - "ⅴ": [t: "ⅴ"] # 0x2174 (en: 'V', DeepL translation) + - "ⅵ": [t: "v i"] # 0x2175 (en: 'V I', DeepL translation) + - "ⅶ": [t: "v i i"] # 0x2176 (en: 'V I I', DeepL translation) + - "ⅷ": [t: "v i i i i"] # 0x2177 (en: 'V I I I', DeepL translation) + - "ⅸ": [t: "i x"] # 0x2178 (en: 'I X', DeepL translation) + - "ⅹ": [t: "ⅹ"] # 0x2179 (en: 'X', DeepL translation) + - "ⅺ": [t: "x i"] # 0x217a (en: 'X I', DeepL translation) + - "ⅻ": [t: "x i i"] # 0x217b (en: 'X I I', DeepL translation) + - "ⅼ": [t: "ⅼ"] # 0x217c (en: 'L', DeepL translation) + - "ⅽ": [t: "ⅽ"] # 0x217d (en: 'C', DeepL translation) + - "ⅾ": [t: "ⅾ"] # 0x217e (en: 'D', DeepL translation) + - "ⅿ": [t: "ⅿ"] # 0x217f (en: 'M', DeepL translation) + - "↉": [t: "nulla harmadok"] # 0x2189 (en: 'zero thirds', DeepL translation) + - "↔": [t: "balra jobbra nyíl"] # 0x2194 (en: 'left right arrow', DeepL translation) + - "↕": [t: "felfelé lefelé mutató nyíl"] # 0x2195 (en: 'up down arrow', DeepL translation) + - "↖": [t: "északnyugati nyíl"] # 0x2196 (en: 'north west arrow', DeepL translation) + - "↗": # 0x2197 - test: if: "ancestor::*[2][self::m:limit]" - then: [t: "approaches from below"] - else: [t: "north east arrow"] + then: [t: "alulról közelít"] # (en: 'approaches from below', DeepL translation) + else: [t: "északkeleti nyíl"] # (en: 'north east arrow', DeepL translation) - - "↘": # 0x2198 + - "↘": # 0x2198 - test: if: "ancestor::*[2][self::m:limit]" - then: [t: "approaches from above"] - else: [t: "south east arrow"] - - - "↙": [t: "south west arrow"] # 0x2199 - - "↚": [t: "left arrow with stroke"] # 0x219a - - "↛": [t: "right arrow with stroke"] # 0x219b - - "↜": [t: "left wave arrow"] # 0x219c - - "↝": [t: "right wave arrow"] # 0x219d - - "↞": [t: "left two headed arrow"] # 0x219e - - "↟": [t: "up two headed arrow"] # 0x219f - - "↠": [t: "right two headed arrow"] # 0x21a0 - - "↡": [t: "down two headed arrow"] # 0x21a1 - - "↢": [t: "left arrow with tail"] # 0x21a2 - - "↣": [t: "right arrow with tail"] # 0x21a3 - - "↤": [t: "left arrow from bar"] # 0x21a4 - - "↥": [t: "up arrow from bar"] # 0x21a5 - - "↦": [t: "right arrow from bar"] # 0x21a6 - - "↧": [t: "down arrow from bar"] # 0x21a7 - - "↨": [t: "up down arrow with base"] # 0x21a8 - - "↩": [t: "left arrow with hook"] # 0x21a9 - - "↪": [t: "right arrow with hook"] # 0x21aa - - "↫": [t: "left arrow with loop"] # 0x21ab - - "↬": [t: "right arrow with loop"] # 0x21ac - - "↭": [t: "left right wave arrow"] # 0x21ad - - "↮": [t: "left right arrow with stroke"] # 0x21ae - - "↯": [t: "down zigzag arrow"] # 0x21af - - "↰": [t: "up arrow with tip left"] # 0x21b0 - - "↱": [t: "up arrow with tip right"] # 0x21b1 - - "↲": [t: "down arrow with tip left"] # 0x21b2 - - "↳": [t: "down arrow with tip right"] # 0x21b3 - - "↴": [t: "right arrow with corner down"] # 0x21b4 - - "↵": [t: "down arrow with corner left"] # 0x21b5 - - "↶": [t: "anticlockwise top semicircle arrow"] # 0x21b6 - - "↷": [t: "clockwise top semicircle arrow"] # 0x21b7 - - "↸": [t: "north west arrow to long bar"] # 0x21b8 - - "↹": [t: "left arrow to bar over right arrow to bar"] # 0x21b9 - - "↺": [t: "anticlockwise open circle arrow"] # 0x21ba - - "↻": [t: "clockwise open circle arrow"] # 0x21bb - - "↼": [t: "left harpoon up"] # 0x21bc - - "↽": [t: "left harpoon down"] # 0x21bd - - "↾": [t: "up harpoon right"] # 0x21be - - "↿": [t: "up harpoon left"] # 0x21bf - - "⇀": [t: "right harpoon up"] # 0x21c0 - - "⇁": [t: "right harpoon down"] # 0x21c1 - - "⇂": [t: "down harpoon right"] # 0x21c2 - - "⇃": [t: "down harpoon left"] # 0x21c3 - - "⇄": [t: "right arrow over left arrow"] # 0x21c4 - - "⇅": [t: "up arrow left of down arrow"] # 0x21c5 - - "⇆": [t: "left arrow over right arrow"] # 0x21c6 - - "⇇": [t: "left paired arrows"] # 0x21c7 - - "⇈": [t: "up paired arrows"] # 0x21c8 - - "⇉": [t: "right paired arrows"] # 0x21c9 - - "⇊": [t: "down paired arrows"] # 0x21ca - - "⇋": [t: "left harpoon over right harpoon"] # 0x21cb - - "⇌": [t: "right harpoon over left harpoon"] # 0x21cc - - "⇍": [t: "left double arrow with stroke"] # 0x21cd - - "⇎": [t: "left right double arrow with stroke"] # 0x21ce - - "⇏": [t: "right double arrow with stroke"] # 0x21cf - - "⇐": [t: "left double arrow"] # 0x21d0 - - "⇑": [t: "up double arrow"] # 0x21d1 - - "⇒": [t: "implies"] # 0x21d2 - - "⇓": [t: "down double arrow"] # 0x21d3 - - "⇔": [t: "if and only if"] # 0x21d4 - - "⇕": [t: "up down double arrow"] # 0x21d5 - - "⇖": [t: "north west double arrow"] # 0x21d6 - - "⇗": [t: "north east double arrow"] # 0x21d7 - - "⇘": [t: "south east double arrow"] # 0x21d8 - - "⇙": [t: "south west double arrow"] # 0x21d9 - - "⇚": [t: "left triple arrow"] # 0x21da - - "⇛": [t: "right triple arrow"] # 0x21db - - "⇜": [t: "left squiggle arrow"] # 0x21dc - - "⇝": [t: "right squiggle arrow"] # 0x21dd - - "⇞": [t: "up arrow with double stroke"] # 0x21de - - "⇟": [t: "down arrow with double stroke"] # 0x21df - - "⇠": [t: "left dashed arrow"] # 0x21e0 - - "⇡": [t: "up dashed arrow"] # 0x21e1 - - "⇢": [t: "right dashed arrow"] # 0x21e2 - - "⇣": [t: "down dashed arrow"] # 0x21e3 - - "⇤": [t: "left arrow to bar"] # 0x21e4 - - "⇥": [t: "right arrow to bar"] # 0x21e5 - - "⇦": [t: "left white arrow"] # 0x21e6 - - "⇧": [t: "up white arrow"] # 0x21e7 - - "⇨": [t: "right white arrow"] # 0x21e8 - - "⇩": [t: "down white arrow"] # 0x21e9 - - "⇪": [t: "up white arrow from bar"] # 0x21ea - - "⇫": [t: "up white arrow on pedestal"] # 0x21eb - - "⇬": [t: "up white arrow on pedestal with horizontal bar"] # 0x21ec - - "⇭": [t: "up white arrow on pedestal with vertical bar"] # 0x21ed - - "⇮": [t: "up white double arrow"] # 0x21ee - - "⇯": [t: "up white double arrow on pedestal"] # 0x21ef - - "⇰": [t: "right white arrow from wall"] # 0x21f0 - - "⇱": [t: "north west arrow to corner"] # 0x21f1 - - "⇲": [t: "south east arrow to corner"] # 0x21f2 - - "⇳": [t: "up down white arrow"] # 0x21f3 - - "⇴": [t: "right arrow with small circle"] # 0x21f4 - - "⇵": [t: "down arrow left of up arrow"] # 0x21f5 - - "⇶": [t: "three right arrows"] # 0x21f6 - - "⇷": [t: "left arrow with vertical stroke"] # 0x21f7 - - "⇸": [t: "right arrow with vertical stroke"] # 0x21f8 - - "⇹": [t: "left right arrow with vertical stroke"] # 0x21f9 - - "⇺": [t: "left arrow with double vertical stroke"] # 0x21fa - - "⇻": [t: "right arrow with double vertical stroke"] # 0x21fb - - "⇼": [t: "left right arrow with double vertical stroke"] # 0x21fc - - "⇽": [t: "left open headed arrow"] # 0x21fd - - "⇾": [t: "right open headed arrow"] # 0x21fe - - "⇿": [t: "left right open headed arrow"] # 0x21ff - - "∀": [t: "for all"] # 0x2200 - - "∁": # 0x2201 - - test: - if: "$Verbosity!='Terse'" - then: [t: "the"] - - t: "complement of" - - "∂": # 0x2202 + then: [t: "felülről közelít"] # (en: 'approaches from above', DeepL translation) + else: [t: "délkeleti nyíl"] # (en: 'south east arrow', DeepL translation) + + - "↙": [t: "délnyugati nyíl"] # 0x2199 (en: 'south west arrow', DeepL translation) + - "↚": [t: "balra nyíl vonallal"] # 0x219a (en: 'left arrow with stroke', DeepL translation) + - "↛": [t: "jobbra mutató nyíl vonallal"] # 0x219b (en: 'right arrow with stroke', DeepL translation) + - "↜": [t: "bal oldali hullámos nyíl"] # 0x219c (en: 'left wave arrow', DeepL translation) + - "↝": [t: "jobb oldali hullámos nyíl"] # 0x219d (en: 'right wave arrow', DeepL translation) + - "↞": [t: "bal kétfejű nyíl"] # 0x219e (en: 'left two headed arrow', DeepL translation) + - "↟": [t: "felfelé kétfejű nyíl"] # 0x219f (en: 'up two headed arrow', DeepL translation) + - "↠": [t: "jobb kétfejű nyíl"] # 0x21a0 (en: 'right two headed arrow', DeepL translation) + - "↡": [t: "lefelé kétfejű nyíl"] # 0x21a1 (en: 'down two headed arrow', DeepL translation) + - "↢": [t: "balra mutató nyíl farokkal"] # 0x21a2 (en: 'left arrow with tail', DeepL translation) + - "↣": [t: "jobbra mutató nyíl farokkal"] # 0x21a3 (en: 'right arrow with tail', DeepL translation) + - "↤": [t: "bal nyíl a sávból"] # 0x21a4 (en: 'left arrow from bar', DeepL translation) + - "↥": [t: "felfelé mutató nyíl vonaltól"] # 0x21a5 (en: 'up arrow from bar', DeepL translation) + - "↦": [t: "jobbra mutató nyíl a sávból"] # 0x21a6 (en: 'right arrow from bar', DeepL translation) + - "↧": [t: "lefelé mutató nyíl a sávból"] # 0x21a7 (en: 'down arrow from bar', DeepL translation) + - "↨": [t: "fel-le nyíl alappal"] # 0x21a8 (en: 'up down arrow with base', DeepL translation) + - "↩": [t: "bal nyíl horoggal"] # 0x21a9 (en: 'left arrow with hook', DeepL translation) + - "↪": [t: "jobbra mutató nyíl horoggal"] # 0x21aa (en: 'right arrow with hook', DeepL translation) + - "↫": [t: "bal nyíl hurokkal"] # 0x21ab (en: 'left arrow with loop', DeepL translation) + - "↬": [t: "jobbra mutató nyíl hurokkal"] # 0x21ac (en: 'right arrow with loop', DeepL translation) + - "↭": [t: "balra jobbra hullámzó nyíl"] # 0x21ad (en: 'left right wave arrow', DeepL translation) + - "↮": [t: "balra jobbra nyíl függőleges vonallal"] # 0x21ae (en: 'left right arrow with stroke', DeepL translation) + - "↯": [t: "lefelé cikkcakkos nyíl"] # 0x21af (en: 'down zigzag arrow', DeepL translation) + - "↰": [t: "felfelé mutató nyíl hegyével balra"] # 0x21b0 (en: 'up arrow with tip left', DeepL translation) + - "↱": [t: "felfelé mutató nyíl jobbra mutató hegyével"] # 0x21b1 (en: 'up arrow with tip right', DeepL translation) + - "↲": [t: "lefelé mutató nyíl bal csúccsal"] # 0x21b2 (en: 'down arrow with tip left', DeepL translation) + - "↳": [t: "lefelé mutató nyíl hegyével jobbra"] # 0x21b3 (en: 'down arrow with tip right', DeepL translation) + - "↴": [t: "jobbra nyíl sarokkal lefelé"] # 0x21b4 (en: 'right arrow with corner down', DeepL translation) + - "↵": [t: "lefelé mutató nyíl bal oldali sarokkal"] # 0x21b5 (en: 'down arrow with corner left', DeepL translation) + - "↶": [t: "az óramutató járásával ellentétes irányú felső félköríves nyíl"] # 0x21b6 (en: 'anticlockwise top semicircle arrow', DeepL translation) + - "↷": [t: "óramutató járásával megegyezően felső félköríves nyíl"] # 0x21b7 (en: 'clockwise top semicircle arrow', DeepL translation) + - "↸": [t: "északnyugati nyíl a hosszú sávra"] # 0x21b8 (en: 'north west arrow to long bar', DeepL translation) + - "↹": [t: "bal nyíl a sáv fölé jobb nyíl a sáv fölé"] # 0x21b9 (en: 'left arrow to bar over right arrow to bar', DeepL translation) + - "↺": [t: "az óramutató járásával ellentétes irányban nyitott kör alakú nyíl"] # 0x21ba (en: 'anticlockwise open circle arrow', DeepL translation) + - "↻": [t: "az óramutató járásával megegyező irányban nyitott kör nyíl"] # 0x21bb (en: 'clockwise open circle arrow', DeepL translation) + - "↼": [t: "bal oldali szigony felfelé"] # 0x21bc (en: 'left harpoon up', DeepL translation) + - "↽": [t: "bal szigony lefelé"] # 0x21bd (en: 'left harpoon down', DeepL translation) + - "↾": [t: "felfelé szigony jobbra"] # 0x21be (en: 'up harpoon right', DeepL translation) + - "↿": [t: "fel szigony balra"] # 0x21bf (en: 'up harpoon left', DeepL translation) + - "⇀": [t: "jobb szigony felfelé"] # 0x21c0 (en: 'right harpoon up', DeepL translation) + - "⇁": [t: "jobb szigony lefelé"] # 0x21c1 (en: 'right harpoon down', DeepL translation) + - "⇂": [t: "lefelé szigony jobbra"] # 0x21c2 (en: 'down harpoon right', DeepL translation) + - "⇃": [t: "lefelé mutató szigony balra"] # 0x21c3 (en: 'down harpoon left', DeepL translation) + - "⇄": [t: "jobb nyíl bal nyíl fölött"] # 0x21c4 (en: 'right arrow over left arrow', DeepL translation) + - "⇅": [t: "felfelé nyíl balra a lefelé nyílból"] # 0x21c5 (en: 'up arrow left of down arrow', DeepL translation) + - "⇆": [t: "bal nyíl jobb nyíl felett"] # 0x21c6 (en: 'left arrow over right arrow', DeepL translation) + - "⇇": [t: "bal párosított nyilak"] # 0x21c7 (en: 'left paired arrows', DeepL translation) + - "⇈": [t: "felfelé párosított nyilak"] # 0x21c8 (en: 'up paired arrows', DeepL translation) + - "⇉": [t: "jobb oldali párosított nyilak"] # 0x21c9 (en: 'right paired arrows', DeepL translation) + - "⇊": [t: "lefelé párosított nyilak"] # 0x21ca (en: 'down paired arrows', DeepL translation) + - "⇋": [t: "bal szigony a jobb szigony felett"] # 0x21cb (en: 'left harpoon over right harpoon', DeepL translation) + - "⇌": [t: "jobb szigony a bal szigony felett"] # 0x21cc (en: 'right harpoon over left harpoon', DeepL translation) + - "⇍": [t: "bal kettős nyíl függőleges vonallal"] # 0x21cd (en: 'left double arrow with stroke', DeepL translation) + - "⇎": [t: "balra jobbra dupla nyíl függőleges vonallal"] # 0x21ce (en: 'left right double arrow with stroke', DeepL translation) + - "⇏": [t: "jobb oldali kettős nyíl vonallal"] # 0x21cf (en: 'right double arrow with stroke', DeepL translation) + - "⇐": [t: "bal dupla nyíl"] # 0x21d0 (en: 'left double arrow', DeepL translation) + - "⇑": [t: "felfelé mutató kettős nyíl"] # 0x21d1 (en: 'up double arrow', DeepL translation) + - "⇒": [t: "implikálja"] # 0x21d2 (en: 'implies', DeepL translation) + - "⇓": [t: "lefelé dupla nyíl"] # 0x21d3 (en: 'down double arrow', DeepL translation) + - "⇔": [t: "ha és csak ha"] # 0x21d4 (en: 'if and only if', DeepL translation) + - "⇕": [t: "fel le dupla nyíl"] # 0x21d5 (en: 'up down double arrow', DeepL translation) + - "⇖": [t: "északnyugat kettős nyíl"] # 0x21d6 (en: 'north west double arrow', DeepL translation) + - "⇗": [t: "északkelet kettős nyíl"] # 0x21d7 (en: 'north east double arrow', DeepL translation) + - "⇘": [t: "délkeleti kettős nyíl"] # 0x21d8 (en: 'south east double arrow', DeepL translation) + - "⇙": [t: "délnyugati kettős nyíl"] # 0x21d9 (en: 'south west double arrow', DeepL translation) + - "⇚": [t: "bal hármas nyíl"] # 0x21da (en: 'left triple arrow', DeepL translation) + - "⇛": [t: "jobbra mutató hármas nyíl"] # 0x21db (en: 'right triple arrow', DeepL translation) + - "⇜": [t: "bal szögletes nyíl"] # 0x21dc (en: 'left squiggle arrow', DeepL translation) + - "⇝": [t: "jobb oldali szögletes nyíl"] # 0x21dd (en: 'right squiggle arrow', DeepL translation) + - "⇞": [t: "felfelé mutató nyíl dupla vonallal"] # 0x21de (en: 'up arrow with double stroke', DeepL translation) + - "⇟": [t: "lefelé nyíl dupla vonallal"] # 0x21df (en: 'down arrow with double stroke', DeepL translation) + - "⇠": [t: "balra szaggatott nyíl"] # 0x21e0 (en: 'left dashed arrow', DeepL translation) + - "⇡": [t: "felfelé szaggatott nyíl"] # 0x21e1 (en: 'up dashed arrow', DeepL translation) + - "⇢": [t: "jobbra szaggatott nyíl"] # 0x21e2 (en: 'right dashed arrow', DeepL translation) + - "⇣": [t: "lefelé szaggatott nyíl"] # 0x21e3 (en: 'down dashed arrow', DeepL translation) + - "⇤": [t: "balra mutató nyíl a sávhoz"] # 0x21e4 (en: 'left arrow to bar', DeepL translation) + - "⇥": [t: "jobbra nyíl a sávra"] # 0x21e5 (en: 'right arrow to bar', DeepL translation) + - "⇦": [t: "bal fehér nyíl"] # 0x21e6 (en: 'left white arrow', DeepL translation) + - "⇧": [t: "felfelé mutató fehér nyíl"] # 0x21e7 (en: 'up white arrow', DeepL translation) + - "⇨": [t: "jobb oldali fehér nyíl"] # 0x21e8 (en: 'right white arrow', DeepL translation) + - "⇩": [t: "lefelé mutató fehér nyíl"] # 0x21e9 (en: 'down white arrow', DeepL translation) + - "⇪": [t: "felfelé fehér nyíl a sávból"] # 0x21ea (en: 'up white arrow from bar', DeepL translation) + - "⇫": [t: "felfelé mutató fehér nyíl a talapzaton"] # 0x21eb (en: 'up white arrow on pedestal', DeepL translation) + - "⇬": [t: "felfelé mutató fehér nyíl talapzaton vízszintes sávval"] # 0x21ec (en: 'up white arrow on pedestal with horizontal bar', DeepL translation) + - "⇭": [t: "felfelé mutató fehér nyíl talapzaton függőleges sávval"] # 0x21ed (en: 'up white arrow on pedestal with vertical bar', DeepL translation) + - "⇮": [t: "felfelé fehér kettős nyíl"] # 0x21ee (en: 'up white double arrow', DeepL translation) + - "⇯": [t: "felfelé fehér kettős nyíl talapzaton"] # 0x21ef (en: 'up white double arrow on pedestal', DeepL translation) + - "⇰": [t: "jobb oldali fehér nyíl a falról"] # 0x21f0 (en: 'right white arrow from wall', DeepL translation) + - "⇱": [t: "északnyugati nyíl a sarokba"] # 0x21f1 (en: 'north west arrow to corner', DeepL translation) + - "⇲": [t: "délkeleti nyíl a sarokba"] # 0x21f2 (en: 'south east arrow to corner', DeepL translation) + - "⇳": [t: "fel lefelé fehér nyíl"] # 0x21f3 (en: 'up down white arrow', DeepL translation) + - "⇴": [t: "jobbra mutató nyíl kis körrel"] # 0x21f4 (en: 'right arrow with small circle', DeepL translation) + - "⇵": [t: "lefelé mutató nyíl balra a felfelé mutató nyílból"] # 0x21f5 (en: 'down arrow left of up arrow', DeepL translation) + - "⇶": [t: "három jobbra mutató nyíl"] # 0x21f6 (en: 'three right arrows', DeepL translation) + - "⇷": [t: "bal nyíl függőleges vonallal"] # 0x21f7 (en: 'left arrow with vertical stroke', DeepL translation) + - "⇸": [t: "jobb oldali nyíl függőleges vonallal"] # 0x21f8 (en: 'right arrow with vertical stroke', DeepL translation) + - "⇹": [t: "balra jobbra nyíl függőleges vonallal"] # 0x21f9 (en: 'left right arrow with vertical stroke', DeepL translation) + - "⇺": [t: "bal nyíl dupla függőleges vonallal"] # 0x21fa (en: 'left arrow with double vertical stroke', DeepL translation) + - "⇻": [t: "jobb nyíl dupla függőleges vonallal"] # 0x21fb (en: 'right arrow with double vertical stroke', DeepL translation) + - "⇼": [t: "bal jobb nyíl dupla függőleges vonallal"] # 0x21fc (en: 'left right arrow with double vertical stroke', DeepL translation) + - "⇽": [t: "bal nyitott fejű nyíl"] # 0x21fd (en: 'left open headed arrow', DeepL translation) + - "⇾": [t: "jobbra nyitott fejű nyíl"] # 0x21fe (en: 'right open headed arrow', DeepL translation) + - "⇿": [t: "bal jobb nyitott fejű nyílvessző"] # 0x21ff (en: 'left right open headed arrow', DeepL translation) + - "∀": [t: "mindenki számára"] # 0x2200 (en: 'for all', DeepL translation) + - "∁": # 0x2201 + - test: + if: "$Verbosity!='Terse'" + then: [t: "a"] # (en: 'the', DeepL translation) + - t: "kiegészítése" # (en: 'complement of', DeepL translation) + - "∂": # 0x2202 - test: if: "$Verbosity='Terse'" - then: [t: "partial"] - else: [t: "partial derivative"] - - "∃": [t: "there exists"] # 0x2203 - - "∄": [t: "there does not exist"] # 0x2204 - - "∅": [t: "empty set"] # 0x2205 - - "∆": # 0x2206 + then: [t: "részleges"] # (en: 'partial', DeepL translation) + else: [t: "részleges derivált"] # (en: 'partial derivative', DeepL translation) + - "∃": [t: "létezik"] # 0x2203 (en: 'there exists', DeepL translation) + - "∄": [t: "nem létezik"] # 0x2204 (en: 'there does not exist', DeepL translation) + - "∅": [t: "üres készlet"] # 0x2205 (en: 'empty set', DeepL translation) + - "∆": # 0x2206 - test: if: "following-sibling::*" then_test: if: "$Verbosity!='Terse'" - then: [t: "the LahPlahsian of"] # "LahPlahsian" sounds better than "laplacian" in speech engines tested - else: [t: "LahPlahsian"] - else: [t: "LahPlahsian"] + then: [t: "a lahplahsian of"] # "LahPlahsian" sounds better than "laplacian" in speech engines tested (en: 'the LahPlahsian of', DeepL translation) + else: [t: "lahplahsian"] # (en: 'LahPlahsian', DeepL translation) + else: [t: "lahplahsian"] # (en: 'LahPlahsian', DeepL translation) - - "∇": [t: "nahblah"] # 0x2207 - - "∉": # 0x2209 + - "∇": [t: "nahblah"] # 0x2207 (DeepL translation) + - "∉": # 0x2209 # rule is identical to 0x2208 - test: if: "$SpeechStyle != 'ClearSpeak'" - then: [t: "is not an element of"] + then: [t: "nem eleme"] # (en: 'is not an element of', DeepL 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 + if: "../../self::m:set or ../../../self::m:set" # inside a set then_test: - if: $ClearSpeak_SetMemberSymbol = 'Auto' or $ClearSpeak_SetMemberSymbol = 'In' - then: [t: "not in"] + then: [t: "not in"] # (DeepL translation) - else_if: $ClearSpeak_SetMemberSymbol = 'Member' - then: [t: "not member of"] + then: [t: "nem tagja"] # (en: 'not member of', DeepL translation) - else_if: $ClearSpeak_SetMemberSymbol = 'Element' - then: [t: "not element of"] - - else: [t: "not belonging to"] # $ClearSpeak_SetMemberSymbol = 'Belongs' + then: [t: "nem eleme"] # (en: 'not element of', DeepL translation) + - else: [t: "nem tartozik hozzá"] # $ClearSpeak_SetMemberSymbol = 'Belongs' (en: 'not belonging to', DeepL translation) else_test: - if: $ClearSpeak_SetMemberSymbol = 'Auto' or $ClearSpeak_SetMemberSymbol = 'Member' - then: [t: "is not a member of"] + then: [t: "nem tagja"] # (en: 'is not a member of', DeepL translation) - else_if: $ClearSpeak_SetMemberSymbol = 'Element' - then: [t: "is not an element of"] + then: [t: "nem eleme"] # (en: 'is not an element of', DeepL translation) - else_if: $ClearSpeak_SetMemberSymbol = 'In' - then: [t: "is not in"] - - else: [t: "does not belong to"] # $ClearSpeak_SetMemberSymbol = 'Belongs' - - "∊": # 0x220a + then: [t: "nincs benne"] # (en: 'is not in', DeepL translation) + - else: [t: "nem tartozik hozzá"] # $ClearSpeak_SetMemberSymbol = 'Belongs' (en: 'does not belong to', DeepL translation) + - "∊": # 0x220a - test: if: "$SpeechStyle != 'ClearSpeak'" then: - test: - if: "$Verbosity!='Terse' and not(parent::m:set)" # "the set x is an element of ..." sounds bad - then: [t: "is"] - - t: "an element of" + if: "$Verbosity!='Terse' and not(parent::m:set)" # "the set x is an element of ..." sounds bad + then: [t: "az"] # (en: 'is', DeepL translation) + - t: "egy elem" # (en: 'an element of', DeepL 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 + if: "../../self::m:set or ../../../self::m:set" # inside a set then_test: - if: $ClearSpeak_SetMemberSymbol = 'Auto' or $ClearSpeak_SetMemberSymbol = 'In' - then: [t: "in"] + then: [t: "in"] # (DeepL translation) - else_if: $ClearSpeak_SetMemberSymbol = 'Member' - then: [t: "member of"] + then: [t: "tagja"] # (en: 'member of', DeepL translation) - else_if: $ClearSpeak_SetMemberSymbol = 'Element' - then: [t: "element of"] - - else: [t: "belonging to"] # $ClearSpeak_SetMemberSymbol = 'Belongs' + then: [t: "eleme"] # (en: 'element of', DeepL translation) + - else: [t: "hozzátartozó"] # $ClearSpeak_SetMemberSymbol = 'Belongs' (en: 'belonging to', DeepL translation) else_test: - if: $ClearSpeak_SetMemberSymbol = 'Auto' or $ClearSpeak_SetMemberSymbol = 'Member' - then: [t: "is a member of"] + then: [t: "tagja a"] # (en: 'is a member of', DeepL translation) - else_if: $ClearSpeak_SetMemberSymbol = 'Element' - then: [t: "is an element of"] + then: [t: "egy elem a"] # (en: 'is an element of', DeepL translation) - else_if: $ClearSpeak_SetMemberSymbol = 'In' - then: [t: "is in"] - - else: [t: "belongs to"] # $ClearSpeak_SetMemberSymbol = 'Belongs' - - "∋": [t: "contains the member"] # 0x220b - - "∌": [t: "does not contain the member"] # 0x220c - - "∍": [t: "contains the member"] # 0x220d - - "∎": [t: "end of proof"] # 0x220e - - "∏": [t: "product"] # 0x220f - - "∐": [t: "coproduct"] # 0x2210 - - "∑": [t: "sum"] # 0x2211 - - "−": [t: "minus"] # 0x2212 - - "∓": [t: "minus or plus"] # 0x2213 - - "∔": [t: "dot plus"] # 0x2214 - - "∕": [t: "divided by"] # 0x2215 - - "∖": [t: "set minus"] # 0x2216 - - "∗": [t: "times"] # 0x2217 - - "∘": [t: "composed with"] # 0x2218 - - "∙": # 0x2219 + then: [t: "van benne"] # (en: 'is in', DeepL translation) + - else: [t: "tartozik"] # $ClearSpeak_SetMemberSymbol = 'Belongs' (en: 'belongs to', DeepL translation) + - "∋": [t: "tartalmazza a tagot"] # 0x220b (en: 'contains the member', DeepL translation) + - "∌": [t: "nem tartalmazza a tagot"] # 0x220c (en: 'does not contain the member', DeepL translation) + - "∍": [t: "tartalmazza a tagot"] # 0x220d (en: 'contains the member', DeepL translation) + - "∎": [t: "a bizonyítás vége"] # 0x220e (en: 'end of proof', DeepL translation) + - "∏": [t: "termék"] # 0x220f (en: 'product', DeepL translation) + - "∐": [t: "koprodukció"] # 0x2210 (en: 'coproduct', DeepL translation) + - "∑": [t: "sum"] # 0x2211 (DeepL translation) + - "−": [t: "mínusz"] # 0x2212 (en: 'minus', DeepL translation) + - "∓": [t: "mínusz vagy plusz"] # 0x2213 (en: 'minus or plus', DeepL translation) + - "∔": [t: "pont plusz"] # 0x2214 (en: 'dot plus', DeepL translation) + - "∕": [t: "osztva"] # 0x2215 (en: 'divided by', DeepL translation) + - "∖": [t: "beállított mínusz"] # 0x2216 (en: 'set minus', DeepL translation) + - "∗": [t: "idők"] # 0x2217 (en: 'times', DeepL translation) + - "∘": [t: "összeállítva"] # 0x2218 (en: 'composed with', DeepL translation) + - "∙": # 0x2219 - test: if: "@data-chem-formula-op" - then: [t: "dot"] - else: [t: "times"] + then: [t: "pont"] # (en: 'dot', DeepL translation) + else: [t: "idők"] # (en: 'times', DeepL translation) - - "√": # 0x221a + - "√": # 0x221a - test: if: "$Verbosity!='Terse'" - then: [t: "the"] - - t: "square root of" - - "∛": # 0x221b + then: [t: "a"] # (en: 'the', DeepL translation) + - t: "négyzetgyök" # (en: 'square root of', DeepL translation) + - "∛": # 0x221b - test: if: "$Verbosity!='Terse'" - then: [t: "the"] - - t: "cube root of" - - "∜": # 0x221c + then: [t: "a"] # (en: 'the', DeepL translation) + - t: "kockagyökér" # (en: 'cube root of', DeepL translation) + - "∜": # 0x221c - test: if: "$Verbosity!='Terse'" - then: [t: "the"] - - t: "fourth root of" - - "∝": # 0x221d + then: [t: "a"] # (en: 'the', DeepL translation) + - t: "negyedik gyöke" # (en: 'fourth root of', DeepL translation) + - "∝": # 0x221d - test: if: "$Verbosity!='Terse'" - then: [t: "is"] - - t: "proportional to" - - "∞": [t: "infinity"] # 0x221e - - "∟": [t: "right angle"] # 0x221f - - "∠": [t: "angle"] # 0x2220 - - "∡": [t: "measured angle"] # 0x2221 - - "∢": [t: "spherical angle"] # 0x2222 - - "∣": [t: "divides"] # 0x2223 - - "∤": [t: "does not divide"] # 0x2224 - - "∧": [t: "and"] # 0x2227 - - "∨": [t: "or"] # 0x2228 - - "∩": [t: "intersection"] # 0x2229 - - "∪": [t: "union"] # 0x222a - - "∫": [t: "integral"] # 0x222b - - "∬": [t: "double integral"] # 0x222c - - "∭": [t: "triple integral"] # 0x222d - - "∮": [t: "contour integral"] # 0x222e - - "∯": [t: "surface integral"] # 0x222f - - "∰": [t: "volume integral"] # 0x2230 - - "∱": [t: "clockwise integral"] # 0x2231 - - "∲": [t: "clockwise contour integral"] # 0x2232 - - "∳": [t: "anticlockwise contour integral"] # 0x2233 - - "∴": [t: "therefore"] # 0x2234 - - "∵": [t: "because"] # 0x2235 - - "∶": # 0x2236 + then: [t: "az"] # (en: 'is', DeepL translation) + - t: "arányos" # (en: 'proportional to', DeepL translation) + - "∞": [t: "végtelen"] # 0x221e (en: 'infinity', DeepL translation) + - "∟": [t: "derékszög"] # 0x221f (en: 'right angle', DeepL translation) + - "∠": [t: "szög"] # 0x2220 (en: 'angle', DeepL translation) + - "∡": [t: "mért szög"] # 0x2221 (en: 'measured angle', DeepL translation) + - "∢": [t: "gömbszög"] # 0x2222 (en: 'spherical angle', DeepL translation) + - "∣": [t: "osztja"] # 0x2223 (en: 'divides', DeepL translation) + - "∤": [t: "nem osztja"] # 0x2224 (en: 'does not divide', DeepL translation) + - "∧": [t: "és"] # 0x2227 (en: 'and', DeepL translation) + - "∨": [t: "vagy"] # 0x2228 (en: 'or', DeepL translation) + - "∩": [t: "kereszteződés"] # 0x2229 (en: 'intersection', DeepL translation) + - "∪": [t: "unió"] # 0x222a (en: 'union', DeepL translation) + - "∫": [t: "integrált"] # 0x222b (en: 'integral', DeepL translation) + - "∬": [t: "kettős integrál"] # 0x222c (en: 'double integral', DeepL translation) + - "∭": [t: "hármas integrál"] # 0x222d (en: 'triple integral', DeepL translation) + - "∮": [t: "kontúrintegrál"] # 0x222e (en: 'contour integral', DeepL translation) + - "∯": [t: "felszíni integrál"] # 0x222f (en: 'surface integral', DeepL translation) + - "∰": [t: "térfogati integrál"] # 0x2230 (en: 'volume integral', DeepL translation) + - "∱": [t: "az óramutató járásával megegyezően integrált"] # 0x2231 (en: 'clockwise integral', DeepL translation) + - "∲": [t: "az óramutató járásával megegyező irányú kontúrintegrál"] # 0x2232 (en: 'clockwise contour integral', DeepL translation) + - "∳": [t: "az óramutató járásával ellentétes irányú kontúrintegrál"] # 0x2233 (en: 'anticlockwise contour integral', DeepL translation) + - "∴": [t: "ezért"] # 0x2234 (en: 'therefore', DeepL translation) + - "∵": [t: "mert"] # 0x2235 (en: 'because', DeepL translation) + - "∶": # 0x2236 - test: if: "$Verbosity!='Terse'" - then: [t: "is"] - - t: "to" - - "∷": [t: "as"] # 0x2237 - - "∸": [t: "dot minus"] # 0x2238 - - "∹": [t: "has excess compared to"] # 0x2239 - - "∺": # 0x223a + then: [t: "az"] # (en: 'is', DeepL translation) + - t: "to" # (DeepL translation) + - "∷": [t: "mint"] # 0x2237 (en: 'as', DeepL translation) + - "∸": [t: "pont mínusz"] # 0x2238 (en: 'dot minus', DeepL translation) + - "∹": [t: "többlet van a többlethez képest"] # 0x2239 (en: 'has excess compared to', DeepL translation) + - "∺": # 0x223a - test: if: "$Verbosity!='Terse'" - then: [t: "is"] - - t: "geometrically proportional to" - - "∻": # 0x223b + then: [t: "az"] # (en: 'is', DeepL translation) + - t: "geometriailag arányos" # (en: 'geometrically proportional to', DeepL translation) + - "∻": # 0x223b - test: if: "$Verbosity!='Terse'" - then: [t: "is"] - - t: "homothetic to" - - "∼": [t: "varies with"] # 0x223c - - "∽": [t: "reversed tilde"] # 0x223d - - "∾": # 0x223e + then: [t: "az"] # (en: 'is', DeepL translation) + - t: "homotetikus a" # (en: 'homothetic to', DeepL translation) + - "∼": [t: "változik"] # 0x223c (en: 'varies with', DeepL translation) + - "∽": [t: "fordított tilde"] # 0x223d (en: 'reversed tilde', DeepL translation) + - "∾": # 0x223e - test: if: "$Verbosity!='Terse'" - then: [t: "is"] - - t: "most positive" - - "∿": [t: "sine wave"] # 0x223f - - "≀": [t: "wreath product"] # 0x2240 - - "≁": [t: "not tilde"] # 0x2241 - - "≂": [t: "minus tilde"] # 0x2242 - - "≃": # 0x2243 + then: [t: "az"] # (en: 'is', DeepL translation) + - t: "legpozitívabb" # (en: 'most positive', DeepL translation) + - "∿": [t: "szinuszhullám"] # 0x223f (en: 'sine wave', DeepL translation) + - "≀": [t: "koszorú termék"] # 0x2240 (en: 'wreath product', DeepL translation) + - "≁": [t: "nem tilde"] # 0x2241 (en: 'not tilde', DeepL translation) + - "≂": [t: "mínusz tilde"] # 0x2242 (en: 'minus tilde', DeepL translation) + - "≃": # 0x2243 - test: if: "$Verbosity!='Terse'" - then: [t: "is"] - - t: "asymptotically equal to" - - "≄": # 0x2244 + then: [t: "az"] # (en: 'is', DeepL translation) + - t: "aszimptotikusan egyenlő" # (en: 'asymptotically equal to', DeepL translation) + - "≄": # 0x2244 - test: if: "$Verbosity!='Terse'" - then: [t: "is"] - - t: "not asymptotically equal to" - - "≅": # 0x2245 + then: [t: "az"] # (en: 'is', DeepL translation) + - t: "nem aszimptotikusan egyenlő" # (en: 'not asymptotically equal to', DeepL translation) + - "≅": # 0x2245 - test: if: "$Verbosity!='Terse'" - then: [t: "is"] - - t: "congruent to" - - "≆": # 0x2246 + then: [t: "az"] # (en: 'is', DeepL translation) + - t: "kongruens a" # (en: 'congruent to', DeepL translation) + - "≆": # 0x2246 - test: if: "$Verbosity!='Terse'" - then: [t: "is"] - - t: "approximately but not actually equal to" - - "≇": # 0x2247 + then: [t: "az"] # (en: 'is', DeepL translation) + - t: "megközelítőleg, de valójában nem egyenlő" # (en: 'approximately but not actually equal to', DeepL translation) + - "≇": # 0x2247 - test: if: "$Verbosity!='Terse'" - then: [t: "is"] - - t: "not congruent to" - - "≈": # 0x2248 + then: [t: "az"] # (en: 'is', DeepL translation) + - t: "nem kongruens" # (en: 'not congruent to', DeepL translation) + - "≈": # 0x2248 - test: if: "$Verbosity!='Terse'" - then: [t: "is"] - - t: "approximately equal to" - - "≉": # 0x2249 + then: [t: "az"] # (en: 'is', DeepL translation) + - t: "megközelítőleg egyenlő" # (en: 'approximately equal to', DeepL translation) + - "≉": # 0x2249 - test: if: "$Verbosity!='Terse'" - then: [t: "is"] - - t: "not approximately equal to" - - "≊": # 0x224a + then: [t: "az"] # (en: 'is', DeepL translation) + - t: "nem megközelítőleg egyenlő" # (en: 'not approximately equal to', DeepL translation) + - "≊": # 0x224a - test: if: "$Verbosity!='Terse'" - then: [t: "is"] - - t: "approximately equal or equal to" - - "≋": [t: "triple tilde"] # 0x224b - - "≌": [t: "are all equal to"] # 0x224c - - "≍": # 0x224d + then: [t: "az"] # (en: 'is', DeepL translation) + - t: "megközelítőleg egyenlő vagy egyenlő" # (en: 'approximately equal or equal to', DeepL translation) + - "≋": [t: "hármas tilde"] # 0x224b (en: 'triple tilde', DeepL translation) + - "≌": [t: "mind egyenlőek"] # 0x224c (en: 'are all equal to', DeepL translation) + - "≍": # 0x224d - test: if: "$Verbosity!='Terse'" - then: [t: "is"] - - t: "equivalent to" - - "≎": # 0x224e + then: [t: "az"] # (en: 'is', DeepL translation) + - t: "egyenértékű" # (en: 'equivalent to', DeepL translation) + - "≎": # 0x224e - test: if: "$Verbosity!='Terse'" - then: [t: "is"] - - t: "geometrically equivalent to" - - "≏": # 0x224f + then: [t: "az"] # (en: 'is', DeepL translation) + - t: "geometriailag egyenértékű" # (en: 'geometrically equivalent to', DeepL translation) + - "≏": # 0x224f - test: if: "$Verbosity!='Terse'" - then: [t: "the"] - - t: "difference between" - - "≐": [t: "approaches the limit"] # 0x2250 - - "≑": # 0x2251 + then: [t: "a"] # (en: 'the', DeepL translation) + - t: "különbség" # (en: 'difference between', DeepL translation) + - "≐": [t: "közelít a határhoz"] # 0x2250 (en: 'approaches the limit', DeepL translation) + - "≑": # 0x2251 - test: if: "$Verbosity!='Terse'" - then: [t: "is"] - - t: "geometrically equal to" - - "≒": # 0x2252 + then: [t: "az"] # (en: 'is', DeepL translation) + - t: "geometriailag egyenlő" # (en: 'geometrically equal to', DeepL translation) + - "≒": # 0x2252 - test: if: "$Verbosity!='Terse'" - then: [t: "is"] - - t: "approximately equal to or the image of" - - "≓": # 0x2253 + then: [t: "az"] # (en: 'is', DeepL translation) + - t: "megközelítőleg egyenlő vagy a képe" # (en: 'approximately equal to or the image of', DeepL translation) + - "≓": # 0x2253 - test: if: "$Verbosity!='Terse'" - then: [t: "is the"] - - t: "image of or approximately equal to" - - "≔": [t: "colon equals"] # 0x2254 - - "≕": [t: "equals colon"] # 0x2255 - - "≖": [t: "ring in equal to"] # 0x2256 - - "≗": # 0x2257 + then: [t: "a"] # (en: 'is the', DeepL translation) + - t: "képe vagy megközelítőleg egyenlő" # (en: 'image of or approximately equal to', DeepL translation) + - "≔": [t: "kettőspont egyenlő"] # 0x2254 (en: 'colon equals', DeepL translation) + - "≕": [t: "egyenlőségjel kettőspont"] # 0x2255 (en: 'equals colon', DeepL translation) + - "≖": [t: "gyűrűvel egyenlő"] # 0x2256 (en: 'ring in equal to', DeepL translation) + - "≗": # 0x2257 - test: if: "$Verbosity!='Terse'" - then: [t: "is"] - - t: "approximately equal to" - - "≘": [t: "corresponds to"] # 0x2258 - - "≙": [t: "estimates"] # 0x2259 - - "≚": # 0x225a + then: [t: "az"] # (en: 'is', DeepL translation) + - t: "megközelítőleg egyenlő" # (en: 'approximately equal to', DeepL translation) + - "≘": [t: "megfelel"] # 0x2258 (en: 'corresponds to', DeepL translation) + - "≙": [t: "becslések"] # 0x2259 (en: 'estimates', DeepL translation) + - "≚": # 0x225a - test: if: "$Verbosity!='Terse'" - then: [t: "is"] - - t: "equiangular to" - - "≛": [t: "star equals"] # 0x225b - - "≜": [t: "delta equals"] # 0x225c - - "≝": [t: "is defined to be"] # 0x225d - - "≞": # 0x225e + then: [t: "az"] # (en: 'is', DeepL translation) + - t: "egyenlőségjel" # (en: 'equiangular to', DeepL translation) + - "≛": [t: "csillag egyenlő"] # 0x225b (en: 'star equals', DeepL translation) + - "≜": [t: "delta egyenlő"] # 0x225c (en: 'delta equals', DeepL translation) + - "≝": [t: "a következőképpen van definiálva"] # 0x225d (en: 'is defined to be', DeepL translation) + - "≞": # 0x225e - test: if: "$Verbosity!='Terse'" - then: [t: "is"] - - t: "measured by" - - "≟": [t: "has an unknown relationship with"] # 0x225f - - "≠": # 0x2260 + then: [t: "az"] # (en: 'is', DeepL translation) + - t: "mért" # (en: 'measured by', DeepL translation) + - "≟": [t: "ismeretlen kapcsolatban áll"] # 0x225f (en: 'has an unknown relationship with', DeepL translation) + - "≠": # 0x2260 - test: if: "$Verbosity!='Terse'" - then: [t: "is"] - - t: "not equal to" - - "≡": # 0x2261 + then: [t: "az"] # (en: 'is', DeepL translation) + - t: "nem egyenlő" # (en: 'not equal to', DeepL translation) + - "≡": # 0x2261 - test: if: "$Verbosity!='Terse'" - then: [t: "is"] - - t: "identical to" - - "≢": # 0x2262 + then: [t: "az"] # (en: 'is', DeepL translation) + - t: "azonos" # (en: 'identical to', DeepL translation) + - "≢": # 0x2262 - test: if: "$Verbosity!='Terse'" - then: [t: "is"] - - t: "not identical to" - - "≣": # 0x2263 + then: [t: "az"] # (en: 'is', DeepL translation) + - t: "nem azonos" # (en: 'not identical to', DeepL translation) + - "≣": # 0x2263 - test: if: "$Verbosity!='Terse'" - then: [t: "is"] - - t: "strictly equivalent to" - - "≦": [t: "less than over equal to"] # 0x2266 - - "≧": [t: "greater than over equal to"] # 0x2267 - - "≨": # 0x2268 + then: [t: "az"] # (en: 'is', DeepL translation) + - t: "szigorúan egyenértékű" # (en: 'strictly equivalent to', DeepL translation) + - "≦": [t: "kisebb mint egyenlő felett egyenlő"] # 0x2266 (en: 'less than over equal to', DeepL translation) + - "≧": [t: "nagyobb, mint egyenlő"] # 0x2267 (en: 'greater than over equal to', DeepL translation) + - "≨": # 0x2268 - test: if: "$Verbosity!='Terse'" - then: [t: "is"] - - t: "less than but not equal to" - - "≩": # 0x2269 + then: [t: "az"] # (en: 'is', DeepL translation) + - t: "kisebb, mint, de nem egyenlő" # (en: 'less than but not equal to', DeepL translation) + - "≩": # 0x2269 - test: if: "$Verbosity!='Terse'" - then: [t: "is"] - - t: "greater than but not equal to" - - "≪": # 0x226a + then: [t: "az"] # (en: 'is', DeepL translation) + - t: "nagyobb, mint, de nem egyenlő" # (en: 'greater than but not equal to', DeepL translation) + - "≪": # 0x226a - test: if: "$Verbosity!='Terse'" - then: [t: "is"] - - t: "much less than" - - "≫": # 0x226b + then: [t: "az"] # (en: 'is', DeepL translation) + - t: "sokkal kisebb, mint" # (en: 'much less than', DeepL translation) + - "≫": # 0x226b - test: if: "$Verbosity!='Terse'" - then: [t: "is"] - - t: "much greater than" - - "≬": # 0x226c + then: [t: "az"] # (en: 'is', DeepL translation) + - t: "sokkal nagyobb, mint" # (en: 'much greater than', DeepL translation) + - "≬": # 0x226c - test: if: "$Verbosity!='Terse'" - then: [t: "is"] - - t: "between" - - "≭": # 0x226d + then: [t: "az"] # (en: 'is', DeepL translation) + - t: "között" # (en: 'between', DeepL translation) + - "≭": # 0x226d - test: if: "$Verbosity!='Terse'" - then: [t: "is"] - - t: "not equivalent to" - - "≮": # 0x226e + then: [t: "az"] # (en: 'is', DeepL translation) + - t: "nem egyenértékű" # (en: 'not equivalent to', DeepL translation) + - "≮": # 0x226e - test: if: "$Verbosity!='Terse'" - then: [t: "is"] - - t: "not less than" - - "≯": # 0x226f + then: [t: "az"] # (en: 'is', DeepL translation) + - t: "nem kisebb, mint" # (en: 'not less than', DeepL translation) + - "≯": # 0x226f - test: if: "$Verbosity!='Terse'" - then: [t: "is"] - - t: "not greater than" - - "≰": # 0x2270 + then: [t: "az"] # (en: 'is', DeepL translation) + - t: "nem nagyobb, mint" # (en: 'not greater than', DeepL translation) + - "≰": # 0x2270 - test: if: "$Verbosity!='Terse'" - then: [t: "is"] - - t: "neither less than nor equal to" - - "≱": # 0x2271 + then: [t: "az"] # (en: 'is', DeepL translation) + - t: "sem kisebb, mint vagy egyenlő" # (en: 'neither less than nor equal to', DeepL translation) + - "≱": # 0x2271 - test: if: "$Verbosity!='Terse'" - then: [t: "is"] - - t: "neither greater than nor equal to" - - "≲": # 0x2272 + then: [t: "az"] # (en: 'is', DeepL translation) + - t: "sem nagyobb, sem egyenlő" # (en: 'neither greater than nor equal to', DeepL translation) + - "≲": # 0x2272 - test: if: "$Verbosity!='Terse'" - then: [t: "is"] - - t: "less than or equivalent to" - - "≳": # 0x2273 + then: [t: "az"] # (en: 'is', DeepL translation) + - t: "kevesebb, mint vagy azzal egyenértékű" # (en: 'less than or equivalent to', DeepL translation) + - "≳": # 0x2273 - test: if: "$Verbosity!='Terse'" - then: [t: "is"] - - t: "greater than or equivalent to" - - "≴": # 0x2274 + then: [t: "az"] # (en: 'is', DeepL translation) + - t: "nagyobb vagy egyenlő, mint" # (en: 'greater than or equivalent to', DeepL translation) + - "≴": # 0x2274 - test: if: "$Verbosity!='Terse'" - then: [t: "is"] - - t: "neither less than nor equivalent to" - - "≵": # 0x2275 + then: [t: "az"] # (en: 'is', DeepL translation) + - t: "sem kisebb, sem egyenlő" # (en: 'neither less than nor equivalent to', DeepL translation) + - "≵": # 0x2275 - test: if: "$Verbosity!='Terse'" - then: [t: "is"] - - t: "neither greater than nor equivalent to" - - "≶": # 0x2276 + then: [t: "az"] # (en: 'is', DeepL translation) + - t: "se nem nagyobb, se nem egyenlő" # (en: 'neither greater than nor equivalent to', DeepL translation) + - "≶": # 0x2276 - test: if: "$Verbosity!='Terse'" - then: [t: "is"] - - t: "less than or greater than" - - "≷": # 0x2277 + then: [t: "az"] # (en: 'is', DeepL translation) + - t: "kisebb vagy nagyobb, mint" # (en: 'less than or greater than', DeepL translation) + - "≷": # 0x2277 - test: if: "$Verbosity!='Terse'" - then: [t: "is"] - - t: "greater than or less than" - - "≸": # 0x2278 + then: [t: "az"] # (en: 'is', DeepL translation) + - t: "nagyobb, mint vagy kisebb, mint" # (en: 'greater than or less than', DeepL translation) + - "≸": # 0x2278 - test: if: "$Verbosity!='Terse'" - then: [t: "is"] - - t: "neither less than nor greater than" - - "≹": # 0x2279 + then: [t: "az"] # (en: 'is', DeepL translation) + - t: "sem kisebb, sem nagyobb, mint" # (en: 'neither less than nor greater than', DeepL translation) + - "≹": # 0x2279 - test: if: "$Verbosity!='Terse'" - then: [t: "is"] - - t: "neither greater than nor less than" - - "≺": [t: "precedes"] # 0x227a - - "≻": [t: "succeeds"] # 0x227b - - "≼": [t: "precedes or is equal to"] # 0x227c - - "≽": [t: "succeeds or is equal to"] # 0x227d - - "≾": [t: "precedes or is equivalent to"] # 0x227e - - "≿": [t: "succeeds or is equivalent to"] # 0x227f - - "⊀": [t: "does not precede"] # 0x2280 - - "⊁": [t: "does not succeed"] # 0x2281 - - "⊂": # 0x2282 + then: [t: "az"] # (en: 'is', DeepL translation) + - t: "se nem nagyobb, se nem kisebb" # (en: 'neither greater than nor less than', DeepL translation) + - "≺": [t: "megelőzi"] # 0x227a (en: 'precedes', DeepL translation) + - "≻": [t: "sikerül"] # 0x227b (en: 'succeeds', DeepL translation) + - "≼": [t: "megelőzi vagy egyenlő"] # 0x227c (en: 'precedes or is equal to', DeepL translation) + - "≽": [t: "sikerül vagy egyenlő"] # 0x227d (en: 'succeeds or is equal to', DeepL translation) + - "≾": [t: "megelőzi vagy egyenértékű"] # 0x227e (en: 'precedes or is equivalent to', DeepL translation) + - "≿": [t: "sikerül vagy egyenértékű"] # 0x227f (en: 'succeeds or is equivalent to', DeepL translation) + - "⊀": [t: "nem előzi meg"] # 0x2280 (en: 'does not precede', DeepL translation) + - "⊁": [t: "nem sikerül"] # 0x2281 (en: 'does not succeed', DeepL translation) + - "⊂": # 0x2282 - test: if: "$Verbosity!='Terse'" - then: [t: "is a"] - - t: "subset of" - - "⊃": # 0x2283 + then: [t: "egy"] # (en: 'is a', DeepL translation) + - t: "részhalmaza" # (en: 'subset of', DeepL translation) + - "⊃": # 0x2283 - test: if: "$Verbosity!='Terse'" - then: [t: "is a"] - - t: "superset of" - - "⊄": # 0x2284 + then: [t: "egy"] # (en: 'is a', DeepL translation) + - t: "szuperhalmaza" # (en: 'superset of', DeepL translation) + - "⊄": # 0x2284 - test: if: "$Verbosity!='Terse'" - then: [t: "is"] - - t: "not a subset of" - - "⊅": # 0x2285 + then: [t: "az"] # (en: 'is', DeepL translation) + - t: "nem részhalmaza" # (en: 'not a subset of', DeepL translation) + - "⊅": # 0x2285 - test: if: "$Verbosity!='Terse'" - then: [t: "is"] - - t: "not a superset of" - - "⊆": # 0x2286 + then: [t: "az"] # (en: 'is', DeepL translation) + - t: "not a superset of" # (DeepL translation) + - "⊆": # 0x2286 - test: if: "$Verbosity!='Terse'" - then: [t: "is a"] - - t: "subset of or equal to" - - "⊇": # 0x2287 + then: [t: "egy"] # (en: 'is a', DeepL translation) + - t: "részhalmaza vagy egyenlő" # (en: 'subset of or equal to', DeepL translation) + - "⊇": # 0x2287 - test: if: "$Verbosity!='Terse'" - then: [t: "is a"] - - t: "superset of or equal to" - - "⊈": # 0x2288 + then: [t: "egy"] # (en: 'is a', DeepL translation) + - t: "szuperhalmaza vagy egyenlő" # (en: 'superset of or equal to', DeepL translation) + - "⊈": # 0x2288 - test: if: "$Verbosity!='Terse'" - then: [t: "is"] - - t: "neither a subset of nor equal to" - - "⊉": # 0x2289 + then: [t: "az"] # (en: 'is', DeepL translation) + - t: "se nem részhalmaza, se nem egyenlő" # (en: 'neither a subset of nor equal to', DeepL translation) + - "⊉": # 0x2289 - test: if: "$Verbosity!='Terse'" - then: [t: "is"] - - t: "neither a superset of nor equal to" - - "⊊": [t: "subset of with not equal to"] # 0x228a - - "⊋": [t: "superset of with not equal to"] # 0x228b - - "⊌": [t: "multiset"] # 0x228c - - "⊍": [t: "multiset multiplication"] # 0x228d - - "⊎": [t: "multiset union"] # 0x228e - - "⊏": [t: "square image of"] # 0x228f - - "⊐": [t: "square original of"] # 0x2290 - - "⊑": [t: "square image of or equal to"] # 0x2291 - - "⊒": [t: "square original of or equal to"] # 0x2292 - - "⊓": [t: "square cap"] # 0x2293 - - "⊔": [t: "square cup"] # 0x2294 - - "⊕": [t: "circled plus"] # 0x2295 - - "⊖": [t: "circled minus"] # 0x2296 - - "⊗": [t: "circled times"] # 0x2297 - - "⊘": [t: "circled slash"] # 0x2298 - - "⊙": [t: "circled dot operator"] # 0x2299 - - "⊚": [t: "circled ring"] # 0x229a - - "⊛": [t: "circled asterisk"] # 0x229b - - "⊜": [t: "circled equals"] # 0x229c - - "⊝": [t: "circled dash"] # 0x229d - - "⊞": [t: "squared plus"] # 0x229e - - "⊟": [t: "squared minus"] # 0x229f - - "⊠": [t: "squared times"] # 0x22a0 - - "⊡": [t: "squared dot operator"] # 0x22a1 - - "⊢": [t: "proves"] # 0x22a2 - - "⊣": [t: "does not yield"] # 0x22a3 - - "⊤": [t: "top"] # 0x22a4 - - "⊥": # 0x22a5 + then: [t: "az"] # (en: 'is', DeepL translation) + - t: "sem nem szuperhalmaza, sem nem egyenlő" # (en: 'neither a superset of nor equal to', DeepL translation) + - "⊊": [t: "részhalmaza a nem egyenlő"] # 0x228a (en: 'subset of with not equal to', DeepL translation) + - "⊋": [t: "superset of with nem egyenlő"] # 0x228b (en: 'superset of with not equal to', DeepL translation) + - "⊌": [t: "multiset"] # 0x228c (DeepL translation) + - "⊍": [t: "multiset szorzás"] # 0x228d (en: 'multiset multiplication', DeepL translation) + - "⊎": [t: "multiset unió"] # 0x228e (en: 'multiset union', DeepL translation) + - "⊏": [t: "négyzet képe"] # 0x228f (en: 'square image of', DeepL translation) + - "⊐": [t: "négyzet eredeti"] # 0x2290 (en: 'square original of', DeepL translation) + - "⊑": [t: "négyzet képe vagy azzal egyenlő"] # 0x2291 (en: 'square image of or equal to', DeepL translation) + - "⊒": [t: "négyzet eredeti vagy egyenlő"] # 0x2292 (en: 'square original of or equal to', DeepL translation) + - "⊓": [t: "négyzet nagybetűs"] # 0x2293 (en: 'square cap', DeepL translation) + - "⊔": [t: "négyzetes csésze"] # 0x2294 (en: 'square cup', DeepL translation) + - "⊕": [t: "kör alakú plusz"] # 0x2295 (en: 'circled plus', DeepL translation) + - "⊖": [t: "bekarikázott mínusz"] # 0x2296 (en: 'circled minus', DeepL translation) + - "⊗": [t: "bekarikázott idők"] # 0x2297 (en: 'circled times', DeepL translation) + - "⊘": [t: "bekarikázott írásjel"] # 0x2298 (en: 'circled slash', DeepL translation) + - "⊙": [t: "bekarikázott pontoperátor"] # 0x2299 (en: 'circled dot operator', DeepL translation) + - "⊚": [t: "bekarikázott gyűrű"] # 0x229a (en: 'circled ring', DeepL translation) + - "⊛": [t: "bekarikázott csillag"] # 0x229b (en: 'circled asterisk', DeepL translation) + - "⊜": [t: "bekarikázott egyenlőségjel"] # 0x229c (en: 'circled equals', DeepL translation) + - "⊝": [t: "bekarikázott kötőjel"] # 0x229d (en: 'circled dash', DeepL translation) + - "⊞": [t: "négyzet plusz"] # 0x229e (en: 'squared plus', DeepL translation) + - "⊟": [t: "négyzet mínusz"] # 0x229f (en: 'squared minus', DeepL translation) + - "⊠": [t: "négyzetes idő"] # 0x22a0 (en: 'squared times', DeepL translation) + - "⊡": [t: "négyzetes pontoperátor"] # 0x22a1 (en: 'squared dot operator', DeepL translation) + - "⊢": [t: "bizonyítja"] # 0x22a2 (en: 'proves', DeepL translation) + - "⊣": [t: "nem enged"] # 0x22a3 (en: 'does not yield', DeepL translation) + - "⊤": [t: "felső"] # 0x22a4 (en: 'top', DeepL translation) + - "⊥": # 0x22a5 - test: if: "$Verbosity!='Terse'" - then: [t: "is"] - - t: "bottom" - - "⊦": [t: "reduces to"] # 0x22a6 - - "⊧": [t: "models"] # 0x22a7 - - "⊨": # 0x22a8 - - test: - if: "$Verbosity!='Terse'" - then: [t: "is"] - - t: "true" - - "⊩": [t: "forces"] # 0x22a9 - - "⊪": [t: "triple vertical bar right turnstile"] # 0x22aa - - "⊫": [t: "double vertical bar double right turnstile"] # 0x22ab - - "⊬": [t: "does not prove"] # 0x22ac - - "⊭": # 0x22ad - - test: - if: "$Verbosity!='Terse'" - then: [t: "is"] - - t: "not true" - - "⊮": [t: "does not force"] # 0x22ae - - "⊯": [t: "negated double vertical bar double right turnstile"] # 0x22af - - "⊰": [t: "precedes under relation"] # 0x22b0 - - "⊱": [t: "succeeds under relation"] # 0x22b1 - - "⊲": # 0x22b2 - - test: - if: "$Verbosity!='Terse'" - then: [t: "is"] - - t: "a normal subgroup of" - - "⊳": [t: "contains as a normal subgroup"] # 0x22b3 - - "⊴": # 0x22b4 - - test: - if: "$Verbosity!='Terse'" - then: [t: "is"] - - t: "a normal subgroup of or equal to" - - "⊵": [t: "contains as a normal subgroup or equal to"] # 0x22b5 - - "⊶": # 0x22b6 - - test: - if: "$Verbosity!='Terse'" - then: [t: "is"] - - t: "the original of" - - "⊷": # 0x22b7 - - test: - if: "$Verbosity!='Terse'" - then: [t: "is"] - - t: "an image of" - - "⊸": [t: "multimap"] # 0x22b8 - - "⊹": [t: "hermitian conjugate matrix"] # 0x22b9 - - "⊺": [t: "intercalate"] # 0x22ba - - "⊻": [t: "xor"] # 0x22bb - - "⊼": [t: "nand"] # 0x22bc - - "⊽": [t: "nor"] # 0x22bd - - "⊾": [t: "right angle with arc"] # 0x22be - - "⊿": [t: "right triangle"] # 0x22bf - - "⋀": [t: "logical and"] # 0x22c0 - - "⋁": [t: "logical or"] # 0x22c1 - - "⋂": [t: "intersection"] # 0x22c2 - - "⋃": [t: "union"] # 0x22c3 - - "⋄": [t: "diamond operator"] # 0x22c4 - - "⋅": # 0x22c5 + then: [t: "az"] # (en: 'is', DeepL translation) + - t: "alul" # (en: 'bottom', DeepL translation) + - "⊦": [t: "redukálódik"] # 0x22a6 (en: 'reduces to', DeepL translation) + - "⊧": [t: "modellek"] # 0x22a7 (en: 'models', DeepL translation) + - "⊨": # 0x22a8 + - test: + if: "$Verbosity!='Terse'" + then: [t: "az"] # (en: 'is', DeepL translation) + - t: "igaz" # (en: 'true', DeepL translation) + - "⊩": [t: "erők"] # 0x22a9 (en: 'forces', DeepL translation) + - "⊪": [t: "háromszoros függőleges sáv jobbra forduló"] # 0x22aa (en: 'triple vertical bar right turnstile', DeepL translation) + - "⊫": [t: "dupla függőleges sáv dupla jobbra forduló csavarkulcs"] # 0x22ab (en: 'double vertical bar double right turnstile', DeepL translation) + - "⊬": [t: "nem bizonyítja"] # 0x22ac (en: 'does not prove', DeepL translation) + - "⊭": # 0x22ad + - test: + if: "$Verbosity!='Terse'" + then: [t: "az"] # (en: 'is', DeepL translation) + - t: "nem igaz" # (en: 'not true', DeepL translation) + - "⊮": [t: "nem kényszerít"] # 0x22ae (en: 'does not force', DeepL translation) + - "⊯": [t: "negált kettős függőleges sáv kettős jobbra forduló"] # 0x22af (en: 'negated double vertical bar double right turnstile', DeepL translation) + - "⊰": [t: "előzi meg a reláció alatt"] # 0x22b0 (en: 'precedes under relation', DeepL translation) + - "⊱": [t: "sikerül reláció alatt"] # 0x22b1 (en: 'succeeds under relation', DeepL translation) + - "⊲": # 0x22b2 + - test: + if: "$Verbosity!='Terse'" + then: [t: "az"] # (en: 'is', DeepL translation) + - t: "egy normális alcsoportja" # (en: 'a normal subgroup of', DeepL translation) + - "⊳": [t: "tartalmaz, mint normál alcsoport"] # 0x22b3 (en: 'contains as a normal subgroup', DeepL translation) + - "⊴": # 0x22b4 + - test: + if: "$Verbosity!='Terse'" + then: [t: "az"] # (en: 'is', DeepL translation) + - t: "normális alcsoportja vagy egyenlő" # (en: 'a normal subgroup of or equal to', DeepL translation) + - "⊵": [t: "tartalmaz, mint normál alcsoport vagy egyenlő"] # 0x22b5 (en: 'contains as a normal subgroup or equal to', DeepL translation) + - "⊶": # 0x22b6 + - test: + if: "$Verbosity!='Terse'" + then: [t: "az"] # (en: 'is', DeepL translation) + - t: "az eredeti" # (en: 'the original of', DeepL translation) + - "⊷": # 0x22b7 + - test: + if: "$Verbosity!='Terse'" + then: [t: "az"] # (en: 'is', DeepL translation) + - t: "egy kép" # (en: 'an image of', DeepL translation) + - "⊸": [t: "multitérkép"] # 0x22b8 (en: 'multimap', DeepL translation) + - "⊹": [t: "hermitikus konjugált mátrix"] # 0x22b9 (en: 'hermitian conjugate matrix', DeepL translation) + - "⊺": [t: "interkaláció"] # 0x22ba (en: 'intercalate', DeepL translation) + - "⊻": [t: "xor"] # 0x22bb (DeepL translation) + - "⊼": [t: "nand"] # 0x22bc (DeepL translation) + - "⊽": [t: "sem"] # 0x22bd (en: 'nor', DeepL translation) + - "⊾": [t: "derékszög ívvel"] # 0x22be (en: 'right angle with arc', DeepL translation) + - "⊿": [t: "jobb oldali háromszög"] # 0x22bf (en: 'right triangle', DeepL translation) + - "⋀": [t: "logikai és"] # 0x22c0 (en: 'logical and', DeepL translation) + - "⋁": [t: "logikai vagy"] # 0x22c1 (en: 'logical or', DeepL translation) + - "⋂": [t: "kereszteződés"] # 0x22c2 (en: 'intersection', DeepL translation) + - "⋃": [t: "unió"] # 0x22c3 (en: 'union', DeepL translation) + - "⋄": [t: "rombuszos operátor"] # 0x22c4 (en: 'diamond operator', DeepL translation) + - "⋅": # 0x22c5 - test: if: "@data-chem-formula-op" - then: [t: "dot"] - else: [t: "times"] + then: [t: "pont"] # (en: 'dot', DeepL translation) + else: [t: "idők"] # (en: 'times', DeepL translation) - - "⋆": [t: "times"] # 0x22c6 - - "⋇": [t: "division times"] # 0x22c7 - - "⋈": [t: "bowtie"] # 0x22c8 - - "⋉": # 0x22c9 + - "⋆": [t: "idők"] # 0x22c6 (en: 'times', DeepL translation) + - "⋇": [t: "osztás idő"] # 0x22c7 (en: 'division times', DeepL translation) + - "⋈": [t: "masni"] # 0x22c8 (en: 'bowtie', DeepL translation) + - "⋉": # 0x22c9 - test: if: "$Verbosity!='Terse'" - then: [t: "is"] - - t: "the left normal factor semidirect product of" - - "⋊": # 0x22ca + then: [t: "az"] # (en: 'is', DeepL translation) + - t: "bal oldali normális tényező félközvetett szorzata" # (en: 'the left normal factor semidirect product of', DeepL translation) + - "⋊": # 0x22ca - test: if: "$Verbosity!='Terse'" - then: [t: "is"] - - t: "the right normal factor semidirect product of" - - "⋋": # 0x22cb + then: [t: "az"] # (en: 'is', DeepL translation) + - t: "a jobb oldali normális tényező félközvetett szorzata" # (en: 'the right normal factor semidirect product of', DeepL translation) + - "⋋": # 0x22cb - test: if: "$Verbosity!='Terse'" - then: [t: "is"] - - t: "the left semidirect product of" - - "⋌": # 0x22cc + then: [t: "az"] # (en: 'is', DeepL translation) + - t: "bal oldali félközvetett szorzata" # (en: 'the left semidirect product of', DeepL translation) + - "⋌": # 0x22cc - test: if: "$Verbosity!='Terse'" - then: [t: "is"] - - t: "the right semidirect product of" - - "⋍": [t: "reversed tilde equals"] # 0x22cd - - "⋎": [t: "curly logical or"] # 0x22ce - - "⋏": [t: "curly logical and"] # 0x22cf - - "⋐": # 0x22d0 + then: [t: "az"] # (en: 'is', DeepL translation) + - t: "a jobb oldali félközvetett szorzata" # (en: 'the right semidirect product of', DeepL translation) + - "⋍": [t: "fordított tilde egyenlő"] # 0x22cd (en: 'reversed tilde equals', DeepL translation) + - "⋎": [t: "görbe logikai vagy"] # 0x22ce (en: 'curly logical or', DeepL translation) + - "⋏": [t: "görbe logikai és"] # 0x22cf (en: 'curly logical and', DeepL translation) + - "⋐": # 0x22d0 - test: if: "$Verbosity!='Terse'" - then: [t: "is"] - - t: "a double subset of" - - "⋑": # 0x22d1 + then: [t: "az"] # (en: 'is', DeepL translation) + - t: "kettős részhalmaza" # (en: 'a double subset of', DeepL translation) + - "⋑": # 0x22d1 - test: if: "$Verbosity!='Terse'" - then: [t: "is"] - - t: "a double superset of" - - "⋒": # 0x22d2 + then: [t: "az"] # (en: 'is', DeepL translation) + - t: "egy kettős szuperhalmaza" # (en: 'a double superset of', DeepL translation) + - "⋒": # 0x22d2 - test: if: "$Verbosity!='Terse'" - then: [t: "the"] - - t: "double intersection of" - - "⋓": # 0x22d3 + then: [t: "a"] # (en: 'the', DeepL translation) + - t: "kettős metszéspontja" # (en: 'double intersection of', DeepL translation) + - "⋓": # 0x22d3 - test: if: "$Verbosity!='Terse'" - then: [t: "the"] - - t: "double union of" - - "⋔": # 0x22d4 + then: [t: "a"] # (en: 'the', DeepL translation) + - t: "kettős kötés" # (en: 'double union of', DeepL translation) + - "⋔": # 0x22d4 - test: if: "$Verbosity!='Terse'" - then: [t: "the"] - - t: "proper intersection of" - - "⋕": # 0x22d5 + then: [t: "a"] # (en: 'the', DeepL translation) + - t: "megfelelő metszéspontja" # (en: 'proper intersection of', DeepL translation) + - "⋕": # 0x22d5 - test: if: "$Verbosity!='Terse'" - then: [t: "is"] - - t: "equal to and parallel to" - - "⋖": [t: "less than with dot"] # 0x22d6 - - "⋗": [t: "greater than with dot"] # 0x22d7 - - "⋘": # 0x22d8 + then: [t: "az"] # (en: 'is', DeepL translation) + - t: "egyenlő és párhuzamos" # (en: 'equal to and parallel to', DeepL translation) + - "⋖": [t: "kisebb, mint pontokkal"] # 0x22d6 (en: 'less than with dot', DeepL translation) + - "⋗": [t: "nagyobb, mint ponttal"] # 0x22d7 (en: 'greater than with dot', DeepL translation) + - "⋘": # 0x22d8 - test: if: "$Verbosity!='Terse'" - then: [t: "is"] - - t: "very much less than" - - "⋙": # 0x22d9 + then: [t: "az"] # (en: 'is', DeepL translation) + - t: "nagyon sokkal kisebb, mint" # (en: 'very much less than', DeepL translation) + - "⋙": # 0x22d9 - test: if: "$Verbosity!='Terse'" - then: [t: "is"] - - t: "very much greater than" - - "⋚": # 0x22da + then: [t: "az"] # (en: 'is', DeepL translation) + - t: "nagyon sokkal nagyobb, mint" # (en: 'very much greater than', DeepL translation) + - "⋚": # 0x22da - test: if: "$Verbosity!='Terse'" - then: [t: "is"] - - t: "less than equal to or greater than" - - "⋛": # 0x22db + then: [t: "az"] # (en: 'is', DeepL translation) + - t: "kisebb, mint egyenlő vagy nagyobb, mint" # (en: 'less than equal to or greater than', DeepL translation) + - "⋛": # 0x22db - test: if: "$Verbosity!='Terse'" - then: [t: "is"] - - t: "greater than equal to or less than" - - "⋜": # 0x22dc - - test: - if: "$Verbosity!='Terse'" - then: [t: "is"] - - t: "equal to or less than" - - "⋝": # 0x22dd - - test: - if: "$Verbosity!='Terse'" - then: [t: "is"] - - t: "equal to or greater than" - - "⋞": # 0x22de - - test: - if: "$Verbosity!='Terse'" - then: [t: "is"] - - t: "equal to or precedes" - - "⋟": # 0x22df - - test: - if: "$Verbosity!='Terse'" - then: [t: "is"] - - t: "equal to or succeeds" - - "⋠": [t: "does not precede nor is equal to"] # 0x22e0 - - "⋡": [t: "does not succeed nor is equal to"] # 0x22e1 - - "⋢": [t: "not square image of or equal to"] # 0x22e2 - - "⋣": [t: "not square original of or equal to"] # 0x22e3 - - "⋤": [t: "square image of or not equal to"] # 0x22e4 - - "⋥": [t: "square original of or not equal to"] # 0x22e5 - - "⋦": # 0x22e6 - - test: - if: "$Verbosity!='Terse'" - then: [t: "is"] - - t: "less than but not equivalent to" - - "⋧": # 0x22e7 - - test: - if: "$Verbosity!='Terse'" - then: [t: "is"] - - t: "greater than but not equivalent to" - - "⋨": [t: "precedes but is not equivalent to"] # 0x22e8 - - "⋩": [t: "succeeds but is not equivalent to"] # 0x22e9 - - "⋪": # 0x22ea - - test: - if: "$Verbosity!='Terse'" - then: [t: "is"] - - t: "not a normal subgroup of" - - "⋫": [t: "does not contain as a normal subgroup"] # 0x22eb - - "⋬": # 0x22ec - - test: - if: "$Verbosity!='Terse'" - then: [t: "is"] - - t: "not a normal subgroup of nor is equal to" - - "⋭": [t: "does not contain as a normal subgroup nor is equal to"] # 0x22ed - - "⋮": [t: "vertical ellipsis"] # 0x22ee - - "⋯": [t: "dot dot dot"] # 0x22ef - - "⋰": [t: "up diagonal ellipsis"] # 0x22f0 - - "⋱": [t: "diagonal ellipsis"] # 0x22f1 - - "⋲": [t: "element of with long horizontal stroke"] # 0x22f2 - - "⋳": [t: "element of with vertical bar at end of horizontal stroke"] # 0x22f3 - - "⋴": [t: "element of with vertical bar at end of horizontal stroke"] # 0x22f4 - - "⋵": [t: "element of with dot above"] # 0x22f5 - - "⋶": [t: "element of with overbar"] # 0x22f6 - - "⋷": [t: "element of with overbar"] # 0x22f7 - - "⋸": [t: "element of with underbar"] # 0x22f8 - - "⋹": [t: "element of with two horizontal strokes"] # 0x22f9 - - "⋺": [t: "contains with long horizontal stroke"] # 0x22fa - - "⋻": [t: "contains with vertical bar at end of horizontal stroke"] # 0x22fb - - "⋼": [t: "contains with vertical bar at end of horizontal stroke"] # 0x22fc - - "⋽": [t: "contains with overbar"] # 0x22fd - - "⋾": [t: "contains with overbar"] # 0x22fe - - "⋿": [t: "z notation bag membership"] # 0x22ff - - "⌀": [t: "diameter"] # 0x2300 - - "⌁": [t: "electric arrow"] # 0x2301 - - "⌂": [t: "house"] # 0x2302 - - "⌃": [t: "up arrowhead"] # 0x2303 - - "⌄": [t: "down arrowhead"] # 0x2304 - - "⌅": [t: "projective"] # 0x2305 - - "⌆": [t: "perspective"] # 0x2306 - - "⌇": [t: "wavy line"] # 0x2307 - - "⌈": [t: "left ceiling"] # 0x2308 - - "⌉": [t: "right ceiling"] # 0x2309 - - "⌊": [t: "left floor"] # 0x230a - - "⌋": [t: "right floor"] # 0x230b - - "⌌": [t: "bottom right crop"] # 0x230c - - "⌍": [t: "bottom left crop"] # 0x230d - - "⌎": [t: "top right crop"] # 0x230e - - "⌏": [t: "top left crop"] # 0x230f - - "⌐": [t: "reversed not sign"] # 0x2310 - - "⌑": [t: "square lozenge"] # 0x2311 - - "⌒": [t: "arc"] # 0x2312 - - "⌓": [t: "segment"] # 0x2313 - - "⌔": [t: "sector"] # 0x2314 - - "⌕": [t: "telephone recorder"] # 0x2315 - - "⌖": [t: "position indicator crosshairs"] # 0x2316 - - "⌗": [t: "viewdata square"] # 0x2317 - - "⌘": [t: "place of interest sign"] # 0x2318 - - "⌙": [t: "turned not sign"] # 0x2319 - - "⌚": [t: "watch"] # 0x231a - - "⌛": [t: "hourglass"] # 0x231b - - "⌜": [t: "top left corner"] # 0x231c - - "⌝": [t: "top right corner"] # 0x231d - - "⌞": [t: "bottom left corner"] # 0x231e - - "⌟": [t: "bottom right corner"] # 0x231f - - "⌠": [t: "top half integral"] # 0x2320 - - "⌡": [t: "bottom half integral"] # 0x2321 - - "⌢": [t: "frown"] # 0x2322 - - "⌣": [t: "smile"] # 0x2323 - - "⌤": [t: "up arrowhead between two horizontal bars"] # 0x2324 - - "⌥": [t: "option key"] # 0x2325 - - "⌦": [t: "erase to the right"] # 0x2326 - - "⌧": [t: "x in a rectangle box"] # 0x2327 - - "⌨": [t: "keyboard"] # 0x2328 - - "〈": [t: "left pointing angle bracket"] # 0x2329 - - "〉": [t: "right pointing angle bracket"] # 0x232a - - "⌫": [t: "erase to the left"] # 0x232b - - "⌬": [t: "benzene ring"] # 0x232c - - "⌭": [t: "cylindricity"] # 0x232d - - "⌮": [t: "all around profile"] # 0x232e - - "⌯": [t: "symmetry"] # 0x232f - - "⌰": [t: "total runout"] # 0x2330 - - "⌱": [t: "dimension origin"] # 0x2331 - - "⌲": [t: "conical taper"] # 0x2332 - - "⌳": [t: "slope"] # 0x2333 - - "⌴": [t: "counterbore"] # 0x2334 - - "⌵": [t: "countersink"] # 0x2335 - - "⌶": [t: "apl i beam"] # 0x2336 - - "⌽": [t: "apl circle stile"] # 0x233d - - "⌿": [t: "apl slash bar"] # 0x233f - - "⍰": [t: "unknown box"] # 0x2370 - - "⍼": [t: "right angle with down zigzag arrow"] # 0x237c - - "⎔": [t: "hexagon"] # 0x2394 - - "⎕": [t: "box"] # 0x2395 - - "⎶": [t: "bottom square bracket over top square bracket"] # 0x23b6 - - "⏜": [t: "top paren"] # 0x23dc - - "⏝": [t: "bottom paren"] # 0x23dd - - "⏞": [t: "top brace"] # 0x23de - - "⏟": [t: "bottom brace"] # 0x23df - - "⏠": [t: "top tortoise shell bracket"] # 0x23e0 - - "⏡": [t: "bottom tortoise shell bracket"] # 0x23e1 - - "⏢": [t: "white trapezium"] # 0x23e2 - - "⏣": [t: "benzene right with circle"] # 0x23e3 - - "⏤": [t: "straightness"] # 0x23e4 - - "⏥": [t: "flatness"] # 0x23e5 - - "⏦": # 0x23e6 + then: [t: "az"] # (en: 'is', DeepL translation) + - t: "nagyobb, mint egyenlő vagy kisebb, mint" # (en: 'greater than equal to or less than', DeepL translation) + - "⋜": # 0x22dc + - test: + if: "$Verbosity!='Terse'" + then: [t: "az"] # (en: 'is', DeepL translation) + - t: "egyenlő vagy kisebb, mint" # (en: 'equal to or less than', DeepL translation) + - "⋝": # 0x22dd + - test: + if: "$Verbosity!='Terse'" + then: [t: "az"] # (en: 'is', DeepL translation) + - t: "egyenlő vagy nagyobb, mint" # (en: 'equal to or greater than', DeepL translation) + - "⋞": # 0x22de + - test: + if: "$Verbosity!='Terse'" + then: [t: "az"] # (en: 'is', DeepL translation) + - t: "egyenlő vagy megelőzi" # (en: 'equal to or precedes', DeepL translation) + - "⋟": # 0x22df + - test: + if: "$Verbosity!='Terse'" + then: [t: "az"] # (en: 'is', DeepL translation) + - t: "egyenlő vagy sikerül" # (en: 'equal to or succeeds', DeepL translation) + - "⋠": [t: "nem előzi meg és nem egyenlő"] # 0x22e0 (en: 'does not precede nor is equal to', DeepL translation) + - "⋡": [t: "nem sikerül sem nem egyenlő"] # 0x22e1 (en: 'does not succeed nor is equal to', DeepL translation) + - "⋢": [t: "nem négyzetképe vagy egyenlő"] # 0x22e2 (en: 'not square image of or equal to', DeepL translation) + - "⋣": [t: "nem négyzet eredeti vagy egyenlő"] # 0x22e3 (en: 'not square original of or equal to', DeepL translation) + - "⋤": [t: "négyzetes képe vagy nem egyenlő"] # 0x22e4 (en: 'square image of or not equal to', DeepL translation) + - "⋥": [t: "négyzet eredeti vagy nem egyenlő"] # 0x22e5 (en: 'square original of or not equal to', DeepL translation) + - "⋦": # 0x22e6 + - test: + if: "$Verbosity!='Terse'" + then: [t: "az"] # (en: 'is', DeepL translation) + - t: "kevesebb, mint, de nem egyenlő" # (en: 'less than but not equivalent to', DeepL translation) + - "⋧": # 0x22e7 + - test: + if: "$Verbosity!='Terse'" + then: [t: "az"] # (en: 'is', DeepL translation) + - t: "nagyobb, mint, de nem egyenértékű" # (en: 'greater than but not equivalent to', DeepL translation) + - "⋨": [t: "megelőzi, de nem egyenértékű vele"] # 0x22e8 (en: 'precedes but is not equivalent to', DeepL translation) + - "⋩": [t: "sikerül, de nem egyenértékű"] # 0x22e9 (en: 'succeeds but is not equivalent to', DeepL translation) + - "⋪": # 0x22ea + - test: + if: "$Verbosity!='Terse'" + then: [t: "az"] # (en: 'is', DeepL translation) + - t: "nem normális alcsoportja" # (en: 'not a normal subgroup of', DeepL translation) + - "⋫": [t: "nem tartalmaz normál alcsoportként"] # 0x22eb (en: 'does not contain as a normal subgroup', DeepL translation) + - "⋬": # 0x22ec + - test: + if: "$Verbosity!='Terse'" + then: [t: "az"] # (en: 'is', DeepL translation) + - t: "nem normális alcsoportja sem egyenlő" # (en: 'not a normal subgroup of nor is equal to', DeepL translation) + - "⋭": [t: "nem tartalmazza normál alcsoportként sem egyenlő"] # 0x22ed (en: 'does not contain as a normal subgroup nor is equal to', DeepL translation) + - "⋮": [t: "függőleges ellipszis"] # 0x22ee (en: 'vertical ellipsis', DeepL translation) + - "⋯": [t: "pont pont pont pont"] # 0x22ef (en: 'dot dot dot', DeepL translation) + - "⋰": [t: "felfelé átlós ellipszis"] # 0x22f0 (en: 'up diagonal ellipsis', DeepL translation) + - "⋱": [t: "átlós ellipszis"] # 0x22f1 (en: 'diagonal ellipsis', DeepL translation) + - "⋲": [t: "eleme hosszú vízszintes vonallal"] # 0x22f2 (en: 'element of with long horizontal stroke', DeepL translation) + - "⋳": [t: "elem függőleges vonallal a vízszintes vonás végén"] # 0x22f3 (en: 'element of with vertical bar at end of horizontal stroke', DeepL translation) + - "⋴": [t: "elem függőleges vonallal a vízszintes vonás végén"] # 0x22f4 (en: 'element of with vertical bar at end of horizontal stroke', DeepL translation) + - "⋵": [t: "elem a pont fölött"] # 0x22f5 (en: 'element of with dot above', DeepL translation) + - "⋶": [t: "elem a fölött vonallal"] # 0x22f6 (en: 'element of with overbar', DeepL translation) + - "⋷": [t: "elem a fölött vonallal"] # 0x22f7 (en: 'element of with overbar', DeepL translation) + - "⋸": [t: "eleme alulvonallal"] # 0x22f8 (en: 'element of with underbar', DeepL translation) + - "⋹": [t: "eleme két vízszintes vonallal"] # 0x22f9 (en: 'element of with two horizontal strokes', DeepL translation) + - "⋺": [t: "hosszú vízszintes vonallal tartalmazza"] # 0x22fa (en: 'contains with long horizontal stroke', DeepL translation) + - "⋻": [t: "tartalmaz függőleges sávval a vízszintes vonás végén"] # 0x22fb (en: 'contains with vertical bar at end of horizontal stroke', DeepL translation) + - "⋼": [t: "tartalmaz függőleges sávval a vízszintes vonás végén"] # 0x22fc (en: 'contains with vertical bar at end of horizontal stroke', DeepL translation) + - "⋽": [t: "tartalmazza a túlsó sávot"] # 0x22fd (en: 'contains with overbar', DeepL translation) + - "⋾": [t: "tartalmazza a túlsó sávot"] # 0x22fe (en: 'contains with overbar', DeepL translation) + - "⋿": [t: "z jelölés táska tagság"] # 0x22ff (en: 'z notation bag membership', DeepL translation) + - "⌀": [t: "átmérő"] # 0x2300 (en: 'diameter', DeepL translation) + - "⌁": [t: "elektromos nyíl"] # 0x2301 (en: 'electric arrow', DeepL translation) + - "⌂": [t: "ház"] # 0x2302 (en: 'house', DeepL translation) + - "⌃": [t: "felfelé mutató nyílhegy"] # 0x2303 (en: 'up arrowhead', DeepL translation) + - "⌄": [t: "lefelé mutató nyílhegy"] # 0x2304 (en: 'down arrowhead', DeepL translation) + - "⌅": [t: "projekciós"] # 0x2305 (en: 'projective', DeepL translation) + - "⌆": [t: "perspektíva"] # 0x2306 (en: 'perspective', DeepL translation) + - "⌇": [t: "hullámvonal"] # 0x2307 (en: 'wavy line', DeepL translation) + - "⌈": [t: "bal felső határ"] # 0x2308 (en: 'left ceiling', DeepL translation) + - "⌉": [t: "jobb oldali mennyezet"] # 0x2309 (en: 'right ceiling', DeepL translation) + - "⌊": [t: "bal padló"] # 0x230a (en: 'left floor', DeepL translation) + - "⌋": [t: "jobb oldali padló"] # 0x230b (en: 'right floor', DeepL translation) + - "⌌": [t: "jobb alsó vágás"] # 0x230c (en: 'bottom right crop', DeepL translation) + - "⌍": [t: "bal alsó vágás"] # 0x230d (en: 'bottom left crop', DeepL translation) + - "⌎": [t: "jobb felső vágás"] # 0x230e (en: 'top right crop', DeepL translation) + - "⌏": [t: "balra fent vágás"] # 0x230f (en: 'top left crop', DeepL translation) + - "⌐": [t: "fordított nem jel"] # 0x2310 (en: 'reversed not sign', DeepL translation) + - "⌑": [t: "négyzet rozettás"] # 0x2311 (en: 'square lozenge', DeepL translation) + - "⌒": [t: "ív"] # 0x2312 (en: 'arc', DeepL translation) + - "⌓": [t: "szegmens"] # 0x2313 (en: 'segment', DeepL translation) + - "⌔": [t: "szektor"] # 0x2314 (en: 'sector', DeepL translation) + - "⌕": [t: "telefonos diktafon"] # 0x2315 (en: 'telephone recorder', DeepL translation) + - "⌖": [t: "helyzetjelző szálkereszt"] # 0x2316 (en: 'position indicator crosshairs', DeepL translation) + - "⌗": [t: "viewdata négyzet"] # 0x2317 (en: 'viewdata square', DeepL translation) + - "⌘": [t: "érdekesség helye jel"] # 0x2318 (en: 'place of interest sign', DeepL translation) + - "⌙": [t: "fordított nem jel"] # 0x2319 (en: 'turned not sign', DeepL translation) + - "⌚": [t: "óra"] # 0x231a (en: 'watch', DeepL translation) + - "⌛": [t: "homokóra"] # 0x231b (en: 'hourglass', DeepL translation) + - "⌜": [t: "bal felső sarok"] # 0x231c (en: 'top left corner', DeepL translation) + - "⌝": [t: "jobb felső sarok"] # 0x231d (en: 'top right corner', DeepL translation) + - "⌞": [t: "bal alsó sarok"] # 0x231e (en: 'bottom left corner', DeepL translation) + - "⌟": [t: "jobb alsó sarok"] # 0x231f (en: 'bottom right corner', DeepL translation) + - "⌠": [t: "felső fél egész"] # 0x2320 (en: 'top half integral', DeepL translation) + - "⌡": [t: "alsó fele integrált"] # 0x2321 (en: 'bottom half integral', DeepL translation) + - "⌢": [t: "homlokráncolás"] # 0x2322 (en: 'frown', DeepL translation) + - "⌣": [t: "mosoly"] # 0x2323 (en: 'smile', DeepL translation) + - "⌤": [t: "felfelé nyílhegy két vízszintes sáv között"] # 0x2324 (en: 'up arrowhead between two horizontal bars', DeepL translation) + - "⌥": [t: "opciós billentyű"] # 0x2325 (en: 'option key', DeepL translation) + - "⌦": [t: "törlés jobbra"] # 0x2326 (en: 'erase to the right', DeepL translation) + - "⌧": [t: "x téglalap alakú négyzetben"] # 0x2327 (en: 'x in a rectangle box', DeepL translation) + - "⌨": [t: "billentyűzet"] # 0x2328 (en: 'keyboard', DeepL translation) + - "〈": [t: "balra mutató szögletes zárójel"] # 0x2329 (en: 'left pointing angle bracket', DeepL translation) + - "〉": [t: "jobbra mutató szögletes zárójel"] # 0x232a (en: 'right pointing angle bracket', DeepL translation) + - "⌫": [t: "törlés balra"] # 0x232b (en: 'erase to the left', DeepL translation) + - "⌬": [t: "benzolgyűrű"] # 0x232c (en: 'benzene ring', DeepL translation) + - "⌭": [t: "hengeresség"] # 0x232d (en: 'cylindricity', DeepL translation) + - "⌮": [t: "körkörös profil"] # 0x232e (en: 'all around profile', DeepL translation) + - "⌯": [t: "szimmetria"] # 0x232f (en: 'symmetry', DeepL translation) + - "⌰": [t: "teljes kifutás"] # 0x2330 (en: 'total runout', DeepL translation) + - "⌱": [t: "dimenzió eredete"] # 0x2331 (en: 'dimension origin', DeepL translation) + - "⌲": [t: "kúpos kúp"] # 0x2332 (en: 'conical taper', DeepL translation) + - "⌳": [t: "ferde"] # 0x2333 (en: 'slope', DeepL translation) + - "⌴": [t: "ellenző"] # 0x2334 (en: 'counterbore', DeepL translation) + - "⌵": [t: "süllyesztett"] # 0x2335 (en: 'countersink', DeepL translation) + - "⌶": [t: "apl i gerenda"] # 0x2336 (en: 'apl i beam', DeepL translation) + - "⌽": [t: "apl kör stile"] # 0x233d (en: 'apl circle stile', DeepL translation) + - "⌿": [t: "apl slash bar"] # 0x233f (DeepL translation) + - "⍰": [t: "ismeretlen doboz"] # 0x2370 (en: 'unknown box', DeepL translation) + - "⍼": [t: "derékszög lefelé cikcakkos nyíllal"] # 0x237c (en: 'right angle with down zigzag arrow', DeepL translation) + - "⎔": [t: "hatszög"] # 0x2394 (en: 'hexagon', DeepL translation) + - "⎕": [t: "doboz"] # 0x2395 (en: 'box', DeepL translation) + - "⎶": [t: "alsó szögletes zárójel felett felső szögletes zárójel"] # 0x23b6 (en: 'bottom square bracket over top square bracket', DeepL translation) + - "⏜": [t: "felső zárójel"] # 0x23dc (en: 'top paren', DeepL translation) + - "⏝": [t: "alsó zárójel"] # 0x23dd (en: 'bottom paren', DeepL translation) + - "⏞": [t: "felső zárójel"] # 0x23de (en: 'top brace', DeepL translation) + - "⏟": [t: "alsó zárójel"] # 0x23df (en: 'bottom brace', DeepL translation) + - "⏠": [t: "felső teknőspáncélos konzol"] # 0x23e0 (en: 'top tortoise shell bracket', DeepL translation) + - "⏡": [t: "alsó teknőspáncélos zárójel"] # 0x23e1 (en: 'bottom tortoise shell bracket', DeepL translation) + - "⏢": [t: "fehér trapéz"] # 0x23e2 (en: 'white trapezium', DeepL translation) + - "⏣": [t: "benzol jobbra körrel"] # 0x23e3 (en: 'benzene right with circle', DeepL translation) + - "⏤": [t: "egyenesség"] # 0x23e4 (en: 'straightness', DeepL translation) + - "⏥": [t: "laposság"] # 0x23e5 (en: 'flatness', DeepL translation) + - "⏦": # 0x23e6 - spell: "ac" - - t: "current" - - "⏧": [t: "electrical intersection"] # 0x23e7 - - "①-⑨": # 0x2460 - 0x2469 - - t: "circled" + - t: "jelenlegi" # (en: 'current', DeepL translation) + - "⏧": [t: "elektromos kereszteződés"] # 0x23e7 (en: 'electrical intersection', DeepL translation) + - "①-⑨": # 0x2460 - 0x2469 + - t: "bekarikázva" # (en: 'circled', DeepL translation) - spell: "translate('.', '①②③④⑤⑥⑦⑧⑨', '123456789')" - - "⑩": [t: "circled ten"] # 0x2469 - - "⑪": [t: "circled eleven"] # 0x246a - - "⑫": [t: "circled twelve"] # 0x246b - - "⑬": [t: "circled thirteen"] # 0x246c - - "⑭": [t: "circled fourteen"] # 0x246d - - "⑮": [t: "circled fifteen"] # 0x246e - - "⑯": [t: "circled sixteen"] # 0x246f - - "⑰": [t: "circled seventeen"] # 0x2470 - - "⑱": [t: "circled eighteen"] # 0x2471 - - "⑳": [t: "circled twenty"] # 0x2473 - - "⑴-⑼": # 0x2474 - 0x247d - - t: "parenthesized" + - "⑩": [t: "bekarikázott tízes"] # 0x2469 (en: 'circled ten', DeepL translation) + - "⑪": [t: "bekarikázott tizenegy"] # 0x246a (en: 'circled eleven', DeepL translation) + - "⑫": [t: "bekarikázott tizenkettő"] # 0x246b (en: 'circled twelve', DeepL translation) + - "⑬": [t: "bekarikázott tizenhármas"] # 0x246c (en: 'circled thirteen', DeepL translation) + - "⑭": [t: "bekarikázott tizennégy"] # 0x246d (en: 'circled fourteen', DeepL translation) + - "⑮": [t: "bekarikázott tizenöt"] # 0x246e (en: 'circled fifteen', DeepL translation) + - "⑯": [t: "bekarikázott tizenhatos"] # 0x246f (en: 'circled sixteen', DeepL translation) + - "⑰": [t: "bekarikázott tizenhét"] # 0x2470 (en: 'circled seventeen', DeepL translation) + - "⑱": [t: "bekarikázott tizenegy"] # 0x2471 (en: 'circled eighteen', DeepL translation) + - "⑳": [t: "bekarikázott húsz"] # 0x2473 (en: 'circled twenty', DeepL translation) + - "⑴-⑼": # 0x2474 - 0x247d + - t: "zárójeles" # (en: 'parenthesized', DeepL translation) - spell: "translate('.', '⑴⑵⑶⑷⑸⑹⑺⑻⑼', '123456789')" - - "⑽": [t: "parenthesized ten"] # 0x247d - - "⑾": [t: "parenthesized eleven"] # 0x247e - - "⑿": [t: "parenthesized twelve"] # 0x247f - - "⒀": [t: "parenthesized thirteen"] # 0x2480 - - "⒁": [t: "parenthesized fourteen"] # 0x2481 - - "⒂": [t: "parenthesized fifteen"] # 0x2482 - - "⒃": [t: "parenthesized sixteen"] # 0x2483 - - "⒄": [t: "parenthesized seventeen"] # 0x2484 - - "⒅": [t: "parenthesized eighteen"] # 0x2485 - - "⒆": [t: "parenthesized nineteen"] # 0x2486 - - "⒇": [t: "parenthesized twenty"] # 0x2487 - - "⒈-⒐": # 0x2488 - 0x2491 + - "⑽": [t: "zárójeles tízes"] # 0x247d (en: 'parenthesized ten', DeepL translation) + - "⑾": [t: "zárójeles tizenegyes"] # 0x247e (en: 'parenthesized eleven', DeepL translation) + - "⑿": [t: "zárójeles zárójeles tizenkettő"] # 0x247f (en: 'parenthesized twelve', DeepL translation) + - "⒀": [t: "zárójeles tizenhárom"] # 0x2480 (en: 'parenthesized thirteen', DeepL translation) + - "⒁": [t: "zárójeles tizennégyes"] # 0x2481 (en: 'parenthesized fourteen', DeepL translation) + - "⒂": [t: "zárójeles zárójeles tizenötös"] # 0x2482 (en: 'parenthesized fifteen', DeepL translation) + - "⒃": [t: "zárójeles tizenhatos"] # 0x2483 (en: 'parenthesized sixteen', DeepL translation) + - "⒄": [t: "zárójeles zárójeles tizenhét"] # 0x2484 (en: 'parenthesized seventeen', DeepL translation) + - "⒅": [t: "zárójeles zárójeles tizenegyes"] # 0x2485 (en: 'parenthesized eighteen', DeepL translation) + - "⒆": [t: "zárójeles zárójeles tizenkilenc"] # 0x2486 (en: 'parenthesized nineteen', DeepL translation) + - "⒇": [t: "zárójeles zárójeles húszas"] # 0x2487 (en: 'parenthesized twenty', DeepL translation) + - "⒈-⒐": # 0x2488 - 0x2491 - spell: "translate('.', '⒈⒉⒊⒋⒌⒍⒎⒏⒐', '123456789')" - - t: "with period" - - "⒑": [t: "ten with period"] # 0x2491 - - "⒒": [t: "eleven with period"] # 0x2492 - - "⒓": [t: "twelve with period"] # 0x2493 - - "⒔": [t: "thirteen with period"] # 0x2494 - - "⒕": [t: "fourteen with period"] # 0x2495 - - "⒖": [t: "fifteen with period"] # 0x2496 - - "⒗": [t: "sixteen with period"] # 0x2497 - - "⒘": [t: "seventeen with period"] # 0x2498 - - "⒙": [t: "eighteen with period"] # 0x2499 - - "⒚": [t: "nineteen with period"] # 0x249a - - "⒛": [t: "twenty with period"] # 0x249b - - "⒜-⒵": # 0x249c - 0x24b5 - - t: "parenthesized" + - t: "ponttal" # (en: 'with period', DeepL translation) + - "⒑": [t: "tízes pontokkal"] # 0x2491 (en: 'ten with period', DeepL translation) + - "⒒": [t: "tizenegyes pontokkal"] # 0x2492 (en: 'eleven with period', DeepL translation) + - "⒓": [t: "tizenkettő ponttal"] # 0x2493 (en: 'twelve with period', DeepL translation) + - "⒔": [t: "tizenhármas pont"] # 0x2494 (en: 'thirteen with period', DeepL translation) + - "⒕": [t: "tizennégy ponttal"] # 0x2495 (en: 'fourteen with period', DeepL translation) + - "⒖": [t: "tizenöt pont"] # 0x2496 (en: 'fifteen with period', DeepL translation) + - "⒗": [t: "tizenhatos pont"] # 0x2497 (en: 'sixteen with period', DeepL translation) + - "⒘": [t: "tizenhét pont"] # 0x2498 (en: 'seventeen with period', DeepL translation) + - "⒙": [t: "tizennégy ponttal"] # 0x2499 (en: 'eighteen with period', DeepL translation) + - "⒚": [t: "tizenkilenc ponttal"] # 0x249a (en: 'nineteen with period', DeepL translation) + - "⒛": [t: "húsz ponttal"] # 0x249b (en: 'twenty with period', DeepL translation) + - "⒜-⒵": # 0x249c - 0x24b5 + - t: "zárójeles" # (en: 'parenthesized', DeepL translation) - spell: "translate('.', '⒜⒝⒞⒟⒠⒡⒢⒣⒤⒥⒦⒧⒨⒩⒪⒫⒬⒭⒮⒯⒰⒱⒲⒳⒴⒵', 'abcdefghijklmnopqrstuvwxyz')" - - "Ⓐ-ⓩ": # 0x24b6 - 0x24cf - - t: "circled" + - "Ⓐ-ⓩ": # 0x24b6 - 0x24cf + - t: "bekarikázva" # (en: 'circled', DeepL translation) - spell: "translate('.', 'ⒶⒷⒸⒹⒺⒻⒼⒽⒾⒿⓀⓁⓂⓃⓄⓅⓆⓇⓈⓉⓊⓋⓌⓍⓎⓏ', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" - - "🅐-🅩": # 0x1f150 - 0x1f169 - - t: "black circled" + - "🅐-🅩": # 0x1f150 - 0x1f169 + - t: "fekete bekarikázva" # (en: 'black circled', DeepL translation) - spell: "translate('.', '🅐🅑🅒🅓🅔🅕🅖🅗🅘🅙🅚🅛🅜🅝🅞🅟🅠🅡🅢🅣🅤🅥🅦🅧🅨🅩', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" - - "ⓐ-ⓩ": # 0x24d0 - 0x24e9 - - t: "circled" + - "ⓐ-ⓩ": # 0x24d0 - 0x24e9 + - t: "bekarikázva" # (en: 'circled', DeepL translation) - spell: "translate('.', 'ⓐⓑⓒⓓⓔⓕⓖⓗⓘⓙⓚⓛⓜⓝⓞⓟⓠⓡⓢⓣⓤⓥⓦⓧⓨⓩ', 'abcdefghijklmnopqrstuvwxyz')" - - "⓪": [t: "circled zero"] # 0x24ea - - "⓫": [t: "black circled eleven"] # 0x24eb - - "⓬": [t: "black circled twelve"] # 0x24ec - - "⓭": [t: "black circled thirteen"] # 0x24ed - - "⓮": [t: "black circled fourteen"] # 0x24ee - - "⓯": [t: "black circled fifteen"] # 0x24ef - - "⓰": [t: "black circled sixteen"] # 0x24f0 - - "⓱": [t: "black circled seventeen"] # 0x24f1 - - "⓲": [t: "black circled eighteen"] # 0x24f2 - - "⓳": [t: "black circled nineteen"] # 0x24f3 - - "⓴": [t: "black circled twenty"] # 0x24f4 - - "⓵-⓽": # 0x24f5 - 0x24fe - - t: "double circled" + - "⓪": [t: "bekarikázott nulla"] # 0x24ea (en: 'circled zero', DeepL translation) + - "⓫": [t: "fekete kör alakú tizenegyes"] # 0x24eb (en: 'black circled eleven', DeepL translation) + - "⓬": [t: "fekete bekarikázott tizenkettő"] # 0x24ec (en: 'black circled twelve', DeepL translation) + - "⓭": [t: "fekete bekarikázott tizenhárom"] # 0x24ed (en: 'black circled thirteen', DeepL translation) + - "⓮": [t: "fekete karikázott tizennégy"] # 0x24ee (en: 'black circled fourteen', DeepL translation) + - "⓯": [t: "fekete karikázott tizenöt"] # 0x24ef (en: 'black circled fifteen', DeepL translation) + - "⓰": [t: "fekete karikázott tizenhat"] # 0x24f0 (en: 'black circled sixteen', DeepL translation) + - "⓱": [t: "fekete karikázott tizenhét"] # 0x24f1 (en: 'black circled seventeen', DeepL translation) + - "⓲": [t: "fekete karikázott tizenegyes"] # 0x24f2 (en: 'black circled eighteen', DeepL translation) + - "⓳": [t: "fekete bekarikázott tizenkilenc"] # 0x24f3 (en: 'black circled nineteen', DeepL translation) + - "⓴": [t: "fekete bekarikázott húszas"] # 0x24f4 (en: 'black circled twenty', DeepL translation) + - "⓵-⓽": # 0x24f5 - 0x24fe + - t: "dupla bekarikázott" # (en: 'double circled', DeepL translation) - spell: "translate('.', '⓵⓶⓷⓸⓹⓺⓻⓼⓽', '123456789')" - - "⓾": [t: "double circled ten"] # 0x24fe - - "⓿": [t: "black circled zero"] # 0x24ff - - "■": [t: "black square"] # 0x25a0 - - "□": [t: "white square"] # 0x25a1 - - "▢": [t: "white square with rounded corners"] # 0x25a2 - - "▣": [t: "white square containing small black square"] # 0x25a3 - - "▤": [t: "square with horizontal fill"] # 0x25a4 - - "▥": [t: "square with vertical fill"] # 0x25a5 - - "▦": [t: "square with orthogonal crosshatch fill"] # 0x25a6 - - "▧": [t: "square with upper left to lower right fill"] # 0x25a7 - - "▨": [t: "square with upper right to lower left fill"] # 0x25a8 - - "▩": [t: "square with diagonal crosshatch fill"] # 0x25a9 - - "▪": [t: "black small square"] # 0x25aa - - "▫": [t: "white small square"] # 0x25ab - - "▬": [t: "black rectangle"] # 0x25ac - - "▭": [t: "white rectangle"] # 0x25ad - - "▮": [t: "black vertical rectangle"] # 0x25ae - - "▯": [t: "white vertical rectangle"] # 0x25af - - "▰": [t: "black parallelogram"] # 0x25b0 - - "▱": [t: "white parallelogram"] # 0x25b1 - - "▲": [t: "black up pointing triangle"] # 0x25b2 - - "△": [t: "triangle"] # 0x25b3 - - "▴": [t: "black up pointing small triangle"] # 0x25b4 - - "▵": [t: "white up pointing small triangle"] # 0x25b5 - - "▶": [t: "black right pointing triangle"] # 0x25b6 - - "▷": [t: "white right pointing triangle"] # 0x25b7 - - "▸": [t: "black right pointing small triangle"] # 0x25b8 - - "▹": [t: "white right pointing small triangle"] # 0x25b9 - - "►": [t: "black right pointing pointer"] # 0x25ba - - "▻": [t: "white right pointing pointer"] # 0x25bb - - "▼": [t: "black down pointing triangle"] # 0x25bc - - "▽": [t: "white down pointing triangle"] # 0x25bd - - "▾": [t: "black down pointing small triangle"] # 0x25be - - "▿": [t: "white down pointing small triangle"] # 0x25bf - - "◀": [t: "black left pointing triangle"] # 0x25c0 - - "◁": [t: "white left pointing triangle"] # 0x25c1 - - "◂": [t: "black left pointing small triangle"] # 0x25c2 - - "◃": [t: "white left pointing small triangle"] # 0x25c3 - - "◄": [t: "black left pointing pointer"] # 0x25c4 - - "◅": [t: "white left pointing pointer"] # 0x25c5 - - "◆": [t: "black diamond"] # 0x25c6 - - "◇": [t: "white diamond"] # 0x25c7 - - "◈": [t: "white diamond containing black small diamond"] # 0x25c8 - - "◉": [t: "fisheye"] # 0x25c9 - - "◊": [t: "lozenge"] # 0x25ca - - "○": [t: "white circle"] # 0x25cb - - "◌": [t: "dotted circle"] # 0x25cc - - "◍": [t: "circle with vertical fill"] # 0x25cd - - "◎": [t: "bullseye"] # 0x25ce - - "●": [t: "black circle"] # 0x25cf - - "◐": [t: "circle with left half black"] # 0x25d0 - - "◑": [t: "circle with right half black"] # 0x25d1 - - "◒": [t: "circle with lower half black"] # 0x25d2 - - "◓": [t: "circle with upper half black"] # 0x25d3 - - "◔": [t: "circle with upper right quadrant black"] # 0x25d4 - - "◕": [t: "circle with all but upper left quadrant black"] # 0x25d5 - - "◖": [t: "left half black circle"] # 0x25d6 - - "◗": [t: "right half black circle"] # 0x25d7 - - "◘": [t: "inverse bullet"] # 0x25d8 - - "◙": [t: "inverse white circle"] # 0x25d9 - - "◚": [t: "upper half inverse white circle"] # 0x25da - - "◛": [t: "lower half inverse white circle"] # 0x25db - - "◜": [t: "upper left quadrant circular arc"] # 0x25dc - - "◝": [t: "upper right quadrant circular arc"] # 0x25dd - - "◞": [t: "lower right quadrant circular arc"] # 0x25de - - "◟": [t: "lower left quadrant circular arc"] # 0x25df - - "◠": [t: "upper half circle"] # 0x25e0 - - "◡": [t: "lower half circle"] # 0x25e1 - - "◢": [t: "black lower right triangle"] # 0x25e2 - - "◣": [t: "black lower left triangle"] # 0x25e3 - - "◤": [t: "black upper left triangle"] # 0x25e4 - - "◥": [t: "black upper right triangle"] # 0x25e5 - - "◦": [t: "composition"] # 0x25e6 - - "◧": [t: "square with left half black"] # 0x25e7 - - "◨": [t: "square with right half black"] # 0x25e8 - - "◩": [t: "square with upper left half black"] # 0x25e9 - - "◪": [t: "square with lower right half black"] # 0x25ea - - "◫": [t: "white square with bisecting line"] # 0x25eb - - "◬": [t: "white up pointing triangle with dot"] # 0x25ec - - "◭": [t: "up pointing triangle with left half black"] # 0x25ed - - "◮": [t: "up pointing triangle with right half black"] # 0x25ee - - "◯": [t: "large circle"] # 0x25ef - - "◰": [t: "white square with upper left quadrant"] # 0x25f0 - - "◱": [t: "white square with lower left quadrant"] # 0x25f1 - - "◲": [t: "white square with lower right quadrant"] # 0x25f2 - - "◳": [t: "white square with upper right quadrant"] # 0x25f3 - - "◴": [t: "white circle with upper left quadrant"] # 0x25f4 - - "◵": [t: "white circle with lower left quadrant"] # 0x25f5 - - "◶": [t: "white circle with lower right quadrant"] # 0x25f6 - - "◷": [t: "white circle with upper right quadrant"] # 0x25f7 - - "◸": [t: "upper left triangle"] # 0x25f8 - - "◹": [t: "upper right triangle"] # 0x25f9 - - "◺": [t: "lower left triangle"] # 0x25fa - - "◻": [t: "white medium square"] # 0x25fb - - "◼": [t: "black medium square"] # 0x25fc - - "◽": [t: "white medium small square"] # 0x25fd - - "◾": [t: "black medium small square"] # 0x25fe - - "◿": [t: "lower right triangle"] # 0x25ff - - "★": [t: "black star"] # 0x2605 - - "☆": [t: "white star"] # 0x2606 - - "☉": [t: "sun"] # 0x2609 - - "☌": [t: "conjunction"] # 0x260c - - "☒": [t: "ballot box with x"] # 0x2612 - - "☽": [t: "waxing moon"] # 0x263d - - "☾": [t: "waning moon"] # 0x263e - - "☿": [t: "mercury"] # 0x263f - - "♀": [t: "female"] # 0x2640 - - "♁": [t: "earth"] # 0x2641 - - "♂": [t: "male"] # 0x2642 - - "♃": [t: "jupiter"] # 0x2643 - - "♄": [t: "saturn"] # 0x2644 - - "♅": [t: "uranus"] # 0x2645 - - "♆": [t: "neptune"] # 0x2646 - - "♇": [t: "pluto"] # 0x2647 - - "♈": [t: "aries"] # 0x2648 - - "♉": [t: "taurus"] # 0x2649 - - "♩": [t: "quarter note"] # 0x2669 - - "♭": [t: "flat"] # 0x266d - - "♮": [t: "natural"] # 0x266e - - "♯": [t: "sharp"] # 0x266f - - "♠": [t: "black spade suit"] # 0x2660 - - "♡": [t: "white heart suit"] # 0x2661 - - "♢": [t: "white diamond suit"] # 0x2662 - - "♣": [t: "black club suit"] # 0x2663 - - "♤": [t: "white spade suit"] # 0x2664 - - "♥": [t: "black heart suit"] # 0x2665 - - "♦": [t: "black diamond suit"] # 0x2666 - - "♧": [t: "white club suit"] # 0x2667 - - "⚀": [t: "die face 1"] # 0x2680 - - "⚁": [t: "die face 2"] # 0x2681 - - "⚂": [t: "die face 3"] # 0x2682 - - "⚃": [t: "die face 4"] # 0x2683 - - "⚄": [t: "die face 5"] # 0x2684 - - "⚅": [t: "die face 6"] # 0x2685 - - "⚆": [t: "white circle with dot right"] # 0x2686 - - "⚇": [t: "white circle wiht two dots"] # 0x2687 - - "⚈": [t: "black circle with dot right"] # 0x2688 - - "⚉": [t: "black circle wiht two dots"] # 0x2689 - - "⚪": [t: "medium white circle"] # 0x26aa - - "⚫": [t: "medium black circle"] # 0x26ab - - "⚬": [t: "medium small white circle"] # 0x26ac - - "⚲": [t: "neuter"] # 0x26b2 - - "✓": [t: "check mark"] # 0x2713 - - "✠": [t: "maltese cross"] # 0x2720 - - "✪": [t: "circled white star"] # 0x272a - - "✶": [t: "six pionted black star"] # 0x2736 - - "❨": [t: "medium left parentheses ornament"] # 0x2768 - - "❩": [t: "medium right parentheses ornament"] # 0x2769 - - "❪": [t: "medium flattened left parentheses ornament"] # 0x276a - - "❫": [t: "medium flattened right parentheses ornament"] # 0x276b - - "❬": [t: "medium left-pointing angle bracket ornament"] # 0x276c - - "❭": [t: "medium right-pointing angle bracket ornament"] # 0x276d - - "❮": [t: "heavy left-pointing angle quotation mark ornament"] # 0x276e - - "❯": [t: "heavy right-pointing angle quotation mark ornament"] # 0x276f - - "❰": [t: "heavy left-pointing angle bracket ornament"] # 0x2770 - - "❱": [t: "heavy right-pointing angle bracket ornament"] # 0x2771 - - "❲": [t: "light left tortoise shell bracket ornament"] # 0x2772 - - "❳": [t: "light right tortoise shell bracket ornament"] # 0x2773 - - "❴": [t: "medium left brace ornament"] # 0x2774 - - "❵": [t: "medium right brace ornament"] # 0x2775 - - "❶": [t: "black circled one"] # 0x2776 - - "❷": [t: "black circled two"] # 0x2777 - - "❸": [t: "black circled three"] # 0x2778 - - "❹": [t: "black circled four"] # 0x2779 - - "❺": [t: "black circled five"] # 0x277a - - "❻": [t: "black circled six"] # 0x277b - - "❼": [t: "black circled seven"] # 0x277c - - "❽": [t: "black circled eight"] # 0x277d - - "❾": [t: "black circled nine"] # 0x277e - - "❿": [t: "black circled ten"] # 0x277f - - "➀": [t: "circled sans serif one"] # 0x2780 - - "➁": [t: "circled sans serif two"] # 0x2781 - - "➂": [t: "circled sans serif three"] # 0x2782 - - "➃": [t: "circled sans serif four"] # 0x2783 - - "➄": [t: "circled sans serif five"] # 0x2784 - - "➅": [t: "circled sans serif six"] # 0x2785 - - "➆": [t: "circled sans serif seven"] # 0x2786 - - "➇": [t: "circled sans serif eight"] # 0x2787 - - "➈": [t: "circled sans serif nine"] # 0x2788 - - "➉": [t: "circled sans serif ten"] # 0x2789 - - "➊": [t: "black circled sans serif one"] # 0x278a - - "➋": [t: "black circled sans serif two"] # 0x278b - - "➌": [t: "black circled sans serif three"] # 0x278c - - "➍": [t: "black circled sans serif four"] # 0x278d - - "➎": [t: "black circled sans serif five"] # 0x278e - - "➏": [t: "black circled sans serif six"] # 0x278f - - "➐": [t: "black circled sans serif seven"] # 0x2790 - - "➑": [t: "black circled sans serif eight"] # 0x2791 - - "➒": [t: "black circled sans serif nine"] # 0x2792 - - "➓": [t: "black circled sans serif ten"] # 0x2793 - - "➔": [t: "heavy wide-headed right arrow"] # 0x2794 - - "➕": [t: "heavy plus sign"] # 0x2795 - - "➖": [t: "heavy minus sign"] # 0x2796 - - "➗": [t: "heavy division sign"] # 0x2797 - - "➘": [t: "heavy south east arrow"] # 0x2798 - - "➙": [t: "heavy right arrow"] # 0x2799 - - "➚": [t: "heavy north east arrow"] # 0x279a - - "➛": [t: "drafting point right arrow"] # 0x279b - - "➜": [t: "heavy round-tipped right arrow"] # 0x279c - - "➝": [t: "triangle-headed right arrow"] # 0x279d - - "➞": [t: "heavy triangle-headed right arrow"] # 0x279e - - "➟": [t: "dashed triangle-headed right arrow"] # 0x279f - - "➠": [t: "heavy dashed triangle-headed right arrow"] # 0x27a0 - - "➡": [t: "black right arrow"] # 0x27a1 - - "➢": [t: "three d top lighted right arrow"] # 0x27a2 - - "➣": [t: "three d bottom lighted right arrow"] # 0x27a3 - - "➤": [t: "black right arrowhead"] # 0x27a4 - - "➥": [t: "heavy black curved down and right arrow"] # 0x27a5 - - "➦": [t: "heavy black curved up and right arrow"] # 0x27a6 - - "➧": [t: "squat black right arrow"] # 0x27a7 - - "➨": [t: "heavy concave-pointed black right arrow"] # 0x27a8 - - "➩": [t: "right-shaded white right arrow"] # 0x27a9 - - "➪": [t: "left-shaded white right arrow"] # 0x27aa - - "➫": [t: "back-tilted shadowed white right arrow"] # 0x27ab - - "➬": [t: "front-tilted shadowed white right arrow"] # 0x27ac - - "➭": [t: "heavy lower right-shadowed white right arrow"] # 0x27ad - - "➮": [t: "heavy upper right-shadowed white right arrow"] # 0x27ae - - "➯": [t: "notched lower right-shadowed white right arrow"] # 0x27af - - "➱": [t: "notched upper right-shadowed white right arrow"] # 0x27b1 - - "➲": [t: "circled heavy white right arrow"] # 0x27b2 - - "➳": [t: "white-feathered right arrow"] # 0x27b3 - - "➴": [t: "black-feathered south east arrow"] # 0x27b4 - - "➵": [t: "black-feathered right arrow"] # 0x27b5 - - "➶": [t: "black-feathered north east arrow"] # 0x27b6 - - "➷": [t: "heavy black-feathered south east arrow"] # 0x27b7 - - "➸": [t: "heavy black-feathered right arrow"] # 0x27b8 - - "➹": [t: "heavy black-feathered north east arrow"] # 0x27b9 - - "➺": [t: "teradrop-barbed right arrow"] # 0x27ba - - "➻": [t: "heavy teardrop-shanked right arrow"] # 0x27bb - - "➼": [t: "wedge-tailed right arrow"] # 0x27bc - - "➽": [t: "heavy wedge-tailed right arrow"] # 0x27bd - - "➾": [t: "open-outlined right arrow"] # 0x27be - - "⟀": [t: "three dimensional angle"] # 0x27c0 - - "⟁": [t: "white triangle containing small white triangle"] # 0x27c1 - - "⟂": # 0x27c2 - - test: - if: "$Verbosity!='Terse'" - then: [t: "is"] - - t: "perpendicular to" - - "⟃": # 0x27c3 - - test: - if: "$Verbosity!='Terse'" - then: [t: "is"] - - t: "an open subset of" - - "⟄": # 0x27c4 - - test: - if: "$Verbosity!='Terse'" - then: [t: "is"] - - t: "an open superset of" - - "⟅": [t: "left s-shaped bag delimiter"] # 0x27c5 - - "⟆": [t: "right s-shaped bag delimiter"] # 0x27c6 - - "⟇": [t: "or with dot inside"] # 0x27c7 - - "⟈": [t: "reverse solidus preceding subset"] # 0x27c8 - - "⟉": [t: "superset preceding solidus"] # 0x27c9 - - "⟊": [t: "vertical bar with horizontal stroke"] # 0x27ca - - "⟋": [t: "mathematical rising diagonal"] # 0x27cb - - "⟌": [t: "long division"] # 0x27cc - - "⟍": [t: "mathematical falling diagonal"] # 0x27cd - - "⟎": [t: "squared logical and"] # 0x27ce - - "⟏": [t: "squared logical or"] # 0x27cf - - "⟐": [t: "white diamond with centered dot"] # 0x27d0 - - "⟑": [t: "and with dot"] # 0x27d1 - - "⟒": [t: "element of opening up"] # 0x27d2 - - "⟓": [t: "lower right corner with dot"] # 0x27d3 - - "⟔": [t: "upper left corner with dot"] # 0x27d4 - - "⟕": [t: "left outer join"] # 0x27d5 - - "⟖": [t: "right outer join"] # 0x27d6 - - "⟗": [t: "full outer join"] # 0x27d7 - - "⟘": [t: "large up tack"] # 0x27d8 - - "⟙": [t: "large down tack"] # 0x27d9 - - "⟚": [t: "left and right double turnstile"] # 0x27da - - "⟛": [t: "left and right tack"] # 0x27db - - "⟜": [t: "left multimap"] # 0x27dc - - "⟝": [t: "long right tack"] # 0x27dd - - "⟞": [t: "long left tack"] # 0x27de - - "⟟": [t: "up tack with circle above"] # 0x27df - - "⟠": [t: "lozenge divided by horizontal rule"] # 0x27e0 - - "⟡": [t: "white concave sided diamond"] # 0x27e1 - - "⟢": [t: "white concave sided diamond with left tick"] # 0x27e2 - - "⟣": [t: "white concave sided diamond with right tick"] # 0x27e3 - - "⟤": [t: "white square with left tick"] # 0x27e4 - - "⟥": [t: "white square with right tick"] # 0x27e5 - - "⟦": [t: "left white square bracket"] # 0x27e6 - - "⟧": [t: "right white square bracket"] # 0x27e7 - - "⟨": [t: "left angle bracket"] # 0x27e8 - - "⟩": [t: "right angle bracket"] # 0x27e9 - - "⟪": [t: "left double angle bracket"] # 0x27ea - - "⟫": [t: "right double angle bracket"] # 0x27eb - - "⟬": [t: "left white tortoise shell bracket"] # 0x27ec - - "⟭": [t: "right white tortoise shell bracket"] # 0x27ed - - "⟮": [t: "left flattened parenthesis"] # 0x27ee - - "⟯": [t: "right flattened parenthesis"] # 0x27ef - - "⟰": [t: "up quadruple arrow"] # 0x27f0 - - "⟱": [t: "down quadruple arrow"] # 0x27f1 - - "⟲": [t: "anticlockwise gapped circle arrow"] # 0x27f2 - - "⟳": [t: "clockwise gapped circle arrow"] # 0x27f3 - - "⟴": [t: "right arrow with circled plus"] # 0x27f4 - - "⟵": [t: "long left arrow"] # 0x27f5 - - "⟶": [t: "long right arrow"] # 0x27f6 - - "⟷": [t: "long left right arrow"] # 0x27f7 - - "⟸": [t: "long left double arrow"] # 0x27f8 - - "⟹": [t: "implies"] # 0x27f9 - - "⟺": [t: "if and only if"] # 0x27fa - - "⟻": [t: "long left arrow from bar"] # 0x27fb - - "⟼": [t: "long right arrow from bar"] # 0x27fc - - "⟽": [t: "long left double arrow from bar"] # 0x27fd - - "⟾": [t: "long right double arrow from bar"] # 0x27fe - - "⟿": [t: "long right squiggle arrow"] # 0x27ff - - "⤀": [t: "right two headed arrow with vertical stroke"] # 0x2900 - - "⤁": [t: "right two headed arrow with double vertical stroke"] # 0x2901 - - "⤂": [t: "left double arrow with vertical stroke"] # 0x2902 - - "⤃": [t: "right double arrow with vertical stroke"] # 0x2903 - - "⤄": [t: "left right double arrow with vertical stroke"] # 0x2904 - - "⤅": [t: "right two headed arrow from bar"] # 0x2905 - - "⤆": [t: "left double arrow from bar"] # 0x2906 - - "⤇": [t: "right double arrow from bar"] # 0x2907 - - "⤈": [t: "down arrow with horizontal stroke"] # 0x2908 - - "⤉": [t: "up arrow with horizontal stroke"] # 0x2909 - - "⤊": [t: "up triple arrow"] # 0x290a - - "⤋": [t: "down triple arrow"] # 0x290b - - "⤌": [t: "left double dash arrow"] # 0x290c - - "⤍": [t: "right double dash arrow"] # 0x290d - - "⤎": [t: "left triple dash arrow"] # 0x290e - - "⤏": [t: "right triple dash arrow"] # 0x290f - - "⤐": [t: "right two headed triple dash arrow"] # 0x2910 - - "⤑": [t: "right arrow with dotted stem"] # 0x2911 - - "⤒": [t: "up arrow to bar"] # 0x2912 - - "⤓": [t: "down arrow to bar"] # 0x2913 - - "⤔": [t: "right arrow with tail and vertical stroke"] # 0x2914 - - "⤕": [t: "right arrow with tail and double vertical stroke"] # 0x2915 - - "⤖": [t: "right two headed arrow with tail"] # 0x2916 - - "⤗": [t: "right two headed arrow with tail with vertical stroke"] # 0x2917 - - "⤘": [t: "right two headed arrow with tail with double vertical stroke"] # 0x2918 - - "⤙": [t: "left arrow tail"] # 0x2919 - - "⤚": [t: "right arrow tail"] # 0x291a - - "⤛": [t: "left double arrow tail"] # 0x291b - - "⤜": [t: "right double arrow tail"] # 0x291c - - "⤝": [t: "left arrow to filled diamond"] # 0x291d - - "⤞": [t: "right arrow to filled diamond"] # 0x291e - - "⤟": [t: "left arrow from bar to filled diamond"] # 0x291f - - "⤠": [t: "right arrow from bar to filled diamond"] # 0x2920 - - "⤡": [t: "north west and south east arrow"] # 0x2921 - - "⤢": [t: "north east and south west arrow"] # 0x2922 - - "⤣": [t: "north west arrow with hook"] # 0x2923 - - "⤤": [t: "north east arrow with hook"] # 0x2924 - - "⤥": [t: "south east arrow with hook"] # 0x2925 - - "⤦": [t: "south west arrow with hook"] # 0x2926 - - "⤧": [t: "north west arrow and north east arrow"] # 0x2927 - - "⤨": [t: "north east arrow and south east arrow"] # 0x2928 - - "⤩": [t: "south east arrow and south west arrow"] # 0x2929 - - "⤪": [t: "south west arrow and north west arrow"] # 0x292a - - "⤫": [t: "rising diagonal crossing falling diagonal"] # 0x292b - - "⤬": [t: "falling diagonal crossing rising diagonal"] # 0x292c - - "⤭": [t: "south east arrow crossing north east arrow"] # 0x292d - - "⤮": [t: "north east arrow crossing south east arrow"] # 0x292e - - "⤯": [t: "falling diagonal crossing north east arrow"] # 0x292f - - "⤰": [t: "rising diagonal crossing south east arrow"] # 0x2930 - - "⤱": [t: "north east arrow crossing north west arrow"] # 0x2931 - - "⤲": [t: "north west arrow crossing north east arrow"] # 0x2932 - - "⤳": [t: "wave arrow pointing directly right"] # 0x2933 - - "⤴": [t: "arrow pointing right then curving up"] # 0x2934 - - "⤵": [t: "arrow pointing right then curving down"] # 0x2935 - - "⤶": [t: "arrow pointing down then curving left"] # 0x2936 - - "⤷": [t: "arrow pointing down then curving right"] # 0x2937 - - "⤸": [t: "right side arc clockwise arrow"] # 0x2938 - - "⤹": [t: "left side arc anticlockwise arrow"] # 0x2939 - - "⤺": [t: "top arc anticlockwise arrow"] # 0x293a - - "⤻": [t: "bottom arc anticlockwise arrow"] # 0x293b - - "⤼": [t: "top arc clockwise arrow with minus"] # 0x293c - - "⤽": [t: "top arc anticlockwise arrow with plus"] # 0x293d - - "⤾": [t: "lower right semicircular clockwise arrow"] # 0x293e - - "⤿": [t: "lower left semicircular anticlockwise arrow"] # 0x293f - - "⥀": [t: "anticlockwise closed circle arrow"] # 0x2940 - - "⥁": [t: "clockwise closed circle arrow"] # 0x2941 - - "⥂": [t: "right arrow above short left arrow"] # 0x2942 - - "⥃": [t: "left arrow above short right arrow"] # 0x2943 - - "⥄": [t: "short right arrow above left arrow"] # 0x2944 - - "⥅": [t: "right arrow with plus below"] # 0x2945 - - "⥆": [t: "left arrow with plus below"] # 0x2946 - - "⥇": [t: "right arrow through x"] # 0x2947 - - "⥈": [t: "left right arrow through circle"] # 0x2948 - - "⥉": [t: "up two headed arrow from circle"] # 0x2949 - - "⥊": [t: "left barb up right barb down harpoon"] # 0x294a - - "⥋": [t: "left barb down right barb up harpoon"] # 0x294b - - "⥌": [t: "up barb right down barb left harpoon"] # 0x294c - - "⥍": [t: "up barb left down barb right harpoon"] # 0x294d - - "⥎": [t: "left barb up right barb up harpoon"] # 0x294e - - "⥏": [t: "up barb right down barb right harpoon"] # 0x294f - - "⥐": [t: "left barb down right barb down harpoon"] # 0x2950 - - "⥑": [t: "up barb left down barb left harpoon"] # 0x2951 - - "⥒": [t: "left harpoon with barb up to bar"] # 0x2952 - - "⥓": [t: "right harpoon with barb up to bar"] # 0x2953 - - "⥔": [t: "up harpoon with barb right to bar"] # 0x2954 - - "⥕": [t: "down harpoon with barb right to bar"] # 0x2955 - - "⥖": [t: "left harpoon with barb down to bar"] # 0x2956 - - "⥗": [t: "right harpoon with barb down to bar"] # 0x2957 - - "⥘": [t: "up harpoon with barb left to bar"] # 0x2958 - - "⥙": [t: "down harpoon with barb left to bar"] # 0x2959 - - "⥚": [t: "left harpoon with barb up from bar"] # 0x295a - - "⥛": [t: "right harpoon with barb up from bar"] # 0x295b - - "⥜": [t: "up harpoon with barb right from bar"] # 0x295c - - "⥝": [t: "down harpoon with barb right from bar"] # 0x295d - - "⥞": [t: "left harpoon with barb down from bar"] # 0x295e - - "⥟": [t: "right harpoon with barb down from bar"] # 0x295f - - "⥠": [t: "up harpoon with barb left from bar"] # 0x2960 - - "⥡": [t: "down harpoon with barb left from bar"] # 0x2961 - - "⥢": [t: "left harpoon with barb up above left harpoon with barb down"] # 0x2962 - - "⥣": [t: "up harpoon with barb left beside up harpoon with barb right"] # 0x2963 - - "⥤": [t: "right harpoon with barb up above right harpoon with barb down"] # 0x2964 - - "⥥": [t: "down harpoon with barb left beside down harpoon with barb right"] # 0x2965 - - "⥦": [t: "left harpoon with barb up above right harpoon with barb up"] # 0x2966 - - "⥧": [t: "left harpoon with barb down above right harpoon with barb down"] # 0x2967 - - "⥨": [t: "right harpoon with barb up above left harpoon with barb up"] # 0x2968 - - "⥩": [t: "right harpoon with barb down above left harpoon with barb down"] # 0x2969 - - "⥪": [t: "left harpoon with barb up above long dash"] # 0x296a - - "⥫": [t: "left harpoon with barb down below long dash"] # 0x296b - - "⥬": [t: "right harpoon with barb up above long dash"] # 0x296c - - "⥭": [t: "right harpoon with barb down below long dash"] # 0x296d - - "⥮": [t: "up harpoon with barb left beside down harpoon with barb right"] # 0x296e - - "⥯": [t: "down harpoon with barb left beside up harpoon with barb right"] # 0x296f - - "⥰": [t: "right double arrow with rounded head"] # 0x2970 - - "⥱": [t: "equals above right arrow"] # 0x2971 - - "⥲": [t: "tilde operator above right arrow"] # 0x2972 - - "⥳": [t: "left arrow above tilde operator"] # 0x2973 - - "⥴": [t: "right arrow above tilde operator"] # 0x2974 - - "⥵": [t: "right arrow above almost equal to"] # 0x2975 - - "⥶": [t: "less than above left arrow"] # 0x2976 - - "⥷": [t: "left arrow through less than"] # 0x2977 - - "⥸": [t: "greater than above right arrow"] # 0x2978 - - "⥹": [t: "subset above right arrow"] # 0x2979 - - "⥺": [t: "left arrow through subset"] # 0x297a - - "⥻": [t: "superset above left arrow"] # 0x297b - - "⥼": [t: "left fish tail"] # 0x297c - - "⥽": [t: "right fish tail"] # 0x297d - - "⥾": [t: "up fish tail"] # 0x297e - - "⥿": [t: "down fish tail"] # 0x297f - - "⦀": [t: "triple vertical bar delimiter"] # 0x2980 - - "⦁": [t: "z notation spot"] # 0x2981 - - "⦂": [t: "z notation type colon"] # 0x2982 - - "⦃": [t: "left white brace"] # 0x2983 - - "⦄": [t: "right white brace"] # 0x2984 - - "⦅": [t: "left white parenthesis"] # 0x2985 - - "⦆": [t: "right white parenthesis"] # 0x2986 - - "⦇": [t: "z notation left image bracket"] # 0x2987 - - "⦈": [t: "z notation right image bracket"] # 0x2988 - - "⦉": [t: "z notation left binding bracket"] # 0x2989 - - "⦊": [t: "z notation right binding bracket"] # 0x298a - - "⦋": [t: "left square bracket with underbar"] # 0x298b - - "⦌": [t: "right square bracket with underbar"] # 0x298c - - "⦍": [t: "left square bracket with tick in top corner"] # 0x298d - - "⦎": [t: "right square bracket with tick in bottom corner"] # 0x298e - - "⦏": [t: "left square bracket with tick in bottom corner"] # 0x298f - - "⦐": [t: "right square bracket with tick in top corner"] # 0x2990 - - "⦑": [t: "left angle bracket with dot"] # 0x2991 - - "⦒": [t: "right angle bracket with dot"] # 0x2992 - - "⦓": [t: "left arc less than bracket"] # 0x2993 - - "⦔": [t: "right arc greater than bracket"] # 0x2994 - - "⦕": [t: "double left arc greater than bracket"] # 0x2995 - - "⦖": [t: "double right arc less than bracket"] # 0x2996 - - "⦗": [t: "left black tortoise shell bracket"] # 0x2997 - - "⦘": [t: "right black tortoise shell bracket"] # 0x2998 - - "⦙": [t: "dotted fence"] # 0x2999 - - "⦚": [t: "vertical zigzag line"] # 0x299a - - "⦛": [t: "measured angle opening left"] # 0x299b - - "⦜": [t: "right angle variant with square"] # 0x299c - - "⦝": [t: "measured right angle with dot"] # 0x299d - - "⦞": [t: "angle with s inside"] # 0x299e - - "⦟": [t: "acute angle"] # 0x299f - - "⦠": [t: "spherical angle opening left"] # 0x29a0 - - "⦡": [t: "spherical angle opening up"] # 0x29a1 - - "⦢": [t: "turned angle"] # 0x29a2 - - "⦣": [t: "reversed angle"] # 0x29a3 - - "⦤": [t: "angle with underbar"] # 0x29a4 - - "⦥": [t: "reversed angle with underbar"] # 0x29a5 - - "⦦": [t: "oblique angle opening up"] # 0x29a6 - - "⦧": [t: "oblique angle opening down"] # 0x29a7 - - "⦨": [t: "measured angle with open arm ending in arrow pointing up and to the right"] # 0x29a8 - - "⦩": [t: "measured angle with open arm ending in arrow pointing up and to the left"] # 0x29a9 - - "⦪": [t: "measured angle with open arm ending in arrow pointing down and to the right"] # 0x29aa - - "⦫": [t: "measured angle with open arm ending in arrow pointing down and to the left"] # 0x29ab - - "⦬": [t: "measured angle with open arm ending in arrow pointing right and up"] # 0x29ac - - "⦭": [t: "measured angle with open arm ending in arrow pointing left and up"] # 0x29ad - - "⦮": [t: "measured angle with open arm ending in arrow pointing right and down"] # 0x29ae - - "⦯": [t: "measured angle with open arm ending in arrow pointing left and down"] # 0x29af - - "⦰": [t: "reversed empty set"] # 0x29b0 - - "⦱": [t: "empty set with overbar"] # 0x29b1 - - "⦲": [t: "empty set with small circle above"] # 0x29b2 - - "⦳": [t: "empty set with right arrow above"] # 0x29b3 - - "⦴": [t: "empty set with left arrow above"] # 0x29b4 - - "⦵": [t: "circle with horizontal bar"] # 0x29b5 - - "⦶": [t: "circled vertical bar"] # 0x29b6 - - "⦷": [t: "circled parallel"] # 0x29b7 - - "⦸": [t: "circled reverse solidus"] # 0x29b8 - - "⦹": [t: "circled perpendicular"] # 0x29b9 - - "⦺": [t: "circled divided by horizontal bar and top half divided by vertical bar"] # 0x29ba - - "⦻": [t: "circle with superimposed x"] # 0x29bb - - "⦼": [t: "circled anticlockwise rotated division sign"] # 0x29bc - - "⦽": [t: "up arrow through circle"] # 0x29bd - - "⦾": [t: "circled white bullet"] # 0x29be - - "⦿": [t: "circled bullet"] # 0x29bf - - "⧀": [t: "circled less than"] # 0x29c0 - - "⧁": [t: "circled greater than"] # 0x29c1 - - "⧂": [t: "circle with small circle to the right"] # 0x29c2 - - "⧃": [t: "circle with two horizontal strokes to the right"] # 0x29c3 - - "⧄": [t: "squared rising diagonal slash"] # 0x29c4 - - "⧅": [t: "squared falling diagonal slash"] # 0x29c5 - - "⧆": [t: "squared asterisk"] # 0x29c6 - - "⧇": [t: "squared small circle"] # 0x29c7 - - "⧈": [t: "squared square"] # 0x29c8 - - "⧉": [t: "two joined squares"] # 0x29c9 - - "⧊": [t: "triangle with dot above"] # 0x29ca - - "⧋": [t: "triangle with underbar"] # 0x29cb - - "⧌": [t: "s in triangle"] # 0x29cc - - "⧍": [t: "triangle with serifs at bottom"] # 0x29cd - - "⧎": [t: "right triangle above left triangle"] # 0x29ce - - "⧏": [t: "left triangle beside vertical bar"] # 0x29cf - - "⧐": [t: "vertical bar beside right triangle"] # 0x29d0 - - "⧑": [t: "bowtie with left half black"] # 0x29d1 - - "⧒": [t: "bowtie with right half black"] # 0x29d2 - - "⧓": [t: "black bowtie"] # 0x29d3 - - "⧔": [t: "times with left half black"] # 0x29d4 - - "⧕": [t: "times with right half black"] # 0x29d5 - - "⧖": [t: "white hourglass"] # 0x29d6 - - "⧗": [t: "black hourglass"] # 0x29d7 - - "⧘": [t: "left wiggly fence"] # 0x29d8 - - "⧙": [t: "right wiggly fence"] # 0x29d9 - - "⧚": [t: "left double wiggly fence"] # 0x29da - - "⧛": [t: "right double wiggly fence"] # 0x29db - - "⧜": [t: "incomplete infinity"] # 0x29dc - - "⧝": [t: "tie over infinity"] # 0x29dd - - "⧞": [t: "infinity negated with vertical bar"] # 0x29de - - "⧟": [t: "double-ended multimap"] # 0x29df - - "⧠": [t: "square with contoured outline"] # 0x29e0 - - "⧡": [t: "increases as"] # 0x29e1 - - "⧢": [t: "shuffle product"] # 0x29e2 - - "⧣": [t: "equals sign and slanted parallel"] # 0x29e3 - - "⧤": [t: "equals sign and slanted parallel with tilde above"] # 0x29e4 - - "⧥": [t: "identical to and slanted parallel"] # 0x29e5 - - "⧦": [t: "gleich stark"] # 0x29e6 - - "⧧": [t: "thermodynamic"] # 0x29e7 - - "⧨": [t: "down pointing triangle with left half black"] # 0x29e8 - - "⧩": [t: "down pointing triangle with right half black"] # 0x29e9 - - "⧪": [t: "black diamond with down arrow"] # 0x29ea - - "⧫": [t: "black lozenge"] # 0x29eb - - "⧬": [t: "white circle with down arrow"] # 0x29ec - - "⧭": [t: "black circle with down arrow"] # 0x29ed - - "⧮": [t: "error-barred white square"] # 0x29ee - - "⧯": [t: "error-barred black square"] # 0x29ef - - "⧰": [t: "error-barred white diamond"] # 0x29f0 - - "⧱": [t: "error-barred black diamond"] # 0x29f1 - - "⧲": [t: "error-barred white circle"] # 0x29f2 - - "⧳": [t: "error-barred black circle"] # 0x29f3 - - "⧴": [t: "rule-delayed"] # 0x29f4 - - "⧵": [t: "reverse solidus operator"] # 0x29f5 - - "⧶": [t: "solidus with overbar"] # 0x29f6 - - "⧷": [t: "reverse solidus with horizontal stroke"] # 0x29f7 - - "⧸": [t: "big solidus"] # 0x29f8 - - "⧹": [t: "big reverse solidus"] # 0x29f9 - - "⧺": [t: "double plus"] # 0x29fa - - "⧻": [t: "triple plus"] # 0x29fb - - "⧼": [t: "left pointing curved angle bracket"] # 0x29fc - - "⧽": [t: "right pointing curved angle bracket"] # 0x29fd - - "⧾": [t: "tiny"] # 0x29fe - - "⧿": [t: "miny"] # 0x29ff - - "⨀": [t: "circled dot operator"] # 0x2a00 - - "⨁": [t: "circled plus operator"] # 0x2a01 - - "⨂": [t: "circled times operator"] # 0x2a02 - - "⨃": [t: "union operator with dot"] # 0x2a03 - - "⨄": [t: "union operator with plus"] # 0x2a04 - - "⨅": [t: "square intersection operator"] # 0x2a05 - - "⨆": [t: "square union operator"] # 0x2a06 - - "⨇": [t: "two logical and operator"] # 0x2a07 - - "⨈": [t: "two logical or operator"] # 0x2a08 - - "⨉": [t: "times operator"] # 0x2a09 - - "⨊": [t: "modulo two sum"] # 0x2a0a - - "⨋": [t: "summation with integral"] # 0x2a0b - - "⨌": [t: "quadruple integral operator"] # 0x2a0c - - "⨍": [t: "finite part integral"] # 0x2a0d - - "⨎": [t: "integral with double stroke"] # 0x2a0e - - "⨏": [t: "integral average with slash"] # 0x2a0f - - "⨐": [t: "circulation function"] # 0x2a10 - - "⨑": [t: "anticlockwise integration"] # 0x2a11 - - "⨒": [t: "line integration with rectangular path around pole"] # 0x2a12 - - "⨓": [t: "line integration with semicircular path around pole"] # 0x2a13 - - "⨔": [t: "line integration not including the pole"] # 0x2a14 - - "⨕": [t: "integral around a point operator"] # 0x2a15 - - "⨖": [t: "quaternion integral operator"] # 0x2a16 - - "⨗": [t: "integral with left arrow with hook"] # 0x2a17 - - "⨘": [t: "integral with times sign"] # 0x2a18 - - "⨙": [t: "integral with intersection"] # 0x2a19 - - "⨚": [t: "integral with union"] # 0x2a1a - - "⨛": [t: "integral with overbar"] # 0x2a1b - - "⨜": [t: "integral with underbar"] # 0x2a1c - - "⨝": [t: "join"] # 0x2a1d - - "⨞": [t: "large left triangle operator"] # 0x2a1e - - "⨟": [t: "z notation schema composition"] # 0x2a1f - - "⨠": [t: "z notation schema piping"] # 0x2a20 - - "⨡": [t: "z notation schema projection"] # 0x2a21 - - "⨢": [t: "plus sign with circle above"] # 0x2a22 - - "⨣": [t: "plus sign with circumflex accent above"] # 0x2a23 - - "⨤": [t: "plus sign with tilde above"] # 0x2a24 - - "⨥": [t: "plus sign with dot below"] # 0x2a25 - - "⨦": [t: "plus sign with tilde below"] # 0x2a26 - - "⨧": [t: "plus sign with subscript two"] # 0x2a27 - - "⨨": [t: "plus sign with black triangle"] # 0x2a28 - - "⨩": [t: "minus sign with comma above"] # 0x2a29 - - "⨪": [t: "minus sign with dot below"] # 0x2a2a - - "⨫": [t: "minus sign with falling dots"] # 0x2a2b - - "⨬": [t: "minus sign with rising dots"] # 0x2a2c - - "⨭": [t: "plus sign in left half circle"] # 0x2a2d - - "⨮": [t: "plus sign in right half circle"] # 0x2a2e - - "⨯": # 0x2a2f + - "⓾": [t: "dupla bekarikázott tízes"] # 0x24fe (en: 'double circled ten', DeepL translation) + - "⓿": [t: "fekete bekarikázott nulla"] # 0x24ff (en: 'black circled zero', DeepL translation) + - "■": [t: "fekete négyzet"] # 0x25a0 (en: 'black square', DeepL translation) + - "□": [t: "fehér négyzet"] # 0x25a1 (en: 'white square', DeepL translation) + - "▢": [t: "fehér négyzet lekerekített sarkokkal"] # 0x25a2 (en: 'white square with rounded corners', DeepL translation) + - "▣": [t: "fehér négyzet, amely kis fekete négyzetet tartalmaz"] # 0x25a3 (en: 'white square containing small black square', DeepL translation) + - "▤": [t: "négyzet vízszintes kitöltéssel"] # 0x25a4 (en: 'square with horizontal fill', DeepL translation) + - "▥": [t: "négyzet függőleges kitöltéssel"] # 0x25a5 (en: 'square with vertical fill', DeepL translation) + - "▦": [t: "négyzet ortogonális kereszthúzással kitöltve"] # 0x25a6 (en: 'square with orthogonal crosshatch fill', DeepL translation) + - "▧": [t: "négyzet bal felső és jobb alsó kitöltéssel"] # 0x25a7 (en: 'square with upper left to lower right fill', DeepL translation) + - "▨": [t: "négyzet jobb felsővel bal alsó kitöltés"] # 0x25a8 (en: 'square with upper right to lower left fill', DeepL translation) + - "▩": [t: "négyzet átlós kereszthúzással kitöltve"] # 0x25a9 (en: 'square with diagonal crosshatch fill', DeepL translation) + - "▪": [t: "fekete kis négyzet"] # 0x25aa (en: 'black small square', DeepL translation) + - "▫": [t: "fehér kis négyzet"] # 0x25ab (en: 'white small square', DeepL translation) + - "▬": [t: "fekete téglalap"] # 0x25ac (en: 'black rectangle', DeepL translation) + - "▭": [t: "fehér téglalap"] # 0x25ad (en: 'white rectangle', DeepL translation) + - "▮": [t: "fekete függőleges téglalap"] # 0x25ae (en: 'black vertical rectangle', DeepL translation) + - "▯": [t: "fehér függőleges téglalap"] # 0x25af (en: 'white vertical rectangle', DeepL translation) + - "▰": [t: "fekete párhuzamos"] # 0x25b0 (en: 'black parallelogram', DeepL translation) + - "▱": [t: "fehér párhuzamos"] # 0x25b1 (en: 'white parallelogram', DeepL translation) + - "▲": [t: "fekete felfelé mutató háromszög"] # 0x25b2 (en: 'black up pointing triangle', DeepL translation) + - "△": [t: "háromszög"] # 0x25b3 (en: 'triangle', DeepL translation) + - "▴": [t: "fekete felfelé mutató kis háromszög"] # 0x25b4 (en: 'black up pointing small triangle', DeepL translation) + - "▵": [t: "fehér felfelé mutató kis háromszög"] # 0x25b5 (en: 'white up pointing small triangle', DeepL translation) + - "▶": [t: "fekete jobbra mutató háromszög"] # 0x25b6 (en: 'black right pointing triangle', DeepL translation) + - "▷": [t: "fehér jobbra mutató háromszög"] # 0x25b7 (en: 'white right pointing triangle', DeepL translation) + - "▸": [t: "fekete jobbra mutató kis háromszög"] # 0x25b8 (en: 'black right pointing small triangle', DeepL translation) + - "▹": [t: "fehér jobbra mutató kis háromszög"] # 0x25b9 (en: 'white right pointing small triangle', DeepL translation) + - "►": [t: "fekete jobbra mutató mutató"] # 0x25ba (en: 'black right pointing pointer', DeepL translation) + - "▻": [t: "fehér jobbra mutató mutató"] # 0x25bb (en: 'white right pointing pointer', DeepL translation) + - "▼": [t: "fekete lefelé mutató háromszög"] # 0x25bc (en: 'black down pointing triangle', DeepL translation) + - "▽": [t: "fehér lefelé mutató háromszög"] # 0x25bd (en: 'white down pointing triangle', DeepL translation) + - "▾": [t: "fekete lefelé mutató kis háromszög"] # 0x25be (en: 'black down pointing small triangle', DeepL translation) + - "▿": [t: "fehér lefelé mutató kis háromszög"] # 0x25bf (en: 'white down pointing small triangle', DeepL translation) + - "◀": [t: "fekete balra mutató háromszög"] # 0x25c0 (en: 'black left pointing triangle', DeepL translation) + - "◁": [t: "fehér balra mutató kis háromszög"] # 0x25c1 (en: 'white left pointing triangle', DeepL translation) + - "◂": [t: "fekete balra mutató kis háromszög"] # 0x25c2 (en: 'black left pointing small triangle', DeepL translation) + - "◃": [t: "fehér balra mutató kis háromszög"] # 0x25c3 (en: 'white left pointing small triangle', DeepL translation) + - "◄": [t: "fekete balra mutató mutató"] # 0x25c4 (en: 'black left pointing pointer', DeepL translation) + - "◅": [t: "fehér balra mutató mutató mutató"] # 0x25c5 (en: 'white left pointing pointer', DeepL translation) + - "◆": [t: "fekete gyémánt"] # 0x25c6 (en: 'black diamond', DeepL translation) + - "◇": [t: "fehér rombusz"] # 0x25c7 (en: 'white diamond', DeepL translation) + - "◈": [t: "fehér rombusz, benne fekete kis rombusz"] # 0x25c8 (en: 'white diamond containing black small diamond', DeepL translation) + - "◉": [t: "halszem"] # 0x25c9 (en: 'fisheye', DeepL translation) + - "◊": [t: "rozettás"] # 0x25ca (en: 'lozenge', DeepL translation) + - "○": [t: "fehér kör"] # 0x25cb (en: 'white circle', DeepL translation) + - "◌": [t: "pontozott kör"] # 0x25cc (en: 'dotted circle', DeepL translation) + - "◍": [t: "kör függőleges kitöltéssel"] # 0x25cd (en: 'circle with vertical fill', DeepL translation) + - "◎": [t: "bullseye"] # 0x25ce (DeepL translation) + - "●": [t: "fekete kör"] # 0x25cf (en: 'black circle', DeepL translation) + - "◐": [t: "kör bal oldali felével fekete"] # 0x25d0 (en: 'circle with left half black', DeepL translation) + - "◑": [t: "kör jobb oldali fél feketével"] # 0x25d1 (en: 'circle with right half black', DeepL translation) + - "◒": [t: "kör alsó felével fekete"] # 0x25d2 (en: 'circle with lower half black', DeepL translation) + - "◓": [t: "kör felső fele fekete"] # 0x25d3 (en: 'circle with upper half black', DeepL translation) + - "◔": [t: "kör jobb felső kvadráns fekete"] # 0x25d4 (en: 'circle with upper right quadrant black', DeepL translation) + - "◕": [t: "kör a bal felső negyed kivételével fekete színnel"] # 0x25d5 (en: 'circle with all but upper left quadrant black', DeepL translation) + - "◖": [t: "bal fél fekete kör"] # 0x25d6 (en: 'left half black circle', DeepL translation) + - "◗": [t: "jobb oldali fél fekete kör"] # 0x25d7 (en: 'right half black circle', DeepL translation) + - "◘": [t: "fordított golyó"] # 0x25d8 (en: 'inverse bullet', DeepL translation) + - "◙": [t: "inverz fehér kör"] # 0x25d9 (en: 'inverse white circle', DeepL translation) + - "◚": [t: "felső fele inverz fehér kör"] # 0x25da (en: 'upper half inverse white circle', DeepL translation) + - "◛": [t: "alsó fél inverz fehér kör"] # 0x25db (en: 'lower half inverse white circle', DeepL translation) + - "◜": [t: "bal felső kvadránsban kör alakú ív"] # 0x25dc (en: 'upper left quadrant circular arc', DeepL translation) + - "◝": [t: "jobb felső kvadránsban körív"] # 0x25dd (en: 'upper right quadrant circular arc', DeepL translation) + - "◞": [t: "jobb alsó kvadráns körív"] # 0x25de (en: 'lower right quadrant circular arc', DeepL translation) + - "◟": [t: "bal alsó kvadráns körív"] # 0x25df (en: 'lower left quadrant circular arc', DeepL translation) + - "◠": [t: "felső félkör"] # 0x25e0 (en: 'upper half circle', DeepL translation) + - "◡": [t: "alsó félkör"] # 0x25e1 (en: 'lower half circle', DeepL translation) + - "◢": [t: "fekete jobb alsó háromszög"] # 0x25e2 (en: 'black lower right triangle', DeepL translation) + - "◣": [t: "fekete bal alsó háromszög"] # 0x25e3 (en: 'black lower left triangle', DeepL translation) + - "◤": [t: "fekete bal felső háromszög"] # 0x25e4 (en: 'black upper left triangle', DeepL translation) + - "◥": [t: "fekete jobb felső háromszög"] # 0x25e5 (en: 'black upper right triangle', DeepL translation) + - "◦": [t: "kompozíció"] # 0x25e6 (en: 'composition', DeepL translation) + - "◧": [t: "négyzet bal fele fekete"] # 0x25e7 (en: 'square with left half black', DeepL translation) + - "◨": [t: "négyzet jobb oldali felével fekete"] # 0x25e8 (en: 'square with right half black', DeepL translation) + - "◩": [t: "négyzet bal felső felével fekete"] # 0x25e9 (en: 'square with upper left half black', DeepL translation) + - "◪": [t: "négyzet jobb alsó felével fekete"] # 0x25ea (en: 'square with lower right half black', DeepL translation) + - "◫": [t: "fehér négyzet felezővonallal"] # 0x25eb (en: 'white square with bisecting line', DeepL translation) + - "◬": [t: "fehér felfelé mutató háromszög ponttal"] # 0x25ec (en: 'white up pointing triangle with dot', DeepL translation) + - "◭": [t: "felfelé mutató háromszög, bal fele fekete"] # 0x25ed (en: 'up pointing triangle with left half black', DeepL translation) + - "◮": [t: "felfelé mutató háromszög, jobb oldali fele fekete"] # 0x25ee (en: 'up pointing triangle with right half black', DeepL translation) + - "◯": [t: "nagy kör"] # 0x25ef (en: 'large circle', DeepL translation) + - "◰": [t: "fehér négyzet bal felső négyszöggel"] # 0x25f0 (en: 'white square with upper left quadrant', DeepL translation) + - "◱": [t: "fehér négyzet a bal alsó négyszöggel"] # 0x25f1 (en: 'white square with lower left quadrant', DeepL translation) + - "◲": [t: "fehér négyzet a jobb alsó négyszöggel"] # 0x25f2 (en: 'white square with lower right quadrant', DeepL translation) + - "◳": [t: "fehér négyzet jobb felső négyszöggel"] # 0x25f3 (en: 'white square with upper right quadrant', DeepL translation) + - "◴": [t: "fehér kör a bal felső negyedben"] # 0x25f4 (en: 'white circle with upper left quadrant', DeepL translation) + - "◵": [t: "fehér kör a bal alsó kvadránsban"] # 0x25f5 (en: 'white circle with lower left quadrant', DeepL translation) + - "◶": [t: "fehér kör a jobb alsó kvadránssal"] # 0x25f6 (en: 'white circle with lower right quadrant', DeepL translation) + - "◷": [t: "fehér kör a jobb felső kvadránsban"] # 0x25f7 (en: 'white circle with upper right quadrant', DeepL translation) + - "◸": [t: "bal felső háromszög"] # 0x25f8 (en: 'upper left triangle', DeepL translation) + - "◹": [t: "jobb felső háromszög"] # 0x25f9 (en: 'upper right triangle', DeepL translation) + - "◺": [t: "bal alsó háromszög"] # 0x25fa (en: 'lower left triangle', DeepL translation) + - "◻": [t: "fehér közepes négyzet"] # 0x25fb (en: 'white medium square', DeepL translation) + - "◼": [t: "fekete közepes négyzet"] # 0x25fc (en: 'black medium square', DeepL translation) + - "◽": [t: "fehér közepes kis négyzet"] # 0x25fd (en: 'white medium small square', DeepL translation) + - "◾": [t: "fekete közepes kis négyzet"] # 0x25fe (en: 'black medium small square', DeepL translation) + - "◿": [t: "jobb alsó háromszög"] # 0x25ff (en: 'lower right triangle', DeepL translation) + - "★": [t: "fekete csillag"] # 0x2605 (en: 'black star', DeepL translation) + - "☆": [t: "fehér csillag"] # 0x2606 (en: 'white star', DeepL translation) + - "☉": [t: "nap"] # 0x2609 (en: 'sun', DeepL translation) + - "☌": [t: "összekapcsolás"] # 0x260c (en: 'conjunction', DeepL translation) + - "☒": [t: "szavazóurnában x-szel"] # 0x2612 (en: 'ballot box with x', DeepL translation) + - "☽": [t: "növekvő hold"] # 0x263d (en: 'waxing moon', DeepL translation) + - "☾": [t: "fogyó hold"] # 0x263e (en: 'waning moon', DeepL translation) + - "☿": [t: "higany"] # 0x263f (en: 'mercury', DeepL translation) + - "♀": [t: "női"] # 0x2640 (en: 'female', DeepL translation) + - "♁": [t: "föld"] # 0x2641 (en: 'earth', DeepL translation) + - "♂": [t: "férfi"] # 0x2642 (en: 'male', DeepL translation) + - "♃": [t: "jupiter"] # 0x2643 (DeepL translation) + - "♄": [t: "szaturnusz"] # 0x2644 (en: 'saturn', DeepL translation) + - "♅": [t: "uránusz"] # 0x2645 (en: 'uranus', DeepL translation) + - "♆": [t: "neptun"] # 0x2646 (en: 'neptune', DeepL translation) + - "♇": [t: "plútó"] # 0x2647 (en: 'pluto', DeepL translation) + - "♈": [t: "kos"] # 0x2648 (en: 'aries', DeepL translation) + - "♉": [t: "taurus"] # 0x2649 (DeepL translation) + - "♩": [t: "negyedhang"] # 0x2669 (en: 'quarter note', DeepL translation) + - "♭": [t: "lapos"] # 0x266d (en: 'flat', DeepL translation) + - "♮": [t: "természetes"] # 0x266e (en: 'natural', DeepL translation) + - "♯": [t: "éles"] # 0x266f (en: 'sharp', DeepL translation) + - "♠": [t: "fekete pikkelyes öltöny"] # 0x2660 (en: 'black spade suit', DeepL translation) + - "♡": [t: "fehér szív szín"] # 0x2661 (en: 'white heart suit', DeepL translation) + - "♢": [t: "fehér rombusz színű öltöny"] # 0x2662 (en: 'white diamond suit', DeepL translation) + - "♣": [t: "fekete treff színű"] # 0x2663 (en: 'black club suit', DeepL translation) + - "♤": [t: "fehér pikk szín"] # 0x2664 (en: 'white spade suit', DeepL translation) + - "♥": [t: "fekete szívecske"] # 0x2665 (en: 'black heart suit', DeepL translation) + - "♦": [t: "fekete káró szín"] # 0x2666 (en: 'black diamond suit', DeepL translation) + - "♧": [t: "fehér treff szín"] # 0x2667 (en: 'white club suit', DeepL translation) + - "⚀": [t: "1. kockaoldal"] # 0x2680 (en: 'die face 1', DeepL translation) + - "⚁": [t: "2. szelvény"] # 0x2681 (en: 'die face 2', DeepL translation) + - "⚂": [t: "3. kockaoldal"] # 0x2682 (en: 'die face 3', DeepL translation) + - "⚃": [t: "kocka 4. arca"] # 0x2683 (en: 'die face 4', DeepL translation) + - "⚄": [t: "kocka arc 5"] # 0x2684 (en: 'die face 5', DeepL translation) + - "⚅": [t: "6. kockaoldal"] # 0x2685 (en: 'die face 6', DeepL translation) + - "⚆": [t: "fehér kör jobbra ponttal"] # 0x2686 (en: 'white circle with dot right', DeepL translation) + - "⚇": [t: "fehér kör két ponttal"] # 0x2687 (en: 'white circle wiht two dots', DeepL translation) + - "⚈": [t: "fekete kör jobbra mutató ponttal"] # 0x2688 (en: 'black circle with dot right', DeepL translation) + - "⚉": [t: "fekete kör két ponttal"] # 0x2689 (en: 'black circle wiht two dots', DeepL translation) + - "⚪": [t: "közepes fehér kör"] # 0x26aa (en: 'medium white circle', DeepL translation) + - "⚫": [t: "közepes fekete kör"] # 0x26ab (en: 'medium black circle', DeepL translation) + - "⚬": [t: "közepes kis fehér kör"] # 0x26ac (en: 'medium small white circle', DeepL translation) + - "⚲": [t: "neutrális"] # 0x26b2 (en: 'neuter', DeepL translation) + - "✓": [t: "pipa"] # 0x2713 (en: 'check mark', DeepL translation) + - "✠": [t: "máltai kereszt"] # 0x2720 (en: 'maltese cross', DeepL translation) + - "✪": [t: "bekarikázott fehér csillag"] # 0x272a (en: 'circled white star', DeepL translation) + - "✶": [t: "hat piontos fekete csillag"] # 0x2736 (en: 'six pionted black star', DeepL translation) + - "❨": [t: "közepes bal oldali zárójeles díszítés"] # 0x2768 (en: 'medium left parentheses ornament', DeepL translation) + - "❩": [t: "középen jobbra zárójelben díszítés"] # 0x2769 (en: 'medium right parentheses ornament', DeepL translation) + - "❪": [t: "közepes lapos balra lapított zárójeles díszítés"] # 0x276a (en: 'medium flattened left parentheses ornament', DeepL translation) + - "❫": [t: "közepes lapos jobb oldali zárójeles dísz"] # 0x276b (en: 'medium flattened right parentheses ornament', DeepL translation) + - "❬": [t: "közepes balra mutató szögletes zárójeles dísz"] # 0x276c (en: 'medium left-pointing angle bracket ornament', DeepL translation) + - "❭": [t: "közepes jobbra mutató szögletű konzolos díszítés"] # 0x276d (en: 'medium right-pointing angle bracket ornament', DeepL translation) + - "❮": [t: "nehéz balra mutató szögletes idézőjeles dísz"] # 0x276e (en: 'heavy left-pointing angle quotation mark ornament', DeepL translation) + - "❯": [t: "nehéz, jobbra mutató szögletes idézőjel díszítés"] # 0x276f (en: 'heavy right-pointing angle quotation mark ornament', DeepL translation) + - "❰": [t: "nehéz balra mutató szögletes zárójeles dísz"] # 0x2770 (en: 'heavy left-pointing angle bracket ornament', DeepL translation) + - "❱": [t: "nehéz, jobbra mutató szögletes konzolos díszítés"] # 0x2771 (en: 'heavy right-pointing angle bracket ornament', DeepL translation) + - "❲": [t: "világos bal oldali teknőspáncél zárójeles dísz"] # 0x2772 (en: 'light left tortoise shell bracket ornament', DeepL translation) + - "❳": [t: "világos jobb oldali teknőspáncél zárójel dísz"] # 0x2773 (en: 'light right tortoise shell bracket ornament', DeepL translation) + - "❴": [t: "közepes bal oldali zárójeles dísz"] # 0x2774 (en: 'medium left brace ornament', DeepL translation) + - "❵": [t: "közepes jobb oldali zárójeles díszítés"] # 0x2775 (en: 'medium right brace ornament', DeepL translation) + - "❶": [t: "fekete bekarikázott egy"] # 0x2776 (en: 'black circled one', DeepL translation) + - "❷": [t: "fekete körözött kettő"] # 0x2777 (en: 'black circled two', DeepL translation) + - "❸": [t: "fekete kör alakú háromszög"] # 0x2778 (en: 'black circled three', DeepL translation) + - "❹": [t: "fekete karikázott négyes"] # 0x2779 (en: 'black circled four', DeepL translation) + - "❺": [t: "fekete bekarikázott ötös"] # 0x277a (en: 'black circled five', DeepL translation) + - "❻": [t: "fekete bekarikázott hatos"] # 0x277b (en: 'black circled six', DeepL translation) + - "❼": [t: "fekete karikázott hét"] # 0x277c (en: 'black circled seven', DeepL translation) + - "❽": [t: "fekete karikázott at"] # 0x277d (en: 'black circled eight', DeepL translation) + - "❾": [t: "fekete bekarikázott kilences"] # 0x277e (en: 'black circled nine', DeepL translation) + - "❿": [t: "fekete bekarikázott tízes"] # 0x277f (en: 'black circled ten', DeepL translation) + - "➀": [t: "bekarikázott sans serif egy"] # 0x2780 (en: 'circled sans serif one', DeepL translation) + - "➁": [t: "bekarikázott sans serif kettes"] # 0x2781 (en: 'circled sans serif two', DeepL translation) + - "➂": [t: "bekarikázott sans serif hármas"] # 0x2782 (en: 'circled sans serif three', DeepL translation) + - "➃": [t: "bekarikázott sans serif négyes"] # 0x2783 (en: 'circled sans serif four', DeepL translation) + - "➄": [t: "bekarikázott sans serif ötös"] # 0x2784 (en: 'circled sans serif five', DeepL translation) + - "➅": [t: "bekarikázott sans serif hatos"] # 0x2785 (en: 'circled sans serif six', DeepL translation) + - "➆": [t: "bekarikázott sans serif hetes"] # 0x2786 (en: 'circled sans serif seven', DeepL translation) + - "➇": [t: "bekarikázott sans serif at"] # 0x2787 (en: 'circled sans serif eight', DeepL translation) + - "➈": [t: "bekarikázott sans serif kilenc"] # 0x2788 (en: 'circled sans serif nine', DeepL translation) + - "➉": [t: "bekarikázott sans serif tízes"] # 0x2789 (en: 'circled sans serif ten', DeepL translation) + - "➊": [t: "fekete karikázott sans serif egy"] # 0x278a (en: 'black circled sans serif one', DeepL translation) + - "➋": [t: "fekete karikázott sans serif kettes"] # 0x278b (en: 'black circled sans serif two', DeepL translation) + - "➌": [t: "fekete karikázott sans serif három"] # 0x278c (en: 'black circled sans serif three', DeepL translation) + - "➍": [t: "fekete karikázott sans serif négyes"] # 0x278d (en: 'black circled sans serif four', DeepL translation) + - "➎": [t: "fekete bekarikázott sans serif ötös"] # 0x278e (en: 'black circled sans serif five', DeepL translation) + - "➏": [t: "fekete bekarikázott sans serif hatos"] # 0x278f (en: 'black circled sans serif six', DeepL translation) + - "➐": [t: "fekete karikázott sans serif hét"] # 0x2790 (en: 'black circled sans serif seven', DeepL translation) + - "➑": [t: "fekete bekarikázott sans serif at"] # 0x2791 (en: 'black circled sans serif eight', DeepL translation) + - "➒": [t: "fekete karikázott sans serif kilenc"] # 0x2792 (en: 'black circled sans serif nine', DeepL translation) + - "➓": [t: "fekete bekarikázott szeriusz nélküli tízes"] # 0x2793 (en: 'black circled sans serif ten', DeepL translation) + - "➔": [t: "nehéz, széles fejű jobbra mutató nyíl"] # 0x2794 (en: 'heavy wide-headed right arrow', DeepL translation) + - "➕": [t: "nehéz plusz jel"] # 0x2795 (en: 'heavy plus sign', DeepL translation) + - "➖": [t: "nehéz mínuszjel"] # 0x2796 (en: 'heavy minus sign', DeepL translation) + - "➗": [t: "nehéz osztásjel"] # 0x2797 (en: 'heavy division sign', DeepL translation) + - "➘": [t: "nehéz délkeleti nyíl"] # 0x2798 (en: 'heavy south east arrow', DeepL translation) + - "➙": [t: "nehéz jobbra mutató nyíl"] # 0x2799 (en: 'heavy right arrow', DeepL translation) + - "➚": [t: "nehéz északkeleti nyíl"] # 0x279a (en: 'heavy north east arrow', DeepL translation) + - "➛": [t: "vázlatpont jobbra nyíl"] # 0x279b (en: 'drafting point right arrow', DeepL translation) + - "➜": [t: "nehéz, kerek végű jobb oldali nyílvessző"] # 0x279c (en: 'heavy round-tipped right arrow', DeepL translation) + - "➝": [t: "háromszög fejű jobbra mutató nyíl"] # 0x279d (en: 'triangle-headed right arrow', DeepL translation) + - "➞": [t: "nagy háromszög fejű jobbra mutató nyíl"] # 0x279e (en: 'heavy triangle-headed right arrow', DeepL translation) + - "➟": [t: "szaggatott háromszögfejű jobbra mutató nyíl"] # 0x279f (en: 'dashed triangle-headed right arrow', DeepL translation) + - "➠": [t: "súlyos szaggatott háromszögfejű jobbra mutató nyíl"] # 0x27a0 (en: 'heavy dashed triangle-headed right arrow', DeepL translation) + - "➡": [t: "fekete jobbra mutató nyíl"] # 0x27a1 (en: 'black right arrow', DeepL translation) + - "➢": [t: "három d felső világító jobb nyíl"] # 0x27a2 (en: 'three d top lighted right arrow', DeepL translation) + - "➣": [t: "három d alsó világító jobb nyíl"] # 0x27a3 (en: 'three d bottom lighted right arrow', DeepL translation) + - "➤": [t: "fekete jobbra mutató nyílhegy"] # 0x27a4 (en: 'black right arrowhead', DeepL translation) + - "➥": [t: "nehéz fekete íves lefelé és jobbra mutató nyíl"] # 0x27a5 (en: 'heavy black curved down and right arrow', DeepL translation) + - "➦": [t: "nehéz fekete ívelt felfelé és jobbra mutató nyíl"] # 0x27a6 (en: 'heavy black curved up and right arrow', DeepL translation) + - "➧": [t: "guggoló fekete jobbra nyíl"] # 0x27a7 (en: 'squat black right arrow', DeepL translation) + - "➨": [t: "nehéz homorú hegyű fekete jobbra mutató nyíl"] # 0x27a8 (en: 'heavy concave-pointed black right arrow', DeepL translation) + - "➩": [t: "jobbra árnyékolt fehér jobb nyíl"] # 0x27a9 (en: 'right-shaded white right arrow', DeepL translation) + - "➪": [t: "balra árnyékolt fehér jobb oldali nyíl"] # 0x27aa (en: 'left-shaded white right arrow', DeepL translation) + - "➫": [t: "hátrahajló árnyékolt fehér jobbra mutató nyíl"] # 0x27ab (en: 'back-tilted shadowed white right arrow', DeepL translation) + - "➬": [t: "elölről dőlő árnyékolt fehér jobbra mutató nyíl"] # 0x27ac (en: 'front-tilted shadowed white right arrow', DeepL translation) + - "➭": [t: "erős jobb alsó árnyékos fehér jobb nyíl"] # 0x27ad (en: 'heavy lower right-shadowed white right arrow', DeepL translation) + - "➮": [t: "nehéz jobb felső árnyékos fehér jobb nyíl"] # 0x27ae (en: 'heavy upper right-shadowed white right arrow', DeepL translation) + - "➯": [t: "rovátkolt alsó jobbra-árnyékolt fehér jobbra nyíl"] # 0x27af (en: 'notched lower right-shadowed white right arrow', DeepL translation) + - "➱": [t: "rovátkolt jobb felső árnyékos fehér jobb nyíl"] # 0x27b1 (en: 'notched upper right-shadowed white right arrow', DeepL translation) + - "➲": [t: "bekarikázott nehéz fehér jobb oldali nyíl"] # 0x27b2 (en: 'circled heavy white right arrow', DeepL translation) + - "➳": [t: "fehér tollas jobbra mutató nyíl"] # 0x27b3 (en: 'white-feathered right arrow', DeepL translation) + - "➴": [t: "fekete tollas délkeleti nyíl"] # 0x27b4 (en: 'black-feathered south east arrow', DeepL translation) + - "➵": [t: "fekete tollas jobbra mutató nyíl"] # 0x27b5 (en: 'black-feathered right arrow', DeepL translation) + - "➶": [t: "fekete tollas északkeleti nyíl"] # 0x27b6 (en: 'black-feathered north east arrow', DeepL translation) + - "➷": [t: "nehéz fekete tollas délkeleti nyíl"] # 0x27b7 (en: 'heavy black-feathered south east arrow', DeepL translation) + - "➸": [t: "súlyos fekete tollas jobbra mutató nyíl"] # 0x27b8 (en: 'heavy black-feathered right arrow', DeepL translation) + - "➹": [t: "nehéz fekete tollas északkeleti íves nyíl"] # 0x27b9 (en: 'heavy black-feathered north east arrow', DeepL translation) + - "➺": [t: "teradrop-barázdált jobbra mutató nyíl"] # 0x27ba (en: 'teradrop-barbed right arrow', DeepL translation) + - "➻": [t: "nehéz, könnycsepp alakú jobb nyíl"] # 0x27bb (en: 'heavy teardrop-shanked right arrow', DeepL translation) + - "➼": [t: "ék alakú jobbra mutató nyíl"] # 0x27bc (en: 'wedge-tailed right arrow', DeepL translation) + - "➽": [t: "nehéz ékfarkú jobb nyíl"] # 0x27bd (en: 'heavy wedge-tailed right arrow', DeepL translation) + - "➾": [t: "nyitott körvonalú jobbra mutató nyíl"] # 0x27be (en: 'open-outlined right arrow', DeepL translation) + - "⟀": [t: "háromdimenziós szög"] # 0x27c0 (en: 'three dimensional angle', DeepL translation) + - "⟁": [t: "fehér háromszög, benne kis fehér háromszög"] # 0x27c1 (en: 'white triangle containing small white triangle', DeepL translation) + - "⟂": # 0x27c2 + - test: + if: "$Verbosity!='Terse'" + then: [t: "az"] # (en: 'is', DeepL translation) + - t: "merőleges" # (en: 'perpendicular to', DeepL translation) + - "⟃": # 0x27c3 + - test: + if: "$Verbosity!='Terse'" + then: [t: "az"] # (en: 'is', DeepL translation) + - t: "nyitott részhalmaza" # (en: 'an open subset of', DeepL translation) + - "⟄": # 0x27c4 + - test: + if: "$Verbosity!='Terse'" + then: [t: "az"] # (en: 'is', DeepL translation) + - t: "egy nyitott szuperszett" # (en: 'an open superset of', DeepL translation) + - "⟅": [t: "bal oldali s alakú zsákhatároló"] # 0x27c5 (en: 'left s-shaped bag delimiter', DeepL translation) + - "⟆": [t: "jobb oldali s alakú zsákhatár"] # 0x27c6 (en: 'right s-shaped bag delimiter', DeepL translation) + - "⟇": [t: "vagy ponttal belül"] # 0x27c7 (en: 'or with dot inside', DeepL translation) + - "⟈": [t: "fordított szolidus megelőző részhalmaz"] # 0x27c8 (en: 'reverse solidus preceding subset', DeepL translation) + - "⟉": [t: "szuperhalmaz megelőzi a szolidust"] # 0x27c9 (en: 'superset preceding solidus', DeepL translation) + - "⟊": [t: "függőleges sáv vízszintes vonallal"] # 0x27ca (en: 'vertical bar with horizontal stroke', DeepL translation) + - "⟋": [t: "matematikai emelkedő átló"] # 0x27cb (en: 'mathematical rising diagonal', DeepL translation) + - "⟌": [t: "hosszú osztás"] # 0x27cc (en: 'long division', DeepL translation) + - "⟍": [t: "matematikai zuhanó átló"] # 0x27cd (en: 'mathematical falling diagonal', DeepL translation) + - "⟎": [t: "négyzet logikai és"] # 0x27ce (en: 'squared logical and', DeepL translation) + - "⟏": [t: "négyzet alakú logikai vagy"] # 0x27cf (en: 'squared logical or', DeepL translation) + - "⟐": [t: "fehér rombusz középen lévő ponttal"] # 0x27d0 (en: 'white diamond with centered dot', DeepL translation) + - "⟑": [t: "és ponttal"] # 0x27d1 (en: 'and with dot', DeepL translation) + - "⟒": [t: "megnyíló elem"] # 0x27d2 (en: 'element of opening up', DeepL translation) + - "⟓": [t: "jobb alsó sarokban pont"] # 0x27d3 (en: 'lower right corner with dot', DeepL translation) + - "⟔": [t: "bal felső sarokban pont"] # 0x27d4 (en: 'upper left corner with dot', DeepL translation) + - "⟕": [t: "bal külső csatlakozás"] # 0x27d5 (en: 'left outer join', DeepL translation) + - "⟖": [t: "jobb külső csatlakozás"] # 0x27d6 (en: 'right outer join', DeepL translation) + - "⟗": [t: "teljes külső csatlakozás"] # 0x27d7 (en: 'full outer join', DeepL translation) + - "⟘": [t: "nagy felfelé mutató tákolmány"] # 0x27d8 (en: 'large up tack', DeepL translation) + - "⟙": [t: "nagy lefelé irányuló szög"] # 0x27d9 (en: 'large down tack', DeepL translation) + - "⟚": [t: "bal és jobb oldali kettős fordulópont"] # 0x27da (en: 'left and right double turnstile', DeepL translation) + - "⟛": [t: "bal és jobb oldali tüske"] # 0x27db (en: 'left and right tack', DeepL translation) + - "⟜": [t: "bal oldali multitérkép"] # 0x27dc (en: 'left multimap', DeepL translation) + - "⟝": [t: "hosszú jobb oldali szög"] # 0x27dd (en: 'long right tack', DeepL translation) + - "⟞": [t: "hosszú bal oldali tákolmány"] # 0x27de (en: 'long left tack', DeepL translation) + - "⟟": [t: "felfelé mutató szög, fölötte körrel"] # 0x27df (en: 'up tack with circle above', DeepL translation) + - "⟠": [t: "vízszintes szabállyal osztott rozettával"] # 0x27e0 (en: 'lozenge divided by horizontal rule', DeepL translation) + - "⟡": [t: "fehér homorú oldalú rombusz"] # 0x27e1 (en: 'white concave sided diamond', DeepL translation) + - "⟢": [t: "fehér homorú oldalú rombusz bal oldali pipaccsal"] # 0x27e2 (en: 'white concave sided diamond with left tick', DeepL translation) + - "⟣": [t: "fehér homorú oldalú rombusz jobb oldali pipaccsal"] # 0x27e3 (en: 'white concave sided diamond with right tick', DeepL translation) + - "⟤": [t: "fehér négyzet bal oldali pipaccsal"] # 0x27e4 (en: 'white square with left tick', DeepL translation) + - "⟥": [t: "fehér négyzet jobb oldali pipaccsal"] # 0x27e5 (en: 'white square with right tick', DeepL translation) + - "⟦": [t: "bal oldali fehér szögletes zárójel"] # 0x27e6 (en: 'left white square bracket', DeepL translation) + - "⟧": [t: "jobb oldali fehér szögletes zárójel"] # 0x27e7 (en: 'right white square bracket', DeepL translation) + - "⟨": [t: "bal szögletes zárójel"] # 0x27e8 (en: 'left angle bracket', DeepL translation) + - "⟩": [t: "derékszögű zárójel"] # 0x27e9 (en: 'right angle bracket', DeepL translation) + - "⟪": [t: "bal dupla szögletes zárójel"] # 0x27ea (en: 'left double angle bracket', DeepL translation) + - "⟫": [t: "jobb oldali kettős szögletes zárójel"] # 0x27eb (en: 'right double angle bracket', DeepL translation) + - "⟬": [t: "bal oldali fehér teknőspáncél konzol"] # 0x27ec (en: 'left white tortoise shell bracket', DeepL translation) + - "⟭": [t: "jobb oldali fehér teknőspáncélos zárójel"] # 0x27ed (en: 'right white tortoise shell bracket', DeepL translation) + - "⟮": [t: "bal lapos zárójel"] # 0x27ee (en: 'left flattened parenthesis', DeepL translation) + - "⟯": [t: "jobb oldali lapos zárójel"] # 0x27ef (en: 'right flattened parenthesis', DeepL translation) + - "⟰": [t: "felfelé mutató négyes nyíl"] # 0x27f0 (en: 'up quadruple arrow', DeepL translation) + - "⟱": [t: "lefelé négyes nyíl"] # 0x27f1 (en: 'down quadruple arrow', DeepL translation) + - "⟲": [t: "az óramutató járásával ellentétes irányú réses környíl"] # 0x27f2 (en: 'anticlockwise gapped circle arrow', DeepL translation) + - "⟳": [t: "az óramutató járásával megegyező irányú, hiányos kör alakú nyíl"] # 0x27f3 (en: 'clockwise gapped circle arrow', DeepL translation) + - "⟴": [t: "jobbra nyíl bekarikázott plusszal"] # 0x27f4 (en: 'right arrow with circled plus', DeepL translation) + - "⟵": [t: "hosszú bal nyíl"] # 0x27f5 (en: 'long left arrow', DeepL translation) + - "⟶": [t: "hosszú jobbra nyíl"] # 0x27f6 (en: 'long right arrow', DeepL translation) + - "⟷": [t: "hosszú balra jobbra nyíl"] # 0x27f7 (en: 'long left right arrow', DeepL translation) + - "⟸": [t: "hosszú bal oldali kettős nyíl"] # 0x27f8 (en: 'long left double arrow', DeepL translation) + - "⟹": [t: "implikálja"] # 0x27f9 (en: 'implies', DeepL translation) + - "⟺": [t: "ha és csak ha"] # 0x27fa (en: 'if and only if', DeepL translation) + - "⟻": [t: "hosszú balra mutató nyíl vonaltól"] # 0x27fb (en: 'long left arrow from bar', DeepL translation) + - "⟼": [t: "hosszú jobbra mutató nyíl a sávból"] # 0x27fc (en: 'long right arrow from bar', DeepL translation) + - "⟽": [t: "hosszú bal kettős nyíl a sávból"] # 0x27fd (en: 'long left double arrow from bar', DeepL translation) + - "⟾": [t: "hosszú jobbra kettős nyíl vonaltól"] # 0x27fe (en: 'long right double arrow from bar', DeepL translation) + - "⟿": [t: "hosszú jobb oldali szaggatott nyíl"] # 0x27ff (en: 'long right squiggle arrow', DeepL translation) + - "⤀": [t: "jobb oldali kétfejű nyíl függőleges vonallal"] # 0x2900 (en: 'right two headed arrow with vertical stroke', DeepL translation) + - "⤁": [t: "jobb oldali kétfejű nyíl dupla függőleges vonallal"] # 0x2901 (en: 'right two headed arrow with double vertical stroke', DeepL translation) + - "⤂": [t: "bal kettős nyíl függőleges vonallal"] # 0x2902 (en: 'left double arrow with vertical stroke', DeepL translation) + - "⤃": [t: "jobb oldali kétfejű nyíl függőleges vonallal"] # 0x2903 (en: 'right double arrow with vertical stroke', DeepL translation) + - "⤄": [t: "balra jobbra kettős nyíl függőleges vonallal"] # 0x2904 (en: 'left right double arrow with vertical stroke', DeepL translation) + - "⤅": [t: "jobb kétfejű nyílvessző a rúdról"] # 0x2905 (en: 'right two headed arrow from bar', DeepL translation) + - "⤆": [t: "bal dupla nyíl a sávból"] # 0x2906 (en: 'left double arrow from bar', DeepL translation) + - "⤇": [t: "jobb oldali kettős nyíl a sávból"] # 0x2907 (en: 'right double arrow from bar', DeepL translation) + - "⤈": [t: "lefelé mutató nyíl vízszintes vonallal"] # 0x2908 (en: 'down arrow with horizontal stroke', DeepL translation) + - "⤉": [t: "felfelé nyíl vízszintes vonallal"] # 0x2909 (en: 'up arrow with horizontal stroke', DeepL translation) + - "⤊": [t: "fel hármas nyíl"] # 0x290a (en: 'up triple arrow', DeepL translation) + - "⤋": [t: "hármas nyíl lefelé"] # 0x290b (en: 'down triple arrow', DeepL translation) + - "⤌": [t: "bal oldali kétfejű nyílvessző"] # 0x290c (en: 'left double dash arrow', DeepL translation) + - "⤍": [t: "jobb oldali kettős kötőjeles nyíl"] # 0x290d (en: 'right double dash arrow', DeepL translation) + - "⤎": [t: "bal hármas kötőjeles nyíl"] # 0x290e (en: 'left triple dash arrow', DeepL translation) + - "⤏": [t: "jobb oldali hármas kötőjeles nyíl"] # 0x290f (en: 'right triple dash arrow', DeepL translation) + - "⤐": [t: "jobb kétfejű hármas kötőjeles nyíl"] # 0x2910 (en: 'right two headed triple dash arrow', DeepL translation) + - "⤑": [t: "jobbra nyíl szaggatott szárral"] # 0x2911 (en: 'right arrow with dotted stem', DeepL translation) + - "⤒": [t: "felfelé nyíl a bárra"] # 0x2912 (en: 'up arrow to bar', DeepL translation) + - "⤓": [t: "lefelé mutató nyíl a sávra"] # 0x2913 (en: 'down arrow to bar', DeepL translation) + - "⤔": [t: "jobb nyíl farokkal és függőleges vonallal"] # 0x2914 (en: 'right arrow with tail and vertical stroke', DeepL translation) + - "⤕": [t: "jobbra mutató nyíl farokkal és dupla függőleges vonallal"] # 0x2915 (en: 'right arrow with tail and double vertical stroke', DeepL translation) + - "⤖": [t: "jobb oldali kétfejű nyíl farokkal"] # 0x2916 (en: 'right two headed arrow with tail', DeepL translation) + - "⤗": [t: "jobb kétfejű nyílvessző, farokkal, függőleges vonallal"] # 0x2917 (en: 'right two headed arrow with tail with vertical stroke', DeepL translation) + - "⤘": [t: "jobb oldali kétfejű nyíl, farokkal, dupla függőleges vonallal"] # 0x2918 (en: 'right two headed arrow with tail with double vertical stroke', DeepL translation) + - "⤙": [t: "bal nyíl farokkal"] # 0x2919 (en: 'left arrow tail', DeepL translation) + - "⤚": [t: "jobbra nyíl farok"] # 0x291a (en: 'right arrow tail', DeepL translation) + - "⤛": [t: "bal kettős nyíl farok"] # 0x291b (en: 'left double arrow tail', DeepL translation) + - "⤜": [t: "jobb dupla nyíl farok"] # 0x291c (en: 'right double arrow tail', DeepL translation) + - "⤝": [t: "balra nyíl a kitöltött rombuszra"] # 0x291d (en: 'left arrow to filled diamond', DeepL translation) + - "⤞": [t: "jobb nyíl kitöltött gyémántra"] # 0x291e (en: 'right arrow to filled diamond', DeepL translation) + - "⤟": [t: "bal nyíl a sávtól a kitöltött rombuszig"] # 0x291f (en: 'left arrow from bar to filled diamond', DeepL translation) + - "⤠": [t: "jobbra mutató nyíl a sávtól a kitöltött rombuszig"] # 0x2920 (en: 'right arrow from bar to filled diamond', DeepL translation) + - "⤡": [t: "északnyugati és délkeleti nyíl"] # 0x2921 (en: 'north west and south east arrow', DeepL translation) + - "⤢": [t: "északkeleti és délnyugati nyíl"] # 0x2922 (en: 'north east and south west arrow', DeepL translation) + - "⤣": [t: "északnyugati nyíl horoggal"] # 0x2923 (en: 'north west arrow with hook', DeepL translation) + - "⤤": [t: "északkeleti nyílhegy horoggal"] # 0x2924 (en: 'north east arrow with hook', DeepL translation) + - "⤥": [t: "délkeleti nyíl horoggal"] # 0x2925 (en: 'south east arrow with hook', DeepL translation) + - "⤦": [t: "délnyugati nyíl horoggal"] # 0x2926 (en: 'south west arrow with hook', DeepL translation) + - "⤧": [t: "északnyugati nyíl és északkeleti nyíl"] # 0x2927 (en: 'north west arrow and north east arrow', DeepL translation) + - "⤨": [t: "északkeleti nyíl és délkeleti nyíl"] # 0x2928 (en: 'north east arrow and south east arrow', DeepL translation) + - "⤩": [t: "délkeleti nyíl és délnyugati nyíl"] # 0x2929 (en: 'south east arrow and south west arrow', DeepL translation) + - "⤪": [t: "délnyugati nyíl és északnyugati nyíl"] # 0x292a (en: 'south west arrow and north west arrow', DeepL translation) + - "⤫": [t: "emelkedő átló keresztezi a csökkenő átlót"] # 0x292b (en: 'rising diagonal crossing falling diagonal', DeepL translation) + - "⤬": [t: "csökkenő átló keresztezi az emelkedő átlót"] # 0x292c (en: 'falling diagonal crossing rising diagonal', DeepL translation) + - "⤭": [t: "délkeleti nyíl keresztezi az északkeleti nyilat"] # 0x292d (en: 'south east arrow crossing north east arrow', DeepL translation) + - "⤮": [t: "északkeleti nyilat keresztező délkeleti nyíl"] # 0x292e (en: 'north east arrow crossing south east arrow', DeepL translation) + - "⤯": [t: "zuhanó átlós keresztező északkeleti nyíl"] # 0x292f (en: 'falling diagonal crossing north east arrow', DeepL translation) + - "⤰": [t: "emelkedő átlós keresztező délkeleti nyíl"] # 0x2930 (en: 'rising diagonal crossing south east arrow', DeepL translation) + - "⤱": [t: "északkeleti nyíl keresztezi az északnyugati nyilat"] # 0x2931 (en: 'north east arrow crossing north west arrow', DeepL translation) + - "⤲": [t: "északnyugati nyilat keresztező északkeleti nyíl"] # 0x2932 (en: 'north west arrow crossing north east arrow', DeepL translation) + - "⤳": [t: "közvetlenül jobbra mutató hullámzó nyíl"] # 0x2933 (en: 'wave arrow pointing directly right', DeepL translation) + - "⤴": [t: "jobbra mutató, majd felfelé ívelő nyíl"] # 0x2934 (en: 'arrow pointing right then curving up', DeepL translation) + - "⤵": [t: "jobbra mutató, majd lefelé ívelő nyíl"] # 0x2935 (en: 'arrow pointing right then curving down', DeepL translation) + - "⤶": [t: "lefelé mutató, majd balra ívelő nyíl"] # 0x2936 (en: 'arrow pointing down then curving left', DeepL translation) + - "⤷": [t: "lefelé mutató, majd jobbra ívelő nyíl"] # 0x2937 (en: 'arrow pointing down then curving right', DeepL translation) + - "⤸": [t: "jobb oldalsó ívű jobb oldali nyíl az óramutató járásával megegyező irányban"] # 0x2938 (en: 'right side arc clockwise arrow', DeepL translation) + - "⤹": [t: "bal oldali íves, az óramutató járásával ellentétes irányú nyíl"] # 0x2939 (en: 'left side arc anticlockwise arrow', DeepL translation) + - "⤺": [t: "felső íves, az óramutató járásával ellentétes irányú nyíl"] # 0x293a (en: 'top arc anticlockwise arrow', DeepL translation) + - "⤻": [t: "alsó íves, az óramutató járásával ellentétes irányú nyíl"] # 0x293b (en: 'bottom arc anticlockwise arrow', DeepL translation) + - "⤼": [t: "felső íves óramutató járásával megegyező irányú nyíl mínuszokkal"] # 0x293c (en: 'top arc clockwise arrow with minus', DeepL translation) + - "⤽": [t: "felső ív az óramutató járásával ellentétes irányú nyíl plusszal"] # 0x293d (en: 'top arc anticlockwise arrow with plus', DeepL translation) + - "⤾": [t: "jobb alsó félköríves, az óramutató járásával megegyező irányú nyíl"] # 0x293e (en: 'lower right semicircular clockwise arrow', DeepL translation) + - "⤿": [t: "balra lent félköríves, az óramutató járásával ellentétes irányú nyíl"] # 0x293f (en: 'lower left semicircular anticlockwise arrow', DeepL translation) + - "⥀": [t: "az óramutató járásával ellentétes irányú zárt kör nyíl"] # 0x2940 (en: 'anticlockwise closed circle arrow', DeepL translation) + - "⥁": [t: "az óramutató járásával megegyezően zárt kör alakú nyíl"] # 0x2941 (en: 'clockwise closed circle arrow', DeepL translation) + - "⥂": [t: "jobb nyíl rövid bal nyíl felett"] # 0x2942 (en: 'right arrow above short left arrow', DeepL translation) + - "⥃": [t: "bal nyíl rövid jobb nyíl felett"] # 0x2943 (en: 'left arrow above short right arrow', DeepL translation) + - "⥄": [t: "rövid jobb nyíl a bal nyíl felett"] # 0x2944 (en: 'short right arrow above left arrow', DeepL translation) + - "⥅": [t: "jobbra mutató nyíl, plusszal alul"] # 0x2945 (en: 'right arrow with plus below', DeepL translation) + - "⥆": [t: "bal nyíl plusszal alul"] # 0x2946 (en: 'left arrow with plus below', DeepL translation) + - "⥇": [t: "jobbra mutató nyíl x-en keresztül"] # 0x2947 (en: 'right arrow through x', DeepL translation) + - "⥈": [t: "balra jobbra nyíl körön keresztül"] # 0x2948 (en: 'left right arrow through circle', DeepL translation) + - "⥉": [t: "felfelé kétfejű nyíl a körből"] # 0x2949 (en: 'up two headed arrow from circle', DeepL translation) + - "⥊": [t: "bal horog felfelé jobb horog lefelé szigony"] # 0x294a (en: 'left barb up right barb down harpoon', DeepL translation) + - "⥋": [t: "bal oldali tüske lefelé jobb oldali tüske felfelé szigony"] # 0x294b (en: 'left barb down right barb up harpoon', DeepL translation) + - "⥌": [t: "felfelé szúró jobbra lefelé szúró balra szigor"] # 0x294c (en: 'up barb right down barb left harpoon', DeepL translation) + - "⥍": [t: "fel szöges balra le szöges jobbra szigony"] # 0x294d (en: 'up barb left down barb right harpoon', DeepL translation) + - "⥎": [t: "bal tüske felfelé jobb tüske felfelé szigony"] # 0x294e (en: 'left barb up right barb up harpoon', DeepL translation) + - "⥏": [t: "fel szúró jobbra le szúró jobbra szigony"] # 0x294f (en: 'up barb right down barb right harpoon', DeepL translation) + - "⥐": [t: "bal horog lefelé jobb horog lefelé szigony"] # 0x2950 (en: 'left barb down right barb down harpoon', DeepL translation) + - "⥑": [t: "fel szúró balra le szúró balra szigony"] # 0x2951 (en: 'up barb left down barb left harpoon', DeepL translation) + - "⥒": [t: "bal szigony a szálkával felfelé a rúdig"] # 0x2952 (en: 'left harpoon with barb up to bar', DeepL translation) + - "⥓": [t: "jobb szigony szúróval felfelé díszítéssel"] # 0x2953 (en: 'right harpoon with barb up to bar', DeepL translation) + - "⥔": [t: "felfelé szigony szúróvas jobbra a vonaltól"] # 0x2954 (en: 'up harpoon with barb right to bar', DeepL translation) + - "⥕": [t: "lefelé irányuló szigony, jobbra a bárka mellett"] # 0x2955 (en: 'down harpoon with barb right to bar', DeepL translation) + - "⥖": [t: "bal oldali szigony szúrószöggel lefelé a sávig"] # 0x2956 (en: 'left harpoon with barb down to bar', DeepL translation) + - "⥗": [t: "jobb oldali szigony, lefelé irányuló tüskével a rúdig"] # 0x2957 (en: 'right harpoon with barb down to bar', DeepL translation) + - "⥘": [t: "felfelé szigony, balra szúrószöggel"] # 0x2958 (en: 'up harpoon with barb left to bar', DeepL translation) + - "⥙": [t: "lefelé szigony szúróvas bal oldali vonallal"] # 0x2959 (en: 'down harpoon with barb left to bar', DeepL translation) + - "⥚": [t: "bal szigony, szálkával a sávból felfelé"] # 0x295a (en: 'left harpoon with barb up from bar', DeepL translation) + - "⥛": [t: "jobb szigony a sávból felfelé álló tüskével"] # 0x295b (en: 'right harpoon with barb up from bar', DeepL translation) + - "⥜": [t: "fel szigony felfelé szúróvas jobbra a rúdtól"] # 0x295c (en: 'up harpoon with barb right from bar', DeepL translation) + - "⥝": [t: "lefelé szigony a vonaltól jobbra lévő tüskével"] # 0x295d (en: 'down harpoon with barb right from bar', DeepL translation) + - "⥞": [t: "bal szigony a rúdról lefelé irányuló szúróhoroggal"] # 0x295e (en: 'left harpoon with barb down from bar', DeepL translation) + - "⥟": [t: "jobb szigony a rúdtól lefelé lévő tüskével"] # 0x295f (en: 'right harpoon with barb down from bar', DeepL translation) + - "⥠": [t: "felfelé szigony, a vonaltól balra lévő tüskével"] # 0x2960 (en: 'up harpoon with barb left from bar', DeepL translation) + - "⥡": [t: "lefelé irányuló szigony, tüskével a sávtól balra"] # 0x2961 (en: 'down harpoon with barb left from bar', DeepL translation) + - "⥢": [t: "bal szigony szúróval felfelé bal szigony felett bal szigony szúróval lefelé"] # 0x2962 (en: 'left harpoon with barb up above left harpoon with barb down', DeepL translation) + - "⥣": [t: "felfelé szigony bal oldali szúróval a felfelé szigony jobb oldali szúróval"] # 0x2963 (en: 'up harpoon with barb left beside up harpoon with barb right', DeepL translation) + - "⥤": [t: "jobb szigony felfelé, jobb szigony felett jobb szigony lefelé"] # 0x2964 (en: 'right harpoon with barb up above right harpoon with barb down', DeepL translation) + - "⥥": [t: "lefelé mutató szigony szúróval balra a lefelé mutató szigony szúróval jobbra mellett"] # 0x2965 (en: 'down harpoon with barb left beside down harpoon with barb right', DeepL translation) + - "⥦": [t: "bal szigony szúróval felfelé jobb szigony szúróval felfelé felett"] # 0x2966 (en: 'left harpoon with barb up above right harpoon with barb up', DeepL translation) + - "⥧": [t: "bal szigony szúróval lefelé jobb szigony szúróval lefelé felett"] # 0x2967 (en: 'left harpoon with barb down above right harpoon with barb down', DeepL translation) + - "⥨": [t: "jobb oldali szigony szúróval felfelé a bal oldali szigony szúróval felfelé felett"] # 0x2968 (en: 'right harpoon with barb up above left harpoon with barb up', DeepL translation) + - "⥩": [t: "jobb szigony szúróval lefelé a bal szigony szúróval lefelé felett"] # 0x2969 (en: 'right harpoon with barb down above left harpoon with barb down', DeepL translation) + - "⥪": [t: "bal szigony szúróval felfelé a hosszú kötőjel felett"] # 0x296a (en: 'left harpoon with barb up above long dash', DeepL translation) + - "⥫": [t: "bal szigony szúróval lefelé hosszú kötőjel alatt"] # 0x296b (en: 'left harpoon with barb down below long dash', DeepL translation) + - "⥬": [t: "jobb szigony, hosszú kötőjel fölött felfelé mutató tüskével"] # 0x296c (en: 'right harpoon with barb up above long dash', DeepL translation) + - "⥭": [t: "jobb oldali szigony lefelé irányuló tüskével a hosszú kötőjel alatt"] # 0x296d (en: 'right harpoon with barb down below long dash', DeepL translation) + - "⥮": [t: "felfelé szigony balra szúrással a lefelé szigony jobbra szúrással mellett"] # 0x296e (en: 'up harpoon with barb left beside down harpoon with barb right', DeepL translation) + - "⥯": [t: "lefelé irányuló szigony balra a felfelé irányuló szigony jobbra irányuló szigony mellett"] # 0x296f (en: 'down harpoon with barb left beside up harpoon with barb right', DeepL translation) + - "⥰": [t: "jobb oldali kettős nyíl lekerekített fejjel"] # 0x2970 (en: 'right double arrow with rounded head', DeepL translation) + - "⥱": [t: "egyenlőségjel felett jobbra mutató nyíl"] # 0x2971 (en: 'equals above right arrow', DeepL translation) + - "⥲": [t: "tilde operátor a jobbra mutató nyíl fölött"] # 0x2972 (en: 'tilde operator above right arrow', DeepL translation) + - "⥳": [t: "bal nyíl a tilde operátor felett"] # 0x2973 (en: 'left arrow above tilde operator', DeepL translation) + - "⥴": [t: "jobb nyíl a tilde operátor felett"] # 0x2974 (en: 'right arrow above tilde operator', DeepL translation) + - "⥵": [t: "jobbra nyíl felett majdnem egyenlő"] # 0x2975 (en: 'right arrow above almost equal to', DeepL translation) + - "⥶": [t: "kevesebb, mint a fenti bal nyíl"] # 0x2976 (en: 'less than above left arrow', DeepL translation) + - "⥷": [t: "bal nyíl át kevesebb mint"] # 0x2977 (en: 'left arrow through less than', DeepL translation) + - "⥸": [t: "nagyobb, mint a jobb oldali nyíl fölött"] # 0x2978 (en: 'greater than above right arrow', DeepL translation) + - "⥹": [t: "részhalmaz felett jobbra nyíl"] # 0x2979 (en: 'subset above right arrow', DeepL translation) + - "⥺": [t: "bal nyíl alatt részhalmaz"] # 0x297a (en: 'left arrow through subset', DeepL translation) + - "⥻": [t: "szuperhalmaz felett balra nyíl"] # 0x297b (en: 'superset above left arrow', DeepL translation) + - "⥼": [t: "bal hal farka"] # 0x297c (en: 'left fish tail', DeepL translation) + - "⥽": [t: "jobb oldali halfarok"] # 0x297d (en: 'right fish tail', DeepL translation) + - "⥾": [t: "felfelé hal farka"] # 0x297e (en: 'up fish tail', DeepL translation) + - "⥿": [t: "lefelé halfarok"] # 0x297f (en: 'down fish tail', DeepL translation) + - "⦀": [t: "háromszoros függőleges sávhatároló"] # 0x2980 (en: 'triple vertical bar delimiter', DeepL translation) + - "⦁": [t: "z jelölés folt"] # 0x2981 (en: 'z notation spot', DeepL translation) + - "⦂": [t: "z jelölés típusú kettőspont"] # 0x2982 (en: 'z notation type colon', DeepL translation) + - "⦃": [t: "bal fehér zárójel"] # 0x2983 (en: 'left white brace', DeepL translation) + - "⦄": [t: "jobb oldali fehér zárójel"] # 0x2984 (en: 'right white brace', DeepL translation) + - "⦅": [t: "bal fehér zárójel"] # 0x2985 (en: 'left white parenthesis', DeepL translation) + - "⦆": [t: "jobb oldali fehér zárójel"] # 0x2986 (en: 'right white parenthesis', DeepL translation) + - "⦇": [t: "z jelölés bal oldali kép zárójel"] # 0x2987 (en: 'z notation left image bracket', DeepL translation) + - "⦈": [t: "z jelölés jobb oldali képtartó zárójel"] # 0x2988 (en: 'z notation right image bracket', DeepL translation) + - "⦉": [t: "z jelölés bal oldali kötőjel"] # 0x2989 (en: 'z notation left binding bracket', DeepL translation) + - "⦊": [t: "z jelölés jobb kötőjeles zárójel"] # 0x298a (en: 'z notation right binding bracket', DeepL translation) + - "⦋": [t: "bal szögletes zárójel aláhúzással"] # 0x298b (en: 'left square bracket with underbar', DeepL translation) + - "⦌": [t: "jobb oldali szögletes zárójel alulcsíkkal"] # 0x298c (en: 'right square bracket with underbar', DeepL translation) + - "⦍": [t: "bal szögletes zárójel felső sarkában pipa"] # 0x298d (en: 'left square bracket with tick in top corner', DeepL translation) + - "⦎": [t: "jobb oldali szögletes zárójel alsó sarkában pipa"] # 0x298e (en: 'right square bracket with tick in bottom corner', DeepL translation) + - "⦏": [t: "bal szögletes zárójel alsó sarkában pipa"] # 0x298f (en: 'left square bracket with tick in bottom corner', DeepL translation) + - "⦐": [t: "jobb oldali szögletes zárójel, a felső sarokban pipa"] # 0x2990 (en: 'right square bracket with tick in top corner', DeepL translation) + - "⦑": [t: "bal szögletes zárójel ponttal"] # 0x2991 (en: 'left angle bracket with dot', DeepL translation) + - "⦒": [t: "jobb oldali szögletes zárójel ponttal"] # 0x2992 (en: 'right angle bracket with dot', DeepL translation) + - "⦓": [t: "bal ív kisebb, mint zárójel"] # 0x2993 (en: 'left arc less than bracket', DeepL translation) + - "⦔": [t: "jobb ív nagyobb mint zárójel"] # 0x2994 (en: 'right arc greater than bracket', DeepL translation) + - "⦕": [t: "dupla bal oldali ív nagyobb, mint zárójel "] # 0x2995 (en: 'double left arc greater than bracket', DeepL translation) + - "⦖": [t: "kettős jobbra mutató íves kevesebb mint zárójel"] # 0x2996 (en: 'double right arc less than bracket', DeepL translation) + - "⦗": [t: "bal fekete teknőspáncél zárójel"] # 0x2997 (en: 'left black tortoise shell bracket', DeepL translation) + - "⦘": [t: "jobb oldali fekete teknőspáncélos zárójel"] # 0x2998 (en: 'right black tortoise shell bracket', DeepL translation) + - "⦙": [t: "szaggatott kerítés"] # 0x2999 (en: 'dotted fence', DeepL translation) + - "⦚": [t: "függőleges cikkcakkos vonal"] # 0x299a (en: 'vertical zigzag line', DeepL translation) + - "⦛": [t: "mért szög nyílás balra"] # 0x299b (en: 'measured angle opening left', DeepL translation) + - "⦜": [t: "derékszögű változat négyzettel"] # 0x299c (en: 'right angle variant with square', DeepL translation) + - "⦝": [t: "mért derékszög ponttal"] # 0x299d (en: 'measured right angle with dot', DeepL translation) + - "⦞": [t: "szög s-sel belül"] # 0x299e (en: 'angle with s inside', DeepL translation) + - "⦟": [t: "hegyesszög"] # 0x299f (en: 'acute angle', DeepL translation) + - "⦠": [t: "gömbszög nyílás balra"] # 0x29a0 (en: 'spherical angle opening left', DeepL translation) + - "⦡": [t: "gömbszöget nyitó"] # 0x29a1 (en: 'spherical angle opening up', DeepL translation) + - "⦢": [t: "elfordított szög"] # 0x29a2 (en: 'turned angle', DeepL translation) + - "⦣": [t: "fordított szög"] # 0x29a3 (en: 'reversed angle', DeepL translation) + - "⦤": [t: "szög aláhúzott vonallal"] # 0x29a4 (en: 'angle with underbar', DeepL translation) + - "⦥": [t: "fordított szögjel aláhúzással"] # 0x29a5 (en: 'reversed angle with underbar', DeepL translation) + - "⦦": [t: "ferde szög felfelé nyíló"] # 0x29a6 (en: 'oblique angle opening up', DeepL translation) + - "⦧": [t: "ferde szög lefelé nyíló"] # 0x29a7 (en: 'oblique angle opening down', DeepL translation) + - "⦨": [t: "mért szög, felfelé és jobbra mutató nyílban végződő nyitott karral"] # 0x29a8 (en: 'measured angle with open arm ending in arrow pointing up and to the right', DeepL translation) + - "⦩": [t: "mért szög, nyitott karral, amely felfelé és balra mutató nyíllal végződik"] # 0x29a9 (en: 'measured angle with open arm ending in arrow pointing up and to the left', DeepL translation) + - "⦪": [t: "mért szög, lefelé és jobbra mutató nyílban végződő nyitott karral"] # 0x29aa (en: 'measured angle with open arm ending in arrow pointing down and to the right', DeepL translation) + - "⦫": [t: "mért szög, lefelé és balra mutató nyílban végződő nyitott karral"] # 0x29ab (en: 'measured angle with open arm ending in arrow pointing down and to the left', DeepL translation) + - "⦬": [t: "mért szög, nyitott karral, amely jobbra és felfelé mutató nyílban végződik"] # 0x29ac (en: 'measured angle with open arm ending in arrow pointing right and up', DeepL translation) + - "⦭": [t: "mért szög, balra és felfelé mutató nyílban végződő nyitott karral"] # 0x29ad (en: 'measured angle with open arm ending in arrow pointing left and up', DeepL translation) + - "⦮": [t: "mért szög, nyitott karral, amely jobbra és lefelé mutató nyíllal végződik"] # 0x29ae (en: 'measured angle with open arm ending in arrow pointing right and down', DeepL translation) + - "⦯": [t: "mért szög, balra és lefelé mutató nyílban végződő nyitott karral"] # 0x29af (en: 'measured angle with open arm ending in arrow pointing left and down', DeepL translation) + - "⦰": [t: "fordított üres halmaz"] # 0x29b0 (en: 'reversed empty set', DeepL translation) + - "⦱": [t: "üres halmaz overbarral"] # 0x29b1 (en: 'empty set with overbar', DeepL translation) + - "⦲": [t: "üres halmaz kis körrel a tetején"] # 0x29b2 (en: 'empty set with small circle above', DeepL translation) + - "⦳": [t: "üres halmaz jobbra mutató nyíllal fölötte"] # 0x29b3 (en: 'empty set with right arrow above', DeepL translation) + - "⦴": [t: "üres halmaz balra mutató nyíllal felül"] # 0x29b4 (en: 'empty set with left arrow above', DeepL translation) + - "⦵": [t: "kör vízszintes sávval"] # 0x29b5 (en: 'circle with horizontal bar', DeepL translation) + - "⦶": [t: "bekarikázott függőleges sáv"] # 0x29b6 (en: 'circled vertical bar', DeepL translation) + - "⦷": [t: "bekarikázott párhuzamos"] # 0x29b7 (en: 'circled parallel', DeepL translation) + - "⦸": [t: "bekarikázott fordított solidus"] # 0x29b8 (en: 'circled reverse solidus', DeepL translation) + - "⦹": [t: "bekarikázott merőleges"] # 0x29b9 (en: 'circled perpendicular', DeepL translation) + - "⦺": [t: "vízszintes sávval osztott körirat, felső fele függőleges sávval osztott"] # 0x29ba (en: 'circled divided by horizontal bar and top half divided by vertical bar', DeepL translation) + - "⦻": [t: "kör egymásra helyezett x-szel"] # 0x29bb (en: 'circle with superimposed x', DeepL translation) + - "⦼": [t: "bekarikázott, az óramutató járásával ellentétes irányban elforgatott osztójel"] # 0x29bc (en: 'circled anticlockwise rotated division sign', DeepL translation) + - "⦽": [t: "felfelé nyíl körön keresztül"] # 0x29bd (en: 'up arrow through circle', DeepL translation) + - "⦾": [t: "bekarikázott fehér golyó"] # 0x29be (en: 'circled white bullet', DeepL translation) + - "⦿": [t: "bekarikázott golyószám"] # 0x29bf (en: 'circled bullet', DeepL translation) + - "⧀": [t: "bekarikázott kevesebb, mint"] # 0x29c0 (en: 'circled less than', DeepL translation) + - "⧁": [t: "bekarikázott nagyobb, mint"] # 0x29c1 (en: 'circled greater than', DeepL translation) + - "⧂": [t: "kör kis körrel a jobb oldalon"] # 0x29c2 (en: 'circle with small circle to the right', DeepL translation) + - "⧃": [t: "kör két vízszintes vonással jobbra"] # 0x29c3 (en: 'circle with two horizontal strokes to the right', DeepL translation) + - "⧄": [t: "négyzet alakú emelkedő átlós átlós vonallal"] # 0x29c4 (en: 'squared rising diagonal slash', DeepL translation) + - "⧅": [t: "négyzetesen eső átlós átlós átlós átlós"] # 0x29c5 (en: 'squared falling diagonal slash', DeepL translation) + - "⧆": [t: "szögletes csillag"] # 0x29c6 (en: 'squared asterisk', DeepL translation) + - "⧇": [t: "négyzetes kis kör"] # 0x29c7 (en: 'squared small circle', DeepL translation) + - "⧈": [t: "négyzet alakú négyzet"] # 0x29c8 (en: 'squared square', DeepL translation) + - "⧉": [t: "két összekötött négyzet"] # 0x29c9 (en: 'two joined squares', DeepL translation) + - "⧊": [t: "háromszög pont felett"] # 0x29ca (en: 'triangle with dot above', DeepL translation) + - "⧋": [t: "háromszög aláhúzott vonallal"] # 0x29cb (en: 'triangle with underbar', DeepL translation) + - "⧌": [t: "s háromszögben"] # 0x29cc (en: 's in triangle', DeepL translation) + - "⧍": [t: "háromszög alul serifekkel"] # 0x29cd (en: 'triangle with serifs at bottom', DeepL translation) + - "⧎": [t: "jobb oldali háromszög bal oldali háromszög felett"] # 0x29ce (en: 'right triangle above left triangle', DeepL translation) + - "⧏": [t: "bal oldali háromszög függőleges vonallal"] # 0x29cf (en: 'left triangle beside vertical bar', DeepL translation) + - "⧐": [t: "jobb oldali háromszög mellett függőleges sáv"] # 0x29d0 (en: 'vertical bar beside right triangle', DeepL translation) + - "⧑": [t: "masni bal oldali fekete felével"] # 0x29d1 (en: 'bowtie with left half black', DeepL translation) + - "⧒": [t: "masni, jobb oldali fele fekete"] # 0x29d2 (en: 'bowtie with right half black', DeepL translation) + - "⧓": [t: "fekete masni"] # 0x29d3 (en: 'black bowtie', DeepL translation) + - "⧔": [t: "szorzók bal oldali felével fekete"] # 0x29d4 (en: 'times with left half black', DeepL translation) + - "⧕": [t: "szorzó, jobb oldali félfekete"] # 0x29d5 (en: 'times with right half black', DeepL translation) + - "⧖": [t: "fehér homokóra"] # 0x29d6 (en: 'white hourglass', DeepL translation) + - "⧗": [t: "fekete homokóra"] # 0x29d7 (en: 'black hourglass', DeepL translation) + - "⧘": [t: "bal oldali kacskaringós kerítés"] # 0x29d8 (en: 'left wiggly fence', DeepL translation) + - "⧙": [t: "jobb oldali kacskaringós kerítés"] # 0x29d9 (en: 'right wiggly fence', DeepL translation) + - "⧚": [t: "bal oldali dupla kacskaringós kerítés"] # 0x29da (en: 'left double wiggly fence', DeepL translation) + - "⧛": [t: "jobb oldali dupla kacskaringós kerítés"] # 0x29db (en: 'right double wiggly fence', DeepL translation) + - "⧜": [t: "hiányos végtelen"] # 0x29dc (en: 'incomplete infinity', DeepL translation) + - "⧝": [t: "döntetlen a végtelen felett"] # 0x29dd (en: 'tie over infinity', DeepL translation) + - "⧞": [t: "függőleges vonallal negált végtelen"] # 0x29de (en: 'infinity negated with vertical bar', DeepL translation) + - "⧟": [t: "dupla végű multitérkép"] # 0x29df (en: 'double-ended multimap', DeepL translation) + - "⧠": [t: "négyzet kontúros körvonallal"] # 0x29e0 (en: 'square with contoured outline', DeepL translation) + - "⧡": [t: "növekszik, mint"] # 0x29e1 (en: 'increases as', DeepL translation) + - "⧢": [t: "shuffle termék"] # 0x29e2 (en: 'shuffle product', DeepL translation) + - "⧣": [t: "egyenlőségjel és ferde párhuzamos"] # 0x29e3 (en: 'equals sign and slanted parallel', DeepL translation) + - "⧤": [t: "egyenlőségjel és ferde párhuzamos tilde fölött"] # 0x29e4 (en: 'equals sign and slanted parallel with tilde above', DeepL translation) + - "⧥": [t: "azonos és ferde párhuzamos"] # 0x29e5 (en: 'identical to and slanted parallel', DeepL translation) + - "⧦": [t: "gleich stark"] # 0x29e6 (DeepL translation) + - "⧧": [t: "termodinamikai"] # 0x29e7 (en: 'thermodynamic', DeepL translation) + - "⧨": [t: "lefelé mutató háromszög bal oldali felével fekete"] # 0x29e8 (en: 'down pointing triangle with left half black', DeepL translation) + - "⧩": [t: "lefelé mutató háromszög jobb oldali felével fekete"] # 0x29e9 (en: 'down pointing triangle with right half black', DeepL translation) + - "⧪": [t: "fekete rombusz lefelé mutató nyíllal"] # 0x29ea (en: 'black diamond with down arrow', DeepL translation) + - "⧫": [t: "fekete rozettás"] # 0x29eb (en: 'black lozenge', DeepL translation) + - "⧬": [t: "fehér kör lefelé mutató nyíllal"] # 0x29ec (en: 'white circle with down arrow', DeepL translation) + - "⧭": [t: "fekete kör lefelé mutató nyíllal"] # 0x29ed (en: 'black circle with down arrow', DeepL translation) + - "⧮": [t: "hibával határolt fehér négyzet"] # 0x29ee (en: 'error-barred white square', DeepL translation) + - "⧯": [t: "hibásan elhatárolt fekete négyzet"] # 0x29ef (en: 'error-barred black square', DeepL translation) + - "⧰": [t: "hibás sávos fehér rombusz"] # 0x29f0 (en: 'error-barred white diamond', DeepL translation) + - "⧱": [t: "hibás sávos fekete rombusz"] # 0x29f1 (en: 'error-barred black diamond', DeepL translation) + - "⧲": [t: "hibával határolt fehér kör"] # 0x29f2 (en: 'error-barred white circle', DeepL translation) + - "⧳": [t: "hibás sávos fekete kör"] # 0x29f3 (en: 'error-barred black circle', DeepL translation) + - "⧴": [t: "szabály-késleltetett"] # 0x29f4 (en: 'rule-delayed', DeepL translation) + - "⧵": [t: "fordított szolidus operátor"] # 0x29f5 (en: 'reverse solidus operator', DeepL translation) + - "⧶": [t: "szolidus fölött vonallal"] # 0x29f6 (en: 'solidus with overbar', DeepL translation) + - "⧷": [t: "fordított solidus vízszintes vonallal"] # 0x29f7 (en: 'reverse solidus with horizontal stroke', DeepL translation) + - "⧸": [t: "nagy solidus"] # 0x29f8 (en: 'big solidus', DeepL translation) + - "⧹": [t: "nagy fordított solidus"] # 0x29f9 (en: 'big reverse solidus', DeepL translation) + - "⧺": [t: "dupla plusz"] # 0x29fa (en: 'double plus', DeepL translation) + - "⧻": [t: "hármas plusz"] # 0x29fb (en: 'triple plus', DeepL translation) + - "⧼": [t: "balra mutató ívelt szögletes zárójel"] # 0x29fc (en: 'left pointing curved angle bracket', DeepL translation) + - "⧽": [t: "jobbra mutató ívelt szögletes zárójel"] # 0x29fd (en: 'right pointing curved angle bracket', DeepL translation) + - "⧾": [t: "apró"] # 0x29fe (en: 'tiny', DeepL translation) + - "⧿": [t: "miny"] # 0x29ff (DeepL translation) + - "⨀": [t: "bekarikázott pontoperátor"] # 0x2a00 (en: 'circled dot operator', DeepL translation) + - "⨁": [t: "bekarikázott plusz operátor"] # 0x2a01 (en: 'circled plus operator', DeepL translation) + - "⨂": [t: "bekarikázott szorzó"] # 0x2a02 (en: 'circled times operator', DeepL translation) + - "⨃": [t: "unió operátor ponttal"] # 0x2a03 (en: 'union operator with dot', DeepL translation) + - "⨄": [t: "union operátor plusszal"] # 0x2a04 (en: 'union operator with plus', DeepL translation) + - "⨅": [t: "négyzetes metszéspont operátor"] # 0x2a05 (en: 'square intersection operator', DeepL translation) + - "⨆": [t: "négyzet egyesítés operátor"] # 0x2a06 (en: 'square union operator', DeepL translation) + - "⨇": [t: "két logikai és operátor"] # 0x2a07 (en: 'two logical and operator', DeepL translation) + - "⨈": [t: "két logikai vagy operátor"] # 0x2a08 (en: 'two logical or operator', DeepL translation) + - "⨉": [t: "times operátor"] # 0x2a09 (en: 'times operator', DeepL translation) + - "⨊": [t: "modulo kettő összege"] # 0x2a0a (en: 'modulo two sum', DeepL translation) + - "⨋": [t: "összegzés integrállal"] # 0x2a0b (en: 'summation with integral', DeepL translation) + - "⨌": [t: "négyes integrál operátor"] # 0x2a0c (en: 'quadruple integral operator', DeepL translation) + - "⨍": [t: "véges rész integrál"] # 0x2a0d (en: 'finite part integral', DeepL translation) + - "⨎": [t: "integrál kettős vonallal"] # 0x2a0e (en: 'integral with double stroke', DeepL translation) + - "⨏": [t: "integrál átlag a slash-el"] # 0x2a0f (en: 'integral average with slash', DeepL translation) + - "⨐": [t: "keringési függvény"] # 0x2a10 (en: 'circulation function', DeepL translation) + - "⨑": [t: "az óramutató járásával ellentétes irányú integráció"] # 0x2a11 (en: 'anticlockwise integration', DeepL translation) + - "⨒": [t: "vonalintegráció téglalap alakú útvonallal az oszlop körül"] # 0x2a12 (en: 'line integration with rectangular path around pole', DeepL translation) + - "⨓": [t: "vonalintegráció félköríves pályával a pólus körül"] # 0x2a13 (en: 'line integration with semicircular path around pole', DeepL translation) + - "⨔": [t: "vonalintegráció a pólus nélkül"] # 0x2a14 (en: 'line integration not including the pole', DeepL translation) + - "⨕": [t: "integrál egy pontoperátor körül"] # 0x2a15 (en: 'integral around a point operator', DeepL translation) + - "⨖": [t: "kvaternion integrál operátor"] # 0x2a16 (en: 'quaternion integral operator', DeepL translation) + - "⨗": [t: "integrál bal nyilas horoggal"] # 0x2a17 (en: 'integral with left arrow with hook', DeepL translation) + - "⨘": [t: "integrál időjelekkel"] # 0x2a18 (en: 'integral with times sign', DeepL translation) + - "⨙": [t: "integrál metszéssel"] # 0x2a19 (en: 'integral with intersection', DeepL translation) + - "⨚": [t: "integrál egyesítéssel"] # 0x2a1a (en: 'integral with union', DeepL translation) + - "⨛": [t: "integrál túlsó vonallal"] # 0x2a1b (en: 'integral with overbar', DeepL translation) + - "⨜": [t: "integrál aláhúzással"] # 0x2a1c (en: 'integral with underbar', DeepL translation) + - "⨝": [t: "csatlakozás"] # 0x2a1d (en: 'join', DeepL translation) + - "⨞": [t: "nagy bal oldali háromszög operátor"] # 0x2a1e (en: 'large left triangle operator', DeepL translation) + - "⨟": [t: "z jelölés sémakompozíció"] # 0x2a1f (en: 'z notation schema composition', DeepL translation) + - "⨠": [t: "z jelölés séma csővezeték"] # 0x2a20 (en: 'z notation schema piping', DeepL translation) + - "⨡": [t: "z jelölés séma kivetítés"] # 0x2a21 (en: 'z notation schema projection', DeepL translation) + - "⨢": [t: "plusz jel körrel a felett"] # 0x2a22 (en: 'plus sign with circle above', DeepL translation) + - "⨣": [t: "plusz jel körkörös ékezettel felette"] # 0x2a23 (en: 'plus sign with circumflex accent above', DeepL translation) + - "⨤": [t: "pluszjel tilde fölött"] # 0x2a24 (en: 'plus sign with tilde above', DeepL translation) + - "⨥": [t: "pluszjel, alatta ponttal"] # 0x2a25 (en: 'plus sign with dot below', DeepL translation) + - "⨦": [t: "plusz jel, alatta tilde"] # 0x2a26 (en: 'plus sign with tilde below', DeepL translation) + - "⨧": [t: "pluszjel kettes indexszel"] # 0x2a27 (en: 'plus sign with subscript two', DeepL translation) + - "⨨": [t: "pluszjel fekete háromszöggel"] # 0x2a28 (en: 'plus sign with black triangle', DeepL translation) + - "⨩": [t: "mínuszjel vesszővel felette"] # 0x2a29 (en: 'minus sign with comma above', DeepL translation) + - "⨪": [t: "mínuszjel alatta ponttal"] # 0x2a2a (en: 'minus sign with dot below', DeepL translation) + - "⨫": [t: "mínusz jel csökkenő pontokkal"] # 0x2a2b (en: 'minus sign with falling dots', DeepL translation) + - "⨬": [t: "mínusz jel emelkedő pontokkal"] # 0x2a2c (en: 'minus sign with rising dots', DeepL translation) + - "⨭": [t: "plusz jel a bal oldali félkörben"] # 0x2a2d (en: 'plus sign in left half circle', DeepL translation) + - "⨮": [t: "pluszjel a jobb oldali félkörben"] # 0x2a2e (en: 'plus sign in right half circle', DeepL translation) + - "⨯": # 0x2a2f - test: if: "$Verbosity='Terse'" - then: [t: "cross"] - else: [t: "cross product"] - - "⨰": [t: "multiplication sign with dot above"] # 0x2a30 - - "⨱": [t: "multiplication sign with underbar"] # 0x2a31 - - "⨲": [t: "semidirect product with bottom closed"] # 0x2a32 - - "⨳": [t: "smash product"] # 0x2a33 - - "⨴": [t: "multiplication sign in left half circle"] # 0x2a34 - - "⨵": [t: "multiplication sign in right half circle"] # 0x2a35 - - "⨶": [t: "circled multiplication sign with circumflex accent"] # 0x2a36 - - "⨷": [t: "multiplication sign in double circle"] # 0x2a37 - - "⨸": [t: "circled division sign"] # 0x2a38 - - "⨹": [t: "plus sign in triangle"] # 0x2a39 - - "⨺": [t: "minus sign in triangle"] # 0x2a3a - - "⨻": [t: "multiplication sign in triangle"] # 0x2a3b - - "⨼": [t: "interior product"] # 0x2a3c - - "⨽": [t: "righthand interior product"] # 0x2a3d - - "⨾": [t: "z notation relational composition"] # 0x2a3e - - "⨿": [t: "amalgamation or coproduct"] # 0x2a3f - - "⩀": [t: "intersection with dot"] # 0x2a40 - - "⩁": [t: "union with minus sign"] # 0x2a41 - - "⩂": [t: "union with overbar"] # 0x2a42 - - "⩃": [t: "intersection with overbar"] # 0x2a43 - - "⩄": [t: "intersection with logical and"] # 0x2a44 - - "⩅": [t: "union with logical or"] # 0x2a45 - - "⩆": [t: "union above intersection"] # 0x2a46 - - "⩇": [t: "intersection above union"] # 0x2a47 - - "⩈": [t: "union above bar above intersection"] # 0x2a48 - - "⩉": [t: "intersection above bar above union"] # 0x2a49 - - "⩊": [t: "union beside and joined with union"] # 0x2a4a - - "⩋": [t: "intersection beside and joined with intersection"] # 0x2a4b - - "⩌": [t: "closed union with serifs"] # 0x2a4c - - "⩍": [t: "closed intersection with serifs"] # 0x2a4d - - "⩎": [t: "double square intersection"] # 0x2a4e - - "⩏": [t: "double square union"] # 0x2a4f - - "⩐": [t: "closed union with serifs and smash product"] # 0x2a50 - - "⩑": [t: "logical and with dot above"] # 0x2a51 - - "⩒": [t: "logical or with dot above"] # 0x2a52 - - "⩓": [t: "double logical and"] # 0x2a53 - - "⩔": [t: "double logical or"] # 0x2a54 - - "⩕": [t: "two intersecting logical and"] # 0x2a55 - - "⩖": [t: "two intersecting logical or"] # 0x2a56 - - "⩗": [t: "sloping large or"] # 0x2a57 - - "⩘": [t: "sloping large and"] # 0x2a58 - - "⩙": [t: "logical or overlapping logical and"] # 0x2a59 - - "⩚": [t: "logical and with middle stem"] # 0x2a5a - - "⩛": [t: "logical or with middle stem"] # 0x2a5b - - "⩜": [t: "logical and with horizontal dash"] # 0x2a5c - - "⩝": [t: "logical or with horizontal dash"] # 0x2a5d - - "⩞": [t: "logical and with double overbar"] # 0x2a5e - - "⩟": [t: "logical and with underbar"] # 0x2a5f - - "⩠": [t: "logical and with double underbar"] # 0x2a60 - - "⩡": [t: "small vee with underbar"] # 0x2a61 - - "⩢": [t: "logical or with double overbar"] # 0x2a62 - - "⩣": [t: "logical or with double underbar"] # 0x2a63 - - "⩤": [t: "z notation domain antirestriction"] # 0x2a64 - - "⩥": [t: "z notation range antirestriction"] # 0x2a65 - - "⩦": [t: "equals sign with dot below"] # 0x2a66 - - "⩧": [t: "identical with dot above"] # 0x2a67 - - "⩨": [t: "triple horizontal bar with double vertical stroke"] # 0x2a68 - - "⩩": [t: "triple horizontal bar with triple vertical stroke"] # 0x2a69 - - "⩪": [t: "tilde operator with dot above"] # 0x2a6a - - "⩫": [t: "tilde operator with rising dots"] # 0x2a6b - - "⩬": [t: "similar minus similar"] # 0x2a6c - - "⩭": [t: "congruent with dot above"] # 0x2a6d - - "⩮": [t: "equals with asterisk"] # 0x2a6e - - "⩯": [t: "almost equal to with circumflex accent"] # 0x2a6f - - "⩰": [t: "approximately equal to or equal to"] # 0x2a70 - - "⩱": [t: "equals sign above plus sign"] # 0x2a71 - - "⩲": [t: "plus sign above equals sign"] # 0x2a72 - - "⩳": [t: "equals sign above tilde operator"] # 0x2a73 - - "⩴": [t: "double colon equal"] # 0x2a74 - - "⩵": [t: "two consecutive equals signs"] # 0x2a75 - - "⩶": [t: "three consecutive equals signs"] # 0x2a76 - - "⩷": [t: "equals sign with two dots above and two dots below"] # 0x2a77 - - "⩸": [t: "equivalent with four dots above"] # 0x2a78 - - "⩹": [t: "less than with circle inside"] # 0x2a79 - - "⩺": [t: "greater than with circle inside"] # 0x2a7a - - "⩻": [t: "less than with question mark above"] # 0x2a7b - - "⩼": [t: "greater than with question mark above"] # 0x2a7c - - "⩽": [t: "less than or slanted equal to"] # 0x2a7d - - "⩾": [t: "greater than or slanted equal to"] # 0x2a7e - - "⩿": [t: "less than or slanted equal to with dot inside"] # 0x2a7f - - "⪀": [t: "greater than or slanted equal to with dot inside"] # 0x2a80 - - "⪁": [t: "less than or slanted equal to with dot above"] # 0x2a81 - - "⪂": [t: "greater than or slanted equal to with dot above"] # 0x2a82 - - "⪃": [t: "less than or slanted equal to with dot above right"] # 0x2a83 - - "⪄": [t: "greater than or slanted equal to with dot above left"] # 0x2a84 - - "⪅": [t: "less than or approximate"] # 0x2a85 - - "⪆": [t: "greater than or approximate"] # 0x2a86 - - "⪇": [t: "less than and single line not equal to"] # 0x2a87 - - "⪈": [t: "greater than and single line not equal to"] # 0x2a88 - - "⪉": [t: "less than and not approximate"] # 0x2a89 - - "⪊": [t: "greater than and not approximate"] # 0x2a8a - - "⪋": [t: "less than above double line equal above greater than"] # 0x2a8b - - "⪌": [t: "greater than above double line equal above less than"] # 0x2a8c - - "⪍": [t: "less than above similar or equal"] # 0x2a8d - - "⪎": [t: "greater than above similar or equal"] # 0x2a8e - - "⪏": [t: "less than above similar above greater than"] # 0x2a8f - - "⪐": [t: "greater than above similar above less than"] # 0x2a90 - - "⪑": [t: "less than above greater than above double line equal"] # 0x2a91 - - "⪒": [t: "greater than above less than above double line equal"] # 0x2a92 - - "⪓": [t: "less than above slanted equal above greater than above slanted equal"] # 0x2a93 - - "⪔": [t: "greater than above slanted equal above less than above slanted equal"] # 0x2a94 - - "⪕": [t: "slanted equal to or less than"] # 0x2a95 - - "⪖": [t: "slanted equal to or greater than"] # 0x2a96 - - "⪗": [t: "slanted equal to or less than with dot inside"] # 0x2a97 - - "⪘": [t: "slanted equal to or greater than with dot inside"] # 0x2a98 - - "⪙": [t: "double line equal to or less than"] # 0x2a99 - - "⪚": [t: "double line equal to or greater than"] # 0x2a9a - - "⪛": [t: "double line slanted equal to or less than"] # 0x2a9b - - "⪜": [t: "double line slanted equal to or greater than"] # 0x2a9c - - "⪝": [t: "similar or less than"] # 0x2a9d - - "⪞": [t: "similar or greater than"] # 0x2a9e - - "⪟": [t: "similar above less than above equals sign"] # 0x2a9f - - "⪠": [t: "similar above greater than above equals sign"] # 0x2aa0 - - "⪡": [t: "double nested less than"] # 0x2aa1 - - "⪢": [t: "double nested greater than"] # 0x2aa2 - - "⪣": [t: "double nested less than with underbar"] # 0x2aa3 - - "⪤": [t: "greater than overlapping less than"] # 0x2aa4 - - "⪥": [t: "greater than beside less than"] # 0x2aa5 - - "⪦": [t: "less than closed by curve"] # 0x2aa6 - - "⪧": [t: "greater than closed by curve"] # 0x2aa7 - - "⪨": [t: "less than closed by curve above slanted equal"] # 0x2aa8 - - "⪩": [t: "greater than closed by curve above slanted equal"] # 0x2aa9 - - "⪪": [t: "smaller than"] # 0x2aaa - - "⪫": [t: "larger than"] # 0x2aab - - "⪬": [t: "smaller than or equal to"] # 0x2aac - - "⪭": [t: "larger than or equal to"] # 0x2aad - - "⪮": [t: "equals sign with bumpy above"] # 0x2aae - - "⪯": [t: "precedes above single line equals sign"] # 0x2aaf - - "⪰": [t: "succeeds above single line equals sign"] # 0x2ab0 - - "⪱": [t: "precedes above single line not equal to"] # 0x2ab1 - - "⪲": [t: "succeeds above single line not equal to"] # 0x2ab2 - - "⪳": [t: "precedes above equals sign"] # 0x2ab3 - - "⪴": [t: "succeeds above equals sign"] # 0x2ab4 - - "⪵": [t: "precedes above not equal to"] # 0x2ab5 - - "⪶": [t: "succeeds above not equal to"] # 0x2ab6 - - "⪷": [t: "precedes above almost equal to"] # 0x2ab7 - - "⪸": [t: "succeeds above almost equal to"] # 0x2ab8 - - "⪹": [t: "precedes above not almost equal to"] # 0x2ab9 - - "⪺": [t: "succeeds above not almost equal to"] # 0x2aba - - "⪻": [t: "double precedes"] # 0x2abb - - "⪼": [t: "double succeeds"] # 0x2abc - - "⪽": [t: "subset with dot"] # 0x2abd - - "⪾": [t: "superset with dot"] # 0x2abe - - "⪿": [t: "subset with plus sign below"] # 0x2abf - - "⫀": [t: "superset with plus sign below"] # 0x2ac0 - - "⫁": [t: "subset with multiplication sign below"] # 0x2ac1 - - "⫂": [t: "superset with multiplication sign below"] # 0x2ac2 - - "⫃": [t: "subset of or equal to with dot above"] # 0x2ac3 - - "⫄": [t: "superset of or equal to with dot above"] # 0x2ac4 - - "⫅": [t: "subset of above equals sign"] # 0x2ac5 - - "⫆": [t: "superset of above equals sign"] # 0x2ac6 - - "⫇": [t: "subset of above tilde operator"] # 0x2ac7 - - "⫈": [t: "superset of above tilde operator"] # 0x2ac8 - - "⫉": [t: "subset of above almost equal to"] # 0x2ac9 - - "⫊": [t: "superset of above almost equal to"] # 0x2aca - - "⫋": [t: "subset above not equal to"] # 0x2acb - - "⫌": [t: "superset of above not equal to"] # 0x2acc - - "⫍": [t: "square left open box operator"] # 0x2acd - - "⫎": [t: "square right open box operator"] # 0x2ace - - "⫏": [t: "closed subset"] # 0x2acf - - "⫐": [t: "closed superset"] # 0x2ad0 - - "⫑": [t: "closed subset or equal to"] # 0x2ad1 - - "⫒": [t: "closed superset or equal to"] # 0x2ad2 - - "⫓": [t: "subset above superset"] # 0x2ad3 - - "⫔": [t: "superset above subset"] # 0x2ad4 - - "⫕": [t: "subset above subset"] # 0x2ad5 - - "⫖": [t: "superset above superset"] # 0x2ad6 - - "⫗": [t: "superset beside subset"] # 0x2ad7 - - "⫘": [t: "superset beside and joined by dash with subset"] # 0x2ad8 - - "⫙": [t: "element of opening down"] # 0x2ad9 - - "⫚": [t: "pitchfork with tee top"] # 0x2ada - - "⫛": [t: "transversal intersection"] # 0x2adb - - "⫝̸": [t: "forking"] # 0x2adc - - "⫝": [t: "nonforking"] # 0x2add - - "⫞": [t: "short left tack"] # 0x2ade - - "⫟": [t: "short down tack"] # 0x2adf - - "⫠": [t: "short up tack"] # 0x2ae0 - - "⫡": [t: "perpendicular with s"] # 0x2ae1 - - "⫢": [t: "vertical bar triple right turnstile"] # 0x2ae2 - - "⫣": [t: "double vertical bar left turnstile"] # 0x2ae3 - - "⫤": [t: "vertical bar double left turnstile"] # 0x2ae4 - - "⫥": [t: "double vertical bar double left turnstile"] # 0x2ae5 - - "⫦": [t: "long dash from left member of double vertical"] # 0x2ae6 - - "⫧": [t: "short down tack with overbar"] # 0x2ae7 - - "⫨": [t: "short up tack with underbar"] # 0x2ae8 - - "⫩": [t: "short up tack above short down tack"] # 0x2ae9 - - "⫪": [t: "double down tack"] # 0x2aea - - "⫫": [t: "double up tack"] # 0x2aeb - - "⫬": [t: "double stroke not sign"] # 0x2aec - - "⫭": [t: "reversed double stroke not sign"] # 0x2aed - - "⫮": [t: "does not divide with reversed negation slash"] # 0x2aee - - "⫯": [t: "vertical line with circle above"] # 0x2aef - - "⫰": [t: "vertical line with circle below"] # 0x2af0 - - "⫱": [t: "down tack with circle below"] # 0x2af1 - - "⫲": [t: "parallel with horizontal stroke"] # 0x2af2 - - "⫳": [t: "parallel with tilde operator"] # 0x2af3 - - "⫴": [t: "triple vertical bar binary relation"] # 0x2af4 - - "⫵": [t: "triple vertical bar with horizontal stroke"] # 0x2af5 - - "⫶": [t: "triple colon operator"] # 0x2af6 - - "⫷": [t: "triple nested less than"] # 0x2af7 - - "⫸": [t: "triple nested greater than"] # 0x2af8 - - "⫹": [t: "double line slanted less than or equal to"] # 0x2af9 - - "⫺": [t: "double line slanted greater than or equal to"] # 0x2afa - - "⫻": [t: "triple solidus binary relation"] # 0x2afb - - "⫼": [t: "large triple vertical bar operator"] # 0x2afc - - "⫽": [t: "double solidus operator"] # 0x2afd - - "⫾": [t: "white vertical bar"] # 0x2afe - - "⫿": [t: "white vertical bar"] # 0x2aff - - "⬀": [t: "north east white arrow"] # 0x2b00 - - "⬁": [t: "north west white arrow"] # 0x2b01 - - "⬂": [t: "south east white arrow"] # 0x2b02 - - "⬃": [t: "south west white arrow"] # 0x2b03 - - "⬄": [t: "left right white arrow"] # 0x2b04 - - "⬅": [t: "left black arrow"] # 0x2b05 - - "⬆": [t: "up black arrow"] # 0x2b06 - - "⬇": [t: "down black arrow"] # 0x2b07 - - "⬈": [t: "north east black arrow"] # 0x2b08 - - "⬉": [t: "north west black arrow"] # 0x2b09 - - "⬊": [t: "south east black arrow"] # 0x2b0a - - "⬋": [t: "south west black arrow"] # 0x2b0b - - "⬌": [t: "left right black arrow"] # 0x2b0c - - "⬍": [t: "up down black arrow"] # 0x2b0d - - "⬎": [t: "right arrow with tip down"] # 0x2b0e - - "⬏": [t: "right arrow with tip up"] # 0x2b0f - - "⬐": [t: "left arrow with tip down"] # 0x2b10 - - "⬑": [t: "left arrow with tip up"] # 0x2b11 - - "⬒": [t: "square with top half black"] # 0x2b12 - - "⬓": [t: "square with bottom half black"] # 0x2b13 - - "⬔": [t: "square with upper right diagonal half black"] # 0x2b14 - - "⬕": [t: "square with lower left diagonal half black"] # 0x2b15 - - "⬖": [t: "diamond with left half black"] # 0x2b16 - - "⬗": [t: "diamond with right half black"] # 0x2b17 - - "⬘": [t: "diamond with top half black"] # 0x2b18 - - "⬙": [t: "diamond with bottom half black"] # 0x2b19 - - "⬚": [t: "box"] # 0x2b1a - - "⬛": [t: "black large square"] # 0x2b1b - - "⬜": [t: "white large square"] # 0x2b1c - - "⬝": [t: "black very small square"] # 0x2b1d - - "⬞": [t: "white very small square"] # 0x2b1e - - "⬟": [t: "black pentagon"] # 0x2b1f - - "⬠": [t: "white pentagon"] # 0x2b20 - - "⬡": [t: "white hexagon"] # 0x2b21 - - "⬢": [t: "black hexagon"] # 0x2b22 - - "⬣": [t: "horizontal black hexagon"] # 0x2b23 - - "⬤": [t: "black large circle"] # 0x2b24 - - "⬥": [t: "black medium diamond"] # 0x2b25 - - "⬦": [t: "white medium diamond"] # 0x2b26 - - "⬧": [t: "black medium lozenge"] # 0x2b27 - - "⬨": [t: "white medium lozenge"] # 0x2b28 - - "⬩": [t: "black small diamond"] # 0x2b29 - - "⬪": [t: "black small lozenge"] # 0x2b2a - - "⬫": [t: "white small lozenge"] # 0x2b2b - - "⬬": [t: "black horizontal ellipse"] # 0x2b2c - - "⬭": [t: "white horizontal ellipse"] # 0x2b2d - - "⬮": [t: "black vertical ellipse"] # 0x2b2e - - "⬯": [t: "white vertical ellipse"] # 0x2b2f - - "⬰": [t: "left arrow with small circle"] # 0x2b30 - - "⬱": [t: "three left arrows"] # 0x2b31 - - "⬲": [t: "left arrow with circled plus"] # 0x2b32 - - "⬳": [t: "long left squiggle arrow"] # 0x2b33 - - "⬴": [t: "left two headed arrow with vertical stroke"] # 0x2b34 - - "⬵": [t: "left two headed arrow with double vertical stroke"] # 0x2b35 - - "⬶": [t: "left two headed arrow from bar"] # 0x2b36 - - "⬷": [t: "left two headed triple dash arrow"] # 0x2b37 - - "⬸": [t: "left arrow with dotted stem"] # 0x2b38 - - "⬹": [t: "left arrow with tail with vertical stroke"] # 0x2b39 - - "⬺": [t: "left arrow with tail with double vertical stroke"] # 0x2b3a - - "⬻": [t: "left two headed arrow with tail"] # 0x2b3b - - "⬼": [t: "left two headed arrow with tail with vertical stroke"] # 0x2b3c - - "⬽": [t: "left two headed arrow with tail with double vertical stroke"] # 0x2b3d - - "⬾": [t: "left arrow through x"] # 0x2b3e - - "⬿": [t: "wave arrow pointing directly left"] # 0x2b3f - - "⭀": [t: "equals sign above left arrow"] # 0x2b40 - - "⭁": [t: "reverse tilde operator above left arrow"] # 0x2b41 - - "⭂": [t: "left arrow above reverse almost equal to"] # 0x2b42 - - "⭃": [t: "right arrow through greater than"] # 0x2b43 - - "⭄": [t: "right arrow through superset"] # 0x2b44 - - "⭅": [t: "left quadruple arrow"] # 0x2b45 - - "⭆": [t: "right quadruple arrow"] # 0x2b46 - - "⭇": [t: "reverse tilde operator above right arrow"] # 0x2b47 - - "⭈": [t: "right arrow above reverse almost equal to"] # 0x2b48 - - "⭉": [t: "tilde operator above left arrow"] # 0x2b49 - - "⭊": [t: "left arrow above almost equal to"] # 0x2b4a - - "⭋": [t: "left arrow above reverse tilde operator"] # 0x2b4b - - "⭌": [t: "right arrow above reverse tilde operator"] # 0x2b4c - - "⭐": [t: "white medium star"] # 0x2b50 - - "⭑": [t: "black small star"] # 0x2b51 - - "⭒": [t: "white small star"] # 0x2b52 - - "⭓": [t: "black right pointing pentagon"] # 0x2b53 - - "⭔": [t: "white right pointing pentagon"] # 0x2b54 - - "⭕": [t: "heavy large circle"] # 0x2b55 - - "⭖": [t: "heavy oval with oval inside"] # 0x2b56 - - "⭗": [t: "heavy circle with circle inside"] # 0x2b57 - - "⭘": [t: "heavy circle"] # 0x2b58 - - "⭙": [t: "heavy circled saltire"] # 0x2b59 - - "⸀": [t: "right angle substitution marker"] # 0x2e00 - - "⸁": [t: "right angle dotted substitution marker"] # 0x2e01 - - "⸂": [t: "left substitution bracket"] # 0x2e02 - - "⸃": [t: "right substitution bracket"] # 0x2e03 - - "⸄": [t: "left dotted substitution bracket"] # 0x2e04 - - "⸅": [t: "right dotted substitution bracket"] # 0x2e05 - - "⸆": [t: "raised interpolation marker"] # 0x2e06 - - "⸇": [t: "raised dotted interpolation marker"] # 0x2e07 - - "⸈": [t: "dotted transposition marker marker"] # 0x2e08 - - "⸉": [t: "left transposition bracket"] # 0x2e09 - - "⸊": [t: "right transposition bracket"] # 0x2e0a - - "⸋": [t: "raised square"] # 0x2e0b - - "⸌": [t: "left raised omission bracket"] # 0x2e0c - - "⸍": [t: "right raised omission bracket"] # 0x2e0d - - "⸎": [t: "editorial coronis"] # 0x2e0e - - "⸏": [t: "paragraphos"] # 0x2e0f - - "⸐": [t: "forked paragraphos"] # 0x2e10 - - "⸑": [t: "reversed forked paragraphos"] # 0x2e11 - - "⸒": [t: "hypodiastole"] # 0x2e12 - - "⸓": [t: "dotted obelos"] # 0x2e13 - - "⸔": [t: "down ancora"] # 0x2e14 - - "⸕": [t: "up ancora"] # 0x2e15 - - "⸖": [t: "dotted right pointing angle"] # 0x2e16 - - "⸗": [t: "double oblique hyphen"] # 0x2e17 - - "⸘": [t: "inverted interrobang"] # 0x2e18 - - "⸙": [t: "palm branch"] # 0x2e19 - - "⸚": [t: "hyphen with diaeresis"] # 0x2e1a - - "⸛": [t: "tilde with ring above"] # 0x2e1b - - "⸜": [t: "left low paraphrase bracket"] # 0x2e1c - - "⸝": [t: "right low paraphrase bracket"] # 0x2e1d - - "⸞": [t: "tilde with dot above"] # 0x2e1e - - "⸟": [t: "tilde with dot below"] # 0x2e1f - - "⸠": [t: "left vertical bar with quill"] # 0x2e20 - - "⸡": [t: "right vertical bar with quill"] # 0x2e21 - - "⸢": [t: "top left half bracket"] # 0x2e22 - - "⸣": [t: "top right half bracket"] # 0x2e23 - - "⸤": [t: "bottom left half bracket"] # 0x2e24 - - "⸥": [t: "bottom right half bracket"] # 0x2e25 - - "⸦": [t: "left sideways u bracket"] # 0x2e26 - - "⸧": [t: "right sideways u bracket"] # 0x2e27 - - "⸨": [t: "left double parentheses"] # 0x2e28 - - "⸩": [t: "right double parentheses"] # 0x2e29 - - "⸪": [t: "two dots over one dot punctuation"] # 0x2e2a - - "⸫": [t: "one dot over two dots punctuation"] # 0x2e2b - - "⸬": [t: "squared four dot punctuation"] # 0x2e2c - - "⸭": [t: "five dot mark"] # 0x2e2d - - "⸮": [t: "reversed question mark"] # 0x2e2e - - "ⸯ": [t: "vertical tilde"] # 0x2e2f - - "⸰": [t: "ring point"] # 0x2e30 - - "⸱": [t: "word separator middle dot"] # 0x2e31 - - "⸲": [t: "turned comma"] # 0x2e32 - - "⸳": [t: "raised dot"] # 0x2e33 - - "⸴": [t: "raised comma"] # 0x2e34 - - "⸵": [t: "turned semicolon"] # 0x2e35 - - "⸶": [t: "dagger with left guard"] # 0x2e36 - - "⸷": [t: "dagger with right guard"] # 0x2e37 - - "⸸": [t: "turned dagger"] # 0x2e38 - - "⸹": [t: "top half section sign"] # 0x2e39 - - "⸺": [t: "two em dash"] # 0x2e3a - - "⸻": [t: "three em dash"] # 0x2e3b - - "〃": [t: "ditto mark"] # 0x3003 - - "〈": [t: "left angle bracket"] # 0x3008 - - "〉": [t: "right angle bracket"] # 0x3009 - - "《": [t: "left double angle bracket"] # 0x300a - - "》": [t: "right double angle bracket"] # 0x300b - - "「": [t: "left corner bracket"] # 0x300c - - "」": [t: "right corner bracket"] # 0x300d - - "『": [t: "left white corner bracket"] # 0x300e - - "』": [t: "right white corner bracket"] # 0x300f - - "【": [t: "left black lenticular bracket"] # 0x3010 - - "】": [t: "right black lenticular bracket"] # 0x3011 - - "〔": [t: "left tortoise shell bracket"] # 0x3014 - - "〕": [t: "right tortoise shell bracket"] # 0x3015 - - "〖": [t: "left white lenticular bracket"] # 0x3016 - - "〗": [t: "right white lenticular bracket"] # 0x3017 - - "〘": [t: "left white tortoise shell bracket"] # 0x3018 - - "〙": [t: "right white tortoise shell bracket"] # 0x3019 - - "〚": [t: "left white square bracket"] # 0x301a - - "〛": [t: "right white square bracket"] # 0x301b - - "〜": [t: "wave dash"] # 0x301c - - "〰": [t: "wavy dash"] # 0x3030 - - "㉈": [t: "circled number ten on black square"] # 0x3248 - - "㉉": [t: "circled number twenty on black square"] # 0x3249 - - "㉊": [t: "circled number thirty on black square"] # 0x324a - - "㉋": [t: "circled number forty on blacks square"] # 0x324b - - "㉌": [t: "circled number fifty on black square"] # 0x324c - - "㉍": [t: "circled number sixty on black square"] # 0x324d - - "㉎": [t: "circled number seventy on black square"] # 0x324e - - "㉏": [t: "circled number eighty on black square"] # 0x324f - - "㉑": [t: "circled number twenty one"] # 0x3251 - - "㉒": [t: "circled number twenty two"] # 0x3252 - - "㉓": [t: "circled number twenty three"] # 0x3253 - - "㉔": [t: "circled number twenty four"] # 0x3254 - - "㉕": [t: "circled number twenty five"] # 0x3255 - - "㉖": [t: "circled number twenty six"] # 0x3256 - - "㉗": [t: "circled number twenty seven"] # 0x3257 - - "㉘": [t: "circled number twenty eight"] # 0x3258 - - "㉙": [t: "circled number twenty nine"] # 0x3259 - - "㉚": [t: "circled number thirty"] # 0x325a - - "㉛": [t: "circled number thirty one"] # 0x325b - - "㉜": [t: "circled number thirty two"] # 0x325c - - "㉝": [t: "circled number thirty three"] # 0x325d - - "㉞": [t: "circled number thirty four"] # 0x325e - - "㉟": [t: "circled number thirty five"] # 0x325f - - "㊱": [t: "circled number thirty six"] # 0x32b1 - - "㊲": [t: "circled number thirty seven"] # 0x32b2 (GPT-5.4 translation) - - "㊳": [t: "circled number thirty eight"] # 0x32b3 (GPT-5.4 translation) - - "㊴": [t: "circled number thirty nine"] # 0x32b4 (GPT-5.4 translation) - - "㊵": [t: "circled number forty"] # 0x32b5 (GPT-5.4 translation) - - "㊶": [t: "circled number forty one"] # 0x32b6 (GPT-5.4 translation) - - "㊷": [t: "circled number forty two"] # 0x32b7 (GPT-5.4 translation) - - "㊸": [t: "circled number forty three"] # 0x32b8 (GPT-5.4 translation) - - "㊹": [t: "circled number forty four"] # 0x32b9 (GPT-5.4 translation) - - "㊺": [t: "circled number forty five"] # 0x32ba (GPT-5.4 translation) - - "㊻": [t: "circled number forty six"] # 0x32bb (GPT-5.4 translation) - - "㊼": [t: "circled number forty seven"] # 0x32bc (GPT-5.4 translation) - - "㊽": [t: "circled number forty eight"] # 0x32bd (GPT-5.4 translation) - - "㊾": [t: "circled number forty nine"] # 0x32be (GPT-5.4 translation) - - "㊿": [t: "circled number fifty"] # 0x32bf (GPT-5.4 translation) - - "㋌": [t: "mercury"] # 0x32cc - - "㋍": [t: "ergs"] # 0x32cd - - "㋎": [t: "electron volts"] # 0x32ce - - "㋏": [t: "limited liability sign"] # 0x32cf - - "㍱": [t: "hectopascals"] # 0x3371 - - "㍲": [t: "daltons"] # 0x3372 - - "㍳": [t: "astronomical units"] # 0x3373 - - "㍴": [t: "bars"] # 0x3374 - - "㍵": [t: "o v"] # 0x3375 - - "㍶": [t: "parsecs"] # 0x3376 - - "㍷": [t: "decimeters"] # 0x3377 - - "㍸": [t: "decimeters squared"] # 0x3378 - - "㍹": [t: "decimeters cubed"] # 0x3379 - - "㍺": [t: "instrumental units"] # 0x337a - - "㎀": [t: "picoamps"] # 0x3380 - - "㎁": [t: "nanoamps"] # 0x3381 - - "㎂": [t: "microamps"] # 0x3382 - - "㎃": [t: "milliamps"] # 0x3383 - - "㎄": [t: "kiloamps"] # 0x3384 - - "㎅": [t: "kilobytes"] # 0x3385 - - "㎆": [t: "megabytes"] # 0x3386 - - "㎇": [t: "gigabytes"] # 0x3387 - - "㎈": [t: "calories"] # 0x3388 - - "㎉": [t: "kilocalories"] # 0x3389 - - "㎊": [t: "picofarads"] # 0x338a - - "㎋": [t: "nanofarads"] # 0x338b - - "㎌": [t: "microfarads"] # 0x338c - - "㎍": [t: "micrograms"] # 0x338d - - "㎎": [t: "milligrams"] # 0x338e - - "㎏": [t: "kilograms"] # 0x338f - - "㎐": [t: "hertz"] # 0x3390 - - "㎑": [t: "kilohertz"] # 0x3391 - - "㎒": [t: "megahertz"] # 0x3392 - - "㎓": [t: "gigahertz"] # 0x3393 - - "㎔": [t: "terahertz"] # 0x3394 - - "㎕": [t: "microliters"] # 0x3395 - - "㎖": [t: "milliliters"] # 0x3396 - - "㎗": [t: "deciliters"] # 0x3397 - - "㎘": [t: "kiloliters"] # 0x3398 - - "㎙": [t: "femtometers"] # 0x3399 - - "㎚": [t: "nanometers"] # 0x339a - - "㎛": [t: "micrometers"] # 0x339b - - "㎜": [t: "millimeters"] # 0x339c - - "㎝": [t: "centimeters"] # 0x339d - - "㎞": [t: "kilometers"] # 0x339e - - "㎟": [t: "millimeters squared"] # 0x339f - - "㎠": [t: "centimeters squared"] # 0x33a0 - - "㎡": [t: "meters squared"] # 0x33a1 - - "㎢": [t: "kilometers squared"] # 0x33a2 - - "㎣": [t: "millimeters cubed"] # 0x33a3 - - "㎤": [t: "centimeters cubed"] # 0x33a4 - - "㎥": [t: "meters cubed"] # 0x33a5 - - "㎦": [t: "kilometers cubed"] # 0x33a6 - - "㎧": [t: "meters per second"] # 0x33a7 - - "㎨": [t: "meters per second squared"] # 0x33a8 - - "㎩": [t: "pascals"] # 0x33a9 - - "㎪": [t: "kilopascals"] # 0x33aa - - "㎫": [t: "megapascals"] # 0x33ab - - "㎬": [t: "gigapascals"] # 0x33ac - - "㎭": [t: "rads"] # 0x33ad - - "㎮": [t: "rads per second"] # 0x33ae - - "㎯": [t: "rads per second squared"] # 0x33af - - "㎰": [t: "picoseconds"] # 0x33b0 - - "㎱": [t: "nanoseconds"] # 0x33b1 - - "㎲": [t: "microseconds"] # 0x33b2 - - "㎳": [t: "milliseconds"] # 0x33b3 - - "㎴": [t: "picovolts"] # 0x33b4 - - "㎵": [t: "nanovolts"] # 0x33b5 - - "㎶": [t: "microvolts"] # 0x33b6 - - "㎷": [t: "millivolts"] # 0x33b7 - - "㎸": [t: "kilovolts"] # 0x33b8 - - "㎹": [t: "megavolts"] # 0x33b9 - - "㎺": [t: "picowatts"] # 0x33ba - - "㎻": [t: "nanowatts"] # 0x33bb - - "㎼": [t: "microwatts"] # 0x33bc - - "㎽": [t: "milliwatts"] # 0x33bd - - "㎾": [t: "kilowatts"] # 0x33be - - "㎿": [t: "megawatts"] # 0x33bf - - "㏀": [t: "kilo-ohms"] # 0x33c0 - - "㏁": [t: "megaohms"] # 0x33c1 - - "㏂": [t: "attometers"] # 0x33c2 - - "㏃": [t: "becquerels"] # 0x33c3 - - "㏄": [t: "cubic centimeters"] # 0x33c4 - - "㏅": [t: "candelas"] # 0x33c5 - - "㏆": [t: "coulombs per kilogram"] # 0x33c6 - - "㏇": [t: "cap C, o, period"] # 0x33c7 (I have no idea what this is) - - "㏈": [t: "decibels"] # 0x33c8 - - "㏉": [t: "grays"] # 0x33c9 - - "㏊": [t: "hectares"] # 0x33ca - - "㏋": [t: "horsepower"] # 0x33cb - - "㏌": [t: "inches"] # 0x33cc - - "㏍": [t: "kilokelvins"] # 0x33cd - - "㏎": [t: "kilometers"] # 0x33ce - - "㏏": [t: "knots"] # 0x33cf - - "㏐": [t: "lumens"] # 0x33d0 - - "㏑": [t: "natural log"] # 0x33d1 - - "㏒": [t: "logarithm"] # 0x33d2 - - "㏓": [t: "lux"] # 0x33d3 - - "㏔": [t: "millibarns"] # 0x33d4 - - "㏕": [t: "mills"] # 0x33d5 - - "㏖": [t: "moles"] # 0x33d6 - - "㏗": [t: "p h"] # 0x33d7 - - "㏘": [t: "picometers"] # 0x33d8 - - "㏙": [t: "parts per million"] # 0x33d9 - - "㏚": [t: "petaroentgens"] # 0x33da - - "㏛": [t: "steradians"] # 0x33db - - "㏜": [t: "sieverts"] # 0x33dc - - "㏝": [t: "webers"] # 0x33dd - - "㏞": [t: "volts per meter"] # 0x33de - - "㏟": [t: "amps per meter"] # 0x33df - - "㏿": [t: "gallons"] # 0x33ff - - "": [t: "equals with hat below"] # 0xe900 - - "": [t: "equals with plus above"] # 0xe901 - - "": [t: "equals with plus below"] # 0xe902 - - "": [t: "tilde with plus above"] # 0xe903 - - "": [t: "tilde with plus below"] # 0xe904 - - "": [t: "equal double over greater than"] # 0xe908 - - "": [t: "equal double over less than"] # 0xe909 - - "": [t: "contains or equal to"] # 0xe90a - - "": [t: "superset of or equal to"] # 0xe90b - - "": [t: "subset of or equal to"] # 0xe90c - - "": [t: "equal over less than"] # 0xe90d - - "": [t: "element of or equal to"] # 0xe912 - - "": [t: "equal to or greater than"] # 0xe913 - - "": [t: "approximate superset of"] # 0xe914 - - "": [t: "approximate subset of"] # 0xe915 - - "": [t: "superset of with dot includes as sub relation"] # 0xe916 - - "": [t: "subset of with dot is included in as sub relation"] # 0xe917 - - "": [t: "equal with dot below"] # 0xe918 - - "": [t: "left dot over minus over right dot"] # 0xe919 - - "": [t: "right dot over minus over left dot"] # 0xe91a - - "": [t: "almost equal to minus"] # 0xe91f - - "": [t: "double square cup"] # 0xe920 - - "": [t: "double square cap"] # 0xe921 - - "": [t: "less than equal to or greater than"] # 0xe922 - - "": [t: "tilde with dot"] # 0xe924 - - "": [t: "tilde with two dots"] # 0xe925 - - "": [t: "less than greater than or equal to"] # 0xe926 - - "": [t: "greater than less than or equal to"] # 0xe927 - - "": [t: "equivalent to or less than"] # 0xe928 - - "": [t: "equivalent to or greater than"] # 0xe929 - - "": [t: "left open box operator"] # 0xe92a - - "": [t: "right open box operator"] # 0xe92b - - "": [t: "identical to with dot"] # 0xe92c - - "": [t: "greater than equal to or less than"] # 0xe92d - - "": [t: "bar operator"] # 0xe92e - - "": [t: "double bar operator"] # 0xe92f - - "": [t: "triple bar operator"] # 0xe930 - - "": [t: "less than or approximately equal to"] # 0xe932 - - "": [t: "greater than or approximately equal to"] # 0xe933 - - "": [t: "nested less than"] # 0xe936 - - "": [t: "nested greater than"] # 0xe937 - - "": [t: "precedes or equivalent to"] # 0xe93a - - "": [t: "succeeds or equivalent to"] # 0xe93b - - "": [t: "precedes over equal"] # 0xe940 - - "": [t: "succeeds over equal"] # 0xe941 - - "": [t: "less equal slanted greater"] # 0xe942 - - "": [t: "greater equal slanted less"] # 0xe943 - - "": [t: "satisfied by"] # 0xe948 - - "": [t: "lazy s"] # 0xe949 - - "": [t: "not assertion"] # 0xe94a - - "": [t: "double equal"] # 0xe94b - - "": [t: "triple equal"] # 0xe94c - - "": [t: "rule delayed"] # 0xe94d - - "": [t: "alias delimiter"] # 0xe94e - - "": [t: "normal subgroup of with bar"] # 0xe950 - - "": [t: "contains as normal subgroup with bar"] # 0xe951 - - "": [t: "round implies"] # 0xe954 - - "": [t: "smile under bar"] # 0xe955 - - "": [t: "frown over bar"] # 0xe956 - - "": [t: "superset of or almost equal to"] # 0xe957 - - "": [t: "subset of or almost equal to"] # 0xe958 - - "": [t: "greater than almost equal to or less than"] # 0xe959 - - "": [t: "less than almost equal or greater than"] # 0xe95a - - "": [t: "double logical or"] # 0xe95c - - "": [t: "double logical and"] # 0xe95d - - "": [t: "logical or with double bar below"] # 0xe95e - - "": [t: "logical or with bar below"] # 0xe95f - - "": [t: "almost equal over equal"] # 0xe962 - - "": [t: "left pointing triangle with bisecting bar"] # 0xe964 - - "": [t: "right pointing triangle with bisecting bar"] # 0xe965 - - "": [t: "equals with dotted top line"] # 0xe966 - - "": [t: "precedes with colon"] # 0xe967 - - "": [t: "succeeds with colon"] # 0xe968 - - "": [t: "smaller than or equal slanted"] # 0xe969 - - "": [t: "larger than or equal slanted"] # 0xe96a - - "": [t: "nested very much less than"] # 0xe96b - - "": [t: "nested very much greater than"] # 0xe96c - - "": [t: "difference between variant"] # 0xe96d - - "": [t: "less than greater than overlay"] # 0xe96e - - "": [t: "logical or logical and overlay"] # 0xe96f - - "": [t: "superset over superset"] # 0xe970 - - "": [t: "subset over subset"] # 0xe971 - - "": [t: "superset over subset"] # 0xe972 - - "": [t: "subset over superset"] # 0xe973 - - "": [t: "triple vertical bar"] # 0xe979 - - "": [t: "paired quadruple vertical dots"] # 0xe97a - - "": [t: "perpendicular over bar"] # 0xe97b - - "": [t: "left turnstile double vertical bar"] # 0xe97c - - "": [t: "double left turnstile double vertical bar"] # 0xe97d - - "": [t: "perpendicular over inverted perpendicular"] # 0xe97e - - "": [t: "double left turnstile vertical bar"] # 0xe97f - - "": [t: "spherical angle opening up"] # 0xe980 - - "": [t: "double slash"] # 0xe981 - - "": [t: "right angle with corner"] # 0xe982 - - "": [t: "circled vertical bar"] # 0xe984 - - "": [t: "circled division sign"] # 0xe985 - - "": [t: "dashed solidus"] # 0xe986 - - "": [t: "dashed backslash"] # 0xe987 - - "": [t: "dashed mid line"] # 0xe988 - - "": [t: "dashed vertical bar"] # 0xe989 - - "": [t: "perpendicular with s"] # 0xe98a - - "": [t: "angle with s"] # 0xe98b - - "": [t: "spherical angle opening left"] # 0xe98c - - "": [t: "angle opening left"] # 0xe98d - - "": [t: "vertical bar with double hook"] # 0xe98e - - "": [t: "medium dot operator free radical"] # 0xe98f - - "": [t: "white up pointing triangle above bar"] # 0xe990 - - "": [t: "identical and parallel to"] # 0xe991 - - "": [t: "smash product"] # 0xe992 - - "": [t: "triple bar operator with horizontal bar"] # 0xe993 - - "": [t: "identical to with double slash"] # 0xe994 - - "": [t: "triple crossed bars"] # 0xe995 - - "": [t: "vertical bar over circle"] # 0xe996 - - "": [t: "vertical proportional to"] # 0xe997 - - "": [t: "black last quarter moon"] # 0xe998 - - "": [t: "black first quarter moon"] # 0xe999 - - "": [t: "negative sine wave"] # 0xe9a0 - - "": [t: "parenthesized dot"] # 0xe9a1 - - "": [t: "parens"] # 0xe9a2 - - "": [t: "white smile"] # 0xe9a3 - - "": [t: "white frown"] # 0xe9a4 - - "": [t: "hexagon"] # 0xe9a5 - - "": [t: "equivalent to over plus"] # 0xe9a6 - - "": [t: "plus over equivalent to"] # 0xe9a7 - - "": [t: "intersection serifs"] # 0xe9b0 - - "": [t: "union serifs"] # 0xe9b1 - - "": [t: "square intersection serifs"] # 0xe9b2 - - "": [t: "square union serifs"] # 0xe9b3 - - "": [t: "precedes equivalent to or succeeds"] # 0xe9e0 - - "": [t: "succeeds equivalent to or precedes"] # 0xe9e1 - - "": [t: "precedes almost equal to or succeeds"] # 0xe9e2 - - "": [t: "succeeds almost equal to or precedes"] # 0xe9e3 - - "": [t: "less than equivalent to or greater than"] # 0xe9f0 - - "": [t: "greater than equivalent to or less than"] # 0xe9f1 - - "": [t: "not vert much less than"] # 0xea00 - - "": [t: "not vert much greater than"] # 0xea01 - - "": [t: "not much less than variant"] # 0xea02 - - "": [t: "not much greater than variant"] # 0xea03 - - "": [t: "less vert not double equals"] # 0xea04 - - "": [t: "gt vert not double equals"] # 0xea05 - - "": [t: "not less than or equal to"] # 0xea06 - - "": [t: "not greater than or equal to"] # 0xea07 - - "": [t: "neither equal to nor less than"] # 0xea09 - - "": [t: "does not contain or equal to"] # 0xea0a - - "": [t: "neither superset of nor equal to"] # 0xea0b - - "": [t: "neither subset of nor equal to"] # 0xea0c - - "": [t: "reverse solidus subset"] # 0xea0d - - "": [t: "neither equal to nor greater than"] # 0xea0e - - "": [t: "not minus tilde operator"] # 0xea0f - - "": [t: "neither equal to nor less than"] # 0xea10 - - "": [t: "not tilde operator"] # 0xea11 - - "": [t: "not element of or equal to"] # 0xea12 - - "": [t: "neither equal to nor greater than"] # 0xea13 - - "": [t: "not almost equal"] # 0xea14 - - "": [t: "not succeeds similar"] # 0xea15 - - "": [t: "less than or slanted equal to with slash"] # 0xea16 - - "": [t: "greater than or slanted equal to with slash"] # 0xea17 - - "": [t: "superset solidus"] # 0xea1a - - "": [t: "does not contain"] # 0xea1b - - "": [t: "not less than or equal to"] # 0xea1d - - "": [t: "not greater than or equal to"] # 0xea1e - - "": [t: "not almost equal to minus"] # 0xea1f - - "": [t: "negated set membership dot above"] # 0xea22 - - "": [t: "not vert angle"] # 0xea2c - - "": [t: "not parallel slanted"] # 0xea2d - - "": [t: "not bar operator"] # 0xea2e - - "": [t: "not double bar operator"] # 0xea2f - - "": [t: "not triple bar operator"] # 0xea30 - - "": [t: "less than but not approximately equal to"] # 0xea32 - - "": [t: "greater than but not approximately equal to"] # 0xea33 - - "": [t: "less than or not equal to"] # 0xea34 - - "": [t: "greater than or not equal to"] # 0xea35 - - "": [t: "not nested less than"] # 0xea36 - - "": [t: "not nested greater than"] # 0xea37 - - "": [t: "not much less than"] # 0xea38 - - "": [t: "not much greater than"] # 0xea39 - - "": [t: "precedes but not equivalent to"] # 0xea3a - - "": [t: "succeeds but not equivalent to"] # 0xea3b - - "": [t: "precedes but not equal to"] # 0xea3c - - "": [t: "succeeds but not equal to"] # 0xea3d - - "": [t: "does not equal or precede"] # 0xea3e - - "": [t: "does not equal or succeed"] # 0xea3f - - "": [t: "precedes but not equal to"] # 0xea40 - - "": [t: "succeeds but not equal to"] # 0xea41 - - "": [t: "not subset of nor equal to"] # 0xea42 - - "": [t: "not superset of nor equal to"] # 0xea43 - - "": [t: "subset of or not equal to"] # 0xea44 - - "": [t: "superset of or not equal to"] # 0xea45 - - "": [t: "not subset of nor equal to"] # 0xea46 - - "": [t: "not superset of nor equal to"] # 0xea47 - - "": [t: "not triple less than"] # 0xea48 - - "": [t: "not triple greater than"] # 0xea49 - - "": [t: "not precedes equals"] # 0xea4c - - "": [t: "not succeeds equals"] # 0xea4d - - "": [t: "not normal subgroup of with bar"] # 0xea50 - - "": [t: "does not contain as normal subgroup with bar"] # 0xea51 - - "": [t: "not difference between"] # 0xea52 - - "": [t: "not geometrically equivalent to"] # 0xea53 - - "": [t: "not vert similar"] # 0xea54 - - "": [t: "not equal or similar"] # 0xea55 - - "": [t: "not vert approximate"] # 0xea56 - - "": [t: "not approximately identical to"] # 0xea57 - - "": [t: "not bumpy equals"] # 0xea58 - - "": [t: "not bumpy single equals"] # 0xea59 - - "": [t: "not equal dot"] # 0xea5a - - "": [t: "reverse not equivalent"] # 0xea5b - - "": [t: "not square subset"] # 0xea60 - - "": [t: "not square superset"] # 0xea61 - - "": [t: "not almost equal over equal"] # 0xea62 - - "": [t: "not strictly equivalent to"] # 0xea63 - - "": [t: "not congruent dot"] # 0xea64 - - "": [t: "reverse not equal"] # 0xea65 - - "": [t: "not vert left triangle equals"] # 0xea70 - - "": [t: "not vert right triangle equals"] # 0xea71 - - "": [t: "not partial"] # 0xea80 - - "": [t: "arrow embellishment extender"] # 0xeb00 - - "": [t: "arrow right over arrow left"] # 0xeb01 - - "": [t: "arrow right over arrow left"] # 0xeb02 - - "": [t: "harpoon right over harpoon left"] # 0xeb03 - - "": [t: "harpoon right over harpoon left"] # 0xeb04 - - "": [t: "double arrow northeast southwest"] # 0xeb05 - - "": [t: "double arrow northwest southeast"] # 0xeb06 - - "": [t: "horizontal harpoon extender"] # 0xeb07 - - "": [t: "anticlockwise arc left arrow"] # 0xeb08 - - "": [t: "anticlockwise arc right arrow"] # 0xeb09 - - "": [t: "large right arrow accent"] # 0xeb0b - - "": [t: "large left arrow accent"] # 0xeb0c - - "": [t: "left arrowhead"] # 0xeb0d - - "": [t: "right arrowhead"] # 0xeb0e - - "": [t: "large left right arrow with stroke"] # 0xeb0f - - "": [t: "horizontal double arrow extender"] # 0xeb10 - - "": [t: "large left right double arrow with stroke"] # 0xeb11 - - "": [t: "down arrow left of up arrow"] # 0xeb12 - - "": [t: "left arrow with corner down"] # 0xeb13 - - "": [t: "right arrow with corner up"] # 0xeb14 - - "": [t: "left arrow with corner up"] # 0xeb15 - - "": [t: "anticlockwise top semicircle arrow with plus"] # 0xeb16 - - "": [t: "clockwise top semicircle arrow with minus"] # 0xeb17 - - "": [t: "right arrow with tail with stroke"] # 0xeb18 - - "": [t: "right harpoon down"] # 0xeb19 - - "": [t: "left harpoon down"] # 0xeb1a - - "": [t: "left right harpoon down"] # 0xeb1b - - "": [t: "left right harpoon up"] # 0xeb1c - - "": [t: "up down harpoon left"] # 0xeb1d - - "": [t: "up down harpoon right"] # 0xeb1e - - "": [t: "up arrow to the right of down arrow"] # 0xeb1f - - "": [t: "left harpoon to bar with barb up"] # 0xeb20 - - "": [t: "right harpoon to bar with barb up"] # 0xeb21 - - "": [t: "left harpoon to bar with barb down"] # 0xeb22 - - "": [t: "right harpoon to bar with barb down"] # 0xeb23 - - "": [t: "left harpoon from bar with barb up"] # 0xeb24 - - "": [t: "right harpoon from bar with barb up"] # 0xeb25 - - "": [t: "left harpoon from bar with barb down"] # 0xeb26 - - "": [t: "right harpoon from bar with barb down"] # 0xeb27 - - "": [t: "up harpoon to bar with barb left"] # 0xeb28 - - "": [t: "down harpoon to bar with barb left"] # 0xeb29 - - "": [t: "up harpoon to bar with barb right"] # 0xeb2a - - "": [t: "down harpoon to bar with barb right"] # 0xeb2b - - "": [t: "up harpoon from bar with barb left"] # 0xeb2c - - "": [t: "down harpoon from bar with barb left"] # 0xeb2d - - "": [t: "up harpoon from bar with barb right"] # 0xeb2e - - "": [t: "down harpoon from bar with barb right"] # 0xeb2f - - "": [t: "up arrow to bar"] # 0xeb30 - - "": [t: "down arrow to bar"] # 0xeb31 - - "": [t: "up harpoon to the left of down harpoon"] # 0xeb32 - - "": [t: "up harpoon to the right of down harpoon"] # 0xeb33 - - "": [t: "up arrowhead"] # 0xeb34 - - "": [t: "down arrowhead"] # 0xeb35 - - "": [t: "double harpoon with left barb down right barb up"] # 0xeb36 - - "": [t: "double harpoon with left barb up right barb down"] # 0xeb37 - - "": [t: "left arrow over bar"] # 0xeb38 - - "": [t: "right arrow over bar"] # 0xeb39 - - "": [t: "left arrow under bar"] # 0xeb3a - - "": [t: "right arrow under bar"] # 0xeb3b - - "": [t: "left right triple arrow"] # 0xeb3c - - "": [t: "double arrow northeast southeast"] # 0xeb3f - - "": [t: "anticlockwise left semicircle arrow"] # 0xeb40 - - "": [t: "clockwise left semicircle arrow"] # 0xeb41 - - "": [t: "left open circle left right arrow"] # 0xeb42 - - "": [t: "right arrow over tilde"] # 0xeb44 - - "": [t: "left arrow over tilde"] # 0xeb45 - - "": [t: "left harpoon over bar"] # 0xeb48 - - "": [t: "right harpoon over bar"] # 0xeb49 - - "": [t: "left harpoon under bar"] # 0xeb4a - - "": [t: "right harpoon under bar"] # 0xeb4b - - "": [t: "squat black left arrow"] # 0xeb4c - - "": [t: "clockwise right semicircle arrow"] # 0xeb50 - - "": [t: "anticlockwise right semicircle arrow"] # 0xeb51 - - "": [t: "left open circle left right harpoon"] # 0xeb52 - - "": [t: "up arrow left of vertical bar"] # 0xeb58 - - "": [t: "down arrow left of vertical bar"] # 0xeb59 - - "": [t: "up arrow right of vertical bar"] # 0xeb5a - - "": [t: "down arrow right of vertical bar"] # 0xeb5b - - "": [t: "right arrow with extended down hook"] # 0xeb5c - - "": [t: "left arrow with extended hook"] # 0xeb5d - - "": [t: "left arrow with extended down hook"] # 0xeb5e - - "": [t: "right arrow with extended hook"] # 0xeb5f - - "": [t: "not right arrow wavy"] # 0xeb60 - - "": [t: "not right arrow curved"] # 0xeb61 - - "": [t: "up harpoon left of vertical bar"] # 0xeb68 - - "": [t: "down harpoon left of vertical bar"] # 0xeb69 - - "": [t: "up harpoon right of vertical bar"] # 0xeb6a - - "": [t: "down harpoon right of vertical bar"] # 0xeb6b - - "": [t: "vertical double arrow extender"] # 0xeb6c - - "": [t: "vertical harpoon with barb left extender"] # 0xeb6d - - "": [t: "vertical harpoon with barb right extender"] # 0xeb6e - - "": [t: "right harpoon over left harpoon right"] # 0xeb6f - - "": [t: "right harpoon over left harpoon left"] # 0xeb70 - - "": [t: "left harpoon over right harpoon right"] # 0xeb71 - - "": [t: "left harpoon over right harpoon left"] # 0xeb72 - - "": [t: "left arrow from bar arrowhead"] # 0xeb73 - - "": [t: "left right arrow from bar extender"] # 0xeb74 - - "": [t: "left arrow from bar tail"] # 0xeb75 - - "": [t: "right arrow from bar tail"] # 0xeb76 - - "": [t: "right arrow from bar arrowhead"] # 0xeb77 - - "": [t: "up harpoon from bar with barb left arrowhead"] # 0xeb78 - - "": [t: "right arrow over left arrow right"] # 0xeb79 - - "": [t: "right arrow over left arrow left"] # 0xeb7a - - "": [t: "left arrow over right arrow right"] # 0xeb7b - - "": [t: "left arrow over right arrow left"] # 0xeb7c - - "": [t: "up arrow from bar arrowhead"] # 0xeb7d - - "": [t: "up arrow from bar tail"] # 0xeb7e - - "": [t: "down arrow from bar tail"] # 0xeb7f - - "": [t: "down arrow from bar arrowhead"] # 0xeb80 - - "": [t: "down harpoon from bar with barb right arrowhead"] # 0xeb81 - - "": [t: "up harpoon to the left of down harpoon bottom"] # 0xeb82 - - "": [t: "up harpoon to the left of down harpoon extender"] # 0xeb83 - - "": [t: "down harpoon to the left of up harpoon top"] # 0xeb84 - - "": [t: "up harpoon to the left of down harpoon top"] # 0xeb85 - - "": [t: "down harpoon to the left of the up harpoon extender"] # 0xeb86 - - "": [t: "down harpoon to the left of the up harpoon bottom"] # 0xeb87 - - "": [t: "up arrow left of down arrow bottom"] # 0xeb88 - - "": [t: "down arrow left of up arrow top"] # 0xeb89 - - "": [t: "up arrow left of down arrow top"] # 0xeb8a - - "": [t: "down arrow left of up arrow bottom"] # 0xeb8b - - "": [t: "left right arrows extender"] # 0xeb8c - - "": [t: "north east arrow extender"] # 0xeb8d - - "": [t: "north west arrow extender"] # 0xeb8e - - "": [t: "down pointing brace left"] # 0xec00 - - "": [t: "down pointing brace mid"] # 0xec01 - - "": [t: "down pointing brace right"] # 0xec02 - - "": [t: "horizontal brace extender"] # 0xec03 - - "": [t: "up pointing brace left"] # 0xec04 - - "": [t: "up pointing brace mid"] # 0xec05 - - "": [t: "up-pointing brace right"] # 0xec06 - - "": [t: "left vertical bar"] # 0xec07 - - "": [t: "right vertical bar"] # 0xec08 - - "": [t: "left double vertical bar"] # 0xec09 - - "": [t: "right double vertical bar"] # 0xec0a - - "": [t: "horizontal bracket extender"] # 0xec0b - - "": [t: "under square bracket"] # 0xec0c - - "⎵": [t: "under square bracket"] # 0x23b5 - - "": [t: "over square bracket"] # 0xec0d - - "⎴": [t: "over square bracket"] # 0x23b4 - - "": [t: "under bracket left"] # 0xec0e - - "": [t: "under bracket right"] # 0xec0f - - "": [t: "over bracket left"] # 0xec10 - - "": [t: "over bracket right"] # 0xec11 - - "": [t: "left parens 1"] # 0xec12 - - "": [t: "left parens 2"] # 0xec13 - - "": [t: "left parens 3"] # 0xec14 - - "": [t: "left parens 4"] # 0xec15 - - "": [t: "right parens 1"] # 0xec16 - - "": [t: "right parens 2"] # 0xec17 - - "": [t: "right parens 3"] # 0xec18 - - "": [t: "right parens 4"] # 0xec19 - - "": [t: "radical 1"] # 0xec1a - - "": [t: "radical 2"] # 0xec1b - - "": [t: "radical 3"] # 0xec1c - - "": [t: "radical 4"] # 0xec1d - - "": [t: "radical 5"] # 0xec1e - - "": [t: "radical bottom"] # 0xec1f - - "": [t: "radical vertical extender"] # 0xec20 - - "": [t: "radical top"] # 0xec21 - - "": [t: "left white bracket top"] # 0xec22 - - "": [t: "left white bracket extender"] # 0xec23 - - "": [t: "left white bracket bottom"] # 0xec24 - - "": [t: "right white bracket top"] # 0xec25 - - "": [t: "right white bracket extender"] # 0xec26 - - "": [t: "right white bracket bottom"] # 0xec27 - - "": [t: "left white curly bracket"] # 0xec30 - - "": [t: "right white curly bracket"] # 0xec31 - - "": [t: "long division sign"] # 0xec32 - - "": [t: "long division sign extender"] # 0xec33 - - "": [t: "short division"] # 0xec34 - - "": [t: "double southwest to northeast em bond"] # 0xec40 - - "": [t: "double northwest to southeast em bond"] # 0xec41 - - "": [t: "single horizontal em bond"] # 0xec42 - - "": [t: "double horizontal em bond"] # 0xec43 - - "": [t: "triple horizontal em bond"] # 0xec44 - - "": [t: "single vertical em bond"] # 0xec45 - - "": [t: "double vertical em bond"] # 0xec46 - - "": [t: "triple vertical em bond"] # 0xec47 - - "": [t: "less than em bond"] # 0xec48 - - "": [t: "greater than em bond"] # 0xec49 - - "": [t: "single horizontal en bond"] # 0xec4a - - "": [t: "double horizontal en bond"] # 0xec4b - - "": [t: "triple horizontal en bond"] # 0xec4c - - "": [t: "top left rectangle"] # 0xec80 - - "": [t: "bottom left rectangle"] # 0xec81 - - "": [t: "top right rectangle"] # 0xec90 - - "": [t: "bottom right rectangle"] # 0xec91 - - "": [t: "synthetic division corner"] # 0xec92 - - "": [t: "synthetic division horizontal extender"] # 0xec93 - - "": [t: "synthetic division vertical extender"] # 0xec94 - - "": [t: "left ceiling floor extender"] # 0xec95 - - "": [t: "right ceiling floor extender"] # 0xec96 - - "": [t: "over bracket extender"] # 0xec97 - - "": [t: "vertical bar extender"] # 0xec98 - - "": [t: "left double vertical bar extender"] # 0xec99 - - "": [t: "horizontal bar extender"] # 0xec9a - - "": [t: "under bracket extender"] # 0xec9c - - "": [t: "down pointing paren right"] # 0xec9d - - "": [t: "down pointing paren extender"] # 0xec9e - - "": [t: "down pointing paren left"] # 0xec9f - - "": [t: "up pointing brace extender"] # 0xeca0 - - "": [t: "up pointing paren left"] # 0xeca1 - - "": [t: "up pointing paren extender"] # 0xeca2 - - "": [t: "up pointing paren right"] # 0xeca3 - - "": [t: "down pointing brace extender"] # 0xeca4 - - "": [t: "planck constant over two pi bar"] # 0xed00 - - "": [t: "mirror g"] # 0xed01 - - "": [t: "dotless j"] # 0xed02 - - "": [t: "digamma"] # 0xed03 - - "ϝ": [t: "digamma"] # 0x3dd - - "": [t: "d"] # 0xed10 - - "ⅆ": [t: "d"] # 0x2146 - - "": [t: "e"] # 0xed11 - - "ⅇ": [t: "e"] # 0x2147 - - "": [t: "i"] # 0xed12 - - "ⅈ": [t: "i"] # 0x2148 - - "": [t: "j"] # 0xed13 + then: [t: "kereszt"] # (en: 'cross', DeepL translation) + else: [t: "kereszt termék"] # (en: 'cross product', DeepL translation) + - "⨰": [t: "szorzójel pont fölött"] # 0x2a30 (en: 'multiplication sign with dot above', DeepL translation) + - "⨱": [t: "szorzójel alulvonallal"] # 0x2a31 (en: 'multiplication sign with underbar', DeepL translation) + - "⨲": [t: "félközvetett termék alul zárt"] # 0x2a32 (en: 'semidirect product with bottom closed', DeepL translation) + - "⨳": [t: "smash termék"] # 0x2a33 (en: 'smash product', DeepL translation) + - "⨴": [t: "szorzójel a bal oldali félkörben"] # 0x2a34 (en: 'multiplication sign in left half circle', DeepL translation) + - "⨵": [t: "szorzójel a jobb oldali félkörben"] # 0x2a35 (en: 'multiplication sign in right half circle', DeepL translation) + - "⨶": [t: "bekarikázott szorzójel körkörös ékezettel"] # 0x2a36 (en: 'circled multiplication sign with circumflex accent', DeepL translation) + - "⨷": [t: "szorzójel kettős körben"] # 0x2a37 (en: 'multiplication sign in double circle', DeepL translation) + - "⨸": [t: "bekarikázott osztásjel"] # 0x2a38 (en: 'circled division sign', DeepL translation) + - "⨹": [t: "plusz jel háromszögben"] # 0x2a39 (en: 'plus sign in triangle', DeepL translation) + - "⨺": [t: "mínusz jel háromszögben"] # 0x2a3a (en: 'minus sign in triangle', DeepL translation) + - "⨻": [t: "szorzójel háromszögben"] # 0x2a3b (en: 'multiplication sign in triangle', DeepL translation) + - "⨼": [t: "belső termék"] # 0x2a3c (en: 'interior product', DeepL translation) + - "⨽": [t: "jobb oldali belső termék"] # 0x2a3d (en: 'righthand interior product', DeepL translation) + - "⨾": [t: "z jelölés relációs kompozíció"] # 0x2a3e (en: 'z notation relational composition', DeepL translation) + - "⨿": [t: "összeolvadás vagy koprodukció"] # 0x2a3f (en: 'amalgamation or coproduct', DeepL translation) + - "⩀": [t: "metszéspont ponttal"] # 0x2a40 (en: 'intersection with dot', DeepL translation) + - "⩁": [t: "egyesülés mínusz jellel"] # 0x2a41 (en: 'union with minus sign', DeepL translation) + - "⩂": [t: "unió fölött vonallal"] # 0x2a42 (en: 'union with overbar', DeepL translation) + - "⩃": [t: "metszéspont felülbillentyűvel"] # 0x2a43 (en: 'intersection with overbar', DeepL translation) + - "⩄": [t: "metszéspontja logikai és"] # 0x2a44 (en: 'intersection with logical and', DeepL translation) + - "⩅": [t: "egyesülés logikai vagy"] # 0x2a45 (en: 'union with logical or', DeepL translation) + - "⩆": [t: "unió felett metszéspont"] # 0x2a46 (en: 'union above intersection', DeepL translation) + - "⩇": [t: "metszéspont felett egyesülés"] # 0x2a47 (en: 'intersection above union', DeepL translation) + - "⩈": [t: "egyesülés felett sáv felett metszéspont"] # 0x2a48 (en: 'union above bar above intersection', DeepL translation) + - "⩉": [t: "metszéspont felett sáv felett unió"] # 0x2a49 (en: 'intersection above bar above union', DeepL translation) + - "⩊": [t: "egyesülés mellett és egyesüléssel összekötve"] # 0x2a4a (en: 'union beside and joined with union', DeepL translation) + - "⩋": [t: "metszéspont mellett és csatlakozott metszéspont"] # 0x2a4b (en: 'intersection beside and joined with intersection', DeepL translation) + - "⩌": [t: "zárt unió szeriuszokkal"] # 0x2a4c (en: 'closed union with serifs', DeepL translation) + - "⩍": [t: "zárt metszéspont serifekkel"] # 0x2a4d (en: 'closed intersection with serifs', DeepL translation) + - "⩎": [t: "kettős négyzet metszéspont"] # 0x2a4e (en: 'double square intersection', DeepL translation) + - "⩏": [t: "kettős négyzet egyesülés"] # 0x2a4f (en: 'double square union', DeepL translation) + - "⩐": [t: "zárt unió szeriókkal és zúzott termékkel"] # 0x2a50 (en: 'closed union with serifs and smash product', DeepL translation) + - "⩑": [t: "logikus és pont felett"] # 0x2a51 (en: 'logical and with dot above', DeepL translation) + - "⩒": [t: "logikus vagy ponttal felette"] # 0x2a52 (en: 'logical or with dot above', DeepL translation) + - "⩓": [t: "kettős logikai és"] # 0x2a53 (en: 'double logical and', DeepL translation) + - "⩔": [t: "dupla logikai vagy"] # 0x2a54 (en: 'double logical or', DeepL translation) + - "⩕": [t: "két egymást metsző logikai és"] # 0x2a55 (en: 'two intersecting logical and', DeepL translation) + - "⩖": [t: "két egymást metsző logikai vagy"] # 0x2a56 (en: 'two intersecting logical or', DeepL translation) + - "⩗": [t: "ferde nagy vagy"] # 0x2a57 (en: 'sloping large or', DeepL translation) + - "⩘": [t: "ferde nagy és"] # 0x2a58 (en: 'sloping large and', DeepL translation) + - "⩙": [t: "logikai vagy átfedő logikai és"] # 0x2a59 (en: 'logical or overlapping logical and', DeepL translation) + - "⩚": [t: "logikai és középső szárral"] # 0x2a5a (en: 'logical and with middle stem', DeepL translation) + - "⩛": [t: "logikai vagy középső szárral"] # 0x2a5b (en: 'logical or with middle stem', DeepL translation) + - "⩜": [t: "logikai és vízszintes kötőjellel"] # 0x2a5c (en: 'logical and with horizontal dash', DeepL translation) + - "⩝": [t: "logikai vagy vízszintes kötőjellel"] # 0x2a5d (en: 'logical or with horizontal dash', DeepL translation) + - "⩞": [t: "logikai és dupla felülvonallal"] # 0x2a5e (en: 'logical and with double overbar', DeepL translation) + - "⩟": [t: "logikus és alulütővel"] # 0x2a5f (en: 'logical and with underbar', DeepL translation) + - "⩠": [t: "logikai és dupla aláhúzással"] # 0x2a60 (en: 'logical and with double underbar', DeepL translation) + - "⩡": [t: "kis véna alulvonallal"] # 0x2a61 (en: 'small vee with underbar', DeepL translation) + - "⩢": [t: "logikai vagy dupla feletti vonallal"] # 0x2a62 (en: 'logical or with double overbar', DeepL translation) + - "⩣": [t: "logikai vagy dupla aláhúzott sávval"] # 0x2a63 (en: 'logical or with double underbar', DeepL translation) + - "⩤": [t: "z jelölés tartomány antirestrikció"] # 0x2a64 (en: 'z notation domain antirestriction', DeepL translation) + - "⩥": [t: "z jelölés tartomány antirestrikció"] # 0x2a65 (en: 'z notation range antirestriction', DeepL translation) + - "⩦": [t: "egyenlőségjel ponttal alul"] # 0x2a66 (en: 'equals sign with dot below', DeepL translation) + - "⩧": [t: "azonos a fenti ponttal"] # 0x2a67 (en: 'identical with dot above', DeepL translation) + - "⩨": [t: "háromszoros vízszintes sáv dupla függőleges vonallal"] # 0x2a68 (en: 'triple horizontal bar with double vertical stroke', DeepL translation) + - "⩩": [t: "háromszoros vízszintes sáv háromszoros függőleges vonallal"] # 0x2a69 (en: 'triple horizontal bar with triple vertical stroke', DeepL translation) + - "⩪": [t: "tilde operátor ponttal felül"] # 0x2a6a (en: 'tilde operator with dot above', DeepL translation) + - "⩫": [t: "tilde operátor emelkedő pontokkal"] # 0x2a6b (en: 'tilde operator with rising dots', DeepL translation) + - "⩬": [t: "hasonló mínusz hasonló"] # 0x2a6c (en: 'similar minus similar', DeepL translation) + - "⩭": [t: "egybeesik a fenti ponttal"] # 0x2a6d (en: 'congruent with dot above', DeepL translation) + - "⩮": [t: "egyenlő csillaggal"] # 0x2a6e (en: 'equals with asterisk', DeepL translation) + - "⩯": [t: "majdnem egyenlő a körkörös ékezettel"] # 0x2a6f (en: 'almost equal to with circumflex accent', DeepL translation) + - "⩰": [t: "megközelítőleg egyenlő vagy egyenlő"] # 0x2a70 (en: 'approximately equal to or equal to', DeepL translation) + - "⩱": [t: "egyenlőségjel felett plusz jel"] # 0x2a71 (en: 'equals sign above plus sign', DeepL translation) + - "⩲": [t: "plusz jel felett egyenlő jel"] # 0x2a72 (en: 'plus sign above equals sign', DeepL translation) + - "⩳": [t: "egyenlőségjel a tilde operátor felett"] # 0x2a73 (en: 'equals sign above tilde operator', DeepL translation) + - "⩴": [t: "kettős kettőspont egyenlő"] # 0x2a74 (en: 'double colon equal', DeepL translation) + - "⩵": [t: "két egymást követő egyenlőségjel"] # 0x2a75 (en: 'two consecutive equals signs', DeepL translation) + - "⩶": [t: "három egymást követő egyenlőségjel"] # 0x2a76 (en: 'three consecutive equals signs', DeepL translation) + - "⩷": [t: "egyenlőségjel két ponttal felül és két ponttal alul"] # 0x2a77 (en: 'equals sign with two dots above and two dots below', DeepL translation) + - "⩸": [t: "egyenértékű négy pont fölött"] # 0x2a78 (en: 'equivalent with four dots above', DeepL translation) + - "⩹": [t: "kisebb, mint belül körrel"] # 0x2a79 (en: 'less than with circle inside', DeepL translation) + - "⩺": [t: "nagyobb, mint körrel belül"] # 0x2a7a (en: 'greater than with circle inside', DeepL translation) + - "⩻": [t: "kevesebb mint, felette kérdőjellel"] # 0x2a7b (en: 'less than with question mark above', DeepL translation) + - "⩼": [t: "nagyobb, mint a fenti kérdőjellel"] # 0x2a7c (en: 'greater than with question mark above', DeepL translation) + - "⩽": [t: "kevesebb, mint vagy ferdén egyenlő"] # 0x2a7d (en: 'less than or slanted equal to', DeepL translation) + - "⩾": [t: "nagyobb, mint egyenlő vagy ferde egyenlő"] # 0x2a7e (en: 'greater than or slanted equal to', DeepL translation) + - "⩿": [t: "kevesebb, mint vagy ferde egyenlő, benne ponttal"] # 0x2a7f (en: 'less than or slanted equal to with dot inside', DeepL translation) + - "⪀": [t: "nagyobb, mint vagy ferde egyenlő, benne ponttal"] # 0x2a80 (en: 'greater than or slanted equal to with dot inside', DeepL translation) + - "⪁": [t: "kisebb, mint vagy ferde egyenlő, pont fölött"] # 0x2a81 (en: 'less than or slanted equal to with dot above', DeepL translation) + - "⪂": [t: "nagyobb, mint vagy ferdén egyenlő, pont fölött"] # 0x2a82 (en: 'greater than or slanted equal to with dot above', DeepL translation) + - "⪃": [t: "kevesebb, mint vagy ferdén egyenlő, pont felett jobbra"] # 0x2a83 (en: 'less than or slanted equal to with dot above right', DeepL translation) + - "⪄": [t: "nagyobb, mint vagy ferde egyenlő, balra fent ponttal"] # 0x2a84 (en: 'greater than or slanted equal to with dot above left', DeepL translation) + - "⪅": [t: "kevesebb, mint vagy megközelítőleg"] # 0x2a85 (en: 'less than or approximate', DeepL translation) + - "⪆": [t: "nagyobb, mint vagy megközelítő"] # 0x2a86 (en: 'greater than or approximate', DeepL translation) + - "⪇": [t: "kisebb, mint és egysoros nem egyenlő"] # 0x2a87 (en: 'less than and single line not equal to', DeepL translation) + - "⪈": [t: "nagyobb, mint és egysoros nem egyenlő"] # 0x2a88 (en: 'greater than and single line not equal to', DeepL translation) + - "⪉": [t: "kevesebb, mint és nem közelítő"] # 0x2a89 (en: 'less than and not approximate', DeepL translation) + - "⪊": [t: "nagyobb, mint és nem közelítő"] # 0x2a8a (en: 'greater than and not approximate', DeepL translation) + - "⪋": [t: "kisebb, mint fenti dupla vonal egyenlő fenti nagyobb, mint"] # 0x2a8b (en: 'less than above double line equal above greater than', DeepL translation) + - "⪌": [t: "nagyobb, mint fenti dupla vonal egyenlő fenti kisebb, mint"] # 0x2a8c (en: 'greater than above double line equal above less than', DeepL translation) + - "⪍": [t: "kevesebb, mint fenti hasonló vagy egyenlő"] # 0x2a8d (en: 'less than above similar or equal', DeepL translation) + - "⪎": [t: "nagyobb, mint a fenti hasonló vagy egyenlő"] # 0x2a8e (en: 'greater than above similar or equal', DeepL translation) + - "⪏": [t: "kisebb, mint fenti hasonló fenti nagyobb, mint"] # 0x2a8f (en: 'less than above similar above greater than', DeepL translation) + - "⪐": [t: "nagyobb, mint fenti hasonló fenti kisebb, mint"] # 0x2a90 (en: 'greater than above similar above less than', DeepL translation) + - "⪑": [t: "kisebb, mint fenti nagyobb, mint fenti dupla vonal egyenlő"] # 0x2a91 (en: 'less than above greater than above double line equal', DeepL translation) + - "⪒": [t: "nagyobb, mint a fenti kisebb, mint a fenti kettős vonal egyenlő"] # 0x2a92 (en: 'greater than above less than above double line equal', DeepL translation) + - "⪓": [t: "kisebb, mint fenti ferde egyenlő fenti nagyobb, mint fenti ferde egyenlő"] # 0x2a93 (en: 'less than above slanted equal above greater than above slanted equal', DeepL translation) + - "⪔": [t: "nagyobb, mint fenti ferde egyenlő fenti kisebb, mint fenti ferde egyenlő"] # 0x2a94 (en: 'greater than above slanted equal above less than above slanted equal', DeepL translation) + - "⪕": [t: "ferde egyenlő vagy kisebb, mint"] # 0x2a95 (en: 'slanted equal to or less than', DeepL translation) + - "⪖": [t: "ferde egyenlő vagy nagyobb, mint"] # 0x2a96 (en: 'slanted equal to or greater than', DeepL translation) + - "⪗": [t: "ferde egyenlő vagy kisebb, mint a pont belsejével"] # 0x2a97 (en: 'slanted equal to or less than with dot inside', DeepL translation) + - "⪘": [t: "ferde egyenlő vagy nagyobb, mint pont belsejével"] # 0x2a98 (en: 'slanted equal to or greater than with dot inside', DeepL translation) + - "⪙": [t: "dupla vonal egyenlő vagy kisebb, mint"] # 0x2a99 (en: 'double line equal to or less than', DeepL translation) + - "⪚": [t: "dupla vonal egyenlő vagy nagyobb, mint"] # 0x2a9a (en: 'double line equal to or greater than', DeepL translation) + - "⪛": [t: "dupla vonal ferde egyenlő vagy kisebb"] # 0x2a9b (en: 'double line slanted equal to or less than', DeepL translation) + - "⪜": [t: "dupla vonal ferdén egyenlő vagy nagyobb, mint"] # 0x2a9c (en: 'double line slanted equal to or greater than', DeepL translation) + - "⪝": [t: "hasonló vagy kisebb, mint"] # 0x2a9d (en: 'similar or less than', DeepL translation) + - "⪞": [t: "hasonló vagy nagyobb, mint"] # 0x2a9e (en: 'similar or greater than', DeepL translation) + - "⪟": [t: "hasonló fenti kisebb mint fenti egyenlő jel"] # 0x2a9f (en: 'similar above less than above equals sign', DeepL translation) + - "⪠": [t: "hasonló fenti nagyobb mint fenti egyenlő jel"] # 0x2aa0 (en: 'similar above greater than above equals sign', DeepL translation) + - "⪡": [t: "kettős beágyazott kevesebb, mint"] # 0x2aa1 (en: 'double nested less than', DeepL translation) + - "⪢": [t: "dupla beágyazott nagyobb, mint"] # 0x2aa2 (en: 'double nested greater than', DeepL translation) + - "⪣": [t: "dupla beágyazott kevesebb, mint alulvonallal"] # 0x2aa3 (en: 'double nested less than with underbar', DeepL translation) + - "⪤": [t: "nagyobb, mint átfedő kisebb, mint"] # 0x2aa4 (en: 'greater than overlapping less than', DeepL translation) + - "⪥": [t: "nagyobb, mint a kisebb, mint mellett"] # 0x2aa5 (en: 'greater than beside less than', DeepL translation) + - "⪦": [t: "kisebb, mint görbével zárt"] # 0x2aa6 (en: 'less than closed by curve', DeepL translation) + - "⪧": [t: "nagyobb, mint görbével lezárt"] # 0x2aa7 (en: 'greater than closed by curve', DeepL translation) + - "⪨": [t: "kisebb, mint a ferde egyenlő fölötti ívvel zárt"] # 0x2aa8 (en: 'less than closed by curve above slanted equal', DeepL translation) + - "⪩": [t: "nagyobb, mint a ferde egyenlő feletti görbével lezárt nagyobb"] # 0x2aa9 (en: 'greater than closed by curve above slanted equal', DeepL translation) + - "⪪": [t: "kisebb, mint"] # 0x2aaa (en: 'smaller than', DeepL translation) + - "⪫": [t: "nagyobb, mint"] # 0x2aab (en: 'larger than', DeepL translation) + - "⪬": [t: "kisebb vagy egyenlő"] # 0x2aac (en: 'smaller than or equal to', DeepL translation) + - "⪭": [t: "nagyobb, mint vagy egyenlő"] # 0x2aad (en: 'larger than or equal to', DeepL translation) + - "⪮": [t: "egyenlőségjel dudorral felül"] # 0x2aae (en: 'equals sign with bumpy above', DeepL translation) + - "⪯": [t: "előzi meg az egysoros egyenlőségjelet"] # 0x2aaf (en: 'precedes above single line equals sign', DeepL translation) + - "⪰": [t: "sikerül egyetlen vonal felett egyenlő jel"] # 0x2ab0 (en: 'succeeds above single line equals sign', DeepL translation) + - "⪱": [t: "előzi meg a fölött egysoros nem egyenlő"] # 0x2ab1 (en: 'precedes above single line not equal to', DeepL translation) + - "⪲": [t: "sikerül felett egyetlen vonal nem egyenlő"] # 0x2ab2 (en: 'succeeds above single line not equal to', DeepL translation) + - "⪳": [t: "előzi meg a fenti egyenlőségjelet"] # 0x2ab3 (en: 'precedes above equals sign', DeepL translation) + - "⪴": [t: "sikerül az egyenlőségjel felett"] # 0x2ab4 (en: 'succeeds above equals sign', DeepL translation) + - "⪵": [t: "megelőzi a fenti nem egyenlő"] # 0x2ab5 (en: 'precedes above not equal to', DeepL translation) + - "⪶": [t: "sikerül felett nem egyenlő"] # 0x2ab6 (en: 'succeeds above not equal to', DeepL translation) + - "⪷": [t: "megelőzi a fenti majdnem egyenlő"] # 0x2ab7 (en: 'precedes above almost equal to', DeepL translation) + - "⪸": [t: "sikerül felett majdnem egyenlő"] # 0x2ab8 (en: 'succeeds above almost equal to', DeepL translation) + - "⪹": [t: "megelőzi a fenti nem majdnem egyenlő"] # 0x2ab9 (en: 'precedes above not almost equal to', DeepL translation) + - "⪺": [t: "sikerül fenti nem majdnem egyenlő"] # 0x2aba (en: 'succeeds above not almost equal to', DeepL translation) + - "⪻": [t: "dupla megelőzi"] # 0x2abb (en: 'double precedes', DeepL translation) + - "⪼": [t: "kettős sikerül"] # 0x2abc (en: 'double succeeds', DeepL translation) + - "⪽": [t: "subset ponttal"] # 0x2abd (en: 'subset with dot', DeepL translation) + - "⪾": [t: "szuperhalmaza ponttal"] # 0x2abe (en: 'superset with dot', DeepL translation) + - "⪿": [t: "részhalmaz plusz jellel alatta"] # 0x2abf (en: 'subset with plus sign below', DeepL translation) + - "⫀": [t: "szuperhalmaz plusz jellel alatta"] # 0x2ac0 (en: 'superset with plus sign below', DeepL translation) + - "⫁": [t: "részhalmaz szorzójellel alul"] # 0x2ac1 (en: 'subset with multiplication sign below', DeepL translation) + - "⫂": [t: "szupersorozat szorzójellel alatta"] # 0x2ac2 (en: 'superset with multiplication sign below', DeepL translation) + - "⫃": [t: "részhalmaza vagy egyenlő a fenti ponttal"] # 0x2ac3 (en: 'subset of or equal to with dot above', DeepL translation) + - "⫄": [t: "szuperhalmaza vagy egyenlő a fenti ponttal"] # 0x2ac4 (en: 'superset of or equal to with dot above', DeepL translation) + - "⫅": [t: "részhalmaza a fenti egyenlőségjelnek"] # 0x2ac5 (en: 'subset of above equals sign', DeepL translation) + - "⫆": [t: "superset of above equals jel"] # 0x2ac6 (en: 'superset of above equals sign', DeepL translation) + - "⫇": [t: "részhalmaza fenti tilde operátor"] # 0x2ac7 (en: 'subset of above tilde operator', DeepL translation) + - "⫈": [t: "a fenti tilde-operátor felsőbbrendűsége"] # 0x2ac8 (en: 'superset of above tilde operator', DeepL translation) + - "⫉": [t: "részhalmaza fenti majdnem egyenlő"] # 0x2ac9 (en: 'subset of above almost equal to', DeepL translation) + - "⫊": [t: "szuperhalmaza fenti majdnem egyenlő"] # 0x2aca (en: 'superset of above almost equal to', DeepL translation) + - "⫋": [t: "részhalmaz felett nem egyenlő"] # 0x2acb (en: 'subset above not equal to', DeepL translation) + - "⫌": [t: "a fentiek szuperhalmaza nem egyenlő"] # 0x2acc (en: 'superset of above not equal to', DeepL translation) + - "⫍": [t: "négyzet balra nyitott doboz operátor"] # 0x2acd (en: 'square left open box operator', DeepL translation) + - "⫎": [t: "négyzet jobbra nyitott doboz operátor"] # 0x2ace (en: 'square right open box operator', DeepL translation) + - "⫏": [t: "zárt részhalmaz"] # 0x2acf (en: 'closed subset', DeepL translation) + - "⫐": [t: "zárt szuperszett"] # 0x2ad0 (en: 'closed superset', DeepL translation) + - "⫑": [t: "zárt részhalmaz vagy egyenlő"] # 0x2ad1 (en: 'closed subset or equal to', DeepL translation) + - "⫒": [t: "zárt szuperszett vagy egyenlő"] # 0x2ad2 (en: 'closed superset or equal to', DeepL translation) + - "⫓": [t: "részhalmaz felett szuperhalmaz"] # 0x2ad3 (en: 'subset above superset', DeepL translation) + - "⫔": [t: "superset above subset"] # 0x2ad4 (DeepL translation) + - "⫕": [t: "részhalmaz felett részhalmaz"] # 0x2ad5 (en: 'subset above subset', DeepL translation) + - "⫖": [t: "superset above superset"] # 0x2ad6 (DeepL translation) + - "⫗": [t: "szuperhalmaz mellett részhalmaz"] # 0x2ad7 (en: 'superset beside subset', DeepL translation) + - "⫘": [t: "szuperszett melletti és kötőjellel összekötött albetűvel"] # 0x2ad8 (en: 'superset beside and joined by dash with subset', DeepL translation) + - "⫙": [t: "nyitó elem lefelé"] # 0x2ad9 (en: 'element of opening down', DeepL translation) + - "⫚": [t: "szurokvilla téglalap tetejével"] # 0x2ada (en: 'pitchfork with tee top', DeepL translation) + - "⫛": [t: "keresztirányú metszéspont"] # 0x2adb (en: 'transversal intersection', DeepL translation) + - "⫝̸": [t: "elágazás"] # 0x2adc (en: 'forking', DeepL translation) + - "⫝": [t: "nem villás"] # 0x2add (en: 'nonforking', DeepL translation) + - "⫞": [t: "rövid bal oldali tüske"] # 0x2ade (en: 'short left tack', DeepL translation) + - "⫟": [t: "rövid lefelé irányuló kötés"] # 0x2adf (en: 'short down tack', DeepL translation) + - "⫠": [t: "rövid felfelé irányuló szegély"] # 0x2ae0 (en: 'short up tack', DeepL translation) + - "⫡": [t: "merőleges s-szel"] # 0x2ae1 (en: 'perpendicular with s', DeepL translation) + - "⫢": [t: "függőleges sávos hármas jobb oldali fordulókapu"] # 0x2ae2 (en: 'vertical bar triple right turnstile', DeepL translation) + - "⫣": [t: "dupla függőleges sáv balra fordul"] # 0x2ae3 (en: 'double vertical bar left turnstile', DeepL translation) + - "⫤": [t: "függőleges sávos dupla bal forduló"] # 0x2ae4 (en: 'vertical bar double left turnstile', DeepL translation) + - "⫥": [t: "dupla függőleges sáv dupla balra forduló"] # 0x2ae5 (en: 'double vertical bar double left turnstile', DeepL translation) + - "⫦": [t: "hosszú kötőjel a kettős függőleges bal tagjától"] # 0x2ae6 (en: 'long dash from left member of double vertical', DeepL translation) + - "⫧": [t: "rövid lefelé irányuló szegecs átkötéssel"] # 0x2ae7 (en: 'short down tack with overbar', DeepL translation) + - "⫨": [t: "rövid, felfelé irányuló írásjel alsó sávval"] # 0x2ae8 (en: 'short up tack with underbar', DeepL translation) + - "⫩": [t: "rövid felfelé szegecs felett rövid lefelé szegecs"] # 0x2ae9 (en: 'short up tack above short down tack', DeepL translation) + - "⫪": [t: "kettős lefelé fordulás"] # 0x2aea (en: 'double down tack', DeepL translation) + - "⫫": [t: "dupla felfelé fordított tack"] # 0x2aeb (en: 'double up tack', DeepL translation) + - "⫬": [t: "kettős vonás nem jel"] # 0x2aec (en: 'double stroke not sign', DeepL translation) + - "⫭": [t: "fordított kettős vonás nem jel"] # 0x2aed (en: 'reversed double stroke not sign', DeepL translation) + - "⫮": [t: "nem oszt fordított tagadóvesszővel"] # 0x2aee (en: 'does not divide with reversed negation slash', DeepL translation) + - "⫯": [t: "függőleges vonal, felette körrel"] # 0x2aef (en: 'vertical line with circle above', DeepL translation) + - "⫰": [t: "függőleges vonal körrel alul"] # 0x2af0 (en: 'vertical line with circle below', DeepL translation) + - "⫱": [t: "lefelé szegeződés körrel alatta"] # 0x2af1 (en: 'down tack with circle below', DeepL translation) + - "⫲": [t: "párhuzamos vízszintes vonallal"] # 0x2af2 (en: 'parallel with horizontal stroke', DeepL translation) + - "⫳": [t: "párhuzamos tilde operátorral"] # 0x2af3 (en: 'parallel with tilde operator', DeepL translation) + - "⫴": [t: "hármas függőleges vonalkás bináris kapcsolat"] # 0x2af4 (en: 'triple vertical bar binary relation', DeepL translation) + - "⫵": [t: "háromszoros függőleges sáv vízszintes vonallal"] # 0x2af5 (en: 'triple vertical bar with horizontal stroke', DeepL translation) + - "⫶": [t: "hármas kettőspont operátor"] # 0x2af6 (en: 'triple colon operator', DeepL translation) + - "⫷": [t: "háromszoros beágyazott kevesebb mint"] # 0x2af7 (en: 'triple nested less than', DeepL translation) + - "⫸": [t: "háromszoros beágyazott nagyobb, mint"] # 0x2af8 (en: 'triple nested greater than', DeepL translation) + - "⫹": [t: "dupla ferde vonal kisebb vagy egyenlő"] # 0x2af9 (en: 'double line slanted less than or equal to', DeepL translation) + - "⫺": [t: "kettős vonal ferde nagyobb vagy egyenlő"] # 0x2afa (en: 'double line slanted greater than or equal to', DeepL translation) + - "⫻": [t: "hármas szolidus bináris kapcsolat"] # 0x2afb (en: 'triple solidus binary relation', DeepL translation) + - "⫼": [t: "nagy háromszoros függőleges sávos operátor"] # 0x2afc (en: 'large triple vertical bar operator', DeepL translation) + - "⫽": [t: "kettős solidus operátor"] # 0x2afd (en: 'double solidus operator', DeepL translation) + - "⫾": [t: "fehér függőleges sáv"] # 0x2afe (en: 'white vertical bar', DeepL translation) + - "⫿": [t: "fehér függőleges sáv"] # 0x2aff (en: 'white vertical bar', DeepL translation) + - "⬀": [t: "északkeleti fehér nyíl"] # 0x2b00 (en: 'north east white arrow', DeepL translation) + - "⬁": [t: "északnyugati fehér nyíl"] # 0x2b01 (en: 'north west white arrow', DeepL translation) + - "⬂": [t: "délkeleti fehér nyíl"] # 0x2b02 (en: 'south east white arrow', DeepL translation) + - "⬃": [t: "délnyugati fehér nyíl"] # 0x2b03 (en: 'south west white arrow', DeepL translation) + - "⬄": [t: "balra jobbra fehér nyíl"] # 0x2b04 (en: 'left right white arrow', DeepL translation) + - "⬅": [t: "bal fekete nyíl"] # 0x2b05 (en: 'left black arrow', DeepL translation) + - "⬆": [t: "felfelé mutató fekete nyíl"] # 0x2b06 (en: 'up black arrow', DeepL translation) + - "⬇": [t: "lefelé mutató fekete nyíl"] # 0x2b07 (en: 'down black arrow', DeepL translation) + - "⬈": [t: "északkeleti fekete nyíl"] # 0x2b08 (en: 'north east black arrow', DeepL translation) + - "⬉": [t: "északnyugati fekete nyíl"] # 0x2b09 (en: 'north west black arrow', DeepL translation) + - "⬊": [t: "délkelet fekete nyíl"] # 0x2b0a (en: 'south east black arrow', DeepL translation) + - "⬋": [t: "délnyugati fekete nyíl"] # 0x2b0b (en: 'south west black arrow', DeepL translation) + - "⬌": [t: "balra jobbra fekete nyíl"] # 0x2b0c (en: 'left right black arrow', DeepL translation) + - "⬍": [t: "fel-le fekete nyíl"] # 0x2b0d (en: 'up down black arrow', DeepL translation) + - "⬎": [t: "jobb nyíl hegyével lefelé"] # 0x2b0e (en: 'right arrow with tip down', DeepL translation) + - "⬏": [t: "jobb nyílhegy hegyével felfelé"] # 0x2b0f (en: 'right arrow with tip up', DeepL translation) + - "⬐": [t: "bal nyíl hegyével lefelé"] # 0x2b10 (en: 'left arrow with tip down', DeepL translation) + - "⬑": [t: "bal nyíl hegyével felfelé"] # 0x2b11 (en: 'left arrow with tip up', DeepL translation) + - "⬒": [t: "négyzet felső felével fekete"] # 0x2b12 (en: 'square with top half black', DeepL translation) + - "⬓": [t: "négyzet, alsó fele fekete"] # 0x2b13 (en: 'square with bottom half black', DeepL translation) + - "⬔": [t: "négyzet jobb felső átlós fél feketével"] # 0x2b14 (en: 'square with upper right diagonal half black', DeepL translation) + - "⬕": [t: "négyzet bal alsó átlós félfeketével"] # 0x2b15 (en: 'square with lower left diagonal half black', DeepL translation) + - "⬖": [t: "rombusz bal oldali félfeketével"] # 0x2b16 (en: 'diamond with left half black', DeepL translation) + - "⬗": [t: "gyémánt, jobb oldali fele fekete"] # 0x2b17 (en: 'diamond with right half black', DeepL translation) + - "⬘": [t: "rombusz felső felével fekete"] # 0x2b18 (en: 'diamond with top half black', DeepL translation) + - "⬙": [t: "gyémánt alsó fele fekete"] # 0x2b19 (en: 'diamond with bottom half black', DeepL translation) + - "⬚": [t: "doboz"] # 0x2b1a (en: 'box', DeepL translation) + - "⬛": [t: "fekete nagy négyzet"] # 0x2b1b (en: 'black large square', DeepL translation) + - "⬜": [t: "fehér nagy négyzet"] # 0x2b1c (en: 'white large square', DeepL translation) + - "⬝": [t: "fekete nagyon kicsi négyzet"] # 0x2b1d (en: 'black very small square', DeepL translation) + - "⬞": [t: "fehér nagyon kicsi négyzet"] # 0x2b1e (en: 'white very small square', DeepL translation) + - "⬟": [t: "fekete ötszög"] # 0x2b1f (en: 'black pentagon', DeepL translation) + - "⬠": [t: "fehér ötszög"] # 0x2b20 (en: 'white pentagon', DeepL translation) + - "⬡": [t: "fehér hatszög"] # 0x2b21 (en: 'white hexagon', DeepL translation) + - "⬢": [t: "fekete hatszög"] # 0x2b22 (en: 'black hexagon', DeepL translation) + - "⬣": [t: "vízszintes fekete hatszög"] # 0x2b23 (en: 'horizontal black hexagon', DeepL translation) + - "⬤": [t: "fekete nagy kör"] # 0x2b24 (en: 'black large circle', DeepL translation) + - "⬥": [t: "fekete közepes rombusz"] # 0x2b25 (en: 'black medium diamond', DeepL translation) + - "⬦": [t: "fehér középső rombusz"] # 0x2b26 (en: 'white medium diamond', DeepL translation) + - "⬧": [t: "fekete közepes rombusz"] # 0x2b27 (en: 'black medium lozenge', DeepL translation) + - "⬨": [t: "fehér közepes rombusz"] # 0x2b28 (en: 'white medium lozenge', DeepL translation) + - "⬩": [t: "fekete kis rombusz"] # 0x2b29 (en: 'black small diamond', DeepL translation) + - "⬪": [t: "fekete kis rombusz"] # 0x2b2a (en: 'black small lozenge', DeepL translation) + - "⬫": [t: "fehér kis rombusz"] # 0x2b2b (en: 'white small lozenge', DeepL translation) + - "⬬": [t: "fekete vízszintes ellipszis"] # 0x2b2c (en: 'black horizontal ellipse', DeepL translation) + - "⬭": [t: "fehér vízszintes ellipszis"] # 0x2b2d (en: 'white horizontal ellipse', DeepL translation) + - "⬮": [t: "fekete függőleges ellipszis"] # 0x2b2e (en: 'black vertical ellipse', DeepL translation) + - "⬯": [t: "fehér függőleges ellipszis"] # 0x2b2f (en: 'white vertical ellipse', DeepL translation) + - "⬰": [t: "bal nyíl kis körrel"] # 0x2b30 (en: 'left arrow with small circle', DeepL translation) + - "⬱": [t: "három balra mutató nyíl"] # 0x2b31 (en: 'three left arrows', DeepL translation) + - "⬲": [t: "bal nyíl bekarikázott plusszal"] # 0x2b32 (en: 'left arrow with circled plus', DeepL translation) + - "⬳": [t: "hosszú bal oldali szaggatott nyíl"] # 0x2b33 (en: 'long left squiggle arrow', DeepL translation) + - "⬴": [t: "bal kétfejű nyíl függőleges vonallal"] # 0x2b34 (en: 'left two headed arrow with vertical stroke', DeepL translation) + - "⬵": [t: "bal kétfejű nyíl dupla függőleges vonallal"] # 0x2b35 (en: 'left two headed arrow with double vertical stroke', DeepL translation) + - "⬶": [t: "bal kétfejű nyíl a sávból"] # 0x2b36 (en: 'left two headed arrow from bar', DeepL translation) + - "⬷": [t: "bal kétfejű hármas kötőjeles nyíl"] # 0x2b37 (en: 'left two headed triple dash arrow', DeepL translation) + - "⬸": [t: "bal nyíl szaggatott szárral"] # 0x2b38 (en: 'left arrow with dotted stem', DeepL translation) + - "⬹": [t: "bal nyíl farokkal függőleges vonallal"] # 0x2b39 (en: 'left arrow with tail with vertical stroke', DeepL translation) + - "⬺": [t: "balra nyilazó farok dupla függőleges vonallal"] # 0x2b3a (en: 'left arrow with tail with double vertical stroke', DeepL translation) + - "⬻": [t: "bal kétfejű nyíl farokkal"] # 0x2b3b (en: 'left two headed arrow with tail', DeepL translation) + - "⬼": [t: "bal kétfejű nyíl, függőleges vonallal ellátott farokkal"] # 0x2b3c (en: 'left two headed arrow with tail with vertical stroke', DeepL translation) + - "⬽": [t: "bal kétfejű nyílvessző farokkal dupla függőleges vonallal"] # 0x2b3d (en: 'left two headed arrow with tail with double vertical stroke', DeepL translation) + - "⬾": [t: "bal nyíl át az x-en"] # 0x2b3e (en: 'left arrow through x', DeepL translation) + - "⬿": [t: "hullámzó nyíl egyenesen balra mutat"] # 0x2b3f (en: 'wave arrow pointing directly left', DeepL translation) + - "⭀": [t: "egyenlőségjel a bal oldali nyíl fölött"] # 0x2b40 (en: 'equals sign above left arrow', DeepL translation) + - "⭁": [t: "fordított tilde operátor a bal nyíl felett"] # 0x2b41 (en: 'reverse tilde operator above left arrow', DeepL translation) + - "⭂": [t: "bal nyíl fölött fordítva majdnem egyenlő"] # 0x2b42 (en: 'left arrow above reverse almost equal to', DeepL translation) + - "⭃": [t: "jobbra mutató nyíl a nagyobb, mint"] # 0x2b43 (en: 'right arrow through greater than', DeepL translation) + - "⭄": [t: "jobbra mutató nyíl a szuperhalmazon keresztül"] # 0x2b44 (en: 'right arrow through superset', DeepL translation) + - "⭅": [t: "bal négyszögletes nyíl"] # 0x2b45 (en: 'left quadruple arrow', DeepL translation) + - "⭆": [t: "jobb oldali négyszeres nyíl"] # 0x2b46 (en: 'right quadruple arrow', DeepL translation) + - "⭇": [t: "fordított tilde operátor a jobb nyíl felett"] # 0x2b47 (en: 'reverse tilde operator above right arrow', DeepL translation) + - "⭈": [t: "jobb nyíl fölött fordítva majdnem egyenlő"] # 0x2b48 (en: 'right arrow above reverse almost equal to', DeepL translation) + - "⭉": [t: "tilde operátor bal nyíl fölött"] # 0x2b49 (en: 'tilde operator above left arrow', DeepL translation) + - "⭊": [t: "bal fenti nyílvesszővel majdnem egyenlő"] # 0x2b4a (en: 'left arrow above almost equal to', DeepL translation) + - "⭋": [t: "bal nyíl a fordított tilde operátor felett"] # 0x2b4b (en: 'left arrow above reverse tilde operator', DeepL translation) + - "⭌": [t: "jobbra mutató nyíl fölött fordított tilde operátor"] # 0x2b4c (en: 'right arrow above reverse tilde operator', DeepL translation) + - "⭐": [t: "fehér közepes csillag"] # 0x2b50 (en: 'white medium star', DeepL translation) + - "⭑": [t: "fekete kis csillag"] # 0x2b51 (en: 'black small star', DeepL translation) + - "⭒": [t: "fehér kis csillag"] # 0x2b52 (en: 'white small star', DeepL translation) + - "⭓": [t: "fekete jobbra mutató ötszög"] # 0x2b53 (en: 'black right pointing pentagon', DeepL translation) + - "⭔": [t: "fehér, jobbra mutató ötszög"] # 0x2b54 (en: 'white right pointing pentagon', DeepL translation) + - "⭕": [t: "nehéz nagy kör"] # 0x2b55 (en: 'heavy large circle', DeepL translation) + - "⭖": [t: "nehéz ovális belül ovális"] # 0x2b56 (en: 'heavy oval with oval inside', DeepL translation) + - "⭗": [t: "nehéz kör körrel belül körrel"] # 0x2b57 (en: 'heavy circle with circle inside', DeepL translation) + - "⭘": [t: "nehéz kör"] # 0x2b58 (en: 'heavy circle', DeepL translation) + - "⭙": [t: "nehéz, körbefutó saltire"] # 0x2b59 (en: 'heavy circled saltire', DeepL translation) + - "⸀": [t: "derékszögű helyettesítő jelölés"] # 0x2e00 (en: 'right angle substitution marker', DeepL translation) + - "⸁": [t: "jobbra szögletes pontozott helyettesítési jelölő"] # 0x2e01 (en: 'right angle dotted substitution marker', DeepL translation) + - "⸂": [t: "bal helyettesítő zárójel"] # 0x2e02 (en: 'left substitution bracket', DeepL translation) + - "⸃": [t: "jobb oldali helyettesítő zárójel"] # 0x2e03 (en: 'right substitution bracket', DeepL translation) + - "⸄": [t: "bal szaggatott helyettesítő zárójel"] # 0x2e04 (en: 'left dotted substitution bracket', DeepL translation) + - "⸅": [t: "jobb oldali szaggatott helyettesítő zárójel"] # 0x2e05 (en: 'right dotted substitution bracket', DeepL translation) + - "⸆": [t: "emelt interpolációs jelölő"] # 0x2e06 (en: 'raised interpolation marker', DeepL translation) + - "⸇": [t: "emelt pontozott interpolációs jel"] # 0x2e07 (en: 'raised dotted interpolation marker', DeepL translation) + - "⸈": [t: "pontozott áthelyezésjelző jelölő"] # 0x2e08 (en: 'dotted transposition marker marker', DeepL translation) + - "⸉": [t: "bal oldali áthelyező zárójel"] # 0x2e09 (en: 'left transposition bracket', DeepL translation) + - "⸊": [t: "jobb oldali transzpozíciós zárójel"] # 0x2e0a (en: 'right transposition bracket', DeepL translation) + - "⸋": [t: "emelt négyzet"] # 0x2e0b (en: 'raised square', DeepL translation) + - "⸌": [t: "bal emelt kihagyás zárójel"] # 0x2e0c (en: 'left raised omission bracket', DeepL translation) + - "⸍": [t: "jobb oldali emelt kihagyás zárójel"] # 0x2e0d (en: 'right raised omission bracket', DeepL translation) + - "⸎": [t: "editorial coronis"] # 0x2e0e (DeepL translation) + - "⸏": [t: "bekezdés"] # 0x2e0f (en: 'paragraphos', DeepL translation) + - "⸐": [t: "villás bekezdés"] # 0x2e10 (en: 'forked paragraphos', DeepL translation) + - "⸑": [t: "fordított elágazó bekezdés"] # 0x2e11 (en: 'reversed forked paragraphos', DeepL translation) + - "⸒": [t: "hypodiastole"] # 0x2e12 (DeepL translation) + - "⸓": [t: "pöttyös obelosz"] # 0x2e13 (en: 'dotted obelos', DeepL translation) + - "⸔": [t: "lefelé ancora"] # 0x2e14 (en: 'down ancora', DeepL translation) + - "⸕": [t: "felfelé ancora"] # 0x2e15 (en: 'up ancora', DeepL translation) + - "⸖": [t: "pontozott jobbra mutató szög"] # 0x2e16 (en: 'dotted right pointing angle', DeepL translation) + - "⸗": [t: "kettős ferde kötőjel"] # 0x2e17 (en: 'double oblique hyphen', DeepL translation) + - "⸘": [t: "fordított interrobang"] # 0x2e18 (en: 'inverted interrobang', DeepL translation) + - "⸙": [t: "pálmaág"] # 0x2e19 (en: 'palm branch', DeepL translation) + - "⸚": [t: "kötőjel diaderézissel"] # 0x2e1a (en: 'hyphen with diaeresis', DeepL translation) + - "⸛": [t: "tilda gyűrűvel fölött"] # 0x2e1b (en: 'tilde with ring above', DeepL translation) + - "⸜": [t: "bal alsó zárójeles zárójel"] # 0x2e1c (en: 'left low paraphrase bracket', DeepL translation) + - "⸝": [t: "jobb alsó parafrázis zárójel"] # 0x2e1d (en: 'right low paraphrase bracket', DeepL translation) + - "⸞": [t: "tilde pont felett"] # 0x2e1e (en: 'tilde with dot above', DeepL translation) + - "⸟": [t: "tilde pontokkal alatta"] # 0x2e1f (en: 'tilde with dot below', DeepL translation) + - "⸠": [t: "bal függőleges sáv tollal"] # 0x2e20 (en: 'left vertical bar with quill', DeepL translation) + - "⸡": [t: "jobb oldali függőleges sáv tollal"] # 0x2e21 (en: 'right vertical bar with quill', DeepL translation) + - "⸢": [t: "bal felső fél zárójel"] # 0x2e22 (en: 'top left half bracket', DeepL translation) + - "⸣": [t: "jobb felső fél zárójel"] # 0x2e23 (en: 'top right half bracket', DeepL translation) + - "⸤": [t: "bal alsó fél zárójel"] # 0x2e24 (en: 'bottom left half bracket', DeepL translation) + - "⸥": [t: "jobb alsó fél zárójel"] # 0x2e25 (en: 'bottom right half bracket', DeepL translation) + - "⸦": [t: "bal oldalsó u zárójel"] # 0x2e26 (en: 'left sideways u bracket', DeepL translation) + - "⸧": [t: "jobb oldalsó u zárójel"] # 0x2e27 (en: 'right sideways u bracket', DeepL translation) + - "⸨": [t: "bal kettős zárójel"] # 0x2e28 (en: 'left double parentheses', DeepL translation) + - "⸩": [t: "jobb oldali kettős zárójel"] # 0x2e29 (en: 'right double parentheses', DeepL translation) + - "⸪": [t: "két pont egy pont fölött írásjel"] # 0x2e2a (en: 'two dots over one dot punctuation', DeepL translation) + - "⸫": [t: "egy pont két pont felett írásjel"] # 0x2e2b (en: 'one dot over two dots punctuation', DeepL translation) + - "⸬": [t: "négyzet négy pont írásjel"] # 0x2e2c (en: 'squared four dot punctuation', DeepL translation) + - "⸭": [t: "öt pontos jel"] # 0x2e2d (en: 'five dot mark', DeepL translation) + - "⸮": [t: "fordított kérdőjel"] # 0x2e2e (en: 'reversed question mark', DeepL translation) + - "ⸯ": [t: "függőleges tilde"] # 0x2e2f (en: 'vertical tilde', DeepL translation) + - "⸰": [t: "gyűrűs pont"] # 0x2e30 (en: 'ring point', DeepL translation) + - "⸱": [t: "szó elválasztó középső pont"] # 0x2e31 (en: 'word separator middle dot', DeepL translation) + - "⸲": [t: "fordított vesszővel"] # 0x2e32 (en: 'turned comma', DeepL translation) + - "⸳": [t: "emelt pont"] # 0x2e33 (en: 'raised dot', DeepL translation) + - "⸴": [t: "emelt vessző"] # 0x2e34 (en: 'raised comma', DeepL translation) + - "⸵": [t: "fordított pontosvessző"] # 0x2e35 (en: 'turned semicolon', DeepL translation) + - "⸶": [t: "tőr bal oldali védővel"] # 0x2e36 (en: 'dagger with left guard', DeepL translation) + - "⸷": [t: "tőr jobb oldali védővel"] # 0x2e37 (en: 'dagger with right guard', DeepL translation) + - "⸸": [t: "elfordított tőr"] # 0x2e38 (en: 'turned dagger', DeepL translation) + - "⸹": [t: "felső félszelvény jel"] # 0x2e39 (en: 'top half section sign', DeepL translation) + - "⸺": [t: "két em dash"] # 0x2e3a (en: 'two em dash', DeepL translation) + - "⸻": [t: "három em kötőjel"] # 0x2e3b (en: 'three em dash', DeepL translation) + - "〃": [t: "dettó jel"] # 0x3003 (en: 'ditto mark', DeepL translation) + - "〈": [t: "bal szögletes zárójel"] # 0x3008 (en: 'left angle bracket', DeepL translation) + - "〉": [t: "derékszögű zárójel"] # 0x3009 (en: 'right angle bracket', DeepL translation) + - "《": [t: "bal dupla szögletes zárójel"] # 0x300a (en: 'left double angle bracket', DeepL translation) + - "》": [t: "jobb oldali kettős szögletes zárójel"] # 0x300b (en: 'right double angle bracket', DeepL translation) + - "「": [t: "bal sarok zárójel"] # 0x300c (en: 'left corner bracket', DeepL translation) + - "」": [t: "jobb oldali sarok zárójel"] # 0x300d (en: 'right corner bracket', DeepL translation) + - "『": [t: "bal oldali fehér sarokkapocs"] # 0x300e (en: 'left white corner bracket', DeepL translation) + - "』": [t: "jobb oldali fehér sarok zárójel"] # 0x300f (en: 'right white corner bracket', DeepL translation) + - "【": [t: "bal fekete lencse alakú zárójel"] # 0x3010 (en: 'left black lenticular bracket', DeepL translation) + - "】": [t: "jobb oldali fekete lencsés zárójel"] # 0x3011 (en: 'right black lenticular bracket', DeepL translation) + - "〔": [t: "bal teknőspáncélos zárójel"] # 0x3014 (en: 'left tortoise shell bracket', DeepL translation) + - "〕": [t: "jobb oldali teknőspáncél zárójel"] # 0x3015 (en: 'right tortoise shell bracket', DeepL translation) + - "〖": [t: "bal oldali fehér lencse alakú zárójel"] # 0x3016 (en: 'left white lenticular bracket', DeepL translation) + - "〗": [t: "jobb oldali fehér lencsés zárójel"] # 0x3017 (en: 'right white lenticular bracket', DeepL translation) + - "〘": [t: "bal oldali fehér teknőspáncél konzol"] # 0x3018 (en: 'left white tortoise shell bracket', DeepL translation) + - "〙": [t: "jobb oldali fehér teknőspáncélos zárójel"] # 0x3019 (en: 'right white tortoise shell bracket', DeepL translation) + - "〚": [t: "bal oldali fehér szögletes zárójel"] # 0x301a (en: 'left white square bracket', DeepL translation) + - "〛": [t: "jobb oldali fehér szögletes zárójel"] # 0x301b (en: 'right white square bracket', DeepL translation) + - "〜": [t: "hullámos kötőjel"] # 0x301c (en: 'wave dash', DeepL translation) + - "〰": [t: "hullámos kötőjel"] # 0x3030 (en: 'wavy dash', DeepL translation) + - "㉈": [t: "bekarikázott tízes szám fekete négyzetben"] # 0x3248 (en: 'circled number ten on black square', DeepL translation) + - "㉉": [t: "bekarikázott húszas szám fekete négyzetben"] # 0x3249 (en: 'circled number twenty on black square', DeepL translation) + - "㉊": [t: "bekarikázott harmincas szám fekete négyzetben"] # 0x324a (en: 'circled number thirty on black square', DeepL translation) + - "㉋": [t: "bekarikázott negyvenes szám fekete négyzetben"] # 0x324b (en: 'circled number forty on blacks square', DeepL translation) + - "㉌": [t: "fekete négyzetben bekarikázott ötvenes szám"] # 0x324c (en: 'circled number fifty on black square', DeepL translation) + - "㉍": [t: "fekete négyzetben bekarikázott hatvanas szám"] # 0x324d (en: 'circled number sixty on black square', DeepL translation) + - "㉎": [t: "körbeírt hetvenes szám fekete négyzetben"] # 0x324e (en: 'circled number seventy on black square', DeepL translation) + - "㉏": [t: "bekarikázott negyvenes szám fekete négyzetben"] # 0x324f (en: 'circled number eighty on black square', DeepL translation) + - "㉑": [t: "bekarikázott huszonegyes szám"] # 0x3251 (en: 'circled number twenty one', DeepL translation) + - "㉒": [t: "bekarikázott huszonkettes szám"] # 0x3252 (en: 'circled number twenty two', DeepL translation) + - "㉓": [t: "bekarikázott huszonhármas szám"] # 0x3253 (en: 'circled number twenty three', DeepL translation) + - "㉔": [t: "bekarikázott huszonnégyes szám"] # 0x3254 (en: 'circled number twenty four', DeepL translation) + - "㉕": [t: "bekarikázott huszonötös szám"] # 0x3255 (en: 'circled number twenty five', DeepL translation) + - "㉖": [t: "bekarikázott huszonhatos szám"] # 0x3256 (en: 'circled number twenty six', DeepL translation) + - "㉗": [t: "bekarikázott szám huszonhét"] # 0x3257 (en: 'circled number twenty seven', DeepL translation) + - "㉘": [t: "bekarikázott huszas szám"] # 0x3258 (en: 'circled number twenty eight', DeepL translation) + - "㉙": [t: "bekarikázott huszonkilenc szám"] # 0x3259 (en: 'circled number twenty nine', DeepL translation) + - "㉚": [t: "bekarikázott szám harminc"] # 0x325a (en: 'circled number thirty', DeepL translation) + - "㉛": [t: "bekarikázott harmincegyes szám"] # 0x325b (en: 'circled number thirty one', DeepL translation) + - "㉜": [t: "bekarikázott harminckettes szám"] # 0x325c (en: 'circled number thirty two', DeepL translation) + - "㉝": [t: "bekarikázott harminchárom"] # 0x325d (en: 'circled number thirty three', DeepL translation) + - "㉞": [t: "bekarikázott harmincnégyes"] # 0x325e (en: 'circled number thirty four', DeepL translation) + - "㉟": [t: "bekarikázott harmincötös szám"] # 0x325f (en: 'circled number thirty five', DeepL translation) + - "㊱": [t: "bekarikázott szám harminchat"] # 0x32b1 (en: 'circled number thirty six', DeepL translation) + - "㊲": [t: "bekarikázott harminchetes szám"] # 0x32b2 (GPT-5.4 translation) (en: 'circled number thirty seven', DeepL translation) + - "㊳": [t: "bekarikázott harmincas számnál"] # 0x32b3 (GPT-5.4 translation) (en: 'circled number thirty eight', DeepL translation) + - "㊴": [t: "bekarikázott harminckilenc"] # 0x32b4 (GPT-5.4 translation) (en: 'circled number thirty nine', DeepL translation) + - "㊵": [t: "bekarikázott negyvenes szám"] # 0x32b5 (GPT-5.4 translation) (en: 'circled number forty', DeepL translation) + - "㊶": [t: "bekarikázott negyvenegyes szám"] # 0x32b6 (GPT-5.4 translation) (en: 'circled number forty one', DeepL translation) + - "㊷": [t: "bekarikázott negyvenkettes szám"] # 0x32b7 (GPT-5.4 translation) (en: 'circled number forty two', DeepL translation) + - "㊸": [t: "bekarikázott negyvenhármas szám"] # 0x32b8 (GPT-5.4 translation) (en: 'circled number forty three', DeepL translation) + - "㊹": [t: "bekarikázott negyvennégyes szám"] # 0x32b9 (GPT-5.4 translation) (en: 'circled number forty four', DeepL translation) + - "㊺": [t: "bekarikázott negyvenötös szám"] # 0x32ba (GPT-5.4 translation) (en: 'circled number forty five', DeepL translation) + - "㊻": [t: "bekarikázott negyvenhatos szám"] # 0x32bb (GPT-5.4 translation) (en: 'circled number forty six', DeepL translation) + - "㊼": [t: "bekarikázott szám negyvenhét"] # 0x32bc (GPT-5.4 translation) (en: 'circled number forty seven', DeepL translation) + - "㊽": [t: "bekarikázott negyvenes szám"] # 0x32bd (GPT-5.4 translation) (en: 'circled number forty eight', DeepL translation) + - "㊾": [t: "bekarikázott negyvenkilenc"] # 0x32be (GPT-5.4 translation) (en: 'circled number forty nine', DeepL translation) + - "㊿": [t: "bekarikázott szám ötven"] # 0x32bf (GPT-5.4 translation) (en: 'circled number fifty', DeepL translation) + - "㋌": [t: "higany"] # 0x32cc (en: 'mercury', DeepL translation) + - "㋍": [t: "ergs"] # 0x32cd (DeepL translation) + - "㋎": [t: "elektronvolt"] # 0x32ce (en: 'electron volts', DeepL translation) + - "㋏": [t: "korlátozott felelősség jele"] # 0x32cf (en: 'limited liability sign', DeepL translation) + - "㍱": [t: "hektopascal"] # 0x3371 (en: 'hectopascals', DeepL translation) + - "㍲": [t: "dalton"] # 0x3372 (en: 'daltons', DeepL translation) + - "㍳": [t: "csillagászati egységek"] # 0x3373 (en: 'astronomical units', DeepL translation) + - "㍴": [t: "sávok"] # 0x3374 (en: 'bars', DeepL translation) + - "㍵": [t: "o v"] # 0x3375 (DeepL translation) + - "㍶": [t: "parszek"] # 0x3376 (en: 'parsecs', DeepL translation) + - "㍷": [t: "deciméter"] # 0x3377 (en: 'decimeters', DeepL translation) + - "㍸": [t: "deciméter négyzet"] # 0x3378 (en: 'decimeters squared', DeepL translation) + - "㍹": [t: "deciméterek köbméterben"] # 0x3379 (en: 'decimeters cubed', DeepL translation) + - "㍺": [t: "instrumentális egységek"] # 0x337a (en: 'instrumental units', DeepL translation) + - "㎀": [t: "picoamp"] # 0x3380 (en: 'picoamps', DeepL translation) + - "㎁": [t: "nanoamp"] # 0x3381 (en: 'nanoamps', DeepL translation) + - "㎂": [t: "mikroamper"] # 0x3382 (en: 'microamps', DeepL translation) + - "㎃": [t: "milliamper"] # 0x3383 (en: 'milliamps', DeepL translation) + - "㎄": [t: "kiloamp"] # 0x3384 (en: 'kiloamps', DeepL translation) + - "㎅": [t: "kilobájt"] # 0x3385 (en: 'kilobytes', DeepL translation) + - "㎆": [t: "megabájt"] # 0x3386 (en: 'megabytes', DeepL translation) + - "㎇": [t: "gigabájt"] # 0x3387 (en: 'gigabytes', DeepL translation) + - "㎈": [t: "kalória"] # 0x3388 (en: 'calories', DeepL translation) + - "㎉": [t: "kilokalória"] # 0x3389 (en: 'kilocalories', DeepL translation) + - "㎊": [t: "pikofarádok"] # 0x338a (en: 'picofarads', DeepL translation) + - "㎋": [t: "nanofarad"] # 0x338b (en: 'nanofarads', DeepL translation) + - "㎌": [t: "mikrofarád"] # 0x338c (en: 'microfarads', DeepL translation) + - "㎍": [t: "mikrogramm"] # 0x338d (en: 'micrograms', DeepL translation) + - "㎎": [t: "milligramm"] # 0x338e (en: 'milligrams', DeepL translation) + - "㎏": [t: "kilogramm"] # 0x338f (en: 'kilograms', DeepL translation) + - "㎐": [t: "hertz"] # 0x3390 (DeepL translation) + - "㎑": [t: "kilohertz"] # 0x3391 (DeepL translation) + - "㎒": [t: "megahertz"] # 0x3392 (DeepL translation) + - "㎓": [t: "gigahertz"] # 0x3393 (DeepL translation) + - "㎔": [t: "terahertz"] # 0x3394 (DeepL translation) + - "㎕": [t: "mikroliter"] # 0x3395 (en: 'microliters', DeepL translation) + - "㎖": [t: "milliliter"] # 0x3396 (en: 'milliliters', DeepL translation) + - "㎗": [t: "deciliter"] # 0x3397 (en: 'deciliters', DeepL translation) + - "㎘": [t: "kiloliter"] # 0x3398 (en: 'kiloliters', DeepL translation) + - "㎙": [t: "femtométer"] # 0x3399 (en: 'femtometers', DeepL translation) + - "㎚": [t: "nanométer"] # 0x339a (en: 'nanometers', DeepL translation) + - "㎛": [t: "mikrométer"] # 0x339b (en: 'micrometers', DeepL translation) + - "㎜": [t: "milliméter"] # 0x339c (en: 'millimeters', DeepL translation) + - "㎝": [t: "centiméter"] # 0x339d (en: 'centimeters', DeepL translation) + - "㎞": [t: "kilométer"] # 0x339e (en: 'kilometers', DeepL translation) + - "㎟": [t: "milliméter négyzet"] # 0x339f (en: 'millimeters squared', DeepL translation) + - "㎠": [t: "centiméter négyzet"] # 0x33a0 (en: 'centimeters squared', DeepL translation) + - "㎡": [t: "méteres négyzet"] # 0x33a1 (en: 'meters squared', DeepL translation) + - "㎢": [t: "kilométer négyzet"] # 0x33a2 (en: 'kilometers squared', DeepL translation) + - "㎣": [t: "milliméter köbméter"] # 0x33a3 (en: 'millimeters cubed', DeepL translation) + - "㎤": [t: "centiméterek köbgyöke"] # 0x33a4 (en: 'centimeters cubed', DeepL translation) + - "㎥": [t: "méter köbméter"] # 0x33a5 (en: 'meters cubed', DeepL translation) + - "㎦": [t: "kilométerek köbösítve"] # 0x33a6 (en: 'kilometers cubed', DeepL translation) + - "㎧": [t: "méter per másodperc"] # 0x33a7 (en: 'meters per second', DeepL translation) + - "㎨": [t: "méter per másodperc négyzetméter"] # 0x33a8 (en: 'meters per second squared', DeepL translation) + - "㎩": [t: "pascals"] # 0x33a9 (DeepL translation) + - "㎪": [t: "kilopascal"] # 0x33aa (en: 'kilopascals', DeepL translation) + - "㎫": [t: "megapaszkál"] # 0x33ab (en: 'megapascals', DeepL translation) + - "㎬": [t: "gigapaszkál"] # 0x33ac (en: 'gigapascals', DeepL translation) + - "㎭": [t: "radián"] # 0x33ad (en: 'rads', DeepL translation) + - "㎮": [t: "rad másodpercenként"] # 0x33ae (en: 'rads per second', DeepL translation) + - "㎯": [t: "rad/másodperc négyzet"] # 0x33af (en: 'rads per second squared', DeepL translation) + - "㎰": [t: "pikoszekundum"] # 0x33b0 (en: 'picoseconds', DeepL translation) + - "㎱": [t: "nanoszekundum"] # 0x33b1 (en: 'nanoseconds', DeepL translation) + - "㎲": [t: "mikroszekundum"] # 0x33b2 (en: 'microseconds', DeepL translation) + - "㎳": [t: "milliszekundum"] # 0x33b3 (en: 'milliseconds', DeepL translation) + - "㎴": [t: "pikovolt"] # 0x33b4 (en: 'picovolts', DeepL translation) + - "㎵": [t: "nanovolt"] # 0x33b5 (en: 'nanovolts', DeepL translation) + - "㎶": [t: "mikrovolt"] # 0x33b6 (en: 'microvolts', DeepL translation) + - "㎷": [t: "millivolt"] # 0x33b7 (en: 'millivolts', DeepL translation) + - "㎸": [t: "kilovolt"] # 0x33b8 (en: 'kilovolts', DeepL translation) + - "㎹": [t: "megavolt"] # 0x33b9 (en: 'megavolts', DeepL translation) + - "㎺": [t: "pikowatt"] # 0x33ba (en: 'picowatts', DeepL translation) + - "㎻": [t: "nanowatt"] # 0x33bb (en: 'nanowatts', DeepL translation) + - "㎼": [t: "mikrowatt"] # 0x33bc (en: 'microwatts', DeepL translation) + - "㎽": [t: "milliwatt"] # 0x33bd (en: 'milliwatts', DeepL translation) + - "㎾": [t: "kilowatt"] # 0x33be (en: 'kilowatts', DeepL translation) + - "㎿": [t: "megawatt"] # 0x33bf (en: 'megawatts', DeepL translation) + - "㏀": [t: "kilo-ohm"] # 0x33c0 (en: 'kilo-ohms', DeepL translation) + - "㏁": [t: "megaohm"] # 0x33c1 (en: 'megaohms', DeepL translation) + - "㏂": [t: "attométerek"] # 0x33c2 (en: 'attometers', DeepL translation) + - "㏃": [t: "becquerel"] # 0x33c3 (en: 'becquerels', DeepL translation) + - "㏄": [t: "köbcentiméter"] # 0x33c4 (en: 'cubic centimeters', DeepL translation) + - "㏅": [t: "kandeláber"] # 0x33c5 (en: 'candelas', DeepL translation) + - "㏆": [t: "coulomb kilogrammonként"] # 0x33c6 (en: 'coulombs per kilogram', DeepL translation) + - "㏇": [t: "nagybetűs c, o, pont"] # 0x33c7 (I have no idea what this is) (en: 'cap C, o, period', DeepL translation) + - "㏈": [t: "decibel"] # 0x33c8 (en: 'decibels', DeepL translation) + - "㏉": [t: "szürke"] # 0x33c9 (en: 'grays', DeepL translation) + - "㏊": [t: "hektár"] # 0x33ca (en: 'hectares', DeepL translation) + - "㏋": [t: "lóerő"] # 0x33cb (en: 'horsepower', DeepL translation) + - "㏌": [t: "hüvelyk"] # 0x33cc (en: 'inches', DeepL translation) + - "㏍": [t: "kilokelvin"] # 0x33cd (en: 'kilokelvins', DeepL translation) + - "㏎": [t: "kilométer"] # 0x33ce (en: 'kilometers', DeepL translation) + - "㏏": [t: "csomók"] # 0x33cf (en: 'knots', DeepL translation) + - "㏐": [t: "lumen"] # 0x33d0 (en: 'lumens', DeepL translation) + - "㏑": [t: "természetes log"] # 0x33d1 (en: 'natural log', DeepL translation) + - "㏒": [t: "logaritmus"] # 0x33d2 (en: 'logarithm', DeepL translation) + - "㏓": [t: "lux"] # 0x33d3 (DeepL translation) + - "㏔": [t: "millibarn"] # 0x33d4 (en: 'millibarns', DeepL translation) + - "㏕": [t: "malmok"] # 0x33d5 (en: 'mills', DeepL translation) + - "㏖": [t: "mól"] # 0x33d6 (en: 'moles', DeepL translation) + - "㏗": [t: "p h"] # 0x33d7 (DeepL translation) + - "㏘": [t: "pikométer"] # 0x33d8 (en: 'picometers', DeepL translation) + - "㏙": [t: "milliomodrész"] # 0x33d9 (en: 'parts per million', DeepL translation) + - "㏚": [t: "petaroentgens"] # 0x33da (DeepL translation) + - "㏛": [t: "steradiánok"] # 0x33db (en: 'steradians', DeepL translation) + - "㏜": [t: "sziták"] # 0x33dc (en: 'sieverts', DeepL translation) + - "㏝": [t: "webers"] # 0x33dd (DeepL translation) + - "㏞": [t: "volt per méter"] # 0x33de (en: 'volts per meter', DeepL translation) + - "㏟": [t: "amper per méter"] # 0x33df (en: 'amps per meter', DeepL translation) + - "㏿": [t: "gallonok"] # 0x33ff (en: 'gallons', DeepL translation) + - "": [t: "egyenlő az alatta lévő kalappal"] # 0xe900 (en: 'equals with hat below', DeepL translation) + - "": [t: "egyenlő plusz felett"] # 0xe901 (en: 'equals with plus above', DeepL translation) + - "": [t: "egyenlő plusz alatt"] # 0xe902 (en: 'equals with plus below', DeepL translation) + - "": [t: "tilde plusszal fölötte"] # 0xe903 (en: 'tilde with plus above', DeepL translation) + - "": [t: "tilde plusszal alatta"] # 0xe904 (en: 'tilde with plus below', DeepL translation) + - "": [t: "egyenlő kétszeres felett nagyobb, mint"] # 0xe908 (en: 'equal double over greater than', DeepL translation) + - "": [t: "egyenlő kettős felett kevesebb mint"] # 0xe909 (en: 'equal double over less than', DeepL translation) + - "": [t: "tartalmazza vagy egyenlő"] # 0xe90a (en: 'contains or equal to', DeepL translation) + - "": [t: "szuperhalmaza vagy egyenlő"] # 0xe90b (en: 'superset of or equal to', DeepL translation) + - "": [t: "részhalmaza vagy egyenlő"] # 0xe90c (en: 'subset of or equal to', DeepL translation) + - "": [t: "egyenlő felett kisebb, mint"] # 0xe90d (en: 'equal over less than', DeepL translation) + - "": [t: "eleme vagy egyenlő"] # 0xe912 (en: 'element of or equal to', DeepL translation) + - "": [t: "egyenlő vagy nagyobb, mint"] # 0xe913 (en: 'equal to or greater than', DeepL translation) + - "": [t: "hozzávetőleges szuperhalmaza"] # 0xe914 (en: 'approximate superset of', DeepL translation) + - "": [t: "megközelítő részhalmaza"] # 0xe915 (en: 'approximate subset of', DeepL translation) + - "": [t: "superset of with dot includes as sub relation"] # 0xe916 (DeepL translation) + - "": [t: "részhalmaza ponttal szerepel mint sub reláció"] # 0xe917 (en: 'subset of with dot is included in as sub relation', DeepL translation) + - "": [t: "egyenlő az alatta lévő ponttal"] # 0xe918 (en: 'equal with dot below', DeepL translation) + - "": [t: "bal pont mínusz felett mínusz felett jobb pont"] # 0xe919 (en: 'left dot over minus over right dot', DeepL translation) + - "": [t: "jobb pont a mínusz felett a bal pont felett"] # 0xe91a (en: 'right dot over minus over left dot', DeepL translation) + - "": [t: "majdnem egyenlő a mínuszokkal"] # 0xe91f (en: 'almost equal to minus', DeepL translation) + - "": [t: "dupla négyzet csésze"] # 0xe920 (en: 'double square cup', DeepL translation) + - "": [t: "dupla négyzet nagybetű"] # 0xe921 (en: 'double square cap', DeepL translation) + - "": [t: "kisebb, mint egyenlő vagy nagyobb, mint"] # 0xe922 (en: 'less than equal to or greater than', DeepL translation) + - "": [t: "tilde ponttal"] # 0xe924 (en: 'tilde with dot', DeepL translation) + - "": [t: "tilde két ponttal"] # 0xe925 (en: 'tilde with two dots', DeepL translation) + - "": [t: "kisebb, mint nagyobb vagy egyenlő"] # 0xe926 (en: 'less than greater than or equal to', DeepL translation) + - "": [t: "nagyobb, mint kisebb vagy egyenlő"] # 0xe927 (en: 'greater than less than or equal to', DeepL translation) + - "": [t: "egyenértékű vagy kisebb, mint"] # 0xe928 (en: 'equivalent to or less than', DeepL translation) + - "": [t: "egyenértékű vagy nagyobb, mint"] # 0xe929 (en: 'equivalent to or greater than', DeepL translation) + - "": [t: "bal nyitott doboz kezelő"] # 0xe92a (en: 'left open box operator', DeepL translation) + - "": [t: "jobb oldali nyitott dobozos kezelő"] # 0xe92b (en: 'right open box operator', DeepL translation) + - "": [t: "azonos a ponttal"] # 0xe92c (en: 'identical to with dot', DeepL translation) + - "": [t: "nagyobb, mint egyenlő vagy kisebb, mint"] # 0xe92d (en: 'greater than equal to or less than', DeepL translation) + - "": [t: "bárkezelő"] # 0xe92e (en: 'bar operator', DeepL translation) + - "": [t: "kettős sávos operátor"] # 0xe92f (en: 'double bar operator', DeepL translation) + - "": [t: "háromszoros rúdkezelő"] # 0xe930 (en: 'triple bar operator', DeepL translation) + - "": [t: "kisebb, mint vagy megközelítőleg egyenlő"] # 0xe932 (en: 'less than or approximately equal to', DeepL translation) + - "": [t: "nagyobb vagy megközelítőleg egyenlő"] # 0xe933 (en: 'greater than or approximately equal to', DeepL translation) + - "": [t: "beágyazott kisebb, mint"] # 0xe936 (en: 'nested less than', DeepL translation) + - "": [t: "fészkes nagyobb, mint"] # 0xe937 (en: 'nested greater than', DeepL translation) + - "": [t: "megelőzi vagy azzal egyenértékű"] # 0xe93a (en: 'precedes or equivalent to', DeepL translation) + - "": [t: "sikerül vagy egyenértékű"] # 0xe93b (en: 'succeeds or equivalent to', DeepL translation) + - "": [t: "egyenlő fölött előzi meg"] # 0xe940 (en: 'precedes over equal', DeepL translation) + - "": [t: "sikerül egyenlő felett"] # 0xe941 (en: 'succeeds over equal', DeepL translation) + - "": [t: "kisebb egyenlő ferde nagyobb"] # 0xe942 (en: 'less equal slanted greater', DeepL translation) + - "": [t: "nagyobb egyenlő ferde kisebb"] # 0xe943 (en: 'greater equal slanted less', DeepL translation) + - "": [t: "elégedett"] # 0xe948 (en: 'satisfied by', DeepL translation) + - "": [t: "lazy s"] # 0xe949 (DeepL translation) + - "": [t: "nem állítás"] # 0xe94a (en: 'not assertion', DeepL translation) + - "": [t: "kettős egyenlő"] # 0xe94b (en: 'double equal', DeepL translation) + - "": [t: "hármas egyenlő"] # 0xe94c (en: 'triple equal', DeepL translation) + - "": [t: "szabály késleltetett"] # 0xe94d (en: 'rule delayed', DeepL translation) + - "": [t: "alias elválasztójel"] # 0xe94e (en: 'alias delimiter', DeepL translation) + - "": [t: "normál alcsoportja sávval"] # 0xe950 (en: 'normal subgroup of with bar', DeepL translation) + - "": [t: "tartalmaz normál alcsoportként vonallal"] # 0xe951 (en: 'contains as normal subgroup with bar', DeepL translation) + - "": [t: "kerek implikációk"] # 0xe954 (en: 'round implies', DeepL translation) + - "": [t: "mosoly alatt sáv"] # 0xe955 (en: 'smile under bar', DeepL translation) + - "": [t: "homlokráncolás a sáv fölött"] # 0xe956 (en: 'frown over bar', DeepL translation) + - "": [t: "szuperhalmaza vagy majdnem egyenlő"] # 0xe957 (en: 'superset of or almost equal to', DeepL translation) + - "": [t: "részhalmaza vagy majdnem egyenlő"] # 0xe958 (en: 'subset of or almost equal to', DeepL translation) + - "": [t: "nagyobb, mint majdnem egyenlő vagy kisebb, mint"] # 0xe959 (en: 'greater than almost equal to or less than', DeepL translation) + - "": [t: "kisebb, mint majdnem egyenlő vagy nagyobb, mint"] # 0xe95a (en: 'less than almost equal or greater than', DeepL translation) + - "": [t: "dupla logikai vagy"] # 0xe95c (en: 'double logical or', DeepL translation) + - "": [t: "kettős logikai és"] # 0xe95d (en: 'double logical and', DeepL translation) + - "": [t: "logikai vagy alatta kettős vonallal"] # 0xe95e (en: 'logical or with double bar below', DeepL translation) + - "": [t: "logikai vagy vonallal alatta"] # 0xe95f (en: 'logical or with bar below', DeepL translation) + - "": [t: "majdnem egyenlő az egyenlő felett"] # 0xe962 (en: 'almost equal over equal', DeepL translation) + - "": [t: "balra mutató háromszög felező sávval"] # 0xe964 (en: 'left pointing triangle with bisecting bar', DeepL translation) + - "": [t: "jobbra mutató háromszög felező sávval"] # 0xe965 (en: 'right pointing triangle with bisecting bar', DeepL translation) + - "": [t: "egyenlőségjel pontozott felső vonallal"] # 0xe966 (en: 'equals with dotted top line', DeepL translation) + - "": [t: "kettőspont előzi meg"] # 0xe967 (en: 'precedes with colon', DeepL translation) + - "": [t: "sikerül kettősponttal"] # 0xe968 (en: 'succeeds with colon', DeepL translation) + - "": [t: "kisebb, mint vagy egyenlő ferde"] # 0xe969 (en: 'smaller than or equal slanted', DeepL translation) + - "": [t: "nagyobb, mint vagy egyenlő ferde"] # 0xe96a (en: 'larger than or equal slanted', DeepL translation) + - "": [t: "beágyazott nagyon sokkal kisebb, mint"] # 0xe96b (en: 'nested very much less than', DeepL translation) + - "": [t: "beágyazott nagyon sokkal nagyobb, mint"] # 0xe96c (en: 'nested very much greater than', DeepL translation) + - "": [t: "különbség a változatok között"] # 0xe96d (en: 'difference between variant', DeepL translation) + - "": [t: "kisebb, mint nagyobb, mint átfedés"] # 0xe96e (en: 'less than greater than overlay', DeepL translation) + - "": [t: "logikai vagy logikai és felülbélyegzővel"] # 0xe96f (en: 'logical or logical and overlay', DeepL translation) + - "": [t: "superset over superset"] # 0xe970 (DeepL translation) + - "": [t: "részhalmaz részhalmaz felett"] # 0xe971 (en: 'subset over subset', DeepL translation) + - "": [t: "superset over subset"] # 0xe972 (DeepL translation) + - "": [t: "részhalmaz a szuperhalmaz felett"] # 0xe973 (en: 'subset over superset', DeepL translation) + - "": [t: "háromszoros függőleges vonal"] # 0xe979 (en: 'triple vertical bar', DeepL translation) + - "": [t: "páros négyes függőleges pontok"] # 0xe97a (en: 'paired quadruple vertical dots', DeepL translation) + - "": [t: "merőlegesen a sáv fölött"] # 0xe97b (en: 'perpendicular over bar', DeepL translation) + - "": [t: "balra forduló kettős függőleges sáv"] # 0xe97c (en: 'left turnstile double vertical bar', DeepL translation) + - "": [t: "kettős balra forduló kettős függőleges sáv"] # 0xe97d (en: 'double left turnstile double vertical bar', DeepL translation) + - "": [t: "merőleges a fordított merőleges felett"] # 0xe97e (en: 'perpendicular over inverted perpendicular', DeepL translation) + - "": [t: "dupla balra forduló függőleges sáv"] # 0xe97f (en: 'double left turnstile vertical bar', DeepL translation) + - "": [t: "gömbszöget nyitó"] # 0xe980 (en: 'spherical angle opening up', DeepL translation) + - "": [t: "kettős átlós"] # 0xe981 (en: 'double slash', DeepL translation) + - "": [t: "derékszög a sarokkal"] # 0xe982 (en: 'right angle with corner', DeepL translation) + - "": [t: "bekarikázott függőleges sáv"] # 0xe984 (en: 'circled vertical bar', DeepL translation) + - "": [t: "bekarikázott osztásjel"] # 0xe985 (en: 'circled division sign', DeepL translation) + - "": [t: "szaggatott solidus"] # 0xe986 (en: 'dashed solidus', DeepL translation) + - "": [t: "szaggatott backslash"] # 0xe987 (en: 'dashed backslash', DeepL translation) + - "": [t: "szaggatott középvonallal"] # 0xe988 (en: 'dashed mid line', DeepL translation) + - "": [t: "szaggatott függőleges vonallal"] # 0xe989 (en: 'dashed vertical bar', DeepL translation) + - "": [t: "merőleges s-szel"] # 0xe98a (en: 'perpendicular with s', DeepL translation) + - "": [t: "szög s-sel"] # 0xe98b (en: 'angle with s', DeepL translation) + - "": [t: "gömbszög nyílás balra"] # 0xe98c (en: 'spherical angle opening left', DeepL translation) + - "": [t: "balra nyíló szög"] # 0xe98d (en: 'angle opening left', DeepL translation) + - "": [t: "függőleges sáv dupla horoggal"] # 0xe98e (en: 'vertical bar with double hook', DeepL translation) + - "": [t: "közepes pont operátor szabad gyök"] # 0xe98f (en: 'medium dot operator free radical', DeepL translation) + - "": [t: "fehér felfelé mutató háromszög a sáv felett"] # 0xe990 (en: 'white up pointing triangle above bar', DeepL translation) + - "": [t: "azonos és párhuzamos"] # 0xe991 (en: 'identical and parallel to', DeepL translation) + - "": [t: "smash termék"] # 0xe992 (en: 'smash product', DeepL translation) + - "": [t: "hármas sávkezelő vízszintes vonallal"] # 0xe993 (en: 'triple bar operator with horizontal bar', DeepL translation) + - "": [t: "azonos a kettős vonallal"] # 0xe994 (en: 'identical to with double slash', DeepL translation) + - "": [t: "háromszoros keresztezett sávok"] # 0xe995 (en: 'triple crossed bars', DeepL translation) + - "": [t: "függőleges sáv a kör felett"] # 0xe996 (en: 'vertical bar over circle', DeepL translation) + - "": [t: "függőleges arányos"] # 0xe997 (en: 'vertical proportional to', DeepL translation) + - "": [t: "fekete utolsó negyed hold"] # 0xe998 (en: 'black last quarter moon', DeepL translation) + - "": [t: "fekete első negyed hold"] # 0xe999 (en: 'black first quarter moon', DeepL translation) + - "": [t: "negatív szinuszjel"] # 0xe9a0 (en: 'negative sine wave', DeepL translation) + - "": [t: "zárójeles zárójeles pont"] # 0xe9a1 (en: 'parenthesized dot', DeepL translation) + - "": [t: "zárójeliss"] # 0xe9a2 (en: 'parens', DeepL translation) + - "": [t: "fehér mosoly"] # 0xe9a3 (en: 'white smile', DeepL translation) + - "": [t: "fehér homlokráncolás"] # 0xe9a4 (en: 'white frown', DeepL translation) + - "": [t: "hatszög"] # 0xe9a5 (en: 'hexagon', DeepL translation) + - "": [t: "egyenértékű a plusz fölött"] # 0xe9a6 (en: 'equivalent to over plus', DeepL translation) + - "": [t: "plusz felett egyenértékű"] # 0xe9a7 (en: 'plus over equivalent to', DeepL translation) + - "": [t: "keresztező szerifák"] # 0xe9b0 (en: 'intersection serifs', DeepL translation) + - "": [t: "unió szerifák"] # 0xe9b1 (en: 'union serifs', DeepL translation) + - "": [t: "négyzet metsző szerif"] # 0xe9b2 (en: 'square intersection serifs', DeepL translation) + - "": [t: "szögletes egyesített szeriuszok"] # 0xe9b3 (en: 'square union serifs', DeepL translation) + - "": [t: "megelőzi egyenértékű vagy követi"] # 0xe9e0 (en: 'precedes equivalent to or succeeds', DeepL translation) + - "": [t: "sikerül egyenértékű vagy megelőzi"] # 0xe9e1 (en: 'succeeds equivalent to or precedes', DeepL translation) + - "": [t: "megelőzi majdnem egyenlő vagy sikerül"] # 0xe9e2 (en: 'precedes almost equal to or succeeds', DeepL translation) + - "": [t: "sikerül majdnem egyenlő vagy megelőzi"] # 0xe9e3 (en: 'succeeds almost equal to or precedes', DeepL translation) + - "": [t: "kisebb, mint egyenértékű vagy nagyobb, mint"] # 0xe9f0 (en: 'less than equivalent to or greater than', DeepL translation) + - "": [t: "nagyobb, mint egyenlő vagy kisebb, mint"] # 0xe9f1 (en: 'greater than equivalent to or less than', DeepL translation) + - "": [t: "nem vert sokkal kisebb, mint"] # 0xea00 (en: 'not vert much less than', DeepL translation) + - "": [t: "not vert sokkal nagyobb, mint"] # 0xea01 (en: 'not vert much greater than', DeepL translation) + - "": [t: "nem sokkal kevesebb, mint változat"] # 0xea02 (en: 'not much less than variant', DeepL translation) + - "": [t: "nem sokkal nagyobb, mint változat"] # 0xea03 (en: 'not much greater than variant', DeepL translation) + - "": [t: "kevesebb vert nem dupla egyenlőségjel"] # 0xea04 (en: 'less vert not double equals', DeepL translation) + - "": [t: "gt vert nem dupla egyenlőség"] # 0xea05 (en: 'gt vert not double equals', DeepL translation) + - "": [t: "nem kevesebb vagy egyenlő"] # 0xea06 (en: 'not less than or equal to', DeepL translation) + - "": [t: "nem nagyobb vagy egyenlő"] # 0xea07 (en: 'not greater than or equal to', DeepL translation) + - "": [t: "sem egyenlő, sem kisebb, mint"] # 0xea09 (en: 'neither equal to nor less than', DeepL translation) + - "": [t: "nem tartalmazza vagy egyenlő"] # 0xea0a (en: 'does not contain or equal to', DeepL translation) + - "": [t: "sem nem szuperhalmaza, sem nem egyenlő vele"] # 0xea0b (en: 'neither superset of nor equal to', DeepL translation) + - "": [t: "sem részhalmaza, sem egyenlő"] # 0xea0c (en: 'neither subset of nor equal to', DeepL translation) + - "": [t: "fordított solidus részhalmaz"] # 0xea0d (en: 'reverse solidus subset', DeepL translation) + - "": [t: "sem egyenlő, sem nagyobb, mint"] # 0xea0e (en: 'neither equal to nor greater than', DeepL translation) + - "": [t: "nem mínusz tilde operátor"] # 0xea0f (en: 'not minus tilde operator', DeepL translation) + - "": [t: "sem egyenlő, sem kisebb, mint"] # 0xea10 (en: 'neither equal to nor less than', DeepL translation) + - "": [t: "nem tilde operátor"] # 0xea11 (en: 'not tilde operator', DeepL translation) + - "": [t: "nem eleme vagy egyenlő"] # 0xea12 (en: 'not element of or equal to', DeepL translation) + - "": [t: "sem egyenlő, sem nagyobb, mint"] # 0xea13 (en: 'neither equal to nor greater than', DeepL translation) + - "": [t: "nem majdnem egyenlő"] # 0xea14 (en: 'not almost equal', DeepL translation) + - "": [t: "nem sikerül hasonló"] # 0xea15 (en: 'not succeeds similar', DeepL translation) + - "": [t: "kisebb, mint vagy ferde egyenlő, ferdehajlással"] # 0xea16 (en: 'less than or slanted equal to with slash', DeepL translation) + - "": [t: "nagyobb, mint vagy ferde egyenlő ferdén"] # 0xea17 (en: 'greater than or slanted equal to with slash', DeepL translation) + - "": [t: "szuperszett szolidus"] # 0xea1a (en: 'superset solidus', DeepL translation) + - "": [t: "nem tartalmazza"] # 0xea1b (en: 'does not contain', DeepL translation) + - "": [t: "nem kevesebb vagy egyenlő"] # 0xea1d (en: 'not less than or equal to', DeepL translation) + - "": [t: "nem nagyobb vagy egyenlő"] # 0xea1e (en: 'not greater than or equal to', DeepL translation) + - "": [t: "nem majdnem egyenlő mínusz"] # 0xea1f (en: 'not almost equal to minus', DeepL translation) + - "": [t: "negált halmazhoz tartozás pont felett"] # 0xea22 (en: 'negated set membership dot above', DeepL translation) + - "": [t: "nem vert szög"] # 0xea2c (en: 'not vert angle', DeepL translation) + - "": [t: "nem párhuzamos ferde"] # 0xea2d (en: 'not parallel slanted', DeepL translation) + - "": [t: "nem bar operátor"] # 0xea2e (en: 'not bar operator', DeepL translation) + - "": [t: "nem dupla sáv operátor"] # 0xea2f (en: 'not double bar operator', DeepL translation) + - "": [t: "nem hármas vonallal operátor"] # 0xea30 (en: 'not triple bar operator', DeepL translation) + - "": [t: "kisebb, mint, de nem közelítőleg egyenlő"] # 0xea32 (en: 'less than but not approximately equal to', DeepL translation) + - "": [t: "nagyobb, mint, de nem közelítőleg egyenlő"] # 0xea33 (en: 'greater than but not approximately equal to', DeepL translation) + - "": [t: "kisebb vagy nem egyenlő"] # 0xea34 (en: 'less than or not equal to', DeepL translation) + - "": [t: "nagyobb, mint vagy nem egyenlő"] # 0xea35 (en: 'greater than or not equal to', DeepL translation) + - "": [t: "nem beágyazott kisebb, mint"] # 0xea36 (en: 'not nested less than', DeepL translation) + - "": [t: "nem beágyazott nagyobb, mint"] # 0xea37 (en: 'not nested greater than', DeepL translation) + - "": [t: "nem sokkal kisebb, mint"] # 0xea38 (en: 'not much less than', DeepL translation) + - "": [t: "nem sokkal nagyobb, mint"] # 0xea39 (en: 'not much greater than', DeepL translation) + - "": [t: "megelőzi, de nem egyenértékű"] # 0xea3a (en: 'precedes but not equivalent to', DeepL translation) + - "": [t: "sikerül, de nem egyenlő"] # 0xea3b (en: 'succeeds but not equivalent to', DeepL translation) + - "": [t: "megelőzi, de nem egyenlő vele"] # 0xea3c (en: 'precedes but not equal to', DeepL translation) + - "": [t: "sikerül, de nem egyenlő"] # 0xea3d (en: 'succeeds but not equal to', DeepL translation) + - "": [t: "nem egyenlő vagy megelőzi"] # 0xea3e (en: 'does not equal or precede', DeepL translation) + - "": [t: "nem egyenlő vagy nem követi"] # 0xea3f (en: 'does not equal or succeed', DeepL translation) + - "": [t: "megelőzi, de nem egyenlő vele"] # 0xea40 (en: 'precedes but not equal to', DeepL translation) + - "": [t: "sikerül, de nem egyenlő"] # 0xea41 (en: 'succeeds but not equal to', DeepL translation) + - "": [t: "nem részhalmaza és nem egyenlő"] # 0xea42 (en: 'not subset of nor equal to', DeepL translation) + - "": [t: "not superset of nor equal to"] # 0xea43 (DeepL translation) + - "": [t: "részhalmaza vagy nem egyenlő"] # 0xea44 (en: 'subset of or not equal to', DeepL translation) + - "": [t: "szuperhalmaza vagy nem egyenlő"] # 0xea45 (en: 'superset of or not equal to', DeepL translation) + - "": [t: "nem részhalmaza és nem egyenlő"] # 0xea46 (en: 'not subset of nor equal to', DeepL translation) + - "": [t: "not superset of nor equal to"] # 0xea47 (DeepL translation) + - "": [t: "nem háromszor kisebb, mint"] # 0xea48 (en: 'not triple less than', DeepL translation) + - "": [t: "nem hármas nagyobb, mint"] # 0xea49 (en: 'not triple greater than', DeepL translation) + - "": [t: "nem előzi meg az egyenlőségjelet"] # 0xea4c (en: 'not precedes equals', DeepL translation) + - "": [t: "nem sikerül egyenlő"] # 0xea4d (en: 'not succeeds equals', DeepL translation) + - "": [t: "nem normál alcsoportja a barral"] # 0xea50 (en: 'not normal subgroup of with bar', DeepL translation) + - "": [t: "nem tartalmaz normál alcsoportként sávos alcsoportot"] # 0xea51 (en: 'does not contain as normal subgroup with bar', DeepL translation) + - "": [t: "nem különbség a"] # 0xea52 (en: 'not difference between', DeepL translation) + - "": [t: "geometriailag nem egyenértékű"] # 0xea53 (en: 'not geometrically equivalent to', DeepL translation) + - "": [t: "nem függőlegesen hasonló"] # 0xea54 (en: 'not vert similar', DeepL translation) + - "": [t: "nem egyenlő vagy hasonló"] # 0xea55 (en: 'not equal or similar', DeepL translation) + - "": [t: "nem vert közelítő"] # 0xea56 (en: 'not vert approximate', DeepL translation) + - "": [t: "nem megközelítőleg azonos"] # 0xea57 (en: 'not approximately identical to', DeepL translation) + - "": [t: "nem dudoros egyenlőségjel"] # 0xea58 (en: 'not bumpy equals', DeepL translation) + - "": [t: "nem döcögő egyetlen egyenlő"] # 0xea59 (en: 'not bumpy single equals', DeepL translation) + - "": [t: "nem egyenlő pont"] # 0xea5a (en: 'not equal dot', DeepL translation) + - "": [t: "fordított nem egyenértékű"] # 0xea5b (en: 'reverse not equivalent', DeepL translation) + - "": [t: "nem négyzet részhalmaz"] # 0xea60 (en: 'not square subset', DeepL translation) + - "": [t: "nem négyzetes szuperhalmaz"] # 0xea61 (en: 'not square superset', DeepL translation) + - "": [t: "nem majdnem egyenlő az egyenlővel"] # 0xea62 (en: 'not almost equal over equal', DeepL translation) + - "": [t: "nem teljesen egyenértékű"] # 0xea63 (en: 'not strictly equivalent to', DeepL translation) + - "": [t: "nem egybeeső pont"] # 0xea64 (en: 'not congruent dot', DeepL translation) + - "": [t: "fordított nem egyenlő"] # 0xea65 (en: 'reverse not equal', DeepL translation) + - "": [t: "nem vert bal oldali háromszög egyenlő"] # 0xea70 (en: 'not vert left triangle equals', DeepL translation) + - "": [t: "nem vert jobb háromszög egyenlő"] # 0xea71 (en: 'not vert right triangle equals', DeepL translation) + - "": [t: "nem részleges"] # 0xea80 (en: 'not partial', DeepL translation) + - "": [t: "nyíl díszítés meghosszabbító"] # 0xeb00 (en: 'arrow embellishment extender', DeepL translation) + - "": [t: "nyíl jobbra a nyíl balra"] # 0xeb01 (en: 'arrow right over arrow left', DeepL translation) + - "": [t: "nyíl jobbra a nyíl balra"] # 0xeb02 (en: 'arrow right over arrow left', DeepL translation) + - "": [t: "szigony jobbra a szigony balra"] # 0xeb03 (en: 'harpoon right over harpoon left', DeepL translation) + - "": [t: "szigony jobbra a szigony balra"] # 0xeb04 (en: 'harpoon right over harpoon left', DeepL translation) + - "": [t: "dupla nyíl északkelet délnyugat"] # 0xeb05 (en: 'double arrow northeast southwest', DeepL translation) + - "": [t: "kettős nyíl északnyugat délkelet"] # 0xeb06 (en: 'double arrow northwest southeast', DeepL translation) + - "": [t: "vízszintes szigonyhosszabbító"] # 0xeb07 (en: 'horizontal harpoon extender', DeepL translation) + - "": [t: "óramutató járásával ellentétes ívű balra mutató nyíl"] # 0xeb08 (en: 'anticlockwise arc left arrow', DeepL translation) + - "": [t: "az óramutató járásával ellentétes ívű jobbra mutató nyíl"] # 0xeb09 (en: 'anticlockwise arc right arrow', DeepL translation) + - "": [t: "nagy jobbra mutató nyíl ékezet"] # 0xeb0b (en: 'large right arrow accent', DeepL translation) + - "": [t: "nagy bal nyíl ékezet"] # 0xeb0c (en: 'large left arrow accent', DeepL translation) + - "": [t: "bal nyílhegy"] # 0xeb0d (en: 'left arrowhead', DeepL translation) + - "": [t: "jobb oldali nyílhegy"] # 0xeb0e (en: 'right arrowhead', DeepL translation) + - "": [t: "nagy balra jobbra nyíl vonallal"] # 0xeb0f (en: 'large left right arrow with stroke', DeepL translation) + - "": [t: "vízszintes kettős nyíl meghosszabbítása"] # 0xeb10 (en: 'horizontal double arrow extender', DeepL translation) + - "": [t: "nagy bal oldali jobb oldali kettős nyíl vonallal"] # 0xeb11 (en: 'large left right double arrow with stroke', DeepL translation) + - "": [t: "lefelé mutató nyíl balra a felfelé mutató nyílból"] # 0xeb12 (en: 'down arrow left of up arrow', DeepL translation) + - "": [t: "balra nyíl sarokkal lefelé"] # 0xeb13 (en: 'left arrow with corner down', DeepL translation) + - "": [t: "jobbra mutató nyíl sarokkal felfelé"] # 0xeb14 (en: 'right arrow with corner up', DeepL translation) + - "": [t: "bal nyíl sarokkal felfelé"] # 0xeb15 (en: 'left arrow with corner up', DeepL translation) + - "": [t: "az óramutató járásával ellentétes irányú felső félköríves nyíl plusszal"] # 0xeb16 (en: 'anticlockwise top semicircle arrow with plus', DeepL translation) + - "": [t: "az óramutató járásával megegyező irányú felső félköríves nyíl mínuszokkal"] # 0xeb17 (en: 'clockwise top semicircle arrow with minus', DeepL translation) + - "": [t: "jobbra nyilazott farok vonallal"] # 0xeb18 (en: 'right arrow with tail with stroke', DeepL translation) + - "": [t: "jobb szigony lefelé"] # 0xeb19 (en: 'right harpoon down', DeepL translation) + - "": [t: "bal szigony lefelé"] # 0xeb1a (en: 'left harpoon down', DeepL translation) + - "": [t: "bal jobb szigony lefelé"] # 0xeb1b (en: 'left right harpoon down', DeepL translation) + - "": [t: "bal jobb szigony felfelé"] # 0xeb1c (en: 'left right harpoon up', DeepL translation) + - "": [t: "fel le szigony balra"] # 0xeb1d (en: 'up down harpoon left', DeepL translation) + - "": [t: "fel le szigony jobbra"] # 0xeb1e (en: 'up down harpoon right', DeepL translation) + - "": [t: "felfelé mutató nyíl a lefelé mutató nyíl jobb oldalán"] # 0xeb1f (en: 'up arrow to the right of down arrow', DeepL translation) + - "": [t: "bal szigony a rúdhoz szálkával felfelé"] # 0xeb20 (en: 'left harpoon to bar with barb up', DeepL translation) + - "": [t: "jobb szigony a rúdhoz, felfelé irányuló tüskével"] # 0xeb21 (en: 'right harpoon to bar with barb up', DeepL translation) + - "": [t: "bal szigony a rúdra szálkával lefelé"] # 0xeb22 (en: 'left harpoon to bar with barb down', DeepL translation) + - "": [t: "jobb szigony a rúdhoz lefelé irányuló szálkával"] # 0xeb23 (en: 'right harpoon to bar with barb down', DeepL translation) + - "": [t: "bal szigony a rúdról felfelé irányuló szálkával"] # 0xeb24 (en: 'left harpoon from bar with barb up', DeepL translation) + - "": [t: "jobb szigony a rúdról felfelé álló szálkával"] # 0xeb25 (en: 'right harpoon from bar with barb up', DeepL translation) + - "": [t: "bal szigony a rúdról lefelé irányuló szálkával"] # 0xeb26 (en: 'left harpoon from bar with barb down', DeepL translation) + - "": [t: "jobb oldali szigony rúdról lefelé irányuló szálkával"] # 0xeb27 (en: 'right harpoon from bar with barb down', DeepL translation) + - "": [t: "felfelé szigony a rúd balra tartó vonóhoroggal"] # 0xeb28 (en: 'up harpoon to bar with barb left', DeepL translation) + - "": [t: "lefelé szigorított sáv bal oldali szúrószeggel"] # 0xeb29 (en: 'down harpoon to bar with barb left', DeepL translation) + - "": [t: "fel szigonyt a rúdhoz jobbra szúrószöggel"] # 0xeb2a (en: 'up harpoon to bar with barb right', DeepL translation) + - "": [t: "lefelé szigony a rúddal jobbra lévő tüskével"] # 0xeb2b (en: 'down harpoon to bar with barb right', DeepL translation) + - "": [t: "felfelé szigorított vonaltól balra lévő vonallal"] # 0xeb2c (en: 'up harpoon from bar with barb left', DeepL translation) + - "": [t: "lefelé irányuló szigony vonaltól balra lévő szálkával"] # 0xeb2d (en: 'down harpoon from bar with barb left', DeepL translation) + - "": [t: "felfelé nyilazás bárból szálkával jobbra"] # 0xeb2e (en: 'up harpoon from bar with barb right', DeepL translation) + - "": [t: "lefelé szigony a rúdtól jobbra szálkás"] # 0xeb2f (en: 'down harpoon from bar with barb right', DeepL translation) + - "": [t: "felfelé nyíl a bárra"] # 0xeb30 (en: 'up arrow to bar', DeepL translation) + - "": [t: "lefelé mutató nyíl a sávra"] # 0xeb31 (en: 'down arrow to bar', DeepL translation) + - "": [t: "fel szigony a lefelé irányuló szigonytól balra"] # 0xeb32 (en: 'up harpoon to the left of down harpoon', DeepL translation) + - "": [t: "up szigony jobbra le szigony"] # 0xeb33 (en: 'up harpoon to the right of down harpoon', DeepL translation) + - "": [t: "felfelé mutató nyílhegy"] # 0xeb34 (en: 'up arrowhead', DeepL translation) + - "": [t: "lefelé mutató nyílhegy"] # 0xeb35 (en: 'down arrowhead', DeepL translation) + - "": [t: "kettős szigony bal oldali szúróval lefelé jobb oldali szúróval felfelé"] # 0xeb36 (en: 'double harpoon with left barb down right barb up', DeepL translation) + - "": [t: "dupla szigony balra szúrószöggel felfelé jobbra szúrószög lefelé"] # 0xeb37 (en: 'double harpoon with left barb up right barb down', DeepL translation) + - "": [t: "bal nyíl a sáv felett"] # 0xeb38 (en: 'left arrow over bar', DeepL translation) + - "": [t: "jobbra nyíl a sáv felett"] # 0xeb39 (en: 'right arrow over bar', DeepL translation) + - "": [t: "bal nyíl a sáv alatt"] # 0xeb3a (en: 'left arrow under bar', DeepL translation) + - "": [t: "jobbra nyíl a sáv alatt"] # 0xeb3b (en: 'right arrow under bar', DeepL translation) + - "": [t: "balra jobbra háromszoros nyíl"] # 0xeb3c (en: 'left right triple arrow', DeepL translation) + - "": [t: "kettős nyíl északkelet délkelet"] # 0xeb3f (en: 'double arrow northeast southeast', DeepL translation) + - "": [t: "az óramutató járásával ellentétes irányú bal oldali félköríves nyíl"] # 0xeb40 (en: 'anticlockwise left semicircle arrow', DeepL translation) + - "": [t: "óramutató járásával megegyezően balra félköríves nyíl"] # 0xeb41 (en: 'clockwise left semicircle arrow', DeepL translation) + - "": [t: "balra nyitott kör balra jobbra nyíl"] # 0xeb42 (en: 'left open circle left right arrow', DeepL translation) + - "": [t: "jobbra mutató nyíl tilde felett"] # 0xeb44 (en: 'right arrow over tilde', DeepL translation) + - "": [t: "bal nyíl a tilde felett"] # 0xeb45 (en: 'left arrow over tilde', DeepL translation) + - "": [t: "bal szigony a sáv fölött"] # 0xeb48 (en: 'left harpoon over bar', DeepL translation) + - "": [t: "jobb oldali szigony a sáv fölött"] # 0xeb49 (en: 'right harpoon over bar', DeepL translation) + - "": [t: "bal szigony a sáv alatt"] # 0xeb4a (en: 'left harpoon under bar', DeepL translation) + - "": [t: "jobb oldali szigony a sáv alatt"] # 0xeb4b (en: 'right harpoon under bar', DeepL translation) + - "": [t: "guggolt fekete balra nyíl"] # 0xeb4c (en: 'squat black left arrow', DeepL translation) + - "": [t: "az óramutató járásával megegyezően jobbra félköríves nyíl"] # 0xeb50 (en: 'clockwise right semicircle arrow', DeepL translation) + - "": [t: "az óramutató járásával ellentétes irányú jobb oldali félköríves nyíl"] # 0xeb51 (en: 'anticlockwise right semicircle arrow', DeepL translation) + - "": [t: "balra nyitott kör balra jobbra szigony"] # 0xeb52 (en: 'left open circle left right harpoon', DeepL translation) + - "": [t: "fel nyíl balra függőleges sávból"] # 0xeb58 (en: 'up arrow left of vertical bar', DeepL translation) + - "": [t: "lefelé mutató nyíl balra függőleges vonaltól"] # 0xeb59 (en: 'down arrow left of vertical bar', DeepL translation) + - "": [t: "felfelé nyíl a függőleges vonaltól jobbra"] # 0xeb5a (en: 'up arrow right of vertical bar', DeepL translation) + - "": [t: "lefelé mutató nyíl a függőleges sáv jobb oldalán"] # 0xeb5b (en: 'down arrow right of vertical bar', DeepL translation) + - "": [t: "jobb nyíl meghosszabbított lefelé mutató horoggal"] # 0xeb5c (en: 'right arrow with extended down hook', DeepL translation) + - "": [t: "bal nyíl meghosszabbított horoggal"] # 0xeb5d (en: 'left arrow with extended hook', DeepL translation) + - "": [t: "bal nyíl meghosszabbított lefelé irányuló horoggal"] # 0xeb5e (en: 'left arrow with extended down hook', DeepL translation) + - "": [t: "jobb nyíl meghosszabbított horoggal"] # 0xeb5f (en: 'right arrow with extended hook', DeepL translation) + - "": [t: "nem jobbra nyíl hullámos"] # 0xeb60 (en: 'not right arrow wavy', DeepL translation) + - "": [t: "nem jobbra ívelő nyíl"] # 0xeb61 (en: 'not right arrow curved', DeepL translation) + - "": [t: "felfelé szigony balra függőleges sáv"] # 0xeb68 (en: 'up harpoon left of vertical bar', DeepL translation) + - "": [t: "lefelé szigony balra függőleges sáv"] # 0xeb69 (en: 'down harpoon left of vertical bar', DeepL translation) + - "": [t: "felfelé szigony a függőleges sáv jobb oldalán"] # 0xeb6a (en: 'up harpoon right of vertical bar', DeepL translation) + - "": [t: "lefelé mutató szigony jobbra függőleges sáv"] # 0xeb6b (en: 'down harpoon right of vertical bar', DeepL translation) + - "": [t: "függőleges dupla nyíl meghosszabbító"] # 0xeb6c (en: 'vertical double arrow extender', DeepL translation) + - "": [t: "függőleges szigony bal oldali tüskés hosszabbítóval"] # 0xeb6d (en: 'vertical harpoon with barb left extender', DeepL translation) + - "": [t: "függőleges szigony szúrós jobb oldali nyúlvány"] # 0xeb6e (en: 'vertical harpoon with barb right extender', DeepL translation) + - "": [t: "jobb szigony a bal szigony felett jobbra"] # 0xeb6f (en: 'right harpoon over left harpoon right', DeepL translation) + - "": [t: "jobb szigony a bal szigony felett balra"] # 0xeb70 (en: 'right harpoon over left harpoon left', DeepL translation) + - "": [t: "bal szigony felett jobb szigony jobbra"] # 0xeb71 (en: 'left harpoon over right harpoon right', DeepL translation) + - "": [t: "bal szigony a jobb szigony felett balra"] # 0xeb72 (en: 'left harpoon over right harpoon left', DeepL translation) + - "": [t: "balra mutató nyíl sávos nyílvesszőből"] # 0xeb73 (en: 'left arrow from bar arrowhead', DeepL translation) + - "": [t: "balra jobbra mutató nyíl a sáv meghosszabbítójából"] # 0xeb74 (en: 'left right arrow from bar extender', DeepL translation) + - "": [t: "bal nyíl a sáv farkából"] # 0xeb75 (en: 'left arrow from bar tail', DeepL translation) + - "": [t: "jobbra mutató nyíl a sáv farkából"] # 0xeb76 (en: 'right arrow from bar tail', DeepL translation) + - "": [t: "jobbra nyíl a sáv nyílvesszőtől"] # 0xeb77 (en: 'right arrow from bar arrowhead', DeepL translation) + - "": [t: "felfelé szigony a rúdról szúrós bal nyílheggyel"] # 0xeb78 (en: 'up harpoon from bar with barb left arrowhead', DeepL translation) + - "": [t: "jobb nyíl a bal nyíl felett jobbra"] # 0xeb79 (en: 'right arrow over left arrow right', DeepL translation) + - "": [t: "jobb nyíl bal nyíl fölött bal nyíl balra"] # 0xeb7a (en: 'right arrow over left arrow left', DeepL translation) + - "": [t: "bal nyíl jobb nyíl felett jobb nyíl jobbra"] # 0xeb7b (en: 'left arrow over right arrow right', DeepL translation) + - "": [t: "bal nyíl a jobb nyíl felett balra"] # 0xeb7c (en: 'left arrow over right arrow left', DeepL translation) + - "": [t: "felfelé nyíl a rúd nyílhegyéről"] # 0xeb7d (en: 'up arrow from bar arrowhead', DeepL translation) + - "": [t: "felfelé mutató nyíl a sáv végéből"] # 0xeb7e (en: 'up arrow from bar tail', DeepL translation) + - "": [t: "lefelé mutató nyíl a sáv farkából"] # 0xeb7f (en: 'down arrow from bar tail', DeepL translation) + - "": [t: "lefelé mutató nyíl a bár nyílhegyéből"] # 0xeb80 (en: 'down arrow from bar arrowhead', DeepL translation) + - "": [t: "lefelé szigony a sávból szúrós jobb oldali nyílhegy"] # 0xeb81 (en: 'down harpoon from bar with barb right arrowhead', DeepL translation) + - "": [t: "felfelé szigony balra lefelé szigony alul"] # 0xeb82 (en: 'up harpoon to the left of down harpoon bottom', DeepL translation) + - "": [t: "felfelé szigony balra a lefelé szigony meghosszabbítás"] # 0xeb83 (en: 'up harpoon to the left of down harpoon extender', DeepL translation) + - "": [t: "lefelé mutató szigony balra a felfelé mutató szigony tetején"] # 0xeb84 (en: 'down harpoon to the left of up harpoon top', DeepL translation) + - "": [t: "felfelé szigony balra lefelé szigony tetején"] # 0xeb85 (en: 'up harpoon to the left of down harpoon top', DeepL translation) + - "": [t: "lefelé szigony a felfelé szigony meghosszabbítótól balra"] # 0xeb86 (en: 'down harpoon to the left of the up harpoon extender', DeepL translation) + - "": [t: "lefelé szigony a felfelé szigony aljától balra"] # 0xeb87 (en: 'down harpoon to the left of the up harpoon bottom', DeepL translation) + - "": [t: "felfelé nyíl balra lefelé nyíl alul"] # 0xeb88 (en: 'up arrow left of down arrow bottom', DeepL translation) + - "": [t: "lefelé mutató nyíl balra felfelé mutató nyíl felül"] # 0xeb89 (en: 'down arrow left of up arrow top', DeepL translation) + - "": [t: "felfelé nyíl balra lefelé nyíl felül"] # 0xeb8a (en: 'up arrow left of down arrow top', DeepL translation) + - "": [t: "lefelé mutató nyíl balra a felfelé mutató nyíl alul"] # 0xeb8b (en: 'down arrow left of up arrow bottom', DeepL translation) + - "": [t: "bal jobb nyíl meghosszabbító"] # 0xeb8c (en: 'left right arrows extender', DeepL translation) + - "": [t: "észak-keleti nyíl meghosszabbító"] # 0xeb8d (en: 'north east arrow extender', DeepL translation) + - "": [t: "északnyugati nyíl meghosszabbítása"] # 0xeb8e (en: 'north west arrow extender', DeepL translation) + - "": [t: "lefelé mutató merevítő balra"] # 0xec00 (en: 'down pointing brace left', DeepL translation) + - "": [t: "lefelé mutató merevítő középen"] # 0xec01 (en: 'down pointing brace mid', DeepL translation) + - "": [t: "lefelé mutató zárójel jobbra"] # 0xec02 (en: 'down pointing brace right', DeepL translation) + - "": [t: "vízszintes zárójel hosszabbító"] # 0xec03 (en: 'horizontal brace extender', DeepL translation) + - "": [t: "felfelé mutató bal oldali merevítő"] # 0xec04 (en: 'up pointing brace left', DeepL translation) + - "": [t: "felfelé mutató zárójel középen"] # 0xec05 (en: 'up pointing brace mid', DeepL translation) + - "": [t: "felfelé mutató merevítő jobbra"] # 0xec06 (en: 'up-pointing brace right', DeepL translation) + - "": [t: "bal függőleges sáv"] # 0xec07 (en: 'left vertical bar', DeepL translation) + - "": [t: "jobb oldali függőleges sáv"] # 0xec08 (en: 'right vertical bar', DeepL translation) + - "": [t: "bal dupla függőleges sáv"] # 0xec09 (en: 'left double vertical bar', DeepL translation) + - "": [t: "jobb oldali dupla függőleges sáv"] # 0xec0a (en: 'right double vertical bar', DeepL translation) + - "": [t: "vízszintes zárójel hosszabbító"] # 0xec0b (en: 'horizontal bracket extender', DeepL translation) + - "": [t: "szögletes zárójel alatt"] # 0xec0c (en: 'under square bracket', DeepL translation) + - "⎵": [t: "szögletes zárójel alatt"] # 0x23b5 (en: 'under square bracket', DeepL translation) + - "": [t: "szögletes zárójel felett"] # 0xec0d (en: 'over square bracket', DeepL translation) + - "⎴": [t: "szögletes zárójel felett"] # 0x23b4 (en: 'over square bracket', DeepL translation) + - "": [t: "balra zárójel alatt"] # 0xec0e (en: 'under bracket left', DeepL translation) + - "": [t: "zárójel alatt jobbra"] # 0xec0f (en: 'under bracket right', DeepL translation) + - "": [t: "zárójel felett balra"] # 0xec10 (en: 'over bracket left', DeepL translation) + - "": [t: "jobb oldali zárójel felett"] # 0xec11 (en: 'over bracket right', DeepL translation) + - "": [t: "bal zárójel 1"] # 0xec12 (en: 'left parens 1', DeepL translation) + - "": [t: "bal zárójel 2"] # 0xec13 (en: 'left parens 2', DeepL translation) + - "": [t: "bal oldali zárójel 3"] # 0xec14 (en: 'left parens 3', DeepL translation) + - "": [t: "bal zárójel 4"] # 0xec15 (en: 'left parens 4', DeepL translation) + - "": [t: "jobb oldali zárójel 1"] # 0xec16 (en: 'right parens 1', DeepL translation) + - "": [t: "jobb oldali zárójel 2"] # 0xec17 (en: 'right parens 2', DeepL translation) + - "": [t: "jobb oldali zárójel 3"] # 0xec18 (en: 'right parens 3', DeepL translation) + - "": [t: "jobb oldali zárójel 4"] # 0xec19 (en: 'right parens 4', DeepL translation) + - "": [t: "gyök 1"] # 0xec1a (en: 'radical 1', DeepL translation) + - "": [t: "2. radikális"] # 0xec1b (en: 'radical 2', DeepL translation) + - "": [t: "radikális 3"] # 0xec1c (en: 'radical 3', DeepL translation) + - "": [t: "4. gyök"] # 0xec1d (en: 'radical 4', DeepL translation) + - "": [t: "5. gyök"] # 0xec1e (en: 'radical 5', DeepL translation) + - "": [t: "radikális alul"] # 0xec1f (en: 'radical bottom', DeepL translation) + - "": [t: "radikális függőleges bővítmény"] # 0xec20 (en: 'radical vertical extender', DeepL translation) + - "": [t: "radikális felső"] # 0xec21 (en: 'radical top', DeepL translation) + - "": [t: "bal fehér zárójel tetején"] # 0xec22 (en: 'left white bracket top', DeepL translation) + - "": [t: "bal oldali fehér zárójel hosszabbító"] # 0xec23 (en: 'left white bracket extender', DeepL translation) + - "": [t: "bal fehér zárójel alul"] # 0xec24 (en: 'left white bracket bottom', DeepL translation) + - "": [t: "jobb oldali fehér zárójel felül"] # 0xec25 (en: 'right white bracket top', DeepL translation) + - "": [t: "jobb oldali fehér zárójel hosszabbító"] # 0xec26 (en: 'right white bracket extender', DeepL translation) + - "": [t: "jobb oldali fehér zárójel alja"] # 0xec27 (en: 'right white bracket bottom', DeepL translation) + - "": [t: "bal fehér csavart zárójel"] # 0xec30 (en: 'left white curly bracket', DeepL translation) + - "": [t: "jobb oldali fehér görbe zárójel"] # 0xec31 (en: 'right white curly bracket', DeepL translation) + - "": [t: "hosszú osztójel"] # 0xec32 (en: 'long division sign', DeepL translation) + - "": [t: "hosszú osztójel hosszabbító"] # 0xec33 (en: 'long division sign extender', DeepL translation) + - "": [t: "rövid osztás"] # 0xec34 (en: 'short division', DeepL translation) + - "": [t: "dupla délnyugat-északkelet em kötés"] # 0xec40 (en: 'double southwest to northeast em bond', DeepL translation) + - "": [t: "dupla északnyugat-délkelet em kötés"] # 0xec41 (en: 'double northwest to southeast em bond', DeepL translation) + - "": [t: "egyetlen vízszintes em kötés"] # 0xec42 (en: 'single horizontal em bond', DeepL translation) + - "": [t: "kettős vízszintes em kötés"] # 0xec43 (en: 'double horizontal em bond', DeepL translation) + - "": [t: "hármas vízszintes em kötés"] # 0xec44 (en: 'triple horizontal em bond', DeepL translation) + - "": [t: "egyetlen függőleges em kötés"] # 0xec45 (en: 'single vertical em bond', DeepL translation) + - "": [t: "dupla függőleges em kötés"] # 0xec46 (en: 'double vertical em bond', DeepL translation) + - "": [t: "hármas függőleges em kötés"] # 0xec47 (en: 'triple vertical em bond', DeepL translation) + - "": [t: "kevesebb, mint em kötés"] # 0xec48 (en: 'less than em bond', DeepL translation) + - "": [t: "nagyobb mint em kötés"] # 0xec49 (en: 'greater than em bond', DeepL translation) + - "": [t: "egyszerű vízszintes en kötés"] # 0xec4a (en: 'single horizontal en bond', DeepL translation) + - "": [t: "kettős vízszintes en kötés"] # 0xec4b (en: 'double horizontal en bond', DeepL translation) + - "": [t: "hármas vízszintes en kötés"] # 0xec4c (en: 'triple horizontal en bond', DeepL translation) + - "": [t: "bal felső téglalap"] # 0xec80 (en: 'top left rectangle', DeepL translation) + - "": [t: "bal alsó téglalap"] # 0xec81 (en: 'bottom left rectangle', DeepL translation) + - "": [t: "jobb felső téglalap"] # 0xec90 (en: 'top right rectangle', DeepL translation) + - "": [t: "jobb alsó téglalap"] # 0xec91 (en: 'bottom right rectangle', DeepL translation) + - "": [t: "szintetikus osztás sarok"] # 0xec92 (en: 'synthetic division corner', DeepL translation) + - "": [t: "szintetikus osztás vízszintes kiterjesztő"] # 0xec93 (en: 'synthetic division horizontal extender', DeepL translation) + - "": [t: "szintetikus osztás függőleges kiterjesztő"] # 0xec94 (en: 'synthetic division vertical extender', DeepL translation) + - "": [t: "bal mennyezeti padlóhosszabbító"] # 0xec95 (en: 'left ceiling floor extender', DeepL translation) + - "": [t: "jobb oldali mennyezeti padlóhosszabbító"] # 0xec96 (en: 'right ceiling floor extender', DeepL translation) + - "": [t: "zárójel feletti hosszabbító"] # 0xec97 (en: 'over bracket extender', DeepL translation) + - "": [t: "függőleges sávhosszabbító"] # 0xec98 (en: 'vertical bar extender', DeepL translation) + - "": [t: "bal dupla függőleges rúd hosszabbító"] # 0xec99 (en: 'left double vertical bar extender', DeepL translation) + - "": [t: "vízszintes sávhosszabbító"] # 0xec9a (en: 'horizontal bar extender', DeepL translation) + - "": [t: "zárójel alatti hosszabbító"] # 0xec9c (en: 'under bracket extender', DeepL translation) + - "": [t: "lefelé mutató zárójel jobbra"] # 0xec9d (en: 'down pointing paren right', DeepL translation) + - "": [t: "lefelé mutató zárójel hosszabbító"] # 0xec9e (en: 'down pointing paren extender', DeepL translation) + - "": [t: "lefelé mutató zárójel balra"] # 0xec9f (en: 'down pointing paren left', DeepL translation) + - "": [t: "felfelé mutató szalaghosszabbító"] # 0xeca0 (en: 'up pointing brace extender', DeepL translation) + - "": [t: "felfelé mutató zárójel balra"] # 0xeca1 (en: 'up pointing paren left', DeepL translation) + - "": [t: "felfelé mutató zárójel hosszabbító"] # 0xeca2 (en: 'up pointing paren extender', DeepL translation) + - "": [t: "felfelé mutató zárójel jobbra"] # 0xeca3 (en: 'up pointing paren right', DeepL translation) + - "": [t: "lefelé mutató merevítőtartó kiterjesztés"] # 0xeca4 (en: 'down pointing brace extender', DeepL translation) + - "": [t: "planck-állandó a két pi-sáv felett"] # 0xed00 (en: 'planck constant over two pi bar', DeepL translation) + - "": [t: "tükör g"] # 0xed01 (en: 'mirror g', DeepL translation) + - "": [t: "pont nélküli j"] # 0xed02 (en: 'dotless j', DeepL translation) + - "": [t: "digamma"] # 0xed03 (DeepL translation) + - "ϝ": [t: "digamma"] # 0x3dd (DeepL translation) + - "": [t: ""] # 0xed10 (en: 'd', DeepL translation) + - "ⅆ": [t: "ⅆ"] # 0x2146 (en: 'd', DeepL translation) + - "": [t: ""] # 0xed11 (en: 'e', DeepL translation) + - "ⅇ": [t: "ⅇ"] # 0x2147 (en: 'e', DeepL translation) + - "": [t: ""] # 0xed12 (en: 'i', DeepL translation) + - "ⅈ": [t: "ⅈ"] # 0x2148 (en: 'i', DeepL translation) + - "": [t: ""] # 0xed13 (en: 'j', DeepL translation) - "ⅅ": - - spell: "translate('.', 'ⅅ', 'DD')" # 0xed16, 0x2145 + - spell: "translate('.', 'ⅅ', 'DD')" # 0xed16, 0x2145 # The private use chars are from MathType - - "": [t: "anticlockwise contour integral loop"] # 0xee00 - - "": [t: "clockwise contour integral loop"] # 0xee01 - - "": [t: ""] # 0xee04 - - "": [t: ""] # 0xee05 - - "": [t: ""] # 0xee06 - - "": [t: ""] # 0xee07 - - "": [t: ""] # 0xee08 - - "": [t: ""] # 0xee09 - - "": [t: ""] # 0xee0a - - "": [t: ""] # 0xee0b - - "": [t: ""] # 0xee0c - - "": [t: "joint status embellishment"] # 0xee0d - - "": [t: "joint status embellishment left"] # 0xee0e - - "": [t: "joint status embellishment right"] # 0xee0f - - "": [t: "joint status embellishment extender"] # 0xee10 - - "": [t: "integral loop"] # 0xee11 - - "": [t: "integral loop double"] # 0xee12 - - "": [t: "integral loop triple"] # 0xee13 - - "": [t: "expanding integral loop double"] # 0xee15 - - "": [t: "expanding integral loop triple"] # 0xee16 - - "": [t: "asymptotically equal to accent"] # 0xee17 - - "": [t: "equal sign accent"] # 0xee18 - - "": [t: "quadruple prime"] # 0xee19 - - "": [t: "bar accent with open circle left"] # 0xee1a - - "": [t: "bar accent with closed circle left"] # 0xee1b - - "": [t: "bar accent with open circle right"] # 0xee1c - - "": [t: "bar accent with over dot"] # 0xee1d - - "": [t: "bar accent with under dot"] # 0xee1e - - "": [t: "bar accent with double over dot"] # 0xee1f - - "": [t: "bar accent with double under dot"] # 0xee20 - - "": [t: "bar accent with caret"] # 0xee21 - - "": [t: "thick under bar accent"] # 0xee22 - - "": [t: "bar accent with closed circle right"] # 0xee23 - - "": [t: "large dot above"] # 0xee24 - - "": [t: "alignment mark"] # 0xef00 - - "": [t: ""] # 0xef01 - - "​": [t: ""] # 0x200b - - "": [t: ""] # 0xef02 - - " ": [t: ""] # 0x2009 - - "": [t: ""] # 0xef03 - - " ": [t: ""] # 0x205f - - "": [t: ""] # 0xef04 - - "": [t: ""] # 0xef05 - - "": [t: ""] # 0xef06 - - "": [t: ""] # 0xef07 - - "": [t: ""] # 0xef08 - - "": [t: ""] # 0xef09 - - "": [t: ""] # 0xef0a - - " ": [t: ""] # 0x200a - - "": [t: ""] # 0xef22 - - "": [t: ""] # 0xef23 - - "": [t: ""] # 0xef24 - - "": [t: ""] # 0xef29 - - "": [t: "missing term"] # 0xef41 - - "": [t: "clockwise contour integral arrow on left"] # 0xef80 - - "": [t: "integral with square"] # 0xef81 - - "": [t: "integral with slash"] # 0xef82 - - "": [t: "reversed integral"] # 0xef83 - - "": [t: "double zero over double zero"] # 0xef90 - - "": [t: "zero with slash"] # 0xef91 + - "": [t: "óramutató járásával ellentétes kontúrú integrált hurok"] # 0xee00 (en: 'anticlockwise contour integral loop', DeepL translation) + - "": [t: "az óramutató járásával megegyező irányú körvonalú integrált hurok"] # 0xee01 (en: 'clockwise contour integral loop', DeepL translation) + - "": [t: ""] # 0xee04 + - "": [t: ""] # 0xee05 + - "": [t: ""] # 0xee06 + - "": [t: ""] # 0xee07 + - "": [t: ""] # 0xee08 + - "": [t: ""] # 0xee09 + - "": [t: ""] # 0xee0a + - "": [t: ""] # 0xee0b + - "": [t: ""] # 0xee0c + - "": [t: "közös állapotú díszítés"] # 0xee0d (en: 'joint status embellishment', DeepL translation) + - "": [t: "közös állapot díszítés balra"] # 0xee0e (en: 'joint status embellishment left', DeepL translation) + - "": [t: "közös állapot díszítés jobbra"] # 0xee0f (en: 'joint status embellishment right', DeepL translation) + - "": [t: "közös állapotot díszítő bővítmény"] # 0xee10 (en: 'joint status embellishment extender', DeepL translation) + - "": [t: "integrált hurok"] # 0xee11 (en: 'integral loop', DeepL translation) + - "": [t: "integrált hurok kettős"] # 0xee12 (en: 'integral loop double', DeepL translation) + - "": [t: "integrált hurok hármas"] # 0xee13 (en: 'integral loop triple', DeepL translation) + - "": [t: "bővülő integrál hurok kettős"] # 0xee15 (en: 'expanding integral loop double', DeepL translation) + - "": [t: "bővülő integrálhurok hármasa"] # 0xee16 (en: 'expanding integral loop triple', DeepL translation) + - "": [t: "aszimptotikusan egyenlő az ékezettel"] # 0xee17 (en: 'asymptotically equal to accent', DeepL translation) + - "": [t: "egyenlőségjel ékezet"] # 0xee18 (en: 'equal sign accent', DeepL translation) + - "": [t: "négyszeres prím"] # 0xee19 (en: 'quadruple prime', DeepL translation) + - "": [t: "sávos ékezet nyitott körrel balra"] # 0xee1a (en: 'bar accent with open circle left', DeepL translation) + - "": [t: "sávos ékezet zárt körrel balra"] # 0xee1b (en: 'bar accent with closed circle left', DeepL translation) + - "": [t: "sávos ékezet nyitott körrel jobbra"] # 0xee1c (en: 'bar accent with open circle right', DeepL translation) + - "": [t: "sávos ékezet pont fölött"] # 0xee1d (en: 'bar accent with over dot', DeepL translation) + - "": [t: "sávos ékezet alatta ponttal"] # 0xee1e (en: 'bar accent with under dot', DeepL translation) + - "": [t: "sávos ékezet dupla ponttal"] # 0xee1f (en: 'bar accent with double over dot', DeepL translation) + - "": [t: "sávos ékezet dupla ponttal alatta"] # 0xee20 (en: 'bar accent with double under dot', DeepL translation) + - "": [t: "sávos ékezet vésővel"] # 0xee21 (en: 'bar accent with caret', DeepL translation) + - "": [t: "sűrű alá sávos ékezet"] # 0xee22 (en: 'thick under bar accent', DeepL translation) + - "": [t: "sáv ékezet zárt körrel jobbra"] # 0xee23 (en: 'bar accent with closed circle right', DeepL translation) + - "": [t: "nagy pont felett"] # 0xee24 (en: 'large dot above', DeepL translation) + - "": [t: "igazítójel"] # 0xef00 (en: 'alignment mark', DeepL translation) + - "": [t: ""] # 0xef01 + - "​": [t: ""] # 0x200b + - "": [t: ""] # 0xef02 + - " ": [t: ""] # 0x2009 + - "": [t: ""] # 0xef03 + - " ": [t: ""] # 0x205f + - "": [t: ""] # 0xef04 + - "": [t: ""] # 0xef05 + - "": [t: ""] # 0xef06 + - "": [t: ""] # 0xef07 + - "": [t: ""] # 0xef08 + - "": [t: ""] # 0xef09 + - "": [t: ""] # 0xef0a + - " ": [t: ""] # 0x200a + - "": [t: ""] # 0xef22 + - "": [t: ""] # 0xef23 + - "": [t: ""] # 0xef24 + - "": [t: ""] # 0xef29 + - "": [t: "hiányzó kifejezés"] # 0xef41 (en: 'missing term', DeepL translation) + - "": [t: "az óramutató járásával megegyező irányú integrált nyíl balra"] # 0xef80 (en: 'clockwise contour integral arrow on left', DeepL translation) + - "": [t: "négyzettel egybeépített"] # 0xef81 (en: 'integral with square', DeepL translation) + - "": [t: "integrálható ferdén"] # 0xef82 (en: 'integral with slash', DeepL translation) + - "": [t: "fordított integrál"] # 0xef83 (en: 'reversed integral', DeepL translation) + - "": [t: "dupla nulla a dupla nulla felett"] # 0xef90 (en: 'double zero over double zero', DeepL translation) + - "": [t: "nulla ferdehajlással"] # 0xef91 (en: 'zero with slash', DeepL translation) # fraktur chars in math alphabetic block and also MathType private use area # Some of these are reserved because they were used in Plane 0 -- that shouldn't be an issue other than causing the other chars to not display - - "𝔄-𝔜": # 0x1d504 - 0x1d51d ('z' version is reserved) - - t: "fraktur" + - "𝔄-𝔜": # 0x1d504 - 0x1d51d ('z' version is reserved) + - t: "fraktur" # (DeepL translation) - spell: "translate('.', '𝔄𝔅𝔆𝔇𝔈𝔉𝔊𝔋𝔌𝔍𝔎𝔏𝔐𝔑𝔒𝔓𝔔𝔕𝔖𝔗𝔘𝔙𝔚𝔛𝔜', 'ABCDEFGHIJKLMNOPQRSTUVWXY')" - - "-": # 0xf000 - 0xf018 - - t: "fraktur" + - "-": # 0xf000 - 0xf018 + - t: "fraktur" # (DeepL translation) - spell: "translate('.', '', 'ABCDEFGHIJKLMNOPQRSTUVWXY')" - - "𝔞-𝔷": # 0x1d51e - 0x1d537 - - t: "fraktur" + - "𝔞-𝔷": # 0x1d51e - 0x1d537 + - t: "fraktur" # (DeepL translation) - spell: "translate('.', '𝔞𝔟𝔠𝔡𝔢𝔣𝔤𝔥𝔦𝔧𝔨𝔩𝔪𝔫𝔬𝔭𝔮𝔯𝔰𝔱𝔲𝔳𝔴𝔵𝔶𝔷', 'abcdefghijklmnopqrstuvwxyz')" - - "-": # 0xf01a - 0xf033 - - t: "fraktur" + - "-": # 0xf01a - 0xf033 + - t: "fraktur" # (DeepL translation) - spell: "translate('.', '', 'abcdefghijklmnopqrstuvwxyz')" - - "𝕬-𝖅": # 0x1D56C - 0x1D585 - - t: "fraktur" + - "𝕬-𝖅": # 0x1D56C - 0x1D585 + - t: "fraktur" # (DeepL translation) - test: if: "not($IgnoreBold)" - then: [t: "bold"] + then: [t: "félkövér"] # (en: 'bold', DeepL translation) - spell: "translate('.', '𝕬𝕭𝕮𝕯𝕰𝕱𝕲𝕳𝕴𝕵𝕶𝕷𝕸𝕹𝕺𝕻𝕼𝕽𝕾𝕿𝖀𝖁𝖂𝖃𝖄𝖅', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" - - "-": # 0xf040 - 0xf059 - - t: "fraktur" + - "-": # 0xf040 - 0xf059 + - t: "fraktur" # (DeepL translation) - test: if: "not($IgnoreBold)" - then: [t: "bold"] + then: [t: "félkövér"] # (en: 'bold', DeepL translation) - spell: "translate('.', '', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" - - "𝖆-𝖟": # 0x1d586 - 0x1d59f - - t: "fraktur" + - "𝖆-𝖟": # 0x1d586 - 0x1d59f + - t: "fraktur" # (DeepL translation) - test: if: "not($IgnoreBold)" - then: [t: "bold"] + then: [t: "félkövér"] # (en: 'bold', DeepL translation) - spell: "translate('.', '𝖆𝖇𝖈𝖉𝖊𝖋𝖌𝖍𝖎𝖏𝖐𝖑𝖒𝖓𝖔𝖕𝖖𝖗𝖘𝖙𝖚𝖛𝖜𝖝𝖞𝖟', 'abcdefghijklmnopqrstuvwxyz')" - - "-": # 0xf05a - 0xf073 - - t: "fraktur" + - "-": # 0xf05a - 0xf073 + - t: "fraktur" # (DeepL translation) - test: if: "not($IgnoreBold)" - then: [t: "bold"] + then: [t: "félkövér"] # (en: 'bold', DeepL translation) - spell: "translate('.', '', 'abcdefghijklmnopqrstuvwxyz')" # double struck (blackboard bold) chars in math alphabetic block and also MathType private use area # Some of these are reserved because they were used in Plane 0 -- that shouldn't be an issue other than causing the other chars to not display - - "𝔸-𝕐": # 0x1d504 - 0x1d51d ('z' version is reserved) - - t: "double struck" + - "𝔸-𝕐": # 0x1d504 - 0x1d51d ('z' version is reserved) + - t: "kettős ütés" # (en: 'double struck', DeepL translation) - spell: "translate('.', '𝔸𝔹𝔺𝔻𝔼𝔽𝔾𝔿𝕀𝕁𝕂𝕃𝕄𝕅𝕆𝕇𝕈𝕉𝕊𝕋𝕌𝕍𝕎𝕏𝕐', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" - - "-": # 0xf080 - 0xf098 - - t: "double struck" + - "-": # 0xf080 - 0xf098 + - t: "kettős ütés" # (en: 'double struck', DeepL translation) - spell: "translate('.', '', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" - - "𝕒-𝕫": # 0x1d552 - 0x1d56b - - t: "double struck" + - "𝕒-𝕫": # 0x1d552 - 0x1d56b + - t: "kettős ütés" # (en: 'double struck', DeepL translation) - spell: "translate('.', '𝕒𝕓𝕔𝕕𝕖𝕗𝕘𝕙𝕚𝕛𝕜𝕝𝕞𝕟𝕠𝕡𝕢𝕣𝕤𝕥𝕦𝕧𝕨𝕩𝕪𝕫', 'abcdefghijklmnopqrstuvwxyz')" - - "-": # 0xf09a - 0xf0b3 - - t: "double struck" + - "-": # 0xf09a - 0xf0b3 + - t: "kettős ütés" # (en: 'double struck', DeepL translation) - spell: "translate('.', '', 'abcdefghijklmnopqrstuvwxyz')" - - "𝟘-𝟡": # 0x1d7d8 - 0x1d7e1 - - t: "double struck" + - "𝟘-𝟡": # 0x1d7d8 - 0x1d7e1 + - t: "kettős ütés" # (en: 'double struck', DeepL translation) - spell: "translate('.', '𝟘𝟙𝟚𝟛𝟜𝟝𝟞𝟟𝟠𝟡', '0123456789')" - - "-": # 0xf0c0 - 0xf0c9 - - t: "double struck" + - "-": # 0xf0c0 - 0xf0c9 + - t: "kettős ütés" # (en: 'double struck', DeepL translation) - spell: "translate('.', '', '0123456789')" - - "": [t: "double struck nahblah"] # 0xf0ca - - "": [t: "double struck euler constant"] # 0xf0cb + - "": [t: "dupla leütött nahblah"] # 0xf0ca (en: 'double struck nahblah', DeepL translation) + - "": [t: "dupla leütött euler-állandó"] # 0xf0cb (en: 'double struck euler constant', DeepL translation) # script chars in math alphabetic block and also MathType private use area - - "𝒜-𝒵": # 0x1d49c - 0x1d4b5 - - t: "script" + - "𝒜-𝒵": # 0x1d49c - 0x1d4b5 + - t: "script" # (DeepL translation) - spell: "translate('.', '𝒜𝒝𝒞𝒟𝒠𝒡𝒢𝒣𝒤𝒥𝒦𝒧𝒨𝒩𝒪𝒫𝒬𝒭𝒮𝒯𝒰𝒱𝒲𝒳𝒴𝒵', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" - - "-": # 0xf100 - 0xf119 - - t: "script" + - "-": # 0xf100 - 0xf119 + - t: "script" # (DeepL translation) - spell: "translate('.', '', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" - - "𝒶-𝓏": # 0x1d4b6 - 0x1d4cf - - t: "script" + - "𝒶-𝓏": # 0x1d4b6 - 0x1d4cf + - t: "script" # (DeepL translation) - spell: "translate('.', '𝒶𝒷𝒸𝒹𝒺𝒻𝒼𝒽𝒾𝒿𝓀𝓁𝓂𝓃𝓄𝓅𝓆𝓇𝓈𝓉𝓊𝓋𝓌𝓍𝓎𝓏', 'abcdefghijklmnopqrstuvwxyz')" - - "-": # 0xf11a - 0xf133 - - t: "script" + - "-": # 0xf11a - 0xf133 + - t: "script" # (DeepL translation) - spell: "translate('.', '', 'abcdefghijklmnopqrstuvwxyz')" # bold script chars in math alphabetic block and also MathType private use area - - "𝓐-𝓩": # 0x1d4d0 - 0x1d4e9 - - t: "script" + - "𝓐-𝓩": # 0x1d4d0 - 0x1d4e9 + - t: "script" # (DeepL translation) - test: if: "not($IgnoreBold)" - then: [t: "bold"] + then: [t: "félkövér"] # (en: 'bold', DeepL translation) - spell: "translate('.', '𝓐𝓑𝓒𝓓𝓔𝓕𝓖𝓗𝓘𝓙𝓚𝓛𝓜𝓝𝓞𝓟𝓠𝓡𝓢𝓣𝓤𝓥𝓦𝓧𝓨𝓩', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" - - "-": # 0xf140 - 0xf159 - - t: "script" + - "-": # 0xf140 - 0xf159 + - t: "script" # (DeepL translation) - test: if: "not($IgnoreBold)" - then: [t: "bold"] + then: [t: "félkövér"] # (en: 'bold', DeepL translation) - spell: "translate('.', '', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" - - "𝓪-𝔃": # 0x1d4ea - 0x1d503 - - t: "script" + - "𝓪-𝔃": # 0x1d4ea - 0x1d503 + - t: "script" # (DeepL translation) - test: if: "not($IgnoreBold)" - then: [t: "bold"] + then: [t: "félkövér"] # (en: 'bold', DeepL translation) - spell: "translate('.', '𝓪𝓫𝓬𝓭𝓮𝓯𝓰𝓱𝓲𝓳𝓴𝓵𝓶𝓷𝓸𝓹𝓺𝓻𝓼𝓽𝓾𝓿𝔀𝔁𝔂𝔃', 'abcdefghijklmnopqrstuvwxyz')" - - "-": # 0xf15a - 0xf173 - - t: "script" + - "-": # 0xf15a - 0xf173 + - t: "script" # (DeepL translation) - test: if: "not($IgnoreBold)" - then: [t: "bold"] + then: [t: "félkövér"] # (en: 'bold', DeepL translation) - spell: "translate('.', '', 'abcdefghijklmnopqrstuvwxyz')" - - "-": # 0xf180 - 0xf199 + - "-": # 0xf180 - 0xf199 - spell: "translate('.', '', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" - - "": # 0xf19a + - "": # 0xf19a - test: if: "$CapitalLetters_Beep" then: @@ -3248,12 +3248,12 @@ if: "$SpeechOverrides_CapitalLetters = ''" then_test: if: "$Impairment = 'Blindness'" - then: [t: "cap"] + then: [t: "nagybetű"] # (en: 'cap', DeepL translation) else: [x: "$SpeechOverrides_CapitalLetters"] - pitch: value: "$CapitalLetters_Pitch" - replace: [t: "ligature ae"] - - "": # 0xf19b + replace: [t: "ligatúra ae"] # (en: 'ligature ae', DeepL translation) + - "": # 0xf19b - test: if: "$CapitalLetters_Beep" then: @@ -3266,12 +3266,12 @@ if: "$SpeechOverrides_CapitalLetters = ''" then_test: if: "$Impairment = 'Blindness'" - then: [t: "cap"] + then: [t: "nagybetű"] # (en: 'cap', DeepL translation) else: [x: "$SpeechOverrides_CapitalLetters"] - pitch: value: "$CapitalLetters_Pitch" - replace: [t: "sharp s"] - - "": # 0xf19c + replace: [t: "éles s"] # (en: 'sharp s', DeepL translation) + - "": # 0xf19c - test: if: "$CapitalLetters_Beep" then: @@ -3284,519 +3284,519 @@ if: "$SpeechOverrides_CapitalLetters = ''" then_test: if: "$Impairment = 'Blindness'" - then: [t: "cap"] + then: [t: "nagybetű"] # (en: 'cap', DeepL translation) else: [x: "$SpeechOverrides_CapitalLetters"] - pitch: value: "$CapitalLetters_Pitch" - replace: [t: "o with stroke"] + replace: [t: "o vonallal"] # (en: 'o with stroke', DeepL translation) # MathType only has a few of the cap Greek letters in PUA - - "": # 0xf201 - 0xf209 - - t: "double struck" + - "": # 0xf201 - 0xf209 + - t: "kettős ütés" # (en: 'double struck', DeepL translation) - spell: "translate('.', '', 'ΔΨΛΠΣΘΓΩΥ')" - - "-": # 0xf220 - 0xf236 - - t: "double struck" + - "-": # 0xf220 - 0xf236 + - t: "kettős ütés" # (en: 'double struck', DeepL translation) - spell: "translate('.', '', 'ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡ΢ΣΤΥΦΧΨΩ')" - - "": [t: "double struck final sigma"] # 0xf237 - - "": [t: "double struck rho"] # 0xf250 - - "": [t: "double struck phi"] # 0xf251 - - "𝐀-𝐙": # 0x1d400 - 0x1d419 + - "": [t: "dupla áthúzott végső szigma"] # 0xf237 (en: 'double struck final sigma', DeepL translation) + - "": [t: "dupla áthúzott rho"] # 0xf250 (en: 'double struck rho', DeepL translation) + - "": [t: "dupla ütött phi"] # 0xf251 (en: 'double struck phi', DeepL translation) + - "𝐀-𝐙": # 0x1d400 - 0x1d419 - test: if: "not($IgnoreBold)" - then: [t: "bold"] + then: [t: "félkövér"] # (en: 'bold', DeepL translation) - spell: "translate('.', '𝐀𝐁𝐂𝐃𝐄𝐅𝐆𝐇𝐈𝐉𝐊𝐋𝐌𝐍𝐎𝐏𝐐𝐑𝐒𝐓𝐔𝐕𝐖𝐗𝐘𝐙', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" - - "-": # 0xf260 - 0xf279 + - "-": # 0xf260 - 0xf279 - test: if: "not($IgnoreBold)" - then: [t: "bold"] + then: [t: "félkövér"] # (en: 'bold', DeepL translation) - spell: "translate('.', '', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" - - "𝐚-𝐳": # 0x1d41a - 0x1d433 + - "𝐚-𝐳": # 0x1d41a - 0x1d433 - test: if: "not($IgnoreBold)" - then: [t: "bold"] + then: [t: "félkövér"] # (en: 'bold', DeepL translation) - spell: "translate('.', '𝐚𝐛𝐜𝐝𝐞𝐟𝐠𝐡𝐢𝐣𝐤𝐥𝐦𝐧𝐨𝐩𝐪𝐫𝐬𝐭𝐮𝐯𝐰𝐱𝐲𝐳', 'abcdefghijklmnopqrstuvwxyz')" - - "-": # 0xf27a - 0xf293 + - "-": # 0xf27a - 0xf293 - test: if: "not($IgnoreBold)" - then: [t: "bold"] + then: [t: "félkövér"] # (en: 'bold', DeepL translation) - spell: "translate('.', '', 'abcdefghijklmnopqrstuvwxyz')" - - "𝐴-𝑍": # 0x1d434 - 0x1d44d + - "𝐴-𝑍": # 0x1d434 - 0x1d44d - spell: "translate('.', '𝐴𝐵𝐶𝐷𝐸𝐹𝐺𝐻𝐼𝐽𝐾𝐿𝑀𝑁𝑂𝑃𝑄𝑅𝑆𝑇𝑈𝑉𝑊𝑋𝑌𝑍', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" - - "-": # 0xf294 - 0xf2ad + - "-": # 0xf294 - 0xf2ad - spell: "translate('.', '', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" - - "𝑎-𝑧": # 0x1d44e - 0x1d467 + - "𝑎-𝑧": # 0x1d44e - 0x1d467 - spell: "translate('.', '𝑎𝑏𝑐𝑑𝑒𝑓𝑔𝑕𝑖𝑗𝑘𝑙𝑚𝑛𝑜𝑝𝑞𝑟𝑠𝑡𝑢𝑣𝑤𝑥𝑦𝑧', 'abcdefghijklmnopqrstuvwxyz')" - - "-": # 0xf2ae - 0xf2c7 + - "-": # 0xf2ae - 0xf2c7 - spell: "translate('.', '', 'abcdefghijklmnopqrstuvwxyz')" - - "𝑨-𝒁": # 0x1d468 - 0x1d481 + - "𝑨-𝒁": # 0x1d468 - 0x1d481 # - t: "bold italic" - test: if: "not($IgnoreBold)" - then: [t: "bold"] + then: [t: "félkövér"] # (en: 'bold', DeepL translation) - spell: "translate('.', '𝑨𝑩𝑪𝑫𝑬𝑭𝑮𝑯𝑰𝑱𝑲𝑳𝑴𝑵𝑶𝑷𝑸𝑹𝑺𝑻𝑼𝑽𝑾𝑿𝒀𝒁', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" - - "-": # 0xf2c8 - 0xf2e1 + - "-": # 0xf2c8 - 0xf2e1 # - t: "bold italic" - test: if: "not($IgnoreBold)" - then: [t: "bold"] + then: [t: "félkövér"] # (en: 'bold', DeepL translation) - spell: "translate('.', '', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" - - "𝒂-𝒛": # 0x1d482 - 0x1d49b + - "𝒂-𝒛": # 0x1d482 - 0x1d49b # - t: "bold italic" - test: if: "not($IgnoreBold)" - then: [t: "bold"] + then: [t: "félkövér"] # (en: 'bold', DeepL translation) - spell: "translate('.', '𝒂𝒃𝒄𝒅𝒆𝒇𝒈𝒉𝒊𝒋𝒌𝒍𝒎𝒏𝒐𝒑𝒒𝒓𝒔𝒕𝒖𝒗𝒘𝒙𝒚𝒛', 'abcdefghijklmnopqrstuvwxyz')" - - "-": # 0xf2e2 - 0xf2fb + - "-": # 0xf2e2 - 0xf2fb # - t: "bold italic" - test: if: "not($IgnoreBold)" - then: [t: "bold"] + then: [t: "félkövér"] # (en: 'bold', DeepL translation) - spell: "translate('.', '', 'abcdefghijklmnopqrstuvwxyz')" - - "𝖠-𝖹": # 0x1d5a0 - 0x1d5b9 + - "𝖠-𝖹": # 0x1d5a0 - 0x1d5b9 - spell: "translate('.', '𝖠𝖡𝖢𝖣𝖤𝖥𝖦𝖧𝖨𝖩𝖪𝖫𝖬𝖭𝖮𝖯𝖰𝖱𝖲𝖳𝖴𝖵𝖶𝖷𝖸𝖹', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" - - "-": # 0xf300 - 0xf319 + - "-": # 0xf300 - 0xf319 - spell: "translate('.', '', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" - - "𝖺-𝗓": # 0x1d5ba - 0x1d5d3 + - "𝖺-𝗓": # 0x1d5ba - 0x1d5d3 - spell: "translate('.', '𝖺𝖻𝖼𝖽𝖾𝖿𝗀𝗁𝗂𝗃𝗄𝗅𝗆𝗇𝗈𝗉𝗊𝗋𝗌𝗍𝗎𝗏𝗐𝗑𝗒𝗓', 'abcdefghijklmnopqrstuvwxyz')" - - "-": # 0xf31a - 0xf333 + - "-": # 0xf31a - 0xf333 - spell: "translate('.', '', 'abcdefghijklmnopqrstuvwxyz')" - - "𝗔-𝗭": # 0x1d5d4 - 0x1d5ed + - "𝗔-𝗭": # 0x1d5d4 - 0x1d5ed - test: if: "not($IgnoreBold)" - then: [t: "bold"] + then: [t: "félkövér"] # (en: 'bold', DeepL translation) - spell: "translate('.', '𝗔𝗕𝗖𝗗𝗘𝗙𝗚𝗛𝗜𝗝𝗞𝗟𝗠𝗡𝗢𝗣𝗤𝗥𝗦𝗧𝗨𝗩𝗪𝗫𝗬𝗭', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" - - "-": # 0xf334 - 0xf34d + - "-": # 0xf334 - 0xf34d - test: if: "not($IgnoreBold)" - then: [t: "bold"] + then: [t: "félkövér"] # (en: 'bold', DeepL translation) - spell: "translate('.', '', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" - - "𝗮-𝘇": # 0x1d5ee - 0x1d607 + - "𝗮-𝘇": # 0x1d5ee - 0x1d607 - test: if: "not($IgnoreBold)" - then: [t: "bold"] + then: [t: "félkövér"] # (en: 'bold', DeepL translation) - spell: "translate('.', '𝗮𝗯𝗰𝗱𝗲𝗳𝗴𝗵𝗶𝗷𝗸𝗹𝗺𝗻𝗼𝗽𝗾𝗿𝘀𝘁𝘂𝘃𝘄𝘅𝘆𝘇', 'abcdefghijklmnopqrstuvwxyz')" - - "-": # 0xf34e - 0xf367 + - "-": # 0xf34e - 0xf367 - test: if: "not($IgnoreBold)" - then: [t: "bold"] + then: [t: "félkövér"] # (en: 'bold', DeepL translation) - spell: "translate('.', '', 'abcdefghijklmnopqrstuvwxyz')" - - "𝘈-𝘡": # 0x1d608 - 0x1d621 + - "𝘈-𝘡": # 0x1d608 - 0x1d621 # - t: "italic" - spell: "translate('.', '𝘈𝘉𝘊𝘋𝘌𝘍𝘎𝘏𝘐𝘑𝘒𝘓𝘔𝘕𝘖𝘗𝘘𝘙𝘚𝘛𝘜𝘝𝘞𝘟𝘠𝘡', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" - - "-": # 0xf368 - 0xf381 + - "-": # 0xf368 - 0xf381 # - t: "italic" - spell: "translate('.', '', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" - - "𝘢-𝘻": # 0x1d622 - 0x1d63b + - "𝘢-𝘻": # 0x1d622 - 0x1d63b # - t: "italic" - spell: "translate('.', '𝘢𝘣𝘤𝘥𝘦𝘧𝘨𝘩𝘪𝘫𝘬𝘭𝘮𝘯𝘰𝘱𝘲𝘳𝘴𝘵𝘶𝘷𝘸𝘹𝘺𝘻', 'abcdefghijklmnopqrstuvwxyz')" - - "-": # 0xf382 - 0xf39b + - "-": # 0xf382 - 0xf39b # - t: "italic" - spell: "translate('.', '', 'abcdefghijklmnopqrstuvwxyz')" - - "𝘼-𝙕": # 0x1d63c - 0x1d655 + - "𝘼-𝙕": # 0x1d63c - 0x1d655 # - t: "bold italic" - test: if: "not($IgnoreBold)" - then: [t: "bold"] + then: [t: "félkövér"] # (en: 'bold', DeepL translation) - spell: "translate('.', '𝘼𝘽𝘾𝘿𝙀𝙁𝙂𝙃𝙄𝙅𝙆𝙇𝙈𝙉𝙊𝙋𝙌𝙍𝙎𝙏𝙐𝙑𝙒𝙓𝙔𝙕', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" - - "-": # 0xf39c - 0xf3b5 + - "-": # 0xf39c - 0xf3b5 # - t: "bold italic" - test: if: "not($IgnoreBold)" - then: [t: "bold"] + then: [t: "félkövér"] # (en: 'bold', DeepL translation) - spell: "translate('.', '', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" - - "𝙖-𝙯": # 0x1d656 - 0x1d66f + - "𝙖-𝙯": # 0x1d656 - 0x1d66f # - t: "bold italic" - test: if: "not($IgnoreBold)" - then: [t: "bold"] + then: [t: "félkövér"] # (en: 'bold', DeepL translation) - spell: "translate('.', '𝙖𝙗𝙘𝙙𝙚𝙛𝙜𝙝𝙞𝙟𝙠𝙡𝙢𝙣𝙤𝙥𝙦𝙧𝙨𝙩𝙪𝙫𝙬𝙭𝙮𝙯', 'abcdefghijklmnopqrstuvwxyz')" - - "-": # 0xf3b6 - 0xf3cf + - "-": # 0xf3b6 - 0xf3cf # - t: "bold italic" - test: if: "not($IgnoreBold)" - then: [t: "bold"] + then: [t: "félkövér"] # (en: 'bold', DeepL translation) - spell: "translate('.', '', 'abcdefghijklmnopqrstuvwxyz')" - - "𝙰-𝚉": # 0x1d670 - 0x1d689 + - "𝙰-𝚉": # 0x1d670 - 0x1d689 - spell: "translate('.', '𝙰𝙱𝙲𝙳𝙴𝙵𝙶𝙷𝙸𝙹𝙺𝙻𝙼𝙽𝙾𝙿𝚀𝚁𝚂𝚃𝚄𝚅𝚆𝚇𝚈𝚉', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" - - "-": # 0xf3d0 - 0xf3e9 + - "-": # 0xf3d0 - 0xf3e9 - spell: "translate('.', '', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" - - "𝚊-𝚣": # 0x1d68a - 0x1d6a3 + - "𝚊-𝚣": # 0x1d68a - 0x1d6a3 - spell: "translate('.', '𝚊𝚋𝚌𝚍𝚎𝚏𝚐𝚑𝚒𝚓𝚔𝚕𝚖𝚗𝚘𝚙𝚚𝚛𝚜𝚝𝚞𝚟𝚠𝚡𝚢𝚣', 'abcdefghijklmnopqrstuvwxyz')" - - "-": # 0xf3ea - 0xf403 + - "-": # 0xf3ea - 0xf403 - spell: "translate('.', '', 'abcdefghijklmnopqrstuvwxyz')" - - "": [t: "dotless i"] # 0xf404 - - "𝚤": [t: "dotless i"] # 0x1d6a4 - - "𝚥": [t: "dotless j"] # 0x1d6a5 + - "": [t: "pont nélküli i"] # 0xf404 (en: 'dotless i', DeepL translation) + - "𝚤": [t: "pont nélküli i"] # 0x1d6a4 (en: 'dotless i', DeepL translation) + - "𝚥": [t: "pont nélküli j"] # 0x1d6a5 (en: 'dotless j', DeepL translation) - - "𝚨-𝛀": # 0x1d6a8 - 0x1d6c0 + - "𝚨-𝛀": # 0x1d6a8 - 0x1d6c0 - test: if: "not($IgnoreBold)" - then: [t: "bold"] + then: [t: "félkövér"] # (en: 'bold', DeepL translation) - spell: "translate('.', '𝚨𝚩𝚪𝚫𝚬𝚭𝚮𝚯𝚰𝚱𝚲𝚳𝚴𝚵𝚶𝚷𝚸𝚹𝚺𝚻𝚼𝚽𝚾𝚿𝛀', 'ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡ΢ΣΤΥΦΧΨΩ')" - - "-": # 0xf408 - 0xf420 + - "-": # 0xf408 - 0xf420 - test: if: "not($IgnoreBold)" - then: [t: "bold"] + then: [t: "félkövér"] # (en: 'bold', DeepL translation) - spell: "translate('.', '', 'ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡ΢ΣΤΥΦΧΨΩ')" - - "𝛂-𝛚": # 0x1d6c2 - 0x1d6da + - "𝛂-𝛚": # 0x1d6c2 - 0x1d6da - test: if: "not($IgnoreBold)" - then: [t: "bold"] + then: [t: "félkövér"] # (en: 'bold', DeepL translation) - spell: "translate('.', '𝛂𝛃𝛄𝛅𝛆𝛇𝛈𝛉𝛊𝛋𝛌𝛍𝛎𝛏𝛐𝛑𝛒𝛓𝛔𝛕𝛖𝛗𝛘𝛙𝛚', 'αβγδεζηθικλμνξοπρςστυφχψω')" - - "-": # 0xf422 - 0xf43a + - "-": # 0xf422 - 0xf43a - test: if: "not($IgnoreBold)" - then: [t: "bold"] + then: [t: "félkövér"] # (en: 'bold', DeepL translation) - spell: "translate('.', '', 'αβγδεζηθικλμνξοπρςστυφχψω')" - - "": [t: "bold nahblah"] # 0xf421 - - "𝛁": [t: "bold nahblah"] # 0x1d6c1 + - "": [t: "merész nahblah"] # 0xf421 (en: 'bold nahblah', DeepL translation) + - "𝛁": [t: "merész nahblah"] # 0x1d6c1 (en: 'bold nahblah', DeepL translation) - - "𝛛𝛜𝛝𝛞𝛟𝛠𝛡": # 0x1D6DB - 0x1D6E1 + - "𝛛𝛜𝛝𝛞𝛟𝛠𝛡": # 0x1D6DB - 0x1D6E1 - test: if: "not($IgnoreBold)" - then: [t: "bold"] + then: [t: "félkövér"] # (en: 'bold', DeepL translation) - spell: "translate('.', '𝛛𝛜𝛝𝛞𝛟𝛠𝛡', '∂εθκφρπ')" - - "": # 0xF43C - 0xF441 + - "": # 0xF43C - 0xF441 - test: if: "not($IgnoreBold)" - then: [t: "bold"] + then: [t: "félkövér"] # (en: 'bold', DeepL translation) - spell: "translate('.', '', '∂εθκφρπ')" - - "𝛢-𝛺": # 0x1d6e2 - 0x1d6fa + - "𝛢-𝛺": # 0x1d6e2 - 0x1d6fa # - t: "italic" - spell: "translate('.', '𝛢𝛣𝛤𝛥𝛦𝛧𝛨𝛩𝛪𝛫𝛬𝛭𝛮𝛯𝛰𝛱𝛲𝛳𝛴𝛵𝛶𝛷𝛸𝛹𝛺', 'ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡ΢ΣΤΥΦΧΨΩ')" - - "-": # 0xf442 - 0xf45a + - "-": # 0xf442 - 0xf45a # - t: "italic" - spell: "translate('.', '', 'ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡ΢ΣΤΥΦΧΨΩ')" - - "𝛼-𝜔": # 0x1d6fc - 0x1d714 + - "𝛼-𝜔": # 0x1d6fc - 0x1d714 # - t: "italic" - spell: "translate('.', '𝛼𝛽𝛾𝛿𝜀𝜁𝜂𝜃𝜄𝜅𝜆𝜇𝜈𝜉𝜊𝜋𝜌𝜍𝜎𝜏𝜐𝜑𝜒𝜓𝜔', 'αβγδεζηθικλμνξοπρςστυφχψω')" - - "-": # 0xf45c - 0xf474 + - "-": # 0xf45c - 0xf474 # - t: "italic" - spell: "translate('.', '', 'αβγδεζηθικλμνξοπρςστυφχψω')" - - "": [t: "italic nahblah"] # 0xf45b - - "𝛻": [t: "italic nahblah"] # 0x1d6fb + - "": [t: "dőlt betűs nahblah"] # 0xf45b (en: 'italic nahblah', DeepL translation) + - "𝛻": [t: "dőlt betűs nahblah"] # 0x1d6fb (en: 'italic nahblah', DeepL translation) - - "𝜕𝜖𝜗𝜘𝜙𝜚𝜛": # 0x1d715 - 0x1d71b + - "𝜕𝜖𝜗𝜘𝜙𝜚𝜛": # 0x1d715 - 0x1d71b # - t: "italic" - spell: "translate('.', '𝜕𝜖𝜗𝜘𝜙𝜚𝜛', '∂εθκφρπ')" - - "": # 0xf475 - 0xf47b + - "": # 0xf475 - 0xf47b # - t: "italic" - spell: "translate('.', '', '∂εθκφρπ')" - - "𝜜-𝜴": # 0x1d71c - 0x1d734 + - "𝜜-𝜴": # 0x1d71c - 0x1d734 # - t: "bold italic" - test: if: "not($IgnoreBold)" - then: [t: "bold"] + then: [t: "félkövér"] # (en: 'bold', DeepL translation) - spell: "translate('.', '𝜜𝜝𝜞𝜟𝜠𝜡𝜢𝜣𝜤𝜥𝜦𝜧𝜨𝜩𝜪𝜫𝜬𝜭𝜮𝜯𝜰𝜱𝜲𝜳𝜴', 'ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡ΢ΣΤΥΦΧΨΩ')" - - "-": # 0xf47c - 0xf494 + - "-": # 0xf47c - 0xf494 # - t: "bold italic" - test: if: "not($IgnoreBold)" - then: [t: "bold"] + then: [t: "félkövér"] # (en: 'bold', DeepL translation) - spell: "translate('.', '', 'ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡ΢ΣΤΥΦΧΨΩ')" - - "𝜶-𝝎": # 0x1d736 - 0x1d74e + - "𝜶-𝝎": # 0x1d736 - 0x1d74e # - t: "bold italic" - test: if: "not($IgnoreBold)" - then: [t: "bold"] + then: [t: "félkövér"] # (en: 'bold', DeepL translation) - spell: "translate('.', '𝜶𝜷𝜸𝜹𝜺𝜻𝜼𝜽𝜾𝜿𝝀𝝁𝝂𝝃𝝄𝝅𝝆𝝇𝝈𝝉𝝊𝝋𝝌𝝍𝝎', 'αβγδεζηθικλμνξοπρςστυφχψω')" - - "-": # 0xf496 - 0xf4ae + - "-": # 0xf496 - 0xf4ae # - t: "bold italic" - test: if: "not($IgnoreBold)" - then: [t: "bold"] + then: [t: "félkövér"] # (en: 'bold', DeepL translation) - spell: "translate('.', '', 'αβγδεζηθικλμνξοπρςστυφχψω')" - - "𝝏𝝐𝝑𝝒𝝓𝝔𝝕": # 0x1d74f - 0x1d755 + - "𝝏𝝐𝝑𝝒𝝓𝝔𝝕": # 0x1d74f - 0x1d755 # - t: "bold italic" - test: if: "not($IgnoreBold)" - then: [t: "bold"] + then: [t: "félkövér"] # (en: 'bold', DeepL translation) - spell: "translate('.', '𝝏𝝐𝝑𝝒𝝓𝝔𝝕', '∂εθκφρπ')" - - "": # 0xf422 - 0xf43a + - "": # 0xf422 - 0xf43a # - t: "bold italic" - test: if: "not($IgnoreBold)" - then: [t: "bold"] + then: [t: "félkövér"] # (en: 'bold', DeepL translation) - spell: "translate('.', '', '∂εθκφρπ')" - - "𝜵": [t: "bold italic nahblah"] # 0x1d735 - - "": [t: "bold italic nahblah"] # 0xf495 + - "𝜵": [t: "vastag dőlt betűs nahblah"] # 0x1d735 (en: 'bold italic nahblah', DeepL translation) + - "": [t: "vastag dőlt betűs nahblah"] # 0xf495 (en: 'bold italic nahblah', DeepL translation) - - "𝝖-𝝮": # 0x1d756 - 0x1d76e + - "𝝖-𝝮": # 0x1d756 - 0x1d76e - test: if: "not($IgnoreBold)" - then: [t: "bold"] + then: [t: "félkövér"] # (en: 'bold', DeepL translation) - spell: "translate('.', '𝝖𝝗𝝘𝝙𝝚𝝛𝝜𝝝𝝞𝝟𝝠𝝡𝝢𝝣𝝤𝝥𝝦𝝧𝝨𝝩𝝪𝝫𝝬𝝭𝝮', 'ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡ΢ΣΤΥΦΧΨΩ')" - - "-": # 0xf4b6 - 0xf4ce + - "-": # 0xf4b6 - 0xf4ce - test: if: "not($IgnoreBold)" - then: [t: "bold"] + then: [t: "félkövér"] # (en: 'bold', DeepL translation) - spell: "translate('.', '', 'ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡ΢ΣΤΥΦΧΨΩ')" - - "𝝰-𝞈": # 0x1d770 - 0x1d788 + - "𝝰-𝞈": # 0x1d770 - 0x1d788 - test: if: "not($IgnoreBold)" - then: [t: "bold"] + then: [t: "félkövér"] # (en: 'bold', DeepL translation) - spell: "translate('.', '𝝰𝝱𝝲𝝳𝝴𝝵𝝶𝝷𝝸𝝹𝝺𝝻𝝼𝝽𝝾𝝿𝞀𝞁𝞂𝞃𝞄𝞅𝞆𝞇𝞈', 'αβγδεζηθικλμνξοπρςστυφχψω')" - - "-": # 0xf4d0 - 0xf4e8 + - "-": # 0xf4d0 - 0xf4e8 - test: if: "not($IgnoreBold)" - then: [t: "bold"] + then: [t: "félkövér"] # (en: 'bold', DeepL translation) - spell: "translate('.', '', 'αβγδεζηθικλμνξοπρςστυφχψω')" - - "𝞉𝞊𝞋𝞌𝞍𝞎𝞏": # 0x1d789 - 0x1d78f + - "𝞉𝞊𝞋𝞌𝞍𝞎𝞏": # 0x1d789 - 0x1d78f - test: if: "not($IgnoreBold)" - then: [t: "bold"] + then: [t: "félkövér"] # (en: 'bold', DeepL translation) - spell: "translate('.', '𝞉𝞊𝞋𝞌𝞍𝞎𝞏', '∂εθκφρπ')" - - "": # 0xf4e9 - 0xf4ef + - "": # 0xf4e9 - 0xf4ef - test: if: "not($IgnoreBold)" - then: [t: "bold"] + then: [t: "félkövér"] # (en: 'bold', DeepL translation) - spell: "translate('.', '', '∂εθκφρπ')" - - "": [t: "bold nahblah"] # 0xf4cf - - "𝝯": [t: "bold nahblah"] # 0x1d76f + - "": [t: "merész nahblah"] # 0xf4cf (en: 'bold nahblah', DeepL translation) + - "𝝯": [t: "merész nahblah"] # 0x1d76f (en: 'bold nahblah', DeepL translation) - - "𝞐-𝞨": # 0x1d790 - 0x1d7a8 + - "𝞐-𝞨": # 0x1d790 - 0x1d7a8 # - t: "bold italic" - test: if: "not($IgnoreBold)" - then: [t: "bold"] + then: [t: "félkövér"] # (en: 'bold', DeepL translation) - spell: "translate('.', '𝞐𝞑𝞒𝞓𝞔𝞕𝞖𝞗𝞘𝞙𝞚𝞛𝞜𝞝𝞞𝞟𝞠𝞡𝞢𝞣𝞤𝞥𝞦𝞧𝞨', 'ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡ΢ΣΤΥΦΧΨΩ')" - - "-": # 0xf4f0 - 0xf508 + - "-": # 0xf4f0 - 0xf508 # - t: "bold italic" - test: if: "not($IgnoreBold)" - then: [t: "bold"] + then: [t: "félkövér"] # (en: 'bold', DeepL translation) - spell: "translate('.', '', 'ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡ΢ΣΤΥΦΧΨΩ')" - - "𝞪-𝟂": # 0x1d7aa - 0x1d7c2 + - "𝞪-𝟂": # 0x1d7aa - 0x1d7c2 # - t: "bold italic" - test: if: "not($IgnoreBold)" - then: [t: "bold"] + then: [t: "félkövér"] # (en: 'bold', DeepL translation) - spell: "translate('.', '𝞪𝞫𝞬𝞭𝞮𝞯𝞰𝞱𝞲𝞳𝞴𝞵𝞶𝞷𝞸𝞹𝞺𝞻𝞼𝞽𝞾𝞿𝟀𝟁𝟂', 'αβγδεζηθικλμνξοπρςστυφχψω')" - - "-": # 0xf50a - 0xf522 + - "-": # 0xf50a - 0xf522 # - t: "bold italic" - test: if: "not($IgnoreBold)" - then: [t: "bold"] + then: [t: "félkövér"] # (en: 'bold', DeepL translation) - spell: "translate('.', '', 'αβγδεζηθικλμνξοπρςστυφχψω')" - - "𝟃𝟄𝟅𝟆𝟇𝟈𝟉": # 0x1d7c3 - 0x1d7c9 + - "𝟃𝟄𝟅𝟆𝟇𝟈𝟉": # 0x1d7c3 - 0x1d7c9 # - t: "bold italic" - test: if: "not($IgnoreBold)" - then: [t: "bold"] + then: [t: "félkövér"] # (en: 'bold', DeepL translation) - spell: "translate('.', '𝟃𝟄𝟅𝟆𝟇𝟈𝟉', '∂εθκφρπ')" - - "": # 0xf523 - 0xf529 + - "": # 0xf523 - 0xf529 # - t: "bold italic" - test: if: "not($IgnoreBold)" - then: [t: "bold"] + then: [t: "félkövér"] # (en: 'bold', DeepL translation) - spell: "translate('.', '', '∂εθκφρπ')" - - "": [t: "bold nahblah"] # 0xf509 - - "𝞩": [t: "bold nahblah"] # 0x1d7a9 + - "": [t: "merész nahblah"] # 0xf509 (en: 'bold nahblah', DeepL translation) + - "𝞩": [t: "merész nahblah"] # 0x1d7a9 (en: 'bold nahblah', DeepL translation) - - "-": # 0xf52e - 0xf537 (old MathType) + - "-": # 0xf52e - 0xf537 (old MathType) - test: if: "not($IgnoreBold)" - then: [t: "bold"] + then: [t: "félkövér"] # (en: 'bold', DeepL translation) - spell: "translate('.', '', '0123456789')" - - "𝟎-𝟗": # 0x1d7ce - 0x1d7d7 + - "𝟎-𝟗": # 0x1d7ce - 0x1d7d7 - test: if: "not($IgnoreBold)" - then: [t: "bold"] + then: [t: "félkövér"] # (en: 'bold', DeepL translation) - spell: "translate('.', '𝟎𝟏𝟐𝟑𝟒𝟓𝟔𝟕𝟖𝟗', '0123456789')" - - "-": # 0xf52e - 0xf537 (old MathType) + - "-": # 0xf52e - 0xf537 (old MathType) - test: if: "not($IgnoreBold)" - then: [t: "bold"] + then: [t: "félkövér"] # (en: 'bold', DeepL translation) - spell: "translate('.', '', '0123456789')" - - "𝟬-𝟵": # 0x1D7EC - 0x1D7F5 + - "𝟬-𝟵": # 0x1D7EC - 0x1D7F5 - test: if: "not($IgnoreBold)" - then: [t: "bold"] + then: [t: "félkövér"] # (en: 'bold', DeepL translation) - spell: "translate('.', '𝟬𝟭𝟮𝟯𝟰𝟱𝟲𝟳𝟴𝟵', '0123456789')" - - "-": # 0xf556 - 0xf55f (old MathType) + - "-": # 0xf556 - 0xf55f (old MathType) - spell: "translate('.', '', '0123456789')" - - "𝟢-𝟫": # 0x1d7e2 - 0x1d7eb + - "𝟢-𝟫": # 0x1d7e2 - 0x1d7eb - spell: "translate('.', '𝟶𝟷𝟸𝟹𝟺𝟻𝟼𝟽𝟾𝟿', '0123456789')" - - "𝟶-𝟿": # 0x1d7f6 - 0x1d7ff + - "𝟶-𝟿": # 0x1d7f6 - 0x1d7ff - spell: "translate('.', '𝟶𝟷𝟸𝟹𝟺𝟻𝟼𝟽𝟾𝟿', '0123456789')" - - "": [t: "unknown character"] # 0xf700 - - "": [t: "lower right and lower left triangles"] # 0xf726 - - "": [t: "horizontal ellipsis extender"] # 0xf72d - - "": [t: "midline horizontal ellipsis extender"] # 0xf72e - - "": [t: "radical extender"] # 0xf8e5 - - "": [t: "vertical arrow extender"] # 0xf8e6 - - "": [t: "horizontal arrow extender"] # 0xf8e7 - - "": [t: "registered sign sans serif"] # 0xf8e8 - - "": [t: "copyright sign sans serif"] # 0xf8e9 - - "": [t: "trade mark sign sans serif"] # 0xf8ea - - "": [t: "left paren top"] # 0xf8eb - - "": [t: "left paren extender"] # 0xf8ec - - "": [t: "left paren bottom"] # 0xf8ed - - "": [t: "left bracket top"] # 0xf8ee - - "": [t: "left bracket extender"] # 0xf8ef - - "": [t: "left bracket bottom"] # 0xf8f0 - - "": [t: "left brace top"] # 0xf8f1 - - "": [t: "left brace mid"] # 0xf8f2 - - "": [t: "left brace bottom"] # 0xf8f3 - - "": [t: "brace extender"] # 0xf8f4 - - "": [t: "integral extender"] # 0xf8f5 - - "": [t: "right paren top"] # 0xf8f6 - - "": [t: "right paren extender"] # 0xf8f7 - - "": [t: "right paren bottom"] # 0xf8f8 - - "": [t: "right bracket top"] # 0xf8f9 - - "": [t: "right bracket extender"] # 0xf8fa - - "": [t: "right bracket bottom"] # 0xf8fb - - "": [t: "right brace top"] # 0xf8fc - - "": [t: "right brace mid"] # 0xf8fd - - "": [t: "right brace bottom"] # 0xf8fe - - "": [t: "apple logo"] # 0xf8ff - - "ff": [t: "ff"] # 0xfb00 - - "fi": [t: "fi"] # 0xfb01 - - "fl": [t: "fl"] # 0xfb02 - - "ffi": [t: "ffi"] # 0xfb03 - - "ffl": [t: "ffl"] # 0xfb04 - - "ſt": [t: "ft"] # 0xfb05 - - "st": [t: "st"] # 0xfb06 - - "﬩": [t: "hebrew letter alternative plus"] # 0xfb29 - - "︠": [t: "ligature left half embellishment"] # 0xfe20 - - "︡": [t: "ligature right half embellishment"] # 0xfe21 - - "︢": [t: "double tilde left half embellishment"] # 0xfe22 - - "︣": [t: "double tilde right half embellishment"] # 0xfe23 - - "︤": [t: "macron left half embellishment"] # 0xfe24 - - "︥": [t: "macron right half embellishment"] # 0xfe25 - - "︦": [t: "conjoining macron embellishment"] # 0xfe26 - - "︵": [t: "over paren"] # 0xfe35 - - "︶": [t: "under paren"] # 0xfe36 - - "︷": [t: "over brace"] # 0xfe37 - - "︸": [t: "under brace"] # 0xfe38 - - "︿": [t: "over angle bracket"] # 0xfe3f - - "﹀": [t: "under angle bracket"] # 0xfe40 - - "﹡": [t: "small asterisk"] # 0xfe61 - - "﹢": [t: "small plus"] # 0xfe62 - - "﹣": [t: "small minus"] # 0xfe63 - - "﹤": [t: "small less than"] # 0xfe64 - - "﹥": [t: "small greater than"] # 0xfe65 - - "﹦": [t: "small equals"] # 0xfe66 - - "+": [t: "fullwidth plus sign"] # 0xff0b - - "<": [t: "less than"] # 0xff1c - - "=": [t: "equals"] # 0xff1d - - ">": [t: "greater than"] # 0xff1e - - "\": [t: "backslash"] # 0xff3c - - "^": [t: "hat"] # 0xff3e - - "|": # 0xff5c + - "": [t: "ismeretlen karakter"] # 0xf700 (en: 'unknown character', DeepL translation) + - "": [t: "jobb alsó és bal alsó háromszög"] # 0xf726 (en: 'lower right and lower left triangles', DeepL translation) + - "": [t: "vízszintes ellipszis kiterjesztő"] # 0xf72d (en: 'horizontal ellipsis extender', DeepL translation) + - "": [t: "középvonal vízszintes ellipszis meghosszabbító"] # 0xf72e (en: 'midline horizontal ellipsis extender', DeepL translation) + - "": [t: "radikális hosszabbító"] # 0xf8e5 (en: 'radical extender', DeepL translation) + - "": [t: "függőleges nyíl meghosszabbítása"] # 0xf8e6 (en: 'vertical arrow extender', DeepL translation) + - "": [t: "vízszintes nyíl meghosszabbító"] # 0xf8e7 (en: 'horizontal arrow extender', DeepL translation) + - "": [t: "bejegyzett jel sans serif"] # 0xf8e8 (en: 'registered sign sans serif', DeepL translation) + - "": [t: "copyright jel sans serif"] # 0xf8e9 (en: 'copyright sign sans serif', DeepL translation) + - "": [t: "védjegy jele sans serif"] # 0xf8ea (en: 'trade mark sign sans serif', DeepL translation) + - "": [t: "bal zárójel felső"] # 0xf8eb (en: 'left paren top', DeepL translation) + - "": [t: "bal zárójel hosszabbító"] # 0xf8ec (en: 'left paren extender', DeepL translation) + - "": [t: "bal zárójel alul"] # 0xf8ed (en: 'left paren bottom', DeepL translation) + - "": [t: "bal oldali zárójel tetején"] # 0xf8ee (en: 'left bracket top', DeepL translation) + - "": [t: "bal zárójel hosszabbító"] # 0xf8ef (en: 'left bracket extender', DeepL translation) + - "": [t: "bal konzol alul"] # 0xf8f0 (en: 'left bracket bottom', DeepL translation) + - "": [t: "bal oldali merevítő felső"] # 0xf8f1 (en: 'left brace top', DeepL translation) + - "": [t: "bal oldali zárójel középen"] # 0xf8f2 (en: 'left brace mid', DeepL translation) + - "": [t: "bal szögletes szögletes szöglet alul"] # 0xf8f3 (en: 'left brace bottom', DeepL translation) + - "": [t: "merevítő hosszabbító"] # 0xf8f4 (en: 'brace extender', DeepL translation) + - "": [t: "integrál kiterjesztő"] # 0xf8f5 (en: 'integral extender', DeepL translation) + - "": [t: "jobb oldali zárójel felül"] # 0xf8f6 (en: 'right paren top', DeepL translation) + - "": [t: "jobb oldali zárójel hosszabbító"] # 0xf8f7 (en: 'right paren extender', DeepL translation) + - "": [t: "jobb alsó zárójel"] # 0xf8f8 (en: 'right paren bottom', DeepL translation) + - "": [t: "jobb zárójel fent"] # 0xf8f9 (en: 'right bracket top', DeepL translation) + - "": [t: "jobb oldali zárójel hosszabbító"] # 0xf8fa (en: 'right bracket extender', DeepL translation) + - "": [t: "jobb oldali zárójel alul"] # 0xf8fb (en: 'right bracket bottom', DeepL translation) + - "": [t: "jobb oldali merevítő felül"] # 0xf8fc (en: 'right brace top', DeepL translation) + - "": [t: "jobb oldali zárójel középen"] # 0xf8fd (en: 'right brace mid', DeepL translation) + - "": [t: "jobb oldali merevítő alul"] # 0xf8fe (en: 'right brace bottom', DeepL translation) + - "": [t: "alma logó"] # 0xf8ff (en: 'apple logo', DeepL translation) + - "ff": [t: "ff"] # 0xfb00 (DeepL translation) + - "fi": [t: "fi"] # 0xfb01 (DeepL translation) + - "fl": [t: "fl"] # 0xfb02 (DeepL translation) + - "ffi": [t: "ffi"] # 0xfb03 (DeepL translation) + - "ffl": [t: "ffl"] # 0xfb04 (DeepL translation) + - "ſt": [t: "ft"] # 0xfb05 (DeepL translation) + - "st": [t: "st"] # 0xfb06 (DeepL translation) + - "﬩": [t: "héber betű alternatív plusz"] # 0xfb29 (en: 'hebrew letter alternative plus', DeepL translation) + - "︠": [t: "ligatúra bal fél díszítés"] # 0xfe20 (en: 'ligature left half embellishment', DeepL translation) + - "︡": [t: "ligatúra jobb fél díszítés"] # 0xfe21 (en: 'ligature right half embellishment', DeepL translation) + - "︢": [t: "dupla tilde balra fél díszítés"] # 0xfe22 (en: 'double tilde left half embellishment', DeepL translation) + - "︣": [t: "dupla tilde jobb oldali fél díszítés"] # 0xfe23 (en: 'double tilde right half embellishment', DeepL translation) + - "︤": [t: "makron bal fél díszítés"] # 0xfe24 (en: 'macron left half embellishment', DeepL translation) + - "︥": [t: "makron jobb oldali fél díszítés"] # 0xfe25 (en: 'macron right half embellishment', DeepL translation) + - "︦": [t: "összekötő makron díszítés"] # 0xfe26 (en: 'conjoining macron embellishment', DeepL translation) + - "︵": [t: "zárójel felett"] # 0xfe35 (en: 'over paren', DeepL translation) + - "︶": [t: "zárójel alatt"] # 0xfe36 (en: 'under paren', DeepL translation) + - "︷": [t: "zárójel fölött"] # 0xfe37 (en: 'over brace', DeepL translation) + - "︸": [t: "zárójel alatt"] # 0xfe38 (en: 'under brace', DeepL translation) + - "︿": [t: "szögletes zárójel fölött"] # 0xfe3f (en: 'over angle bracket', DeepL translation) + - "﹀": [t: "szögletes zárójel alatt"] # 0xfe40 (en: 'under angle bracket', DeepL translation) + - "﹡": [t: "kis csillag"] # 0xfe61 (en: 'small asterisk', DeepL translation) + - "﹢": [t: "kis plusz"] # 0xfe62 (en: 'small plus', DeepL translation) + - "﹣": [t: "kis mínusz"] # 0xfe63 (en: 'small minus', DeepL translation) + - "﹤": [t: "kis kevesebb, mint"] # 0xfe64 (en: 'small less than', DeepL translation) + - "﹥": [t: "kicsi nagyobb, mint"] # 0xfe65 (en: 'small greater than', DeepL translation) + - "﹦": [t: "kis egyenlő"] # 0xfe66 (en: 'small equals', DeepL translation) + - "+": [t: "teljes szélességű plusz jel"] # 0xff0b (en: 'fullwidth plus sign', DeepL translation) + - "<": [t: "kisebb, mint"] # 0xff1c (en: 'less than', DeepL translation) + - "=": [t: "egyenlő"] # 0xff1d (en: 'equals', DeepL translation) + - ">": [t: "nagyobb, mint"] # 0xff1e (en: 'greater than', DeepL translation) + - "\": [t: "visszacsúszó"] # 0xff3c (en: 'backslash', DeepL translation) + - "^": [t: "kalap"] # 0xff3e (en: 'hat', DeepL translation) + - "|": # 0xff5c # note: for ClearSpeak and SimpleSpeak, "|" inside of sets is handled at the mrow level, same for 'sets' - with: - variables: [DefaultToGiven: "count(preceding-sibling::*)=1 and count(following-sibling::*)=1 and ../../../*[1][.='P']"] # P(A|B) + variables: [DefaultToGiven: "count(preceding-sibling::*)=1 and count(following-sibling::*)=1 and ../../../*[1][.='P']"] # P(A|B) replace: - test: - if: "$SpeechStyle != 'ClearSpeak'" then_test: if: "$DefaultToGiven" - then: [t: "given"] - else: [t: "vertical line"] + then: [t: "adott"] # (en: 'given', DeepL translation) + else: [t: "függőleges vonal"] # (en: 'vertical line', DeepL translation) - else_if: "not(preceding-sibling::*) or not(following-sibling::*)" - then: [t: "vertical line"] + then: [t: "függőleges vonal"] # (en: 'vertical line', DeepL translation) - else_if: "$ClearSpeak_VerticalLine = 'SuchThat'" - then: [t: "such that"] + then: [t: "olyan, hogy"] # (en: 'such that', DeepL translation) - else_if: "$ClearSpeak_VerticalLine = 'Given' or $DefaultToGiven" - then: [t: "given"] - - else: [t: "divides"] - - "~": [t: "tilde"] # 0xff5e - - "¬": [t: "not"] # 0xffe2 - - "←": [t: "left arrow"] # 0xffe9 - - "↑": [t: "up arrow"] # 0xffea - - "→": [t: "right arrow"] # 0xffeb - - "↓": [t: "down arrow"] # 0xffec - - "": [t: "unknown or missing object"] # 0xfffc - - "�": [t: "unknown or missing character"] # 0xfffd - - - "🣑": [t: "is in equilibrium with"] # 0x1F8D1 - - "🣒": [t: "is in equilibrium biased to the right with"] # 0x1F8D2 - - "🣓": [t: "is in equilibrium biased to the left with"] # 0x1F8D3 + then: [t: "adott"] # (en: 'given', DeepL translation) + - else: [t: "osztja"] # (en: 'divides', DeepL translation) + - "~": [t: "tilde"] # 0xff5e (DeepL translation) + - "¬": [t: "nem"] # 0xffe2 (en: 'not', DeepL translation) + - "←": [t: "bal nyíl"] # 0xffe9 (en: 'left arrow', DeepL translation) + - "↑": [t: "felfelé mutató nyíl"] # 0xffea (en: 'up arrow', DeepL translation) + - "→": [t: "jobbra mutató nyíl"] # 0xffeb (en: 'right arrow', DeepL translation) + - "↓": [t: "lefelé mutató nyíl"] # 0xffec (en: 'down arrow', DeepL translation) + - "": [t: "ismeretlen vagy hiányzó tárgy"] # 0xfffc (en: 'unknown or missing object', DeepL translation) + - "�": [t: "ismeretlen vagy hiányzó karakter"] # 0xfffd (en: 'unknown or missing character', DeepL translation) + + - "🣑": [t: "egyensúlyban van"] # 0x1F8D1 (en: 'is in equilibrium with', DeepL translation) + - "🣒": [t: "egyensúlyban van, jobbra torzítva a"] # 0x1F8D2 (en: 'is in equilibrium biased to the right with', DeepL translation) + - "🣓": [t: "egyensúlyi helyzetben van balra ferdített bal oldallal"] # 0x1F8D3 (en: 'is in equilibrium biased to the left with', DeepL translation) # MathJax v4 has adopted these PUA values for some partial chem bonds that aren't in Unicode - - "\uE410": [t: "partial bond "] # 0xe410 - - "\uE411": [t: "double partial bond "] # 0xe411 - - "\uE412": [t: "triple partial bond "] # 0xe412 + - "\uE410": [t: "részleges kötés "] # 0xe410 (en: 'partial bond ', DeepL translation) + - "\uE411": [t: "kettős részleges kötés "] # 0xe411 (en: 'double partial bond ', DeepL translation) + - "\uE412": [t: "hármas részleges kötés "] # 0xe412 (en: 'triple partial bond ', DeepL translation) # MathJax v4 also adopted these PUA values for some arrows thar are in Unicode # Hopefully these will be exported properly in future versions of MathJax - - "\uE428": [spell: "'⟵'"] # 0xe428 defer to def of arrow - - "\uE429": [spell: "'⟶'"] # 0xe429 defer to def of arrow - - "\uE42A": [spell: "'⟷'"] # 0xe42a defer to def of arrow - - "\uE408": [spell: "'🣑'"] # 0xe408 defer to def of arrow - - "\uE409": [spell: "'🣒'"] # 0xe409 defer to def of arrow - - "\uE40A": [spell: "'🣓'"] # 0xe40a defer to def of arrow - - "\uE42B": [spell: "'⇄'"] # 0xe42b defer to def of arrow - - "\uE42C": [spell: "'←'"] # 0xe42c defer to def of arrow - - "\uE42D": [spell: "'→'"] # 0xe42d defer to def of arrow - - "\uE42E": [spell: "'⇄'"] # 0xe42e defer to def of arrow + - "\uE428": [spell: "'⟵'"] # 0xe428 defer to def of arrow + - "\uE429": [spell: "'⟶'"] # 0xe429 defer to def of arrow + - "\uE42A": [spell: "'⟷'"] # 0xe42a defer to def of arrow + - "\uE408": [spell: "'🣑'"] # 0xe408 defer to def of arrow + - "\uE409": [spell: "'🣒'"] # 0xe409 defer to def of arrow + - "\uE40A": [spell: "'🣓'"] # 0xe40a defer to def of arrow + - "\uE42B": [spell: "'⇄'"] # 0xe42b defer to def of arrow + - "\uE42C": [spell: "'←'"] # 0xe42c defer to def of arrow + - "\uE42D": [spell: "'→'"] # 0xe42d defer to def of arrow + - "\uE42E": [spell: "'⇄'"] # 0xe42e defer to def of arrow diff --git a/Rules/Languages/hu/unicode.yaml b/Rules/Languages/hu/unicode.yaml index 7232b56ed..ffa52b99f 100644 --- a/Rules/Languages/hu/unicode.yaml +++ b/Rules/Languages/hu/unicode.yaml @@ -1,46 +1,16 @@ --- - # 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": + - "a-z": - test: if: "$TTS='none'" - then: [t: "eigh"] # long "a" sound in all speech engines I tested (espeak, MS SAPI, eloquence, - else: [spell: "'a'"] # AWS Polly, ReadSpeaker, NaturalReader, google cloud, nuance, ibm watson) - - "b-z": - - test: - if: "$TTS='none'" - then: [t: "."] + then: [t: "."] # (en: '.', DeepL 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" + # 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": - - 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: "cap"] - else: [x: "$SpeechOverrides_CapitalLetters"] - - pitch: - value: "$CapitalLetters_Pitch" - replace: - - test: - if: "$TTS='none'" - then: [t: "eigh"] - else: [spell: "'a'"] - - - "B-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: "$CapitalLetters_Beep" then: @@ -53,56 +23,56 @@ if: "$SpeechOverrides_CapitalLetters = ''" then_test: if: "$Impairment = 'Blindness'" - then: [t: "cap"] + then: [t: "nagybetűs"] # (en: 'cap', DeepL 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('.', 'BCDEFGHIJKLMNOPQRSTUVWXYZ', 'bcdefghijklmnopqrstuvwxyz')"] + replace: [spell: "translate('.', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz')"] - - "0-9": [t: "."] + - "0-9": [t: "."] # (en: '.', DeepL translation) - - " ": [t: " "] # 0x20 + - " ": [t: " "] # 0x20 (DeepL translation) - - "!": # 0x21 + - "!": # 0x21 - test: if: "ancestor-or-self::*[contains(@data-intent-property, ':literal:')]" then_test: if: "$Verbosity = 'Terse'" - then: [t: "bang"] # 0x21 - else: [t: "exclamation point"] # 0x21 - else: [t: "factorial"] # 0x21 + then: [t: "bang"] # 0x21 (DeepL translation) + else: [t: "felkiáltójel"] # 0x21 (en: 'exclamation point', DeepL translation) + else: [t: "faktoriális"] # 0x21 (en: 'factorial', DeepL translation) - - "\"": [t: "quotation mark"] # 0x22 - - "#": [t: "number"] # 0x23 - - "$": [t: "dollars"] # 0x24 - - "%": [t: "percent"] # 0x25 - - "&": [t: "ampersand"] # 0x26 - - "'": [t: "apostrophe"] # 0x27 - - "(": # 0x28 + - "\"": [t: "idézőjel"] # 0x22 (en: 'quotation mark', DeepL translation) + - "#": [t: "number"] # 0x23 (DeepL translation) + - "$": [t: "dollár"] # 0x24 (en: 'dollars', DeepL translation) + - "%": [t: "százalék"] # 0x25 (en: 'percent', DeepL translation) + - "&": [t: "zárójel"] # 0x26 (en: 'ampersand', DeepL translation) + - "'": [t: "aposztróf"] # 0x27 (en: 'apostrophe', DeepL translation) + - "(": # 0x28 - test: if: $SpeechStyle = 'ClearSpeak' or $SpeechStyle = 'SimpleSpeak' then_test: if: "$Verbosity='Terse'" - then: [t: "open"] # 0x28 - else: [t: "open paren"] # 0x28 - else: [t: "left paren"] # 0x28 - - ")": # 0x29 + then: [t: "open"] # 0x28 (DeepL translation) + else: [t: "nyitott zárójel"] # 0x28 (en: 'open paren', DeepL translation) + else: [t: "bal zárójel"] # 0x28 (en: 'left paren', DeepL translation) + - ")": # 0x29 - test: if: $SpeechStyle = 'ClearSpeak' or $SpeechStyle = 'SimpleSpeak' then_test: if: "$Verbosity='Terse'" - then: [t: "close"] # 0x29 - else: [t: "close paren"] # 0x29 - else: [t: "right paren"] # 0x29 + then: [t: "záró"] # 0x29 (en: 'close', DeepL translation) + else: [t: "zárt zárójel"] # 0x29 (en: 'close paren', DeepL translation) + else: [t: "jobb zárójel"] # 0x29 (en: 'right paren', DeepL translation) - - "*": # 0x2a + - "*": # 0x2a test: if: "parent::*[name(.)='msup' or name(.)='msubsup' or name(.)='skip-super']" - then: [t: "star"] # 0x2a - else: [t: "times"] # 0x2a - - "+": [t: "plus"] # 0x2b - - ",": # 0x2c + then: [t: "csillag"] # 0x2a (en: 'star', DeepL translation) + else: [t: "times"] # 0x2a (DeepL translation) + - "+": [t: "plusz"] # 0x2b (en: 'plus', DeepL translation) + - ",": # 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: @@ -114,137 +84,137 @@ # except if expression starts with '…' - "../*[1][.='…'] " then: - - t: "comma" # (en: 'comma', google translation) + - T: "comma" # (en: 'comma', google translation) - test: if: "$Verbosity != Terse" then: [pause: short] # else silent - - "-": [t: "minus"] # 0x2d - - ".": # 0x2e + - "-": [t: "mínusz"] # 0x2d (en: 'minus', DeepL translation) + - ".": # 0x2e - test: if: "parent::*[1][self::m:mn]" - then: [t: "point"] - else: [t: "dot"] - - "/": # 0x2f + then: [t: "pont"] # (en: 'point', DeepL translation) + else: [t: "pont"] # (en: 'dot', DeepL translation) + - "/": # 0x2f - test: if: "ancestor-or-self::*[contains(@data-intent-property, ':literal:')]" - then: [t: "slash"] # 0x2f - else: [t: "divided by"] # 0x2f + then: [t: "slash"] # 0x2f (DeepL translation) + else: [t: "osztva"] # 0x2f (en: 'divided by', DeepL translation) - - ":": [t: "colon"] # 0x3a - - ";": [t: "semicolon"] # 0x3b - - "<": # 0x3c + - ":": [t: "kettőspont"] # 0x3a (en: 'colon', DeepL translation) + - ";": [t: "pontosvessző"] # 0x3b (en: 'semicolon', DeepL translation) + - "<": # 0x3c - test: if: "$Verbosity!='Terse'" - then: [t: "is"] - - t: "less than" - - "=": # 0x3d + then: [t: "van"] # (en: 'is', DeepL translation) + - t: "kevesebb, mint" # (en: 'less than', DeepL translation) + - "=": # 0x3d - test: if: "$Verbosity!='Terse'" - then: [t: "is equal to"] - else: [t: "equals"] + then: [t: "egyenlő"] # (en: 'is equal to', DeepL translation) + else: [t: "egyenlők"] # (en: 'equals', DeepL translation) - - ">": # 0x3e + - ">": # 0x3e - test: if: "$Verbosity!='Terse'" - then: [t: "is"] - - t: "greater than" - - "?": [t: "question mark"] # 0x3f - - "@": [t: "at sign"] # 0x40 - - "[": # 0x5b + then: [t: "van"] # (en: 'is', DeepL translation) + - t: "nagyobb, mint" # (en: 'greater than', DeepL translation) + - "?": [t: "kérdőjel"] # 0x3f (en: 'question mark', DeepL translation) + - "@": [t: "at jel"] # 0x40 (en: 'at sign', DeepL translation) + - "[": # 0x5b - test: if: $SpeechStyle = 'ClearSpeak' or $SpeechStyle = 'SimpleSpeak' - then: [t: "open bracket"] - else: [t: "left bracket"] - - "\\": [t: "back slash"] # 0x5c - - "]": # 0x5d + then: [t: "nyitott zárójel"] # (en: 'open bracket', DeepL translation) + else: [t: "bal oldali zárójel"] # (en: 'left bracket', DeepL translation) + - "\\": [t: "hátsó kötőjel"] # 0x5c (en: 'back slash', DeepL translation) + - "]": # 0x5d - test: if: $SpeechStyle = 'ClearSpeak' or $SpeechStyle = 'SimpleSpeak' - then: [t: "close bracket"] - else: [t: "right bracket"] - - "^": # 0x5e + then: [t: "zárójel"] # (en: 'close bracket', DeepL translation) + else: [t: "jobb oldali zárójel"] # (en: 'right bracket', DeepL translation) + - "^": # 0x5e - test: if: "parent::m:modified-variable or parent::m:mover" - then: [t: "hat"] - else: [t: "caret"] - - "_": [t: "under bar"] # 0x5f - - "`": [t: "grave"] # 0x60 - - "{": # 0x7b + then: [t: "kalap"] # (en: 'hat', DeepL translation) + else: [t: "caret"] # (DeepL translation) + - "_": [t: "sáv alatt"] # 0x5f (en: 'under bar', DeepL translation) + - "`": [t: "súlyos"] # 0x60 (en: 'grave', DeepL translation) + - "{": # 0x7b - test: if: $SpeechStyle = 'ClearSpeak' or $SpeechStyle = 'SimpleSpeak' - then: [t: "open brace"] - else: [t: "left brace"] - - "|": # 0x7c + then: [t: "nyitott zárójel"] # (en: 'open brace', DeepL translation) + else: [t: "bal oldali zárójel"] # (en: 'left brace', DeepL translation) + - "|": # 0x7c # note: for ClearSpeak and SimpleSpeak, "|" inside of sets is handled at the mrow level, same for 'sets' - with: - variables: [DefaultToGiven: "count(preceding-sibling::*)=1 and count(following-sibling::*)=1 and ../../../*[1][.='P']"] # P(A|B) + variables: [DefaultToGiven: "count(preceding-sibling::*)=1 and count(following-sibling::*)=1 and ../../../*[1][.='P']"] # P(A|B) replace: - test: - if: "ancestor-or-self::*[contains(@data-intent-property, ':literal:')]" - then: [t: "vertical line"] + then: [t: "függőleges vonal"] # (en: 'vertical line', DeepL translation) - else_if: "$SpeechStyle != 'ClearSpeak'" then_test: - if: "$DefaultToGiven" - then: [t: "given"] + then: [t: "adott"] # (en: 'given', DeepL translation) - else_if: "preceding-sibling::*[1][self::m:mn and not(contains(., $DecimalSeparators))] and following-sibling::*[1][self::m:mn and not(contains(., $DecimalSeparators))]" - then: [t: "divides"] - else: [t: "vertical line"] + then: [t: "osztja"] # (en: 'divides', DeepL translation) + else: [t: "függőleges vonal"] # (en: 'vertical line', DeepL translation) - else_if: "not(preceding-sibling::*) or not(following-sibling::*)" - then: [t: "vertical line"] + then: [t: "függőleges vonal"] # (en: 'vertical line', DeepL translation) - else_if: "$ClearSpeak_VerticalLine = 'SuchThat'" - then: [t: "such that"] + then: [t: "olyan, hogy"] # (en: 'such that', DeepL translation) - else_if: "$ClearSpeak_VerticalLine = 'Given' or $DefaultToGiven" - then: [t: "given"] - - else: [t: "divides"] + then: [t: "adott"] # (en: 'given', DeepL translation) + - else: [t: "osztja"] # (en: 'divides', DeepL translation) - - "}": # 0x7d + - "}": # 0x7d - test: if: $SpeechStyle = 'ClearSpeak' or $SpeechStyle = 'SimpleSpeak' - then: [t: "close brace"] - else: [t: "right brace"] + then: [t: "zárt zárójel"] # (en: 'close brace', DeepL translation) + else: [t: "jobb oldali zárójel"] # (en: 'right brace', DeepL translation) - - "~": [t: "tilde"] # 0x7e - - " ": # 0xa0 + - "~": [t: "tilde"] # 0x7e (DeepL translation) + - " ": # 0xa0 - test: # could be mtext in mtd or mtext in an mrow that is a concatenation of mtd's. Is there a better solution? if: "@data-empty-in-2D and not(ancestor::*[self::m:piecewise or self::m:system-of-equations or self::m:lines])" - then: [t: "empty"] # want to say something for fraction (etc) with empty child + then: [t: "üres"] # want to say something for fraction (etc) with empty child (en: 'empty', DeepL translation) else: [t: ""] - - "¬": [t: "not"] # 0xac - - "°": [t: "degrees"] # 0xb0 - - "±": [t: "plus or minus"] # 0xb1 - - "´": [t: "acute"] # 0xb4 - - "·": # 0xB7 + - "¬": [t: "nem"] # 0xac (en: 'not', DeepL translation) + - "°": [t: "fok"] # 0xb0 (en: 'degrees', DeepL translation) + - "±": [t: "plusz vagy mínusz"] # 0xb1 (en: 'plus or minus', DeepL translation) + - "´": [t: "akut"] # 0xb4 (en: 'acute', DeepL translation) + - "·": # 0xB7 - test: if: "ancestor-or-self::*[contains(@data-intent-property, ':literal:')] or not($SpeechStyle = 'ClearSpeak' and $ClearSpeak_MultSymbolDot = 'Auto')" - then: [t: "dot"] - else: [t: "times"] - - "×": # 0xd7 + then: [t: "pont"] # (en: 'dot', DeepL translation) + else: [t: "times"] # (DeepL translation) + - "×": # 0xd7 - test: if: "$SpeechStyle = 'ClearSpeak'" then_test: - if: "$ClearSpeak_MultSymbolX = 'Auto'" - then: [t: "times"] + then: [t: "times"] # (DeepL translation) - else_if: "$ClearSpeak_MultSymbolX = 'By'" - then: [t: "by"] - else: [t: "cross"] + then: [t: "by"] # (DeepL translation) + else: [t: "kereszt"] # (en: 'cross', DeepL translation) else_test: if: "ancestor-or-self::*[contains(@data-intent-property, ':literal:')]" - then: [t: "cross"] - else: [t: "times"] + then: [t: "kereszt"] # (en: 'cross', DeepL translation) + else: [t: "times"] # (DeepL translation) - - "÷": [t: "divided by"] # 0xf7 - - "̀": [t: "grave accent embellishment"] # 0x300 - - "́": [t: "acute accent embellishment"] # 0x301 - - "̂": [t: "circumflex accent embellishment"] # 0x302 - - "̃": [t: "tilde embellishment"] # 0x303 - - "̄": [t: "macron embellishment"] # 0x304 - - "̅": [t: "overbar embellishment"] # 0x305 - - "̆": [t: "breve"] # 0x306 - - "̇": [t: "dot above embellishment"] # 0x307 + - "÷": [t: "osztva"] # 0xf7 (en: 'divided by', DeepL translation) + - "̀": [t: "súlyos ékezet díszítés"] # 0x300 (en: 'grave accent embellishment', DeepL translation) + - "́": [t: "akut ékezet díszítés"] # 0x301 (en: 'acute accent embellishment', DeepL translation) + - "̂": [t: "circumflex accent díszítés"] # 0x302 (en: 'circumflex accent embellishment', DeepL translation) + - "̃": [t: "tilde díszítés"] # 0x303 (en: 'tilde embellishment', DeepL translation) + - "̄": [t: "macron díszítés"] # 0x304 (en: 'macron embellishment', DeepL translation) + - "̅": [t: "overbar díszítés"] # 0x305 (en: 'overbar embellishment', DeepL translation) + - "̆": [t: "breve"] # 0x306 (DeepL translation) + - "̇": [t: "pont a díszítés felett"] # 0x307 (en: 'dot above embellishment', DeepL translation) # Note: ClearSpeak has pref TriangleSymbol for "Δ", but that is wrong - "Α-Ω": @@ -260,61 +230,61 @@ if: "$SpeechOverrides_CapitalLetters = ''" then_test: if: "$Impairment = 'Blindness'" - then: [t: "cap"] + then: [t: "nagybetűs"] # (en: 'cap', DeepL 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('.', 'ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡ΢ΣΤΥΦΧΨΩ', 'αβγδεζηθικλμνξοπρςστυφχψω')"] - - "α": [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 - - "κ": [t: "kappa"] # 0x3ba - - "λ": [t: "lambda"] # 0x3bb - - "μ": [t: "mu"] # 0x3bc - - "ν": [t: "nu"] # 0x3bd - - "ξ": [t: "zai"] # 0x3be - - "ο": [t: "omicron"] # 0x3bf - - "π": [t: "pi"] # 0x3c0 - - "ρ": [t: "rho"] # 0x3c1 - - "ς": [t: "final sigma"] # 0x3c2 - - "σ": [t: "sigma"] # 0x3c3 - - "τ": [t: "tau"] # 0x3c4 - - "υ": [t: "upsilon"] # 0x3c5 - - "φ": [t: "phi"] # 0x3c6 - - "χ": [t: "chi"] # 0x3c7 - - "ψ": [t: "psi"] # 0x3c8 - - "ω": [t: "omega"] # 0x3c9 - - "ϕ": [t: "phi"] # 0x3d5 - - "ϖ": [t: "pi"] # 0x3d6 - - "ϵ": [t: "epsilon"] # 0x3f5 - - "϶": [t: "reversed epsilon"] # 0x3f6 + - "α": [t: "alfa"] # 0x3b1 (en: 'alpha', DeepL translation) + - "β": [t: "béta"] # 0x3b2 (en: 'beta', DeepL translation) + - "γ": [t: "gamma"] # 0x3b3 (DeepL translation) + - "δ": [t: "delta"] # 0x3b4 (DeepL translation) + - "ε": [t: "epsilon"] # 0x3b5 (DeepL translation) + - "ζ": [t: "zéta"] # 0x3b6 (en: 'zeta', DeepL translation) + - "η": [t: "eta"] # 0x3b7 (DeepL translation) + - "θ": [t: "théta"] # 0x3b8 (en: 'theta', DeepL translation) + - "ι": [t: "iota"] # 0x3b9 (DeepL translation) + - "κ": [t: "kappa"] # 0x3ba (DeepL translation) + - "λ": [t: "lambda"] # 0x3bb (DeepL translation) + - "μ": [t: "mu"] # 0x3bc (DeepL translation) + - "ν": [t: "nu"] # 0x3bd (DeepL translation) + - "ξ": [t: "zai"] # 0x3be (DeepL translation) + - "ο": [t: "omikron"] # 0x3bf (en: 'omicron', DeepL translation) + - "π": [t: "pi"] # 0x3c0 (DeepL translation) + - "ρ": [t: "rho"] # 0x3c1 (DeepL translation) + - "ς": [t: "végső szigma"] # 0x3c2 (en: 'final sigma', DeepL translation) + - "σ": [t: "sigma"] # 0x3c3 (DeepL translation) + - "τ": [t: "tau"] # 0x3c4 (DeepL translation) + - "υ": [t: "upsilon"] # 0x3c5 (DeepL translation) + - "φ": [t: "phi"] # 0x3c6 (DeepL translation) + - "χ": [t: "chi"] # 0x3c7 (DeepL translation) + - "ψ": [t: "psi"] # 0x3c8 (DeepL translation) + - "ω": [t: "omega"] # 0x3c9 (DeepL translation) + - "ϕ": [t: "phi"] # 0x3d5 (DeepL translation) + - "ϖ": [t: "pi"] # 0x3d6 (DeepL translation) + - "ϵ": [t: "epsilon"] # 0x3f5 (DeepL translation) + - "϶": [t: "fordított epsilon"] # 0x3f6 (en: 'reversed epsilon', DeepL translation) - - "–": [t: "en dash"] # 0x2013 - - "—": [t: "em dash"] # 0x2014 - - "―": [t: "horizontal bar"] # 0x2015 - - "‖": [t: "double vertical line"] # 0x2016 - - "…": # 0x2026 + - "–": [t: "en kötőjel"] # 0x2013 (en: 'en dash', DeepL translation) + - "—": [t: "em kötőjel"] # 0x2014 (en: 'em dash', DeepL translation) + - "―": [t: "vízszintes sáv"] # 0x2015 (en: 'horizontal bar', DeepL translation) + - "‖": [t: "dupla függőleges vonal"] # 0x2016 (en: 'double vertical line', DeepL translation) + - "…": # 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][.='…']" - then: [t: "dot dot dot"] - else_test: # must have $ClearSpeak_Ellipses = 'AndSoOn' + then: [t: "pont pont pont pont"] # (en: 'dot dot dot', DeepL translation) + else_test: # must have $ClearSpeak_Ellipses = 'AndSoOn' if: "count(following-sibling::*) = 0" - then: [t: "and so on"] - else: [t: "and so on up to"] + then: [t: "és így tovább"] # (en: 'and so on', DeepL translation) + else: [t: "és így tovább egészen"] # (en: 'and so on up to', DeepL translation) - - "⁡": # 0x2061 + - "⁡": # 0x2061 - test: # skip saying "of" when Terse and a trig function, when it is a shape (does this happen?), or we are in :literal mode if: "not( @@ -326,251 +296,251 @@ preceding-sibling::*[1][IsInDefinition(., 'GeometryShapes')] or (@data-changed='added' and ancestor-or-self::*[contains(@data-intent-property, ':literal:')]) )" - then: [t: "of"] - - "⁢": [t: ""] # 0x2062 - - "⁣": [t: ""] # 0x2063 - - "⁤": [t: "and"] # 0x2064 - - "′": [t: "prime"] # 0x2032 - - "″": [t: "double prime"] # 0x2033 - - "‴": [t: "triple prime"] # 0x2034 + then: [t: "of"] # (DeepL translation) + - "⁢": [t: ""] # 0x2062 + - "⁣": [t: ""] # 0x2063 + - "⁤": [t: "és"] # 0x2064 (en: 'and', DeepL translation) + - "′": [t: "prím"] # 0x2032 (en: 'prime', DeepL translation) + - "″": [t: "dupla prím"] # 0x2033 (en: 'double prime', DeepL translation) + - "‴": [t: "hármas prím"] # 0x2034 (en: 'triple prime', DeepL translation) - - "ℂℕℚℝℤ": # here we rely on this running through the table again to speak "cap xxx" - - t: "double-struck" + - "ℂℕℚℝℤ": # here we rely on this running through the table again to speak "cap xxx" + - t: "duplán leütött" # (en: 'double-struck', DeepL translation) - spell: "translate('.', 'ℂℕℚℝℤ', 'CNQRZ')" - - "℃": [t: "degrees celsius"] # 0x2103 - - "℉": [t: "degrees fahrenheit"] # 0x2109 - - "ℋℛℓ": # 0x210b - - t: "script" + - "℃": [t: "celsius fok"] # 0x2103 (en: 'degrees celsius', DeepL translation) + - "℉": [t: "fahrenheit fok"] # 0x2109 (en: 'degrees fahrenheit', DeepL translation) + - "ℋℛℓ": # 0x210b + - t: "script" # (DeepL translation) - spell: "translate('.', 'ℋℛℓ', 'HRl')" - - "ℎ": [t: "planck constant"] # 0x210e - - "ℜ": # 0x211c - - t: "fraktur" + - "ℎ": [t: "planck-állandó"] # 0x210e (en: 'planck constant', DeepL translation) + - "ℜ": # 0x211c + - t: "fraktur" # (DeepL translation) - spell: "'R'" - - "Ω": [t: "ohms"] # 0x2126 - - "K": [t: "kelvin"] # 0x212a - - "Å": [t: "angstroms"] # 0x212b - - "ⅆⅇⅈⅉ": # 0x2146-9 - - t: "double-struck italic" + - "Ω": [t: "ohm"] # 0x2126 (en: 'ohms', DeepL translation) + - "K": [t: "kelvin"] # 0x212a (DeepL translation) + - "Å": [t: "angström"] # 0x212b (en: 'angstroms', DeepL translation) + - "ⅆⅇⅈⅉ": # 0x2146-9 + - t: "duplán dőlt betűs" # (en: 'double-struck italic', DeepL translation) - spell: "translate('.', 'ⅆⅇⅈⅉ', 'deij')" - - "←": [t: "left arrow"] # 0x2190 - - "↑": [t: "up arrow"] # 0x2191 - - "→": # 0x2192 + - "←": [t: "bal nyíl"] # 0x2190 (en: 'left arrow', DeepL translation) + - "↑": [t: "felfelé mutató nyíl"] # 0x2191 (en: 'up arrow', DeepL translation) + - "→": # 0x2192 - test: if: "ancestor::*[2][self::m:limit]" - then: [t: "approaches"] - else: [t: "right arrow"] + then: [t: "megközelítések"] # (en: 'approaches', DeepL translation) + else: [t: "jobbra mutató nyíl"] # (en: 'right arrow', DeepL translation) - - "↓": [t: "down arrow"] # 0x2193 - - "⇒": [t: "right double arrow"] # 0x21d2 - - "∀": [t: "for all"] # 0x2200 - - "∂": # 0x2202 + - "↓": [t: "lefelé mutató nyíl"] # 0x2193 (en: 'down arrow', DeepL translation) + - "⇒": [t: "jobb oldali kettős nyíl"] # 0x21d2 (en: 'right double arrow', DeepL translation) + - "∀": [t: "mindenkinek"] # 0x2200 (en: 'for all', DeepL translation) + - "∂": # 0x2202 - test: if: "$Verbosity='Terse'" - then: [t: "partial"] - else: [t: "partial derivative"] - - "∃": [t: "there exists"] # 0x2203 - - "∄": [t: "there does not exist"] # 0x2204 - - "∅": [t: "empty set"] # 0x2205 - - "∆": # 0x2206 + then: [t: "részleges"] # (en: 'partial', DeepL translation) + else: [t: "részleges származék"] # (en: 'partial derivative', DeepL translation) + - "∃": [t: "létezik"] # 0x2203 (en: 'there exists', DeepL translation) + - "∄": [t: "nem létezik"] # 0x2204 (en: 'there does not exist', DeepL translation) + - "∅": [t: "üres készlet"] # 0x2205 (en: 'empty set', DeepL translation) + - "∆": # 0x2206 - test: if: "$Verbosity!='Terse'" - then: [t: "the"] - - t: "laplacian of" - - "∈": # 0x2208 + then: [t: "a"] # (en: 'the', DeepL translation) + - t: "laplace-je" # (en: 'laplacian of', DeepL translation) + - "∈": # 0x2208 - test: if: "$SpeechStyle != 'ClearSpeak'" then: - test: - if: "$Verbosity!='Terse' and not(ancestor::*[self::m:set])" # "the set x is an element of ..." sounds bad" - then: [t: "is"] - - t: "an element of" + if: "$Verbosity!='Terse' and not(ancestor::*[self::m:set])" # "the set x is an element of ..." sounds bad" + then: [t: "van"] # (en: 'is', DeepL translation) + - t: "egy elem" # (en: 'an element of', DeepL 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 + if: "../../self::m:set or ../../../self::m:set" # inside a set then_test: - if: $ClearSpeak_SetMemberSymbol = 'Auto' or $ClearSpeak_SetMemberSymbol = 'In' - then: [t: "in"] + then: [t: "in"] # (DeepL translation) - else_if: $ClearSpeak_SetMemberSymbol = 'Member' - then: [t: "member of"] + then: [t: "tagja"] # (en: 'member of', DeepL translation) - else_if: $ClearSpeak_SetMemberSymbol = 'Element' - then: [t: "element of"] - - else: [t: "belonging to"] # $ClearSpeak_SetMemberSymbol = 'Belongs' + then: [t: "eleme"] # (en: 'element of', DeepL translation) + - else: [t: "hozzátartozó"] # $ClearSpeak_SetMemberSymbol = 'Belongs' (en: 'belonging to', DeepL translation) else_test: - if: $ClearSpeak_SetMemberSymbol = 'Auto' or $ClearSpeak_SetMemberSymbol = 'Member' - then: [t: "is a member of"] + then: [t: "nem tagja"] # (en: 'is a member of', DeepL translation) - else_if: $ClearSpeak_SetMemberSymbol = 'Element' - then: [t: "is an element of"] + then: [t: "egy eleme"] # (en: 'is an element of', DeepL translation) - else_if: $ClearSpeak_SetMemberSymbol = 'In' - then: [t: "is in"] - - else: [t: "belongs to"] # $ClearSpeak_SetMemberSymbol = 'Belongs' - - "∉": # 0x2209 + then: [t: "benne van"] # (en: 'is in', DeepL translation) + - else: [t: "tartozik"] # $ClearSpeak_SetMemberSymbol = 'Belongs' (en: 'belongs to', DeepL translation) + - "∉": # 0x2209 # rule is identical to 0x2208 - test: if: "$SpeechStyle != 'ClearSpeak'" then: - test: if: "$Verbosity!='Terse'" - then: [t: "is"] - - t: "not an element of" + then: [t: "van"] # (en: 'is', DeepL translation) + - t: "nem eleme" # (en: 'not an element of', DeepL 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 + if: "../../self::m:set or ../../../self::m:set" # inside a set then_test: - if: $ClearSpeak_SetMemberSymbol = 'Auto' or $ClearSpeak_SetMemberSymbol = 'In' - then: [t: "not in"] + then: [t: "nem a"] # (en: 'not in', DeepL translation) - else_if: $ClearSpeak_SetMemberSymbol = 'Member' - then: [t: "not member of"] + then: [t: "nem tagja"] # (en: 'not member of', DeepL translation) - else_if: $ClearSpeak_SetMemberSymbol = 'Element' - then: [t: "not element of"] - - else: [t: "not belonging to"] # $ClearSpeak_SetMemberSymbol = 'Belongs' + then: [t: "nem eleme"] # (en: 'not element of', DeepL translation) + - else: [t: "nem tartozik hozzá"] # $ClearSpeak_SetMemberSymbol = 'Belongs' (en: 'not belonging to', DeepL translation) else_test: - if: $ClearSpeak_SetMemberSymbol = 'Auto' or $ClearSpeak_SetMemberSymbol = 'Member' - then: [t: "is not a member of"] + then: [t: "nem tagja a"] # (en: 'is not a member of', DeepL translation) - else_if: $ClearSpeak_SetMemberSymbol = 'Element' - then: [t: "is not an element of"] + then: [t: "nem eleme"] # (en: 'is not an element of', DeepL translation) - else_if: $ClearSpeak_SetMemberSymbol = 'In' - then: [t: "is not in"] - - else: [t: "does not belong to"] # $ClearSpeak_SetMemberSymbol = 'Belongs' - - "∊": # 0x220a + then: [t: "nincs benne"] # (en: 'is not in', DeepL translation) + - else: [t: "nem tartozik hozzá"] # $ClearSpeak_SetMemberSymbol = 'Belongs' (en: 'does not belong to', DeepL translation) + - "∊": # 0x220a - test: if: "$SpeechStyle != 'ClearSpeak'" then: - test: - if: "$Verbosity!='Terse' and not(ancestor::*[self::m:set])" # "the set x is an element of ..." sounds bad" - then: [t: "is"] - - t: "an element of" + if: "$Verbosity!='Terse' and not(ancestor::*[self::m:set])" # "the set x is an element of ..." sounds bad" + then: [t: "van"] # (en: 'is', DeepL translation) + - t: "egy elem" # (en: 'an element of', DeepL 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 + if: "../../self::m:set or ../../../self::m:set" # inside a set then_test: - if: $ClearSpeak_SetMemberSymbol = 'Auto' or $ClearSpeak_SetMemberSymbol = 'In' - then: [t: "in"] + then: [t: "in"] # (DeepL translation) - else_if: $ClearSpeak_SetMemberSymbol = 'Member' - then: [t: "member of"] + then: [t: "tagja"] # (en: 'member of', DeepL translation) - else_if: $ClearSpeak_SetMemberSymbol = 'Element' - then: [t: "element of"] - - else: [t: "belonging to"] # $ClearSpeak_SetMemberSymbol = 'Belongs' + then: [t: "eleme"] # (en: 'element of', DeepL translation) + - else: [t: "hozzátartozó"] # $ClearSpeak_SetMemberSymbol = 'Belongs' (en: 'belonging to', DeepL translation) else_test: - if: $ClearSpeak_SetMemberSymbol = 'Auto' or $ClearSpeak_SetMemberSymbol = 'Member' - then: [t: "is a member of"] + then: [t: "nem tagja"] # (en: 'is a member of', DeepL translation) - else_if: $ClearSpeak_SetMemberSymbol = 'Element' - then: [t: "is an element of"] + then: [t: "egy eleme"] # (en: 'is an element of', DeepL translation) - else_if: $ClearSpeak_SetMemberSymbol = 'In' - then: [t: "is in"] - - else: [t: "belongs to"] # $ClearSpeak_SetMemberSymbol = 'Belongs' - - "∏": [t: "product"] # 0x220f - - "∐": [t: "co-product"] # 0x2210 - - "∑": [t: "sum"] # 0x2211 - - "−": [t: "minus"] # 0x2212 - - "∓": [t: "minus or plus"] # 0x2213 - - "∗": [t: "times"] # 0x2217 - - "∘": [t: "composed with"] # 0x2218 - - "√": # 0x221a + then: [t: "benne van"] # (en: 'is in', DeepL translation) + - else: [t: "tartozik"] # $ClearSpeak_SetMemberSymbol = 'Belongs' (en: 'belongs to', DeepL translation) + - "∏": [t: "termék"] # 0x220f (en: 'product', DeepL translation) + - "∐": [t: "társtermék"] # 0x2210 (en: 'co-product', DeepL translation) + - "∑": [t: "sum"] # 0x2211 (DeepL translation) + - "−": [t: "mínusz"] # 0x2212 (en: 'minus', DeepL translation) + - "∓": [t: "mínusz vagy plusz"] # 0x2213 (en: 'minus or plus', DeepL translation) + - "∗": [t: "times"] # 0x2217 (DeepL translation) + - "∘": [t: "összetéve"] # 0x2218 (en: 'composed with', DeepL translation) + - "√": # 0x221a - test: if: "$Verbosity!='Terse'" - then: [t: "the"] - - t: "square root of" - - "∝": # 0x221d + then: [t: "a"] # (en: 'the', DeepL translation) + - t: "négyzetgyöke" # (en: 'square root of', DeepL translation) + - "∝": # 0x221d - test: if: "$Verbosity!='Terse'" - then: [t: "is"] - - t: "proportional to" - - "∞": [t: "infinity"] # 0x221e - - "∟": [t: "right angle"] # 0x221f - - "∠": [t: "angle"] # 0x2220 - - "∡": [t: "measured angle"] # 0x2221 - - "∣": [t: "divides"] # 0x2223 - - "∤": [t: "does not divide"] # 0x2224 - - "∥": # 0x2225 + then: [t: "van"] # (en: 'is', DeepL translation) + - t: "arányos" # (en: 'proportional to', DeepL translation) + - "∞": [t: "végtelen"] # 0x221e (en: 'infinity', DeepL translation) + - "∟": [t: "derékszög"] # 0x221f (en: 'right angle', DeepL translation) + - "∠": [t: "szög"] # 0x2220 (en: 'angle', DeepL translation) + - "∡": [t: "mért szög"] # 0x2221 (en: 'measured angle', DeepL translation) + - "∣": [t: "osztja"] # 0x2223 (en: 'divides', DeepL translation) + - "∤": [t: "nem oszt"] # 0x2224 (en: 'does not divide', DeepL translation) + - "∥": # 0x2225 - test: if: "ancestor-or-self::*[contains(@data-intent-property, ':literal:')]" - then: [t: "double vertical line"] + then: [t: "dupla függőleges vonal"] # (en: 'double vertical line', DeepL translation) else: - test: if: "$Verbosity!='Terse'" - then: [t: "is"] - - t: "parallel to" - - "∦": # 0x2226 + then: [t: "van"] # (en: 'is', DeepL translation) + - t: "párhuzamos" # (en: 'parallel to', DeepL translation) + - "∦": # 0x2226 - test: if: "$Verbosity!='Terse'" - then: [t: "is"] - - t: "not parallel to" - - "∧": [t: "and"] # 0x2227 - - "∨": [t: "or"] # 0x2228 - - "∩": [t: "intersection"] # 0x2229 - - "∪": [t: "union"] # 0x222a - - "∫": [t: "integral"] # 0x222b - - "∬": [t: "double integral"] # 0x222c - - "∭": [t: "triple integral"] # 0x222d - - "∮": [t: "contour integral"] # 0x222e - - "∶": # 0x2236 + then: [t: "van"] # (en: 'is', DeepL translation) + - t: "nem párhuzamos" # (en: 'not parallel to', DeepL translation) + - "∧": [t: "és"] # 0x2227 (en: 'and', DeepL translation) + - "∨": [t: "vagy"] # 0x2228 (en: 'or', DeepL translation) + - "∩": [t: "metszéspont"] # 0x2229 (en: 'intersection', DeepL translation) + - "∪": [t: "unió"] # 0x222a (en: 'union', DeepL translation) + - "∫": [t: "integrál"] # 0x222b (en: 'integral', DeepL translation) + - "∬": [t: "kettős integrál"] # 0x222c (en: 'double integral', DeepL translation) + - "∭": [t: "hármas integrál"] # 0x222d (en: 'triple integral', DeepL translation) + - "∮": [t: "kontúr integrál"] # 0x222e (en: 'contour integral', DeepL translation) + - "∶": # 0x2236 - test: if: "$Verbosity!='Terse'" - then: [t: "is"] - - t: "to" - - "∷": [t: "as"] # 0x2237 - - "∼": [t: "varies with"] # 0x223c - - "∽": [t: "reversed tilde"] # 0x223d - - "∾": # 0x223e + then: [t: "van"] # (en: 'is', DeepL translation) + - t: "to" # (DeepL translation) + - "∷": [t: "as"] # 0x2237 (DeepL translation) + - "∼": [t: "változik"] # 0x223c (en: 'varies with', DeepL translation) + - "∽": [t: "fordított tilde"] # 0x223d (en: 'reversed tilde', DeepL translation) + - "∾": # 0x223e - test: if: "$Verbosity!='Terse'" - then: [t: "is"] - - t: "most positive" - - "∿": [t: "sine wave"] # 0x223f - - "≠": # 0x2260 + then: [t: "van"] # (en: 'is', DeepL translation) + - t: "legpozitívabb" # (en: 'most positive', DeepL translation) + - "∿": [t: "szinuszhullám"] # 0x223f (en: 'sine wave', DeepL translation) + - "≠": # 0x2260 - test: if: "$Verbosity!='Terse'" - then: [t: "is"] - - t: "not equal to" - - "≡": # 0x2261 + then: [t: "van"] # (en: 'is', DeepL translation) + - t: "nem egyenlő" # (en: 'not equal to', DeepL translation) + - "≡": # 0x2261 - test: if: "$Verbosity!='Terse'" - then: [t: "is"] - - t: "identical to" - - "≤": # 0x2264 + then: [t: "van"] # (en: 'is', DeepL translation) + - t: "azonos" # (en: 'identical to', DeepL translation) + - "≤": # 0x2264 - test: if: "$Verbosity!='Terse'" - then: [t: "is"] - - t: "less than or equal to" - - "≥": # 0x2265 + then: [t: "van"] # (en: 'is', DeepL translation) + - t: "kisebb vagy egyenlő" # (en: 'less than or equal to', DeepL translation) + - "≥": # 0x2265 - test: if: "$Verbosity!='Terse'" - then: [t: "is"] - - t: "greater than or equal to" - - "≦": [t: "less than over equal to"] # 0x2266 - - "≧": [t: "greater than over equal to"] # 0x2267 - - "≺": [t: "precedes"] # 0x227a - - "≻": [t: "succeeds"] # 0x227b - - "⊂": # 0x2282 + then: [t: "van"] # (en: 'is', DeepL translation) + - t: "nagyobb vagy egyenlő" # (en: 'greater than or equal to', DeepL translation) + - "≦": [t: "kisebb, mint egyenlő"] # 0x2266 (en: 'less than over equal to', DeepL translation) + - "≧": [t: "nagyobb, mint az egyenlő"] # 0x2267 (en: 'greater than over equal to', DeepL translation) + - "≺": [t: "megelőzi"] # 0x227a (en: 'precedes', DeepL translation) + - "≻": [t: "sikerül"] # 0x227b (en: 'succeeds', DeepL translation) + - "⊂": # 0x2282 - test: if: "$Verbosity!='Terse'" - then: [t: "is a"] - - t: "subset of" - - "⊃": # 0x2283 + then: [t: "is a"] # (DeepL translation) + - t: "részhalmaza" # (en: 'subset of', DeepL translation) + - "⊃": # 0x2283 - test: if: "$Verbosity!='Terse'" - then: [t: "is a"] - - t: "superset of" - - "⊄": # 0x2284 + then: [t: "is a"] # (DeepL translation) + - t: "szuperhalmaza" # (en: 'superset of', DeepL translation) + - "⊄": # 0x2284 - test: if: "$Verbosity!='Terse'" - then: [t: "is"] - - t: "not a subset of" - - "⊅": # 0x2285 + then: [t: "van"] # (en: 'is', DeepL translation) + - t: "nem részhalmaza" # (en: 'not a subset of', DeepL translation) + - "⊅": # 0x2285 - test: if: "$Verbosity!='Terse'" - then: [t: "is"] - - t: "not a superset of" - - "⊆": # 0x2286 + then: [t: "van"] # (en: 'is', DeepL translation) + - t: "not a superset of" # (DeepL translation) + - "⊆": # 0x2286 - test: if: "$Verbosity!='Terse'" - then: [t: "is a"] - - t: "subset of or equal to" - - "⊇": # 0x2287 + then: [t: "is a"] # (DeepL translation) + - t: "részhalmaza vagy egyenlő" # (en: 'subset of or equal to', DeepL translation) + - "⊇": # 0x2287 - test: if: "$Verbosity!='Terse'" - then: [t: "is a"] - - t: "superset of or equal to" + then: [t: "is a"] # (DeepL translation) + - t: "superset of vagy equal to" # (en: 'superset of or equal to', DeepL translation) From 161ebefbbbedd4375e3798be84c43c045751522c Mon Sep 17 00:00:00 2001 From: hammera Date: Fri, 26 Jun 2026 19:10:27 +0200 Subject: [PATCH 3/5] Please merge MathCAT corrected first hungarian translation version (#611) * Clearspeak_rules.yaml: add translated messages Signed-off-by: Attila Hammer * Rules/Languages/hu/SimpleSpeak_Rules.yaml: added translated messages Signed-off-by: Attila Hammer * Rules/Languages/hu/definitions.yaml: added translated messages Signed-off-by: Attila Hammer * Rules/Languages/hu/navigate.yaml: added translated messages Signed-off-by: Attila Hammer * Rules/Languages/hu/overview.yaml: added translated messages Signed-off-by: Attila Hammer * Rules/Languages/hu/unicode.yaml: added translated messages Signed-off-by: Attila Hammer * Rules/Languages/hu/unicode-full.yaml: added translated messages Signed-off-by: Attila Hammer * Rules/Languages/hu/SharedRules/calculus.yaml: added translated messages Signed-off-by: Attila Hammer * Rules/Languages/hu/SharedRules/default.yaml: added translated messages Signed-off-by: Attila Hammer * Rules/Languages/hu/SharedRules/general.yaml: added translated messages Signed-off-by: Attila Hammer * Rules/Languages/hu/SharedRules/geometry.yaml: added translated messages Signed-off-by: Attila Hammer * Rules/Languages/hu/SharedRules/linear-algebra.yaml: added translated messages Signed-off-by: Attila Hammer * add corrected tests Signed-off-by: Attila Hammer * Remove unvanted duplicated intent mappings Signed-off-by: Attila Hammer --------- Signed-off-by: Attila Hammer --- Rules/Languages/hu/ClearSpeak_Rules.yaml | 1608 +++++++++-------- Rules/Languages/hu/SharedRules/calculus.yaml | 16 +- Rules/Languages/hu/SharedRules/default.yaml | 217 +-- Rules/Languages/hu/SharedRules/general.yaml | 392 ++-- Rules/Languages/hu/SharedRules/geometry.yaml | 30 +- .../hu/SharedRules/linear-algebra.yaml | 14 +- Rules/Languages/hu/SimpleSpeak_Rules.yaml | 506 +++++- Rules/Languages/hu/definitions.yaml | 534 ++++-- Rules/Languages/hu/navigate.yaml | 193 +- Rules/Languages/hu/overview.yaml | 37 +- Rules/Languages/hu/unicode-full.yaml | 270 ++- Rules/Languages/hu/unicode.yaml | 535 +++--- tests/Languages/hu/ClearSpeak/functions.rs | 145 +- tests/Languages/hu/ClearSpeak/large_ops.rs | 36 +- tests/Languages/hu/ClearSpeak/menclose.rs | 48 +- tests/Languages/hu/ClearSpeak/mfrac.rs | 80 +- tests/Languages/hu/ClearSpeak/mroot.rs | 30 +- tests/Languages/hu/ClearSpeak/msup.rs | 118 +- tests/Languages/hu/ClearSpeak/multiline.rs | 47 +- tests/Languages/hu/ClearSpeak/sets.rs | 80 +- .../hu/ClearSpeak/symbols_and_adornments.rs | 48 +- tests/Languages/hu/SimpleSpeak/functions.rs | 83 +- tests/Languages/hu/SimpleSpeak/geometry.rs | 8 +- tests/Languages/hu/SimpleSpeak/large_ops.rs | 36 +- .../hu/SimpleSpeak/linear_algebra.rs | 20 +- tests/Languages/hu/SimpleSpeak/mfrac.rs | 52 +- tests/Languages/hu/SimpleSpeak/msup.rs | 46 +- tests/Languages/hu/SimpleSpeak/multiline.rs | 15 +- tests/Languages/hu/SimpleSpeak/sets.rs | 48 +- tests/Languages/hu/SimpleSpeak/subscripts.rs | 24 +- tests/Languages/hu/alphabets.rs | 202 +-- tests/Languages/hu/chemistry.rs | 63 +- tests/Languages/hu/intent.rs | 35 +- tests/Languages/hu/mtable.rs | 165 +- tests/Languages/hu/shared.rs | 83 +- tests/Languages/hu/units.rs | 205 +-- 36 files changed, 3257 insertions(+), 2812 deletions(-) diff --git a/Rules/Languages/hu/ClearSpeak_Rules.yaml b/Rules/Languages/hu/ClearSpeak_Rules.yaml index 7b6afd619..02040fc5d 100644 --- a/Rules/Languages/hu/ClearSpeak_Rules.yaml +++ b/Rules/Languages/hu/ClearSpeak_Rules.yaml @@ -1,766 +1,842 @@ ---- -- name: pause - tag: "!*" - match: "not(self::m:math) and not($MatchingPause) and @data-intent-property[contains(., ':pause')]" - replace: - - with: - variables: [MatchingPause: "true()"] - replace: - - test: - - if: "contains(@data-intent-property, ':pause-long')" - then: [pause: long] - - else_if: "contains(@data-intent-property, ':pause-short')" - then: [pause: short] - else: [pause: medium] - - x: "." - -- name: intent-literal-silent - tag: [mi, mo, mn] - match: "contains(@data-intent-property, ':silent:')" - # say nothing - replace: [] - -# handling of negative numbers that come from 'intent' is hard -- we do something that is close to right here -- name: intent-literal-negative-number - tag: mn - match: "starts-with(text(), '-')" - replace: - - t: "minus" # phrase(10 'minus' 4 equals 6) - - x: "translate(text(), '-_', '')" - -- name: default - tag: square-root - match: "." - replace: - - test: - if: "$Verbosity!='Terse'" - then: [t: "the"] # phrase('the' square root of 25) - - test: - if: "$ClearSpeak_Roots = 'PosNegSqRoot' or $ClearSpeak_Roots = 'PosNegSqRootEnd'" - then: - - bookmark: "*[1]/@id" - - test: - if: "parent::*[self::m:minus and count(*)=1]" - then: [t: "negative"] # phrase(minus 4 is a 'negative' number) - else: [t: "positive"] # phrase(10 is a 'positive' number) - - t: "square root" # phrase(8 is the 'square root' of 64) - - test: - if: "$Verbosity!='Terse'" - then: [t: "of"] # phrase(the square root 'of' 5) - else: [pause: short] - - x: "*[1]" - - test: - - if: "$ClearSpeak_Roots = 'RootEnd' or $ClearSpeak_Roots = 'PosNegSqRootEnd'" - then: - - pause: short - - t: "end root" # phrase(the square root of x 'end root') - - pause: medium - - else_if: "IsNode(*[1], 'simple')" - then: [pause: short] - else: [pause: long] - -- name: default - tag: root - match: "." - replace: - - test: - if: "$Verbosity!='Terse'" - then: [t: "the"] # phrase(6 is 'the' square root of 36) - - test: - if: "$ClearSpeak_Roots = 'PosNegSqRoot' or $ClearSpeak_Roots = 'PosNegSqRootEnd'" - then: - - test: - if: "parent::*[(self::m:minus or self::m:plus) and count(*)=1]" - then: [bookmark: "parent/@id"] - - test: - if: "parent::m:minus" - then: [t: "negative"] # phrase(minus 6 is a 'negative' number) - else: [t: "positive"] # phrase(10 is a 'positive' number) - - test: - if: "*[2][self::m:mn and not(contains(., '.'))]" - then_test: - - if: "*[2][.='2']" - then: [t: "square root"] # phrase(5 is the 'square root' of 25) - - else_if: "*[2][.='3']" - then: [t: "cube root"] # phrase(5 is the 'cube root' of 625) - - else: [x: "ToOrdinal(*[2])", t: "root"] # phrase(the square 'root' of 25) - else: - - test: - if: "*[2][self::m:mi][string-length(.)=1]" - then: - - x: "*[2]" - - pronounce: [text: "-th", ipa: "θ", sapi5: "th", eloquence: "T"] - else: [x: "*[2]"] - - t: "root" # phrase(the square 'root' of 36) - - test: - if: "$Verbosity!='Terse'" - then: [t: "of"] # phrase(the square root 'of' 36) - - x: "*[1]" - - test: - if: "$ClearSpeak_Roots = 'RootEnd' or $ClearSpeak_Roots = 'PosNegSqRootEnd'" - then: - - pause: short - - t: "end root" # phrase(start the fifth root of x 'end root') - - pause: medium - else_test: - if: "IsNode(*[1], 'simple')" - then: [pause: short] - else: [pause: long] - -# The 'negative' rule interacts with the msqrt/mroot rules as those might pick off this case ("the negative square root of x") -- name: negative_and_positive - tag: [plus, minus] - match: "count(*)=1 and contains(@data-intent-property, ':prefix:')" - replace: - - test: - if: - - "*[1][self::m:square-root or self::m:root] and" - - "($ClearSpeak_Roots = 'PosNegSqRoot' or $ClearSpeak_Roots = 'PosNegSqRootEnd')" - then: [t: ""] - else: - - bookmark: "@id" - - test: - if: "self::m:minus" - then: [t: "negative"] # phrase(minus 5 is a 'negative' number) - else: [t: "positive"] # phrase(7 is a 'positive' number) - - x: "*[1]" - -# Fraction rules -# Mixed numbers mostly "just work" because the invisible char reads as "and" and other parts read properly on their own - -# Units (e.g., meters per second) -- name: per-fraction - tag: fraction - match: - - "$ClearSpeak_Fractions='Per' or" - - "(BaseNode(*[1])[contains(@data-intent-property, ':unit') or" - - " ( self::m:mrow and count(*)=3 and" # maybe a bit paranoid checking the structure... - - " *[1][self::m:mn] and *[2][.='\u2062'] and BaseNode(*[3])[contains(@data-intent-property, ':unit')] ) ] and" - - " BaseNode(*[2])[contains(@data-intent-property, ':unit')] )" - replace: - - x: "*[1]" - - t: "per" # phrase('5 meters 'per' second) - - x: "*[2]" - -- name: common-fraction - tag: fraction - match: - - "($ClearSpeak_Fractions='Auto' or $ClearSpeak_Fractions='Ordinal' or $ClearSpeak_Fractions='EndFrac') and" - - "*[1][self::m:mn][not(contains(., $DecimalSeparators)) and ($ClearSpeak_Fractions='Ordinal' or text()<20)] and" - - "*[2][self::m:mn][not(contains(., $DecimalSeparators)) and ($ClearSpeak_Fractions='Ordinal' or (2<= text() and text()<=10))]" - variables: [IsPlural: "*[1]!=1"] - replace: - - x: "*[1]" - - x: "ToOrdinal(*[2], true(), $IsPlural)" # extra args specify fractional ordinal and whether it is plural - -- name: fraction-over-simple - tag: fraction - match: - - "($ClearSpeak_Fractions='Over' or $ClearSpeak_Fractions='FracOver' or $ClearSpeak_Fractions='OverEndFrac') or" - - "( not($ClearSpeak_Fractions='General' or $ClearSpeak_Fractions='GeneralEndFrac') and" - - " (IsNode(*[1],'simple') and IsNode(*[2],'simple')) )" # simple fraction in ClearSpeak spec - replace: - - test: - if: "$ClearSpeak_Fractions='FracOver'" - then: - - test: - if: "$Verbosity!='Terse'" - then: [ot: "the"] - - t: "fraction" # phrase(the 'fraction' with 3 over 4) - - x: "*[1]" - - t: "over" # phrase(the fraction 3 'over' 4) - - x: "*[2]" - - test: - # very ugly!!! -- replicate nested ordinal fraction as they are an exception - if: "$ClearSpeak_Fractions='OverEndFrac' or ($ClearSpeak_Fractions='EndFrac' and not( ($ClearSpeak_Fractions='Auto' or $ClearSpeak_Fractions='Ordinal' or $ClearSpeak_Fractions='EndFrac') and *[1][*[1][self::m:mn][not(contains(., '.')) and ($ClearSpeak_Fractions='Ordinal' or text()<20)] and *[2][self::m:mn][not(contains(., '.')) and ($ClearSpeak_Fractions='Ordinal' or (2<= text() and text()<=10))] ] and *[2][*[1][self::m:mn][not(contains(., '.')) and ($ClearSpeak_Fractions='Ordinal' or text()<20)] and *[2][self::m:mn][not(contains(., '.')) and ($ClearSpeak_Fractions='Ordinal' or (2<= text() and text()<=10))] ] ) )" - then: - - pause: short - - t: "end fraction" # phrase(7 over 8 'end fraction') - - pause: short - -- # fraction with text or numbers followed by text in both numerator and denominator - name: fraction-over-text - tag: fraction - match: - - "not($ClearSpeak_Fractions='General' or $ClearSpeak_Fractions='GeneralEndFrac') and" - - "( " - - " ((*[1][self::m:mi or self::m:mtext][string-length(.)>1]) or " # fractions with text - - " (*[1][self::m:mrow][count(*)=3][ " - - " *[1][self::m:mn] and " - - " *[2][self::m:mo][.='⁢'] and " # invisible times - - " *[3][self::m:mi or self::m:mtext][string-length(.)>1] ]) ) and" - - " ((*[2][self::m:mi or self::m:mtext][string-length(.)>1]) or " # fractions with text - - " (*[2][self::m:mrow][count(*)=3][ " - - " *[1][self::m:mn] and " - - " *[2][self::m:mo][.='⁢'] and " # invisible times - - " *[3][self::m:mi or self::m:mtext][string-length(.)>1] ]) )" - - ")" - replace: - - x: "*[1]" - - t: "over" # phrase(the fraction 3 'over' 4) - - x: "*[2]" - - test: - if: "$ClearSpeak_Fractions='EndFrac' or $ClearSpeak_Fractions='OverEndFrac'" - then: - - pause: short - - t: "end fraction" # phrase(7 over 8 'end fraction') - - pause: short - -- name: default - tag: fraction - match: "." - replace: - - ot: "the" # phrase(5 is 'the' square toot of 25) - - t: "fraction with numerator" # phrase(the 'fraction with numerator' 6) - - test: - if: "not(IsNode(*[1], 'simple'))" - then: [pause: medium] - - x: "*[1]" - - pause: medium - - t: "and denominator" # phrase(the fraction with numerator 5 'and denominator' 8) - - x: "*[2]" - - pause: long - - test: - if: "$ClearSpeak_Fractions='EndFrac' or $ClearSpeak_Fractions='GeneralEndFrac'" - then: - - pause: short - - t: "end fraction" # phrase(the fraction with 3 over 4 'end fraction') - - pause: short - -# rules for functions raised to a power -# these could have been written on 'mrow' but putting them on msup seems more specific -# to see if it is a function, we look right to see if the following sibling is apply-function -- name: ClearSpeak-function-inverse - tag: inverse-function - match: "." - replace: - - test: - if: "$ClearSpeak_Trig = 'TrigInverse'" - then: [x: "*[1]", bookmark: "*[2]/@id", t: "inverse"] # phrase(8 over 5 is the 'inverse' of 5 over 8) - else_test: - if: "$ClearSpeak_Trig = 'ArcTrig'" - then: [bookmark: "*[2]/@id", t: "arc", x: "*[1]"] # phrase(the 'arc' of a circle) - else: [bookmark: "*[2]/@id", t: "inverse", x: "*[1]"] # default/Auto # phrase(8 over 5 is the 'inverse' of 5 over 8) - -- name: function-squared-or-cubed - tag: power - match: - - "*[2][self::m:mn][.='2' or .='3'] and" - - "following-sibling::*[1][self::m:mo][.='⁡']" #invisible function apply - replace: - - x: "*[1]" - - bookmark: "*[2]/@id" - - test: - if: "*[2][.='2']" - then: [t: "squared"] # phrase(25 equals 5 'squared') - else: [t: "cubed"] # phrase(625 equals 5 'cubed') - -- name: function-power - tag: power - match: - - "following-sibling::*[1][self::m:mo][.='⁡']" #invisible function apply - replace: - - test: - if: "$Verbosity!='Terse'" - then: [t: "the"] # phrase('the' third power of 2) - - bookmark: "*[2]/@id" - - test: - if: "*[2][self::m:mn][not(contains(., '.'))]" - then: [x: "ToOrdinal(*[2])"] - else: [x: "*[2]"] - - t: "power of" # phrase(the third 'power of' 6) - - pause: short - - x: "*[1]" - -- name: AfterPower-nested - tag: power - match: # directly a superscript or an mrow that contains a superscript - - "$ClearSpeak_Exponents = 'AfterPower' and" - - "*[2][self::m:power or self::m:power or self::m:mrow[m:power]]" - replace: - - x: "*[1]" - - t: "raised to the exponent" # phrase(5 'raised to the exponent' x plus 1) - - pause: short - - x: "*[2]" - - pause: short - - t: "end exponent" # phrase(5 raised to the exponent x plus 1 'end exponent') - -- name: AfterPower-default - tag: power - match: "$ClearSpeak_Exponents = 'AfterPower'" - replace: - - x: "*[1]" - - t: "raised to the power" # phrase(x is 'raised to the power' 4) - - x: "*[2]" - - pause: short - -- name: squared - tag: power - match: "*[2][self::m:mn][.='2'] and $ClearSpeak_Exponents = 'Auto'" - replace: - - x: "*[1]" - - bookmark: "*[2]/@id" - - t: "squared" # phrase(7 'squared' equals 49) - -- name: cubed - tag: power - match: "*[2][self::m:mn][.='3'] and $ClearSpeak_Exponents = 'Auto'" - replace: - - x: "*[1]" - - bookmark: "*[2]/@id" - - t: "cubed" # phrase(5 'cubed' equals 125) - -- name: simple-integer - tag: power - match: "*[2][self::m:mn][not(contains(., '.'))]" - replace: - - x: "*[1]" - - t: "to the" # phrase(2 raised 'to the' power 7) - - test: - if: "*[2][.>0]" - then: [x: "ToOrdinal(*[2])"] - else: [x: "*[2]"] - - test: - if: "$ClearSpeak_Exponents != 'Ordinal'" - then: [t: "power"] # phrase(2 raised to the 'power' 7) - -- name: simple-negative-integer - tag: power - match: - - "*[2][self::m:minus and count(*)=1 and " - - " *[1][self::m:mn][not(contains(., '.'))]" - - " ]" - replace: - - x: "*[1]" - - t: "to the" # phrase(2 raised 'to the' power 7) - - x: "*[2]" - - test: - if: "$ClearSpeak_Exponents != 'Ordinal'" - then: [t: "power"] # phrase(2 raised to the 'power' 7) - -- name: simple-var - tag: power - match: "*[2][self::m:mi][string-length(.)=1]" - replace: - - x: "*[1]" - - t: "to the" # phrase(3 raised 'to the' power 7) - - x: "*[2]" - - pronounce: [text: "-th", ipa: "θ", sapi5: "th", eloquence: "T"] - - test: - if: "$ClearSpeak_Exponents != 'Ordinal'" - then: [t: "power"] # phrase(2 raised to the 'power' 7) - -# match nested exponent, where the nested exponent is has the power 2 or 3 (n below) -# [xxx]^n, - [xxx]^n, [xxx] var^n, -[xxx] var^n -# where xxx is a number or common fraction (or a var in the first two forms) -# short of creating a specialized built-in function, I don't see a way to eliminate a lot of repetition in the matches -# also really bad is that the test of a common fraction is replicated here (four times!) -# Note: the ClearSpeak doc doesn't say these only apply when the pref is "Auto", -# but the test cases all fall back to "raised to the exponent" when not "Auto" -# If these are allowed for non-Auto values, then you end up with "...power power...". -- # [xxx]^n - name: nested-squared-or-cubed - tag: power - match: - - "$ClearSpeak_Exponents = 'Auto' and" - - "*[2][self::m:power][" - - " *[2][self::m:mn][.='2' or .='3'] and " # exp is 2 or 3 - # base is mn, mi, common fraction ([xxx] case) - - " *[1][self::m:mn or self::m:mi or " - - " self::m:fraction[*[1][self::m:mn][not(contains(., '.')) and text()<20] and" - - " *[2][self::m:mn][not(contains(., '.')) and 2<= text() and text()<=10]]" - - " ]" - - " ]" - replace: - - x: "*[1]" - - t: "raised to the" # phrase(x 'raised to the' second power) - - x: "*[2]" - - t: "power" # phrase(x raised to the second 'power') - -- # - [xxx]^n - name: nested-negative-squared-or-cubed - tag: power - match: - - "$ClearSpeak_Exponents = 'Auto' and" - - " *[2][self::m:minus and count(*)=1 and " - - " *[1]/*[1][self::m:power][" - - " *[2][self::m:mn][.='2' or .='3'] and " # exp is 2 or 3" - # base is mn, mi, common fraction ([xxx] case) - - " *[1][self::m:mn or self::m:mi or " - - " self::m:fraction[*[1][self::m:mn][not(contains(., '.')) and text()<20] and" - - " *[2][self::m:mn][not(contains(., '.')) and 2<= text() and text()<=10]]" - - " ]" - - " ]" - - " ]" - replace: - - x: "*[1]" - - t: "raised to the" # phrase(x 'raised to the' second power) - - x: "*[2]" - - t: "power" # phrase(x raised to the second 'power') - -- # [xxx] var^n - name: nested-var-squared-or-cubed - tag: power - match: - - "$ClearSpeak_Exponents = 'Auto' and" - - " *[2][self::m:mrow][count(*)=3][ " - - " *[3][self::m:power][" - - " *[2][self::m:mn][.='2' or .='3'] and " # exp is 2 or 3 - - " *[1][self::m:mi]" - - " ] and " - - " *[2][self::m:mo][.='⁢'] and " # invisible times - # base is mn, or common fraction ([xxx] case) - - " *[1][self::m:mn or " - - " self::m:fraction[*[1][self::m:mn][not(contains(., '.')) and text()<20] and" - - " *[2][self::m:mn][not(contains(., '.')) and 2<= text() and text()<=10]]" - - " ]" - - " ]" - replace: - - x: "*[1]" - - t: "raised to the" # phrase(x 'raised to the' second power) - - x: "*[2]" - - t: "power" # phrase(x raised to the second 'power') - -- # -[xxx] var^n - name: nested-negative-var-squared-or-cubed - tag: power - match: - - "$ClearSpeak_Exponents = 'Auto' and" - - " *[2][self::m:mrow][count(*)=3][ " - - " *[3][self::m:power][" - - " *[2][self::m:mn][.='2' or .='3'] and " # exp is 2 or 3 - - " *[1][self::m:mi]" - - " ] and " - - " *[2][self::m:mo][.='⁢'] and " # invisible times - - " *[1][self::m:minus and count(*)=1 and " - # base is mn, or common fraction ([xxx] case) - - " *[1][self::m:mn or " - - " self::m:fraction[*[1][self::m:mn][not(contains(., '.')) and text()<20] and" - - " *[2][self::m:mn][not(contains(., '.')) and 2<= text() and text()<=10]]" - - " ]" - - " ]" - - " ]" - replace: - - x: "*[1]" - - t: "raised to the" # phrase(x 'raised to the' second power) - - x: "*[2]" - - t: "power" # phrase(x raised to the second 'power') - -- name: default-exponent-power - tag: power - match: # directly a superscript or an mrow that contains a superscript - - "*[2][self::m:power or self::m:power or self::m:mrow[m:power]]" - replace: - - x: "*[1]" - - t: "raised to the exponent" # phrase(x is 'raised to the exponent') - - pause: short - - x: "*[2]" - - pause: short - - t: "end exponent" # phrase(and now 'end exponent' has been reached) - -- name: default - tag: power - match: "." - replace: - - x: "*[1]" - - t: "raised to the" # phrase(x 'raised to the' second power) - - x: "*[2]" - - t: "power" # phrase(x raised to the second 'power') - -# -# Some rules on mrows -# -- # the inference rules lump absolute value and cardinality together, so those rules are implemented here - name: ClearSpeak-absolute-value - tag: absolute-value - match: "." - variables: [WordToSay: "IfThenElse($ClearSpeak_AbsoluteValue = 'Cardinality', 'cardinality', 'absolute value')"] - replace: - - test: - if: "$Verbosity!='Terse'" - then: [t: "the"] # phrase('the' absolute value of 25) - - x: "$WordToSay" - - t: "of" # phrase(the absolute value 'of' 25) - - x: "*[1]" - - test: - if: "$ClearSpeak_AbsoluteValue = 'AbsEnd'" - then: - - pause: short - - t: "end" # phrase('end' absolute value) - - x: "$WordToSay" - - pause: short - -- name: set - tag: set - match: "." - replace: - - test: - - if: "count(*)=0" - then: [t: "the empty set"] # phrase('the empty set') - - else_if: "count(*)=2" - then: - - test: - if: "$Verbosity!='Terse'" - then: [t: "the"] # phrase('the' empty set) - - t: "empty set" # phrase(the 'empty set') - - else_if: "count(*[1]/*)=3 and *[1]/*[2][self::m:mo][.=':' or .='|' or .='∣']" - then: - - test: - if: "$Verbosity!='Terse'" - then: [t: "the"] # phrase('the' set of all integers) - - t: "set of" # phrase(this is a 'set of' numbers) - - test: - if: "$ClearSpeak_Sets != 'woAll'" - then: [t: "all"] # phrase(the set of 'all' integers) - - x: "*[1]/*[1]" - - t: "such that" # phrase(the set S 'such that' x is less than y) - - x: "*[1]/*[3]" - else: - - test: - if: "$ClearSpeak_Sets != 'SilentBracket'" - then: - - test: - if: "$Verbosity!='Terse'" - then: [t: "the"] # phrase('the' set of integers) - - t: "set" # phrase(this is a 'set' of integers) - - x: "*[1]" - -- # intervals are controlled by a ClearSpeak Preference -- parens/brackets don't have to match, so we avoid IsBracketed - # alternatively, we could have four (or ten) rules, but there is a lot of duplication if we do that - # this one rule handles all ten cases listed as part $ClearSpeak_Paren = 'Interval' - # note that *[2] is an mrow with X, ",", Y, so getting X or Y is a double index - name: ClearSpeak-intervals # avoid overriding with default "intervals" name - variables: - - is_intervals_start_infinity: "*[1][self::m:minus and count(*)=1 and *[1][.='∞']]" - - is_intervals_end_infinity: "*[2][.='∞'or (self::m:plus and count(*)=1 and *[1][.='∞'])]" - tag: [open-interval, open-closed-interval, closed-interval, closed-open-interval] - match: "." - replace: - - t: "the interval from" # phrase('the interval from' a to b) - - x: "*[1]" - - t: "to" # phrase(the interval from a 'to' b) - - x: "*[2]" - - pause: short - - test: - if: "not($is_intervals_start_infinity)" - then: - - test: - if: "starts-with(name(.), 'open')" - then: [t: "not"] # phrase(the interval from a to b 'not' including b) - - t: "including" # phrase(the interval from a to b not 'including' b) - - x: "*[1]" - # logic to deal with [not] arg #1 - - test: - if: "not($is_intervals_start_infinity or $is_intervals_end_infinity)" - then_test: - - if: "name(.)='open-interval'" - then: [t: "or"] # phrase(the interval including a 'or' b ) - - else_if: "name(.)='closed-interval'" - then: [t: "and"] # phrase(the interval including a 'and' b) - else: [t: "but"] # phrase(the interval including a 'but' not b) - # some ugly logic dealing with connectives: or, but, but, and (cleaner to be part of next clause?) - - test: - if: "not($is_intervals_end_infinity)" - then: - - test: - # there is some asymmetry to the test because of the and/or/but logic above - if: "not( name(.)='open-interval' or name(.)='closed-interval' ) or $is_intervals_start_infinity" - then: - - test: - if: "name(.) = 'open-interval' or name(.) = 'closed-open-interval'" - then: [t: "not"] # phrase(the interval 'not' including a) - - t: "including" # phrase(the interval not 'including' a) - - x: "*[2]" - - # onto the [not] [including]... part -- name: binomial-frac-vector - tag: matrix - match: - - "$ClearSpeak_Matrix = 'Combinatorics' and " - - "count(*[1]/*)=1 and count(*)=2" - replace: - - x: "*[1]/*[1]/*" # mtable/mtr/mtd - - t: "choose" # phrase(the binomial coefficient n 'choose' m) - - x: "*[2]/*[1]/*" - -- name: ClearSpeak-default - tag: [mtr, mlabeledtr] - match: "parent::m:matrix or parent::m:determinant" - variables: [NextLineIsContinuedRow: "following-sibling::*[1][contains(@data-intent-property, ':continued-row:')]"] - replace: - - pause: medium - - t: "row" # phrase(the first 'row' of a matrix) - - x: "count(preceding-sibling::*)+1" - - test: - if: ".[self::m:mlabeledtr]" - then: - - t: "with label" # phrase(the line 'with label' first equation) - - x: "*[1]/*" - - pause: short - - pause: medium - - test: - if: ".[self::m:mlabeledtr]" - then: [x: "*[position()>1]"] - else: [x: "*"] - -- # handle both log and ln - name: ClearSpeak-log - tag: mi - match: ".='log' or .='ln'" - replace: - - bookmark: "@id" - - test: - if: "$Verbosity!='Terse' and not(IsNode(following-sibling::*[2],'simple'))" - then: [t: "the"] # phrase('the' square root of 25) - - test: - - if: ".='log'" - then: [t: "log"] - - else_if: "$ClearSpeak_Log = 'LnAsNaturalLog'" - then: [t: "natural log"] # phrase(the 'natural log' of x) - else: [spell: "'ln'"] - -- name: ClearSpeak-multi-line - tag: [piecewise, system-of-equations, lines] # these are ignored in favor of the ClearSpeak prefs - match: "." - variables: - # Wikipedia has some tables where all the entire first column is empty (e.g., https://en.wikipedia.org/wiki/List_of_trigonometric_identities) - - LineCount: "count(*[not(contains(@data-intent-property, ':continued-row:'))])" - - NextLineIsContinuedRow: "false()" # default value - - IsColumnSilent: true() - replace: - - test: - - if: "$ClearSpeak_MultiLineOverview = 'Auto'" - then: - - x: "$LineCount" - - test: - - if: "($ClearSpeak_MultiLineLabel = 'Auto' and self::m:piecewise) or $ClearSpeak_MultiLineLabel = 'Case'" - then: [t: "case"] # phrase(this is the first 'case' of three cases) - - else_if: "$ClearSpeak_MultiLineLabel = 'Auto' or $ClearSpeak_MultiLineLabel = 'Line' or $ClearSpeak_MultiLineLabel = 'None'" # already dealt with Auto/Case - then: [t: "line"] # phrase(this is the first 'line' of three lines) - - else_if: "$ClearSpeak_MultiLineLabel = 'Constraint'" - then: [t: "constraint"] # phrase(this is the first 'constraint' of three constraints) - - else_if: "$ClearSpeak_MultiLineLabel = 'Equation'" - then: [t: "equation"] # phrase(this is the first 'equation' of three equations) - - else_if: "$ClearSpeak_MultiLineLabel = 'Row'" - then: [t: "row"] # phrase(this is the first 'row' of three rows) - - else_if: "$ClearSpeak_MultiLineLabel = 'Step'" - then: [t: "step"] # phrase(this is the first 'step' of three steps) - # else 'None -- don't say anything' - - test: - - if: "$LineCount != 1" - then: [ct: "s"] # plural # phrase(shown by the letter 's') - - pause: short - - x: "*" - - pause: long - -- name: ClearSpeak-default-multiline - tag: [mtr, mlabeledtr] - match: "parent::m:piecewise or parent::m:system-of-equations or parent::m:lines" - variables: [NextLineIsContinuedRow: "following-sibling::*[1][contains(@data-intent-property, ':continued-row:')]"] - replace: - - test: - if: "not($LineCount=1 or $ClearSpeak_MultiLineLabel='None' or contains(@data-intent-property, ':continued-row:'))" - then: - - pause: medium - - test: - - if: "($ClearSpeak_MultiLineLabel = 'Auto' and parent::m:piecewise) or $ClearSpeak_MultiLineLabel = 'Case'" - then: [t: "case"] # phrase(in this 'case' x is not equal to y) - - else_if: "$ClearSpeak_MultiLineLabel = 'Auto' or $ClearSpeak_MultiLineLabel = 'Line'" # already dealt with Auto/Case - then: [t: "line"] # phrase(the straight 'line' between x and y) - - else_if: "$ClearSpeak_MultiLineLabel = 'Constraint'" - then: [t: "constraint"] # phrase(there is a 'constraint' on possible values) - - else_if: "$ClearSpeak_MultiLineLabel = 'Equation'" - then: [t: "equation"] # phrase(the 'equation' pi r squared gives the area of a circle) - - else_if: "$ClearSpeak_MultiLineLabel = 'Row'" - then: [t: "row"] # phrase(the values on the top 'row' are relevant) - - else_if: "$ClearSpeak_MultiLineLabel = 'Step'" - then: [t: "step"] # phrase(this is a 'step' by step process) - # else 'None -- don't say anything' - - x: "count(preceding-sibling::*[not(contains(@data-intent-property, ':continued-row:'))]) + 1" - - test: - if: "self::m:mlabeledtr" - then: - - t: "with label" # phrase(the diagram is complete 'with label') - - x: "*[1]/*" - - test: - - if: "$ClearSpeak_MultiLineLabel='None'" - then: [pause: xlong] # need a very long pause with no line labels - - else_if: "not(contains(@data-intent-property, ':continued-row:'))" - then: [pause: medium] - - test: - if: "self::m:mlabeledtr" - then: [x: "*[position()>1]"] - else: [x: "*"] - -- name: ClearSpeak_Functions_None - tag: mo - match: - - ".='⁡' and $ClearSpeak_Functions = 'None' and" - - "not(preceding-sibling::*[1][IsInDefinition(., 'TrigFunctionNames')])" # Functions=None does not apply to "trig" functions - replace: - test: - if: "$ClearSpeak_ImpliedTimes = 'None'" - then: [t: ""] - else: [t: "times"] # phrase(5 'times' 3 equals 15) - -- name: no-times - tag: mo - match: - # Note: this rule is also part of the paren rule so that the parens speak - - ".='⁢' and $ClearSpeak_ImpliedTimes = 'None'" - replace: - - t: "" - -- name: ClearSpeak-times - tag: mo - match: - # say "times" when invisible times is followed by parens or a superscript that has a base with parens or "|"s - # if we aren't sure if it is times or not, don't say anything - - ".='⁢' and (not(@data-function-guess) or $ClearSpeak_Functions = 'None') and" - - "not(ancestor-or-self::*[contains(@data-intent-property, ':literal:')]) and (" - - " $ClearSpeak_ImpliedTimes = 'MoreImpliedTimes'" - - " or " - - " following-sibling::*[1][" - - " IsBracketed(., '(', ')') or IsBracketed(., '[', ']') or IsBracketed(., '|', '|') or " - # most of these aren't mentioned in ClearSpeak spec, but are (I think) expected uses of "times" - - " self::m:matrix or self::m:determinant or self::m:binomial or" # followed by parens - - " self::m:square-root or self::m:msqrt or self::m:root or self::m:mroot or" - - " (self::m:msub or self::m:msubsup or" - - " ((self::m:msup or self::m:power) and not(IsNode(*[1], 'leaf') and *[2][self::m:mn and (.=2 or '.=3')]))) and " # followed by msup, etc. - - " (*[1][self::m:mrow[IsBracketed(., '(', ')') or IsBracketed(., '[', ']') or IsBracketed(., '|', '|')] or " - - " self::m:matrix or self::m:determinant] or" # base has parens - - " not(IsNode(*[2], 'simple')) or " - - " (self::m:msubsup and not(IsNode(*[3], 'simple')))" - - " )" - - " ]" - # other possibility is the preceding element has parens (but not the following) - # this is not mentioned in the ClearSpeak rules or examples but seems like it should say "times". E.g, |x| y - - " or " - - " preceding-sibling::*[1][" - - " IsBracketed(., '(', ')') or IsBracketed(., '[', ']') or IsBracketed(., '|', '|')]" # followed by parens - - " )" - replace: - - t: "times" # phrase(5 'times' 3 equals 15) - -- name: no-say-parens - tag: mrow - match: - - "parent::*[not(self::m:msup) and not(self::m:msub) and not(self::m:msubsup) and not(self::m:power) and" - - " not(self::m:math) ] and " # rule out [x] standing alone - - "( IsBracketed(., '(', ')') or IsBracketed(., '[', ']') ) and " - - "not( $ClearSpeak_Functions = 'None' and " - - " (preceding-sibling::*[1][.='⁡'] or following-sibling::*[1][.='⁡']) ) and " - - "not( $ClearSpeak_ImpliedTimes = 'None' and " - - " (preceding-sibling::*[1][.='⁢'] or following-sibling::*[1][.='⁢']) ) and " - - "IsNode(*[2], 'simple') and" - - "not(preceding-sibling::*[1][.='\u2062' and @data-function-guess]) and" - - "not(ancestor-or-self::*[contains(@data-intent-property, ':literal:')])" - # missing clause: 'a positive fraction that is spoken as an ordinal - # (either by the Ordinal preference or by the default rules)' - replace: - - x: "*[2]" - -- include: "SharedRules/geometry.yaml" -- include: "SharedRules/linear-algebra.yaml" -- include: "SharedRules/general.yaml" -- include: "SharedRules/default.yaml" +--- +- name: pause + tag: "!*" + match: "not(self::m:math) and not($MatchingPause) and @data-intent-property[contains(., ':pause')]" + replace: + - with: + variables: [MatchingPause: "true()"] + replace: + - test: + - if: "contains(@data-intent-property, ':pause-long')" + then: [pause: long] + - else_if: "contains(@data-intent-property, ':pause-short')" + then: [pause: short] + else: [pause: medium] + - x: "." + +- name: intent-literal-silent + tag: [mi, mo, mn] + match: "contains(@data-intent-property, ':silent:')" + # say nothing + replace: [] + +# handling of negative numbers that come from 'intent' is hard -- we do something that is close to right here +- name: intent-literal-negative-number + tag: mn + match: "starts-with(text(), '-')" + replace: + - T: "mínusz" # phrase(10 'minus' 4 equals 6) + - x: "translate(text(), '-_', '')" + +- name: default + tag: square-root + match: "." + replace: + - test: + if: "$Verbosity!='Terse'" + then: [T: ""] # phrase('the' square root of 25) + - test: + if: "$ClearSpeak_Roots = 'PosNegSqRoot' or $ClearSpeak_Roots = 'PosNegSqRootEnd'" + then: + - bookmark: "*[1]/@id" + - test: + if: "parent::*[self::m:minus and count(*)=1]" + then: [T: "negatív"] # phrase(minus 4 is a 'negative' number) + else: [T: "pozitív"] # phrase(10 is a 'positive' number) + - T: "négyzetgyök" # phrase(8 is the 'square root' of 64) + - test: + if: "$Verbosity!='Terse'" + then: [t: ""] # phrase(the square root 'of' 5) - magyarban nem kell kötőszó + else: [pause: short] + - x: "*[1]" + - test: + - if: "$ClearSpeak_Roots = 'RootEnd' or $ClearSpeak_Roots = 'PosNegSqRootEnd'" + then: + - pause: short + - T: "gyök vége" # phrase(the square root of x 'end root') + - pause: medium + - else_if: "IsNode(*[1], 'simple')" + then: [pause: short] + else: [pause: long] + +- name: default + tag: root + match: "." + replace: + - test: + if: "$Verbosity!='Terse'" + then: [T: "a"] # phrase(6 is 'the' square root of 36) + - test: + if: "$ClearSpeak_Roots = 'PosNegSqRoot' or $ClearSpeak_Roots = 'PosNegSqRootEnd'" + then: + - test: + if: "parent::*[(self::m:minus or self::m:plus) and count(*)=1]" + then: [bookmark: "parent/@id"] + - test: + if: "parent::m:minus" + then: [T: "negatív"] # phrase(minus 6 is a 'negative' number) + else: [T: "pozitív"] # phrase(10 is a 'positive' number) + - test: + if: "*[2][self::m:mn and not(contains(., '.'))]" + then_test: + - if: "*[2][.='2']" + then: [T: "négyzetgyök"] # phrase(5 is the 'square root' of 25) + - else_if: "*[2][.='3']" + then: [T: "köbgyök"] # phrase(5 is the 'cube root' of 625) + - else: [x: "ToOrdinal(*[2])", T: "gyök"] # phrase(the square 'root' of 25) + else: + - test: + if: "*[2][self::m:mi][string-length(.)=1]" + then: + - x: "*[2]" + - pronounce: [text: "-edik", ipa: "ɛdik", sapi5: "edik", eloquence: "edik"] + else: [x: "*[2]"] + - T: "gyök" # phrase(the square 'root' of 36) + - test: + if: "$Verbosity!='Terse'" + then: [T: ""] # phrase(the square root 'of' 36) + - x: "*[1]" + - test: + if: "$ClearSpeak_Roots = 'RootEnd' or $ClearSpeak_Roots = 'PosNegSqRootEnd'" + then: + - pause: short + - T: "gyök vége" # phrase(start the fifth root of x 'end root') + - pause: medium + else_test: + if: "IsNode(*[1], 'simple')" + then: [pause: short] + else: [pause: long] + +# The 'negative' rule interacts with the msqrt/mroot rules as those might pick off this case ("the negative square root of x") +- name: negative_and_positive + tag: [plus, minus] + match: "count(*)=1 and contains(@data-intent-property, ':prefix:')" + replace: + - test: + if: + - "*[1][self::m:square-root or self::m:root] and" + - "($ClearSpeak_Roots = 'PosNegSqRoot' or $ClearSpeak_Roots = 'PosNegSqRootEnd')" + then: [T: ""] + else: + - bookmark: "@id" + - test: + if: "self::m:minus" + then: [T: "negatív"] # phrase(minus 5 is a 'negative' number) + else: [T: "pozitív"] # phrase(7 is a 'positive' number) + - x: "*[1]" + +# Fraction rules +# Mixed numbers mostly "just work" because the invisible char reads as "and" and other parts read properly on their own + +# Units (e.g., meters per second) +- name: per-fraction + tag: fraction + match: + - "$ClearSpeak_Fractions='Per' or" + - "(BaseNode(*[1])[contains(@data-intent-property, ':unit') or" + - " ( self::m:mrow and count(*)=3 and" # maybe a bit paranoid checking the structure... + - " *[1][self::m:mn] and *[2][.='\u2062'] and BaseNode(*[3])[contains(@data-intent-property, ':unit')] ) ] and" + - " BaseNode(*[2])[contains(@data-intent-property, ':unit')] )" + replace: + - x: "*[1]" + - T: "per" # phrase('5 meters 'per' second) + - x: "*[2]" + +- name: common-fraction + tag: fraction + match: + - "($ClearSpeak_Fractions='Auto' or $ClearSpeak_Fractions='Ordinal' or $ClearSpeak_Fractions='EndFrac') and" + - "*[1][self::m:mn][not(contains(., $DecimalSeparators)) and ($ClearSpeak_Fractions='Ordinal' or text()<20)] and" + - "*[2][self::m:mn][not(contains(., $DecimalSeparators)) and ($ClearSpeak_Fractions='Ordinal' or (2<= text() and text()<=10))]" + variables: [IsPlural: "*[1]!=1"] + replace: + - x: "*[1]" + - x: "ToOrdinal(*[2], true(), $IsPlural)" # extra args specify fractional ordinal and whether it is plural + +- name: fraction-over-simple + tag: fraction + match: + - "($ClearSpeak_Fractions='Over' or $ClearSpeak_Fractions='FracOver' or $ClearSpeak_Fractions='OverEndFrac') or" + - "( not($ClearSpeak_Fractions='General' or $ClearSpeak_Fractions='GeneralEndFrac') and" + - " (IsNode(*[1],'simple') and IsNode(*[2],'simple')) )" # simple fraction in ClearSpeak spec + replace: + - test: + if: "$ClearSpeak_Fractions='FracOver'" + then: + - test: + if: "$Verbosity!='Terse'" + then: [OT: "a"] + - T: "tört" # phrase(the 'fraction' with 3 over 4) + - x: "*[1]" + - T: "per" # phrase(the fraction 3 'over' 4) - magyarban a "per" a leggyakoribb + - x: "*[2]" + - test: + # very ugly!!! -- replicate nested ordinal fraction as they are an exception + if: "$ClearSpeak_Fractions='OverEndFrac' or ($ClearSpeak_Fractions='EndFrac' and not( ($ClearSpeak_Fractions='Auto' or $ClearSpeak_Fractions='Ordinal' or $ClearSpeak_Fractions='EndFrac') and *[1][*[1][self::m:mn][not(contains(., '.')) and ($ClearSpeak_Fractions='Ordinal' or text()<20)] and *[2][self::m:mn][not(contains(., '.')) and ($ClearSpeak_Fractions='Ordinal' or (2<= text() and text()<=10))] ] and *[2][*[1][self::m:mn][not(contains(., '.')) and ($ClearSpeak_Fractions='Ordinal' or text()<20)] and *[2][self::m:mn][not(contains(., '.')) and ($ClearSpeak_Fractions='Ordinal' or (2<= text() and text()<=10))] ] ) )" + then: + - pause: short + - T: "tört vége" # phrase(7 over 8 'end fraction') + - pause: short + +- # fraction with text or numbers followed by text in both numerator and denominator + name: fraction-over-text + tag: fraction + match: + - "not($ClearSpeak_Fractions='General' or $ClearSpeak_Fractions='GeneralEndFrac') and" + - "( " + - " ((*[1][self::m:mi or self::m:mtext][string-length(.)>1]) or " # fractions with text + - " (*[1][self::m:mrow][count(*)=3][ " + - " *[1][self::m:mn] and " + - " *[2][self::m:mo][.='⁢'] and " # invisible times + - " *[3][self::m:mi or self::m:mtext][string-length(.)>1] ]) ) and" + - " ((*[2][self::m:mi or self::m:mtext][string-length(.)>1]) or " # fractions with text + - " (*[2][self::m:mrow][count(*)=3][ " + - " *[1][self::m:mn] and " + - " *[2][self::m:mo][.='⁢'] and " # invisible times + - " *[3][self::m:mi or self::m:mtext][string-length(.)>1] ]) )" + - ")" + replace: + - x: "*[1]" + - T: "per" # phrase(the fraction 3 'over' 4) + - x: "*[2]" + - test: + if: "$ClearSpeak_Fractions='EndFrac' or $ClearSpeak_Fractions='OverEndFrac'" + then: + - pause: short + - T: "tört vége" # phrase(7 over 8 'end fraction') + - pause: short + +- name: default + tag: fraction + match: "." + replace: + - OT: "a" # phrase(5 is 'the' square toot of 25) + - T: "tört, melynek számlálója" # phrase(the 'fraction with numerator' 6) + - test: + if: "not(IsNode(*[1], 'simple'))" + then: [pause: medium] + - x: "*[1]" + - pause: medium + - T: "nevezője pedig" # phrase(the fraction with numerator 5 'and denominator' 8) + - x: "*[2]" + - pause: long + - test: + if: "$ClearSpeak_Fractions='EndFrac' or $ClearSpeak_Fractions='GeneralEndFrac'" + then: + - pause: short + - T: "tört vége" # phrase(the fraction with 3 over 4 'end fraction') + - pause: short + +# rules for functions raised to a power +# these could have been written on 'mrow' but putting them on msup seems more specific +# to see if it is a function, we look right to see if the following sibling is apply-function +- name: ClearSpeak-function-inverse + tag: inverse-function + match: "." + replace: + - test: + if: "$ClearSpeak_Trig = 'TrigInverse'" + then: [x: "*[1]", bookmark: "*[2]/@id", T: "inverz"] # phrase(8 over 5 is the 'inverse' of 5 over 8) + else_test: + if: "$ClearSpeak_Trig = 'ArcTrig'" + then: [bookmark: "*[2]/@id", T: "arkusz", x: "*[1]"] # phrase(the 'arc' of a circle) + else: [bookmark: "*[2]/@id", T: "inverz", x: "*[1]"] # default/Auto # phrase(8 over 5 is the 'inverse' of 5 over 8) + +# Handles functions squared or cubed, where the base is not a trig function. +- name: function-squared-or-cubed # audit-ignore + tag: power + match: + - "*[2][self::m:mn][.='2' or .='3'] and" # the exponent is 2 or 3 + - "following-sibling::*[1][self::m:mo][.='⁡']" #invisible function apply + replace: + - x: "*[1]" # say the trig function name + - bookmark: "*[2]/@id" + - test: + if: "not(IsInDefinition(*[1], 'TrigFunctionNames')) and *[2][.='2']" # the base is not a trig function + then: [T: "a négyzeten"] # say "squared" + else_test: + if: "not(IsInDefinition(*[1], 'TrigFunctionNames'))" # the base is not a trig function + then: [T: "a köbön"] # say "cubed" + else: [T: ""] + +# Handles trig functions with simple arguments (mi or mn), for both 2, 3 and general exponents. +- name: trig-power-argument-before-exponent-general # audit-ignore + tag: [mi, mn] + match: + - "preceding-sibling::*[1][self::m:mo][.='⁡'] and" + - "preceding-sibling::*[2][self::m:power[IsInDefinition(*[1], 'TrigFunctionNames')]]" # if the previous sibling is function-apply and previous previous sibling is trig power + replace: + - test: + - if: "preceding-sibling::*[2]/*[2][self::m:mn][.='2']" # if the exponent is 2 + then: + - x: "text()" # say the argument of the trig function + - T: "a négyzeten" + - else_if: "preceding-sibling::*[2]/*[2][self::m:mn][.='3']" # if the exponent is 3 + then: + - x: "text()" # say the argument of the trig function + - T: "a köbön" + else: + - pause: short + - x: "text()" # say the argument of the function + - pause: short + - T: "a(z)" + - test: + if: "preceding-sibling::*[2]/*[2][self::m:mn][not(contains(., '.'))]" # if the exponent is an integer + then: [x: "ToOrdinal(preceding-sibling::*[2]/*[2])"] # say the ordinal form + else: [x: "preceding-sibling::*[2]/*[2]"] # else, say the exponent + - T: "hatványon" + +# Handles trig functions with grouped arguments (parenthesized or bracketed mrow), for both 2, 3 and general exponents. +- name: trig-power-grouped-argument-before-exponent-general # audit-ignore + tag: [mo, mrow] + match: + - "(self::m:mo[.=')'] and preceding-sibling::*[2][self::m:mo][.='⁡'] and preceding-sibling::*[3][self::m:power[IsInDefinition(*[1], 'TrigFunctionNames')]])" + - "or" + - "(self::m:mrow[IsBracketed(., '(', ')')] and preceding-sibling::*[1][self::m:mo][.='⁡'] and preceding-sibling::*[2][self::m:power[IsInDefinition(*[1], 'TrigFunctionNames')]])" + replace: + - test: + if: "self::m:mo" # if the current node is ) + then: + - x: "text()" # say the argument of the function + - test: + - if: "preceding-sibling::*[3]/*[2][self::m:mn][.='2']" # if the exponent is 2 + then: [T: "a négyzeten"] + - else_if: "preceding-sibling::*[3]/*[2][self::m:mn][.='3']" # if the exponent is 3 + then: [T: "a köbön"] + else: + - T: "a(z)" + - test: + if: "preceding-sibling::*[3]/*[2][self::m:mn][not(contains(., '.'))]" # if the exponent is an integer + then: [x: "ToOrdinal(preceding-sibling::*[3]/*[2])"] # say the ordinal form + else: [x: "preceding-sibling::*[3]/*[2]"] # else, say the exponent + - T: "hatványon" + else: # if the current node is an with parentheses + - x: "*[1]" + - x: "*[2]" + - x: "*[3]" + - test: + - if: "preceding-sibling::*[2]/*[2][self::m:mn][.='2']" # if the exponent is 2 + then: [T: "a négyzeten"] + - else_if: "preceding-sibling::*[2]/*[2][self::m:mn][.='3']" # if the exponent is 3 + then: [T: "a köbön"] + else: + - T: "a(z)" + - test: + if: "preceding-sibling::*[2]/*[2][self::m:mn][not(contains(., '.'))]" # if the exponent is an integer + then: [x: "ToOrdinal(preceding-sibling::*[2]/*[2])"] # say the ordinal form + else: [x: "preceding-sibling::*[2]/*[2]"] # else, say the exponent + - T: "hatványon" + +- name: function-power # audit-ignore + tag: power + match: + - "following-sibling::*[1][self::m:mo][.='⁡'] and" #invisible function apply + - "not(*[1][IsInDefinition(., 'TrigFunctionNames')])" + replace: + - test: + if: "$Verbosity!='Terse'" + then: [T: ""] # phrase('the' third power of 2) + - bookmark: "*[2]/@id" + - test: + if: "*[2][self::m:mn][not(contains(., '.'))]" + then: [x: "ToOrdinal(*[2])"] + else: [x: "*[2]"] + - T: "hatványon" # phrase(the third 'power of' 6) + - pause: short + - x: "*[1]" + +# Handles trig function powers (non-2/3) at the base node so generic power rules do not speak the base/exponent too early. +- name: trig-function-power-base-only # audit-ignore + tag: power + match: + - "following-sibling::*[1][self::m:mo][.='⁡'] and" + - "*[1][IsInDefinition(., 'TrigFunctionNames')] and" + - "not(*[2][self::m:mn][.='2' or .='3'])" + replace: + - x: "*[1]" + +- name: AfterPower-nested + tag: power + match: # directly a superscript or an mrow that contains a superscript + - "$ClearSpeak_Exponents = 'AfterPower' and" + - "*[2][self::m:power or self::m:power or self::m:mrow[m:power]]" + replace: + - x: "*[1]" + - T: "a következő kitevőre emelve:" # phrase(5 'raised to the exponent' x plus 1) + - pause: short + - x: "*[2]" + - pause: short + - T: "kitevő vége" # phrase(5 raised to the exponent x plus 1 'end exponent') + +- name: AfterPower-default + tag: power + match: "$ClearSpeak_Exponents = 'AfterPower'" + replace: + - x: "*[1]" + - T: "a következő hatványra emelve:" # phrase(x is 'raised to the power' 4) + - x: "*[2]" + - pause: short + +- name: squared + tag: power + match: "*[2][self::m:mn][.='2'] and $ClearSpeak_Exponents = 'Auto'" + replace: + - x: "*[1]" + - bookmark: "*[2]/@id" + - T: "a négyzeten" # phrase(7 'squared' equals 49) + +- name: cubed + tag: power + match: "*[2][self::m:mn][.='3'] and $ClearSpeak_Exponents = 'Auto'" + replace: + - x: "*[1]" + - bookmark: "*[2]/@id" + - T: "a köbön" # phrase(5 'cubed' equals 125) + +- name: simple-integer # audit-ignore + tag: power + match: "*[2][self::m:mn][not(contains(., '.'))]" + replace: + - x: "*[1]" + - T: "a(z)" # phrase(2 raised 'to the' power 7) + - test: + if: "*[2][.>=0]" + then: [x: "ToOrdinal(*[2])"] + else: [x: "*[2]"] + - T: "hatványon" + +- name: simple-negative-integer # audit-ignore + tag: power + match: + - "*[2][self::m:minus and count(*)=1 and " + - " *[1][self::m:mn][not(contains(., '.'))]" + - " ]" + replace: + - x: "*[1]" + - T: "a" # phrase(2 raised 'to the' power 7) + - x: "*[2]" + - T: "hatványon" + +- name: simple-var # audit-ignore + tag: power + match: "*[2][self::m:mi][string-length(.)=1]" + replace: + - x: "*[1]" + - T: "a(z)" # phrase(3 raised 'to the' power 7) + - x: "*[2]" + - pronounce: [text: "-edik", ipa: "ɛdik", sapi5: "edik", eloquence: "edik"] + - T: "hatványon" + +# match nested exponent, where the nested exponent is has the power 2 or 3 (n below) +# [xxx]^n, - [xxx]^n, [xxx] var^n, -[xxx] var^n +# where xxx is a number or common fraction (or a var in the first two forms) +# short of creating a specialized built-in function, I don't see a way to eliminate a lot of repetition in the matches +# also really bad is that the test of a common fraction is replicated here (four times!) +# Note: the ClearSpeak doc doesn't say these only apply when the pref is "Auto", +# but the test cases all fall back to "raised to the exponent" when not "Auto" +# If these are allowed for non-Auto values, then you end up with "...power power...". +- # [xxx]^n + name: nested-squared-or-cubed + tag: power + match: + - "$ClearSpeak_Exponents = 'Auto' and" + - "*[2][self::m:power][" + - " *[2][self::m:mn][.='2' or .='3'] and " # exp is 2 or 3 + # base is mn, mi, common fraction ([xxx] case) + - " *[1][self::m:mn or self::m:mi or " + - " self::m:fraction[*[1][self::m:mn][not(contains(., '.')) and text()<20] and" + - " *[2][self::m:mn][not(contains(., '.')) and 2<= text() and text()<=10]]" + - " ]" + - " ]" + replace: + - x: "*[1]" + - T: "emelve a(z)" # phrase(x 'raised to the' second power) + - x: "*[2]" + - T: "hatványra" # phrase(x raised to the second 'power') + +- # - [xxx]^n + name: nested-negative-squared-or-cubed + tag: power + match: + - "$ClearSpeak_Exponents = 'Auto' and" + - " *[2][self::m:minus and count(*)=1 and " + - " *[1]/*[1][self::m:power][" + - " *[2][self::m:mn][.='2' or .='3'] and " # exp is 2 or 3" + # base is mn, mi, common fraction ([xxx] case) + - " *[1][self::m:mn or self::m:mi or " + - " self::m:fraction[*[1][self::m:mn][not(contains(., '.')) and text()<20] and" + - " *[2][self::m:mn][not(contains(., '.')) and 2<= text() and text()<=10]]" + - " ]" + - " ]" + - " ]" + replace: + - x: "*[1]" + - T: "emelve a(z)" # phrase(x 'raised to the' second power) + - x: "*[2]" + - T: "hatványra" # phrase(x raised to the second 'power') + +- # [xxx] var^n + name: nested-var-squared-or-cubed + tag: power + match: + - "$ClearSpeak_Exponents = 'Auto' and" + - " *[2][self::m:mrow][count(*)=3][ " + - " *[3][self::m:power][" + - " *[2][self::m:mn][.='2' or .='3'] and " # exp is 2 or 3 + - " *[1][self::m:mi]" + - " ] and " + - " *[2][self::m:mo][.='⁢'] and " # invisible times + # base is mn, or common fraction ([xxx] case) + - " *[1][self::m:mn or " + - " self::m:fraction[*[1][self::m:mn][not(contains(., '.')) and text()<20] and" + - " *[2][self::m:mn][not(contains(., '.')) and 2<= text() and text()<=10]]" + - " ]" + - " ]" + replace: + - x: "*[1]" + - T: "emelve a(z)" # phrase(x 'raised to the' second power) + - x: "*[2]" + - T: "hatványra" # phrase(x raised to the second 'power') + +- # -[xxx] var^n + name: nested-negative-var-squared-or-cubed + tag: power + match: + - "$ClearSpeak_Exponents = 'Auto' and" + - " *[2][self::m:mrow][count(*)=3][ " + - " *[3][self::m:power][" + - " *[2][self::m:mn][.='2' or .='3'] and " # exp is 2 or 3 + - " *[1][self::m:mi]" + - " ] and " + - " *[2][self::m:mo][.='⁢'] and " # invisible times + - " *[1][self::m:minus and count(*)=1 and " + # base is mn, or common fraction ([xxx] case) + - " *[1][self::m:mn or " + - " self::m:fraction[*[1][self::m:mn][not(contains(., '.')) and text()<20] and" + - " *[2][self::m:mn][not(contains(., '.')) and 2<= text() and text()<=10]]" + - " ]" + - " ]" + - " ]" + replace: + - x: "*[1]" + - T: "emelve a" # phrase(x 'raised to the' second power) + - x: "*[2]" + - T: "hatványra" # phrase(x raised to the second 'power') + +- name: default-exponent-power + tag: power + match: # directly a superscript or an mrow that contains a superscript + - "*[2][self::m:power or self::m:power or self::m:mrow[m:power]]" + replace: + - x: "*[1]" + - T: "emelve a következő kitevőre:" # phrase(x is 'raised to the exponent') + - pause: short + - x: "*[2]" + - pause: short + - T: "kitevő vége" # phrase(and now 'end exponent' has been reached) + +- name: default + tag: power + match: "." + replace: + - x: "*[1]" + - T: "a(z)" # phrase(x 'raised to the' second power) + - x: "*[2]" + - T: "hatványon" # phrase(x raised to the second 'power') + +# +# Some rules on mrows +# +- # the inference rules lump absolute value and cardinality together, so those rules are implemented here + name: ClearSpeak-absolute-value + tag: absolute-value + match: "." + variables: [WordToSay: "IfThenElse($ClearSpeak_AbsoluteValue = 'Cardinality', 'számossága', 'abszolút értéke')"] + replace: + - test: + if: "$Verbosity!='Terse'" + then: [T: ""] # phrase('the' absolute value of 25) + - x: "*[1]" + - x: "$WordToSay" + - test: + if: "$ClearSpeak_AbsoluteValue = 'AbsEnd'" + then: + - pause: short + - T: "vége az" # phrase('end' absolute value) + - T: "abszolút értéknek" + - pause: short + +- name: set + tag: set + match: "." + replace: + - test: + - if: "count(*)=0" + then: [T: "az üres halmaz"] # phrase('the empty set') + - else_if: "count(*)=2" + then: + - test: + if: "$Verbosity!='Terse'" + then: [T: "az"] # phrase('the' empty set) + - T: "üres halmaz" # phrase(the 'empty set') + - else_if: "count(*[1]/*)=3 and *[1]/*[2][self::m:mo][.=':' or .='|' or .='∣']" + then: + - test: + if: "$Verbosity!='Terse'" + then: [T: ""] # phrase('the' set of all integers) + - x: "*[1]/*[1]" + - T: "melyekre teljesül, hogy" # phrase(this is a 'set of' numbers) + - test: + if: "$ClearSpeak_Sets != 'woAll'" + then: [T: "minden"] # phrase(the set of 'all' integers) + - x: "*[1]/*[3]" + else: + - test: + if: "$ClearSpeak_Sets != 'SilentBracket'" + then: + - test: + if: "$Verbosity!='Terse'" + then: [T: "a"] # phrase('the' set of integers) + - T: "halmaz" # phrase(this is a 'set' of integers) + - x: "*[1]" + +- # intervals are controlled by a ClearSpeak Preference -- parens/brackets don't have to match, so we avoid IsBracketed + # alternatively, we could have four (or ten) rules, but there is a lot of duplication if we do that + # this one rule handles all ten cases listed as part $ClearSpeak_Paren = 'Interval' + # note that *[2] is an mrow with X, ",", Y, so getting X or Y is a double index + name: ClearSpeak-intervals # audit-ignore # avoid overriding with default "intervals" name + variables: + - is_intervals_start_infinity: "*[1][self::m:minus and count(*)=1 and *[1][.='∞']]" + - T: "elemet" + - is_intervals_end_infinity: "*[2][.='∞'or (self::m:plus and count(*)=1 and *[1][.='∞'])]" + tag: [open-interval, open-closed-interval, closed-interval, closed-open-interval] + match: "." + replace: + - x: "*[1]" + - T: "től" + - x: "*[2]" + - T: "ig terjedő intervallum" + - pause: short + - test: + if: "not($is_intervals_start_infinity)" + then: + - test: + if: "starts-with(name(.), 'open')" + then: [T: "nem"] # phrase(the interval from a to b 'not' including b) + - T: "tartalmazza a" # phrase(the interval from a to b not 'including' b) + - x: "*[1]" + - T: "elemet" + # logic to deal with [not] arg #1 + - test: + if: "not($is_intervals_start_infinity or $is_intervals_end_infinity)" + then_test: + - if: "name(.)='open-interval'" + then: [T: "vagy"] # phrase(the interval including a 'or' b ) + - else_if: "name(.)='closed-interval'" + then: [T: "és"] # phrase(the interval including a 'and' b) + else: [T: "de"] # phrase(the interval including a 'but' not b) + # some ugly logic dealing with connectives: or, but, but, and (cleaner to be part of next clause?) + - test: + if: "not($is_intervals_end_infinity)" + then: + - test: + # there is some asymmetry to the test because of the and/or/but logic above + if: "not( name(.)='open-interval' or name(.)='closed-interval' ) or $is_intervals_start_infinity" + then: + - test: + if: "name(.) = 'open-interval' or name(.) = 'closed-open-interval'" + then: [T: "nem"] # phrase(the interval 'not' including a) + - T: "tartalmazza" # phrase(the interval not 'including' a) + - T: "a" + - x: "*[2]" + - T: "elemet" + # onto the [not] [including]... part + +- name: binomial-frac-vector + tag: matrix + match: + - "$ClearSpeak_Matrix = 'Combinatorics' and " + - "count(*[1]/*)=1 and count(*)=2" + replace: + - x: "*[1]/*[1]/*" # mtable/mtr/mtd + - T: "alatt a" # phrase(the binomial coefficient n 'choose' m) + - x: "*[2]/*[1]/*" + +- name: ClearSpeak-default + tag: [mtr, mlabeledtr] + match: "parent::m:matrix or parent::m:determinant" + variables: [NextLineIsContinuedRow: "following-sibling::*[1][contains(@data-intent-property, ':continued-row:')]"] + replace: + - pause: medium + - x: "count(preceding-sibling::*)+1" + - T: ". sor" # phrase(the first 'row' of a matrix) + - test: + if: ".[self::m:mlabeledtr]" + then: + - T: "címkéje:" # phrase(the line 'with label' first equation) + - x: "*[1]/*" + - pause: short + - pause: medium + - test: + if: ".[self::m:mlabeledtr]" + then: [x: "*[position()>1]"] + else: [x: "*"] + +- # handle both log and ln + name: ClearSpeak-log + tag: mi + match: ".='log' or .='ln'" + replace: + - bookmark: "@id" + - test: + if: "$Verbosity!='Terse' and not(IsNode(following-sibling::*[2],'simple'))" + then: [T: "a"] # phrase('the' square root of 25) + - test: + - if: ".='log'" + then: [T: "logaritmus"] + - else_if: "$ClearSpeak_Log = 'LnAsNaturalLog'" + then: [T: "természetes alapú logaritmus"] # phrase(the 'natural log' of x) + else: [T: "l n"] + +- name: ClearSpeak-multi-line # audit-ignore + tag: [piecewise, system-of-equations, lines] # these are ignored in favor of the ClearSpeak prefs + match: "." + variables: + # Wikipedia has some tables where all the entire first column is empty (e.g., https://en.wikipedia.org/wiki/List_of_trigonometric_identities) + - LineCount: "count(*[not(contains(@data-intent-property, ':continued-row:'))])" + - NextLineIsContinuedRow: "false()" # default value + - IsColumnSilent: true() + replace: + - test: + - if: "$ClearSpeak_MultiLineOverview = 'Auto'" + then: + - x: "$LineCount" + - test: + - if: "($ClearSpeak_MultiLineLabel = 'Auto' and self::m:piecewise) or $ClearSpeak_MultiLineLabel = 'Case'" + then: [T: "eset"] # phrase(this is the first 'case' of three cases) + - else_if: "$ClearSpeak_MultiLineLabel = 'Auto' or $ClearSpeak_MultiLineLabel = 'Line' or $ClearSpeak_MultiLineLabel = 'None'" # already dealt with Auto/Case + then: [T: "sor"] # phrase(this is the first 'line' of three lines) + - else_if: "$ClearSpeak_MultiLineLabel = 'Constraint'" + then: [T: "feltétel"] # phrase(this is the first 'constraint' of three constraints) + - else_if: "$ClearSpeak_MultiLineLabel = 'Equation'" + then: [T: "egyenlet"] # phrase(this is the first 'equation' of three equations) + - else_if: "$ClearSpeak_MultiLineLabel = 'Row'" + then: [T: "sor"] # phrase(this is the first 'row' of three rows) + - else_if: "$ClearSpeak_MultiLineLabel = 'Step'" + then: [T: "lépés"] # phrase(this is the first 'step' of three steps) + # else 'None -- don't say anything' + - pause: short + - x: "*" + - pause: long + +- name: ClearSpeak-default-multiline + tag: [mtr, mlabeledtr] + match: "parent::m:piecewise or parent::m:system-of-equations or parent::m:lines" + variables: [NextLineIsContinuedRow: "following-sibling::*[1][contains(@data-intent-property, ':continued-row:')]"] + replace: + - test: + if: "not($LineCount=1 or $ClearSpeak_MultiLineLabel='None' or contains(@data-intent-property, ':continued-row:'))" + then: + - pause: medium + - x: "count(preceding-sibling::*[not(contains(@data-intent-property, ':continued-row:'))]) + 1" + - test: + - if: "($ClearSpeak_MultiLineLabel = 'Auto' and parent::m:piecewise) or $ClearSpeak_MultiLineLabel = 'Case'" + then: [T: ". eset"] # phrase(in this 'case' x is not equal to y) + - else_if: "$ClearSpeak_MultiLineLabel = 'Auto' or $ClearSpeak_MultiLineLabel = 'Line'" # already dealt with Auto/Case + then: [T: ". sor"] # phrase(the straight 'line' between x and y) + - else_if: "$ClearSpeak_MultiLineLabel = 'Constraint'" + then: [T: ". feltétel"] # phrase(there is a 'constraint' on possible values) + - else_if: "$ClearSpeak_MultiLineLabel = 'Equation'" + then: [T: ". egyenlet"] # phrase(the 'equation' pi r squared gives the area of a circle) + - else_if: "$ClearSpeak_MultiLineLabel = 'Row'" + then: [T: ". sor"] # phrase(the values on the top 'row' are relevant) + - else_if: "$ClearSpeak_MultiLineLabel = 'Step'" + then: [T: ". lépés"] # phrase(this is a 'step' by step process) + # else 'None -- don't say anything' + - test: + if: "self::m:mlabeledtr" + then: + - T: "címkével:" # phrase(the diagram is complete 'with label') + - x: "*[1]/*" + - test: + - if: "$ClearSpeak_MultiLineLabel='None'" + then: [pause: xlong] # need a very long pause with no line labels + - else_if: "not(contains(@data-intent-property, ':continued-row:'))" + then: [pause: medium] + - test: + if: "self::m:mlabeledtr" + then: [x: "*[position()>1]"] + else: [x: "*"] + +- name: ClearSpeak_Functions_None + tag: mo + match: + - ".='⁡' and $ClearSpeak_Functions = 'None' and" + - "not(preceding-sibling::*[1][IsInDefinition(., 'TrigFunctionNames')])" # Functions=None does not apply to "trig" functions + replace: + test: + if: "$ClearSpeak_ImpliedTimes = 'None'" + then: [T: ""] + else: [T: "szorozva"] # phrase(5 'times' 3 equals 15) + +- name: no-times + tag: mo + match: + # Note: this rule is also part of the paren rule so that the parens speak + - ".='⁢' and $ClearSpeak_ImpliedTimes = 'None'" + replace: + - T: "" + +- name: ClearSpeak-times + tag: mo + match: + # say "times" when invisible times is followed by parens or a superscript that has a base with parens or "|"s + # if we aren't sure if it is times or not, don't say anything + - ".='⁢' and (not(@data-function-guess) or $ClearSpeak_Functions = 'None') and" + - "not(ancestor-or-self::*[contains(@data-intent-property, ':literal:')]) and (" + - " $ClearSpeak_ImpliedTimes = 'MoreImpliedTimes'" + - " or " + - " following-sibling::*[1][" + - " IsBracketed(., '(', ')') or IsBracketed(., '[', ']') or IsBracketed(., '|', '|') or " + # most of these aren't mentioned in ClearSpeak spec, but are (I think) expected uses of "times" + - " self::m:matrix or self::m:determinant or self::m:binomial or" # followed by parens + - " self::m:square-root or self::m:msqrt or self::m:root or self::m:mroot or" + - " (self::m:msub or self::m:msubsup or" + - " ((self::m:msup or self::m:power) and not(IsNode(*[1], 'leaf') and *[2][self::m:mn and (.=2 or '.=3')]))) and " # followed by msup, etc. + - " (*[1][self::m:mrow[IsBracketed(., '(', ')') or IsBracketed(., '[', ']') or IsBracketed(., '|', '|')] or " + - " self::m:matrix or self::m:determinant] or" # base has parens + - " not(IsNode(*[2], 'simple')) or " + - " (self::m:msubsup and not(IsNode(*[3], 'simple')))" + - " )" + - " ]" + # other possibility is the preceding element has parens (but not the following) + # this is not mentioned in the ClearSpeak rules or examples but seems like it should say "times". E.g, |x| y + - " or " + - " preceding-sibling::*[1][" + - " IsBracketed(., '(', ')') or IsBracketed(., '[', ']') or IsBracketed(., '|', '|')]" # followed by parens + - " )" + replace: + - T: "szorozva" # phrase(5 'times' 3 equals 15) + +- name: no-say-parens + tag: mrow + match: + - "parent::*[not(self::m:msup) and not(self::m:msub) and not(self::m:msubsup) and not(self::m:power) and" + - " not(self::m:math) ] and " # rule out [x] standing alone + - "( IsBracketed(., '(', ')') or IsBracketed(., '[', ']') ) and " + - "not( $ClearSpeak_Functions = 'None' and " + - " (preceding-sibling::*[1][.='⁡'] or following-sibling::*[1][.='⁡']) ) and " + - "not( $ClearSpeak_ImpliedTimes = 'None' and " + - " (preceding-sibling::*[1][.='⁢'] or following-sibling::*[1][.='⁢']) ) and " + - "IsNode(*[2], 'simple') and" + - "not(preceding-sibling::*[1][.='\u2062' and @data-function-guess]) and" + - "not(ancestor-or-self::*[contains(@data-intent-property, ':literal:')])" + # missing clause: 'a positive fraction that is spoken as an ordinal + # (either by the Ordinal preference or by the default rules)' + replace: + - x: "*[2]" + +- include: "SharedRules/geometry.yaml" +- include: "SharedRules/linear-algebra.yaml" +- include: "SharedRules/general.yaml" +- include: "SharedRules/default.yaml" diff --git a/Rules/Languages/hu/SharedRules/calculus.yaml b/Rules/Languages/hu/SharedRules/calculus.yaml index 5a4b4af3d..9c6932967 100644 --- a/Rules/Languages/hu/SharedRules/calculus.yaml +++ b/Rules/Languages/hu/SharedRules/calculus.yaml @@ -4,13 +4,13 @@ tag: laplacian match: "count(*) <= 1" # can be on ∇^2 or on enclosing mrow replace: - - t: "LahPlahsian" # phrase('laplacian' of x) -- "LahPlahsian" sounds better with speech engines tested + - T: "laplaciánus" # phrase('laplacian' of x) -- "LahPlahsian" sounds better with speech engines tested - test: if: "count(*) = 1" then: - test: if: "$Verbosity!='Terse'" - then: [t: "of"] # phrase(function 'of' one variable) -- note OneCore voices spell out "div" + then: [T: "a"] # phrase(function 'of' one variable) -- note OneCore voices spell out "div" - test: if: "not(IsNode(*[1], 'leaf'))" then: [pause: short] @@ -22,8 +22,8 @@ replace: - test: if: "$Verbosity='Terse'" - then: [t: "dihv"] # phrase('div' is short for divergence) -- note OneCore voices spell out "div" - else: [t: "divergence of"] # phrase('divergence of' this function from the mean) + then: [T: "eltérés"] # phrase('div' is short for divergence) -- note OneCore voices spell out "div" + else: [T: "eltérése"] # phrase('divergence of' this function from the mean) - test: if: "not(IsNode(*[1], 'leaf'))" then: [pause: short] @@ -33,10 +33,10 @@ tag: curl match: "count(*) = 1" replace: - - t: "curl" # phrase(the 'curl of' a field) + - T: "rotáció" # phrase(the 'curl of' a field) - test: if: "$Verbosity!='Terse'" - then: [t: "of"] # phrase(function 'of' one variable) -- note OneCore voices spell out "div" + then: [T: "a"] # phrase(function 'of' one variable) -- note OneCore voices spell out "div" - test: if: "not(IsNode(*[1], 'leaf'))" then: [pause: short] @@ -48,8 +48,8 @@ replace: - test: if: "$Verbosity!='Terse'" - then: [t: "gradient of"] # phrase(the hill has a 'gradient of' five percent) - else: [t: "del"] # phrase(the delete key is labeled 'del') + then: [T: "gradiense ennek:"] # phrase(the hill has a 'gradient of' five percent) + else: [T: "del"] # phrase(the delete key is labeled 'del') - test: if: "not(IsNode(*[1], 'leaf'))" then: [pause: short] diff --git a/Rules/Languages/hu/SharedRules/default.yaml b/Rules/Languages/hu/SharedRules/default.yaml index 2a715c5a9..89aae5c09 100644 --- a/Rules/Languages/hu/SharedRules/default.yaml +++ b/Rules/Languages/hu/SharedRules/default.yaml @@ -27,7 +27,7 @@ tag: mrow match: "not(*)" replace: - - t: " " # say nothing -- placeholder + - T: " " # say nothing -- placeholder - name: default tag: mrow @@ -42,7 +42,10 @@ match: "." replace: - bookmark: "@id" - - x: "translate(., $BlockSeparators, '')" # remove digit block separators + - test: + - if: "@data-roman-numeral" + then: [SPELL: "text()", pause: "short"] + else: [x: "translate(., $BlockSeparators, '')"] # remove digit block separators - name: default tag: [mo, mtext] @@ -59,15 +62,15 @@ - test: - if: "string-length(.) = 1 and text() != '_'" # need unicode.tdl to kick in for single letter tokens then: [x: "text()"] - - else_if: "@data-chem-element" # NavMode=Character needs this - then: [spell: "text()", pause: "short"] + - else_if: "@data-chem-element or @data-roman-numeral" # NavMode=Character needs this + then: [SPELL: "text()", pause: "short"] else: [x: "translate(., '-_\u00A0', ' ')"] # from intent literals or from extra spaces added (which get deleted) - name: default tag: ms match: "." replace: - - t: "the string" # phrase('the string' is long) + - T: "a karakterlánc" # phrase('the string' is long) - pause: short - x: "text()" @@ -87,7 +90,7 @@ - "not(ancestor::*[name() != 'mrow'][1]/self::m:fraction)" # FIX: can't test for mrow -- what should be used??? replace: - x: "*[1]" - - t: "over" # phrase("the fraction x 'over' y") + - T: "per" # phrase("the fraction x 'over' y") - x: "*[2]" - pause: short @@ -95,13 +98,13 @@ tag: mfrac match: "." replace: - - t: "start" # phrase("'start' fraction x over y end of fraction") + - T: "Tört kezdete" # phrase("'start' fraction x over y end of fraction") - pause: short - x: "*[1]" - test: if: "not(IsNode(*[1],'leaf'))" then: [pause: short] - - t: "over" # phrase("the fraction x 'over' y") + - T: "per" # phrase("the fraction x 'over' y") - test: if: "not(IsNode(*[2],'leaf'))" then: [pause: short] @@ -109,7 +112,7 @@ - pause: short - test: if: "$Impairment = 'Blindness'" - then: [t: "end"] # phrase("start of fraction x over y 'end over'") + then: [T: "tört vége"] # phrase("start of fraction x over y 'end over'") - pause: medium @@ -120,16 +123,16 @@ replace: - test: if: "$Verbosity!='Terse'" - then: [t: "the"] # phrase("'the' root of x") - - t: "root" + then: [T: ""] # phrase("'the' root of x") + - T: "gyöke" - test: if: "$Verbosity!='Terse'" - then: [t: "of"] # phrase("the root 'of' x") + then: [T: ""] # phrase("the root 'of' x") - x: "*[1]" - pause: short - test: if: "not(IsNode(*[1],'leaf')) or $Impairment = 'Blindness'" - then: [t: "end root", pause: medium] # phrase("root of x 'end root symbol'") + then: [T: "gyök vége", pause: medium] # phrase("root of x 'end root symbol'") # not sure what really should be said for these since we should not assume they are square roots - name: literal-default @@ -138,16 +141,16 @@ replace: - test: if: "$Verbosity!='Terse'" - then: [t: "the"] # phrase("'the' root of x") - - t: "root with index" # phrase("the 'root with index' 3 of 5") + then: [T: ""] # phrase("'the' root of x") + - T: "gyök indexszel" # phrase("the 'root with index' 3 of 5") - x: "*[1]" - pause: short - - t: "of" # phrase("the root 'of' x") + - T: "" # phrase("the root 'of' x") - x: "*[2]" - pause: short - test: if: "not(IsNode(*[2],'leaf'))" - then: [t: "end root symbol"] # phrase("root of x 'end root symbol'") + then: [T: "gyök vége"] # phrase("root of x 'end root symbol'") - name: simple-sub @@ -164,7 +167,7 @@ match: "count(*)=2 and *[2][self::m:mrow and *[2][.='⁣']]" replace: - x: "*[1]" - - t: "sub" # phrase(x 'sub' 2) + - T: "alsó index" # phrase(x 'sub' 2) - x: "*[2]" - pause: short @@ -173,7 +176,7 @@ match: "." replace: - x: "*[1]" - - t: "sub" # phrase(x 'sub' 2) + - T: "alsó index" # phrase(x 'sub' 2) - x: "*[2]" - pause: short @@ -186,7 +189,7 @@ - x: "*[1]" - test: if: "not($Verbosity='Terse' and *[2][self::m:mn and not(translate(., '.,', '')!=.)])" # just say "x 1" for terse vs "x sub 1" - then: [t: "sub"] # phrase(x 'sub' 2) + then: [T: "alsó index"] # phrase(x 'sub' 2) - x: "*[2]" @@ -198,7 +201,7 @@ - test: if: "name(.)='msubsup'" then: - - t: "sub" # phrase(x 'sub' 2) + - T: "alsó index" # phrase(x 'sub' 2) - x: "*[2]" - test: if: "*[last()][translate(., '′″‴⁗†‡°*', '')='']" @@ -206,21 +209,21 @@ else_test: if: "ancestor-or-self::*[contains(@data-intent-property, ':literal:')]" # FIX: is this test necessary? then: - - t: "super" # phrase(x 'super' 2) + - T: "alsó index" # phrase(x 'super' 2) - x: "*[last()]" - test: if: "not(IsNode(*[last()], 'simple')) or $Impairment = 'Blindness'" - then: [t: "end super"] # phrase(x super 2 'end of super') + then: [T: "felső index vége"] # phrase(x super 2 'end of super') else: - test: if: "$Verbosity='Verbose'" - then: [t: "superscript"] - else: [t: "super"] + then: [T: "felső index"] + else: [T: "felső index"] - x: "*[last()]" - test: if: "$Verbosity='Verbose'" - then: [t: "end superscript"] - else: [t: "end super"] + then: [T: "felső index vége"] + else: [T: "felső index vége"] - name: default tag: munder @@ -228,11 +231,11 @@ replace: - test: if: "not(IsNode(*[1], 'leaf'))" - then: [t: "quantity"] # phrase(phrase(x 'quantity' with y above it) + then: [T: "mennyiség"] # phrase(phrase(x 'quantity' with y above it) - x: "*[1]" - - t: "with" # phrase(x 'with' z below it) + - T: "," # phrase(x 'with' z below it) - x: "*[2]" - - t: "below" # phrase(x with z 'below' it) + - T: "alatt" # phrase(x with z 'below' it) - name: diacriticals tag: mover @@ -247,11 +250,11 @@ replace: - test: if: "not(IsNode(*[1], 'leaf'))" - then: [t: "quantity"] # phrase(phrase(the 'quantity' x plus 1 with y above it) + then: [T: "mennyiség"] # phrase(phrase(the 'quantity' x plus 1 with y above it) - x: "*[1]" - - t: "with" # phrase(x modified 'with' y above it) + - T: "," # phrase(x modified 'with' y above it) - x: "*[2]" - - t: "above" # phrase(x modified 'with' y above it) + - T: "felett" # phrase(x modified 'with' y above it) - name: default tag: munderover @@ -259,13 +262,13 @@ replace: - test: if: "not(IsNode(*[1], 'leaf'))" - then: [t: "quantity"] # phrase(the 'quantity' x plus 1 with y above it) + then: [T: "mennyiség"] # phrase(the 'quantity' x plus 1 with y above it) - x: "*[1]" - - t: "with" # phrase(x modified 'with' y above it) + - T: "," # phrase(x modified 'with' y above it) - x: "*[2]" - - t: "below and" # phrase(x modified with y 'below and' y above it) + - T: "alatta és" # phrase(x modified with y 'below and' y above it) - x: "*[3]" - - t: "above" # phrase(x modified with y 'above' it) + - T: "felett" # phrase(x modified with y 'above' it) - name: default # Here we support up to 2 prescripts and up to 4 postscripts -- that should cover all reasonable cases @@ -292,9 +295,8 @@ - test: # only bother announcing if there is more than one prescript if: "count($Prescripts) > 2" then: - - t: "with" # phrase(substitute x 'with' y) + - T: "preskriptek" # phrase(substitute x 'with' y) - x: "count($Prescripts) div 2" - - t: "prescripts" # phrase(in this equation certain 'prescripts' apply) - pause: short - test: if: "not($Prescripts[1][self::m:none])" @@ -303,7 +305,7 @@ - x: "$Prescripts[1]" - test: if: "not($Prescripts[1][self::m:none] or $Prescripts[2][self::m:none])" - then: [t: "and"] # phrase(10 is greater than 8 'and' less than 15) + then: [T: "és"] # phrase(10 is greater than 8 'and' less than 15) - test: if: "not($Prescripts[2][self::m:none])" then: @@ -320,7 +322,7 @@ - x: "$Prescripts[3]" - test: if: "not($Prescripts[3][self::m:none] or $Prescripts[4][self::m:none])" - then: [t: "and"] # phrase(10 is grater than 8 'and' less than 15) + then: [T: "és"] # phrase(10 is grater than 8 'and' less than 15) - test: if: "not($Prescripts[4][self::m:none])" then: @@ -329,9 +331,9 @@ - test: if: "count($Prescripts) > 4" # give up and just dump them out so at least the content is there then: - - t: "and alternating prescripts" # phrase(in this case there are values 'and alternating prescripts') + - T: "és váltakozó preskriptek" # phrase(in this case there are values 'and alternating prescripts') - x: "$Prescripts[position() > 4]" - - t: "end prescripts" # phrase(This is where 'end prescripts' occurs) + - T: "preskriptek vége" # phrase(This is where 'end prescripts' occurs) - test: if: "$Postscripts" then: @@ -345,10 +347,9 @@ then: - test: if: "$Prescripts" - then: [t: "and"] # phrase(10 is greater than 8 'and' less than 15) - - t: "with" # phrase(substitute x 'with' y) + then: [T: "és"] # phrase(10 is greater than 8 'and' less than 15) + - T: "posskriptek" # phrase(this material includes several 'postscripts') - x: "count($Postscripts) div 2" - - t: "postscripts" # phrase(this material includes several 'postscripts') - pause: short - test: if: "not($Postscripts[1][self::m:none])" @@ -357,7 +358,7 @@ - x: "$Postscripts[1]" - test: if: "not($Postscripts[1][self::m:none] or $Postscripts[2][self::m:none])" - then: [t: "and"] # phrase(10 is greater than 8 'and' less than 15) + then: [T: "és"] # phrase(10 is greater than 8 'and' less than 15) - test: if: "not($Postscripts[2][self::m:none])" then: @@ -373,7 +374,7 @@ - x: "$Postscripts[3]" - test: if: "not($Postscripts[3][self::m:none] or $Postscripts[4][self::m:none])" - then: [t: "and"] # phrase(10 is greater than 8 'and' less than 15) + then: [T: "és"] # phrase(10 is greater than 8 'and' less than 15) - test: if: "not($Postscripts[4][self::m:none])" then: @@ -389,7 +390,7 @@ - x: "$Postscripts[5]" - test: if: "not($Postscripts[5][self::m:none] or $Postscripts[6][self::m:none])" - then: [t: "and"] # phrase(10 is greater than 8 'and' less than 15) + then: [T: "és"] # phrase(10 is greater than 8 'and' less than 15) - test: if: "not($Postscripts[6][self::m:none])" then: @@ -405,7 +406,7 @@ - x: "$Postscripts[7]" - test: if: "not($Postscripts[7][self::m:none] or $Postscripts[8][self::m:none])" - then: [t: "and"] # phrase(10 is less than 15 'and' greater than 5) + then: [T: "és"] # phrase(10 is less than 15 'and' greater than 5) - test: if: "not($Postscripts[8][self::m:none])" then: @@ -414,29 +415,30 @@ - test: if: "count($Postscripts) > 8" # give up and just dump them out so at least the content is there then: - - t: "and alternating scripts" # phrase(this situation involves complexities 'and alternating scripts') + - T: "és váltakozó szkriptek" # phrase(this situation involves complexities 'and alternating scripts') - x: "$Postscripts[position() > 8]" - - t: "end scripts" # phrase(At this point 'end scripts' occurs) + - T: "szkriptek vége" # phrase(At this point 'end scripts' occurs) - name: default - tag: mtable + tag: [mtable, array] variables: - IsColumnSilent: "false()" - - NumColumns: "count(*[1]/*) - IfThenElse(*/self::m:mlabeledtr, 1, 0)" + - NumColumns: "CountTableColumns(.)" + - NumRows: "CountTableRows(.)" match: "." replace: - - t: "table with" # phrase(the 'table with' 3 rows) - - x: count(*) + - T: "táblázat" # phrase(the 'table with' 3 rows) + - x: "$NumRows" - test: - if: count(*)=1 - then: [t: "row"] # phrase(the table with 1 'row') - else: [t: "rows"] # phrase(the table with 3 'rows') - - t: "and" # phrase(the table with 3 rows 'and' 4 columns) + if: "$NumRows=1" + then: [T: "sorral"] # phrase(the table with 1 'row') + else: [T: "sorral"] # phrase(the table with 3 'rows') + - T: "és" # phrase(the table with 3 rows 'and' 4 columns) - x: "$NumColumns" - test: - if: "NumColumns=1" - then: [t: "column"] # phrase(the table with 3 rows and 1 'column') - else: [t: "columns"] # phrase(the table with 3 rows and 4 'columns') + if: "$NumColumns=1" + then: [T: "oszloppal"] # phrase(the table with 3 rows and 1 'column') + else: [T: "oszloppal"] # phrase(the table with 3 rows and 4 'columns') - pause: long - x: "*" @@ -447,12 +449,12 @@ match: "." replace: - pause: medium - - t: "row" # phrase(the first 'row' of a matrix) + - T: "sor" # phrase(the first 'row' of a matrix) - x: "count(preceding-sibling::*)+1" - test: if: "self::m:mlabeledtr" then: - - t: "with label" # phrase(the line 'with label' first equation) + - T: "címkével" # phrase(the line 'with label' first equation) - x: "*[1]/*" - pause: short - pause: medium @@ -471,7 +473,7 @@ # if: not($IsColumnSilent) and ($ClearSpeak_Matrix = 'SpeakColNum' or count(preceding-sibling::*) != 0) if: "not($IsColumnSilent)" then: - - t: "column" # phrase(the first 'column' of the matrix) + - T: "oszlop" # phrase(the first 'column' of the matrix) - x: "count(preceding-sibling::*)+IfThenElse(parent::m:mlabeledtr, 0, 1)" - pause: medium - x: "*" @@ -490,7 +492,7 @@ tag: menclose match: "@notation='box' and *[self::m:mtext and .=' ']" replace: - - t: "empty box" # phrase(the 'empty box' contains no values) + - T: "üres doboz" # phrase(the 'empty box' contains no values) - name: default # The ordering below is the order in which words come out when there is more than one value @@ -500,109 +502,109 @@ replace: - test: if: ".[contains(concat(' ', normalize-space(@notation), ' '), ' box ')]" - then: [t: "box", pause: short] # phrase(the 'box' around the expression) + then: [T: "doboz", pause: short] # phrase(the 'box' around the expression) - test: if: ".[contains(@notation,'roundedbox')]" - then: [t: "round box", pause: short] # phrase(the 'round box' around the expression) + then: [T: "kerek doboz", pause: short] # phrase(the 'round box' around the expression) - test: if: ".[contains(@notation,'circle')]" - then: [t: "circle", pause: short] # phrase(the 'circle' around the expression) + then: [T: "kör", pause: short] # phrase(the 'circle' around the expression) - 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: "line on" # phrase(draw a straight 'line' on the page) + - T: "vonal" # phrase(draw a straight 'line' on the page) - test: if: ".[contains(concat(' ', normalize-space(@notation), ' '), ' left ')]" - then: [t: "left", pause: short] # phrase(line on 'left' of the expression) + then: [T: "balra", pause: short] # phrase(line on 'left' of the expression) - test: if: ".[contains(concat(' ', normalize-space(@notation), ' '), ' right ')]" - then: [t: "right", pause: short] # phrase(line on 'right' of the expression) + then: [T: "jobbra", pause: short] # phrase(line on 'right' of the expression) - test: if: ".[contains(@notation,'top')]" - then: [t: "top", pause: short] # phrase(line on 'top' of the expression) + then: [T: "felső", pause: short] # phrase(line on 'top' of the expression) - test: if: ".[contains(@notation,'bottom')]" - then: [t: "bottom", pause: short] # phrase(line on the 'bottom' of the expression) + then: [T: "alsó", pause: short] # phrase(line on the 'bottom' of the expression) - 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] # seems better to say 'x cross out' than 'up diagonal, down diagonal cross out' + then: [SPELL: "'x'", pause: short] # seems better to say 'x cross out' than 'up diagonal, down diagonal cross out' else: - test: if: ".[contains(@notation,'updiagonalstrike')]" - then: [t: "up diagonal", pause: short] # phrase(the line runs 'up diagonal') + then: [T: "átlósan felfelé", pause: short] # phrase(the line runs 'up diagonal') - test: if: ".[contains(@notation,'downdiagonalstrike')]" - then: [t: "down diagonal", pause: short] # phrase(the line runs 'down diagonal') + then: [T: "átlósan lefelé", pause: short] # phrase(the line runs 'down diagonal') - test: if: ".[contains(@notation,'verticalstrike')]" - then: [t: "vertical", pause: short] # phrase(the line is 'vertical') + then: [T: "függőleges", pause: short] # phrase(the line is 'vertical') - test: if: ".[contains(@notation,'horizontalstrike')]" - then: [t: "horizontal", pause: short] # phrase(the line is 'horizontal') - - t: "cross out" # phrase(please 'cross out' the incorrect answer) + then: [T: "vízszintes", pause: short] # phrase(the line is 'horizontal') + - T: "kihúzva" # phrase(please 'cross out' the incorrect answer) - pause: short - test: if: ".[contains(@notation,'uparrow')]" - then: [t: "up arrow", pause: short] # phrase(direction is shown by the 'up arrow') + then: [T: "felfelé nyíl", pause: short] # phrase(direction is shown by the 'up arrow') - test: if: ".[contains(concat(' ', normalize-space(@notation), ' '), ' downarrow ')]" - then: [t: "down arrow", pause: short] # phrase(the trend is shown by the 'down arrow') + then: [T: "lefelé nyíl", pause: short] # phrase(the trend is shown by the 'down arrow') - test: if: ".[contains(@notation,'leftarrow')]" - then: [t: "left arrow", pause: short] # phrase(the 'left arrow' indicates going back) + then: [T: "balra nyíl", pause: short] # phrase(the 'left arrow' indicates going back) - test: if: ".[contains(concat(' ', normalize-space(@notation), ' '), ' rightarrow ')]" - then: [t: "right arrow", pause: short] # phrase(the 'right arrow' indicates moving forward) + then: [T: "jobbra nyíl", pause: short] # phrase(the 'right arrow' indicates moving forward) - test: if: ".[contains(@notation,'northeastarrow')]" - then: [t: "northeast arrow", pause: short] # phrase(direction is indicated by the 'northeast arrow') + then: [T: "északkeleti nyíl", pause: short] # phrase(direction is indicated by the 'northeast arrow') - test: if: ".[contains(concat(' ', normalize-space(@notation), ' '), ' southeastarrow ')]" - then: [t: "southeast arrow", pause: short] # phrase(direction is shown by the 'southeast arrow') + then: [T: "délkeleti nyíl", pause: short] # phrase(direction is shown by the 'southeast arrow') - test: if: ".[contains(concat(' ', normalize-space(@notation), ' '), ' southwestarrow ')]" - then: [t: "southwest arrow", pause: short] # phrase(direction is shown by the 'southwest arrow') + then: [T: "délnyugati nyíl", pause: short] # phrase(direction is shown by the 'southwest arrow') - test: if: ".[contains(@notation,'northwestarrow')]" - then: [t: "northwest arrow", pause: short] # phrase(direction is shown by the 'northwest arrow') + then: [T: "északnyugati nyíl", pause: short] # phrase(direction is shown by the 'northwest arrow') - test: if: ".[contains(@notation,'updownarrow')]" - then: [t: "double ended vertical arrow", pause: short] # phrase(upward movement is indicated by the 'double ended vertical arrow') + then: [T: "kétvégű függőleges nyíl", pause: short] # phrase(upward movement is indicated by the 'double ended vertical arrow') - test: if: ".[contains(@notation,'leftrightarrow')]" - then: [t: "double ended horizontal arrow", pause: short] # phrase(progress is indicated by the 'double ended horizontal arrow') + then: [T: "kétvégű vízszintes nyíl", pause: short] # phrase(progress is indicated by the 'double ended horizontal arrow') - test: if: ".[contains(@notation,'northeastsouthwestarrow')]" - then: [t: "double ended up diagonal arrow", pause: short] # phrase(trend is indicated by the 'double ended up diagonal arrow') + then: [T: "dupla végű átlós nyíl", pause: short] # phrase(trend is indicated by the 'double ended up diagonal arrow') - test: if: ".[contains(@notation,'northwestsoutheastarrow')]" - then: [t: "double ended down diagonal arrow", pause: short] # phrase(trend is indicated by the 'double ended down diagonal arrow') + then: [T: "kétvégű lefelé mutató átlós nyíl", pause: short] # phrase(trend is indicated by the 'double ended down diagonal arrow') - test: if: ".[contains(@notation,'actuarial')]" - then: [t: "actuarial symbol", pause: short] # phrase(the 'actuarial symbol' represents a specific quantity) + then: [T: "aktuárius szimbólum", pause: short] # phrase(the 'actuarial symbol' represents a specific quantity) - test: if: ".[contains(@notation,'madrub')]" - then: [t: "arabic factorial symbol", pause: short] # phrase(the 'arabic factorial symbol' represents a factorial operation) + then: [T: "arab faktoriális szimbólum", pause: short] # phrase(the 'arabic factorial symbol' represents a factorial operation) - test: if: ".[contains(@notation,'phasorangle')]" - then: [t: "phasor angle", pause: short] # phrase(the 'phasor angle' is used to measure electrical current) + then: [T: "fázisszög", pause: short] # phrase(the 'phasor angle' is used to measure electrical current) - test: if: ".[contains(@notation,'longdiv') or not(@notation) or normalize-space(@notation) ='']" # default - then: [t: "long division symbol", pause: short] # phrase(the 'long division symbol' indicates a long division calculation) + then: [T: "hosszú osztásjel", pause: short] # phrase(the 'long division symbol' indicates a long division calculation) - test: if: ".[contains(@notation,'radical')]" - then: [t: "square root", pause: short] # phrase(5 is the 'square root' of 25) - - t: "enclosing" # phrase(parentheses are 'enclosing' part of the equation) + then: [T: "négyzetgyök", pause: short] # phrase(5 is the 'square root' of 25) + - T: "kezdet:" # phrase(parentheses are 'enclosing' part of the equation) - test: if: "*[self::m:mtext and .=' ']" - then: [t: "space"] # otherwise there is complete silence # phrase(there is a 'space' between the words) + then: [T: "szóköz"] # otherwise there is complete silence # phrase(there is a 'space' between the words) else: [x: "*"] - test: if: "$Impairment = 'Blindness' and ( $SpeechStyle != 'SimpleSpeak' or not(IsNode(*[1], 'leaf')) )" - then: [t: "end enclosure"] # phrase(reached the 'end enclosure' point) + then: [T: "végpont vége"] # phrase(reached the 'end enclosure' point) - pause: short - name: semantics @@ -622,12 +624,12 @@ match: . replace: - x: "*[1]" - - t: "of" # phrase(the sine 'of' x ) + - T: "" # phrase(the sine 'of' x ) - pause: auto - x: "*[position() > 1]" # Here are the intent hints that need to be handled: 'prefix' | 'infix' | 'postfix' | 'function' | 'silent' -- name: silent-intent +- name: silent-intent # audit-ignore # uncaught intent -- the args have been inserted in the order of speech tag: "*" match: "count(*)>0 and contains(@data-intent-property, ':silent:')" @@ -653,6 +655,13 @@ then: [pause: short] else: [pause: auto] +- name: nofix-intent # audit-ignore + # uncaught intent -- the args have been inserted in the order of speech + tag: "*" + match: "contains(@data-intent-property, ':nofix:') " + replace: + - x: "SpeakIntentName(name(.), $Verbosity, 'nofix')" + - name: postfix-intent # uncaught intent -- the args have been inserted in the order of speech tag: "*" @@ -699,7 +708,7 @@ - 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: "of", pause: auto] # phrase(sine 'of' 5) + then: [T: "", pause: auto] # phrase(sine 'of' 5) - insert: nodes: "*" replace: diff --git a/Rules/Languages/hu/SharedRules/general.yaml b/Rules/Languages/hu/SharedRules/general.yaml index d6feca1dc..a53638781 100644 --- a/Rules/Languages/hu/SharedRules/general.yaml +++ b/Rules/Languages/hu/SharedRules/general.yaml @@ -8,24 +8,24 @@ - test: if: "$Verbosity!='Terse'" then: - - t: "the" # phrase('the' square root of 25 equals 5) + - T: "" # phrase('the' square root of 25 equals 5) - bookmark: "*[2]/@id" - test: - if: "*[2][.='+']" - then: [t: "positive"] # phrase(set of all 'positive' integers less than 10) - else: [t: "negative"] # phrase(set of all 'negative' integers less than minus 10) + then: [T: "pozitív"] # phrase(set of all 'positive' integers less than 10) + else: [T: "negatív"] # phrase(set of all 'negative' integers less than minus 10) - bookmark: "*[1]/@id" - test: - if: "*[1][.='ℂ']" - then: [t: "complex numbers"] # phrase('complex numbers' consist of two parts) + then: [T: "komplex számok"] # phrase('complex numbers' consist of two parts) - else_if: "*[1][.='ℕ']" - then: [t: "natural numbers"] # phrase('natural numbers' are numbers from 1 to infinity) + then: [T: "természetes számok"] # phrase('natural numbers' are numbers from 1 to infinity) - else_if: "*[1][.='ℚ']" - then: [t: "rational numbers"] # phrase('rational numbers' are the fraction of 2 integers) + then: [T: "racionális számok"] # phrase('rational numbers' are the fraction of 2 integers) - else_if: "*[1][.='ℝ']" - then: [t: "real numbers"] # phrase('real numbers' can be both positive and negative) + then: [T: "valós számok"] # phrase('real numbers' can be both positive and negative) - else_if: "*[1][.='ℤ']" - then: [t: "integers"] # phrase(positive 'integers' are natural numbers above 0) + then: [T: "egész számok"] # phrase(positive 'integers' are natural numbers above 0) else: [x: "*[1][text()]"] # shouldn't happen - name: dimension-number-sets @@ -37,15 +37,15 @@ - bookmark: "*[1]/@id" - test: - if: "*[1][.='ℂ']" - then: [t: "C"] # phrase(the letter 'C' used to represent complex number) + then: [T: "komplex számhalmaz"] # phrase(the letter 'C' used to represent complex number) - else_if: "*[1][.='ℕ']" - then: [t: "N"] # phrase(the letter 'N' may represent natural numbers) + then: [T: "természetes számhalmaz"] # phrase(the letter 'N' may represent natural numbers) - else_if: "*[1][.='ℚ']" - then: [t: "Q"] # phrase(the letter 'Q' may represent rational numbers) + then: [T: "racionális számhalmaz"] # phrase(the letter 'Q' may represent rational numbers) - else_if: "*[1][.='ℝ']" - then: [t: "R"] # phrase(the letter 'R' may represent real numbers) + then: [T: "valós számhalmaz"] # phrase(the letter 'R' may represent real numbers) - else_if: "*[1][.='ℤ']" - then: [t: "Z"] # phrase(the letter 'Z' may represent integers) + then: [T: "egész számhalmaz"] # phrase(the letter 'Z' may represent integers) else: [x: "*[1][text()]"] # shouldn't happen - bookmark: "*[2]/@id" - x: "*[2]" @@ -57,15 +57,15 @@ - bookmark: "@id" - test: - if: ".='ℂ'" - then: [t: "the complex numbers"] # phrase('the complex numbers' include 2 parts) + then: [T: "a komplex számok halmaza"] # phrase('the complex numbers' include 2 parts) - else_if: ".='ℕ'" - then: [t: "the natural numbers"] # phrase('the natural numbers' begin at 1) + then: [T: "a természetes számok halmaza"] # phrase('the natural numbers' begin at 1) - else_if: ".='ℚ'" - then: [t: "the rational numbers"] # phrase('the rational numbers' are the fraction of 2 integers) + then: [T: "a racionális számok halmaza"] # phrase('the rational numbers' are the fraction of 2 integers) - else_if: ".='ℝ'" - then: [t: "the real numbers"] # phrase('the real numbers' can be both positive and negative) + then: [T: "a valós számok halmaza"] # phrase('the real numbers' can be both positive and negative) - else_if: ".='ℤ'" - then: [t: "the integers"] # phrase('the integers' are natural numbers above 0) + then: [T: "az egész számok halmaza"] # phrase('the integers' are natural numbers above 0) else: [x: "text()"] # shouldn't happen - name: real-part @@ -73,14 +73,14 @@ match: "." replace: - bookmark: "@id" - - t: "the real part" # phrase('the real part' of a complex number does not include the imaginary part) + - T: "valós rész" # phrase('the real part' of a complex number does not include the imaginary part) - name: imaginary-part tag: imaginary-part match: "." replace: - bookmark: "@id" - - t: "the imaginary part" # phrase('the imaginary part' is part of a complex number) + - T: "képzetes rész" # phrase('the imaginary part' is part of a complex number) # rules on scripted vertical bars ('evaluated at') - name: evaluated-at-2 @@ -89,21 +89,22 @@ replace: - x: "*[1]" - pause: auto - - t: "evaluated at" # phrase(results were 'evaluated at' a given point) + - T: "helyettesítve" # phrase(results were 'evaluated at' a given point) - pause: auto - x: "*[2]" -- name: evaluated-at-3 +- name: evaluated-at-3 # audit-ignore tag: evaluate match: "count(*)=3" replace: - x: "*[1]" - pause: auto - - t: "evaluated at" # phrase(results were 'evaluated at' this point) + - T: "behelyettesítve a(z)" # phrase(results were 'evaluated at' this point) - pause: auto - x: "*[3]" - - t: "minus the same expression evaluated at" # phrase(this result is 'minus the same expression evaluated at' an earlier point) - - x: "*[2]" + - T: "értékét, levonva belőle a korábbi kifejezéssel azonos eredményt, behelyettesítve a(z)" # phrase(this result is 'minus the same expression evaluated at' an earlier point) + - x: "*[2]" + - T: "értéket" - name: permutation # Not a default because the order of the args is reversed @@ -111,7 +112,7 @@ match: "count(*)=2 and contains(@data-intent-property, ':infix:')" replace: - x: "*[2]" - - t: "permutations of" # phrase(the solution involves several 'permutations of' values) + - T: "permutációja" # phrase(the solution involves several 'permutations of' values) - x: "*[1]" - name: intervals @@ -121,18 +122,18 @@ - test: if: "$Verbosity!='Terse'" then: - - t: "the" # phrase('the' square root of 25 equals 5) + - T: "" # phrase('the' square root of 25 equals 5) - x: "translate(name(.),'-', ' ')" - test: if: "$Verbosity!='Terse'" then: - - t: "from" # phrase(subtracting 5 'from' 10 gives 5) + - T: "ettől:" # phrase(subtracting 5 'from' 10 gives 5) - x: "*[1]" - - t: "to" # phrase(adding 6 'to' 6 equals 12) + - T: "eddig:" # phrase(adding 6 'to' 6 equals 12) - x: "*[2]" else: - x: "*[1]" - - t: "comma" # phrase(use a 'comma' to divide large numbers or as a decimal point) + - T: "vessző" # phrase(use a 'comma' to divide large numbers or as a decimal point) - x: "*[2]" - name: default-point @@ -142,10 +143,10 @@ - test: if: "$Verbosity!='Terse'" then: - - t: "the" # phrase('the' square root of 25 equals 5) - - t: "point" # phrase(a decimal 'point' indicates the fraction component of a number) + - T: "a" # phrase('the' square root of 25 equals 5) + - T: "pont" # phrase(a decimal 'point' indicates the fraction component of a number) - x: "*[1]" - - t: "comma" # phrase(use a 'comma' to divide large numbers or as a decimal point) + - T: "vessző" # phrase(use a 'comma' to divide large numbers or as a decimal point) - x: "*[2]" - name: bigop-both @@ -154,16 +155,16 @@ replace: - test: if: "$Verbosity!='Terse'" - then: [t: "the"] # phrase('the' square root of 25 equals 5) + then: [T: ""] # phrase('the' square root of 25 equals 5) - x: "*[1]" - - t: "from" # phrase(subtracting 5 'from' 10 gives 5) + - T: "ettől:" # phrase(subtracting 5 'from' 10 gives 5) - x: "*[2]" - pause: short - - t: "to" # phrase(adding 6 'to' 6 equals 12) + - T: "eddig:" # phrase(adding 6 'to' 6 equals 12) - x: "*[3]" - test: if: "following-sibling::*" - then: [t: "of"] # phrase(the square root 'of' 25 equals 5) + then: [T: "értéke:"] # phrase(the square root 'of' 25 equals 5) - name: bigop-under tag: large-op @@ -171,13 +172,13 @@ replace: - test: if: "$Verbosity!='Terse'" - then: [t: "the"] # phrase('the' square root of 25 equals 5) + then: [T: ""] # phrase('the' square root of 25 equals 5) - x: "*[1]" - - t: "over" # phrase(2 'over' 3 equals two thirds) + - T: "alatta" # phrase(2 'over' 3 equals two thirds) - x: "*[2]" - test: if: "following-sibling::*" - then: [t: "of"] # phrase(the square root 'of' 25 equals 5) + then: [T: ""] # phrase(the square root 'of' 25 equals 5) - name: largeop tag: mrow @@ -185,9 +186,9 @@ replace: - test: if: "$Verbosity!='Terse'" - then: [t: "the"] # phrase('the' square root of 25 equals 5) + then: [T: ""] # phrase('the' square root of 25 equals 5) - x: "*[1]" - - t: "of" # phrase(the square root 'of' 25 equals 5) + - T: "" # phrase(the square root 'of' 25 equals 5) - x: "*[2]" - name: repeating-decimal @@ -195,8 +196,8 @@ match: "." replace: - x: "*[1]" - - t: "with repeating digits" # phrase('with repeating digits') - - spell: "*[2]" + - T: "ismétlődő szakasszal:" # phrase('with repeating digits') + - SPELL: "*[2]" - name: msubsup-skip-super # handles single, double, etc., prime @@ -206,16 +207,16 @@ - x: "*[1]" - test: if: "$Verbosity='Verbose'" - then: [t: "subscript"] # phrase(a 'subscript' may be used to indicate an index) - else: [t: "sub"] # phrase(the result is 'sub' optimal) + then: [T: "alsó index"] # phrase(a 'subscript' may be used to indicate an index) + else: [T: "alsó index"] # phrase(the result is 'sub' optimal) - x: "*[2]" - test: if: "not(IsNode(*[2],'leaf') and $Impairment = 'Blindness')" then: - test: if: "$Verbosity='Verbose'" - then: [t: "end subscript"] # phrase(this is the 'end subscript' position) - else: [t: "end sub"] # phrase(this is the 'end sub' position) + then: [T: "alsó index vége"] # phrase(this is the 'end subscript' position) + else: [T: "alsó index vége"] # phrase(this is the 'end sub' position) - pause: short else_test: if: "*[2][self::m:mi]" # need a pause in "x sub k prime" so the prime is not associated with the 'k' @@ -224,8 +225,8 @@ if: "name(.)='say-super'" then_test: if: "$Verbosity='Verbose'" - then: [t: "superscript"] # phrase(a 'superscript' number indicates raised to a power) - else: [t: "super"] # phrase(this is a 'super' set of numbers) + then: [T: "felső index"] # phrase(a 'superscript' number indicates raised to a power) + else: [T: "rész"] # phrase(this is a 'super' set of numbers) - x: "*[3]" - pause: short @@ -235,7 +236,7 @@ match: "$Verbosity = 'Terse' and string-length(.)=1" replace: - bookmark: "@id" - - spell: "text()" + - SPELL: "text()" # the order of matching is # 1. does it match the base of an SI unit @@ -309,25 +310,26 @@ then: [x: "$Word"] - else_if: "DefinitionValue($Word, 'Speech', 'PluralForms') != ''" then: [x: "DefinitionValue($Word, 'Speech', 'PluralForms')"] - else: [x: "$Word", ct: "s"] + else: [x: "$Word", CT: ""] else: - x: "$Prefix" - - ct: "-" + - CT: "-" - test: - if: "$IsSingular" # HACK: '\uF8FE' is used internally for the concatenation char by 'ct' -- this gets the prefix concatenated to the base then: [x: "concat('\uF8FE', $Word)"] - else_if: "DefinitionValue($Word, 'Speech', 'PluralForms') != ''" then: [x: "concat('\uF8FE', DefinitionValue($Word, 'Speech', 'PluralForms'))"] - else: [x: "concat('\uF8FE', $Word)", ct: "s"] + else: [x: "concat('\uF8FE', $Word)", CT: ""] # need to reverse the order of speech: $ 3 -> 3 dollars -- name: currency +- name: currency # audit-ignore tag: mrow match: "count(*)=3 and DefinitionValue(*[1], 'Speech', 'CurrencySymbols') != ''" variables: # If the amount is singular, we don't add the plural ending. - IsSingular: "*[3][self::m:mn and .=1] and *[2]='\u2062'" + - CurrencyWord: "DefinitionValue(*[1], 'Speech', 'CurrencySymbols')" replace: - bookmark: "*[3]/@id" - x: "*[3]" @@ -336,7 +338,7 @@ then: [x: "DefinitionValue(*[1], 'Speech', 'CurrencySymbols')"] - else_if: "DefinitionValue(*[1], 'Speech', 'PluralForms') != ''" then: [x: "DefinitionValue(*[1], 'Speech', 'PluralForms')"] - else: [x: "DefinitionValue(*[1], 'Speech', 'CurrencySymbols')", ct: "s"] + else: [x: "DefinitionValue(*[1], 'Speech', 'CurrencySymbols')", CT: ""] - name: sin @@ -344,7 +346,7 @@ match: ".='sin'" replace: - bookmark: "@id" - - t: "sine" # phrase(the 'sine' of the angle) + - T: "szinusz" # phrase(the 'sine' of the angle) - name: cos tag: mi match: ".='cos'" @@ -352,8 +354,8 @@ - bookmark: "@id" - test: if: "$Verbosity='Terse'" - then: [t: "cos"] # phrase('cos' is the abbreviation for cosine) - else: [t: "cosine"] # phrase(find the 'cosine' in a right-angle triangle) + then: [T: "koszinusz"] # phrase('cos' is the abbreviation for cosine) + else: [T: "koszinusz"] # phrase(find the 'cosine' in a right-angle triangle) - name: tan tag: mi match: ".='tan' or .='tg'" @@ -361,8 +363,8 @@ - bookmark: "@id" - test: if: "$Verbosity='Terse'" - then: [t: "tan"] # phrase(the 'tan' is the ratio of the opposite to the adjacent side of a right-angled triangle) - else: [t: "tangent"] # phrase(a 'tangent' is a straight line that touches a curve) + then: [T: "tangens"] # phrase(the 'tan' is the ratio of the opposite to the adjacent side of a right-angled triangle) + else: [T: "tangens"] # phrase(a 'tangent' is a straight line that touches a curve) - name: sec tag: mi match: ".='sec'" @@ -370,8 +372,8 @@ - bookmark: "@id" - test: if: "$Verbosity='Terse'" - then: [t: "seek"] # phrase(to 'seek' a solution) - else: [t: "secant"] # phrase(a 'secant' intersects a curve at two or more points) + then: [T: "szekáns"] # phrase(to 'seek' a solution) + else: [T: "szekáns"] # phrase(a 'secant' intersects a curve at two or more points) - name: csc tag: mi match: ".='csc'" @@ -379,8 +381,8 @@ - bookmark: "@id" - test: if: "$Verbosity='Terse'" - then: [t: "coseek"] # phrase(we will 'cosecant' a solution) - else: [t: "cosecant"] # phrase(the 'cosecant' is the reciprocal of the secant) + then: [T: "koszekáns"] # phrase(we will 'cosecant' a solution) + else: [T: "koszekáns"] # phrase(the 'cosecant' is the reciprocal of the secant) - name: cot tag: mi match: ".='cot'" @@ -388,8 +390,8 @@ - bookmark: "@id" - test: if: "$Verbosity='Terse'" - then: [t: "cotan"] # phrase(find the 'cotangent' in a right-angle triangle) - else: [t: "cotangent"] # phrase(the 'cotangent' is the reciprocal of the tangent) + then: [T: "kotangens"] # phrase(find the 'cotangent' in a right-angle triangle) + else: [T: "kotangens"] # phrase(the 'cotangent' is the reciprocal of the tangent) - name: sinh tag: mi @@ -398,8 +400,8 @@ - bookmark: "@id" - test: if: "$Verbosity='Terse'" - then: [t: "sinch"] # phrase(the word 'sinch' is an abbreviation for hyperbolic sine) - else: [t: "hyperbolic sine"] # phrase(the 'hyperbolic sine' is used in mathematics) + then: [T: "hiperbolikus szinusz"] # phrase(the word 'sinch' is an abbreviation for hyperbolic sine) + else: [T: "hiperbolikus szinusz"] # phrase(the 'hyperbolic sine' is used in mathematics) - name: cosh tag: mi match: ".='cosh'" @@ -407,8 +409,8 @@ - bookmark: "@id" - test: if: "$Verbosity='Terse'" - then: [t: "cosh"] # phrase('cosh' is an abbreviation of hyperbolic cosine) - else: [t: "hyperbolic cosine"] # phrase(the 'hyperbolic cosine' is a mathematical function) + then: [T: "hiperbolikus koszinusz"] # phrase('cosh' is an abbreviation of hyperbolic cosine) + else: [T: "hiperbolikus koszinusz"] # phrase(the 'hyperbolic cosine' is a mathematical function) - name: tanh tag: mi match: ".='tanh'" @@ -416,8 +418,8 @@ - bookmark: "@id" - test: if: "$Verbosity='Terse'" - then: [t: "tanch"] # phrase('tanch' is shorthand for hyperbolic tangent) - else: [t: "hyperbolic tangent"] # phrase('hyperbolic tangent' is a mathematical function) + then: [T: "hiperbolikus tangens"] # phrase('tanch' is shorthand for hyperbolic tangent) + else: [T: "hiperbolikus tangens"] # phrase('hyperbolic tangent' is a mathematical function) - name: sech tag: mi match: ".='sech'" @@ -425,8 +427,8 @@ - bookmark: "@id" - test: if: "$Verbosity='Terse'" - then: [t: "sheck"] # phrase('sheck' is shorthand for hyperbolic secant) - else: [t: "hyperbolic secant"] # phrase('hyperbolic secant' is a mathematical function) + then: [T: "hiperbolikus szekáns"] # phrase('sheck' is shorthand for hyperbolic secant) + else: [T: "hiperbolikus szekáns"] # phrase('hyperbolic secant' is a mathematical function) - name: csch tag: mi match: ".='csch'" @@ -434,8 +436,8 @@ - bookmark: "@id" - test: if: "$Verbosity='Terse'" - then: [t: "cosheck"] # phrase('cosheck' is shorthand for hyperbolic cosecant) - else: [t: "hyperbolic cosecant"] # phrase('hyperbolic cosecant' is a mathematical function) + then: [T: "hiperbolikus koszekáns"] # phrase('cosheck' is shorthand for hyperbolic cosecant) + else: [T: "hiperbolikus koszekáns"] # phrase('hyperbolic cosecant' is a mathematical function) - name: coth tag: mi match: ".='coth'" @@ -443,8 +445,8 @@ - bookmark: "@id" - test: if: "$Verbosity='Terse'" - then: [t: "cotanch"] # phrase('cotanch' is shorthand for hyperbolic cotangent) - else: [t: "hyperbolic cotangent"] # phrase(the 'hyperbolic cotangent' is a mathematical function) + then: [T: "hiperbolikus kotangens"] # phrase('cotanch' is shorthand for hyperbolic cotangent) + else: [T: "hiperbolikus kotangens"] # phrase(the 'hyperbolic cotangent' is a mathematical function) - name: exponential tag: mi match: ".='exp'" @@ -452,8 +454,8 @@ - bookmark: "@id" - test: if: "$Verbosity='Terse'" - then: [t: "exp"] # phrase('exp' means exponential function) - else: [t: "exponential"] # phrase('exponential' function) + then: [T: "exponenciális"] # phrase('exp' means exponential function) + else: [T: "exponenciális"] # phrase('exponential' function) - name: covariance tag: mi match: ".='Cov'" @@ -461,8 +463,8 @@ - bookmark: "@id" - test: if: "$Verbosity='Terse'" - then: [t: "Cov"] # phrase('Cov' is shorthand for the covariance function) - else: [t: "covariance"] # phrase('covariance' function) + then: [T: "kovariancia"] # phrase('Cov' is shorthand for the covariance function) + else: [T: "kovariancia"] # phrase('covariance' function) - name: log # handle both log and ln (if in an mrow, 'intents' are used) @@ -472,13 +474,13 @@ - bookmark: "@id" - test: - if: "$Verbosity!='Terse'" - then: [t: "the"] # phrase('the' logarithm function is used in mathematics) + then: [T: ""] # phrase('the' logarithm function is used in mathematics) - test: - if: ".= 'log'" - then: [t: "log"] # phrase(the 'log' function is used in mathematics) + then: [T: "logaritmus"] # phrase(the 'log' function is used in mathematics) - else_if: "$Verbosity='Terse'" - then: [spell: "'ln'"] - else: [t: "natural log"] # phrase(the 'natural log' function is used in mathematics) + then: [SPELL: "'ln'"] + else: [T: "természetes alapú logaritmus"] # phrase(the 'natural log' function is used in mathematics) - name: multi-line @@ -495,13 +497,13 @@ - x: "$LineCount" - test: - if: "self::m:piecewise" - then: [t: "case"] # phrase(this is the first 'case' of three cases) + then: [T: "eset"] # phrase(this is the first 'case' of three cases) - else_if: "self::m:system-of-equations" - then: [t: "equation"] # phrase(this is the first 'equation' of three equations) - else: [t: "line"] # phrase(this is the first 'line' of three lines) + then: [T: "egyenlet"] # phrase(this is the first 'equation' of three equations) + else: [T: "sor"] # phrase(this is the first 'line' of three lines) - test: - if: "$LineCount != 1" - then: [ct: "s"] # plural + then: [CT: ""] # plural - pause: short - x: "*" - pause: long @@ -518,15 +520,15 @@ - pause: medium - test: - if: "parent::m:piecewise" - then: [t: "case"] # phrase('case' 1 of 10 cases) + then: [T: "eset"] # phrase('case' 1 of 10 cases) - else_if: "parent::m:system-of-equations" - then: [t: "equation"] # phrase('equation' 1 of 10 equations) - else: [t: "line"] # phrase('line 1 of 10 lines) + then: [T: "egyenlet"] # phrase('equation' 1 of 10 equations) + else: [T: "sor"] # phrase('line 1 of 10 lines) - x: "count(preceding-sibling::*[not(contains(@data-intent-property, ':continued-row:'))]) + 1" - test: if: "self::m:mlabeledtr" then: - - t: "with label" # phrase(the diagram is complete 'with label') + - T: "címkével" # phrase(the diagram is complete 'with label') - x: "*[1]/*" - test: if: "not(contains(@data-intent-property, ':continued-row:'))" @@ -570,14 +572,14 @@ variables: [IsColumnSilent: true()] match: "count(*)=1 and *[self::m:mtr][count(*) = 1]" replace: - - ot: "the" # phrase('the' 1 by 1 matrix M) - - t: "1 by 1" # phrase(the '1 by 1' matrix) + - OT: "a(z)" # phrase('the' 1 by 1 matrix M) + - T: "egy-szer-egyes" # phrase(the '1 by 1' matrix) - test: if: "self::m:determinant" # just need to check the first bracket since we know it must be (, [, or | - then: [t: "determinant"] # phrase(the 2 by 2 'determinant')) - else: [t: "matrix"] # phrase(the 2 by 2 'matrix') + then: [T: "determináns"] # phrase(the 2 by 2 'determinant')) + else: [T: "mátrix"] # phrase(the 2 by 2 'mátrix') - - t: "with entry" # phrase(the 2 by 2 matrix 'with entry' x) + - T: "eleme:" # phrase(the 2 by 2 matrix 'with entry' x) - x: "*[1]/*" # simpler reading methods for special case matrices @@ -586,11 +588,11 @@ # select all the non-zero entries -- if there are none of them, then it is a zero matrix match: "not( */*/*[not(self::m:mn and .= 0)] )" replace: - - t: "the" # phrase('the' 1 by 2 matrix M) + - T: "a(z)" # phrase('the' 1 by 2 matrix M) - x: count(*) - - t: "by" # phrase(the 1 'by' 2 matrix) + - T: "x" # phrase(the 1 'by' 2 matrix) - x: count(*[self::m:mtr][1]/*) - - t: "zero matrix" # phrase(the 2 by 2 'zero matrix') + - T: "zérusmátrix" # phrase(the 2 by 2 'zero matrix') - pause: long - name: identity-matrix @@ -601,11 +603,11 @@ - "not( */*[count(preceding-sibling::*) = count(../preceding-sibling::*)]/*[not(self::m:mn and .= 1)] ) and " # on-diagonal - "not( */*[count(preceding-sibling::*) != count(../preceding-sibling::*)]/*[not(self::m:mn and .= 0)] )" # off-diagonal replace: - - t: "the" # phrase('the' 1 by 2 matrix M) + - T: "a(z)" # phrase('the' 1 by 2 matrix M) - x: count(*) - - t: "by" # phrase(the 1 'by' 2 matrix) + - T: "x" # phrase(the 1 'by' 2 matrix) - x: count(*[self::m:mtr][1]/*) - - t: "identity matrix" # phrase(the 2 by 2 'identity matrix') + - T: "egységmátrix" # phrase(the 2 by 2 'identity matrix') - pause: long - name: diagonal-matrix @@ -618,11 +620,11 @@ - " [count(../preceding-sibling::*)!=count(../../preceding-sibling::*)]" - " )" replace: - - t: "the" # phrase('the' 1 by 2 matrix) + - T: "a(z)" # phrase('the' 1 by 2 matrix) - x: count(*) - - t: "by" # phrase(the 1 'by' 2 matrix) + - T: "x" # phrase(the 1 'by' 2 matrix) - x: count(*[self::m:mtr][1]/*) - - t: "diagonal matrix" # phrase(the 2 by 2 'diagonal matrix') + - T: "diagonális mátrix" # phrase(the 2 by 2 'diagonal matrix') - pause: long - insert: # this lists the diagonal 'mtd's to be read, and they say "column nnn" before reading the contents @@ -642,41 +644,41 @@ - count(*)<=3 and # at least two rows - IsNode(*/*/*,'simple') # IsNode() returns true if all the nodes are simple replace: - - t: "the" # phrase('the' 2 by 2 matrix M) + - T: "a(z)" # phrase('the' 2 by 2 matrix M) - x: count(*) - - t: "by 1 column" # phrase(the 2 'by 1 column' matrix) + - T: "x 1-es oszlop" # phrase(the 2 'by 1 column' matrix) - test: if: "$ClearSpeak_Matrix = 'Vector' or $ClearSpeak_Matrix = 'EndVector'" - then: [t: "vector"] # phrase(the 2 by 2 'vector') - else: [t: "matrix"] # phrase(the 2 by 2 'matrix') + then: [T: "vektor"] # phrase(the 2 by 2 'vector') + else: [T: "mátrix"] # phrase(the 2 by 2 'matrix') - pause: long - x: "*/*" - test: if: "$ClearSpeak_Matrix = 'EndMatrix' or $ClearSpeak_Matrix = 'EndVector'" then: - - t: "end" # phrase('end' of matrix) + - T: "vége a" # phrase('end' of matrix) - test: if: $ClearSpeak_Matrix = 'EndVector' - then: [t: "vector"] # phrase(the 2 column 'vector') - else: [t: "matrix"] # phrase(the 2 by 2 'matrix') + then: [T: "vektornak"] # phrase(the 2 column 'vector') + else: [T: "mátrixnak"] # phrase(the 2 by 2 'matrix') - name: default-column-matrix tag: matrix variables: [IsColumnSilent: true()] match: "*[self::m:mtr][count(*) = 1]" replace: - - t: "the" # phrase('the' 2 by 2 matrix M) + - T: "a(z)" # phrase('the' 2 by 2 matrix M) - x: "count(*)" - - t: "by 1 column" # phrase(the 2 'by 1 column' matrix) + - T: "x 1-es oszlop" # phrase(the 2 'by 1 column' matrix) - test: if: "$ClearSpeak_Matrix = 'Vector' or $ClearSpeak_Matrix = 'EndVector'" - then: [t: "vector"] # phrase(the 2 column 'vector') - else: [t: "matrix"] # phrase(the 2 by 2 'matrix') + then: [T: "vektor"] # phrase(the 2 column 'vector') + else: [T: "mátrix"] # phrase(the 2 by 2 'matrix') - pause: long - x: "*" # select the rows (mtr) - test: if: "$ClearSpeak_Matrix = 'EndMatrix' or $ClearSpeak_Matrix = 'EndVector'" - then: [t: "end matrix"] # phrase(the 'end of matrix' has been reached) + then: [T: "mátrix vége"] # phrase(the 'end of matrix' has been reached) - name: 1x2-or-3-matrix tag: matrix @@ -687,49 +689,49 @@ - count(*[1]/*)<=3 and # at least two cols - IsNode(*/*/*,'simple') # IsNode() returns true if all the nodes are simple replace: - - t: "the 1 by" # phrase('the 1 by' 2 matrix) + - T: "az 1-szer" # phrase('the 1 by' 2 matrix) - x: count(*/*) - - t: "row" # phrase(the 1 by 4 'row' matrix) + - T: "-es sor" # phrase(the 1 by 4 'row' matrix) - test: if: "$ClearSpeak_Matrix = 'Vector' or $ClearSpeak_Matrix = 'EndVector'" - then: [t: "vector"] # phrase('the 1 by' 2 row 'vector') - else: [t: "matrix"] # phrase('the 1 by' 2 'matrix') + then: [T: "vektor"] # phrase('the 1 by' 2 row 'vector') + else: [T: "mátrix"] # phrase('the 1 by' 2 'matrix') - pause: long - x: "*/*" - test: if: "$ClearSpeak_Matrix = 'EndMatrix' or $ClearSpeak_Matrix = 'EndVector'" then: - - t: "end" # phrase(the 'end' of matrix has been reached) + - T: "vége a" # phrase(the 'end' of matrix has been reached) - test: if: $ClearSpeak_Matrix = 'EndMatrix' - then: [t: "matrix"] # phrase(the 2 by 2 'matrix') - else: [t: "vector"] # phrase(the 2 by 1 'vector') + then: [T: "mátrixnak"] # phrase(the 2 by 2 'matrix') + else: [T: "vektornak"] # phrase(the 2 by 1 'vector') - name: default-row-matrix tag: matrix variables: [IsColumnSilent: "$SpeechStyle = 'ClearSpeak' and $ClearSpeak_Matrix = 'SilentColNum'"] match: "count(*)=1" # one row replace: - - t: "the 1 by" # phrase('the 1 by' 2 matrix) + - T: "az 1-szer" # phrase('the 1 by' 2 matrix) - x: "count(*/*)" - - t: "row" # phrase(the 1 by 2 'row' matrix) + - T: "-es sor" # phrase(the 1 by 2 'row' matrix) - test: if: "$ClearSpeak_Matrix = 'Vector' or $ClearSpeak_Matrix = 'EndVector'" - then: [t: "vector"] # phrase(the 2 by 1 'vector') - else: [t: "matrix"] # phrase(the 2 by 2 'matrix') + then: [T: "vektor"] # phrase(the 2 by 1 'vector') + else: [T: "mátrix"] # phrase(the 2 by 2 'matrix') - pause: long - pause: medium - x: "*/*" # select the cols (mtd) - test: if: "$ClearSpeak_Matrix = 'EndMatrix' or $ClearSpeak_Matrix = 'EndVector'" then: - - t: "end" # phrase(the 'end' of matrix has been reached) + - T: "vége a" # phrase(the 'end' of matrix has been reached) - test: if: $ClearSpeak_Matrix = 'EndMatrix' - then: [t: "matrix"] # phrase(the 2 by 2 'matrix') - else: [t: "vector"] # phrase(the 2 by 1 'vector') + then: [T: "mátrixnak"] # phrase(the 2 by 2 'matrix') + else: [T: "vektornak"] # phrase(the 2 by 1 'vector') -- name: simple-small-matrix +- name: simple-small-matrix # audit-ignore tag: [matrix, determinant] match: - "$ClearSpeak_Matrix != 'SpeakColNum' and " # "simple" isn't used for this preference @@ -737,48 +739,48 @@ - IsNode(*/*/*,'simple') # IsNode() returns true if all the nodes are simple variables: [IsColumnSilent: "$SpeechStyle = 'SimpleSpeak' or ($SpeechStyle = 'ClearSpeak' and $ClearSpeak_Matrix != 'SpeakColNum')"] replace: - - t: "the" # phrase('the' 1 by 2 matrix M) + - T: "a(z)" # phrase('the' 1 by 2 matrix M) - x: count(*) - - t: "by" # phrase(the 1 'by' 2 matrix) + - T: "x" # phrase(the 1 'by' 2 matrix) - x: count(*[self::m:mtr][1]/*) - test: if: "self::m:determinant" - then: [t: "determinant"] # phrase(the 2 by 2 'determinant') - else: [t: "matrix"] # phrase(the 2 by 2 'matrix') + then: [T: "determináns"] # phrase(the 2 by 2 'determinant') + else: [T: "mátrix"] # phrase(the 2 by 2 'matrix') - pause: long - x: "*" - test: if: "$ClearSpeak_Matrix = 'EndMatrix' or $ClearSpeak_Matrix = 'EndVector'" then: - - t: "end" # phrase(the 'end' of matrix has been reached) + - T: "vége a" # phrase(the 'end' of matrix has been reached) - test: if: "self::m:determinant" - then: [t: "determinant"] # phrase(the 2 by 2 'determinant') - else: [t: "matrix"] # phrase(the 2 by 2 'matrix') + then: [T: "determinánsnak"] # phrase(the 2 by 2 'determinant') + else: [T: "mátrixnak"] # phrase(the 2 by 2 'matrix') -- name: default-matrix +- name: default-matrix # audit-ignore tag: [matrix, determinant] variables: [IsColumnSilent: "$SpeechStyle = 'ClearSpeak' and $ClearSpeak_Matrix = 'SilentColNum'"] match: "." replace: - - t: "the" # phrase('the' 1 by 2 matrix M) + - T: "a(z)" # phrase('the' 1 by 2 matrix M) - x: "count(*)" - - t: "by" # phrase(the 1 'by' 2 matrix) + - T: "x" # phrase(the 1 'by' 2 matrix) - x: "count(*[self::m:mtr][1]/*)" - test: if: "self::m:determinant" - then: [t: "determinant"] # phrase(the 2 by 2 'determinant') - else: [t: "matrix"] # phrase(the 2 by 2 'matrix') + then: [T: "determináns"] # phrase(the 2 by 2 'determinant') + else: [T: "mátrix"] # phrase(the 2 by 2 'matrix') - pause: long - x: "*" - test: if: "$ClearSpeak_Matrix = 'EndMatrix' or $ClearSpeak_Matrix = 'EndVector'" then: - - t: "end" # phrase(the 'end' of matrix has been reached) + - T: "vége a" # phrase(the 'end' of matrix has been reached) - test: if: "self::m:determinant" - then: [t: "determinant"] # phrase(the 2 by 2 'determinant') - else: [t: "matrix"] # phrase(the 2 by 2 'matrix's) + then: [T: "determinánsnak"] # phrase(the 2 by 2 'determinant') + else: [T: "mátrixnak"] # phrase(the 2 by 2 'matrix's) - name: chemistry-msub tag: [chemical-formula] @@ -787,10 +789,10 @@ - x: "*[2]" - test: if: "$Verbosity='Verbose'" - then: [t: "subscript"] # phrase(H 'subscript' 2) + then: [T: "alsó index"] # phrase(H 'subscript' 2) else_test: if: "$Verbosity='Medium'" - then: [t: "sub"] # phrase(H 'sub' 2) + then: [T: "alsó index"] # phrase(H 'sub' 2) - x: "*[3]" - name: dimension-by @@ -799,7 +801,7 @@ replace: - insert: nodes: "*" - replace: [t: "by", pause: auto] # phrase(3 'by' 5 matrix) + replace: [T: "x", pause: auto] # phrase(3 'by' 5 matrix) - name: chemistry-msup tag: [chemical-formula] @@ -808,10 +810,10 @@ - x: "*[2]" - test: if: "$Verbosity='Verbose'" - then: [t: "superscript"] # phrase(H 'superscript' 2) + then: [T: "felső index"] # phrase(H 'superscript' 2) else_test: if: "$Verbosity='Medium'" - then: [t: "super"] # phrase(H 'super' 2) + then: [T: "felső index"] # phrase(H 'super' 2) - x: "*[3]" - test: if: "following-sibling::*[1][.='+' or .='-']" # a little lazy -- assumes chemistry superscripts end with + or - @@ -839,10 +841,10 @@ then: - test: if: "$Verbosity='Verbose'" - then: [t: "superscript"] # phrase(H 'superscript' 2) + then: [T: "felső index"] # phrase(H 'superscript' 2) else_test: if: "$Verbosity='Medium'" - then: [t: "super"] # phrase(H 'super' 2) + then: [T: "felső index"] # phrase(H 'super' 2) - x: "$Prescripts[2]" - pause: "short" - test: @@ -850,10 +852,10 @@ then: - test: if: "$Verbosity='Verbose'" - then: [t: "subscript"] # phrase(a 'subscript' may be used to indicate an index) + then: [T: "alsó index"] # phrase(a 'subscript' may be used to indicate an index) else_test: if: "$Verbosity='Medium'" - then: [t: "sub"] # phrase(here is a 'sub' total) + then: [T: "alsó index"] # phrase(here is a 'sub' total) - x: "$Prescripts[1]" - pause: "short" - test: @@ -864,10 +866,10 @@ then: - test: if: "$Verbosity='Verbose'" - then: [t: "superscript"] # phrase(H 'superscript' 2) + then: [T: "felső index"] # phrase(H 'superscript' 2) else_test: if: "$Verbosity='Medium'" - then: [t: "super"] # phrase(H 'super' 2) + then: [T: "felső index"] # phrase(H 'super' 2) - x: "$Prescripts[4]" - pause: "short" - test: @@ -875,10 +877,10 @@ then: - test: if: "$Verbosity='Verbose'" - then: [t: "subscript"] # phrase(H 'subscript' 2) + then: [T: "alsó index"] # phrase(H 'subscript' 2) else_test: if: "$Verbosity='Medium'" - then: [t: "sub"] # phrase(H 'sub' 2) + then: [T: "alsó index"] # phrase(H 'sub' 2) - x: "$Prescripts[3]" - pause: "short" - x: "*[1]" # base @@ -890,10 +892,10 @@ then: - test: if: "$Verbosity='Verbose'" - then: [t: "subscript"] # phrase(phrase(H 'subscript' 2) + then: [T: "alsó index"] # phrase(phrase(H 'subscript' 2) else_test: if: "$Verbosity='Medium'" - then: [t: "sub"] # phrase(phrase(H 'sub' 2) + then: [T: "alsó index"] # phrase(phrase(H 'sub' 2) - x: "$Postscripts[1]" - pause: "short" - test: @@ -901,10 +903,10 @@ then: - test: if: "$Verbosity='Verbose'" - then: [t: "superscript"] # phrase(H 'superscript' 2) + then: [T: "felső index"] # phrase(H 'superscript' 2) else_test: if: "$Verbosity='Medium'" - then: [t: "super"] # phrase(H 'super' 2) + then: [T: "felső index"] # phrase(H 'super' 2) - x: "$Postscripts[2]" - pause: "short" - test: @@ -915,10 +917,10 @@ then: - test: if: "$Verbosity='Verbose'" - then: [t: "subscript"] # phrase(H 'subscript' 2) + then: [T: "alsó index"] # phrase(H 'subscript' 2) else_test: if: "$Verbosity='Medium'" - then: [t: "sub"] # phrase(H 'sub' 2) + then: [T: "alsó index"] # phrase(H 'sub' 2) - x: "$Postscripts[3]" - pause: "short" - test: @@ -926,10 +928,10 @@ then: - test: if: "$Verbosity='Verbose'" - then: [t: "superscript"] # phrase(H 'superscript' 2) + then: [T: "felső index"] # phrase(H 'superscript' 2) else_test: if: "$Verbosity='Medium'" - then: [t: "super"] # phrase(H 'super' 2) + then: [T: "felső index"] # phrase(H 'super' 2) - x: "$Postscripts[4]" - pause: "short" - test: @@ -940,10 +942,10 @@ then: - test: if: "$Verbosity='Verbose'" - then: [t: "subscript"] # phrase(H 'subscript' 2) + then: [T: "alsó index"] # phrase(H 'subscript' 2) else_test: if: "$Verbosity='Medium'" - then: [t: "sub"] # phrase(H 'sub' 2) + then: [T: "alsó index"] # phrase(H 'sub' 2) - x: "$Postscripts[5]" - pause: "short" - test: @@ -951,10 +953,10 @@ then: - test: if: "$Verbosity='Verbose'" - then: [t: "superscript"] # phrase(H 'superscript' 2) + then: [T: "felső index"] # phrase(H 'superscript' 2) else_test: if: "$Verbosity='Medium'" - then: [t: "super"] # phrase(H 'super' 2) + then: [T: "felső index"] # phrase(H 'super' 2) - x: "$Postscripts[6]" - pause: "short" - test: @@ -965,10 +967,10 @@ then: - test: if: "$Verbosity='Verbose'" - then: [t: "subscript"] # phrase(H 'subscript' 2) + then: [T: "alsó index"] # phrase(H 'subscript' 2) else_test: if: "$Verbosity='Medium'" - then: [t: "sub"] # phrase(H 'sub' 2) + then: [T: "alsó index"] # phrase(H 'sub' 2) - x: "$Postscripts[7]" - pause: "short" - test: @@ -976,10 +978,10 @@ then: - test: if: "$Verbosity='Verbose'" - then: [t: "superscript"] # phrase(H 'superscript' 2) + then: [T: "felső index"] # phrase(H 'superscript' 2) else_test: if: "$Verbosity='Medium'" - then: [t: "super"] # phrase(H 'super' 2) + then: [T: "felső index"] # phrase(H 'super' 2) - x: "$Postscripts[8]" - pause: "short" - test: @@ -997,7 +999,7 @@ match: "." replace: - bookmark: "@id" - - spell: text() + - SPELL: text() - pause: short - name: chemical-state @@ -1007,12 +1009,12 @@ - bookmark: "*[1]/@id" - test: - if: ".='s'" - then: [t: "solid"] # phrase(Boron is a 'solid' in its natural state) + then: [T: "szilárd"] # phrase(Boron is a 'solid' in its natural state) - else_if: ".='l'" - then: [t: "liquid"] # phrase(water is a 'liquid') + then: [T: "folyékony"] # phrase(water is a 'liquid') - else_if: ".='g'" - then: [t: "gas"] # phrase(hydrogen is a 'gas' ) - else: [t: "aqueous"] # phrase(an 'aqueous' solution is contained in water) + then: [T: "gáz"] # phrase(hydrogen is a 'gas' ) + else: [T: "vizes oldat"] # phrase(an 'aqueous' solution is contained in water) - pause: short - name: chemical-formula-operator-bond @@ -1023,13 +1025,13 @@ - bookmark: "@id" - test: - if: ".='-' or .=':'" - then: [t: "single bond"] # phrase(a 'single bond' is formed when two atoms share one pair of electrons) + then: [T: "egyes kötés"] # phrase(a 'single bond' is formed when two atoms share one pair of electrons) - else_if: ".='=' or .='∷'" - then: [t: "double bond"] # phrase(a 'double bond' may occur when two atoms share two pairs of electrons) + then: [T: "kettős kötés"] # phrase(a 'double bond' may occur when two atoms share two pairs of electrons) - else_if: ".='≡'" - then: [t: "triple bond"] # phrase(a 'triple bond' occurs when two atoms share three pairs of electrons) + then: [T: "hármas kötés"] # phrase(a 'triple bond' occurs when two atoms share three pairs of electrons) - else_if: ".='≣'" - then: [t: "quadruple bond"] # phrase(a 'quadruple bond' occurs when two atoms share four pairs of electrons) + then: [T: "négyszeres kötés"] # phrase(a 'quadruple bond' occurs when two atoms share four pairs of electrons) else: [x: "text()"] - name: chemical-formula-operator @@ -1048,14 +1050,14 @@ - if: ".='→' or .='⟶'" then_test: if: "$Verbosity='Terse'" - then: [t: "forms"] # phrase(hydrogen and oxygen 'forms' water ) - else: [t: "reacts to form"] # phrase(hydrogen and oxygen 'reacts to form' water) + then: [T: "keletkezik"] # phrase(hydrogen and oxygen 'forms' water ) + else: [T: "reakcióba lép, és keletkezik"] # phrase(hydrogen and oxygen 'reacts to form' water) - else_if: ".='⇌' or .='🣑'" # U+01F8D1 - then: [t: "is in equilibrium with"] # phrase(a reactant 'is in equilibrium with' a product) + then: [T: "egyensúlyban van a következővel:"] # phrase(a reactant 'is in equilibrium with' a product) - else_if: ".='🣓'" # U+1F8D3 - then: [t: "is in equilibrium biased to the left with"] # phrase(the reactant 'is in equilibrium biased to the left with' the product) + then: [T: "balra eltolt egyensúlyban van a következővel:"] # phrase(the reactant 'is in equilibrium biased to the left with' the product) - else_if: ".='🣒'" # U+1F8D2 - then: [t: "is in equilibrium biased to the right with"] # phrase(the reactant 'is in equilibrium biased to the right with' the product) + then: [T: "jobbra eltolt egyensúlyban van a következővel:"] # phrase(the reactant 'is in equilibrium biased to the right with' the product) else: [x: "*"] - name: chemical-equation-operator @@ -1069,7 +1071,7 @@ tag: none match: "../../*[self::m:chemical-formula or self::m:chemical-nuclide]" replace: - - t: "" # don't say anything + - T: "" # don't say anything - name: ignore-intent-wrapper tag: intent-wrapper diff --git a/Rules/Languages/hu/SharedRules/geometry.yaml b/Rules/Languages/hu/SharedRules/geometry.yaml index 1b2fe2a71..c23f22526 100644 --- a/Rules/Languages/hu/SharedRules/geometry.yaml +++ b/Rules/Languages/hu/SharedRules/geometry.yaml @@ -7,12 +7,12 @@ - test: if: "$Verbosity='Verbose'" then: - - t: "the line segment from" # phrase('the line segment from' A to B) + - T: "a vonalszakasz innen:" # phrase('the line segment from' A to B) - x: "*[1]" - - t: "to" # phrase(the line segment from A 'to' B) + - T: "eddig:" # phrase(the line segment from A 'to' B) - x: "*[2]" else: - - t: "line segment" # phrase(the 'line segment' A B) + - T: "vonalszakasz" # phrase(the 'line segment' A B) - x: "*[1]" - x: "*[2]" @@ -23,12 +23,12 @@ - test: if: "$Verbosity='Verbose'" then: - - t: "the ray from" # phrase('the ray from' A to B) + - T: "a sugár innen:" # phrase('the ray from' A to B) - x: "*[1]" - - t: "to" # phrase(the ray from A 'to' B) + - T: "ide:" # phrase(the ray from A 'to' B) - x: "*[2]" else: - - t: "ray" # phrase(the 'ray'A B) + - T: "sugár" # phrase(the 'ray'A B) - x: "*[1]" - x: "*[2]" @@ -38,8 +38,8 @@ replace: - test: if: "$Verbosity='Verbose'" - then: [t: "the"] # phrase('the' arc A B C) - - t: "arc" # phrase(the 'arc' A B C) + then: [T: "az"] # phrase('the' arc A B C) + - T: "ív" # phrase(the 'arc' A B C) - x: "*[1]" - x: "*[2]" @@ -50,9 +50,9 @@ - test: if: "$Verbosity='Verbose'" then: - - t: "the measure of the angle" # phrase('the measure of the angle' ABC) + - T: "a szög mértéke" # phrase('the measure of the angle' ABC) else: - - t: "measure of angle" # phrase('measure of angle' ABC) + - T: "szög mértéke" # phrase('measure of angle' ABC) - x: "*[1]" - x: "*[2]" - x: "*[3]" @@ -64,16 +64,16 @@ replace: - test: if: "$Verbosity='Verbose'" - then: [t: "the"] # phrase('the' point at 1, 2) - - t: "point" # phrase(the 'point' at 1, 2) + then: [T: "a"] # phrase('the' point at 1, 2) + - T: "pont" # phrase(the 'point' at 1, 2) - test: if: "$Verbosity='Verbose'" - then: [t: "at"] # phrase('the' point at 1, 2) + then: [T: "a"] # phrase('the' point at 1, 2) - pause: short - insert: nodes: "*" - replace: [t: "comma", pause: auto] # phrase(f of x 'comma' y) + replace: [T: "vessző", pause: auto] # phrase(f of x 'comma' y) - pause: short - test: if: "($SpeechStyle='ClearSpeak' and $Verbosity='Verbose') or not(IsNode(*[last()],'leaf'))" - then: [t: "end point"] # phrase(start point, 'end point') + then: [T: "végpont"] # phrase(start point, 'end point') diff --git a/Rules/Languages/hu/SharedRules/linear-algebra.yaml b/Rules/Languages/hu/SharedRules/linear-algebra.yaml index 9a6452628..12166322c 100644 --- a/Rules/Languages/hu/SharedRules/linear-algebra.yaml +++ b/Rules/Languages/hu/SharedRules/linear-algebra.yaml @@ -7,16 +7,16 @@ - test: if: "$Verbosity='Verbose'" then: - - t: "the" # phrase('the' square root of 25 equals 5) - - t: "determinant" # phrase(the 'determinant' of a matrix) + - T: "a" # phrase('the' square root of 25 equals 5) + - T: "determináns" # phrase(the 'determinant' of a matrix) - test: if: "$Verbosity!='Terse'" then: - - t: "of" # phrase(systems 'of' linear equations) + - T: "a" # phrase(systems 'of' linear equations) - x: "*[1]" - test: if: "not(IsNode(*[1], 'simple')) and $Impairment = 'Blindness'" - then: [t: "end determinant"] # phrase('end determinant' of a matrix) + then: [T: "determináns vége"] # phrase('end determinant' of a matrix) - name: subscripted-norm @@ -26,11 +26,11 @@ - test: if: "$Verbosity='Verbose'" then: - - t: "the" # phrase('the' square root of 25 equals 5) + - T: "a" # phrase('the' square root of 25 equals 5) - x: "*[2]" - - t: "norm" # phrase(the 'norm' can be a measure of distance) + - T: "normalizálás" # phrase(the 'norm' can be a measure of distance) - test: if: "$Verbosity!='Terse'" then: - - t: "of" # phrase(systems 'of' linear equations) + - T: "a" # phrase(systems 'of' linear equations) - x: "*[1]" diff --git a/Rules/Languages/hu/SimpleSpeak_Rules.yaml b/Rules/Languages/hu/SimpleSpeak_Rules.yaml index e9b65427e..b5f263c3a 100644 --- a/Rules/Languages/hu/SimpleSpeak_Rules.yaml +++ b/Rules/Languages/hu/SimpleSpeak_Rules.yaml @@ -25,7 +25,7 @@ tag: mn match: "starts-with(text(), '-')" replace: - - t: "minus" # phrase(x 'minus' y) + - T: "mínusz" # phrase(x 'minus' y) - x: "translate(text(), '-_', '')" - name: default @@ -34,17 +34,17 @@ replace: - test: if: "$Verbosity!='Terse'" - then: [t: "the"] # phrase('the' square root of x) - - t: "square root" # phrase(the 'square root' of x) + then: [T: "a"] # phrase('the' square root of x) + - T: "négyzetgyöke" # phrase(the 'square root' of x) - test: if: "$Verbosity!='Terse'" - then: [t: "of"] # phrase(the square root 'of' x) + then: [T: "ennek:"] # phrase(the square root 'of' x) else: [pause: short] - x: "*[1]" - pause: short - test: if: "not(IsNode(*[1], 'leaf')) and $Impairment = 'Blindness'" - then: [t: "end root", pause: medium] # phrase(start the square root of x 'end of root') + then: [T: "gyök vége", pause: medium] # phrase(start the square root of x 'end of root') - name: default tag: root @@ -52,31 +52,31 @@ replace: - test: if: "$Verbosity!='Terse'" - then: [t: "the"] + then: [T: "a"] - test: if: "*[2][self::m:mn and not(contains(., '.'))]" then_test: - if: "*[2][.='2']" - then: [t: "square root"] # phrase(the 'square root' of x) + then: [T: "négyzetgyöke"] # phrase(the 'square root' of x) - else_if: "*[2][.='3']" - then: [t: "cube root"] # phrase(the 'cube root' of x) - - else: [x: "ToOrdinal(*[2])", t: "root"] # phrase(the square 'root' of 25) + then: [T: "köbgyöke"] # phrase(the 'cube root' of x) + - else: [x: "ToOrdinal(*[2])", T: "gyöke"] # phrase(the square 'root' of 25) else: - test: if: "*[2][self::m:mi][string-length(.)=1]" then: - x: "*[2]" - - pronounce: [text: "-th", ipa: "θ", sapi5: "th", eloquence: "T"] + - pronounce: [text: "-edik", ipa: "ɛdik", sapi5: "edik", eloquence: "edik"] else: [x: "*[2]"] - - t: "root" # phrase(the square 'root' of) + - T: "gyöke" # phrase(the square 'root' of) - test: if: "$Verbosity!='Terse'" - then: [t: "of"] # phrase(the square root 'of' x) + then: [T: "ennek:"] # phrase(the square root 'of' x) - x: "*[1]" - pause: short - test: if: "not(IsNode(*[1], 'leaf')) and $Impairment = 'Blindness'" - then: [t: "end root", pause: medium] # phrase(start the square root of x 'end of root') + then: [T: "gyök vége", pause: medium] # phrase(start the square root of x 'end of root') # Fraction rules # Mixed numbers mostly "just work" because the invisible char reads as "and" and other parts read properly on their own @@ -112,7 +112,7 @@ - "BaseNode(*[2])[contains(@data-intent-property, ':unit')] " replace: - x: "*[1]" - - t: "per" # phrase('5 meters 'per' second) + - T: "per" # phrase('5 meters 'per' second) - x: "*[2]" - name: simple @@ -125,7 +125,7 @@ - "not(ancestor::*[name() != 'mrow'][1]/self::m:fraction)" # FIX: can't test for mrow -- what should be used??? replace: - x: "*[1]" - - t: "over" # phrase(the fraction 3 'over' 4) + - T: "per" # phrase(the fraction 3 'over' 4) - x: "*[2]" - pause: short @@ -135,13 +135,13 @@ replace: - test: if: "$Impairment = 'Blindness'" - then: [t: "fraction"] # phrase(the 'fraction' 3 over 4) + then: [T: "tört"] # phrase(the 'fraction' 3 over 4) - pause: short - x: "*[1]" - test: if: "not(IsNode(*[1],'leaf'))" then: [pause: short] - - t: "over" # phrase(the fraction 3 'over' 4) + - T: "per" # phrase(the fraction 3 'over' 4) - test: if: "not(IsNode(*[2],'leaf'))" then: [pause: short] @@ -149,7 +149,7 @@ - pause: short - test: if: "$Impairment = 'Blindness'" - then: [t: "end fraction"] # phrase(start 7 over 8 'end of fraction') + then: [T: "tört vége"] # phrase(start 7 over 8 'end of fraction') - pause: medium # rules for functions raised to a power @@ -159,40 +159,145 @@ tag: inverse-function match: "." replace: - - t: "inverse" # phrase(the 'inverse' of f) + - T: "inverz" # phrase(the 'inverse' of f) - x: "*[1]" -- name: function-squared-or-cubed +# Handles functions squared or cubed, where the base is not a trig function. +- name: function-squared-or-cubed # audit-ignore tag: power match: - - "*[2][self::m:mn][.='2' or .='3'] and" + - "*[2][self::m:mn][.='2' or .='3'] and" # the exponent is 2 or 3 - "following-sibling::*[1][self::m:mo][.='⁡']" #invisible function apply replace: - - x: "*[1]" + - x: "*[1]" # say the trig function name - bookmark: "*[2]/@id" - test: - if: "*[2][.=2]" - then: [t: "squared"] # phrase(5 'squared' equals 25) - else: [t: "cubed"] # phrase(5 'cubed' equals 125) -- name: function-power + if: "not(IsInDefinition(*[1], 'TrigFunctionNames')) and *[2][.='2']" # the base is not a trig function + then: [T: "a négyzeten"] # say "squared" + else_test: + if: "not(IsInDefinition(*[1], 'TrigFunctionNames'))" # the base is not a trig function + then: [T: "a köbön"] # say "cubed" + else: [T: ""] + +# Handles trig functions with simple arguments (mi or mn), for both 2, 3 and general exponents. +- name: trig-power-argument-before-exponent-general # audit-ignore + tag: [mi, mn] + match: + - "preceding-sibling::*[1][self::m:mo][.='⁡'] and" + - "preceding-sibling::*[2][self::m:power[IsInDefinition(*[1], 'TrigFunctionNames')]]" # if the previous sibling is function-apply and previous previous sibling is trig power + replace: + - test: + - if: "preceding-sibling::*[2]/*[2][self::m:mn][.='2']" # if the exponent is 2 + then: + - x: "text()" # say the argument of the trig function + - T: "a négyzeten" + - else_if: "preceding-sibling::*[2]/*[2][self::m:mn][.='3']" # if the exponent is 3 + then: + - x: "text()" # say the argument of the trig function + - T: "a köbön" + else: + - pause: short + - x: "text()" # say the argument of the function + - pause: short + - T: "a(z)" + - test: + if: "preceding-sibling::*[2]/*[2][self::m:mn][not(contains(., '.'))]" # if the exponent is an integer + then: [x: "ToOrdinal(preceding-sibling::*[2]/*[2])"] # say the ordinal form + else: [x: "preceding-sibling::*[2]/*[2]"] # else, say the exponent + - T: "hatványon" + +# Handles trig functions with grouped arguments (parenthesized or bracketed mrow), for both 2, 3 and general exponents. +- name: trig-power-grouped-argument-before-exponent-general # audit-ignore + tag: [mo, mrow] + match: + - "(self::m:mo[.=')'] and preceding-sibling::*[2][self::m:mo][.='⁡'] and preceding-sibling::*[3][self::m:power[IsInDefinition(*[1], 'TrigFunctionNames')]])" + - "or" + - "(self::m:mrow[IsBracketed(., '(', ')')] and preceding-sibling::*[1][self::m:mo][.='⁡'] and preceding-sibling::*[2][self::m:power[IsInDefinition(*[1], 'TrigFunctionNames')]])" + replace: + - test: + if: "self::m:mo" # if the current node is ) + then: + - x: "text()" # say the argument of the function + - test: + - if: "preceding-sibling::*[3]/*[2][self::m:mn][.='2']" # if the exponent is 2 + then: [T: "a négyzeten"] + - else_if: "preceding-sibling::*[3]/*[2][self::m:mn][.='3']" # if the exponent is 3 + then: [T: "a köbön"] + else: + - T: "a(z)" + - test: + if: "preceding-sibling::*[3]/*[2][self::m:mn][not(contains(., '.'))]" # if the exponent is an integer + then: [x: "ToOrdinal(preceding-sibling::*[3]/*[2])"] # say the ordinal form + else: [x: "preceding-sibling::*[3]/*[2]"] # else, say the exponent + - T: "hatványon" + else: # if the current node is an with parentheses + - x: "*[1]" + - x: "*[2]" + - x: "*[3]" + - test: + - if: "preceding-sibling::*[2]/*[2][self::m:mn][.='2']" # if the exponent is 2 + then: [T: "a négyzeten"] + - else_if: "preceding-sibling::*[2]/*[2][self::m:mn][.='3']" # if the exponent is 3 + then: [T: "a köbön"] + else: + - T: "a(z)" + - test: + if: "preceding-sibling::*[2]/*[2][self::m:mn][not(contains(., '.'))]" # if the exponent is an integer + then: [x: "ToOrdinal(preceding-sibling::*[2]/*[2])"] # say the ordinal form + else: [x: "preceding-sibling::*[2]/*[2]"] # else, say the exponent + - T: "hatványon" + +- name: function-power # audit-ignore tag: power match: - - "following-sibling::*[1][self::m:mo][.='⁡']" #invisible function apply + - "following-sibling::*[1][self::m:mo][.='⁡'] and" #invisible function apply + - "not(*[1][IsInDefinition(., 'TrigFunctionNames')])" replace: - test: if: "$Verbosity!='Terse'" - then: [t: "the"] # # phrase('the' fourth power of 10) + then: [T: ""] # phrase('the' third power of 2) - bookmark: "*[2]/@id" - test: if: "*[2][self::m:mn][not(contains(., '.'))]" then: [x: "ToOrdinal(*[2])"] else: [x: "*[2]"] - - t: "power of" # phrase(the fourth 'power of' 2) + - T: "hatványon" # phrase(the third 'power of' 6) - pause: short - x: "*[1]" -# non-function rules for power -- name: squared-or-cubed +# Handles trig function powers (non-2/3) at the base node so generic power rules do not speak the base/exponent too early. +- name: trig-function-power-base-only # audit-ignore + tag: power + match: + - "following-sibling::*[1][self::m:mo][.='⁡'] and" + - "*[1][IsInDefinition(., 'TrigFunctionNames')] and" + - "not(*[2][self::m:mn][.='2' or .='3'])" + replace: + - x: "*[1]" + +- name: AfterPower-nested # audit-ignore + tag: power + match: # directly a superscript or an mrow that contains a superscript + - "$ClearSpeak_Exponents = 'AfterPower' and" + - "*[2][self::m:power or self::m:power or self::m:mrow[m:power]]" + replace: + - x: "*[1]" + - T: "a következő kitevőre emelve:" # phrase(5 'raised to the exponent' x plus 1) + - pause: short + - x: "*[2]" + - pause: short + - T: "kitevő vége" # phrase(5 raised to the exponent x plus 1 'end exponent') + +- name: AfterPower-default # audit-ignore + tag: power + match: "$ClearSpeak_Exponents = 'AfterPower'" + replace: + - x: "*[1]" + - T: "a következő hatványra emelve:" # phrase(x is 'raised to the power' 4) + - x: "*[2]" + - pause: short + +- name: squared-or-cubed # audit-ignore tag: power match: "*[2][self::m:mn][.='2' or .='3']" replace: @@ -200,44 +305,191 @@ - bookmark: "*[2]/@id" - test: if: "*[2][.=2]" - then: [t: "squared"] # phrase(5 'squared' equals 25) - else: [t: "cubed"] # phrase(5 'cubed' equals 125) + then: [T: "a négyzeten"] # phrase(5 'squared' equals 25) + else: [T: "a köbön"] # phrase(5 'cubed' equals 125) + +- name: times # audit-ignore + tag: mo + match: + # say "times" when invisible times is followed by parens or a superscript that has a base with parens or "|"s + # if we aren't sure if it is times or not, don't say anything + - ".='⁢' and (not(@data-function-guess) or $ClearSpeak_Functions = 'None') and" + - "not(ancestor-or-self::*[contains(@data-intent-property, ':literal:')]) and (" + - " $ClearSpeak_ImpliedTimes = 'MoreImpliedTimes'" + - " or " + - " following-sibling::*[1][" + - " IsBracketed(., '(', ')') or IsBracketed(., '[', ']') or IsBracketed(., '|', '|') or " + # most of these aren't mentioned in ClearSpeak spec, but are (I think) expected uses of "times" + - " self::m:matrix or self::m:determinant or self::m:binomial or" # followed by parens + - " self::m:square-root or self::m:msqrt or self::m:root or self::m:mroot or" + - " (self::m:msub or self::m:msubsup or" + - " ((self::m:msup or self::m:power) and not(IsNode(*[1], 'leaf') and *[2][self::m:mn and (.=2 or '.=3')]))) and " # followed by msup, etc. + - " (*[1][self::m:mrow[IsBracketed(., '(', ')') or IsBracketed(., '[', ']') or IsBracketed(., '|', '|')] or " + - " self::m:matrix or self::m:determinant] or" # base has parens + - " not(IsNode(*[2], 'simple')) or " + - " (self::m:msubsup and not(IsNode(*[3], 'simple')))" + - " )" + - " ]" + # other possibility is the preceding element has parens (but not the following) + # this is not mentioned in the ClearSpeak rules or examples but seems like it should say "times". E.g, |x| y + - " or " + - " preceding-sibling::*[1][" + - " IsBracketed(., '(', ')') or IsBracketed(., '[', ']') or IsBracketed(., '|', '|')]" # followed by parens + - " )" + replace: + - T: "szorozva" # phrase(5 'times' 3 equals 15) -- name: simple-integer +- name: simple-integer # audit-ignore tag: power match: "*[2][self::m:mn][not(contains(., '.'))]" replace: - x: "*[1]" - - t: "to the" # phrase(15 raised 'to the' second power equals 225) + - T: "a(z)" # phrase(2 raised 'to the' power 7) - test: - if: "*[2][.>0]" + if: "*[2][.>=0]" then: [x: "ToOrdinal(*[2])"] else: [x: "*[2]"] -- name: simple-negative-integer + - T: "hatványon" + +- name: simple-negative-integer # audit-ignore tag: power match: - - "*[2][self::m:minus and count(*)=1 and" - - " *[1][self::m:mn][not(contains(., '.'))]]" + - "*[2][self::m:minus and count(*)=1 and " + - " *[1][self::m:mn][not(contains(., '.'))]" + - " ]" replace: - x: "*[1]" - - t: "to the" # phrase(15 raised 'to the' second power equals 225) + - T: "a" # phrase(2 raised 'to the' power 7) - x: "*[2]" -- name: simple-var + - T: "hatványon" + +- name: simple-var # audit-ignore tag: power match: "*[2][self::m:mi][string-length(.)=1]" replace: - x: "*[1]" - - t: "to the" # phrase(15 raised 'to the' second power equals 225) + - T: "a(z)" # phrase(3 raised 'to the' power 7) + - x: "*[2]" + - pronounce: [text: "-edik", ipa: "ɛdik", sapi5: "edik", eloquence: "edik"] + - T: "hatványon" + +- name: nested-squared-or-cubed # audit-ignore + tag: power + match: + - "$ClearSpeak_Exponents = 'Auto' and" + - "*[2][self::m:power][" + - " *[2][self::m:mn][.='2' or .='3'] and " # exp is 2 or 3 + # base is mn, mi, common fraction ([xxx] case) + - " *[1][self::m:mn or self::m:mi or " + - " self::m:fraction[*[1][self::m:mn][not(contains(., '.')) and text()<20] and" + - " *[2][self::m:mn][not(contains(., '.')) and 2<= text() and text()<=10]]" + - " ]" + - " ]" + replace: + - x: "*[1]" + - T: "emelve a(z)" # phrase(x 'raised to the' second power) + - x: "*[2]" + - T: "hatványra" # phrase(x raised to the second 'power') + +- # - [xxx]^n + name: nested-negative-squared-or-cubed # audit-ignore + tag: power + match: + - "$ClearSpeak_Exponents = 'Auto' and" + - " *[2][self::m:minus and count(*)=1 and " + - " *[1]/*[1][self::m:power][" + - " *[2][self::m:mn][.='2' or .='3'] and " # exp is 2 or 3" + # base is mn, mi, common fraction ([xxx] case) + - " *[1][self::m:mn or self::m:mi or " + - " self::m:fraction[*[1][self::m:mn][not(contains(., '.')) and text()<20] and" + - " *[2][self::m:mn][not(contains(., '.')) and 2<= text() and text()<=10]]" + - " ]" + - " ]" + - " ]" + replace: + - x: "*[1]" + - T: "emelve a(z)" # phrase(x 'raised to the' second power) + - x: "*[2]" + - T: "hatványra" # phrase(x raised to the second 'power') + +- # [xxx] var^n + name: nested-var-squared-or-cubed # audit-ignore + tag: power + match: + - "$ClearSpeak_Exponents = 'Auto' and" + - " *[2][self::m:mrow][count(*)=3][ " + - " *[3][self::m:power][" + - " *[2][self::m:mn][.='2' or .='3'] and " # exp is 2 or 3 + - " *[1][self::m:mi]" + - " ] and " + - " *[2][self::m:mo][.='⁢'] and " # invisible times + # base is mn, or common fraction ([xxx] case) + - " *[1][self::m:mn or " + - " self::m:fraction[*[1][self::m:mn][not(contains(., '.')) and text()<20] and" + - " *[2][self::m:mn][not(contains(., '.')) and 2<= text() and text()<=10]]" + - " ]" + - " ]" + replace: + - x: "*[1]" + - T: "emelve a(z)" # phrase(x 'raised to the' second power) - x: "*[2]" - - pronounce: [text: "-th", ipa: "θ", sapi5: "th", eloquence: "T"] + - T: "hatványra" # phrase(x raised to the second 'power') + +- # -[xxx] var^n + name: nested-negative-var-squared-or-cubed # audit-ignore + tag: power + match: + - "$ClearSpeak_Exponents = 'Auto' and" + - " *[2][self::m:mrow][count(*)=3][ " + - " *[3][self::m:power][" + - " *[2][self::m:mn][.='2' or .='3'] and " # exp is 2 or 3 + - " *[1][self::m:mi]" + - " ] and " + - " *[2][self::m:mo][.='⁢'] and " # invisible times + - " *[1][self::m:minus and count(*)=1 and " + # base is mn, or common fraction ([xxx] case) + - " *[1][self::m:mn or " + - " self::m:fraction[*[1][self::m:mn][not(contains(., '.')) and text()<20] and" + - " *[2][self::m:mn][not(contains(., '.')) and 2<= text() and text()<=10]]" + - " ]" + - " ]" + - " ]" + replace: + - x: "*[1]" + - T: "emelve a" # phrase(x 'raised to the' second power) + - x: "*[2]" + - T: "hatványra" # phrase(x raised to the second 'power') + +- name: default-exponent-power # audit-ignore + tag: power + match: # directly a superscript or an mrow that contains a superscript + - "*[2][self::m:power or self::m:power or self::m:mrow[m:power]]" + replace: + - x: "*[1]" + - T: "emelve a következő kitevőre:" # phrase(x is 'raised to the exponent') + - pause: short + - x: "*[2]" + - pause: short + - T: "kitevő vége" # phrase(and now 'end exponent' has been reached) + +- name: default + tag: power + match: "." + replace: + - x: "*[1]" + - T: "a(z)" # phrase(x 'raised to the' second power) + - x: "*[2]" + - T: "hatványon" # phrase(x raised to the second 'power') - name: simple tag: power match: "IsNode(*[2], 'leaf')" replace: - x: "*[1]" - - t: "to the" # phrase(15 raised 'to the' second power equals 225) + - T: "a(z)" # phrase(15 raised 'to the' second power equals 225) - x: "*[2]" + - T: "hatványon" + - name: nested # it won't end in "power" if the exponent is simple enough @@ -251,99 +503,163 @@ - " ]" replace: - x: "*[1]" - - t: "raised to the" # phrase(15 'raised to the' second power equals 225) + - T: "emelve a(z)" # phrase(15 'raised to the' second power equals 225) - x: "*[2]" - pause: short - test: if: "$Impairment = 'Blindness'" then: - - t: "end exponent" # phrase(start 2 raised to the exponent 4 'end of exponent') + - T: "kitevő vége" # phrase(start 2 raised to the exponent 4 'end of exponent') - pause: short else: - pause: medium -- name: default - tag: power - match: "." - replace: - - x: "*[1]" - - t: "raised to the" # phrase(15 'raised to the' second power equals 225) - - x: "*[2]" - - t: "power" # phrase(15 raised to the second 'power' equals 225) - - pause: short - -# -# Some rules on mrows -# -- name: set +- name: set # audit-ignore tag: set match: "." replace: - test: - if: "count(*)=0" + then: [T: "az üres halmaz"] # phrase('the empty set') + - else_if: "count(*)=2" then: - test: if: "$Verbosity!='Terse'" - then: [t: "the"] # phrase('the' empty set) - - t: "empty set" # phrase(when a set contains no value it is called an 'empty set' and this is valid) + then: [T: "az"] # phrase('the' empty set) + - T: "üres halmaz" # phrase(the 'empty set') - else_if: "count(*[1]/*)=3 and *[1]/*[2][self::m:mo][.=':' or .='|' or .='∣']" then: - test: if: "$Verbosity!='Terse'" - then: [t: "the"] # phrase('the' set of all integers) - - t: "set of all" # phrase(the 'set of all' positive integers less than 10) + then: [T: ""] # phrase('the' set of all integers) - x: "*[1]/*[1]" - - t: "such that" # phrase(x 'such that' x is less than y) + - T: "melyekre teljesül, hogy" # phrase(this is a 'set of' numbers) + - test: + if: "$ClearSpeak_Sets != 'woAll'" + then: [T: "minden"] # phrase(the set of 'all' integers) - x: "*[1]/*[3]" else: - test: - if: "$Verbosity!='Terse'" - then: [t: "the"] # phrase('the' set of integers) - - t: "set" # phrase(here is a 'set' of numbers) + if: "$ClearSpeak_Sets != 'SilentBracket'" + then: + - test: + if: "$Verbosity!='Terse'" + then: [T: "a(z)"] # phrase('the' set of integers) - x: "*[1]" + - T: "halmaz" # phrase(this is a 'set' of integers) -- name: times +# +# Some rules on mrows +# +- # intervals are controlled by a ClearSpeak Preference -- parens/brackets don't have to match, so we avoid IsBracketed + # alternatively, we could have four (or ten) rules, but there is a lot of duplication if we do that + # this one rule handles all ten cases listed as part $ClearSpeak_Paren = 'Interval' + # note that *[2] is an mrow with X, ",", Y, so getting X or Y is a double index + name: ClearSpeak-intervals # audit-ignore # avoid overriding with default "intervals" name + variables: + - is_intervals_start_infinity: "*[1][self::m:minus and count(*)=1 and *[1][.='∞']]" + - T: "elemet" + - is_intervals_end_infinity: "*[2][.='∞'or (self::m:plus and count(*)=1 and *[1][.='∞'])]" + tag: [open-interval, open-closed-interval, closed-interval, closed-open-interval] + match: "." + replace: + - x: "*[1]" + - T: "től" + - x: "*[2]" + - T: "ig terjedő intervallum" + - pause: short + - test: + if: "not($is_intervals_start_infinity)" + then: + - test: + if: "starts-with(name(.), 'open')" + then: [T: "nem"] # phrase(the interval from a to b 'not' including b) + - T: "tartalmazza a" # phrase(the interval from a to b not 'including' b) + - x: "*[1]" + - T: "elemet" + # logic to deal with [not] arg #1 + - test: + if: "not($is_intervals_start_infinity or $is_intervals_end_infinity)" + then_test: + - if: "name(.)='open-interval'" + then: [T: "vagy"] # phrase(the interval including a 'or' b ) + - else_if: "name(.)='closed-interval'" + then: [T: "és"] # phrase(the interval including a 'and' b) + else: [T: "de"] # phrase(the interval including a 'but' not b) + # some ugly logic dealing with connectives: or, but, but, and (cleaner to be part of next clause?) + - test: + if: "not($is_intervals_end_infinity)" + then: + - test: + # there is some asymmetry to the test because of the and/or/but logic above + if: "not( name(.)='open-interval' or name(.)='closed-interval' ) or $is_intervals_start_infinity" + then: + - test: + if: "name(.) = 'open-interval' or name(.) = 'closed-open-interval'" + then: [T: "nem"] # phrase(the interval 'not' including a) + - T: "tartalmazza" # phrase(the interval not 'including' a) + - T: "a" + - x: "*[2]" + - T: "elemet" + # onto the [not] [including]... part + +- name: ClearSpeak_Functions_None tag: mo match: - # say "times" when invisible times is followed by parens or a superscript that has a base with parens or "|"s - # added: say times is the superscript is not simple - # if we aren't sure if it is times or not, don't say anything - - ".='⁢' and" - - "not(@data-function-guess) and (" - - "not(ancestor-or-self::*[contains(@data-intent-property, ':literal:')]) and " - - " following-sibling::*[1][" - - " IsBracketed(., '(', ')') or IsBracketed(., '[', ']') or IsBracketed(., '|', '|') or " - - " self::m:matrix or self::m:determinant or self::m:binomial or" # followed by parens - - " self::m:square-root or self::m:msqrt or self::m:root or self::m:mroot or" - - " (self::m:msub or self::m:msubsup or" - - " ((self::m:msup or self::m:power) and not(IsNode(*[1], 'leaf') and *[2][self::m:mn and (.=2 or '.=3')]))) and " # followed by msup, etc. - - " (*[1][self::m:mrow[IsBracketed(., '(', ')') or IsBracketed(., '[', ']') or IsBracketed(., '|', '|')] or " - - " self::m:matrix or self::m:determinant] or" # base has parens - - " not(IsNode(*[2], 'simple')) or " - - " (self::m:msubsup and not(IsNode(*[3], 'simple')))" - - " )" - - " ]" # other possibility is the preceding element has parens (but not the following) - - " or " - - " preceding-sibling::*[1][" - - " IsBracketed(., '(', ')') or IsBracketed(., '[', ']') or IsBracketed(., '|', '|')]" # followed by parens - - " )" + - ".='⁡' and $ClearSpeak_Functions = 'None' and" + - "not(preceding-sibling::*[1][IsInDefinition(., 'TrigFunctionNames')])" # Functions=None does not apply to "trig" functions + replace: + test: + if: "$ClearSpeak_ImpliedTimes = 'None'" + then: [T: ""] + else: [T: "szorozva"] # phrase(5 'times' 3 equals 15) + +- name: no-times + tag: mo + match: + # Note: this rule is also part of the paren rule so that the parens speak + - ".='⁢' and $ClearSpeak_ImpliedTimes = 'None'" replace: - - t: "times" # phrase(7 'times' 5 equals 35) + - T: "" -- name: no-say-parens +- name: no-say-parens # audit-ignore tag: mrow match: - "parent::*[not(self::m:msup) and not(self::m:msub) and not(self::m:msubsup) and not(self::m:power) and" - " not(self::m:math) ] and " # rule out [x] standing alone - "( IsBracketed(., '(', ')') or IsBracketed(., '[', ']') ) and " - - "( IsNode(*[2], 'simple') ) and" + - "not( $ClearSpeak_Functions = 'None' and " + - " (preceding-sibling::*[1][.='⁡'] or following-sibling::*[1][.='⁡']) ) and " + - "not( $ClearSpeak_ImpliedTimes = 'None' and " + - " (preceding-sibling::*[1][.='⁢'] or following-sibling::*[1][.='⁢']) ) and " + - "IsNode(*[2], 'simple') and" - "not(preceding-sibling::*[1][.='\u2062' and @data-function-guess]) and" - "not(ancestor-or-self::*[contains(@data-intent-property, ':literal:')])" # missing clause: 'a positive fraction that is spoken as an ordinal - # (either by the Ordinal preference or by the default rules_' + # (either by the Ordinal preference or by the default rules)' replace: - x: "*[2]" +- name: ClearSpeak-default # audit-ignore + tag: [mtr, mlabeledtr] + match: "parent::m:matrix or parent::m:determinant" + variables: [NextLineIsContinuedRow: "following-sibling::*[1][contains(@data-intent-property, ':continued-row:')]"] + replace: + - pause: medium + - x: "count(preceding-sibling::*)+1" + - T: ". sor" # phrase(the first 'row' of a matrix) + - test: + if: ".[self::m:mlabeledtr]" + then: + - T: "címkéje:" # phrase(the line 'with label' first equation) + - x: "*[1]/*" + - pause: short + - pause: medium + - test: + if: ".[self::m:mlabeledtr]" + then: [x: "*[position()>1]"] + else: [x: "*"] + - include: "SharedRules/geometry.yaml" - include: "SharedRules/linear-algebra.yaml" - include: "SharedRules/general.yaml" diff --git a/Rules/Languages/hu/definitions.yaml b/Rules/Languages/hu/definitions.yaml index 40a5427d3..c0e75bee2 100644 --- a/Rules/Languages/hu/definitions.yaml +++ b/Rules/Languages/hu/definitions.yaml @@ -10,50 +10,280 @@ # for readability, spaces can be used around any of the delimiter characters # Note: if there are multiple fixities, the first one is used if the fixity is not given in the intent - IntentMappings: { - "indexed-by": "infix= ; sub; end sub: end sub: end subscript", - "modified-variable": "silent= ", - "say-super": "infix=super: superscript: superscript", # used with 'mo' for superscripts (e.g, "<") + "indexed-by": "infix= alsó index kezdete; alsó index; alsó index vége: alsó index vége: alsó index vége", + "say-super": "infix=felső index: felső index: felső index", # used with 'mo' for superscripts (e.g, "<") "skip-super": "silent=", # used with 'mo' for superscripts (e.g, "*") - "absolute-value": "function= ; absolute value: the absolute value: the absolute value; end absolute value", - "binomial": "infix=binomial; choose; end binomial", + "absolute-value": "function= ; abszolút érték: az abszolút érték: az abszolút érték; abszolút érték vége", + "binomial": "infix=binomiális kezdete; a; binomiális vége", "dimension-product": "infix=by", - # "closed-interval": "other=closed-interval; from,to; end closed-interval", - "greatest-common-divisor": "function=gcd: the gcd: the greatest common divisor", - "imaginary-part": "function=imaginary part: the imaginary part: the imaginary part", - "least-common-multiple": "function=lcm: the lcm: the least common multiple", + ### Functions and Inverses + # "closed-interval": "other=zárt intervallum; -tól,be; zárt intervallum vége", + # "closed-interval":"function=closed interval between; and", #NOTE: Check test, does not follow + #"closed-open-interval":"function=interval between; included and", + #"open-closed-interval":"function=interval between; and included", + #"open-interval":"function=open interval between; and", + "inverse":"function=inverse || postfix=inverse", + "domain": "function= ; domén", + "codomain": "function= ; kodomán", + "image":"function=image", + #"fraction":"function=fraction; over; end fraction", # NOTE: Fails + "mixed-fraction":"infix=and", # NOTE: in website says function, but follow infix speech pattern. + "greatest-common-divisor": "function=gcd: a GCD: a legnagyobb közös osztó", + "quotient":"function=szám rész; osztva ezzel:", # NOTE: Logic somewhere here failing, becomes "divided by of x comma, y" instead of "integer part of x divided by y" + "evaluated-at":"infix=értékelték", + "remainder":"function=a maradék; osztva ezzel:", + "max":"function=max", + "min":"function=min", + "power":"infix=a hatványra", + "root":"function=root", + "imaginary-part": "function=képzeletbeli rész: a képzeletbeli rész: a képzeletbeli rész", + "least-common-multiple": "function=lcm: a legkisebb közös többszörös: a legkisebb közös többszörös", + "complex-conjugate":"function=Komplex konjugált", + "complex-arg":"function=argumentum", + "polar-coordinate":"function=poláris koordináta; vessző", + "spherical-coordinate":"function=gömb koordináta; vessző; vessző", + "cartesian-coordinate":"function=derékszögű koordináta; vessző", + "coordinate":"function=koordináta; vessző", + "floor":"function=lépcső", + "ceiling":"function=mennyezet", + "round":"function=kerekített érték", + "fractional-part":"function=tört rész", # "large-op": "infix=over || other=from,to", - "limit": "prefix=limit as: the limit as: the limit as", - "lim-sup": "prefix=lim sup as: the limit superior as: the limit superior as", - "lim-inf": "prefix=lim inf as: the limit inferior as : the limit inferior as", - "logarithm-with-base": "prefix=log base: the log base: the log base", - "natural-logarithm": "function=l n: natural log: natural log", - "minus": "infix=minus || prefix=negative", - "plus": "infix=plus || prefix=positive", + "limit": "prefix=határérték: határérték: határérték", + "lim-sup": "prefix=lim-sup: a határérték, amely nagyobb, mint: a határérték, amely nagyobb, mint", + "lim-inf": "prefix=lim inf mint: az alsó határérték, mint: a határérték alsó határértéke, mint", + "logarithm-with-base": "prefix=alap logaritmus: alap logaritmus: alap logaritmus", # "pochhammer": "infix=permutations of", # arguments are in reverse order, so can't work here - "real-part": "function=the real part", - - "transpose": "postfix=transpose || function=transpose", - "norm": "function=; norm: norm: norm; end norm", - "trace": "function= ; trace : trace: the trace; end trace", - "dimension": "function=; dimension : dimension: the dimension; end dimension", - "homomorphism": "function= ; homomorphism : homomorphism: the homomorphism; end homomorphism", - "kernel": "function= ; kernel : kernel: the kernel; end kernel", - "vector": "function= ; vector || prefix=vector", - "cross-product": "infix=cross: cross product: cross product", - "dot-product": "infix=dot: dot product: dot: dot product", - - "divergence": "function= ; dihv: divergence: divergence; end divergence", - "curl": "function= ; curl; end curl", - "gradient": "function= ; del: gradient: gradient; end gradient", - "laplacian": "function=lahplahsian", # speech engines don't do a good job with "laplacian" - - "chemistry-concentration": "function= ; concentration: concentration of: the concentration of; end concentration", + "real-part": "function=az igazi rész", + "trace": "function= ; nyom : nyom: a nyom; nyom vége", + "dimension": "function=; dimenzió : dimenzió: a dimenzió; dimenzió vége", + "homomorphism": "function= ; homomorfizmus : homomorfizmus: a homomorfizmus; homomorfizmus vége", + "kernel": "function= ; kernel : kernel: a kernel; kernel vége", + "dot-product": "infix=skaláris szorzat: skaláris szorzat: skaláris szorzat: skaláris szorzat", + + #"divergence": "function= ; dihv: divergencia: divergencia; divergencia vége", + #"laplacian": "function=laplaciáns", # speech engines don't do a good job with "laplacian" + + "chemistry-concentration": "function= ; koncentráció: koncentrációja ennek: a koncentrációja; koncentráció vége", + ### Calculus + "definite-integral":"function=integrál felett || function=integrál innen:; ide:", # Property ??? + "derivative":"function=a deriváltja; mely erre vonatkozik:", # Property ??? + "tends-to":"infix=általában", + "tends-to-from-above":"infix=általában alulról indul", + + ### Sets + "set": "function= ; halmaz: a halmaz", + "complement":"function=komplemens", + "empty-set":"nofix=üres halmaz", + "cardinality":"function=számosság", # NOTE: does not have a defined speech template in website + "list":"function=lista", + "tuple": "function= ; tuple: a tuple", + ### Sequence and Series + "sum":"function= ; összegzés : összeg ; ", #: sum over : sum from; to", + "product":"function=produktum || function=produktum vége || function=produktum innen:; ide:", + + ### Elementary classical functions + "sine":"function=szinusz: szinusz", + "cosine":"function=koszinusz: koszinusz", + "tangent":"function=tangens: tangens", + "secant":"function=szekáns: szekáns", + "cosecant":"function=koszekáns: koszekáns", + "cotangent":"function=kotangens: kotangens", + "arcsine":"function=arkusz szinusz", + #"arccosine":"function=arkusz koszinusz", + "arctangent":"function=arkusz tangens", + "arcsecant":"function=arkusz szekáns", + "arccosecant":"function=arkusz koszekáns", + "arccotangent":"function=arkusz kotangens", + "hyperbolic-sine":"function=hiperbolikus szinusz", + "hyperbolic-cosine":"function=hiperbolikus koszinusz", + "hyperbolic-tangent":"function=hiperbolikus tangenstanch", + "hyperbolic-secant":"function=sech", + "hyperbolic-cosecant":"function=cosech", + "hyperbolic-cotangent":"function=coth", + "arc-hyperbolic-sine":"function=arc shine", + "arc-hyperbolic-cosine":"function=arc cosh", + "arc-hyperbolic-tangent":"function=arc tanch", + "arc-hyperbolic-secant":"function=arc sech", + "arc-hyperbolic-cosecant":"function=arc cosech", + "arc-hyperbolic-cotangent":"function=arc coth", + "exponential":"function=exponenciális", + "natural-logarithm": "function=l n: természetes alapú logaritmus: természetes alapú logaritmus", + "logarithm":"function=logaritmus", ##Check arity 2 + ### Statistics and Probability + "mean":"function=jelentése", + "standard-deviation":"function=szórás", + "variance":"function=variencia", + "median":"function=medián", + "mode":"function=mód", + "conditional-probability":"function=valószínűség; adott", # NOTE: Check test + + + ### Linear Algebra + "vector": "function= ; vektor || prefix=vektor kezdete", # prefix not tested, also prefix not on webpage + "matrix":"function=mátrix", # NOTE: Failing test, recheck + "determinant":"function=determináns", + "adjugate":"function=adjugált", + "magnitude":"function=nagyságrend", + "norm": "function=; normalizálás: normalizálás: normalizálás; normalizálás vége", + "span":"function=fesztávolság", + + "unit-vector":"prefix=egységvektor", + + "identity-matrix":"nofix=identitásmátrix", # NOTE: no function specified + "transpose":"function=transzponált || postfix=transzponált", # postfix needs testing + "dimensional-product":"infix=a(z)", # INFIX + + + ### Constants and Sets + "set-of-integers":"nofix=ℤ: az összes egész szám halmaza", + "set-of-reals":"nofix=ℝ: az összes valós szám halmaza", + "set-of-rationals":"nofix=ℚ: az összes racionális szám halmaza", + "set-of-natural-numbers":"nofix=ℕ: az összes természetes szám halmaza", + "set-of-complex-numbers":"nofix=ℂ: az összes komplex szám halmaza", + "set-of-primes":"nofix=ℙ: az összes prímszám halmaza", + + + ### Geometry + "line-segment":"prefix=line segment", + "directed-line-segment":"prefix=irányított vonalszakasz", + "line":"prefix=vonal", + "ray":"prefix=sugár", + "arc":"prefix=arkusz", + + "length":"function=hossz", + "area":"function=terület", + + "point":"prefix=pont", ## NOTE: Has ??? for property in site. Should it be prefix? Or something else. + + ### Separators + "time-separator":"infix=", + + ### General Concepts + "fenced-group":"function=bekerített csoport", # appears both under general concepts and grouping + # NOTE: in site mentions "the pair x and y", due to being defined as function, needs the "of" keyword + "ordered-pair": "function= ; a pár; és", # Needs to be tested, test converts "and" to "comma," + "highlight":"postfix=kiemelt", + "least-common-denominator":"function=legkisebb közös nevező", + "rate":"infix=per", + "constraint":"infix= ; korlátozással; ", + + "binomial-coefficient":"infix=választ", + "pochhammer":"function=permutáció", + "permutation-cycle":"function=permutációs ciklus", + "embellished-name":"infix=jegyzetekkel", + + ### Other + ## Default fixity function + "curl": "function=rotáció", + "divergence": "function=eltérés:eltérés", + "gradient": "function=gradiens:gradiens", + "laplacian": "function=laplaciánus", + + ## Default fixity prefix + "angle": "prefix=szög", + "angle-measure": "prefix=szögmérés", + "change": "prefix=változás", + "for-all": "prefix=mindenkinek", + "measured-angle": "prefix=mért szög", + "not": "prefix=nem", + "number-of": "prefix=száma", + "partial-derivative": "prefix=parciális derivált", + "right-angle": "prefix=derékszög", + "square-root-of": "prefix=négyzetgyöke", + "there-does-not-exist": "prefix=nem létezik", + "there-exists": "prefix=létezik", + + + ## Default fixity infix + "and": "infix=és", + "applied-to": "infix=alkalmazva erre", + "approximately": "infix=hozzávetőlegesen", + "congruent": "infix=egybeesik", + "cartesian-product": "infix=derékszögű szorzat", + "composed-with": "infix=komponálva", + "cross-product": "infix=kereszt szorzata: kereszt szorzata: kereszt szorzata", + "defined-as": "infix=definiálva", + "divided-by": "infix=osztva", + "divides": "infix=osztja", + "does-not-belong-to": "infix=nem tartozik hozzá", + "does-not-divide": "infix=nem osztja", + "downwards-diagonal-ellipsis": "infix=lefelé mutató átlós ellipszis", + "direct-product": "infix=direkt produktum", + "element-of": "infix=eleme", + "ellipsis": "infix=ellipszis", + "equals": "infix=egyenlő", + "equivalent-to": "infix=egyenértékű ezzel", + "evaluates-to": "infix=értéke", + "given": "infix=adott", + "greater-than": "infix=nagyobb, mint", + "greater-than-or-equal-to": "infix=nagyobb vagy egyenlő, mint", + "identically-equals": "infix=teljesen egyenlő", + "if-and-only-if": "infix=akkor és csak akkor, ha", + "implies": "infix=utal", + "inner-product": "infix=belső produktum", + "intersection": "infix=keresztezi", + "less-than": "infix=kisebb, mint", + "less-than-or-equal-to": "infix=kisebb vagy egyenlő, mint", + "list-separator": "infix=vessző", + "maps-to": "infix=megfelel ennek", + "member-of": "infix=tagja", + "minus-or-plus": "infix=mínusz vagy plusz", + "not-subset": "infix=nem részhalmaza", + "not-superset": "infix=nem szuperhalmaz", + "not-equal-to": "infix=nem egyenlő", + "not-member-of": "infix=nem tagja", + "not-parallel-to": "infix=nem párhuzamos", + "obtained-from": "infix=származó", + "or": "infix=vagy", + "outer-product": "infix=külső produktum", + "parallel-to": "infix=párhuzamos", + "perpendicular": "infix=merőleges", + "plus": "infix=plusz || prefix=pozitív", # Prefix not tested + "minus": "infix=mínusz || prefix=negatív", # Prefix not tested + "plus-or-minus": "infix=plusz vagy mínusz", + "precedes": "infix=megelőzi", + "proportional": "infix=arányos", + "range-separator": "infix=keresztül", + "ratio": "infix=hányados", + "similar": "infix=hasonló", + "subset": "infix=részhalmaza", + "subset-or-equal": "infix=részhalmaza vagy egyenlő", + "succeeds": "infix=sikerül", + "such-that": "infix=úgy, hogy", + "superset": "infix=szuperhalmaza", + "superset-or-equal": "infix=szuperhalmaz vagy egyenlő", + "tilde": "infix=tilde", + "times": "infix=szorzata", + "union": "infix=unió", + "upwards-diagonal-ellipsis": "infix=felfelé átlós ellipszis", + "vertical-ellipsis": "infix=függőleges ellipszis", + "xor": "infix=kizárólagos vagy", + + ## Default fixity postfix + "factorial": "postfix=faktoriális", + "percent": "postfix=százalék", + + ## Default fixity nofix + "diameter":"nofix=átmérő: átmérő", + "distance":"nofix=távolság; távolság: távolság", + "probability":"nofix=P: valószínűség", + "radius":"nofix=r: sugár", + "volume":"nofix=V: hangerő || function=", + "exponential-e":"nofix=e", + "imaginary-i":"nofix=i", + "differential-d":"nofix=d", + "golden-ratio":"nofix=aranymetszés", + + + ## Other : Not tested, don't appear in https://w3c.github.io/mathml-docs/intent-core-concepts/ + "modified-variable": "silent= " } # Names of functions that in terse mode don't say "of" (or it's equivalent in other languages) - TerseFunctionNames: { - "divergence", "gradient", "curl" + "divergens", "gradiens", "rotáció" } - NavigationParts: { @@ -90,12 +320,12 @@ # I asked bard and chatgpt for formula words that are alphabetical, and they failed. # Here are the words I managed to find, but it almost certainly not complete. Change the list for other languages. - "Abel", "aery", "ails", "airy", "amps", "ceil", "cents", "chop", "flux", "flow", "knot", "most" + "Abel", "fészkelő", "ails", "levegős", "amps", "ceil", "cent", "szelet", "fényáram", "folyik", "csomó", "több" } - SIPrefixes: { - "Q": "quetta", "R": "ronna", "Y": "yotta", "Z": "zetta", "E": "exa", "P": "peta", "T": "tera", "G": "giga", "M": "mega", "k": "kilo", "h": "hecto", "da": "deka", - "d": "deci", "c": "centi", "m": "milli", "µ": "micro", "n": "nano", "p": "pico", "f": "femto", "a": "atto", "z": "zepto", "y": "yocto", "r": "ronto", "q": "quecto" + "Q": "quetta", "R": "ronna", "Y": "yotta", "Z": "zetta", "E": "exa", "P": "peta", "T": "tera", "G": "giga", "M": "mega", "k": "kiló", "h": "hektó", "da": "deka", + "d": "deci", "c": "centi", "m": "milli", "µ": "mikro", "n": "nano", "p": "pikó", "f": "femto", "a": "atto", "z": "zepto", "y": "yokto", "r": "ronto", "q": "quecto" } # this is a list of all units that accept SIPrefixes @@ -104,19 +334,19 @@ # The SI prefixes can be used with several of accepted units, but not, for example, with the non-SI units of time. - SIUnits: { # base units - "A": "amp", - "cd": "candela", + "A": "amper", + "cd": "kandela", "K": "kelvin", "K": "kelvin", # U+212A "g": "gram", - "m": "metre", # British spelling works for US also - "mol": "mole", - "s": "second", "sec": "second", # "sec" not actually legal + "m": "méter", # British spelling works for US also + "mol": "mol", + "s": "másodperc", "sec": "másodperc", # "sec" not actually legal # derived units "Bq": "becquerel", - "C": "coulomb", - "°C": "degree celsius", "℃": "degree celsius", # should only take negative powers - "F": "farad", + "C": "Coulomb", + "°C": "Celsius fok", "℃": "Celsius fok", # should only take negative powers + "F": "farád", "Gy": "gray", "H": "henry", "Hz": "hertz", @@ -135,18 +365,18 @@ "Wb": "weber", # accepted (plus a few variants) that take SI prefixes - "l": "litre", "L": "litre", "ℓ": "litre", # Should only take negative powers; British spelling works for US also - "t": "metric ton", # should only take positive powers + "l": "liter", "L": "liter", "ℓ": "liter", # Should only take negative powers; British spelling works for US also + "t": "metrikus tonna", # should only take positive powers "Da": "dalton", "Np": "neper", # should only take negative powers - "u": "atomic mass unit", # 'u' is correct: https://en.wikipedia.org/wiki/Dalton_(unit) - "eV": "electronvolt", - "rad": "radian", # should only take negative powers - "sr": "steradian", # should only take negative powers + "u": "atomtömegegység", # 'u' is correct: https://en.wikipedia.org/wiki/Dalton_(unit) + "eV": "elektronvolt", + "rad": "radián", # should only take negative powers + "sr": "szteradián", # should only take negative powers # others that take a prefix - "a": "annum", # should only take positive powers - "as": "arcsecond", # see en.wikipedia.org/wiki/Minute_and_second_of_arc + "a": "év", # should only take positive powers + "as": "ívmásodperc", # see en.wikipedia.org/wiki/Minute_and_second_of_arc # technically wrong, but used in practice with SI Units "b": "bit", # should only take positive powers @@ -157,45 +387,45 @@ - UnitsWithoutPrefixes: { # time - "″": "second", "\"": "second", - "′": "minute", "'": "minute","min": "minute", - "h": "hour", "hr": "hour", "Hr": "hour", - "d": "day", "dy": "day", - "w": "week", "wk": "week", - "y": "year", "yr": "year", + "″": "másodperc", "\"": "másodperc", + "′": "perc", "'": "perc","min": "perc", + "h": "óra", "hr": "óra", "Hr": "óra", + "d": "nap", "dy": "nap", + "w": "hét", "wk": "hét", + "y": "év", "yr": "év", # angles - "°": "degree", "deg": "degree", # should only take negative powers - "arcmin": "arcminute", - "amin": "arcminute", - "am": "arcminute", - "MOA": "arcminute", - "arcsec": "arcsecond", - "asec": "arcsecond", + "°": "fok", "deg": "fok", # should only take negative powers + "arcmin": "ívperc", + "amin": "ívperc", + "am": "ívperc", + "MOA": "ívperc", + "arcsec": "ívmásodperc", + "asec": "ívmásodperc", # distance - "au": "astronomical unit", "AU": "astronomical unit", - "ltyr": "light year", "ly": "light year", - "pc": "parsec", - "Å": "angstrom", "Å": "angstrom", # U+00C5 and U+212B + "au": "csillagászati egység", "AU": "csillagászati egység", + "ltyr": "fényév", "ly": "fényév", + "pc": "parszek", + "Å": "angström", "Å": "angström", # U+00C5 and U+212B "fm": "fermi", # others - "ha": "hectare", + "ha": "hektár", # "B": "bel", # "B" more commonly means bytes "dB": "decibel", # already logarithmic, so not used with SI prefixes - "amu": "atomic mass unit", - "atm": "atmosphere", - "bar": "bar", - "cal": "calorie", + "amu": "atomikus tömeg", + "atm": "atmoszféra", + "bar": "bár", + "cal": "kalória", "Ci": "curie", - "grad": "gradian", - "M": "molar", - "R": "roentgen", - "rpm": "revolution per minute", + "grad": "gradiens", + "M": "mól", + "R": "röntgen", + "rpm": "fordulat per perc", "℧": "m-h-o", - "dyn": "dyne", + "dyn": "dyn", "erg": "erg", # powers of 2 used with bits and bytes @@ -206,81 +436,81 @@ # this will only be used if the language is English, so it can be empty for other countries - EnglishUnits: { # length - "in": "inch", - "ft": "foot", - "mi": "mile", - "rd": "rod", + "in": "hüvelyk", + "ft": "láb", + "mi": "mérföld", + "rd": "rúd", "li": "link", - "ch": "chain", + "ch": "lánc", # area - "sq in": "square inch", "sq. in": "square inch", "sq. in.": "square inch", - "sq ft": "square foot", "sq. ft": "square foot", "sq. ft.": "square foot", - "sq yd": "square yard", "sq. yd": "square yard", "sq. yd.": "square yard", - "sq mi": "square mile", "sq. mi": "square mile", "sq. mi.": "square mile", - "ac": "acre", - "FBM": "board foot", + "sq in": "négyzethüvelyk", "sq. in": "négyzethüvelyk", "sq. in.": "négyzethüvelyk", + "sq ft": "négyzetláb", "sq. ft": "négyzetláb", "sq. ft.": "négyzetláb", + "sq yd": "négyzetméter", "sq. yd": "négyzetméter", "sq. yd.": "négyzetméter", + "sq mi": "négyzetmérföld", "sq. mi": "négyzetmérföld", "sq. mi.": "négyzetmérföld", + "ac": "hold", + "FBM": "deszkaláb", # volume - "cu in": "cubic inch", "cu. in": "cubic inch", "cu. in.": "cubic inch", - "cu ft": "cubic foot", "cu. ft": "cubic foot", "cu. ft.": "cubic foot", - "cu yd": "cubic yard", "cu. yd": "cubic yard", "cu. yd.": "cubic yard", - "bbl": "barrel", "BBL": "barrel", - "pk": "peck", - "bu": "bushel", - "tsp": "teaspoon", - "tbl": "tablespoon", + "cu in": "köbhüvelyk", "cu. in": "köbhüvelyk", "cu. in.": "köbhüvelyk", + "cu ft": "köbláb", "cu. ft": "köbláb", "cu. ft.": "köbláb", + "cu yd": "köbyard", "cu. yd": "köbyard", "cu. yd.": "köbyard", + "bbl": "hordó", "BBL": "hordó", + "pk": "csipet", + "bu": "véka", + "tsp": "teáskanál", + "tbl": "evőkanál", # liquid - "fl dr": "fluid dram", - "fl oz": "fluid ounce", + "fl dr": "folyadékdróm", + "fl oz": "folyadék uncia", "gi": "gill", - "cp": "cup", "cup": "cup", + "cp": "csésze", "cup": "csésze", "pt": "pint", "qt": "quart", "gal": "gallon", # weight - "gr": "grain", + "gr": "gabona", "dr": "dram", - "oz": "ounce", "℥": "ounce", - "lb": "pound", - "cwt": "hundredweight", - "dwt": "pennyweight", - "oz t": "troy ounce", - "lb t": "troy pound", + "oz": "uncia", "℥": "uncia", + "lb": "font", + "cwt": "százfontos", + "dwt": "filléres", + "oz t": "troy uncia", + "lb t": "troy font", # energy - "hp": "horsepower", + "hp": "lóerő", "BTU": "BTU", - "°F": "degree fahrenheit", "℉": "degree fahrenheit", + "°F": "Fahrenheit fok", "℉": "Fahrenheit fok", # other - "mph": "mile per hour", - "mpg": "mile per gallon", + "mph": "mérföld per óra", + "mpg": "mérföld per gallon", } - CurrencySymbols: { - "$": "dollar", "¢": "cent", "€": "euro", "£": "pound", "₡": "colón", "₤": "lira", "₨": "rupee", - "₩": "won", "₪": "shekel", "₱": "peso", "₹": "rupee", "₺": "lira", "₿": "bitcoin", + "$": "dollár", "¢": "cent", "€": "euró", "£": "font", "₡": "colón", "₤": "font", "₨": "rúpia", + "₩": "won", "₪": "sékel", "₱": "pezó", "₹": "rúpia", "₺": "líra", "₿": "bitcoin", # could add more currencies... } - PluralForms: { # FIX: this needs to be flushed out - "inch": "inches", "square inch": "square inches", "cubic inch": "cubic inches", - "foot": "feet", "square foot": "square feet", "cubic foot": "cubic feet", - "board foot": "board feet", - "degree celsius": "degrees celsius", - "degree fahrenheit": "degrees fahrenheit", - "henry": "henries", + "inch": "hüvelyk", "square inch": "négyzet hüvelyk", "cubic inch": "köbhüvelyk", + "foot": "láb", "square foot": "négyzetláb", "cubic foot": "köbláb", + "board foot": "láb", + "degree celsius": "celsius fok", + "degree fahrenheit": "fahrenheit fok", + "henry": "henri", "hertz": "hertz", "lux": "lux", "siemens": "siemens", - "revolution per minute": "revolutions per minute", - "mile per hour": "miles per hour", - "mile per gallon": "miles per gallon", - "colón": "colones", "lira": "lire", "won": "won", "bitcoin": "bitcoin" + "revolution per minute": "fordulat percenként", + "mile per hour": "mérföld óránként", + "mile per gallon": "mérföld/gallon", + "colón": "colonok", "lira": "líra", "won": "won", "bitcoin": "bitcoin" } # Lines starting with "#" are a comment @@ -310,76 +540,76 @@ # For English, a regular pattern starts at twenty - NumbersOnes: [ - "zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", - "ten", "eleven", "twelve", "thirteen", "fourteen", "fifteen", "sixteen", - "seventeen", "eighteen", "nineteen" + "nulla", "egy", "kettő", "három", "négy", "öt", "hat", "hét", "nyolc", "kilenc", + "tíz", "tizenegy", "tizenkettő", "tizenhárom", "tizennégy", "tizenöt", "tizenhat", + "tizenhét", "tizennyolc", "tizenkilenc", "húsz", "huszonegy", "huszonkettő", "huszonhárom", "huszonnégy", "huszonöt", "huszonhat", "huszonhét", "huszonnyolc", "huszonkilenc", "harminc", "harmincegy", "harminckettő", "harminchárom", "harmincnégy", "harmincöt", "harminchat", "harminchét", "harmincnyolc", "harminckilenc", "negyven", "negyvenegy", "negyvenkettő", "negyvenhárom", "negyvennégy", "negyvenöt", "negyvenhat", "negyvenhét", "negyvennyolc", "negyvenkilenc", "ötven", "ötvenegy", "ötvenkettő", "ötvenhárom", "ötvennégy", "ötvenöt", "ötvenhat", "ötvenhét", "ötvennyolc", "ötvenkilenc", "hatvan", "hatvanegy", "hatvankettő", "hatvanhárom", "hatvannégy", "hatvanöt", "hatvanhat", "hatvanhét", "hatvannyolc", "hatvankilenc", "hetven", "hetvenegy", "hetvenkettő", "hetvenhárom", "hetvennégy", "hetvenöt", "hetvenhat", "hetvenhét", "hetvennyolc", "hetvenkilenc", "nyolcvan", "nyolcvanegy", "nyolcvankettő", "nyolcvanhárom", "nyolcvannégy", "nyolcvanöt", "nyolcvanhat", "nyolcvanhét", "nyolcvannyolc", "nyolcvankilenc", "kilencven", "kilencvenegy", "kilencvenkettő", "kilencvenhárom", "kilencvennégy", "kilencvenöt", "kilencvenhat", "kilencvenhét", "kilencvennyolc", "kilencvenkilenc", "száz" ] - NumbersOrdinalOnes: [ - "zeroth", "first", "second", "third", "fourth", "fifth", "sixth", "seventh", "eighth", "ninth", - "tenth", "eleventh", "twelfth", "thirteenth", "fourteenth", "fifteenth", "sixteenth", - "seventeenth", "eighteenth", "nineteenth" + "nulladik", "első", "második", "harmadik", "negyedik", "ötödik", "hatodik", "hetedik", "nyolcadik", "kilencedik", + "tizedik", "tizenegyedik", "tizenkettedik", "tizenharmadik", "tizennegyedik", "tizenötödik", "tizenhatodik", + "tizenhetedik", "tizennyolcadik", "tizenkilencedik", "huszadik", "huszonegyedik", "huszonkettedik", "huszonharmadik", "huszonnegyedik", "huszonötödik", "huszonhatodik", "huszonhetedik", "huszonnyolcadik", "huszonkilencedik", "harmincadik", "harmincegyedik", "harminckettedik", "harmincharmadik", "harmincnegyedik", "harmincötödik", "harminchatodik", "harminchetedik", "harmincnyolcadik", "harminckilencedik", "negyvenedik", "negyvenegyedik", "negyvenkettedik", "negyvenharmadik", "negyvennegyedik", "negyvenötödik", "negyvenhatodik", "negyvenhetedik", "negyvennyolcadik", "negyvenkilencedik", "ötvenedik", "ötvenegyedik", "ötvenkettedik", "ötvenharmadik", "ötvennegyedik", "ötvenötödik", "ötvenhatodik", "ötvenhetedik", "ötvennyolcadik", "ötvenkilencedik", "hatvanadik", "hatvanegyedik", "hatvankettedik", "hatvanharmadik", "hatvannegyedik", "hatvanötödik", "hatvanhatodik", "hatvanhetedik", "hatvannyolcadik", "hatvankilencedik", "hetvenedik", "hetvenegyedik", "hetvenkettedik", "hetvenharmadik", "hetvennegyedik", "hetvenötödik", "hetvenhatodik", "hetvenhetedik", "hetvennyolcadik", "hetvenkilencedik", "nyolcvanadik", "nyolcvanegyedik", "nyolcvankettedik", "nyolcvanharmadik", "nyolcvannegyedik", "nyolcvanötödik", "nyolcvanhatodik", "nyolcvanhetedik", "nyolcvannyolcadik", "nyolcvankilencedik", "kilencvenedik", "kilencvenegyedik", "kilencvenkettedik", "kilencvenharmadik", "kilencvennegyedik", "kilencvenötödik", "kilencvenhatodik", "kilencvenhetedik", "kilencvennyolcadik", "kilencvenkilencedik", "századik" ] - NumbersOrdinalPluralOnes: [ - "zeroth", "first", "seconds", "thirds", "fourths", "fifths", "sixths", "sevenths", "eighths", "ninths", - "tenths", "elevenths", "twelfths", "thirteenths", "fourteenths", "fifteenths", "sixteenths", - "seventeenths", "eighteenths", "nineteenths" + "nulladik", "első", "ketted", "harmad", "negyed", "ötöd", "hatod", "heted", "nyolcad", "kilenced", + "tized", "tizenegyed", "tizenketted", "tizenharmad", "tizennegyed", "tizenötöd", "tizenhatod", + "tizenheted", "tizennyolcad", "tizenkilenced" ] # stop when regularity begins - NumbersOrdinalFractionalOnes: [ - "zero", "first", "half" + "nulladik", "egyed", "ketted", "harmad", "negyed", "ötöd", "hatod", "heted", "nyolcad", "kilenced", "tized", "tizenegyed", "tizenketted", "tizenharmad", "tizennegyed", "tizenötöd", "tizenhatod", "tizenheted", "tizennyolcad", "tizenkilenced", "huszad" ] # stop when regularity begins - NumbersOrdinalFractionalPluralOnes: [ - "zeros", "firsts", "halves" + "nullad", "egyed", "ketted", "harmad", "negyed", "ötöd", "hatod", "heted", "nyolcad", "kilenced", "tized", "tizenegyed", "tizenketted", "tizenharmad", "tizennegyed", "tizenötöd", "tizenhatod", "tizenheted", "tizennyolcad", "tizenkilenced", "huszad" ] # What to use for multiples of 10 - NumbersTens: [ - "", "ten", "twenty", "thirty", "forty", "fifty", "sixty", "seventy", "eighty", "ninety" + "egy", "kettő", "három", "négy", "öt", "hat", "hét", "nyolc", "kilenc", "tíz", "húsz", "harminc", "negyven", "ötven", "hatvan", "hetven", "nyolcvan", "kilencven", "száz", "száztíz", "százhúsz", "százharminc", "száznegyven", "százötven", "százhatvan", "százhetven", "száznyolcvan", "százkilencven", "kétszáz", "kétszáztíz", "kétszázhúsz", "kétszázharminc", "kétszáznegyven", "kétszázötven", "kétszázhatvan", "kétszázhetven", "kétszáznyolcvan", "kétszázkilencven", "háromszáz", "háromszáztíz", "háromszázhúsz", "háromszázharminc", "háromszáznegyven", "háromszázötven", "háromszázhatvan", "háromszázhetven", "háromszáznyolcvan", "háromszázkilencven", "négyszáz", "négyszáztíz", "négyszázhúsz", "négyszázharminc", "négyszáznegyven", "négyszázötven", "négyszázhatvan", "négyszázhetven", "négyszáznyolcvan", "négyszázkilencven", "ötszáz", "ötszáztíz", "ötszázhúsz", "ötszázharminc", "ötszáznegyven", "ötszázötven", "ötszázhatvan", "ötszázhetven", "ötszáznyolcvan", "ötszázkilencven", "hatszáz", "hatszáztíz", "hatszázhúsz", "hatszázharminc", "hatszáznegyven", "hatszázötven", "hatszázhatvan", "hatszázhetven", "hatszáznyolcvan", "hatszázkilencven", "hétszáz", "hétszáztíz", "hétszázhúsz", "hétszázharminc", "hétszáznegyven", "hétszázötven", "hétszázhatvan", "hétszázhetven", "hétszáznyolcvan", "hétszázkilencven", "nyolcszáz", "nyolcszáztíz", "nyolcszázhúsz", "nyolcszázharminc", "nyolcszáznegyven", "nyolcszázötven", "nyolcszázhatvan", "nyolcszázhetven", "nyolcszáznyolcvan", "nyolcszázkilencven", "kilencszáz", "kilencszáz10", "kilencszázhúsz", "kilencszázharminc", "kilencszáznegyven", "kilencszázötven", "kilencszázhatvan", "kilencszázhetven", "kilencszáznyolcvan", "kilencszázkilencven" ] - NumbersOrdinalTens: [ - "", "tenth", "twentieth", "thirtieth", "fortieth", "fiftieth", "sixtieth", "seventieth", "eightieth", "ninetieth" + "", "tizedik", "huszadik", "harmincadik", "negyvenedik", "ötvenedik", "hatvanadik", "hetvenedik", "nyolcvanadik", "kilencvenedik" ] - NumbersOrdinalPluralTens: [ - "", "tenths", "twentieths", "thirtieths", "fortieths", "fiftieths", "sixtieths", "seventieths", "eightieths", "ninetieths" + "", "tizedek", "huszadok", "harmincadok", "negyvenedikek", "ötvenedikek", "hatvanadikok", "hetvenedikek", "nyolcvanadikak", "kilencvenedekikek" ] - NumbersHundreds: [ - "", "one hundred", "two hundred", "three hundred", "four hundred", "five hundred", - "six hundred", "seven hundred", "eight hundred", "nine hundred" + "", "száz", "kétszáz", "háromszáz", "négyszáz", "ötszáz", + "hatszáz", "hétszáz", "nyolcszáz", "kilencszáz" ] - NumbersOrdinalHundreds: [ - "", "one hundredth", "two hundredth", "three hundredth", "four hundredth", "five hundredth", - "six hundredth", "seven hundredth", "eight hundredth", "nine hundredth" + "", "századik", "kétszázadik", "háromszázadik", "négyszázadik", "ötszázadik", + "hatszázadik", "hétszázadik", "nyolcszázadik", "kilencszázadik" ] - NumbersOrdinalPluralHundreds: [ - "", "one hundredths", "two hundredths", "three hundredths", "four hundredths", "five hundredths", - "six hundredths", "seven hundredths", "eight hundredths", "nine hundredths" + "", "századikak", "kétszázadikak", "háromszázadikak", "négyszázadikak", "ötszázadikak", + "hatszázadikak", "hétszázadikak", "nyolcszázadikak", "kilencszázadikak" ] # At this point, hopefully the language is regular. If not, code needs to be written - NumbersLarge: [ - "", "thousand", "million", "billion", "trillion", "quadrillion", - "quintillion", "sextillion", "septillion", "octillion", "nonillion", + "", "ezer", "millió", "milliárd", "billió", "kvadrillió", + "kvintillió", "szextillon", "septillion", "oktilió", "nemmilliárd", ] - NumbersOrdinalLarge: [ - "", "thousandth", "millionth", "billionth", "trillionth", "quadrillionth", - "quintillionth", "sextillionth", "septillionth", "octillionth", "nonillionth" + "", "ezredik", "milliomodik", "milliárdodik", "billiódik", "kvadrilliódik", + "kvintilliódik", "szextillonidik", "septillionodik", "oktillionodik", "nonmilliomodrészedik" ] - NumbersOrdinalPluralLarge: [ - "", "thousandths", "millionths", "billionths", "trillionths", "quadrillionths", - "quintillionths", "sextillionths", "septillionths", "octillionths", "nonillionths" + "", "ezredek", "milliomodok", "milliárdod", "billiórészek", "kvadrilliószoros", + "kvintilliószoros", "szextillonrész", "septiliódiumok", "oktilliomodok", "nonilliószoros" ] diff --git a/Rules/Languages/hu/navigate.yaml b/Rules/Languages/hu/navigate.yaml index 7559b4222..ff4afb8bb 100644 --- a/Rules/Languages/hu/navigate.yaml +++ b/Rules/Languages/hu/navigate.yaml @@ -48,15 +48,15 @@ - if: "$MatchCounter = 0 and $SayCommand = 'true'" then_test: - if: "self::m:math and starts-with($NavCommand, 'ZoomOut')" - then: [t: "zoomed out all of the way", pause: "medium"] + then: [T: "teljesen kinagyítva", pause: "medium"] - else_if: "IsNode(., 'leaf') and starts-with($NavCommand, 'ZoomIn')" then: - test: - if: "string-length(.) = 1" - then: [t: "zoomed in all of the way"] # phrase('zoomed in all of the way') + then: [T: "teljesen ráközelített"] # phrase('zoomed in all of the way') - else_if: "$NavNodeOffset = 0" - then: [t: "zoomed in to first character"] # phrase('zoomed in to first character') - else: [t: "zoomed to character"] # phrase('zoomed in to character') + then: [T: "ráközelített az első karakterre"] # phrase('zoomed in to first character') + else: [T: "karakterre nagyítva"] # phrase('zoomed in to character') - pause: "medium" else: - test: @@ -74,25 +74,25 @@ - x: "$Prefix" - test: - if: "substring($NavCommand, string-length($Prefix)+1) = 'In'" - then: [t: "in"] # phrase(zoom 'in' to see more details) + then: [T: "ban"] # phrase(zoom 'in' to see more details) - else_if: "substring($NavCommand, string-length($Prefix)+1) = 'InAll'" # HACK: '\uF8FE' is used internally for the concatenation char by 'ct' -- this gets "ed" concatenated to "zoom" - then: [t: "\uF8FEed in all of the way"] # phrase(zoom 'out all of the way' to see more details) + then: [T: "Teljesen betáplálva"] # phrase(zoom 'out all of the way' to see more details) - else_if: "substring($NavCommand, string-length($Prefix)+1) = 'Out'" - then: [t: "out"] # phrase(zoom 'out' to see more details) + then: [T: "ki"] # phrase(zoom 'out' to see more details) - else_if: "substring($NavCommand, string-length($Prefix)+1) = 'OutAll'" # HACK: '\uF8FE' is used internally for the concatenation char by 'ct' -- this gets "ed" concatenated to "zoom" - then: [t: "\uF8FEed out all of the way"] # phrase(zoom 'out all of the way' to see more details) + then: [T: "teljes táblázat megjelenítése\uF8FEe ki egészen"] # phrase(zoom 'out all of the way' to see more details) - else_if: "substring($NavCommand, string-length($Prefix)+1) = 'Next'" - then: [t: "right"] # phrase(move to the 'right') + then: [T: "jobbra"] # phrase(move to the 'right') - else_if: "substring($NavCommand, string-length($Prefix)+1) = 'Previous'" - then: [t: "left"] # phrase(move to the 'left') + then: [T: "balra"] # phrase(move to the 'left') - else_if: "substring($NavCommand, string-length($Prefix)+1) = 'Current'" - then: [t: "current"] # phrase(who is the 'current' president) + then: [T: "jelenlegi"] # phrase(who is the 'current' president) - else_if: "substring($NavCommand, string-length($Prefix)+1) = 'LineStart'" - then: [t: "to start of line"] # phrase(move 'to start of line') + then: [T: "a sor elejére"] # phrase(move 'to start of line') - else_if: "substring($NavCommand, string-length($Prefix)+1) = 'LineEnd'" - then: [t: "to end of line"] # phrase(move 'to end of line') + then: [T: "a sor végére"] # phrase(move 'to end of line') - pause: "medium" - set_variables: [MatchCounter: "$MatchCounter + 1"] @@ -107,7 +107,7 @@ tag: [mtr, mlabeledtr] match: "$Move2D = 'in'" replace: - - t: "column" + - T: "oszlop" - x: "count($Child2D/preceding-sibling::*)+1" - pause: "medium" @@ -125,18 +125,18 @@ - x: "$Move2D" - test: - if: "$NumPrecedingSiblings=0" - then: [t: "base"] # phrase(the 'base' of the power) + then: [T: "alapja"] # phrase(the 'base' of the power) - else_if: "$Child2D/preceding-sibling::*[self::m:mprescripts]" # are we before mprescripts and hence are postscripts then: - test: # in postscripts -- base shifts by one if: "$NumPrecedingSiblings mod 2 = 0" - then: [t: "pre-subscript"] # phrase(x with 'subscript' 2) - else: [t: "pre-superscript"] # phrase(x with 'superscript' 2) + then: [T: "alsó index kezdete"] # phrase(x with 'subscript' 2) + else: [T: "Felső index kezdete"] # phrase(x with 'superscript' 2) else: - test: if: "$NumPrecedingSiblings mod 2 = 0" - then: [t: "superscript"] # phrase(x with 'pre-superscript' 2) - else: [t: "subscript"] # phrase(x with 'pre-subscript' 2) + then: [T: "felső index"] # phrase(x with 'pre-superscript' 2) + else: [T: "alsó index"] # phrase(x with 'pre-subscript' 2) - pause: "medium" # Rules for speaking what happens when moving into or out of a notation @@ -160,7 +160,7 @@ if: "$NavVerbosity = 'Verbose'" then: [x: "translate(name(.), '-_', ' ')"] # e.g., "in absolute value" else: - - t: "part" # phrase(the 'part' of the expression) + - T: "része" # phrase(the 'part' of the expression) - x: "count($Child2D/preceding-sibling::*) + 1" - pause: "medium" @@ -183,19 +183,19 @@ then: - test: - if: "$PreviousNavCommand = 'ZoomIn'" - then: [t: "undo zoom in"] # phrase('undo zoom in') + then: [T: "nagyítás visszavonása"] # phrase('undo zoom in') - else_if: "$PreviousNavCommand = 'ZoomOut'" - then: [t: "undo zoom out"] # phrase('undo zoom out') + then: [T: "kicsinyítés visszavonása"] # phrase('undo zoom out') - else_if: "$PreviousNavCommand = 'ZoomInAll'" - then: [t: "undo zooming in all of the way"] # phrase('undo zooming in all of the way') + then: [T: "a teljes nagyítás visszavonása"] # phrase('undo zooming in all of the way') - else_if: "$PreviousNavCommand = 'ZoomOutAll'" - then: [t: "undo zooming out all of the way"] # phrase('undo zooming out all of the way') + then: [T: "a teljes kicsinyítés visszavonása"] # phrase('undo zooming out all of the way') - else_if: "$PreviousNavCommand = 'MovePrevious' or $PreviousNavCommand = 'MovePreviousZoom'" - then: [t: "undo move left"] # phrase('undo move left') + then: [T: "balra mozgatás visszavonása"] # phrase('undo move left') - else_if: "$PreviousNavCommand = 'MoveNext' or $PreviousNavCommand = 'MoveNextZoom'" - then: [t: "undo move right"] # phrase('undo move right') + then: [T: "Jobbra mozgatás visszavonása"] # phrase('undo move right') - else_if: "$PreviousNavCommand = 'None'" - then: [t: "no previous command"] # phrase('no previous command') + then: [T: "nincs előző parancs"] # phrase('no previous command') - pause: "medium" - set_variables: [NavNode: "@id"] @@ -473,7 +473,7 @@ variables: [SayCommand: "string($NavVerbosity = 'Verbose')"] replace: [x: "."] # we need to speak it here - # - t: "row" # phrase(the first 'row' of the matrix) + - T: "sor" # phrase(the first 'row' of the matrix) # # if we let the speech rules speak the row, it is given just the MathML for the row, so the row # will always be '1' # - x: "count(../preceding-sibling::*)+1" # - pause: medium @@ -524,12 +524,12 @@ then: - test: - if: "$NavCommand = 'MoveStart'" - then: [t: "move to start of math"] # phrase('move to start of math') + then: [T: "ugrás a matematikai blokk elejére"] # phrase('move to start of math') - else_if: "$NavCommand = 'MoveLineStart'" - then: [t: "move to start of line"] # phrase('move to start of line') + then: [T: "Ugrás a sor elejére"] # phrase('move to start of line') - else_if: "$NavCommand = 'MoveEnd'" - then: [t: "move to end of math"] # phrase('move to end of math') - else: [t: "move to end of line"] # "$NavCommand = 'MoveLineEnd'" # phrase('move to end of line') + then: [T: "ugrás a matematikai blokk végére"] # phrase('move to end of math') + else: [T: "ugrás a sor végére"] # "$NavCommand = 'MoveLineEnd'" # phrase('move to end of line') - pause: "medium" - test: if: "$NavCommand = 'MoveStart' or $NavCommand = 'MoveLineStart'" @@ -569,8 +569,8 @@ then: - test: if: "$NavCommand = 'MoveLineStart'" - then: [t: "move to start of line"] # phrase('move to start of line') - else: [t: "move to end of line"] # "$NavCommand = 'MoveLineEnd'" # phrase('move to end of line') + then: [T: "ugrás a sor elejére"] # phrase('move to start of line') + else: [T: "ugrás a sor végére"] # "$NavCommand = 'MoveLineEnd'" # phrase('move to end of line') - pause: "medium" - test: if: "self::m:mrow or @data-from-mathml = 'mrow'" @@ -606,7 +606,7 @@ - "$NavCommand='MoveColumnStart' or $NavCommand='MoveColumnEnd' or" - "$NavCommand='ReadCellCurrent'" replace: - - t: "not in table" # phrase('not in table') + - T: "nincs a táblázatban" # phrase('not in table') - pause: long - set_variables: [SpeakExpression: "'false'"] @@ -620,12 +620,12 @@ - test: if: "$NavVerbosity = 'Verbose'" then: - - t: "move left" # phrase('move left') + - T: "balra lépés" # phrase('move left') - pause: short - test: if: "$NavVerbosity != 'Terse'" then: - - t: "column" # phrase(the first 'column' of the table) + - T: "oszlop" # phrase(the first 'column' of the table) - x: "count(preceding-sibling::*)" - pause: medium - test: @@ -637,7 +637,7 @@ else: - set_variables: [NavNode: "preceding-sibling::*[1]/*[1]/@id"] else: - - t: "no previous column" # phrase('no previous column' in the table) + - T: "nincs előző oszlop" # phrase('no previous column' in the table) - set_variables: [SpeakExpression: "'false'"] - name: move-cell-next @@ -650,12 +650,12 @@ - test: if: "$NavVerbosity = 'Verbose'" then: - - t: "move right" # phrase('move right') + - T: "Jobbra lépés" # phrase('move right') - pause: short - test: if: "$NavVerbosity != 'Terse'" then: - - t: "column" # phrase(the first 'column' in the table) + - T: "oszlop" # phrase(the first 'column' in the table) - x: "count(preceding-sibling::*)+2" - pause: medium - test: @@ -667,7 +667,7 @@ else: - set_variables: [NavNode: "following-sibling::*[1]/*[1]/@id"] else: - - t: "no next column" # phrase('no next column' in the table) + - T: "nincs következő oszlop" # phrase('no next column' in the table) - set_variables: [SpeakExpression: "'false'"] - name: move-cell-up @@ -683,15 +683,15 @@ - test: if: "$NavVerbosity = 'Verbose'" then: - - t: "move up" # phrase('move up' to previous row in the table) + - T: "mozgás felfelé" # phrase('move up' to previous row in the table) - pause: short - test: if: "$NavVerbosity != 'Terse'" then: - - t: "row" # phrase(the previous 'row' in the table) + - T: "sor" # phrase(the previous 'row' in the table) - x: "count(../preceding-sibling::*)" - pause: short - - t: "column" # phrase(the previous 'column' in the table) + - T: "oszlop" # phrase(the previous 'column' in the table) - x: "count(preceding-sibling::*)+1" - pause: medium - test: @@ -703,7 +703,7 @@ else: - set_variables: [NavNode: "../preceding-sibling::*[1]/*[$Column]/*[1]/@id"] else: - - t: "no previous row" # phrase('no previous row' in the table) + - T: "nincs előző sor" # phrase('no previous row' in the table) - set_variables: [SpeakExpression: "'false'"] - name: move-cell-down @@ -719,15 +719,15 @@ - test: if: "$NavVerbosity = 'Verbose'" then: - - t: "move down" # phrase('move down' to the next row in the table) + - T: "mozgás lefelé" # phrase('move down' to the next row in the table) - pause: short - test: if: "$NavVerbosity != 'Terse'" then: - - t: "row" # phrase(the next 'row' in the table) + - T: "sor" # phrase(the next 'row' in the table) - x: "count(../preceding-sibling::*)+2" - pause: short - - t: "column" # phrase(the next 'column' in the table) + - T: "oszlop" # phrase(the next 'column' in the table) - x: "count(preceding-sibling::*)+1" - pause: medium - test: @@ -739,7 +739,7 @@ else: - set_variables: [NavNode: "../following-sibling::*[1]/*[$Column]/*[1]/@id"] else: - - t: "no next row" # phrase('no next row' in the table) + - T: "nincs következő sor" # phrase('no next row' in the table) - set_variables: [SpeakExpression: "'false'"] - name: move-cell-up @@ -749,7 +749,7 @@ - test: if: "$NavVerbosity = 'Verbose'" then: - - t: "move to previous row" # phrase('move to previous row' in the table) + - T: "mozgás az előző sorra" # phrase('move to previous row' in the table) - pause: medium - test: if: "preceding-sibling::*" @@ -763,7 +763,7 @@ else: - set_variables: [NavNode: "preceding-sibling::*[1]/@id"] else: - - t: "no previous row" # phrase('no previous row' in the table) + - T: "nincs előző sor" # phrase('no previous row' in the table) - set_variables: [SpeakExpression: "'false'"] - name: move-cell-down @@ -773,7 +773,7 @@ - test: if: "$NavVerbosity = 'Verbose'" then: - - t: "move to next row" # phrase('move to next row' in the table) + - T: "mozgás a következő sorra" # phrase('move to next row' in the table) - pause: medium - test: if: "following-sibling::*" @@ -787,7 +787,7 @@ else: - set_variables: [NavNode: "following-sibling::*[1]/@id"] else: - - t: "no next row" # phrase('no next row' in the table) + - T: "nincs következő sor" # phrase('no next row' in the table) - set_variables: [SpeakExpression: "'false'"] - name: move-cell-previous @@ -798,9 +798,9 @@ - test: if: "$NavVerbosity = 'Verbose'" then: - - t: "move to previous column" # phrase('move to previous column' in the table) + - T: "mozgás az előző oszlopra" # phrase('move to previous column' in the table) - pause: medium - - t: "no previous column" # phrase('no previous column' in the table) + - T: "nincs előző oszlop" # phrase('no previous column' in the table) - set_variables: [SpeakExpression: "'false'"] - name: move-cell-next @@ -811,9 +811,9 @@ - test: if: "$NavVerbosity = 'Verbose'" then: - - t: "move to next column" # phrase('move to next column' in the table) + - T: "mozgás a következő oszlopra" # phrase('move to next column' in the table) - pause: medium - - t: "no next column" # phrase('no next row' in the table) + - T: "nincs következő oszlop" # phrase('no next row' in the table) - set_variables: [SpeakExpression: "'false'"] - name: default-read-cell @@ -829,20 +829,20 @@ - test: if: "$NavVerbosity = 'Verbose'" then: - - t: "read current entry" # phrase('read current entry' in the table) + - T: "az aktuális elem felolvasása" # phrase('read current entry' in the table) - pause: medium - test: if: "$NavVerbosity != 'Terse'" then: - - t: "row" # phrase(the previous 'row' in the table) + - T: "sor" # phrase(the previous 'row' in the table) - x: "count($MTD[1]/../preceding-sibling::*)+1" - pause: short - - t: "column" # phrase(the previous 'column' in the table) + - T: "oszlop" # phrase(the previous 'column' in the table) - x: "count($MTD[1]/preceding-sibling::*)+1" - pause: short - set_variables: [NavNode: "$MTD[1]/*[1]/@id"] else: - - t: "not in table" # phrase('not in table' or matrix) + - T: "nincs a táblázatban" # phrase('not in table' or matrix) - pause: long - set_variables: [SpeakExpression: "'false'"] @@ -1082,7 +1082,7 @@ then: - x: "ancestor::m:mtd[1]" # try again on an mtd node else: - - t: "not in table" # phrase('not in table' or matrix) + - T: "nincs a táblázatban" # phrase('not in table' or matrix) - pause: long - set_variables: [SpeakExpression: "'false'"] @@ -1159,7 +1159,7 @@ - test: if: "$MatchCounter = 0 and $NavVerbosity = 'Verbose'" then: - - t: "cannot move right" # phrase('cannot move right') + - T: "nem tud jobbra mozogni" # phrase('cannot move right') - pause: medium - with: variables: @@ -1180,16 +1180,16 @@ - test: if: "$MatchCounter = 0 and $NavVerbosity = 'Verbose'" then: - - t: "cannot" # phrase('cannot' move right in expression) + - T: "nem tud" # phrase('cannot' move right in expression) - test: - if: "$NavCommand = 'MoveNext'" - then: [t: "move"] # phrase('move' to next entry in table) + then: [T: "mozogni"] # phrase('move' to next entry in table) - else_if: "$NavCommand = 'ReadNext'" - then: [t: "read"] # phrase('read' next entry in table) - else: [t: "describe"] # phrase('describe' next entry in table) - - t: "right" # phrase(move 'right') + then: [T: "olvasni"] # phrase('read' next entry in table) + else: [T: "leírni"] # phrase('describe' next entry in table) + - T: "jobbra" # phrase(move 'right') - pause: short - - t: "end of math" # phrase(move 'end of math') + - T: "matematematikai blokk vége" # phrase(move 'end of math') - pause: long - set_variables: [SpeakExpression: "'false'"] @@ -1234,7 +1234,7 @@ - test: if: "$NavVerbosity = 'Verbose'" then: - - t: "column" # phrase(the previous 'column' in the table) + - T: "oszlop" # phrase(the previous 'column' in the table) - x: "count(preceding-sibling::*)+2" - pause: short - test: @@ -1377,7 +1377,7 @@ - test: if: "$MatchCounter = 0 and $NavVerbosity = 'Verbose' and $NavCommand = 'MovePrevious'" then: - - t: "cannot move left" # phrase('cannot move left' in expression) + - T: "nem tud balra mozogni" # phrase('cannot move left' in expression) - pause: medium - with: variables: @@ -1394,7 +1394,7 @@ - "($NavCommand = 'MovePrevious' or $NavCommand = 'ReadPrevious' or $NavCommand = 'DescribePrevious') and" - "(self::m:math or name(EdgeNode(., 'left', 'math'))='math')" replace: - - t: "start of math" # phrase('start of math') + - T: "matematikai blokk kezdete" # phrase('start of math') - pause: long - set_variables: [SpeakExpression: "'false'"] @@ -1407,7 +1407,7 @@ - test: if: "$MatchCounter = 0 and $NavVerbosity = 'Verbose'" then: - - t: "cannot move left" # phrase('cannot move left') + - T: "nem tud balra mozogni" # phrase('cannot move left') - pause: short - with: variables: [Move2D: "'start of'", Child2D: "."] @@ -1503,7 +1503,7 @@ - test: if: "$NavVerbosity = 'Verbose'" then: - - t: "column" # phrase(the first 'column' in the table) + - T: "oszlop" # phrase(the first 'column' in the table) - x: "count(preceding-sibling::*)" - pause: short - test: @@ -1589,16 +1589,16 @@ - test: - if: "$NavMode = 'Enhanced'" then: - - t: "character" # phrase(a mathematical 'character') + - T: "karakter" # phrase(a mathematical 'character') - set_variables: [NavMode: "'Character'", ReadZoomLevel: "1"] - else_if: "$NavMode = 'Character'" then: - - t: "simple" # phrase(a 'simple' way to do something) + - T: "egyszerű" # phrase(a 'simple' way to do something) - set_variables: [NavMode: "'Simple'", ReadZoomLevel: "1"] - else: - - t: "enhanced" # phrase(an 'enhanced' way to do something) + - T: "továbbfejlesztett" # phrase(an 'enhanced' way to do something) - set_variables: [NavMode: "'Enhanced'", ReadZoomLevel: "-1"] - - t: "mode" # phrase(a simple 'mode' of use) + - T: "mód" # phrase(a simple 'mode' of use) - pause: long - test: - if: "$NavMode != 'Enhanced'" # potentially need to zoom to the sibling @@ -1614,16 +1614,16 @@ - test: - if: "$NavMode = 'Enhanced'" then: - - t: "simple" # phrase(a 'simple' way to do something) + - T: "egyszerű" # phrase(a 'simple' way to do something) - set_variables: [NavMode: "'Simple'", ReadZoomLevel: "1"] - else_if: "$NavMode = 'Character'" then: - - t: "enhanced" # phrase(an 'enhanced' way to do something) + - T: "továbbfejlesztett" # phrase(an 'enhanced' way to do something) - set_variables: [NavMode: "'Enhanced'", ReadZoomLevel: "-1"] - else: - - t: "character" # phrase(a mathematical 'character') + - T: "karakter" # phrase(a mathematical 'character') - set_variables: [NavMode: "'Character'", ReadZoomLevel: "1"] - - t: "mode" # phrase(a simple 'mode' of use) + - T: "mód" # phrase(a simple 'mode' of use) - pause: long - test: - if: "$NavMode != 'Enhanced'" # potentially need to zoom to the sibling @@ -1639,14 +1639,13 @@ - test: if: "$Overview = 'true'" then: - - t: "speak expression after move" # phrase('speak expression after move') + - T: "a kifejezés felolvasása mozgás után" # phrase('speak expression after move') - pause: long - set_variables: [Overview: "'false'"] else: - - t: "overview of expression after move" # phrase('overview of expression after move') + - T: "a kifejezés áttekintése mozgás után" # phrase('overview of expression after move') - pause: long - set_variables: [Overview: "'true'"] - - name: current tag: "*" match: "$NavCommand = 'ReadCurrent' or $NavCommand = 'DescribeCurrent'" @@ -1656,9 +1655,9 @@ then: - test: - if: "$NavCommand = 'ReadCurrent'" - then: [t: "read"] # phrase('read' next entry in table) - else: [t: "describe"] # phrase('describe' next entry in table) - - t: "current" # phrase('current' entry in table) + then: [T: "olvassa"] # phrase('read' next entry in table) + else: [T: "írja le"] # phrase('describe' next entry in table) + - T: "jelenlegi" # phrase('current' entry in table) - pause: long - set_variables: [NavNode: "@id"] @@ -1676,13 +1675,13 @@ then: - test: - if: "starts-with($NavCommand, 'Read')" - then: [t: "read"] # phrase('read' next entry in table) + then: [T: "olvassa el"] # phrase('read' next entry in table) - else_if: "starts-with($NavCommand, 'Describe')" - then: [t: "describe"] # phrase('describe' next entry in table) + then: [T: "írja le"] # phrase('describe' next entry in table) - else_if: "starts-with($NavCommand, 'MoveTo')" - then: [t: "move to "] # phrase('move to' the next entry in table) - else: [t: "set"] # phrase('set' the value of the next entry in table) - - t: "placeholder" # phrase('placeholder' for the value) + then: [T: "ugrás a következő elemre "] # phrase('move to' the next entry in table) + else: [T: "beállítja"] # phrase('set' the value of the next entry in table) + - T: "helyjelző" # phrase('placeholder' for the value) - x: "$PlaceMarkerIndex" - pause: long - set_variables: [NavNode: "$PlaceMarker"] @@ -1694,7 +1693,7 @@ - test: if: "$NavVerbosity != 'Terse'" then: - - t: "set placeholder" # phrase('set placeholder' to the value) + - T: "helyjelző beállítása" # phrase('set placeholder' to the value) - x: "$PlaceMarkerIndex" - pause: long - set_variables: [NavNode: "@id"] @@ -1726,11 +1725,11 @@ - test: if: "$NavCommand = 'WhereAmI'" then: - - t: "inside of nothing more" # phrase('inside of nothing more') + - T: "nincs több belső elem" # phrase('inside of nothing more') - pause: long - set_variables: [SpeakExpression: "'false'"] else: - - t: "inside" # phrase('inside' a big expression) + - T: "belül egy nagy kifejezés" # phrase('inside' a big expression) - pause: medium - set_variables: [NavNode: "@id"] @@ -1738,7 +1737,7 @@ tag: "*" match: "$NavCommand = 'WhereAmI' or $NavCommand = 'WhereAmIAll'" replace: - - t: "inside" # phrase('inside' a big expression) + - T: "belül" # phrase('inside' a big expression) - pause: medium - test: - if: "$NavMode='Enhanced' and parent::*[self::m:mrow and (IsBracketed(., '(', ')', false) or IsBracketed(., '[', ']', false))]" diff --git a/Rules/Languages/hu/overview.yaml b/Rules/Languages/hu/overview.yaml index ff48608e9..23317dfed 100644 --- a/Rules/Languages/hu/overview.yaml +++ b/Rules/Languages/hu/overview.yaml @@ -13,7 +13,7 @@ # That might mean that at the top level, we may want to allow the first few children to expand -- name: overview-default +- name: overview-default # audit-ignore tag: [mfrac, fraction] match: "." replace: @@ -21,22 +21,25 @@ if: "IsNode(*[1], 'simple') and IsNode(*[2], 'simple')" then: - x: "*[1]" - - t: "per" + - T: "per" - x: "*[2]" else: - - t: "tört" + - T: "tört" - name: overview-default tag: [msqrt, "square-root"] match: "." replace: - - t: "négyzetgyök" + - T: "négyzetgyök" - test: if: "IsNode(*[1], 'simple')" then: + - test: + if: "$Verbosity!='Terse'" + then: [T: ""] - x: "*[1]" -- name: overview-default +- name: overview-default # audit-ignore tag: [mroot, root] match: "." replace: @@ -44,19 +47,19 @@ if: "*[2][self::m:mn]" then_test: - if: "*[2][.='2']" - then: [t: "négyzetgyök"] + then: [T: "négyzetgyök"] - else_if: "*[2][.='3']" - then: [t: "köbgyök"] + then: [T: "köbgyök"] - else_if: "*[2][not(contains(., '.'))]" - then: [x: "ToOrdinal(*[2])", t: "gyök"] + then: [x: "ToOrdinal(*[2])", T: "gyök"] else: - test: if: "*[2][self::m:mi][string-length(.)=1]" then: - x: "*[2]" - - pronounce: [text: "-th", ipa: "θ", sapi5: "th", eloquence: "T"] + - pronounce: [text: "", ipa: "θ", sapi5: "", eloquence: "T"] else: [x: "*[2]"] - - t: "gyök" + - T: "gyök" - test: if: "IsNode(*[1], 'simple')" then: @@ -69,21 +72,21 @@ - "(IsBracketed(., '(', ')') or IsBracketed(., '[', ']') or IsBracketed(., '|', '|'))" replace: - x: count(*[2]/*) - - t: "szer" + - T: "szer" - x: count(*[2]/*[self::m:mtr][1]/*) - test: if: "*[1][.='|']" # just need to check the first bracket since we know it must be (, [, or | - then: [t: "determináns"] - else: [t: "mátrix"] + then: [T: "determináns"] + else: [T: "mátrix"] -- name: overview-default +- name: overview-default # audit-ignore tag: mtable match: "." replace: - x: count(*[2]/*) - - t: "szer" + - T: "szer" - x: count(*[2]/*[self::m:mtr][1]/*) - - t: "táblázat" + - T: "táblázat" - name: short-mrow tag: mrow @@ -107,6 +110,6 @@ - pause: auto - x: "*[5]" - pause: auto - - t: "és így tovább" + - T: "és így tovább" - include: "SimpleSpeak_Rules.yaml" diff --git a/Rules/Languages/hu/unicode-full.yaml b/Rules/Languages/hu/unicode-full.yaml index cab4cfc18..c45035bff 100644 --- a/Rules/Languages/hu/unicode-full.yaml +++ b/Rules/Languages/hu/unicode-full.yaml @@ -1,106 +1,106 @@ --- - - "¢": [t: "centiméter"] # 0xa2 (en: 'cents', DeepL translation) - - "£": [t: "font"] # 0xa3 (en: 'pounds', DeepL translation) - - "¤": [t: "valuta jel"] # 0xa4 (en: 'currency sign', DeepL translation) - - "¥": [t: "jen"] # 0xa5 (en: 'yen', DeepL translation) - - "¦": [t: "szaggatott sáv"] # 0xa6 (en: 'broken bar', DeepL translation) - - "§": [t: "szakasz"] # 0xa7 (en: 'section', DeepL translation) - - "¨": [t: "dupla pont"] # 0xa8 (en: 'double dot', DeepL translation) - - "©": [t: "copyright"] # 0xa9 (DeepL translation) - - "ª": [t: "női rendjelző"] # 0xaa (en: 'feminine ordinal indicator', DeepL translation) - - "¬": [t: "nem"] # 0xac (en: 'not', DeepL translation) - - "«": [t: "balra mutató kettős szögletes idézőjel"] # 0xab (en: 'left-pointing double angle quote mark', DeepL translation) + - "¢": [T: "centiméter"] # 0xa2 (en: 'cents', DeepL translation) + - "£": [T: "font"] # 0xa3 (en: 'pounds', DeepL translation) + - "¤": [T: "valuta jel"] # 0xa4 (en: 'currency sign', DeepL translation) + - "¥": [T: "jen"] # 0xa5 (en: 'yen', DeepL translation) + - "¦": [T: "szaggatott sáv"] # 0xa6 (en: 'broken bar', DeepL translation) + - "§": [T: "szakasz"] # 0xa7 (en: 'section', DeepL translation) + - "¨": [T: "dupla pont"] # 0xa8 (en: 'double dot', DeepL translation) + - "©": [T: "szerzői jog"] # 0xa9 (DeepL translation) + - "ª": [T: "női rendjelző"] # 0xaa (en: 'feminine ordinal indicator', DeepL translation) + - "¬": [T: "nem"] # 0xac (en: 'not', DeepL translation) + - "«": [T: "balra mutató kettős szögletes idézőjel"] # 0xab (en: 'left-pointing double angle quote mark', DeepL translation) - "¯": # 0xaf - test: if: "ancestor::m:modified-variable and preceding-sibling::*[1][self::m:mi]" - then: [t: "sáv"] # (en: 'bar', DeepL translation) - else: [t: "vonal"] # (en: 'line', DeepL translation) - - "²": [t: "kettő"] # 0xb2 (en: 'two', DeepL translation) - - "³": [t: "három"] # 0xb3 (en: 'three', DeepL translation) - - "´": [t: "hegyes"] # 0xb4 (en: 'acute', DeepL translation) - - "µ": [t: "mikro"] # 0xb5 (en: 'micro', DeepL translation) - - "¹": [t: "egy"] # 0xb9 (en: 'one', DeepL translation) - - "º": [t: "hímnemű ordinális jelző"] # 0xb9 (en: 'masculine ordinal indicator', DeepL translation) + then: [T: "sáv"] # (en: 'bar', DeepL translation) + else: [T: "vonal"] # (en: 'line', DeepL translation) + - "²": [T: "kettő"] # 0xb2 (en: 'two', DeepL translation) + - "³": [T: "három"] # 0xb3 (en: 'three', DeepL translation) + - "´": [T: "éles ékezet"] # 0xb4 (en: 'acute', DeepL translation) + - "µ": [T: "mikro"] # 0xb5 (en: 'micro', DeepL translation) + - "¹": [T: "egy"] # 0xb9 (en: 'one', DeepL translation) + - "º": [T: "hímnemű ordinális jelző"] # 0xb9 (en: 'masculine ordinal indicator', DeepL translation) - "·": - test: if: "$SpeechStyle != 'ClearSpeak' or $ClearSpeak_MultSymbolDot = 'Auto'" - then: [t: "idők"] # (en: 'times', DeepL translation) - else: [t: "pont"] # (en: 'dot', DeepL translation) + then: [T: "szorozva"] # (en: 'times', DeepL translation) + else: [T: "pont"] # (en: 'dot', DeepL translation) - "×": # 0xd7 - test: if: "$SpeechStyle != 'ClearSpeak' or $ClearSpeak_MultSymbolX = 'Auto'" - then: [t: "idők"] # (en: 'times', DeepL translation) + then: [T: "szorozva"] # (en: 'times', DeepL translation) else_test: if: $ClearSpeak_MultSymbolX = 'By' - then: [t: "by"] # (DeepL translation) - else: [t: "kereszt"] # (en: 'cross', DeepL translation) - - "÷": [t: "osztva"] # 0xf7 (en: 'divided by', DeepL translation) - - "¡": [t: "fordított felkiáltójel"] # 0xa1 (en: 'inverted exclamation mark', DeepL translation) - - "¶": [t: "bekezdésjelzés"] # 0xb6 (en: 'paragraph mark', DeepL translation) - - "¿": [t: "fordított kérdőjel"] # 0xbf (en: 'inverted question mark', DeepL translation) - - - "ʰ": [t: "módosító kis h"] # 0x2b0 (en: 'modifier small h', DeepL translation) - - "ʱ": [t: "módosító kis h horoggal"] # 0x2b1 (en: 'modifier small h with hook', DeepL translation) - - "ʲ": [t: "módosító kis j"] # 0x2b2 (en: 'modifier small j', DeepL translation) - - "ʳ": [t: "módosító kis r"] # 0x2b3 (en: 'modifier small r', DeepL translation) - - "ʴ": [t: "módosító kis fordított r"] # 0x2b4 (en: 'modifier small turned r', DeepL translation) - - "ʵ": [t: "módosító kis fordított r horoggal"] # 0x2b5 (en: 'modifier small turned r with hook', DeepL translation) + then: [T: "szorozva"] # (DeepL translation) + else: [T: "kereszt"] # (en: 'cross', DeepL translation) + - "÷": [T: "osztva"] # 0xf7 (en: 'divided by', DeepL translation) + - "¡": [T: "fordított felkiáltójel"] # 0xa1 (en: 'inverted exclamation mark', DeepL translation) + - "¶": [T: "bekezdésjelző"] # 0xb6 (en: 'paragraph mark', DeepL translation) + - "¿": [T: "fordított kérdőjel"] # 0xbf (en: 'inverted question mark', DeepL translation) + + - "ʰ": [T: "módosító kis h"] # 0x2b0 (en: 'modifier small h', DeepL translation) + - "ʱ": [T: "módosító kis h horoggal"] # 0x2b1 (en: 'modifier small h with hook', DeepL translation) + - "ʲ": [T: "módosító kis j"] # 0x2b2 (en: 'modifier small j', DeepL translation) + - "ʳ": [T: "módosító kis r"] # 0x2b3 (en: 'modifier small r', DeepL translation) + - "ʴ": [T: "módosító kis fordított r"] # 0x2b4 (en: 'modifier small turned r', DeepL translation) + - "ʵ": [T: "módosító kis fordított r horoggal"] # 0x2b5 (en: 'modifier small turned r with hook', DeepL translation) - "ʶ": # 0x2b6 - - t: "módosító kis fordított" # (en: 'modifier small inverted', DeepL translation) - - spell: "translate('R', 'R', 'R')" - - - "ʷ": [t: "módosító kis w"] # 0x2b7 (en: 'modifier small w', DeepL translation) - - "ʸ": [t: "módosító kis y"] # 0x2b8 (en: 'modifier small y', DeepL translation) - - "ʹ": [t: "modifier prime"] # 0x2b9 (DeepL translation) - - "ʺ": [t: "módosító kettős prím"] # 0x2ba (en: 'modifier double prime', DeepL translation) - - "ʻ": [t: "módosító fordított vessző"] # 0x2bb (en: 'modifier turned comma', DeepL translation) - - "ʼ": [t: "módosító aposztróf"] # 0x2bc (en: 'modifier apostrophe', DeepL translation) - - "ʽ": [t: "módosító fordított vessző"] # 0x2bd (en: 'modifier reversed comma', DeepL translation) - - "ʾ": [t: "módosító jobb fél gyűrű"] # 0x2be (en: 'modifier right half ring', DeepL translation) - - "ʿ": [t: "módosító bal fél gyűrű"] # 0x2bf (en: 'modifier left half ring', DeepL translation) - - "ˀ": [t: "módosító glottal stop"] # 0x2c0 (en: 'modifier glottal stop', DeepL translation) - - "ˁ": [t: "módosító fordított glottal stop"] # 0x2c1 (en: 'modifier reversed glottal stop', DeepL translation) - - "˂": [t: "módosító bal oldali nyílhegy"] # 0x2c2 (en: 'modifier left arrowhead', DeepL translation) - - "˃": [t: "módosító jobb oldali nyílhegy"] # 0x2c3 (en: 'modifier right arrowhead', DeepL translation) - - "˄": [t: "módosító felfelé mutató nyílhegy"] # 0x2c4 (en: 'modifier up arrowhead', DeepL translation) - - "˅": [t: "módosító lefelé nyílhegy"] # 0x2c5 (en: 'modifier down arrowhead', DeepL translation) - - "ˆ": [t: "módosító circumflex ékezet"] # 0x2c6 (en: 'modifier circumflex accent', DeepL translation) - - "ˇ": [t: "ellenőrzés"] # 0x2c7 (en: 'check', DeepL translation) - - "ˈ": [t: "módosító függőleges vonal"] # 0x2c8 (en: 'modifier vertical line', DeepL translation) - - "ˉ": [t: "módosító makron"] # 0x2c9 (en: 'modifier macron', DeepL translation) - - "ˊ": [t: "módosító hegyes ékezet"] # 0x2ca (en: 'modifier acute accent', DeepL translation) - - "ˋ": [t: "módosító súlyos ékezet"] # 0x2cb (en: 'modifier grave accent', DeepL translation) - - "ˌ": [t: "módosító alacsony függőleges vonal"] # 0x2cc (en: 'modifier low vertical line', DeepL translation) - - "ˍ": [t: "módosító alacsony makron"] # 0x2cd (en: 'modifier low macron', DeepL translation) - - "ˎ": [t: "módosító alacsony súlyos ékezet"] # 0x2ce (en: 'modifier low grave accent', DeepL translation) - - "ˏ": [t: "módosító alacsony hegyes ékezet"] # 0x2cf (en: 'modifier low acute accent', DeepL translation) - - "ː": [t: "módosító háromszögű kettőspont"] # 0x2d0 (en: 'modifier triangular colon', DeepL translation) - - "ˑ": [t: "módosító fél háromszög alakú kettőspont"] # 0x2d1 (en: 'modifier half triangular colon', DeepL translation) - - "˒": [t: "módosító középen jobb oldali félgyűrűvel"] # 0x2d2 (en: 'modifier centered right half ring', DeepL translation) - - "˓": [t: "módosító középen bal oldali félgyűrű"] # 0x2d3 (en: 'modifier centered left half ring', DeepL translation) - - "˔": [t: "módosító fel tadck"] # 0x2d4 (en: 'modifier up tadck', DeepL translation) - - "˕": [t: "módosító lefelé tack"] # 0x2d5 (en: 'modifier down tack', DeepL translation) - - "˖": [t: "módosító plusz jel"] # 0x2d6 (en: 'modifier plus sign', DeepL translation) - - "˗": [t: "módosító mínusz jel"] # 0x2d7 (en: 'modifier minus sign', DeepL translation) - - "˘": [t: "breve"] # 0x2d8 (DeepL translation) - - "˙": [t: "pont"] # 0x2d9 (en: 'dot', DeepL translation) - - "˚": [t: "gyűrű felett"] # 0x2da (en: 'ring above', DeepL translation) - - "˛": [t: "ogonek"] # 0x2db (DeepL translation) - - "˜": [t: "kis tilde"] # 0x2dc (en: 'small tilde', DeepL translation) - - "˝": [t: "kettős hegyes ékezet"] # 0x2dd (en: 'double acute accent', DeepL translation) - - "˞": [t: "módosító rótikus horog"] # 0x2de (en: 'modifier rhotic hook', DeepL translation) - - "˟": [t: "módosító kereszt ékezet"] # 0x2df (en: 'modifier cross accent', DeepL translation) - - "ˠ": [t: "módosító kis gamma"] # 0x2e0 (en: 'modifier small gamma', DeepL translation) - - "ˡ": [t: "módosító kis l"] # 0x2e1 (en: 'modifier small l', DeepL translation) - - "ˢ": [t: "módosító kis s"] # 0x2e2 (en: 'modifier small s', DeepL translation) - - "ˣ": [t: "módosító small x"] # 0x2e3 (en: 'modifier small x', DeepL translation) - - "ˤ": [t: "módosító kis fordított glottal stop"] # 0x2e4 (en: 'modifier small reversed glottal stop', DeepL translation) - - "˥": [t: "módosító extra magas hangsáv"] # 0x2e5 (en: 'modifier extra-high tone bar', DeepL translation) - - "˦": [t: "módosító magas hangsáv"] # 0x2e6 (en: 'modifier high tone bar', DeepL translation) - - "˧": [t: "módosító középtónusú sáv"] # 0x2e7 (en: 'modifier mid tone bar', DeepL translation) - - "˨": [t: "módosító alacsony hangsáv"] # 0x2e8 (en: 'modifier low tone bar', DeepL translation) + - T: "módosító kis fordított a" # (en: 'modifier small inverted', DeepL translation) + - SPELL: "translate('R', 'R', 'R')" + + - "ʷ": [T: "módosító kis w"] # 0x2b7 (en: 'modifier small w', DeepL translation) + - "ʸ": [T: "módosító kis y"] # 0x2b8 (en: 'modifier small y', DeepL translation) + - "ʹ": [T: "módosító prím"] # 0x2b9 (DeepL translation) + - "ʺ": [T: "módosító kettős prím"] # 0x2ba (en: 'modifier double prime', DeepL translation) + - "ʻ": [T: "módosító fordított vessző"] # 0x2bb (en: 'modifier turned comma', DeepL translation) + - "ʼ": [T: "módosító aposztróf"] # 0x2bc (en: 'modifier apostrophe', DeepL translation) + - "ʽ": [T: "módosító fordított vessző"] # 0x2bd (en: 'modifier reversed comma', DeepL translation) + - "ʾ": [T: "módosító jobb fél gyűrű"] # 0x2be (en: 'modifier right half ring', DeepL translation) + - "ʿ": [T: "módosító bal fél gyűrű"] # 0x2bf (en: 'modifier left half ring', DeepL translation) + - "ˀ": [T: "módosító glottal stop"] # 0x2c0 (en: 'modifier glottal stop', DeepL translation) + - "ˁ": [T: "módosító fordított glottal stop"] # 0x2c1 (en: 'modifier reversed glottal stop', DeepL translation) + - "˂": [T: "módosító bal oldali nyílhegy"] # 0x2c2 (en: 'modifier left arrowhead', DeepL translation) + - "˃": [T: "módosító jobb oldali nyílhegy"] # 0x2c3 (en: 'modifier right arrowhead', DeepL translation) + - "˄": [T: "konjunkció"] # 0x2c4 (en: 'modifier up arrowhead', DeepL translation) + - "˅": [T: "diszjunkció"] # 0x2c5 (en: 'modifier down arrowhead', DeepL translation) + - "ˆ": [T: "kalap karakter mint repülő ékezet"] # 0x2c6 (en: 'modifier circumflex accent', DeepL translation) + - "ˇ": [T: "hacsek karakter mint repülő ékezet"] # 0x2c7 (en: 'check', DeepL translation) + - "ˈ": [T: "módosító függőleges vonal"] # 0x2c8 (en: 'modifier vertical line', DeepL translation) + - "ˉ": [T: "módosító makron"] # 0x2c9 (en: 'modifier macron', DeepL translation) + - "ˊ": [T: "vessző mint éles ékezet"] # 0x2ca (en: 'modifier acute accent', DeepL translation) + - "ˋ": [T: "módosító súlyos ékezet"] # 0x2cb (en: 'modifier grave accent', DeepL translation) + - "ˌ": [T: "módosító alacsony függőleges vonal"] # 0x2cc (en: 'modifier low vertical line', DeepL translation) + - "ˍ": [T: "módosító alacsony makron"] # 0x2cd (en: 'modifier low macron', DeepL translation) + - "ˎ": [T: "módosító alacsony súlyos ékezet"] # 0x2ce (en: 'modifier low grave accent', DeepL translation) + - "ˏ": [T: "módosító alacsony hegyes ékezet"] # 0x2cf (en: 'modifier low acute accent', DeepL translation) + - "ː": [T: "módosító háromszögű kettőspont"] # 0x2d0 (en: 'modifier triangular colon', DeepL translation) + - "ˑ": [T: "módosító fél háromszög alakú kettőspont"] # 0x2d1 (en: 'modifier half triangular colon', DeepL translation) + - "˒": [T: "módosító középen jobb oldali félgyűrűvel"] # 0x2d2 (en: 'modifier centered right half ring', DeepL translation) + - "˓": [T: "módosító középen bal oldali félgyűrű"] # 0x2d3 (en: 'modifier centered left half ring', DeepL translation) + - "˔": [T: "módosító fel tadck"] # 0x2d4 (en: 'modifier up tadck', DeepL translation) + - "˕": [T: "módosító lefelé tack"] # 0x2d5 (en: 'modifier down tack', DeepL translation) + - "˖": [T: "módosító plusz jel"] # 0x2d6 (en: 'modifier plus sign', DeepL translation) + - "˗": [T: "módosító mínusz jel"] # 0x2d7 (en: 'modifier minus sign', DeepL translation) + - "˘": [T: "breve"] # 0x2d8 (DeepL translation) + - "˙": [T: "pont"] # 0x2d9 (en: 'dot', DeepL translation) + - "˚": [T: "gyűrű felett"] # 0x2da (en: 'ring above', DeepL translation) + - "˛": [T: "ogonek"] # 0x2db (DeepL translation) + - "˜": [T: "kis tilde"] # 0x2dc (en: 'small tilde', DeepL translation) + - "˝": [T: "kettős hegyes ékezet"] # 0x2dd (en: 'double acute accent', DeepL translation) + - "˞": [T: "módosító rótikus horog"] # 0x2de (en: 'modifier rhotic hook', DeepL translation) + - "˟": [T: "módosító kereszt ékezet"] # 0x2df (en: 'modifier cross accent', DeepL translation) + - "ˠ": [T: "módosító kis gamma"] # 0x2e0 (en: 'modifier small gamma', DeepL translation) + - "ˡ": [T: "módosító kis l"] # 0x2e1 (en: 'modifier small l', DeepL translation) + - "ˢ": [T: "módosító kis es"] # 0x2e2 (en: 'modifier small s', DeepL translation) + - "ˣ": [T: "módosító kis x"] # 0x2e3 (en: 'modifier small x', DeepL translation) + - "ˤ": [T: "módosító kis fordított glottal stop"] # 0x2e4 (en: 'modifier small reversed glottal stop', DeepL translation) + - "˥": [T: "módosító extra magas hangsáv"] # 0x2e5 (en: 'modifier extra-high tone bar', DeepL translation) + - "˦": [T: "módosító magas hangsáv"] # 0x2e6 (en: 'modifier high tone bar', DeepL translation) + - "˧": [T: "módosító középtónusú sáv"] # 0x2e7 (en: 'modifier mid tone bar', DeepL translation) + - "˨": [T: "módosító alacsony hangsáv"] # 0x2e8 (en: 'modifier low tone bar', DeepL translation) - "˩": [t: "módosító extra alacsony tónusú sáv"] # 0x2e9 (en: 'modifier extra-low tone bar', DeepL translation) - "˪": [t: "módosító yin távozó hangjelzés"] # 0x2ea (en: 'modifier yin departing tone mark', DeepL translation) - "˫": [t: "módosító jang távozó hangjelzés"] # 0x2eb (en: 'modifier yang departing tone mark', DeepL translation) @@ -309,8 +309,8 @@ then: [t: "pont pont pont pont"] # (en: 'dot dot dot', DeepL translation) else_test: # must have $ClearSpeak_Ellipses = 'AndSoOn' if: "count(following-sibling::*) = 0" - then: [t: "és így tovább"] # (en: 'and so on', DeepL translation) - else: [t: "és így tovább egészen"] # (en: 'and so on up to', DeepL translation) + then: [T: "és így tovább"] # (en: 'and so on', DeepL translation) + else: [T: "és így tovább egészen az alábbi értékig:"] # (en: 'and so on up to', DeepL translation) - "‰": [t: "per mille"] # 0x2030 (DeepL translation) - "‱": [t: "per tízezer"] # 0x2031 (en: 'per ten thousand', DeepL translation) @@ -458,7 +458,7 @@ - spell: "translate('.', 'ℌℑℨℭ', 'HIZC')" - "ℍℙℾℿ": # 0x210d, 0x2119, 0x213e, 0x213f - - t: "kettős ütés" # (en: 'double struck', DeepL translation) + - T: "dupla leütésű" # (en: 'double struck', DeepL translation) - spell: "translate('.', 'ℍℙℾℿ', 'HPΓΠ')" - "ℎ": [t: "planck-állandó"] # 0x210e (en: 'planck constant', DeepL translation) @@ -485,10 +485,10 @@ - if: "'.' = '℺'" then: [t: "forgatott"] # (en: 'rotated', DeepL translation) - else_if: "'.' = 'Ⅎ'" - then: [t: "fordított"] # (en: 'turned', DeepL translation) + then: [T: "fordított"] # (en: 'turned', DeepL translation) - else_if: "'.' = '⅃'" - then: [t: "fordított sans-serif"] # (en: 'reversed sans-serif', DeepL translation) - else: [t: "fordított sans-serif"] # (en: 'turned sans-serif', DeepL translation) + then: [T: "fordított talpatlan"] # (en: 'reversed sans-serif', DeepL translation) + else: [T: "fordított talpatlan"] # (en: 'turned sans-serif', DeepL translation) - spell: "translate('.', 'Ⅎ℺⅁⅂⅃⅄', 'FQGLLY')" - "ℴ": [t: "írás o"] # 0x2134 (en: 'script o', DeepL translation) @@ -1185,10 +1185,10 @@ - "⋅": # 0x22c5 - test: if: "@data-chem-formula-op" - then: [t: "pont"] # (en: 'dot', DeepL translation) - else: [t: "idők"] # (en: 'times', DeepL translation) + then: [T: "pont"] # (en: 'dot', DeepL translation) + else: [T: "szorozva"] # (en: 'times', DeepL translation) - - "⋆": [t: "idők"] # 0x22c6 (en: 'times', DeepL translation) + - "⋆": [T: "szorozva"] # 0x22c6 (en: 'times', DeepL translation) - "⋇": [t: "osztás idő"] # 0x22c7 (en: 'division times', DeepL translation) - "⋈": [t: "masni"] # 0x22c8 (en: 'bowtie', DeepL translation) - "⋉": # 0x22c9 @@ -1403,7 +1403,7 @@ - "⏠": [t: "felső teknőspáncélos konzol"] # 0x23e0 (en: 'top tortoise shell bracket', DeepL translation) - "⏡": [t: "alsó teknőspáncélos zárójel"] # 0x23e1 (en: 'bottom tortoise shell bracket', DeepL translation) - "⏢": [t: "fehér trapéz"] # 0x23e2 (en: 'white trapezium', DeepL translation) - - "⏣": [t: "benzol jobbra körrel"] # 0x23e3 (en: 'benzene right with circle', DeepL translation) + - "⏣": [T: "benzolgyűrű körrel"] # 0x23e3 (en: 'benzene right with circle', DeepL translation) - "⏤": [t: "egyenesség"] # 0x23e4 (en: 'straightness', DeepL translation) - "⏥": [t: "laposság"] # 0x23e5 (en: 'flatness', DeepL translation) - "⏦": # 0x23e6 @@ -1411,9 +1411,9 @@ - t: "jelenlegi" # (en: 'current', DeepL translation) - "⏧": [t: "elektromos kereszteződés"] # 0x23e7 (en: 'electrical intersection', DeepL translation) - "①-⑨": # 0x2460 - 0x2469 - - t: "bekarikázva" # (en: 'circled', DeepL translation) + - T: "bekarikázott" # (en: 'circled', DeepL translation) - spell: "translate('.', '①②③④⑤⑥⑦⑧⑨', '123456789')" - - "⑩": [t: "bekarikázott tízes"] # 0x2469 (en: 'circled ten', DeepL translation) + - "⑩": [T: "bekarikázott tízes"] # 0x2469 (en: 'circled ten', DeepL translation) - "⑪": [t: "bekarikázott tizenegy"] # 0x246a (en: 'circled eleven', DeepL translation) - "⑫": [t: "bekarikázott tizenkettő"] # 0x246b (en: 'circled twelve', DeepL translation) - "⑬": [t: "bekarikázott tizenhármas"] # 0x246c (en: 'circled thirteen', DeepL translation) @@ -1456,36 +1456,36 @@ - spell: "translate('.', '⒜⒝⒞⒟⒠⒡⒢⒣⒤⒥⒦⒧⒨⒩⒪⒫⒬⒭⒮⒯⒰⒱⒲⒳⒴⒵', 'abcdefghijklmnopqrstuvwxyz')" - "Ⓐ-ⓩ": # 0x24b6 - 0x24cf - - t: "bekarikázva" # (en: 'circled', DeepL translation) + - T: "bekarikázott" # (en: 'circled', DeepL translation) - spell: "translate('.', 'ⒶⒷⒸⒹⒺⒻⒼⒽⒾⒿⓀⓁⓂⓃⓄⓅⓆⓇⓈⓉⓊⓋⓌⓍⓎⓏ', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" - "🅐-🅩": # 0x1f150 - 0x1f169 - - t: "fekete bekarikázva" # (en: 'black circled', DeepL translation) + - T: "fekete körrel jelölt" # (en: 'black circled', DeepL translation) - spell: "translate('.', '🅐🅑🅒🅓🅔🅕🅖🅗🅘🅙🅚🅛🅜🅝🅞🅟🅠🅡🅢🅣🅤🅥🅦🅧🅨🅩', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" - "ⓐ-ⓩ": # 0x24d0 - 0x24e9 - - t: "bekarikázva" # (en: 'circled', DeepL translation) + - T: "bekarikázott" # (en: 'circled', DeepL translation) - spell: "translate('.', 'ⓐⓑⓒⓓⓔⓕⓖⓗⓘⓙⓚⓛⓜⓝⓞⓟⓠⓡⓢⓣⓤⓥⓦⓧⓨⓩ', 'abcdefghijklmnopqrstuvwxyz')" - "⓪": [t: "bekarikázott nulla"] # 0x24ea (en: 'circled zero', DeepL translation) - - "⓫": [t: "fekete kör alakú tizenegyes"] # 0x24eb (en: 'black circled eleven', DeepL translation) - - "⓬": [t: "fekete bekarikázott tizenkettő"] # 0x24ec (en: 'black circled twelve', DeepL translation) - - "⓭": [t: "fekete bekarikázott tizenhárom"] # 0x24ed (en: 'black circled thirteen', DeepL translation) - - "⓮": [t: "fekete karikázott tizennégy"] # 0x24ee (en: 'black circled fourteen', DeepL translation) - - "⓯": [t: "fekete karikázott tizenöt"] # 0x24ef (en: 'black circled fifteen', DeepL translation) - - "⓰": [t: "fekete karikázott tizenhat"] # 0x24f0 (en: 'black circled sixteen', DeepL translation) - - "⓱": [t: "fekete karikázott tizenhét"] # 0x24f1 (en: 'black circled seventeen', DeepL translation) - - "⓲": [t: "fekete karikázott tizenegyes"] # 0x24f2 (en: 'black circled eighteen', DeepL translation) - - "⓳": [t: "fekete bekarikázott tizenkilenc"] # 0x24f3 (en: 'black circled nineteen', DeepL translation) + - "⓫": [T: "fekete kör alakú tizenegyes"] # 0x24eb (en: 'black circled eleven', DeepL translation) + - "⓬": [T: "fekete bekarikázott tizenkettő"] # 0x24ec (en: 'black circled twelve', DeepL translation) + - "⓭": [T: "fekete bekarikázott tizenhárom"] # 0x24ed (en: 'black circled thirteen', DeepL translation) + - "⓮": [T: "fekete bekarikázott tizennégy"] # 0x24ee (en: 'black circled fourteen', DeepL translation) + - "⓯": [T: "fekete bekarikázott tizenöt"] # 0x24ef (en: 'black circled fifteen', DeepL translation) + - "⓰": [T: "fekete bekarikázott tizenhat"] # 0x24f0 (en: 'black circled sixteen', DeepL translation) + - "⓱": [T: "fekete bekarikázott tizenhét"] # 0x24f1 (en: 'black circled seventeen', DeepL translation) + - "⓲": [T: "fekete karikázott tizenegyes"] # 0x24f2 (en: 'black circled eighteen', DeepL translation) + - "⓳": [T: "fekete bekarikázott tizenkilenc"] # 0x24f3 (en: 'black circled nineteen', DeepL translation) - "⓴": [t: "fekete bekarikázott húszas"] # 0x24f4 (en: 'black circled twenty', DeepL translation) - "⓵-⓽": # 0x24f5 - 0x24fe - - t: "dupla bekarikázott" # (en: 'double circled', DeepL translation) + - T: "dupla bekarikázott" # (en: 'double circled', DeepL translation) - spell: "translate('.', '⓵⓶⓷⓸⓹⓺⓻⓼⓽', '123456789')" - - "⓾": [t: "dupla bekarikázott tízes"] # 0x24fe (en: 'double circled ten', DeepL translation) - - "⓿": [t: "fekete bekarikázott nulla"] # 0x24ff (en: 'black circled zero', DeepL translation) - - "■": [t: "fekete négyzet"] # 0x25a0 (en: 'black square', DeepL translation) - - "□": [t: "fehér négyzet"] # 0x25a1 (en: 'white square', DeepL translation) - - "▢": [t: "fehér négyzet lekerekített sarkokkal"] # 0x25a2 (en: 'white square with rounded corners', DeepL translation) - - "▣": [t: "fehér négyzet, amely kis fekete négyzetet tartalmaz"] # 0x25a3 (en: 'white square containing small black square', DeepL translation) + - "⓾": [T: "dupla bekarikázott tízes"] # 0x24fe (en: 'double circled ten', DeepL translation) + - "⓿": [T: "fekete bekarikázott nulla"] # 0x24ff (en: 'black circled zero', DeepL translation) + - "■": [T: "fekete négyzet"] # 0x25a0 (en: 'black square', DeepL translation) + - "□": [T: "fehér négyzet"] # 0x25a1 (en: 'white square', DeepL translation) + - "▢": [T: "fehér négyzet lekerekített sarkokkal"] # 0x25a2 (en: 'white square with rounded corners', DeepL translation) + - "▣": [T: "fehér négyzet, amely kis fekete négyzetet tartalmaz"] # 0x25a3 (en: 'white square containing small black square', DeepL translation) - "▤": [t: "négyzet vízszintes kitöltéssel"] # 0x25a4 (en: 'square with horizontal fill', DeepL translation) - "▥": [t: "négyzet függőleges kitöltéssel"] # 0x25a5 (en: 'square with vertical fill', DeepL translation) - "▦": [t: "négyzet ortogonális kereszthúzással kitöltve"] # 0x25a6 (en: 'square with orthogonal crosshatch fill', DeepL translation) @@ -1617,11 +1617,11 @@ - "⚆": [t: "fehér kör jobbra ponttal"] # 0x2686 (en: 'white circle with dot right', DeepL translation) - "⚇": [t: "fehér kör két ponttal"] # 0x2687 (en: 'white circle wiht two dots', DeepL translation) - "⚈": [t: "fekete kör jobbra mutató ponttal"] # 0x2688 (en: 'black circle with dot right', DeepL translation) - - "⚉": [t: "fekete kör két ponttal"] # 0x2689 (en: 'black circle wiht two dots', DeepL translation) - - "⚪": [t: "közepes fehér kör"] # 0x26aa (en: 'medium white circle', DeepL translation) - - "⚫": [t: "közepes fekete kör"] # 0x26ab (en: 'medium black circle', DeepL translation) - - "⚬": [t: "közepes kis fehér kör"] # 0x26ac (en: 'medium small white circle', DeepL translation) - - "⚲": [t: "neutrális"] # 0x26b2 (en: 'neuter', DeepL translation) + - "⚉": [T: "fekete kör két ponttal"] # 0x2689 (en: 'black circle wiht two dots', DeepL translation) + - "⚪": [T: "közepes fehér kör"] # 0x26aa (en: 'medium white circle', DeepL translation) + - "⚫": [T: "közepes fekete kör"] # 0x26ab (en: 'medium black circle', DeepL translation) + - "⚬": [T: "közepes kis fehér kör"] # 0x26ac (en: 'medium small white circle', DeepL translation) + - "⚲": [T: "neutrális"] # 0x26b2 (en: 'neuter', DeepL translation) - "✓": [t: "pipa"] # 0x2713 (en: 'check mark', DeepL translation) - "✠": [t: "máltai kereszt"] # 0x2720 (en: 'maltese cross', DeepL translation) - "✪": [t: "bekarikázott fehér csillag"] # 0x272a (en: 'circled white star', DeepL translation) @@ -3165,24 +3165,24 @@ # double struck (blackboard bold) chars in math alphabetic block and also MathType private use area # Some of these are reserved because they were used in Plane 0 -- that shouldn't be an issue other than causing the other chars to not display - "𝔸-𝕐": # 0x1d504 - 0x1d51d ('z' version is reserved) - - t: "kettős ütés" # (en: 'double struck', DeepL translation) + - T: "dupla leütésű" # (en: 'double struck', DeepL translation) - spell: "translate('.', '𝔸𝔹𝔺𝔻𝔼𝔽𝔾𝔿𝕀𝕁𝕂𝕃𝕄𝕅𝕆𝕇𝕈𝕉𝕊𝕋𝕌𝕍𝕎𝕏𝕐', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" - "-": # 0xf080 - 0xf098 - - t: "kettős ütés" # (en: 'double struck', DeepL translation) + - T: "dupla leütésű" # (en: 'double struck', DeepL translation) - spell: "translate('.', '', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" - "𝕒-𝕫": # 0x1d552 - 0x1d56b - - t: "kettős ütés" # (en: 'double struck', DeepL translation) + - T: "dupla leütésű" # (en: 'double struck', DeepL translation) - spell: "translate('.', '𝕒𝕓𝕔𝕕𝕖𝕗𝕘𝕙𝕚𝕛𝕜𝕝𝕞𝕟𝕠𝕡𝕢𝕣𝕤𝕥𝕦𝕧𝕨𝕩𝕪𝕫', 'abcdefghijklmnopqrstuvwxyz')" - "-": # 0xf09a - 0xf0b3 - - t: "kettős ütés" # (en: 'double struck', DeepL translation) + - T: "dupla leütésű" # (en: 'double struck', DeepL translation) - spell: "translate('.', '', 'abcdefghijklmnopqrstuvwxyz')" - "𝟘-𝟡": # 0x1d7d8 - 0x1d7e1 - - t: "kettős ütés" # (en: 'double struck', DeepL translation) + - T: "dupla leütésű" # (en: 'double struck', DeepL translation) - spell: "translate('.', '𝟘𝟙𝟚𝟛𝟜𝟝𝟞𝟟𝟠𝟡', '0123456789')" - "-": # 0xf0c0 - 0xf0c9 - - t: "kettős ütés" # (en: 'double struck', DeepL translation) + - T: "dupla leütésű" # (en: 'double struck', DeepL translation) - spell: "translate('.', '', '0123456789')" - "": [t: "dupla leütött nahblah"] # 0xf0ca (en: 'double struck nahblah', DeepL translation) @@ -3292,11 +3292,11 @@ # MathType only has a few of the cap Greek letters in PUA - "": # 0xf201 - 0xf209 - - t: "kettős ütés" # (en: 'double struck', DeepL translation) + - T: "dupla leütésű" # (en: 'double struck', DeepL translation) - spell: "translate('.', '', 'ΔΨΛΠΣΘΓΩΥ')" - "-": # 0xf220 - 0xf236 - - t: "kettős ütés" # (en: 'double struck', DeepL translation) + - T: "dupla leütésű" # (en: 'double struck', DeepL translation) - spell: "translate('.', '', 'ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡ΢ΣΤΥΦΧΨΩ')" - "": [t: "dupla áthúzott végső szigma"] # 0xf237 (en: 'double struck final sigma', DeepL translation) @@ -3666,12 +3666,6 @@ then: [t: "félkövér"] # (en: 'bold', DeepL translation) - spell: "translate('.', '𝟎𝟏𝟐𝟑𝟒𝟓𝟔𝟕𝟖𝟗', '0123456789')" - - "-": # 0xf52e - 0xf537 (old MathType) - - test: - if: "not($IgnoreBold)" - then: [t: "félkövér"] # (en: 'bold', DeepL translation) - - spell: "translate('.', '', '0123456789')" - - "𝟬-𝟵": # 0x1D7EC - 0x1D7F5 - test: if: "not($IgnoreBold)" diff --git a/Rules/Languages/hu/unicode.yaml b/Rules/Languages/hu/unicode.yaml index ffa52b99f..b184a627e 100644 --- a/Rules/Languages/hu/unicode.yaml +++ b/Rules/Languages/hu/unicode.yaml @@ -1,16 +1,45 @@ --- - - "a-z": + - "a": - test: if: "$TTS='none'" - then: [t: "."] # (en: '.', DeepL translation) - else: [spell: "'.'"] - + then: [T: "a"] # long "a" sound in all speech engines I tested (espeak, MS SAPI, eloquence, + else: [SPELL: "'a'"] # AWS Polly, ReadSpeaker, NaturalReader, google cloud, nuance, ibm watson) + - "b-z": + - test: + if: "$TTS='none'" + then: [T: "."] + else: [SPELL: "'.'"] + # 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 # 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. # Some languages say the word for "uppercase" after the letter. Make sure to change that where appropriate by moving some code around - - - "A-Z": + - "A": + - 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: "nagy"] + else: [x: "$SpeechOverrides_CapitalLetters"] + - pitch: + value: "$CapitalLetters_Pitch" + replace: + - test: + if: "$TTS='none'" + then: [T: "a"] + else: [SPELL: "'a'"] + + - "B-Z": - test: if: "$CapitalLetters_Beep" then: @@ -23,55 +52,55 @@ if: "$SpeechOverrides_CapitalLetters = ''" then_test: if: "$Impairment = 'Blindness'" - then: [t: "nagybetűs"] # (en: 'cap', DeepL translation) + then: [T: "nagy"] 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')"] + replace: [SPELL: "translate('.', 'BCDEFGHIJKLMNOPQRSTUVWXYZ', 'bcdefghijklmnopqrstuvwxyz')"] - - "0-9": [t: "."] # (en: '.', DeepL translation) + - "0-9": [T: "."] # (en: '.', DeepL translation) - - " ": [t: " "] # 0x20 (DeepL translation) + - " ": [T: " "] # 0x20 (DeepL translation) - "!": # 0x21 - test: if: "ancestor-or-self::*[contains(@data-intent-property, ':literal:')]" then_test: if: "$Verbosity = 'Terse'" - then: [t: "bang"] # 0x21 (DeepL translation) - else: [t: "felkiáltójel"] # 0x21 (en: 'exclamation point', DeepL translation) - else: [t: "faktoriális"] # 0x21 (en: 'factorial', DeepL translation) + then: [T: "felkiáltójel"] # 0x21 (DeepL translation) + else: [T: "felkiáltójel"] # 0x21 (en: 'exclamation point', DeepL translation) + else: [T: "faktoriális"] # 0x21 (en: 'factorial', DeepL translation) - - "\"": [t: "idézőjel"] # 0x22 (en: 'quotation mark', DeepL translation) - - "#": [t: "number"] # 0x23 (DeepL translation) - - "$": [t: "dollár"] # 0x24 (en: 'dollars', DeepL translation) - - "%": [t: "százalék"] # 0x25 (en: 'percent', DeepL translation) - - "&": [t: "zárójel"] # 0x26 (en: 'ampersand', DeepL translation) - - "'": [t: "aposztróf"] # 0x27 (en: 'apostrophe', DeepL translation) + - "\"": [T: "idézőjel"] # 0x22 (en: 'quotation mark', DeepL translation) + - "#": [T: "kettőskereszt"] # 0x23 (DeepL translation) + - "$": [T: "dollár"] # 0x24 (en: 'dollars', DeepL translation) + - "%": [T: "százalék"] # 0x25 (en: 'percent', DeepL translation) + - "&": [T: "zárójel"] # 0x26 (en: 'ampersand', DeepL translation) + - "'": [T: "aposztróf"] # 0x27 (en: 'apostrophe', DeepL translation) - "(": # 0x28 - test: if: $SpeechStyle = 'ClearSpeak' or $SpeechStyle = 'SimpleSpeak' then_test: if: "$Verbosity='Terse'" - then: [t: "open"] # 0x28 (DeepL translation) - else: [t: "nyitott zárójel"] # 0x28 (en: 'open paren', DeepL translation) - else: [t: "bal zárójel"] # 0x28 (en: 'left paren', DeepL translation) + then: [T: "nyitott zárójel"] # 0x28 (DeepL translation) + else: [T: "nyitott zárójel"] # 0x28 (en: 'open paren', DeepL translation) + else: [T: "bal zárójel"] # 0x28 (en: 'left paren', DeepL translation) - ")": # 0x29 - test: if: $SpeechStyle = 'ClearSpeak' or $SpeechStyle = 'SimpleSpeak' then_test: if: "$Verbosity='Terse'" - then: [t: "záró"] # 0x29 (en: 'close', DeepL translation) - else: [t: "zárt zárójel"] # 0x29 (en: 'close paren', DeepL translation) - else: [t: "jobb zárójel"] # 0x29 (en: 'right paren', DeepL translation) + then: [T: "zárt zárójel"] # 0x29 (en: 'close', DeepL translation) + else: [T: "zárt zárójel"] # 0x29 (en: 'close paren', DeepL translation) + else: [T: "jobb zárójel"] # 0x29 (en: 'right paren', DeepL translation) - "*": # 0x2a test: if: "parent::*[name(.)='msup' or name(.)='msubsup' or name(.)='skip-super']" - then: [t: "csillag"] # 0x2a (en: 'star', DeepL translation) - else: [t: "times"] # 0x2a (DeepL translation) - - "+": [t: "plusz"] # 0x2b (en: 'plus', DeepL translation) + then: [T: "csillag"] # 0x2a (en: 'star', DeepL translation) + else: [T: "szorozva"] # 0x2a (DeepL translation) + - "+": [T: "plusz"] # 0x2b (en: 'plus', DeepL translation) - ",": # 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 @@ -84,67 +113,67 @@ # except if expression starts with '…' - "../*[1][.='…'] " then: - - T: "comma" # (en: 'comma', google translation) + - T: "vessző" # (en: 'comma', google translation) - test: if: "$Verbosity != Terse" then: [pause: short] # else silent - - "-": [t: "mínusz"] # 0x2d (en: 'minus', DeepL translation) + - "-": [T: "mínusz"] # 0x2d (en: 'minus', DeepL translation) - ".": # 0x2e - test: if: "parent::*[1][self::m:mn]" - then: [t: "pont"] # (en: 'point', DeepL translation) - else: [t: "pont"] # (en: 'dot', DeepL translation) + then: [T: "pont"] # (en: 'point', DeepL translation) + else: [T: "pont"] # (en: 'dot', DeepL translation) - "/": # 0x2f - test: if: "ancestor-or-self::*[contains(@data-intent-property, ':literal:')]" - then: [t: "slash"] # 0x2f (DeepL translation) - else: [t: "osztva"] # 0x2f (en: 'divided by', DeepL translation) + then: [T: "per"] # 0x2f (DeepL translation) + else: [T: "osztva"] # 0x2f (en: 'divided by', DeepL translation) - - ":": [t: "kettőspont"] # 0x3a (en: 'colon', DeepL translation) - - ";": [t: "pontosvessző"] # 0x3b (en: 'semicolon', DeepL translation) + - ":": [T: "kettőspont"] # 0x3a (en: 'colon', DeepL translation) + - ";": [T: "pontosvessző"] # 0x3b (en: 'semicolon', DeepL translation) - "<": # 0x3c - test: if: "$Verbosity!='Terse'" - then: [t: "van"] # (en: 'is', DeepL translation) - - t: "kevesebb, mint" # (en: 'less than', DeepL translation) + then: [T: ""] # (en: 'is', DeepL translation) + - T: "kisebb, mint" # (en: 'less than', DeepL translation) - "=": # 0x3d - test: if: "$Verbosity!='Terse'" - then: [t: "egyenlő"] # (en: 'is equal to', DeepL translation) - else: [t: "egyenlők"] # (en: 'equals', DeepL translation) + then: [T: "egyenlő"] # (en: 'is equal to', DeepL translation) + else: [T: "egyenlő"] # (en: 'equals', DeepL translation) - ">": # 0x3e - test: if: "$Verbosity!='Terse'" - then: [t: "van"] # (en: 'is', DeepL translation) - - t: "nagyobb, mint" # (en: 'greater than', DeepL translation) - - "?": [t: "kérdőjel"] # 0x3f (en: 'question mark', DeepL translation) - - "@": [t: "at jel"] # 0x40 (en: 'at sign', DeepL translation) + then: [T: ""] # (en: 'is', DeepL translation) + - T: "nagyobb, mint" # (en: 'greater than', DeepL translation) + - "?": [T: "kérdőjel"] # 0x3f (en: 'question mark', DeepL translation) + - "@": [T: "kukac"] # 0x40 (en: 'at sign', DeepL translation) - "[": # 0x5b - test: if: $SpeechStyle = 'ClearSpeak' or $SpeechStyle = 'SimpleSpeak' - then: [t: "nyitott zárójel"] # (en: 'open bracket', DeepL translation) - else: [t: "bal oldali zárójel"] # (en: 'left bracket', DeepL translation) - - "\\": [t: "hátsó kötőjel"] # 0x5c (en: 'back slash', DeepL translation) + then: [T: "nyitott zárójel"] # (en: 'open bracket', DeepL translation) + else: [T: "bal oldali zárójel"] # (en: 'left bracket', DeepL translation) + - "\\": [T: "bexles"] # 0x5c (en: 'back slash', DeepL translation) - "]": # 0x5d - test: if: $SpeechStyle = 'ClearSpeak' or $SpeechStyle = 'SimpleSpeak' - then: [t: "zárójel"] # (en: 'close bracket', DeepL translation) - else: [t: "jobb oldali zárójel"] # (en: 'right bracket', DeepL translation) + then: [T: "zárójel"] # (en: 'close bracket', DeepL translation) + else: [T: "jobb oldali zárójel"] # (en: 'right bracket', DeepL translation) - "^": # 0x5e - test: if: "parent::m:modified-variable or parent::m:mover" - then: [t: "kalap"] # (en: 'hat', DeepL translation) - else: [t: "caret"] # (DeepL translation) - - "_": [t: "sáv alatt"] # 0x5f (en: 'under bar', DeepL translation) - - "`": [t: "súlyos"] # 0x60 (en: 'grave', DeepL translation) + then: [T: "kalap"] # (en: 'hat', DeepL translation) + else: [T: "fölfelényíl"] # (DeepL translation) + - "_": [T: "aláhúzás"] # 0x5f (en: 'under bar', DeepL translation) + - "`": [T: "súlyozott"] # 0x60 (en: 'grave', DeepL translation) - "{": # 0x7b - test: if: $SpeechStyle = 'ClearSpeak' or $SpeechStyle = 'SimpleSpeak' - then: [t: "nyitott zárójel"] # (en: 'open brace', DeepL translation) - else: [t: "bal oldali zárójel"] # (en: 'left brace', DeepL translation) + then: [T: "nyitott zárójel"] # (en: 'open brace', DeepL translation) + else: [T: "bal oldali zárójel"] # (en: 'left brace', DeepL translation) - "|": # 0x7c # note: for ClearSpeak and SimpleSpeak, "|" inside of sets is handled at the mrow level, same for 'sets' - with: @@ -152,69 +181,69 @@ replace: - test: - if: "ancestor-or-self::*[contains(@data-intent-property, ':literal:')]" - then: [t: "függőleges vonal"] # (en: 'vertical line', DeepL translation) + then: [T: "függőleges vonal"] # (en: 'vertical line', DeepL translation) - else_if: "$SpeechStyle != 'ClearSpeak'" then_test: - if: "$DefaultToGiven" - then: [t: "adott"] # (en: 'given', DeepL translation) + then: [T: "adott"] # (en: 'given', DeepL translation) - else_if: "preceding-sibling::*[1][self::m:mn and not(contains(., $DecimalSeparators))] and following-sibling::*[1][self::m:mn and not(contains(., $DecimalSeparators))]" - then: [t: "osztja"] # (en: 'divides', DeepL translation) - else: [t: "függőleges vonal"] # (en: 'vertical line', DeepL translation) + then: [T: "osztja"] # (en: 'divides', DeepL translation) + else: [T: "függőleges vonal"] # (en: 'vertical line', DeepL translation) - else_if: "not(preceding-sibling::*) or not(following-sibling::*)" - then: [t: "függőleges vonal"] # (en: 'vertical line', DeepL translation) + then: [T: "függőleges vonal"] # (en: 'vertical line', DeepL translation) - else_if: "$ClearSpeak_VerticalLine = 'SuchThat'" - then: [t: "olyan, hogy"] # (en: 'such that', DeepL translation) + then: [T: "olyan, hogy"] # (en: 'such that', DeepL translation) - else_if: "$ClearSpeak_VerticalLine = 'Given' or $DefaultToGiven" - then: [t: "adott"] # (en: 'given', DeepL translation) - - else: [t: "osztja"] # (en: 'divides', DeepL translation) + then: [T: "adott"] # (en: 'given', DeepL translation) + - else: [T: "osztja"] # (en: 'divides', DeepL translation) - "}": # 0x7d - test: if: $SpeechStyle = 'ClearSpeak' or $SpeechStyle = 'SimpleSpeak' - then: [t: "zárt zárójel"] # (en: 'close brace', DeepL translation) - else: [t: "jobb oldali zárójel"] # (en: 'right brace', DeepL translation) + then: [T: "zárt zárójel"] # (en: 'close brace', DeepL translation) + else: [T: "jobb oldali zárójel"] # (en: 'right brace', DeepL translation) - - "~": [t: "tilde"] # 0x7e (DeepL translation) + - "~": [T: "tilde"] # 0x7e (DeepL translation) - " ": # 0xa0 - test: # could be mtext in mtd or mtext in an mrow that is a concatenation of mtd's. Is there a better solution? if: "@data-empty-in-2D and not(ancestor::*[self::m:piecewise or self::m:system-of-equations or self::m:lines])" - then: [t: "üres"] # want to say something for fraction (etc) with empty child (en: 'empty', DeepL translation) - else: [t: ""] + then: [T: "üres"] # want to say something for fraction (etc) with empty child (en: 'empty', DeepL translation) + else: [T: ""] - - "¬": [t: "nem"] # 0xac (en: 'not', DeepL translation) - - "°": [t: "fok"] # 0xb0 (en: 'degrees', DeepL translation) - - "±": [t: "plusz vagy mínusz"] # 0xb1 (en: 'plus or minus', DeepL translation) - - "´": [t: "akut"] # 0xb4 (en: 'acute', DeepL translation) + - "¬": [T: "logikai nem"] # 0xac (en: 'not', DeepL translation) + - "°": [T: "fok"] # 0xb0 (en: 'degrees', DeepL translation) + - "±": [T: "plusz vagy mínusz"] # 0xb1 (en: 'plus or minus', DeepL translation) + - "´": [T: "éles ékezet"] # 0xb4 (en: 'acute', DeepL translation) - "·": # 0xB7 - test: if: "ancestor-or-self::*[contains(@data-intent-property, ':literal:')] or not($SpeechStyle = 'ClearSpeak' and $ClearSpeak_MultSymbolDot = 'Auto')" - then: [t: "pont"] # (en: 'dot', DeepL translation) - else: [t: "times"] # (DeepL translation) + then: [T: "pont"] # (en: 'dot', DeepL translation) + else: [T: "szorozva"] # (DeepL translation) - "×": # 0xd7 - test: if: "$SpeechStyle = 'ClearSpeak'" then_test: - if: "$ClearSpeak_MultSymbolX = 'Auto'" - then: [t: "times"] # (DeepL translation) + then: [T: "szorozva"] # (DeepL translation) - else_if: "$ClearSpeak_MultSymbolX = 'By'" - then: [t: "by"] # (DeepL translation) - else: [t: "kereszt"] # (en: 'cross', DeepL translation) + then: [T: "szorozva"] # (DeepL translation) + else: [T: "kereszt"] # (en: 'cross', DeepL translation) else_test: if: "ancestor-or-self::*[contains(@data-intent-property, ':literal:')]" - then: [t: "kereszt"] # (en: 'cross', DeepL translation) - else: [t: "times"] # (DeepL translation) + then: [T: "kereszt"] # (en: 'cross', DeepL translation) + else: [T: "szorozva"] # (DeepL translation) - - "÷": [t: "osztva"] # 0xf7 (en: 'divided by', DeepL translation) - - "̀": [t: "súlyos ékezet díszítés"] # 0x300 (en: 'grave accent embellishment', DeepL translation) - - "́": [t: "akut ékezet díszítés"] # 0x301 (en: 'acute accent embellishment', DeepL translation) - - "̂": [t: "circumflex accent díszítés"] # 0x302 (en: 'circumflex accent embellishment', DeepL translation) - - "̃": [t: "tilde díszítés"] # 0x303 (en: 'tilde embellishment', DeepL translation) - - "̄": [t: "macron díszítés"] # 0x304 (en: 'macron embellishment', DeepL translation) - - "̅": [t: "overbar díszítés"] # 0x305 (en: 'overbar embellishment', DeepL translation) - - "̆": [t: "breve"] # 0x306 (DeepL translation) - - "̇": [t: "pont a díszítés felett"] # 0x307 (en: 'dot above embellishment', DeepL translation) + - "÷": [T: "osztva"] # 0xf7 (en: 'divided by', DeepL translation) + - "̀": [T: "súlyos ékezet díszítés"] # 0x300 (en: 'grave accent embellishment', DeepL translation) + - "́": [T: "akut ékezet díszítés"] # 0x301 (en: 'acute accent embellishment', DeepL translation) + - "̂": [T: "cirkumflex ékezet díszítés"] # 0x302 (en: 'circumflex accent embellishment', DeepL translation) + - "̃": [T: "tilde"] # 0x303 (en: 'tilde embellishment', DeepL translation) + - "̄": [T: "makron"] # 0x304 (en: 'macron embellishment', DeepL translation) + - "̅": [T: "túlszárnyaló díszítés"] # 0x305 (en: 'overbar embellishment', DeepL translation) + - "̆": [T: "rövid"] # 0x306 (DeepL translation) + - "̇": [T: "pont a díszítés felett"] # 0x307 (en: 'dot above embellishment', DeepL translation) # Note: ClearSpeak has pref TriangleSymbol for "Δ", but that is wrong - "Α-Ω": @@ -230,47 +259,47 @@ if: "$SpeechOverrides_CapitalLetters = ''" then_test: if: "$Impairment = 'Blindness'" - then: [t: "nagybetűs"] # (en: 'cap', DeepL translation) + then: [T: "nagy"] # (en: 'cap', DeepL 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('.', 'ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡ΢ΣΤΥΦΧΨΩ', 'αβγδεζηθικλμνξοπρςστυφχψω')"] + replace: [SPELL: "translate('.', 'ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡ΢ΣΤΥΦΧΨΩ', 'αβγδεζηθικλμνξοπρςστυφχψω')"] - - "α": [t: "alfa"] # 0x3b1 (en: 'alpha', DeepL translation) - - "β": [t: "béta"] # 0x3b2 (en: 'beta', DeepL translation) - - "γ": [t: "gamma"] # 0x3b3 (DeepL translation) - - "δ": [t: "delta"] # 0x3b4 (DeepL translation) - - "ε": [t: "epsilon"] # 0x3b5 (DeepL translation) - - "ζ": [t: "zéta"] # 0x3b6 (en: 'zeta', DeepL translation) - - "η": [t: "eta"] # 0x3b7 (DeepL translation) - - "θ": [t: "théta"] # 0x3b8 (en: 'theta', DeepL translation) - - "ι": [t: "iota"] # 0x3b9 (DeepL translation) - - "κ": [t: "kappa"] # 0x3ba (DeepL translation) - - "λ": [t: "lambda"] # 0x3bb (DeepL translation) - - "μ": [t: "mu"] # 0x3bc (DeepL translation) - - "ν": [t: "nu"] # 0x3bd (DeepL translation) - - "ξ": [t: "zai"] # 0x3be (DeepL translation) - - "ο": [t: "omikron"] # 0x3bf (en: 'omicron', DeepL translation) - - "π": [t: "pi"] # 0x3c0 (DeepL translation) - - "ρ": [t: "rho"] # 0x3c1 (DeepL translation) - - "ς": [t: "végső szigma"] # 0x3c2 (en: 'final sigma', DeepL translation) - - "σ": [t: "sigma"] # 0x3c3 (DeepL translation) - - "τ": [t: "tau"] # 0x3c4 (DeepL translation) - - "υ": [t: "upsilon"] # 0x3c5 (DeepL translation) - - "φ": [t: "phi"] # 0x3c6 (DeepL translation) - - "χ": [t: "chi"] # 0x3c7 (DeepL translation) - - "ψ": [t: "psi"] # 0x3c8 (DeepL translation) - - "ω": [t: "omega"] # 0x3c9 (DeepL translation) - - "ϕ": [t: "phi"] # 0x3d5 (DeepL translation) - - "ϖ": [t: "pi"] # 0x3d6 (DeepL translation) - - "ϵ": [t: "epsilon"] # 0x3f5 (DeepL translation) - - "϶": [t: "fordított epsilon"] # 0x3f6 (en: 'reversed epsilon', DeepL translation) + - "α": [T: "alfa"] # 0x3b1 (en: 'alpha', DeepL translation) + - "β": [T: "béta"] # 0x3b2 (en: 'beta', DeepL translation) + - "γ": [T: "gamma"] # 0x3b3 (DeepL translation) + - "δ": [T: "delta"] # 0x3b4 (DeepL translation) + - "ε": [T: "epszilon"] # 0x3b5 (DeepL translation) + - "ζ": [T: "zéta"] # 0x3b6 (en: 'zeta', DeepL translation) + - "η": [T: "éta"] # 0x3b7 (DeepL translation) + - "θ": [T: "théta"] # 0x3b8 (en: 'theta', DeepL translation) + - "ι": [T: "ióta"] # 0x3b9 (DeepL translation) + - "κ": [T: "kappa"] # 0x3ba (DeepL translation) + - "λ": [T: "lambda"] # 0x3bb (DeepL translation) + - "μ": [T: "mű"] # 0x3bc (DeepL translation) + - "ν": [T: "nű"] # 0x3bd (DeepL translation) + - "ξ": [T: "kszí"] # 0x3be (DeepL translation) + - "ο": [T: "omikron"] # 0x3bf (en: 'omicron', DeepL translation) + - "π": [T: "pí"] # 0x3c0 (DeepL translation) + - "ρ": [T: "ró"] # 0x3c1 (DeepL translation) + - "ς": [T: "szóvégi szigma"] # 0x3c2 (en: 'final sigma', DeepL translation) + - "σ": [T: "szigma"] # 0x3c3 (DeepL translation) + - "τ": [T: "tau"] # 0x3c4 (DeepL translation) + - "υ": [T: "üpszilon"] # 0x3c5 (DeepL translation) + - "φ": [T: "fí"] # 0x3c6 (DeepL translation) + - "χ": [T: "khí"] # 0x3c7 (DeepL translation) + - "ψ": [T: "pszí"] # 0x3c8 (DeepL translation) + - "ω": [T: "omega"] # 0x3c9 (DeepL translation) + - "ϕ": [T: "phi"] # 0x3d5 (DeepL translation) + - "ϖ": [T: "pí"] # 0x3d6 (DeepL translation) + - "ϵ": [T: "holdkóros epszilon"] # 0x3f5 (DeepL translation) + - "϶": [T: "félhold alakú tükrözött görög epszilon"] # 0x3f6 (en: 'reversed epsilon', DeepL translation) - - "–": [t: "en kötőjel"] # 0x2013 (en: 'en dash', DeepL translation) - - "—": [t: "em kötőjel"] # 0x2014 (en: 'em dash', DeepL translation) - - "―": [t: "vízszintes sáv"] # 0x2015 (en: 'horizontal bar', DeepL translation) - - "‖": [t: "dupla függőleges vonal"] # 0x2016 (en: 'double vertical line', DeepL translation) + - "–": [T: "en kötőjel"] # 0x2013 (en: 'en dash', DeepL translation) + - "—": [T: "em kötőjel"] # 0x2014 (en: 'em dash', DeepL translation) + - "―": [T: "vízszintes sáv"] # 0x2015 (en: 'horizontal bar', DeepL translation) + - "‖": [T: "dupla függőleges vonal"] # 0x2016 (en: 'double vertical line', DeepL translation) - "…": # 0x2026 test: if: @@ -278,11 +307,11 @@ # must be ClearSpeak and $ClearSpeak_Ellipses = 'AndSoOn' # speak '…' as 'and so on...' unless expr starts with '…' - "../*[1][.='…']" - then: [t: "pont pont pont pont"] # (en: 'dot dot dot', DeepL translation) + then: [T: "pont pont pont"] # (en: 'dot dot dot', DeepL translation) else_test: # must have $ClearSpeak_Ellipses = 'AndSoOn' if: "count(following-sibling::*) = 0" - then: [t: "és így tovább"] # (en: 'and so on', DeepL translation) - else: [t: "és így tovább egészen"] # (en: 'and so on up to', DeepL translation) + then: [T: "és így tovább"] # (en: 'and so on', DeepL translation) + else: [T: "és így tovább egészen az alábbi értékig:"] # (en: 'and so on up to', DeepL translation) - "⁡": # 0x2061 - test: @@ -296,86 +325,86 @@ preceding-sibling::*[1][IsInDefinition(., 'GeometryShapes')] or (@data-changed='added' and ancestor-or-self::*[contains(@data-intent-property, ':literal:')]) )" - then: [t: "of"] # (DeepL translation) - - "⁢": [t: ""] # 0x2062 - - "⁣": [t: ""] # 0x2063 - - "⁤": [t: "és"] # 0x2064 (en: 'and', DeepL translation) - - "′": [t: "prím"] # 0x2032 (en: 'prime', DeepL translation) - - "″": [t: "dupla prím"] # 0x2033 (en: 'double prime', DeepL translation) - - "‴": [t: "hármas prím"] # 0x2034 (en: 'triple prime', DeepL translation) + then: [T: ""] # (DeepL translation) + - "⁢": [T: ""] # 0x2062 + - "⁣": [T: "láthatatlan elválasztó"] # 0x2063 + - "⁤": [T: "és"] # 0x2064 (en: 'and', DeepL translation) + - "′": [T: "prím"] # 0x2032 (en: 'prime', DeepL translation) + - "″": [T: "dupla prím"] # 0x2033 (en: 'double prime', DeepL translation) + - "‴": [T: "hármas prím"] # 0x2034 (en: 'triple prime', DeepL translation) - "ℂℕℚℝℤ": # here we rely on this running through the table again to speak "cap xxx" - - t: "duplán leütött" # (en: 'double-struck', DeepL translation) - - spell: "translate('.', 'ℂℕℚℝℤ', 'CNQRZ')" + - T: "duplán leütött" # (en: 'double-struck', DeepL translation) + - SPELL: "translate('.', 'ℂℕℚℝℤ', 'CNQRZ')" - - "℃": [t: "celsius fok"] # 0x2103 (en: 'degrees celsius', DeepL translation) - - "℉": [t: "fahrenheit fok"] # 0x2109 (en: 'degrees fahrenheit', DeepL translation) + - "℃": [T: "celsius fok"] # 0x2103 (en: 'degrees celsius', DeepL translation) + - "℉": [T: "fahrenheit fok"] # 0x2109 (en: 'degrees fahrenheit', DeepL translation) - "ℋℛℓ": # 0x210b - - t: "script" # (DeepL translation) - - spell: "translate('.', 'ℋℛℓ', 'HRl')" - - "ℎ": [t: "planck-állandó"] # 0x210e (en: 'planck constant', DeepL translation) + - T: "alsó index" # (DeepL translation) + - SPELL: "translate('.', 'ℋℛℓ', 'HRl')" + - "ℎ": [T: "planck-állandó"] # 0x210e (en: 'planck constant', DeepL translation) - "ℜ": # 0x211c - - t: "fraktur" # (DeepL translation) - - spell: "'R'" + - T: "fraktur" # (DeepL translation) + - SPELL: "'R'" - - "Ω": [t: "ohm"] # 0x2126 (en: 'ohms', DeepL translation) - - "K": [t: "kelvin"] # 0x212a (DeepL translation) - - "Å": [t: "angström"] # 0x212b (en: 'angstroms', DeepL translation) + - "Ω": [T: "ohm"] # 0x2126 (en: 'ohms', DeepL translation) + - "K": [T: "kelvin"] # 0x212a (DeepL translation) + - "Å": [T: "angström"] # 0x212b (en: 'angstroms', DeepL translation) - "ⅆⅇⅈⅉ": # 0x2146-9 - - t: "duplán dőlt betűs" # (en: 'double-struck italic', DeepL translation) - - spell: "translate('.', 'ⅆⅇⅈⅉ', 'deij')" + - T: "duplán dőlt betűs" # (en: 'double-struck italic', DeepL translation) + - SPELL: "translate('.', 'ⅆⅇⅈⅉ', 'deij')" - - "←": [t: "bal nyíl"] # 0x2190 (en: 'left arrow', DeepL translation) - - "↑": [t: "felfelé mutató nyíl"] # 0x2191 (en: 'up arrow', DeepL translation) + - "←": [T: "balra nyíl"] # 0x2190 (en: 'left arrow', DeepL translation) + - "↑": [T: "felfelé nyíl"] # 0x2191 (en: 'up arrow', DeepL translation) - "→": # 0x2192 - test: if: "ancestor::*[2][self::m:limit]" - then: [t: "megközelítések"] # (en: 'approaches', DeepL translation) - else: [t: "jobbra mutató nyíl"] # (en: 'right arrow', DeepL translation) + then: [T: "megközelítések"] # (en: 'approaches', DeepL translation) + else: [T: "jobbra nyíl"] # (en: 'right arrow', DeepL translation) - - "↓": [t: "lefelé mutató nyíl"] # 0x2193 (en: 'down arrow', DeepL translation) - - "⇒": [t: "jobb oldali kettős nyíl"] # 0x21d2 (en: 'right double arrow', DeepL translation) - - "∀": [t: "mindenkinek"] # 0x2200 (en: 'for all', DeepL translation) + - "↓": [T: "lefelé nyíl"] # 0x2193 (en: 'down arrow', DeepL translation) + - "⇒": [T: "dupla jobbranyíl"] # 0x21d2 (en: 'right double arrow', DeepL translation) + - "∀": [T: "minden"] # 0x2200 (en: 'for all', DeepL translation) - "∂": # 0x2202 - test: if: "$Verbosity='Terse'" - then: [t: "részleges"] # (en: 'partial', DeepL translation) - else: [t: "részleges származék"] # (en: 'partial derivative', DeepL translation) - - "∃": [t: "létezik"] # 0x2203 (en: 'there exists', DeepL translation) - - "∄": [t: "nem létezik"] # 0x2204 (en: 'there does not exist', DeepL translation) - - "∅": [t: "üres készlet"] # 0x2205 (en: 'empty set', DeepL translation) + then: [T: "részleges"] # (en: 'partial', DeepL translation) + else: [T: "parciális derivált"] # (en: 'partial derivative', DeepL translation) + - "∃": [T: "létezik"] # 0x2203 (en: 'there exists', DeepL translation) + - "∄": [T: "nem létezik"] # 0x2204 (en: 'there does not exist', DeepL translation) + - "∅": [T: "üres halmaz"] # 0x2205 (en: 'empty set', DeepL translation) - "∆": # 0x2206 - test: if: "$Verbosity!='Terse'" - then: [t: "a"] # (en: 'the', DeepL translation) - - t: "laplace-je" # (en: 'laplacian of', DeepL translation) + then: [T: "a"] # (en: 'the', DeepL translation) + - T: "növekménye" # (en: 'laplacian of', DeepL translation) - "∈": # 0x2208 - test: if: "$SpeechStyle != 'ClearSpeak'" then: - test: if: "$Verbosity!='Terse' and not(ancestor::*[self::m:set])" # "the set x is an element of ..." sounds bad" - then: [t: "van"] # (en: 'is', DeepL translation) - - t: "egy elem" # (en: 'an element of', DeepL translation) + then: [T: ""] # (en: 'is', DeepL translation) + - T: "eleme ennek:" # (en: 'an element of', DeepL 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"] # (DeepL translation) + then: [T: ""] # (DeepL translation) - else_if: $ClearSpeak_SetMemberSymbol = 'Member' - then: [t: "tagja"] # (en: 'member of', DeepL translation) + then: [T: "tagja"] # (en: 'member of', DeepL translation) - else_if: $ClearSpeak_SetMemberSymbol = 'Element' - then: [t: "eleme"] # (en: 'element of', DeepL translation) - - else: [t: "hozzátartozó"] # $ClearSpeak_SetMemberSymbol = 'Belongs' (en: 'belonging to', DeepL translation) + then: [T: "eleme ennek:"] # (en: 'element of', DeepL translation) + - else: [T: "hozzátartozó eleme ennek:"] # $ClearSpeak_SetMemberSymbol = 'Belongs' (en: 'belonging to', DeepL translation) else_test: - if: $ClearSpeak_SetMemberSymbol = 'Auto' or $ClearSpeak_SetMemberSymbol = 'Member' - then: [t: "nem tagja"] # (en: 'is a member of', DeepL translation) + then: [T: "tagja az alábbi halmaznak:"] # (en: 'is a member of', DeepL translation) - else_if: $ClearSpeak_SetMemberSymbol = 'Element' - then: [t: "egy eleme"] # (en: 'is an element of', DeepL translation) + then: [T: "egy eleme ennek:"] # (en: 'is an element of', DeepL translation) - else_if: $ClearSpeak_SetMemberSymbol = 'In' - then: [t: "benne van"] # (en: 'is in', DeepL translation) - - else: [t: "tartozik"] # $ClearSpeak_SetMemberSymbol = 'Belongs' (en: 'belongs to', DeepL translation) + then: [T: "benne van ebben:"] # (en: 'is in', DeepL translation) + - else: [T: "ebbe a halmazba tartozik:"] # $ClearSpeak_SetMemberSymbol = 'Belongs' (en: 'belongs to', DeepL translation) - "∉": # 0x2209 # rule is identical to 0x2208 - test: @@ -383,164 +412,164 @@ then: - test: if: "$Verbosity!='Terse'" - then: [t: "van"] # (en: 'is', DeepL translation) - - t: "nem eleme" # (en: 'not an element of', DeepL translation) + then: [T: ""] # (en: 'is', DeepL translation) + - T: "nem eleme ennek:" # (en: 'not an element of', DeepL 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: "nem a"] # (en: 'not in', DeepL translation) + then: [T: "nincs benne ebben:"] # (en: 'not in', DeepL translation) - else_if: $ClearSpeak_SetMemberSymbol = 'Member' - then: [t: "nem tagja"] # (en: 'not member of', DeepL translation) + then: [T: "nem tagja az alábbi halmaznak:"] # (en: 'not member of', DeepL translation) - else_if: $ClearSpeak_SetMemberSymbol = 'Element' - then: [t: "nem eleme"] # (en: 'not element of', DeepL translation) - - else: [t: "nem tartozik hozzá"] # $ClearSpeak_SetMemberSymbol = 'Belongs' (en: 'not belonging to', DeepL translation) + then: [T: "nem eleme ennek:"] # (en: 'not element of', DeepL translation) + - else: [T: "nem tartozik ebbe:"] # $ClearSpeak_SetMemberSymbol = 'Belongs' (en: 'not belonging to', DeepL translation) else_test: - if: $ClearSpeak_SetMemberSymbol = 'Auto' or $ClearSpeak_SetMemberSymbol = 'Member' - then: [t: "nem tagja a"] # (en: 'is not a member of', DeepL translation) + then: [T: "nem tagja az alábbi halmaznak:"] # (en: 'is not a member of', DeepL translation) - else_if: $ClearSpeak_SetMemberSymbol = 'Element' - then: [t: "nem eleme"] # (en: 'is not an element of', DeepL translation) + then: [T: "nem eleme ennek:"] # (en: 'is not an element of', DeepL translation) - else_if: $ClearSpeak_SetMemberSymbol = 'In' - then: [t: "nincs benne"] # (en: 'is not in', DeepL translation) - - else: [t: "nem tartozik hozzá"] # $ClearSpeak_SetMemberSymbol = 'Belongs' (en: 'does not belong to', DeepL translation) + then: [T: "nincs benne az alábbi halmazban:"] # (en: 'is not in', DeepL translation) + - else: [T: "nem tartozik ebbe:"] # $ClearSpeak_SetMemberSymbol = 'Belongs' (en: 'does not belong to', DeepL translation) - "∊": # 0x220a - test: if: "$SpeechStyle != 'ClearSpeak'" then: - test: if: "$Verbosity!='Terse' and not(ancestor::*[self::m:set])" # "the set x is an element of ..." sounds bad" - then: [t: "van"] # (en: 'is', DeepL translation) - - t: "egy elem" # (en: 'an element of', DeepL translation) + then: [T: "van"] # (en: 'is', DeepL translation) + - T: "egy eleme" # (en: 'an element of', DeepL 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"] # (DeepL translation) + then: [T: ""] # (DeepL translation) - else_if: $ClearSpeak_SetMemberSymbol = 'Member' - then: [t: "tagja"] # (en: 'member of', DeepL translation) + then: [T: "tagja ennek:"] # (en: 'member of', DeepL translation) - else_if: $ClearSpeak_SetMemberSymbol = 'Element' - then: [t: "eleme"] # (en: 'element of', DeepL translation) - - else: [t: "hozzátartozó"] # $ClearSpeak_SetMemberSymbol = 'Belongs' (en: 'belonging to', DeepL translation) + then: [T: "kisbetűs eleme ennek:"] # (en: 'element of', DeepL translation) + - else: [T: "hozzátartozó eleme ennek:"] # $ClearSpeak_SetMemberSymbol = 'Belongs' (en: 'belonging to', DeepL translation) else_test: - if: $ClearSpeak_SetMemberSymbol = 'Auto' or $ClearSpeak_SetMemberSymbol = 'Member' - then: [t: "nem tagja"] # (en: 'is a member of', DeepL translation) + then: [T: "nem tagja az alábbi halmaznak:"] # (en: 'is a member of', DeepL translation) - else_if: $ClearSpeak_SetMemberSymbol = 'Element' - then: [t: "egy eleme"] # (en: 'is an element of', DeepL translation) + then: [T: "egy eleme ennek:"] # (en: 'is an element of', DeepL translation) - else_if: $ClearSpeak_SetMemberSymbol = 'In' - then: [t: "benne van"] # (en: 'is in', DeepL translation) - - else: [t: "tartozik"] # $ClearSpeak_SetMemberSymbol = 'Belongs' (en: 'belongs to', DeepL translation) - - "∏": [t: "termék"] # 0x220f (en: 'product', DeepL translation) - - "∐": [t: "társtermék"] # 0x2210 (en: 'co-product', DeepL translation) - - "∑": [t: "sum"] # 0x2211 (DeepL translation) - - "−": [t: "mínusz"] # 0x2212 (en: 'minus', DeepL translation) - - "∓": [t: "mínusz vagy plusz"] # 0x2213 (en: 'minus or plus', DeepL translation) - - "∗": [t: "times"] # 0x2217 (DeepL translation) - - "∘": [t: "összetéve"] # 0x2218 (en: 'composed with', DeepL translation) + then: [T: "benne van ebben:"] # (en: 'is in', DeepL translation) + - else: [T: "ebbe a halmazba tartozik:"] # $ClearSpeak_SetMemberSymbol = 'Belongs' (en: 'belongs to', DeepL translation) + - "∏": [T: "produktum"] # 0x220f (en: 'product', DeepL translation) + - "∐": [T: "diszjunkt unió"] # 0x2210 (en: 'co-product', DeepL translation) + - "∑": [T: "összeg"] # 0x2211 (DeepL translation) + - "−": [T: "mínusz"] # 0x2212 (en: 'minus', DeepL translation) + - "∓": [T: "mínusz vagy plusz"] # 0x2213 (en: 'minus or plus', DeepL translation) + - "∗": [T: "csillag operátortimes"] # 0x2217 (DeepL translation) + - "∘": [T: "gyűrű operátor"] # 0x2218 (en: 'composed with', DeepL translation) - "√": # 0x221a - test: if: "$Verbosity!='Terse'" - then: [t: "a"] # (en: 'the', DeepL translation) - - t: "négyzetgyöke" # (en: 'square root of', DeepL translation) + then: [T: "a"] # (en: 'the', DeepL translation) + - T: "négyzetgyöke" # (en: 'square root of', DeepL translation) - "∝": # 0x221d - test: if: "$Verbosity!='Terse'" - then: [t: "van"] # (en: 'is', DeepL translation) - - t: "arányos" # (en: 'proportional to', DeepL translation) - - "∞": [t: "végtelen"] # 0x221e (en: 'infinity', DeepL translation) - - "∟": [t: "derékszög"] # 0x221f (en: 'right angle', DeepL translation) - - "∠": [t: "szög"] # 0x2220 (en: 'angle', DeepL translation) - - "∡": [t: "mért szög"] # 0x2221 (en: 'measured angle', DeepL translation) - - "∣": [t: "osztja"] # 0x2223 (en: 'divides', DeepL translation) - - "∤": [t: "nem oszt"] # 0x2224 (en: 'does not divide', DeepL translation) + then: [T: ""] # (en: 'is', DeepL translation) + - T: "arányos" # (en: 'proportional to', DeepL translation) + - "∞": [T: "végtelen"] # 0x221e (en: 'infinity', DeepL translation) + - "∟": [T: "derékszög"] # 0x221f (en: 'right angle', DeepL translation) + - "∠": [T: "szög"] # 0x2220 (en: 'angle', DeepL translation) + - "∡": [T: "mért szög"] # 0x2221 (en: 'measured angle', DeepL translation) + - "∣": [T: "osztója"] # 0x2223 (en: 'divides', DeepL translation) + - "∤": [T: "nem osztója"] # 0x2224 (en: 'does not divide', DeepL translation) - "∥": # 0x2225 - test: if: "ancestor-or-self::*[contains(@data-intent-property, ':literal:')]" - then: [t: "dupla függőleges vonal"] # (en: 'double vertical line', DeepL translation) + then: [T: "dupla függőleges vonal"] # (en: 'double vertical line', DeepL translation) else: - test: if: "$Verbosity!='Terse'" - then: [t: "van"] # (en: 'is', DeepL translation) - - t: "párhuzamos" # (en: 'parallel to', DeepL translation) + then: [T: "van"] # (en: 'is', DeepL translation) + - T: "párhuzamos" # (en: 'parallel to', DeepL translation) - "∦": # 0x2226 - test: if: "$Verbosity!='Terse'" - then: [t: "van"] # (en: 'is', DeepL translation) - - t: "nem párhuzamos" # (en: 'not parallel to', DeepL translation) - - "∧": [t: "és"] # 0x2227 (en: 'and', DeepL translation) - - "∨": [t: "vagy"] # 0x2228 (en: 'or', DeepL translation) - - "∩": [t: "metszéspont"] # 0x2229 (en: 'intersection', DeepL translation) - - "∪": [t: "unió"] # 0x222a (en: 'union', DeepL translation) - - "∫": [t: "integrál"] # 0x222b (en: 'integral', DeepL translation) - - "∬": [t: "kettős integrál"] # 0x222c (en: 'double integral', DeepL translation) - - "∭": [t: "hármas integrál"] # 0x222d (en: 'triple integral', DeepL translation) - - "∮": [t: "kontúr integrál"] # 0x222e (en: 'contour integral', DeepL translation) + then: [T: "van"] # (en: 'is', DeepL translation) + - T: "nem párhuzamos" # (en: 'not parallel to', DeepL translation) + - "∧": [T: "logikai és"] # 0x2227 (en: 'and', DeepL translation) + - "∨": [T: "logikai vagy"] # 0x2228 (en: 'or', DeepL translation) + - "∩": [T: "metszéspont"] # 0x2229 (en: 'intersection', DeepL translation) + - "∪": [T: "unió"] # 0x222a (en: 'union', DeepL translation) + - "∫": [T: "integrál"] # 0x222b (en: 'integral', DeepL translation) + - "∬": [T: "kettős integrál"] # 0x222c (en: 'double integral', DeepL translation) + - "∭": [T: "hármas integrál"] # 0x222d (en: 'triple integral', DeepL translation) + - "∮": [T: "kontúr integrál"] # 0x222e (en: 'contour integral', DeepL translation) - "∶": # 0x2236 - test: if: "$Verbosity!='Terse'" - then: [t: "van"] # (en: 'is', DeepL translation) - - t: "to" # (DeepL translation) - - "∷": [t: "as"] # 0x2237 (DeepL translation) - - "∼": [t: "változik"] # 0x223c (en: 'varies with', DeepL translation) - - "∽": [t: "fordított tilde"] # 0x223d (en: 'reversed tilde', DeepL translation) + then: [T: "van"] # (en: 'is', DeepL translation) + - T: "hogy" # (DeepL translation) + - "∷": [T: "arány"] # 0x2237 (DeepL translation) + - "∼": [T: "változik"] # 0x223c (en: 'varies with', DeepL translation) + - "∽": [T: "fordított tilde"] # 0x223d (en: 'reversed tilde', DeepL translation) - "∾": # 0x223e - test: if: "$Verbosity!='Terse'" - then: [t: "van"] # (en: 'is', DeepL translation) - - t: "legpozitívabb" # (en: 'most positive', DeepL translation) - - "∿": [t: "szinuszhullám"] # 0x223f (en: 'sine wave', DeepL translation) + then: [T: "van"] # (en: 'is', DeepL translation) + - T: "legpozitívabb" # (en: 'most positive', DeepL translation) + - "∿": [T: "szinuszhullám"] # 0x223f (en: 'sine wave', DeepL translation) - "≠": # 0x2260 - test: if: "$Verbosity!='Terse'" - then: [t: "van"] # (en: 'is', DeepL translation) - - t: "nem egyenlő" # (en: 'not equal to', DeepL translation) + then: [T: "van"] # (en: 'is', DeepL translation) + - T: "nem egyenlő" # (en: 'not equal to', DeepL translation) - "≡": # 0x2261 - test: if: "$Verbosity!='Terse'" - then: [t: "van"] # (en: 'is', DeepL translation) - - t: "azonos" # (en: 'identical to', DeepL translation) + then: [T: "van"] # (en: 'is', DeepL translation) + - T: "azonos" # (en: 'identical to', DeepL translation) - "≤": # 0x2264 - test: if: "$Verbosity!='Terse'" - then: [t: "van"] # (en: 'is', DeepL translation) - - t: "kisebb vagy egyenlő" # (en: 'less than or equal to', DeepL translation) + then: [T: ""] # (en: 'is', DeepL translation) + - T: "kisebb vagy egyenlő" # (en: 'less than or equal to', DeepL translation) - "≥": # 0x2265 - test: if: "$Verbosity!='Terse'" - then: [t: "van"] # (en: 'is', DeepL translation) - - t: "nagyobb vagy egyenlő" # (en: 'greater than or equal to', DeepL translation) - - "≦": [t: "kisebb, mint egyenlő"] # 0x2266 (en: 'less than over equal to', DeepL translation) - - "≧": [t: "nagyobb, mint az egyenlő"] # 0x2267 (en: 'greater than over equal to', DeepL translation) - - "≺": [t: "megelőzi"] # 0x227a (en: 'precedes', DeepL translation) - - "≻": [t: "sikerül"] # 0x227b (en: 'succeeds', DeepL translation) + then: [T: ""] # (en: 'is', DeepL translation) + - T: "nagyobb vagy egyenlő" # (en: 'greater than or equal to', DeepL translation) + - "≦": [T: "kisebb, mint egyenlő"] # 0x2266 (en: 'less than over equal to', DeepL translation) + - "≧": [T: "nagyobb, mint az egyenlő"] # 0x2267 (en: 'greater than over equal to', DeepL translation) + - "≺": [T: "megelőzi"] # 0x227a (en: 'precedes', DeepL translation) + - "≻": [T: "követi"] # 0x227b (en: 'succeeds', DeepL translation) - "⊂": # 0x2282 - test: if: "$Verbosity!='Terse'" - then: [t: "is a"] # (DeepL translation) - - t: "részhalmaza" # (en: 'subset of', DeepL translation) + then: [T: "egy"] # (DeepL translation) + - T: "részhalmaza" # (en: 'subset of', DeepL translation) - "⊃": # 0x2283 - test: if: "$Verbosity!='Terse'" - then: [t: "is a"] # (DeepL translation) - - t: "szuperhalmaza" # (en: 'superset of', DeepL translation) + then: [T: "egy"] # (DeepL translation) + - T: "szuperhalmaza ennek:" # (en: 'superset of', DeepL translation) - "⊄": # 0x2284 - test: if: "$Verbosity!='Terse'" - then: [t: "van"] # (en: 'is', DeepL translation) - - t: "nem részhalmaza" # (en: 'not a subset of', DeepL translation) + then: [T: "egy"] # (en: 'is', DeepL translation) + - T: "nem részhalmaza ennek:" # (en: 'not a subset of', DeepL translation) - "⊅": # 0x2285 - test: if: "$Verbosity!='Terse'" - then: [t: "van"] # (en: 'is', DeepL translation) - - t: "not a superset of" # (DeepL translation) + then: [T: "egy"] # (en: 'is', DeepL translation) + - T: "nem szuperhalmaza ennek:" # (DeepL translation) - "⊆": # 0x2286 - test: if: "$Verbosity!='Terse'" - then: [t: "is a"] # (DeepL translation) - - t: "részhalmaza vagy egyenlő" # (en: 'subset of or equal to', DeepL translation) + then: [T: "egy"] # (DeepL translation) + - T: "részhalmaza vagy egyenlő" # (en: 'subset of or equal to', DeepL translation) - "⊇": # 0x2287 - test: if: "$Verbosity!='Terse'" - then: [t: "is a"] # (DeepL translation) - - t: "superset of vagy equal to" # (en: 'superset of or equal to', DeepL translation) + then: [T: "egy"] # (DeepL translation) + - T: "szuperhalmaza vagy egyenlő" # (en: 'superset of or equal to', DeepL translation) diff --git a/tests/Languages/hu/ClearSpeak/functions.rs b/tests/Languages/hu/ClearSpeak/functions.rs index ec54ad232..e9449b213 100644 --- a/tests/Languages/hu/ClearSpeak/functions.rs +++ b/tests/Languages/hu/ClearSpeak/functions.rs @@ -17,7 +17,7 @@ fn trig_names() -> Result<()> { cscϕ+ cotφ "; - test("hu", "ClearSpeak", expr, "sine x plus cosine y plus tangent z plus secant alpha, plus cosecant phi, plus cotangent phi")?; + test("hu", "ClearSpeak", expr, "szinusz x plusz koszinusz y, plusz tangens z plusz szekáns alfa, plusz koszekáns phi, plusz kotangens fí")?; return Ok(()); } @@ -33,12 +33,7 @@ fn hyperbolic_trig_names() -> Result<()> { cschϕ+ cothφ "; - test("hu", "ClearSpeak", expr, "hyperbolic sine of x, plus \ - hyperbolic cosine of y, plus \ - hyperbolic tangent of z, plus \ - hyperbolic secant of alpha, plus \ - hyperbolic cosecant of phi, plus \ - hyperbolic cotangent of phi")?; + test("hu", "ClearSpeak", expr, "hiperbolikus szinusz, x, plusz hiperbolikus koszinusz, y, plusz hiperbolikus tangens, z, plusz, hiperbolikus szekáns, alfa, plusz, hiperbolikus koszekáns, phi, plusz, hiperbolikus kotangens, fí")?; return Ok(()); } @@ -48,7 +43,7 @@ fn hyperbolic_trig_names() -> Result<()> { #[test] fn inverse_trig() -> Result<()> { let expr = "sin-1x"; - test("hu", "ClearSpeak", expr, "inverse sine of x")?; + test("hu", "ClearSpeak", expr, "inverz szinusz x")?; return Ok(()); } @@ -58,7 +53,7 @@ fn inverse_trig() -> Result<()> { fn inverse_trig_trig_inverse() -> Result<()> { let expr = "tan-1x"; test_ClearSpeak("hu", "ClearSpeak_Trig", "TrigInverse",expr, - "tangent inverse of x")?; + "tangens inverz x")?; return Ok(()); } @@ -68,7 +63,7 @@ fn inverse_trig_trig_inverse() -> Result<()> { fn inverse_trig_arc() -> Result<()> { let expr = "cosh-1x"; test_ClearSpeak("hu", "ClearSpeak_Trig", "ArcTrig",expr, - "arc hyperbolic cosine of x")?; + "arkusz hiperbolikus koszinusz, x")?; return Ok(()); } @@ -77,7 +72,49 @@ fn inverse_trig_arc() -> Result<()> { #[test] fn trig_squared() -> Result<()> { let expr = "sin2x"; - test("hu", "ClearSpeak", expr, "sine squared of x")?; + test("hu", "ClearSpeak", expr, "szinusz x a négyzeten")?; + return Ok(()); + +} + +#[test] +fn trig_squared2() -> Result<()> { + let expr = "sin2(x+y)"; + test("hu", "ClearSpeak", expr, "szinusz, nyitott zárójel x plusz y zárt zárójel a négyzeten")?; + return Ok(()); + +} + +#[test] +fn fifth_sinus_expression() -> Result<()> { + let expr = "sin5(x+y) +"; + test("hu", "ClearSpeak", expr, "szinusz, nyitott zárójel x plusz y zárt zárójel a(z) ötödik hatványon")?; + return Ok(()); + +} + +#[test] +fn letter_exponent_combined_sinus_expression() -> Result<()> { + let expr = "sinnx"; + test("hu", "ClearSpeak", expr, "szinusz, x, a(z) n hatványon")?; + return Ok(()); + +} + +#[test] +fn combined_sinus_expression() -> Result<()> { + let expr = "sin3(x+y)"; + test("hu", "ClearSpeak", expr, "szinusz, nyitott zárójel x plusz y zárt zárójel a köbön")?; + return Ok(()); + +} + +// AI generated +#[test] +fn trig_first() -> Result<()> { + let expr = "tan31"; + test("hu", "ClearSpeak", expr, "tangens 1 a köbön")?; return Ok(()); } @@ -86,7 +123,15 @@ fn trig_squared() -> Result<()> { #[test] fn trig_cubed() -> Result<()> { let expr = "tan3x"; - test("hu", "ClearSpeak", expr, "tangent cubed of x")?; + test("hu", "ClearSpeak", expr, "tangens x a köbön")?; + return Ok(()); + +} + +#[test] +fn trig_tangent_test2() -> Result<()> { + let expr = "tan4x"; + test("hu", "ClearSpeak", expr, "tangens; x, a(z) negyedik hatványon")?; return Ok(()); } @@ -95,7 +140,7 @@ fn trig_cubed() -> Result<()> { #[test] fn trig_fourth() -> Result<()> { let expr = "sec4x"; - test("hu", "ClearSpeak", expr, "the fourth power of, secant of x")?; + test("hu", "ClearSpeak", expr, "szekáns; x, a(z) negyedik hatványon")?; return Ok(()); } @@ -105,7 +150,7 @@ fn trig_fourth() -> Result<()> { #[test] fn trig_power_other() -> Result<()> { let expr = "sinh>n-1x"; - test("hu", "ClearSpeak", expr, "the n minus 1 power of, hyperbolic sine of x")?; + test("hu", "ClearSpeak", expr, "hiperbolikus szinusz; x, a(z) n mínusz 1 hatványon")?; return Ok(()); } @@ -114,7 +159,7 @@ fn trig_power_other() -> Result<()> { #[test] fn simple_log() -> Result<()> { let expr = " logx "; - test("hu", "ClearSpeak", expr, "log x")?; + test("hu", "ClearSpeak", expr, "logaritmus x")?; return Ok(()); } @@ -123,7 +168,7 @@ fn simple_log() -> Result<()> { #[test] fn normal_log() -> Result<()> { let expr = "log(x+y)"; - test("hu", "ClearSpeak", expr, "the log of, open paren x plus y, close paren")?; + test("hu", "ClearSpeak", expr, "a logaritmus, nyitott zárójel, x plusz y, zárt zárójel")?; return Ok(()); } @@ -132,7 +177,7 @@ fn normal_log() -> Result<()> { #[test] fn simple_log_with_base() -> Result<()> { let expr = " logbx "; - test("hu", "ClearSpeak", expr, "the log base b, of x")?; +test("hu", "ClearSpeak", expr, "alap logaritmus b; x")?; return Ok(()); } @@ -141,7 +186,7 @@ fn simple_log_with_base() -> Result<()> { #[test] fn normal_log_with_base() -> Result<()> { let expr = "logb(x+y)"; - test("hu", "ClearSpeak", expr, "the log base b, of, open paren x plus y, close paren")?; + test("hu", "ClearSpeak", expr, "alap logaritmus b; nyitott zárójel, x plusz y, zárt zárójel")?; return Ok(()); } @@ -159,7 +204,7 @@ fn simple_ln() -> Result<()> { #[test] fn normal_ln() -> Result<()> { let expr = "ln(x+y)"; - test("hu", "ClearSpeak", expr, "the l n of, open paren x plus y, close paren")?; + test("hu", "ClearSpeak", expr, "a l n, nyitott zárójel, x plusz y, zárt zárójel")?; return Ok(()); } @@ -170,7 +215,7 @@ fn normal_ln() -> Result<()> { fn simple_natural_log() -> Result<()> { let expr = " lnx "; test_ClearSpeak("hu", "ClearSpeak_Log", "LnAsNaturalLog",expr, - "natural log x")?; + "természetes alapú logaritmus, x")?; return Ok(()); } @@ -181,7 +226,7 @@ fn simple_natural_log() -> Result<()> { fn natural_log() -> Result<()> { let expr = "ln(x+y)"; test_ClearSpeak("hu", "ClearSpeak_Log", "LnAsNaturalLog",expr, - "the natural log of, open paren x plus y, close paren")?; + "a természetes alapú logaritmus; nyitott zárójel, x plusz y, zárt zárójel")?; return Ok(()); } @@ -191,7 +236,7 @@ fn natural_log() -> Result<()> { #[test] fn explicit_function_call_with_parens() -> Result<()> { let expr = "t(x)"; - test("hu", "ClearSpeak", expr, "t of x")?; + test("hu", "ClearSpeak", expr, "t x")?; return Ok(()); } @@ -201,7 +246,7 @@ fn explicit_function_call_with_parens() -> Result<()> { #[test] fn explicit_times_with_parens() -> Result<()> { let expr = "t(x)"; - test("hu", "ClearSpeak", expr, "t times x")?; + test("hu", "ClearSpeak", expr, "t szorozva x")?; return Ok(()); } @@ -210,7 +255,7 @@ fn explicit_times_with_parens() -> Result<()> { #[test] fn explicit_function_call() -> Result<()> { let expr = "tx"; - test("hu", "ClearSpeak", expr, "t of x")?; + test("hu", "ClearSpeak", expr, "t x")?; return Ok(()); } @@ -234,7 +279,7 @@ fn test_functions_none_pref() -> Result<()> { f(x+y) "; test_ClearSpeak("hu", "ClearSpeak_Functions", "None",expr, - "the log of, open paren x plus y, close paren; plus, f times, open paren x plus y, close paren")?; + "a logaritmus, nyitott zárójel, x plusz y, zárt zárójel; plusz; f szorozva, nyitott zárójel, x plusz y, zárt zárójel")?; return Ok(()); } @@ -246,7 +291,7 @@ fn test_functions_none_pref_multiple_args() -> Result<()> { B ( 2,6 ) "; test_ClearSpeak("hu", "ClearSpeak_Functions", "None",expr, - "cap b times, open paren 2 comma, 6, close paren")?; + "nagy b szorozva, nyitott zárójel, 2 vessző, 6, zárt zárójel")?; return Ok(()); } @@ -271,7 +316,7 @@ fn times_following_paren() -> Result<()> { 2 ( 3 ) "; - test("hu", "ClearSpeak", expr, "2 times 3")?; + test("hu", "ClearSpeak", expr, "2 szorozva 3")?; return Ok(()); } @@ -283,7 +328,7 @@ fn times_preceding_paren() -> Result<()> { ( 2 ) 3 "; - test("hu", "ClearSpeak", expr, "2 times 3")?; + test("hu", "ClearSpeak", expr, "2 szorozva 3")?; return Ok(()); } @@ -297,7 +342,7 @@ fn times_sqrt() -> Result<()> { = ab "; - test("hu", "ClearSpeak", expr, "the square root of eigh; times the square root of b; is equal to, the square root of eigh b")?; + test("hu", "ClearSpeak", expr, "négyzetgyök a; szorozva négyzetgyök b; egyenlő, négyzetgyök a b")?; return Ok(()); } @@ -317,7 +362,7 @@ fn more_implied_times() -> Result<()> { "; test_ClearSpeak("hu", "ClearSpeak_ImpliedTimes", "MoreImpliedTimes",expr, - "open paren 2 times x, close paren squared")?; + "nyitott zárójel, 2 szorozva x, zárt zárójel a négyzeten")?; return Ok(()); } @@ -326,7 +371,7 @@ fn more_implied_times() -> Result<()> { #[test] fn explicit_times_more_implied_times() -> Result<()> { let expr = "tx"; - test_ClearSpeak("hu", "ClearSpeak_ImpliedTimes", "MoreImpliedTimes",expr, "t times x")?; + test_ClearSpeak("hu", "ClearSpeak_ImpliedTimes", "MoreImpliedTimes",expr, "t szorozva x")?; return Ok(()); } @@ -336,7 +381,7 @@ fn explicit_times_more_implied_times() -> Result<()> { fn explicit_times_none_simple_right() -> Result<()> { let expr = "2[3 ]"; test_ClearSpeak("hu", "ClearSpeak_ImpliedTimes", "None", - expr, "2, open bracket 3 close bracket")?; + expr, "2, nyitott zárójel 3 zárójel")?; return Ok(()); } @@ -346,7 +391,7 @@ fn explicit_times_none_simple_right() -> Result<()> { fn explicit_times_none_simple_left() -> Result<()> { let expr = "(21)x"; test_ClearSpeak("hu", "ClearSpeak_ImpliedTimes", "None", - expr, "open paren 2 minus 1, close paren; x")?; + expr, "nyitott zárójel, 2 mínusz 1, zárt zárójel; x")?; return Ok(()); } @@ -366,7 +411,7 @@ fn explicit_times_none_superscript() -> Result<()> { "; test_ClearSpeak_prefs("hu", vec![("ClearSpeak_ImpliedTimes", "None"), ("ClearSpeak_Functions", "None")], - expr, "f open paren x close paren; is equal to; x squared, open paren x plus 1, close paren")?; + expr, "f, nyitott zárójel x zárt zárójel; egyenlő; x a négyzeten, nyitott zárójel, x plusz 1, zárt zárójel")?; return Ok(()); } @@ -382,7 +427,7 @@ fn explicit_times_none_superscript() -> Result<()> { ) x "; - test("hu", "ClearSpeak", expr, "25 times x")?; + test("hu", "ClearSpeak", expr, "25 szorozva x")?; return Ok(()); } @@ -395,7 +440,7 @@ fn explicit_times_none_superscript() -> Result<()> { xy ) "; - test("hu", "ClearSpeak", expr, "b, open paren x y close paren")?; + test("hu", "ClearSpeak", expr, "b, nyitott zárójel, x y zárt zárójel")?; return Ok(()); } @@ -408,7 +453,7 @@ fn explicit_times_none_superscript() -> Result<()> { 2 ) "; - test("hu", "ClearSpeak", expr, "2 plus negative 2")?; + test("hu", "ClearSpeak", expr, "2 plusz negatív 2")?; return Ok(()); } @@ -423,7 +468,7 @@ fn explicit_times_none_superscript() -> Result<()> { +1 "; - test("hu", "ClearSpeak", expr, "negative 2 x, plus 1")?; + test("hu", "ClearSpeak", expr, "negatív 2 x, plusz 1")?; return Ok(()); } @@ -441,7 +486,7 @@ fn explicit_times_none_superscript() -> Result<()> { "; - test("hu", "ClearSpeak", expr, "open paren 2 x close paren squared")?; + test("hu", "ClearSpeak", expr, "nyitott zárójel, 2 x zárt zárójel a négyzeten")?; return Ok(()); } @@ -456,7 +501,7 @@ fn explicit_times_none_superscript() -> Result<()> { 12 ) "; - test("hu", "ClearSpeak", expr, "2 plus 1 half")?; + test("hu", "ClearSpeak", expr, "2 plusz 1 ketted")?; return Ok(()); } @@ -471,7 +516,7 @@ fn explicit_times_none_superscript() -> Result<()> { ) "; test_ClearSpeak("hu", "ClearSpeak_Paren", "Interval",expr, - "the interval from c to d, not including c or d")?; + "c től d ig terjedő intervallum, nem tartalmazza a c elemet vagy d elemet")?; return Ok(()); } @@ -485,7 +530,7 @@ fn explicit_times_none_superscript() -> Result<()> { ) "; test_ClearSpeak("hu", "ClearSpeak_Paren", "Interval ",expr, - "the interval from c to d, including c but not including d")?; + "c től d ig terjedő intervallum, tartalmazza a c elemet de nem tartalmazza a d elemet")?; return Ok(()); } @@ -500,7 +545,7 @@ fn parens_interval_open_closed() -> Result<()> { ] "; test_ClearSpeak("hu", "ClearSpeak_Paren", "Interval ",expr, - "the interval from c to d, not including c but including d")?; + "c től d ig terjedő intervallum, nem tartalmazza a c elemet de tartalmazza a d elemet")?; return Ok(()); } @@ -515,7 +560,7 @@ fn parens_interval_closed_closed() -> Result<()> { ] "; test_ClearSpeak("hu", "ClearSpeak_Paren", "Interval ",expr, -"the interval from c to d, including c and d")?; +"c től d ig terjedő intervallum, tartalmazza a c elemet és d elemet")?; return Ok(()); } @@ -528,7 +573,7 @@ return Ok(()); ) "; test_ClearSpeak("hu", "ClearSpeak_Paren", "Interval ",expr, - "the interval from negative infinity to d, not including d")?; + "negatív végtelen től d ig terjedő intervallum, nem tartalmazza a d elemet")?; return Ok(()); } @@ -541,7 +586,7 @@ return Ok(()); ] "; test_ClearSpeak("hu", "ClearSpeak_Paren", "Interval ",expr, - "the interval from negative infinity to d, including d")?; + "negatív végtelen től d ig terjedő intervallum, tartalmazza a d elemet")?; return Ok(()); } @@ -556,7 +601,7 @@ fn parens_interval_open_open_infinity() -> Result<()> { ) "; test_ClearSpeak("hu", "ClearSpeak_Paren", "Interval ",expr, - "the interval from c to infinity, not including c")?; + "c től végtelen ig terjedő intervallum, nem tartalmazza a c elemet")?; return Ok(()); } @@ -571,7 +616,7 @@ fn parens_interval_closed_open_infinity() -> Result<()> { ) "; test_ClearSpeak("hu", "ClearSpeak_Paren", "Interval ",expr, -"the interval from c to infinity, including c")?; +"c től végtelen ig terjedő intervallum, tartalmazza a c elemet")?; return Ok(()); } @@ -585,7 +630,7 @@ fn parens_interval_neg_infinity_to_infinity() -> Result<()> { ) "; test_ClearSpeak("hu", "ClearSpeak_Paren", "Interval ",expr, - "the interval from negative infinity to infinity")?; + "negatív végtelen től végtelen ig terjedő intervallum")?; return Ok(()); } @@ -599,7 +644,7 @@ fn parens_interval_neg_infinity_to_pos_infinity() -> Result<()> { ) "; test_ClearSpeak("hu", "ClearSpeak_Paren", "Interval ",expr, - "the interval from negative infinity to positive infinity")?; + "negatív végtelen től pozitív végtelen ig terjedő intervallum")?; return Ok(()); } diff --git a/tests/Languages/hu/ClearSpeak/large_ops.rs b/tests/Languages/hu/ClearSpeak/large_ops.rs index 6e8da7fab..994dafff6 100644 --- a/tests/Languages/hu/ClearSpeak/large_ops.rs +++ b/tests/Languages/hu/ClearSpeak/large_ops.rs @@ -12,7 +12,7 @@ fn sum_both() -> Result<()> { n "; - test("hu", "ClearSpeak", expr, "the sum from n is equal to 1, to 10 of n")?; + test("hu", "ClearSpeak", expr, "összeg ettől: n egyenlő 1, eddig: 10 értéke: n")?; return Ok(()); } @@ -27,7 +27,7 @@ fn sum_under() -> Result<()> { i "; - test("hu", "ClearSpeak", expr, "the sum over cap s of i")?; + test("hu", "ClearSpeak", expr, "összeg alatta nagy s i")?; return Ok(()); } @@ -42,7 +42,7 @@ fn sum_both_msubsup() -> Result<()> { n "; - test("hu", "ClearSpeak", expr, "the sum from n is equal to 1, to 10 of n")?; + test("hu", "ClearSpeak", expr, "összeg ettől: n egyenlő 1, eddig: 10 értéke: n")?; return Ok(()); } @@ -57,7 +57,7 @@ fn sum_sub() -> Result<()> { i "; - test("hu", "ClearSpeak", expr, "the sum over cap s of i")?; + test("hu", "ClearSpeak", expr, "összeg alatta nagy s i")?; return Ok(()); } @@ -69,7 +69,7 @@ fn sum() -> Result<()> { ai "; - test("hu", "ClearSpeak", expr, "the sum of eigh sub i")?; + test("hu", "ClearSpeak", expr, "összeg a alsó index i")?; return Ok(()); } @@ -85,7 +85,7 @@ fn product_both() -> Result<()> { n "; - test("hu", "ClearSpeak", expr, "the product from n is equal to 1, to 10 of n")?; + test("hu", "ClearSpeak", expr, "produktum ettől: n egyenlő 1, eddig: 10 értéke: n")?; return Ok(()); } @@ -100,7 +100,7 @@ fn product_under() -> Result<()> { i "; - test("hu", "ClearSpeak", expr, "the product over cap s of i")?; + test("hu", "ClearSpeak", expr, "produktum alatta nagy s i")?; return Ok(()); } @@ -112,7 +112,7 @@ fn product() -> Result<()> { ai "; - test("hu", "ClearSpeak", expr, "the product of eigh sub i")?; + test("hu", "ClearSpeak", expr, "produktum a alsó index i")?; return Ok(()); } @@ -128,7 +128,7 @@ fn intersection_both() -> Result<()> { Si "; - test("hu", "ClearSpeak", expr, "the intersection from i is equal to 1, to 10 of; cap s sub i")?; + test("hu", "ClearSpeak", expr, "kereszteződés ettől: i egyenlő 1, eddig: 10 értéke:; nagy s alsó index i")?; return Ok(()); } @@ -143,7 +143,7 @@ fn intersection_under() -> Result<()> { Si "; - test("hu", "ClearSpeak", expr, "the intersection over cap c of, cap s sub i")?; + test("hu", "ClearSpeak", expr, "kereszteződés alatta nagy c, nagy s alsó index i")?; return Ok(()); } @@ -155,7 +155,7 @@ fn intersection() -> Result<()> { Si "; - test("hu", "ClearSpeak", expr, "the intersection of cap s sub i")?; + test("hu", "ClearSpeak", expr, "kereszteződés nagy s alsó index i")?; return Ok(()); } @@ -171,7 +171,7 @@ fn union_both() -> Result<()> { Si "; - test("hu", "ClearSpeak", expr, "the union from i is equal to 1, to 10 of; cap s sub i")?; + test("hu", "ClearSpeak", expr, "unió ettől: i egyenlő 1, eddig: 10 értéke:; nagy s alsó index i")?; return Ok(()); } @@ -186,7 +186,7 @@ fn union_under() -> Result<()> { Si "; - test("hu", "ClearSpeak", expr, "the union over cap c of, cap s sub i")?; + test("hu", "ClearSpeak", expr, "unió alatta nagy c, nagy s alsó index i")?; return Ok(()); } @@ -198,7 +198,7 @@ fn union() -> Result<()> { Si "; - test("hu", "ClearSpeak", expr, "the union of cap s sub i")?; + test("hu", "ClearSpeak", expr, "unió nagy s alsó index i")?; return Ok(()); } @@ -217,7 +217,7 @@ fn integral_both() -> Result<()> { dx "; - test("hu", "ClearSpeak", expr, "the integral from 0, to 1 of, f of x; d x")?; + test("hu", "ClearSpeak", expr, "integrál ettől: 0, eddig: 1 értéke:; f x; d x")?; return Ok(()); } @@ -233,7 +233,7 @@ fn integral_under() -> Result<()> { f(x ) dx "; - test("hu", "ClearSpeak", expr, "the integral over the real numbers of; f of x d x")?; + test("hu", "ClearSpeak", expr, "integrál alatta a valós számok halmaza; f x d x")?; return Ok(()); } @@ -246,7 +246,7 @@ fn integral() -> Result<()> { f(x ) dx "; - test("hu", "ClearSpeak", expr, "the integral of f of x d x")?; + test("hu", "ClearSpeak", expr, "integrál f x d x")?; return Ok(()); -} \ No newline at end of file +} diff --git a/tests/Languages/hu/ClearSpeak/menclose.rs b/tests/Languages/hu/ClearSpeak/menclose.rs index 45f20fd07..33c03f699 100644 --- a/tests/Languages/hu/ClearSpeak/menclose.rs +++ b/tests/Languages/hu/ClearSpeak/menclose.rs @@ -7,7 +7,7 @@ fn menclose_actuarial() -> Result<()> { let expr = " 3+2i "; - test("hu", "ClearSpeak", expr, "actuarial symbol, enclosing 3 plus 2 i end enclosure")?; + test("hu", "ClearSpeak", expr, "aktuárius szimbólum, kezdet: 3 plusz 2 i végpont vége")?; return Ok(()); } @@ -18,7 +18,7 @@ fn menclose_box() -> Result<()> { let expr = " 3+2i "; - test("hu", "ClearSpeak", expr, "box, circle, enclosing 3 plus 2 i end enclosure")?; + test("hu", "ClearSpeak", expr, "doboz, kör, kezdet: 3 plusz 2 i végpont vége")?; return Ok(()); } @@ -29,7 +29,7 @@ fn menclose_left() -> Result<()> { let expr = " 32 "; - test("hu", "ClearSpeak", expr, "line on left, enclosing 3 halves end enclosure")?; + test("hu", "ClearSpeak", expr, "vonal balra, kezdet: 3 ketted végpont vége")?; return Ok(()); } @@ -40,7 +40,7 @@ fn menclose_right() -> Result<()> { let expr = " 32 "; - test("hu", "ClearSpeak", expr, "line on right, enclosing 3 halves end enclosure")?; + test("hu", "ClearSpeak", expr, "vonal jobbra, kezdet: 3 ketted végpont vége")?; return Ok(()); } @@ -51,7 +51,7 @@ fn menclose_top_bottom() -> Result<()> { let expr = " 32 "; - test("hu", "ClearSpeak", expr, "line on top, bottom, enclosing 3 halves end enclosure")?; + test("hu", "ClearSpeak", expr, "vonal felső, alsó, kezdet: 3 ketted végpont vége")?; return Ok(()); } @@ -62,7 +62,7 @@ fn menclose_updiagonalstrike() -> Result<()> { let expr = " 32 "; - test("hu", "ClearSpeak", expr, "up diagonal, cross out, enclosing 3 halves end enclosure")?; + test("hu", "ClearSpeak", expr, "átlósan felfelé, kihúzva, kezdet: 3 ketted végpont vége")?; return Ok(()); } @@ -73,7 +73,7 @@ fn menclose_downdiagonalstrike() -> Result<()> { let expr = " 32 "; - test("hu", "ClearSpeak", expr, "down diagonal, cross out, enclosing 3 halves end enclosure")?; + test("hu", "ClearSpeak", expr, "átlósan lefelé, kihúzva, kezdet: 3 ketted végpont vége")?; return Ok(()); } @@ -84,7 +84,7 @@ fn menclose_cross_out() -> Result<()> { let expr = " 32 "; - test("hu", "ClearSpeak", expr, "x, cross out, enclosing 3 halves end enclosure")?; + test("hu", "ClearSpeak", expr, "x, kihúzva, kezdet: 3 ketted végpont vége")?; return Ok(()); } @@ -95,7 +95,7 @@ fn menclose_vertical_horizontal_strike() -> Result<()> { let expr = " 32 "; - test("hu", "ClearSpeak", expr, "vertical, horizontal, cross out, enclosing 3 halves end enclosure")?; + test("hu", "ClearSpeak", expr, "függőleges, vízszintes, kihúzva, kezdet: 3 ketted végpont vége")?; return Ok(()); } @@ -106,7 +106,7 @@ fn menclose_leftarrow() -> Result<()> { let expr = " 32 "; - test("hu", "ClearSpeak", expr, "left arrow, enclosing 3 halves end enclosure")?; + test("hu", "ClearSpeak", expr, "balra nyíl, kezdet: 3 ketted végpont vége")?; return Ok(()); } @@ -117,7 +117,7 @@ fn menclose_right_up_down_arrow() -> Result<()> { let expr = " 32 "; - test("hu", "ClearSpeak", expr, "up arrow, down arrow, right arrow, enclosing 3 halves end enclosure")?; + test("hu", "ClearSpeak", expr, "felfelé nyíl, lefelé nyíl, jobbra nyíl, kezdet: 3 ketted végpont vége")?; return Ok(()); } @@ -128,7 +128,7 @@ fn menclose_northeastarrow() -> Result<()> { let expr = " 32 "; - test("hu", "ClearSpeak", expr, "northeast arrow, enclosing 3 halves end enclosure")?; + test("hu", "ClearSpeak", expr, "északkeleti nyíl, kezdet: 3 ketted végpont vége")?; return Ok(()); } @@ -139,7 +139,7 @@ fn menclose_other_single_arrows() -> Result<()> { let expr = " 32 "; - test("hu", "ClearSpeak", expr, "southeast arrow, southwest arrow, northwest arrow, enclosing 3 halves end enclosure")?; + test("hu", "ClearSpeak", expr, "délkeleti nyíl, délnyugati nyíl, északnyugati nyíl, kezdet: 3 ketted végpont vége")?; return Ok(()); } @@ -150,7 +150,7 @@ fn menclose_northwestsoutheastarrow() -> Result<()> { let expr = " 32 "; - test("hu", "ClearSpeak", expr, "double ended down diagonal arrow, enclosing 3 halves end enclosure")?; + test("hu", "ClearSpeak", expr, "kétvégű lefelé mutató átlós nyíl, kezdet: 3 ketted végpont vége")?; return Ok(()); } @@ -161,7 +161,7 @@ fn menclose_other_double_arrows() -> Result<()> { let expr = " 32 "; - test("hu", "ClearSpeak", expr, "double ended vertical arrow, double ended horizontal arrow, double ended up diagonal arrow, enclosing 3 halves end enclosure")?; + test("hu", "ClearSpeak", expr, "kétvégű függőleges nyíl, kétvégű vízszintes nyíl, dupla végű átlós nyíl, kezdet: 3 ketted végpont vége")?; return Ok(()); } @@ -172,7 +172,7 @@ fn menclose_madrub() -> Result<()> { let expr = " 32 "; - test("hu", "ClearSpeak", expr, "arabic factorial symbol, enclosing 3 halves end enclosure")?; + test("hu", "ClearSpeak", expr, "arab faktoriális szimbólum, kezdet: 3 ketted végpont vége")?; return Ok(()); } @@ -183,7 +183,7 @@ fn menclose_phasorangle() -> Result<()> { let expr = " 32 "; - test("hu", "ClearSpeak", expr, "phasor angle, enclosing 3 halves end enclosure")?; + test("hu", "ClearSpeak", expr, "fázisszög, kezdet: 3 ketted végpont vége")?; return Ok(()); } @@ -194,7 +194,7 @@ fn menclose_circle_phasorangle() -> Result<()> { let expr = " 32 "; - test("hu", "ClearSpeak", expr, "circle, phasor angle, enclosing 3 halves end enclosure")?; + test("hu", "ClearSpeak", expr, "kör, fázisszög, kezdet: 3 ketted végpont vége")?; return Ok(()); } @@ -205,7 +205,7 @@ fn menclose_longdiv() -> Result<()> { let expr = " 32 "; - test("hu", "ClearSpeak", expr, "long division symbol, enclosing 3 halves end enclosure")?; + test("hu", "ClearSpeak", expr, "hosszú osztásjel, kezdet: 3 ketted végpont vége")?; return Ok(()); } @@ -216,7 +216,7 @@ fn menclose_longdiv_default() -> Result<()> { let expr = " 32 "; - test("hu", "ClearSpeak", expr, "long division symbol, enclosing 3 halves end enclosure")?; + test("hu", "ClearSpeak", expr, "hosszú osztásjel, kezdet: 3 ketted végpont vége")?; return Ok(()); } @@ -227,7 +227,7 @@ fn menclose_longdiv_empty_string() -> Result<()> { let expr = " 32 "; - test("hu", "ClearSpeak", expr, "long division symbol, enclosing 3 halves end enclosure")?; + test("hu", "ClearSpeak", expr, "hosszú osztásjel, kezdet: 3 ketted végpont vége")?; return Ok(()); } @@ -238,7 +238,7 @@ fn menclose_longdiv_whitespace_string() -> Result<()> { let expr = " 32 "; - test("hu", "ClearSpeak", expr, "long division symbol, enclosing 3 halves end enclosure")?; + test("hu", "ClearSpeak", expr, "hosszú osztásjel, kezdet: 3 ketted végpont vége")?; return Ok(()); } @@ -249,7 +249,7 @@ fn menclose_radical() -> Result<()> { let expr = " 32 "; - test("hu", "ClearSpeak", expr, "square root, enclosing 3 halves end enclosure")?; + test("hu", "ClearSpeak", expr, "négyzetgyök, kezdet: 3 ketted végpont vége")?; return Ok(()); } @@ -260,7 +260,7 @@ fn simple_speak_menclose_top_bottom() -> Result<()> { let expr = " 32 "; - test("hu", "SimpleSpeak", expr, "line on top, bottom, enclosing 3 halves end enclosure")?; + test("hu", "SimpleSpeak", expr, "vonal felső, alsó, kezdet: 3 ketted végpont vége")?; return Ok(()); } diff --git a/tests/Languages/hu/ClearSpeak/mfrac.rs b/tests/Languages/hu/ClearSpeak/mfrac.rs index 881ffaf48..74599f262 100644 --- a/tests/Languages/hu/ClearSpeak/mfrac.rs +++ b/tests/Languages/hu/ClearSpeak/mfrac.rs @@ -10,7 +10,7 @@ fn common_fraction_half() -> Result<()> { let expr = " 1 2 "; - test("hu", "ClearSpeak", expr, "1 half")?; + test("hu", "ClearSpeak", expr, "1 ketted")?; return Ok(()); } @@ -21,7 +21,7 @@ fn common_fraction_thirds() -> Result<()> { let expr = " 2 3 "; - test("hu", "ClearSpeak", expr, "2 thirds")?; + test("hu", "ClearSpeak", expr, "2 harmad")?; return Ok(()); } @@ -32,8 +32,8 @@ fn common_fraction_tenths() -> Result<()> { let expr = " 17 10 "; - test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Fractions", "Auto")], expr, "17 tenths")?; - test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Fractions", "Ordinal")], expr, "17 tenths")?; + test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Fractions", "Auto")], expr, "17 tized")?; + test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Fractions", "Ordinal")], expr, "17 tized")?; return Ok(()); } @@ -45,8 +45,8 @@ fn not_ClearSpeak_common_fraction_tenths() -> Result<()> { let expr = " 89 10 "; - test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Fractions", "Auto")], expr, "89 over 10")?; - test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Fractions", "Ordinal")], expr, "89 tenths")?; + test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Fractions", "Auto")], expr, "89 per 10")?; + test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Fractions", "Ordinal")], expr, "89 tized")?; return Ok(()); } @@ -65,16 +65,16 @@ fn non_simple_fraction() -> Result<()> { "; - test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Fractions", "Auto")], expr, "the fraction with numerator; x plus y; and denominator x minus y")?; - test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Fractions", "Ordinal")], expr, "the fraction with numerator; x plus y; and denominator x minus y")?; - test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Fractions", "Over")], expr, "x plus y over x minus y")?; - test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Fractions", "FracOver")], expr, "the fraction x plus y over x minus y")?; - test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Fractions", "General")], expr, "the fraction with numerator; x plus y; and denominator x minus y")?; - test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Fractions", "EndFrac")], expr, "the fraction with numerator; x plus y; and denominator x minus y; end fraction")?; - test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Fractions", "GeneralEndFrac")], expr, "the fraction with numerator; x plus y; and denominator x minus y; end fraction")?; - test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Fractions", "OverEndFrac")], expr, "x plus y over x minus y, end fraction")?; - test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Fractions", "Per")], expr, "x plus y per x minus y")?; - test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Verbose"),("ClearSpeak_Fractions", "Auto")], expr, "the fraction with numerator; x plus y; and denominator x minus y; end fraction")?; + test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Fractions", "Auto")], expr, "a tört, melynek számlálója; x plusz y; nevezője pedig x mínusz y")?; + test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Fractions", "Ordinal")], expr, "a tört, melynek számlálója; x plusz y; nevezője pedig x mínusz y")?; + test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Fractions", "Over")], expr, "x plusz y per x mínusz y")?; + test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Fractions", "FracOver")], expr, "a tört x plusz y per x mínusz y")?; + test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Fractions", "General")], expr, "a tört, melynek számlálója; x plusz y; nevezője pedig x mínusz y")?; + test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Fractions", "EndFrac")], expr, "a tört, melynek számlálója; x plusz y; nevezője pedig x mínusz y; tört vége")?; + test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Fractions", "GeneralEndFrac")], expr, "a tört, melynek számlálója; x plusz y; nevezője pedig x mínusz y; tört vége")?; + test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Fractions", "OverEndFrac")], expr, "x plusz y per x mínusz y, tört vége")?; + test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Fractions", "Per")], expr, "x plusz y per x mínusz y")?; + test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Verbose"),("ClearSpeak_Fractions", "Auto")], expr, "a tört, melynek számlálója; x plusz y; nevezője pedig x mínusz y; tört vége")?; return Ok(()); } @@ -92,7 +92,7 @@ fn frac_with_units() -> Result<()> { "; - test("hu", "ClearSpeak", expr, "62 miles per hour")?; + test("hu", "ClearSpeak", expr, "62 mérföld per óra")?; return Ok(()); } @@ -105,7 +105,7 @@ fn mixed_number() -> Result<()> { 3 1 2 "; - test("hu", "ClearSpeak", expr, "3 and 1 half")?; + test("hu", "ClearSpeak", expr, "3 és 1 ketted")?; return Ok(()); } @@ -118,7 +118,7 @@ fn explicit_mixed_number() -> Result<()> { 1 8 "; - test("hu", "ClearSpeak", expr, "3 and 1 eighth")?; + test("hu", "ClearSpeak", expr, "3 és 1 nyolcad")?; return Ok(()); } @@ -130,7 +130,7 @@ fn mixed_number_big() -> Result<()> { 3 7 83 "; - test("hu", "ClearSpeak", expr, "3 and 7 over 83")?; + test("hu", "ClearSpeak", expr, "3 és 7 per 83")?; return Ok(()); } @@ -141,7 +141,7 @@ fn simple_text() -> Result<()> { let expr = " rise run "; - test("hu", "ClearSpeak", expr, "rise over run")?; + test("hu", "ClearSpeak", expr, "rise per run")?; return Ok(()); } @@ -157,7 +157,7 @@ fn number_and_text() -> Result<()> { 3gallons "; - test("hu", "ClearSpeak", expr, "2 miles over 3 gallons")?; + test("hu", "ClearSpeak", expr, "2 miles per 3 gallons")?; return Ok(()); } @@ -184,18 +184,18 @@ fn nested_simple_fractions() -> Result<()> { "; - test_prefs("hu", "ClearSpeak", vec![("ClearSpeak_Fractions", "Auto")], expr, "1 half over 2 thirds")?; - test_prefs("hu", "ClearSpeak", vec![("ClearSpeak_Fractions", "Ordinal")], expr, "1 half over 2 thirds")?; - test_prefs("hu", "ClearSpeak", vec![("ClearSpeak_Fractions", "Over")], expr, "1 over 2 over 2 over 3")?; + test_prefs("hu", "ClearSpeak", vec![("ClearSpeak_Fractions", "Auto")], expr, "1 ketted per 2 harmad")?; + test_prefs("hu", "ClearSpeak", vec![("ClearSpeak_Fractions", "Ordinal")], expr, "1 ketted per 2 harmad")?; + test_prefs("hu", "ClearSpeak", vec![("ClearSpeak_Fractions", "Over")], expr, "1 per 2 per 2 per 3")?; test_prefs("hu", "ClearSpeak", vec![("ClearSpeak_Fractions", "FracOver")], expr, - "the fraction the fraction 1 over 2 over the fraction 2 over 3")?; + "a tört a tört 1 per 2 per a tört 2 per 3")?; test_prefs("hu", "ClearSpeak", vec![("ClearSpeak_Fractions", "General")], expr, - "the fraction with numerator the fraction with numerator 1; and denominator 2; and denominator the fraction with numerator 2; and denominator 3")?; - test_prefs("hu", "ClearSpeak", vec![("ClearSpeak_Fractions", "EndFrac")], expr, "1 half over 2 thirds")?; + "a tört, melynek számlálója tört, melynek számlálója 1; nevezője pedig 2; nevezője pedig a tört, melynek számlálója 2; nevezője pedig 3")?; + test_prefs("hu", "ClearSpeak", vec![("ClearSpeak_Fractions", "EndFrac")], expr, "1 ketted per 2 harmad")?; test_prefs("hu", "ClearSpeak", vec![("ClearSpeak_Fractions", "GeneralEndFrac")], expr, - "the fraction with numerator the fraction with numerator 1; and denominator 2; end fraction; and denominator the fraction with numerator 2; and denominator 3; end fraction; end fraction")?; + "a tört, melynek számlálója tört, melynek számlálója 1; nevezője pedig 2; tört vége; nevezője pedig a tört, melynek számlálója 2; nevezője pedig 3; tört vége; tört vége")?; test_prefs("hu", "ClearSpeak", vec![("ClearSpeak_Fractions", "OverEndFrac")], expr, - "1 over 2, end fraction, over 2 over 3, end fraction; end fraction")?; + "1 per 2, tört vége, per 2 per 3, tört vége; tört vége")?; return Ok(()); } @@ -218,7 +218,7 @@ fn semi_nested_fraction() -> Result<()> { "; - test("hu", "ClearSpeak", expr, "2 thirds x over 6")?; + test("hu", "ClearSpeak", expr, "2 harmad x per 6")?; return Ok(()); } @@ -246,7 +246,7 @@ fn general_nested_fraction() -> Result<()> { "; - test("hu", "ClearSpeak", expr, "the fraction with numerator; 10 over n; and denominator 2 over n")?; + test("hu", "ClearSpeak", expr, "a tört, melynek számlálója; 10 per n; nevezője pedig 2 per n")?; return Ok(()); } @@ -274,7 +274,7 @@ fn complex_nested_fraction() -> Result<()> { "; - test("hu", "ClearSpeak", expr, "the fraction with numerator; the fraction with numerator; n plus 10; and denominator n; and denominator 2 over n")?; + test("hu", "ClearSpeak", expr, "a tört, melynek számlálója; a tört, melynek számlálója; n plusz 10; nevezője pedig n; nevezője pedig 2 per n")?; return Ok(()); } @@ -283,8 +283,8 @@ fn complex_nested_fraction() -> Result<()> { #[test] fn simple_function() -> Result<()> { let expr = "f(x)2"; - test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Fractions", "Auto")], expr, "f of x over 2")?; - test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Verbose"), ("ClearSpeak_Fractions", "Auto")], expr, "f of x over 2, end fraction")?; + test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Fractions", "Auto")], expr, "f x per 2")?; + test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Verbose"), ("ClearSpeak_Fractions", "Auto")], expr, "f x per 2, tört vége")?; return Ok(()); } @@ -296,8 +296,8 @@ fn function_over_function() -> Result<()> { f(x) g(x) "; - test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Fractions", "Auto")], expr, "f of x over g of x")?; - test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Verbose"), ("ClearSpeak_Fractions", "Auto")], expr, "f of x over g of x, end fraction")?; + test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Fractions", "Auto")], expr, "f x per g x")?; + test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Verbose"), ("ClearSpeak_Fractions", "Auto")], expr, "f x per g x, tört vége")?; return Ok(()); } @@ -310,9 +310,9 @@ fn non_simple_function_over_function() -> Result<()> { g(x) "; test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Fractions", "Auto")], expr, - "the fraction with numerator; f of, open paren x plus 1, close paren; and denominator g of x")?; + "a tört, melynek számlálója; f, nyitott zárójel, x plusz 1, zárt zárójel; nevezője pedig g x")?; test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Verbose"), ("ClearSpeak_Fractions", "Auto")], expr, - "the fraction with numerator; f of, open paren x plus 1, close paren; and denominator g of x; end fraction")?; + "a tört, melynek számlálója; f, nyitott zárójel, x plusz 1, zárt zárójel; nevezője pedig g x; tört vége")?; return Ok(()); } @@ -326,7 +326,7 @@ fn binomial() -> Result<()> { 7 3 ) "; - test("hu", "ClearSpeak", expr, "2 times 7 choose 3")?; + test("hu", "ClearSpeak", expr, "2 szorozva 7 a 3")?; return Ok(()); } diff --git a/tests/Languages/hu/ClearSpeak/mroot.rs b/tests/Languages/hu/ClearSpeak/mroot.rs index 25a24c922..86cdb90e5 100644 --- a/tests/Languages/hu/ClearSpeak/mroot.rs +++ b/tests/Languages/hu/ClearSpeak/mroot.rs @@ -7,7 +7,7 @@ fn msqrt_simple() -> Result<()> { let expr = " x "; - test("hu", "ClearSpeak", expr, "the square root of x")?; + test("hu", "ClearSpeak", expr, "négyzetgyök x")?; return Ok(()); } @@ -18,7 +18,7 @@ fn msqrt_simple_end_root() -> Result<()> { let expr = " x "; - test_ClearSpeak("hu", "ClearSpeak_Roots", "RootEnd", expr, "the square root of x, end root")?; + test_ClearSpeak("hu", "ClearSpeak_Roots", "RootEnd", expr, "négyzetgyök x, gyök vége")?; return Ok(()); } @@ -29,7 +29,7 @@ fn msqrt_simple_positive() -> Result<()> { let expr = " x "; - test_ClearSpeak("hu", "ClearSpeak_Roots", "PosNegSqRoot", expr, "the positive square root of x")?; + test_ClearSpeak("hu", "ClearSpeak_Roots", "PosNegSqRoot", expr, "pozitív négyzetgyök x")?; return Ok(()); } @@ -40,7 +40,7 @@ fn msqrt_simple_pos_end_root() -> Result<()> { let expr = " x "; - test_ClearSpeak("hu", "ClearSpeak_Roots", "PosNegSqRootEnd", expr, "the positive square root of x, end root")?; + test_ClearSpeak("hu", "ClearSpeak_Roots", "PosNegSqRootEnd", expr, "pozitív négyzetgyök x, gyök vége")?; return Ok(()); } @@ -53,7 +53,7 @@ fn msqrt_simple_pos_end_with_neg_root() -> Result<()> { - x 3 "; test_ClearSpeak("hu", "ClearSpeak_Roots", "PosNegSqRootEnd", expr, - "the negative square root of x, end root; minus, the positive cube root of x, end root")?; + "negatív négyzetgyök x, gyök vége; mínusz, a pozitív köbgyök x, gyök vége")?; return Ok(()); } @@ -67,7 +67,7 @@ fn mroot_simple_pos_end_with_neg_root() -> Result<()> { "; test_ClearSpeak("hu", "ClearSpeak_Roots", "PosNegSqRoot", expr, - "the negative cube root of x; minus the positive square root of x")?; + "a negatív köbgyök x; mínusz pozitív négyzetgyök x")?; return Ok(()); } @@ -78,7 +78,7 @@ fn neg_without_root() -> Result<()> { let expr = " - x - y "; - test("hu", "ClearSpeak", expr, "negative x minus y")?; + test("hu", "ClearSpeak", expr, "negatív x mínusz y")?; return Ok(()); } @@ -91,7 +91,7 @@ fn msqrt() -> Result<()> { x + y "; - test("hu", "ClearSpeak", expr, "the square root of x plus y")?; + test("hu", "ClearSpeak", expr, "négyzetgyök x plusz y")?; return Ok(()); } @@ -102,7 +102,7 @@ fn mroot_as_square_root() -> Result<()> { let expr = " x 2 "; - test("hu", "ClearSpeak", expr, "the square root of x")?; + test("hu", "ClearSpeak", expr, "négyzetgyök x")?; return Ok(()); } @@ -113,7 +113,7 @@ fn cube_root() -> Result<()> { let expr = " x 3 "; - test("hu", "ClearSpeak", expr, "the cube root of x")?; + test("hu", "ClearSpeak", expr, "a köbgyök x")?; return Ok(()); } @@ -124,7 +124,7 @@ fn ordinal_root() -> Result<()> { let expr = " x 9 "; - test("hu", "ClearSpeak", expr, "the ninth root of x")?; + test("hu", "ClearSpeak", expr, "a kilencedik gyök x")?; return Ok(()); } @@ -135,7 +135,7 @@ fn simple_mi_root() -> Result<()> { let expr = " x n "; - test("hu", "ClearSpeak", expr, "the n-th root of x")?; + test("hu", "ClearSpeak", expr, "a n-edik gyök x")?; return Ok(()); } @@ -146,7 +146,7 @@ fn mroot_simple_pos_end_root() -> Result<()> { let expr = " x t "; - test_ClearSpeak("hu", "ClearSpeak_Roots", "PosNegSqRootEnd", expr, "the positive t-th root of x, end root")?; + test_ClearSpeak("hu", "ClearSpeak_Roots", "PosNegSqRootEnd", expr, "a pozitív t-edik gyök x, gyök vége")?; return Ok(()); } @@ -158,7 +158,7 @@ fn mroot_simple_end_root() -> Result<()> { x + y 21 "; - test_ClearSpeak("hu", "ClearSpeak_Roots", "RootEnd", expr, "the twenty first root of x plus y, end root")?; + test_ClearSpeak("hu", "ClearSpeak_Roots", "RootEnd", expr, "a huszonegyedik gyök x plusz y, gyök vége")?; return Ok(()); } @@ -172,7 +172,7 @@ fn simple_fraction_power() -> Result<()> { 13 "; - test("hu", "ClearSpeak", expr, "the 1 third root of x")?; + test("hu", "ClearSpeak", expr, "a 1 harmad gyök x")?; return Ok(()); } diff --git a/tests/Languages/hu/ClearSpeak/msup.rs b/tests/Languages/hu/ClearSpeak/msup.rs index fa917928f..8edcc2f7e 100644 --- a/tests/Languages/hu/ClearSpeak/msup.rs +++ b/tests/Languages/hu/ClearSpeak/msup.rs @@ -10,10 +10,10 @@ fn squared() -> Result<()> { let expr = " x 2 "; - test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "Auto")], expr, "x squared")?; - test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "Ordinal")], expr, "x to the second")?; - test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "OrdinalPower")], expr, "x to the second power")?; - test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "AfterPower")], expr, "x raised to the power 2")?; + test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "Auto")], expr, "x a négyzeten")?; + test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "Ordinal")], expr, "x a(z) második hatványon")?; + test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "OrdinalPower")], expr, "x a(z) második hatványon")?; + test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "AfterPower")], expr, "x a következő hatványra emelve: 2")?; return Ok(()); @@ -25,10 +25,10 @@ fn cubed() -> Result<()> { let expr = " x 3 "; - test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "Auto")], expr, "x cubed")?; - test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "Ordinal")], expr, "x to the third")?; - test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "OrdinalPower")], expr, "x to the third power")?; - test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "AfterPower")], expr, "x raised to the power 3")?; + test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "Auto")], expr, "x a köbön")?; + test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "Ordinal")], expr, "x a(z) harmadik hatványon")?; + test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "OrdinalPower")], expr, "x a(z) harmadik hatványon")?; + test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "AfterPower")], expr, "x a következő hatványra emelve: 3")?; return Ok(()); } @@ -39,10 +39,10 @@ fn ordinal_power() -> Result<()> { let expr = " 3 5 "; - test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "Auto")], expr, "3 to the fifth power")?; - test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "Ordinal")], expr, "3 to the fifth")?; - test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "OrdinalPower")], expr, "3 to the fifth power")?; - test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "AfterPower")], expr, "3 raised to the power 5")?; + test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "Auto")], expr, "3 a(z) ötödik hatványon")?; + test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "Ordinal")], expr, "3 a(z) ötödik hatványon")?; + test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "OrdinalPower")], expr, "3 a(z) ötödik hatványon")?; + test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "AfterPower")], expr, "3 a következő hatványra emelve: 5")?; return Ok(()); } @@ -54,10 +54,10 @@ fn zero_power() -> Result<()> { let expr = " 3 0 "; - test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "Auto")], expr, "3 to the 0 power")?; - test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "Ordinal")], expr, "3 to the 0")?; - test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "OrdinalPower")], expr, "3 to the 0 power")?; - test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "AfterPower")], expr, "3 raised to the power 0")?; + test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "Auto")], expr, "3 a(z) nulladik hatványon")?; + test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "Ordinal")], expr, "3 a(z) nulladik hatványon")?; + test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "OrdinalPower")], expr, "3 a(z) nulladik hatványon")?; + test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "AfterPower")], expr, "3 a következő hatványra emelve: 0")?; return Ok(()); } @@ -68,10 +68,10 @@ fn simple_mi_power() -> Result<()> { let expr = " 4 x "; - test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "Auto")], expr, "4 to the x-th power")?; - test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "Ordinal")], expr, "4 to the x-th")?; - test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "OrdinalPower")], expr, "4 to the x-th power")?; - test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "AfterPower")], expr, "4 raised to the power x")?; + test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "Auto")], expr, "4 a(z) x-edik hatványon")?; + test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "Ordinal")], expr, "4 a(z) x-edik hatványon")?; + test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "OrdinalPower")], expr, "4 a(z) x-edik hatványon")?; + test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "AfterPower")], expr, "4 a következő hatványra emelve: x")?; return Ok(()); } @@ -82,10 +82,10 @@ fn decimal_power() -> Result<()> { let expr = " 3 5.0 "; - test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "Auto")], expr, "3 raised to the 50 power")?; - test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "Ordinal")], expr, "3 raised to the 50 power")?; - test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "OrdinalPower")], expr, "3 raised to the 50 power")?; - test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "AfterPower")], expr, "3 raised to the power 50")?; + test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "Auto")], expr, "3 a(z) 50 hatványon")?; + test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "Ordinal")], expr, "3 a(z) 50 hatványon")?; + test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "OrdinalPower")], expr, "3 a(z) 50 hatványon")?; + test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "AfterPower")], expr, "3 a következő hatványra emelve: 50")?; return Ok(()); } @@ -96,10 +96,10 @@ fn non_simple_power() -> Result<()> { let expr = " 3 y+2 "; - test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "Auto")], expr, "3 raised to the y plus 2 power")?; - test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "Ordinal")], expr, "3 raised to the y plus 2 power")?; - test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "OrdinalPower")], expr, "3 raised to the y plus 2 power")?; - test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "AfterPower")], expr, "3 raised to the power y plus 2")?; + test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "Auto")], expr, "3 a(z) y plusz 2 hatványon")?; + test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "Ordinal")], expr, "3 a(z) y plusz 2 hatványon")?; + test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "OrdinalPower")], expr, "3 a(z) y plusz 2 hatványon")?; + test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "AfterPower")], expr, "3 a következő hatványra emelve: y plusz 2")?; return Ok(()); } @@ -110,10 +110,10 @@ fn negative_power() -> Result<()> { let expr = " 3 - 2 "; - test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "Auto")], expr, "3 to the negative 2 power")?; - test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "Ordinal")], expr, "3 to the negative 2")?; - test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "OrdinalPower")], expr, "3 to the negative 2 power")?; - test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "AfterPower")], expr, "3 raised to the power negative 2")?; + test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "Auto")], expr, "3 a negatív 2 hatványon")?; + test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "Ordinal")], expr, "3 a negatív 2 hatványon")?; + test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "OrdinalPower")], expr, "3 a negatív 2 hatványon")?; + test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "AfterPower")], expr, "3 a következő hatványra emelve: negatív 2")?; return Ok(()); } @@ -127,7 +127,7 @@ fn simple_fraction_power() -> Result<()> { 13 "; - test("hu", "ClearSpeak", expr, "x raised to the 1 third power")?; + test("hu", "ClearSpeak", expr, "x a(z) 1 harmad hatványon")?; return Ok(()); } @@ -149,10 +149,10 @@ fn nested_squared_power_with_coef() -> Result<()> { "; - test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "Auto")], expr, "3 raised to the 2 x squared power")?; - test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "Ordinal")], expr, "3 raised to the exponent, 2 x to the second, end exponent")?; - test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "OrdinalPower")], expr, "3 raised to the exponent, 2 x to the second power, end exponent")?; - test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "AfterPower")], expr, "3 raised to the exponent, 2 x raised to the power 2; end exponent")?; + test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "Auto")], expr, "3 emelve a(z) 2 x a négyzeten hatványra")?; + test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "Ordinal")], expr, "3 emelve a következő kitevőre:, 2 x a(z) második hatványon, kitevő vége")?; + test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "OrdinalPower")], expr, "3 emelve a következő kitevőre:, 2 x a(z) második hatványon, kitevő vége")?; + test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "AfterPower")], expr, "3 a következő kitevőre emelve:, 2, x a következő hatványra emelve: 2; kitevő vége")?; return Ok(()); @@ -176,7 +176,7 @@ fn nested_squared_power_with_neg_coef() -> Result<()> { "; - test("hu", "ClearSpeak", expr, "3 raised to the negative 2 x squared power")?; + test("hu", "ClearSpeak", expr, "3 emelve a negatív 2 x a négyzeten hatványra")?; return Ok(()); } @@ -194,7 +194,7 @@ fn nested_cubed_power() -> Result<()> { "; - test("hu", "ClearSpeak", expr, "y raised to the 4 fifths cubed power")?; + test("hu", "ClearSpeak", expr, "y emelve a(z) 4 ötöd a köbön hatványra")?; return Ok(()); } @@ -214,7 +214,7 @@ fn nested_cubed_power_with_neg_base() -> Result<()> { "; - test("hu", "ClearSpeak", expr, "y raised to the negative 4 fifths cubed power")?; + test("hu", "ClearSpeak", expr, "y a(z) negatív 4 ötöd a köbön hatványon")?; return Ok(()); } @@ -239,7 +239,7 @@ fn nested_number_times_squared() -> Result<()> { "; - test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "Auto")], expr, "e raised to the 1 half x squared power")?; + test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "Auto")], expr, "e emelve a(z) 1 ketted x a négyzeten hatványra")?; return Ok(()); } @@ -264,10 +264,10 @@ fn nested_negative_number_times_squared() -> Result<()> { "; - test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "Auto")], expr, "e raised to the negative 1 half x squared power")?; - test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "Ordinal")], expr, "e raised to the exponent, negative 1 half x to the second, end exponent")?; - test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "OrdinalPower")], expr, "e raised to the exponent, negative 1 half x to the second power, end exponent")?; - test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "AfterPower")], expr, "e raised to the exponent, negative 1 half x raised to the power 2; end exponent")?; + test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "Auto")], expr, "e emelve a negatív 1 ketted x a négyzeten hatványra")?; + test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "Ordinal")], expr, "e emelve a következő kitevőre:, negatív 1 ketted x a(z) második hatványon, kitevő vége")?; + test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "OrdinalPower")], expr, "e emelve a következő kitevőre:, negatív 1 ketted x a(z) második hatványon, kitevő vége")?; + test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "AfterPower")], expr, "e a következő kitevőre emelve:, negatív 1 ketted, x a következő hatványra emelve: 2; kitevő vége")?; return Ok(()); } @@ -289,10 +289,10 @@ fn nested_expr_to_tenth() -> Result<()> { "; - test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "Auto")], expr, "3 raised to the exponent, 3 to the tenth power, end exponent")?; - test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "Ordinal")], expr, "3 raised to the exponent, 3 to the tenth, end exponent")?; - test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "OrdinalPower")], expr, "3 raised to the exponent, 3 to the tenth power, end exponent")?; - test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "AfterPower")], expr, "3 raised to the exponent, 3 raised to the power 10; end exponent")?; + test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "Auto")], expr, "3 emelve a következő kitevőre:, 3 a(z) tizedik hatványon, kitevő vége")?; + test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "Ordinal")], expr, "3 emelve a következő kitevőre:, 3 a(z) tizedik hatványon, kitevő vége")?; + test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "OrdinalPower")], expr, "3 emelve a következő kitevőre:, 3 a(z) tizedik hatványon, kitevő vége")?; + test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "AfterPower")], expr, "3 a következő kitevőre emelve:, 3 a következő hatványra emelve: 10; kitevő vége")?; return Ok(()); @@ -318,10 +318,10 @@ fn nested_non_simple_squared_exp() -> Result<()> { "; - test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "Auto")], expr, "3 raised to the exponent, open paren x plus 1, close paren squared, end exponent")?; - test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "Ordinal")], expr, "3 raised to the exponent, open paren x plus 1, close paren to the second, end exponent")?; - test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "OrdinalPower")], expr, "3 raised to the exponent, open paren x plus 1, close paren to the second power, end exponent")?; - test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "AfterPower")], expr, "3 raised to the exponent, open paren x plus 1, close paren raised to the power 2; end exponent")?; + test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "Auto")], expr, "3 emelve a következő kitevőre:, nyitott zárójel, x plusz 1, zárt zárójel a négyzeten, kitevő vége")?; + test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "Ordinal")], expr, "3 emelve a következő kitevőre:, nyitott zárójel, x plusz 1, zárt zárójel a(z) második hatványon, kitevő vége")?; + test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "OrdinalPower")], expr, "3 emelve a következő kitevőre:, nyitott zárójel, x plusz 1, zárt zárójel a(z) második hatványon, kitevő vége")?; + test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "AfterPower")], expr, "3 a következő kitevőre emelve:, nyitott zárójel, x plusz 1, zárt zárójel a következő hatványra emelve: 2; kitevő vége")?; return Ok(()); } @@ -338,7 +338,7 @@ fn nested_default_power() -> Result<()> { "; - test("hu", "ClearSpeak", expr, "t raised to the exponent, 4 fifths to the n-th power, end exponent")?; + test("hu", "ClearSpeak", expr, "t emelve a következő kitevőre:, 4 ötöd a(z) n-edik hatványon, kitevő vége")?; return Ok(()); } @@ -373,13 +373,13 @@ fn nested_complex_power() -> Result<()> { "; test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "Auto")], expr, - "e raised to the exponent, negative 1 half times; open paren; the fraction with numerator; x minus mu; and denominator sigma; close paren squared, end exponent")?; + "e emelve a következő kitevőre:, negatív 1 ketted szorozva; nyitott zárójel; a tört, melynek számlálója; x mínusz mű; nevezője pedig szigma; zárt zárójel a négyzeten, kitevő vége")?; test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "Ordinal")], expr, - "e raised to the exponent, negative 1 half times; open paren; the fraction with numerator; x minus mu; and denominator sigma; close paren to the second, end exponent")?; + "e emelve a következő kitevőre:, negatív 1 ketted szorozva; nyitott zárójel; a tört, melynek számlálója; x mínusz mű; nevezője pedig szigma; zárt zárójel a(z) második hatványon, kitevő vége")?; test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "OrdinalPower")], expr, - "e raised to the exponent, negative 1 half times; open paren; the fraction with numerator; x minus mu; and denominator sigma; close paren to the second power, end exponent")?; + "e emelve a következő kitevőre:, negatív 1 ketted szorozva; nyitott zárójel; a tört, melynek számlálója; x mínusz mű; nevezője pedig szigma; zárt zárójel a(z) második hatványon, kitevő vége")?; test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "AfterPower")], expr, - "e raised to the exponent, negative 1 half times; open paren; the fraction with numerator; x minus mu; and denominator sigma; close paren raised to the power 2; end exponent")?; + "e a következő kitevőre emelve:, negatív 1 ketted szorozva; nyitott zárójel; a tört, melynek számlálója; x mínusz mű; nevezője pedig szigma; zárt zárójel a következő hatványra emelve: 2; kitevő vége")?; return Ok(()); } @@ -396,7 +396,7 @@ fn default_power() -> Result<()> { "; - test("hu", "ClearSpeak", expr, "t raised to the fraction with numerator; b plus 1; and denominator 3; power")?; + test("hu", "ClearSpeak", expr, "t a(z) a tört, melynek számlálója; b plusz 1; nevezője pedig 3; hatványon")?; return Ok(()); } diff --git a/tests/Languages/hu/ClearSpeak/multiline.rs b/tests/Languages/hu/ClearSpeak/multiline.rs index af50d0c5c..22ca5b272 100644 --- a/tests/Languages/hu/ClearSpeak/multiline.rs +++ b/tests/Languages/hu/ClearSpeak/multiline.rs @@ -16,18 +16,15 @@ fn case_1() -> Result<()> { { - -1ifx<0 - 0ifx=0 - 1ifx>0 + -1hax<0 + 0hax=0 + 1hax>0 "; test_ClearSpeak("hu", "ClearSpeak_MultiLineLabel", "Auto", expr, - "f of x is equal to; 3 cases; \ - case 1; negative 1 if x is less than 0; \ - case 2; 0 if x is equal to 0; \ - case 3; 1 if x is greater than 0" + "f x egyenlő; 3 eset; 1 . eset; negatív 1 ha x kisebb, mint 0; 2 . eset; 0 ha x egyenlő 0; 3 . eset; 1 ha x nagyobb, mint 0" )?; return Ok(()); } @@ -44,9 +41,7 @@ fn equation_auto() -> Result<()> { "; test_ClearSpeak("hu", "ClearSpeak_MultiLineLabel", "Auto", expr, - "2 lines; \ - line 1; x plus y, is equal to 7; \ - line 2; 2 x plus 3 y; is equal to 17")?; + "2 sor; 1 . sor; x plusz y, egyenlő 7; 2 . sor; 2 x plusz 3 y; egyenlő 17")?; return Ok(()); } @@ -62,9 +57,7 @@ fn equation_plus_at_start() -> Result<()> { "; - test_ClearSpeak("hu", "ClearSpeak_MultiLineLabel", "Auto", expr, "2 lines; \ - line 1; x plus y is equal to 7; \ - line 2; 2 x, plus 3 y, is equal to 17")?; + test_ClearSpeak("hu", "ClearSpeak_MultiLineLabel", "Auto", expr, "2 sor; 1 . sor; x plusz y egyenlő 7; 2 . sor; 2 x, plusz 3 y, egyenlő 17")?; return Ok(()); } @@ -80,7 +73,7 @@ fn equation_case() -> Result<()> { "; test_ClearSpeak("hu", "ClearSpeak_MultiLineLabel", "Case", expr, - "2 cases; case 1; x plus y, is equal to 7; case 2; 2 x plus 3 y; is equal to 17")?; + "2 eset; 1 . eset; x plusz y, egyenlő 7; 2 . eset; 2 x plusz 3 y; egyenlő 17")?; return Ok(()); } @@ -95,9 +88,7 @@ fn equation_constraint() -> Result<()> { "; - test_ClearSpeak("hu", "ClearSpeak_MultiLineLabel", "Constraint", expr, "2 constraints; \ - constraint 1; x plus y, is equal to 7; \ - constraint 2; 2 x plus 3 y; is equal to 17")?; + test_ClearSpeak("hu", "ClearSpeak_MultiLineLabel", "Constraint", expr, "2 feltétel; 1 . feltétel; x plusz y, egyenlő 7; 2 . feltétel; 2 x plusz 3 y; egyenlő 17")?; return Ok(()); } @@ -112,9 +103,7 @@ fn equation_equation() -> Result<()> { "; - test_ClearSpeak("hu", "ClearSpeak_MultiLineLabel", "Equation", expr, "2 equations; \ - equation 1; x plus y, is equal to 7; \ - equation 2; 2 x plus 3 y; is equal to 17")?; + test_ClearSpeak("hu", "ClearSpeak_MultiLineLabel", "Equation", expr, "2 egyenlet; 1 . egyenlet; x plusz y, egyenlő 7; 2 . egyenlet; 2 x plusz 3 y; egyenlő 17")?; return Ok(()); } @@ -129,9 +118,7 @@ fn equation_line() -> Result<()> { "; - test_ClearSpeak("hu", "ClearSpeak_MultiLineLabel", "Line", expr, "2 lines; \ - line 1; x plus y, is equal to 7; \ - line 2; 2 x plus 3 y; is equal to 17")?; + test_ClearSpeak("hu", "ClearSpeak_MultiLineLabel", "Line", expr, "2 sor; 1 . sor; x plusz y, egyenlő 7; 2 . sor; 2 x plusz 3 y; egyenlő 17")?; return Ok(()); } @@ -147,9 +134,7 @@ fn equation_none() -> Result<()> { "; test_ClearSpeak("hu", "ClearSpeak_MultiLineLabel", "None", expr, - "2 lines; \ - x plus y, is equal to 7; \ - 2 x plus 3 y; is equal to 17")?; + "2 sor; x plusz y, egyenlő 7; 2 x plusz 3 y; egyenlő 17")?; return Ok(()); } @@ -164,9 +149,7 @@ fn equation_row() -> Result<()> { "; - test_ClearSpeak("hu", "ClearSpeak_MultiLineLabel", "Row", expr, "2 rows; \ - row 1; x plus y, is equal to 7; \ - row 2; 2 x plus 3 y; is equal to 17")?; + test_ClearSpeak("hu", "ClearSpeak_MultiLineLabel", "Row", expr, "2 sor; 1 . sor; x plusz y, egyenlő 7; 2 . sor; 2 x plusz 3 y; egyenlő 17")?; return Ok(()); } @@ -181,9 +164,7 @@ fn equation_step() -> Result<()> { "; - test_ClearSpeak("hu", "ClearSpeak_MultiLineLabel", "Step", expr, "2 steps; \ - step 1; x plus y, is equal to 7; \ - step 2; 2 x plus 3 y; is equal to 17")?; + test_ClearSpeak("hu", "ClearSpeak_MultiLineLabel", "Step", expr, "2 lépés; 1 . lépés; x plusz y, egyenlő 7; 2 . lépés; 2 x plusz 3 y; egyenlő 17")?; return Ok(()); } @@ -198,6 +179,6 @@ fn continued_row() -> Result<()> { "; test("hu", "SimpleSpeak", expr, - "2 equations; equation 1; x is equal to y plus 1; equation 2; y is equal to 1")?; + "2 egyenlet; egyenlet 1; x egyenlő y plusz 1; egyenlet 2; y egyenlő 1")?; return Ok(()); } diff --git a/tests/Languages/hu/ClearSpeak/sets.rs b/tests/Languages/hu/ClearSpeak/sets.rs index 4e8243051..c2b9d589a 100644 --- a/tests/Languages/hu/ClearSpeak/sets.rs +++ b/tests/Languages/hu/ClearSpeak/sets.rs @@ -7,7 +7,7 @@ fn complex() -> Result<()> { let expr = " "; - test("hu", "ClearSpeak", expr, "the complex numbers")?; + test("hu", "ClearSpeak", expr, "a komplex számok halmaza")?; return Ok(()); } @@ -18,7 +18,7 @@ fn natural() -> Result<()> { let expr = " "; - test("hu", "ClearSpeak", expr, "the natural numbers")?; + test("hu", "ClearSpeak", expr, "a természetes számok halmaza")?; return Ok(()); } @@ -29,7 +29,7 @@ fn rationals() -> Result<()> { let expr = " "; - test("hu", "ClearSpeak", expr, "the rational numbers")?; + test("hu", "ClearSpeak", expr, "a racionális számok halmaza")?; return Ok(()); } @@ -40,7 +40,7 @@ fn reals() -> Result<()> { let expr = " "; - test("hu", "ClearSpeak", expr, "the real numbers")?; + test("hu", "ClearSpeak", expr, "a valós számok halmaza")?; return Ok(()); } @@ -51,7 +51,7 @@ fn integers() -> Result<()> { let expr = " "; - test("hu", "ClearSpeak", expr, "the integers")?; + test("hu", "ClearSpeak", expr, "az egész számok halmaza")?; return Ok(()); } @@ -67,7 +67,7 @@ fn msup_complex() -> Result<()> { 2 "; - test("hu", "ClearSpeak", expr, "C 2")?; + test("hu", "ClearSpeak", expr, "komplex számhalmaz 2")?; return Ok(()); } @@ -81,7 +81,7 @@ fn msup_natural() -> Result<()> { 2 "; - test("hu", "ClearSpeak", expr, "N 2")?; + test("hu", "ClearSpeak", expr, "természetes számhalmaz 2")?; return Ok(()); } @@ -95,7 +95,7 @@ fn msup_rationals() -> Result<()> { 2 "; - test("hu", "ClearSpeak", expr, "Q 2")?; + test("hu", "ClearSpeak", expr, "racionális számhalmaz 2")?; return Ok(()); } @@ -109,7 +109,7 @@ fn msup_reals() -> Result<()> { 3 "; - test("hu", "ClearSpeak", expr, "R 3")?; + test("hu", "ClearSpeak", expr, "valós számhalmaz 3")?; return Ok(()); } @@ -123,7 +123,7 @@ fn msup_integers() -> Result<()> { 4 "; - test("hu", "ClearSpeak", expr, "Z 4")?; + test("hu", "ClearSpeak", expr, "egész számhalmaz 4")?; return Ok(()); } @@ -137,7 +137,7 @@ fn msup_positive_integers() -> Result<()> { + "; - test("hu", "ClearSpeak", expr, "the positive integers")?; + test("hu", "ClearSpeak", expr, "pozitív egész számok")?; return Ok(()); } @@ -151,7 +151,7 @@ fn msup_negative_integers() -> Result<()> { - "; - test("hu", "ClearSpeak", expr, "the negative integers")?; + test("hu", "ClearSpeak", expr, "negatív egész számok")?; return Ok(()); } @@ -165,7 +165,7 @@ fn msup_positive_rationals() -> Result<()> { + "; - test("hu", "ClearSpeak", expr, "the positive rational numbers")?; + test("hu", "ClearSpeak", expr, "pozitív racionális számok")?; return Ok(()); } @@ -179,7 +179,7 @@ fn msup_negative_rationals() -> Result<()> { - "; - test("hu", "ClearSpeak", expr, "the negative rational numbers")?; + test("hu", "ClearSpeak", expr, "negatív racionális számok")?; return Ok(()); } @@ -190,7 +190,7 @@ fn empty_set() -> Result<()> { let expr = " { } "; - test("hu", "ClearSpeak", expr, "the empty set")?; + test("hu", "ClearSpeak", expr, "az üres halmaz")?; return Ok(()); } @@ -201,7 +201,7 @@ fn single_element_set() -> Result<()> { let expr = " { 12} "; - test("hu", "ClearSpeak", expr, "the set 12")?; + test("hu", "ClearSpeak", expr, "a halmaz 12")?; return Ok(()); } @@ -212,7 +212,7 @@ fn multiple_element_set() -> Result<()> { let expr = " { 5 , 10 , 15 } "; - test("hu", "ClearSpeak", expr, "the set 5 comma, 10 comma, 15")?; + test("hu", "ClearSpeak", expr, "a halmaz 5 vessző, 10 vessző, 15")?; return Ok(()); } @@ -223,7 +223,7 @@ fn set_with_colon() -> Result<()> { let expr = " { x:x>2 } "; - test("hu", "ClearSpeak", expr, "the set of all x such that x is greater than 2")?; + test("hu", "ClearSpeak", expr, "x melyekre teljesül, hogy minden x nagyobb, mint 2")?; return Ok(()); } @@ -234,7 +234,7 @@ fn set_with_bar() -> Result<()> { let expr = " { x|x>2 } "; - test("hu", "ClearSpeak", expr, "the set of all x such that x is greater than 2")?; + test("hu", "ClearSpeak", expr, "x melyekre teljesül, hogy minden x nagyobb, mint 2")?; return Ok(()); } @@ -245,7 +245,7 @@ fn element_alone() -> Result<()> { let expr = " 3+2i "; - test("hu", "ClearSpeak", expr, "3 plus 2 i, is not a member of, the real numbers")?; + test("hu", "ClearSpeak", expr, "3 plusz 2 i; nem tagja az alábbi halmaznak:, a valós számok halmaza")?; return Ok(()); } @@ -264,7 +264,7 @@ fn element_under_sum() -> Result<()> { "; test("hu", "ClearSpeak", expr, - "the sum over i is a member of the integers of; the fraction with numerator 1; and denominator i squared")?; + "összeg alatta i tagja az alábbi halmaznak:, az egész számok halmaza; a tört, melynek számlálója 1; nevezője pedig i a négyzeten")?; return Ok(()); } @@ -285,7 +285,7 @@ fn complicated_set_with_colon() -> Result<()> { 7 } "; - test("hu", "ClearSpeak", expr, "the set of all x in the integers such that 2 is less than x is less than 7")?; + test("hu", "ClearSpeak", expr, "x az egész számok halmaza melyekre teljesül, hogy minden 2 kisebb, mint x kisebb, mint 7")?; return Ok(()); } @@ -298,11 +298,11 @@ fn complicated_set_with_mtext() -> Result<()> { { x | - x is an even number + x páros szám } "; test("hu", "ClearSpeak", expr, - "the set of all x in the natural numbers such that x is an even number")?; + "x a természetes számok halmaza melyekre teljesül, hogy minden x páros szám")?; return Ok(()); } @@ -323,7 +323,7 @@ fn set_with_bar_member() -> Result<()> { } "; test_ClearSpeak("hu", "ClearSpeak_SetMemberSymbol", "Member", - expr, "the set of all x member of the integers such that x is greater than 5")?; + expr, "x tagja az egész számok halmaza melyekre teljesül, hogy minden x nagyobb, mint 5")?; return Ok(()); } @@ -335,7 +335,7 @@ fn element_alone_member() -> Result<()> { 3+2i "; test_ClearSpeak("hu", "ClearSpeak_SetMemberSymbol", "Member", - expr, "3 plus 2 i, is not a member of, the real numbers")?; + expr, "3 plusz 2 i; nem tagja az alábbi halmaznak:, a valós számok halmaza")?; return Ok(()); } @@ -354,7 +354,7 @@ fn element_under_sum_member() -> Result<()> { "; test_ClearSpeak("hu", "ClearSpeak_SetMemberSymbol", "Member", - expr, "the sum over i is a member of the integers of; the fraction with numerator 1; and denominator i squared")?; + expr, "összeg alatta i tagja az alábbi halmaznak:, az egész számok halmaza; a tört, melynek számlálója 1; nevezője pedig i a négyzeten")?; return Ok(()); } @@ -375,7 +375,7 @@ fn set_with_bar_element() -> Result<()> { } "; test_ClearSpeak("hu", "ClearSpeak_SetMemberSymbol", "Element", - expr, "the set of all x element of the integers such that x is greater than 5")?; + expr, "x eleme ennek:, az egész számok halmaza melyekre teljesül, hogy minden x nagyobb, mint 5")?; return Ok(()); } @@ -387,7 +387,7 @@ fn element_alone_element() -> Result<()> { 3+2i "; test_ClearSpeak("hu", "ClearSpeak_SetMemberSymbol", "Element", - expr, "3 plus 2 i, is not an element of, the real numbers")?; + expr, "3 plusz 2 i, nem eleme ennek:, a valós számok halmaza")?; return Ok(()); } @@ -406,7 +406,7 @@ fn element_under_sum_element() -> Result<()> { "; test_ClearSpeak("hu", "ClearSpeak_SetMemberSymbol", "Element", - expr, "the sum over i is an element of the integers of; the fraction with numerator 1; and denominator i squared")?; + expr, "összeg alatta i egy eleme ennek:, az egész számok halmaza; a tört, melynek számlálója 1; nevezője pedig i a négyzeten")?; return Ok(()); } @@ -426,7 +426,7 @@ fn set_with_bar_in() -> Result<()> { } "; test_ClearSpeak("hu", "ClearSpeak_SetMemberSymbol", "In", - expr, "the set of all x in the integers such that x is greater than 5")?; + expr, "x az egész számok halmaza melyekre teljesül, hogy minden x nagyobb, mint 5")?; return Ok(()); } @@ -438,7 +438,7 @@ fn element_alone_in() -> Result<()> { 3+2i "; test_ClearSpeak("hu", "ClearSpeak_SetMemberSymbol", "In", - expr, "3 plus 2 i, is not in the real numbers")?; + expr, "3 plusz 2 i; nincs benne az alábbi halmazban:, a valós számok halmaza")?; return Ok(()); } @@ -457,7 +457,7 @@ fn element_under_sum_in() -> Result<()> { "; test_ClearSpeak("hu", "ClearSpeak_SetMemberSymbol", "In", - expr, "the sum over i is in the integers of; the fraction with numerator 1; and denominator i squared")?; + expr, "összeg alatta i benne van ebben:, az egész számok halmaza; a tört, melynek számlálója 1; nevezője pedig i a négyzeten")?; return Ok(()); } @@ -477,7 +477,7 @@ fn set_with_bar_belongs() -> Result<()> { } "; test_ClearSpeak("hu", "ClearSpeak_SetMemberSymbol", "Belongs", - expr, "the set of all x belonging to the integers such that x is greater than 5")?; + expr, "x hozzátartozó eleme ennek:, az egész számok halmaza melyekre teljesül, hogy minden x nagyobb, mint 5")?; return Ok(()); } @@ -489,7 +489,7 @@ fn element_alone_belongs() -> Result<()> { 3+2i "; test_ClearSpeak("hu", "ClearSpeak_SetMemberSymbol", "Belongs", - expr, "3 plus 2 i, does not belong to, the real numbers")?; + expr, "3 plusz 2 i, nem tartozik ebbe:, a valós számok halmaza")?; return Ok(()); } @@ -508,7 +508,7 @@ fn element_under_sum_belongs() -> Result<()> { "; test_ClearSpeak("hu", "ClearSpeak_SetMemberSymbol", "Belongs", - expr, "the sum over i belongs to the integers of; the fraction with numerator 1; and denominator i squared")?; + expr, "összeg alatta i ebbe a halmazba tartozik:, az egész számok halmaza; a tört, melynek számlálója 1; nevezője pedig i a négyzeten")?; return Ok(()); } @@ -529,7 +529,7 @@ fn set_member_woall() -> Result<()> { } "; test_ClearSpeak_prefs("hu", vec![("ClearSpeak_SetMemberSymbol", "Member"), ("ClearSpeak_Sets", "woAll")], - expr, "the set of x member of the integers such that x is greater than 5")?; + expr, "x tagja az egész számok halmaza melyekre teljesül, hogy x nagyobb, mint 5")?; return Ok(()); } @@ -540,7 +540,7 @@ fn multiple_element_set_woall() -> Result<()> { let expr = " { 5 , 10 , 15 } "; - test_ClearSpeak("hu", "ClearSpeak_Sets", "woAll", expr, "the set 5 comma, 10 comma, 15")?; + test_ClearSpeak("hu", "ClearSpeak_Sets", "woAll", expr, "a halmaz 5 vessző, 10 vessző, 15")?; return Ok(()); } @@ -551,7 +551,7 @@ fn multiple_element_set_silent_bracket() -> Result<()> { let expr = " { 5 , 10 , 15 } "; - test_ClearSpeak("hu", "ClearSpeak_Sets", "SilentBracket", expr, "5 comma, 10 comma, 15")?; + test_ClearSpeak("hu", "ClearSpeak_Sets", "SilentBracket", expr, "5 vessző, 10 vessző, 15")?; return Ok(()); } @@ -563,7 +563,7 @@ fn silent_bracket() -> Result<()> { {x|x>2} "; test_ClearSpeak("hu", "ClearSpeak_Sets", "SilentBracket", expr, - "the set of all x such that x is greater than 2")?; + "x melyekre teljesül, hogy minden x nagyobb, mint 2")?; return Ok(()); } diff --git a/tests/Languages/hu/ClearSpeak/symbols_and_adornments.rs b/tests/Languages/hu/ClearSpeak/symbols_and_adornments.rs index 285a2b461..ff38686c6 100644 --- a/tests/Languages/hu/ClearSpeak/symbols_and_adornments.rs +++ b/tests/Languages/hu/ClearSpeak/symbols_and_adornments.rs @@ -7,7 +7,7 @@ fn multiplication() -> Result<()> { let expr = " 2×3 "; - test("hu", "ClearSpeak", expr, "2 times 3")?; + test("hu", "ClearSpeak", expr, "2 szorozva 3")?; return Ok(()); } @@ -18,7 +18,7 @@ fn multiplication_by() -> Result<()> { let expr = " 2×3 "; - test_ClearSpeak("hu", "ClearSpeak_MultSymbolX", "By", expr, "2 by 3")?; + test_ClearSpeak("hu", "ClearSpeak_MultSymbolX", "By", expr, "2 szorozva 3")?; return Ok(()); } @@ -29,7 +29,7 @@ fn multiplication_cross() -> Result<()> { let expr = " u×v "; - test_ClearSpeak("hu", "ClearSpeak_MultSymbolX", "Cross", expr, "u cross v")?; + test_ClearSpeak("hu", "ClearSpeak_MultSymbolX", "Cross", expr, "u kereszt v")?; return Ok(()); } @@ -41,7 +41,7 @@ fn ellipses_auto_start() -> Result<()> { , -2,-1,0 "; - test("hu", "ClearSpeak", expr, "dot dot dot comma, negative 2 comma, negative 1 comma, 0")?; + test("hu", "ClearSpeak", expr, "pont pont pont vessző, negatív 2 vessző, negatív 1 vessző, 0")?; return Ok(()); } @@ -58,7 +58,7 @@ fn ellipses_auto_end() -> Result<()> { , "; - test_ClearSpeak("hu", "ClearSpeak_Ellipses", "Auto", expr, "1 comma, 2 comma, 3 comma, dot dot dot")?; + test_ClearSpeak("hu", "ClearSpeak_Ellipses", "Auto", expr, "1 vessző, 2 vessző, 3 vessző, pont pont pont")?; return Ok(()); } @@ -80,7 +80,7 @@ fn ellipses_auto_middle() -> Result<()> { "; test_ClearSpeak("hu", "ClearSpeak_Ellipses", "Auto", expr, - "1 comma, 2 comma, 3 comma, dot dot dot comma, 20")?; + "1 vessző, 2 vessző, 3 vessző, pont pont pont vessző, 20")?; return Ok(()); } @@ -94,7 +94,7 @@ fn ellipses_auto_both() -> Result<()> { , "; test_ClearSpeak("hu", "ClearSpeak_Ellipses", "Auto", expr, - "dot dot dot comma, negative 2 comma, negative 1 comma, 0 comma, 1 comma, 2 comma, dot dot dot")?; + "pont pont pont vessző, negatív 2 vessző, negatív 1 vessző, 0 vessző, 1 vessző, 2 vessző, pont pont pont")?; return Ok(()); } @@ -106,7 +106,7 @@ fn ellipses_and_so_on_start() -> Result<()> { , -2,-1,0 "; - test_ClearSpeak("hu", "ClearSpeak_Ellipses", "AndSoOn", expr, "dot dot dot comma, negative 2 comma, negative 1 comma, 0")?; + test_ClearSpeak("hu", "ClearSpeak_Ellipses", "AndSoOn", expr, "pont pont pont vessző, negatív 2 vessző, negatív 1 vessző, 0")?; return Ok(()); } @@ -123,7 +123,7 @@ fn ellipses_and_so_on_end() -> Result<()> { , "; - test_ClearSpeak("hu", "ClearSpeak_Ellipses", "AndSoOn", expr, "1 comma, 2 comma, 3 and so on")?; + test_ClearSpeak("hu", "ClearSpeak_Ellipses", "AndSoOn", expr, "1 vessző, 2 vessző, 3 és így tovább")?; return Ok(()); } @@ -145,7 +145,7 @@ fn ellipses_and_so_on_middle() -> Result<()> { "; test_ClearSpeak("hu", "ClearSpeak_Ellipses", "AndSoOn", expr, - "1 comma, 2 comma, 3 and so on up to 20")?; + "1 vessző, 2 vessző, 3, és így tovább egészen az alábbi értékig:; 20")?; return Ok(()); } @@ -159,7 +159,7 @@ fn ellipses_and_so_on_both() -> Result<()> { , "; test_ClearSpeak("hu", "ClearSpeak_Ellipses", "AndSoOn", expr, - "dot dot dot comma, negative 2 comma, negative 1 comma, 0 comma, 1 comma, 2 comma, dot dot dot")?; + "pont pont pont vessző, negatív 2 vessző, negatív 1 vessző, 0 vessző, 1 vessző, 2 vessző, pont pont pont")?; return Ok(()); } @@ -171,7 +171,7 @@ fn vertical_line_auto() -> Result<()> { 3|6 "; test_ClearSpeak("hu", "ClearSpeak_VerticalLine", "Auto", expr, - "3 divides 6")?; + "3 osztja 6")?; return Ok(()); } @@ -183,7 +183,7 @@ fn vertical_line_divides() -> Result<()> { 3|6 "; test_ClearSpeak("hu", "ClearSpeak_VerticalLine", "Divides", expr, - "3 divides 6")?; + "3 osztja 6")?; return Ok(()); } @@ -194,7 +194,7 @@ fn vertical_line_divides() -> Result<()> { 3|6 "; test_ClearSpeak("hu", "ClearSpeak_VerticalLine", "Given", expr, - "3 given 6")?; + "3 adott 6")?; return Ok(()); } @@ -214,7 +214,7 @@ fn vertical_line_divides() -> Result<()> { "; test_ClearSpeak_prefs("hu", vec![("ClearSpeak_VerticalLine", "Given"), ("ClearSpeak_ImpliedTimes", "None")] - , expr, "cap p, open paren, cap eigh given cap b, close paren")?; + , expr, "nagy p; nyitott zárójel, nagy a adott nagy b, zárt zárójel")?; return Ok(()); } @@ -233,7 +233,7 @@ fn vertical_line_set() -> Result<()> { } "; test_ClearSpeak("hu", "ClearSpeak_VerticalLine", "Auto", expr, - "the set of all x such that x is greater than 0")?; + "x melyekre teljesül, hogy minden x nagyobb, mint 0")?; return Ok(()); } @@ -254,7 +254,7 @@ fn vertical_line_set_such_that() -> Result<()> { } "; test_ClearSpeak("hu", "ClearSpeak_VerticalLine", "SuchThat", expr, - "the set of all x such that x is greater than 0")?; + "x melyekre teljesül, hogy minden x nagyobb, mint 0")?; return Ok(()); } @@ -275,7 +275,7 @@ fn vertical_line_set_given() -> Result<()> { "; // the rules for set will override all the options -- ClearSpeak spec should be clarified test_ClearSpeak("hu", "ClearSpeak_VerticalLine", "Given", expr, - "the set of all x such that x is greater than 0")?; + "x melyekre teljesül, hogy minden x nagyobb, mint 0")?; return Ok(()); } @@ -299,7 +299,7 @@ fn vertical_line_set_and_abs() -> Result<()> { } "; test_ClearSpeak("hu", "ClearSpeak_VerticalLine", "Auto", expr, - "the set of all x such that the absolute value of x; is greater than 2")?; + "x melyekre teljesül, hogy minden x abszolút értéke; nagyobb, mint 2")?; return Ok(()); } @@ -324,7 +324,7 @@ fn vertical_line_evaluated_at() -> Result<()> { "; test_ClearSpeak("hu", "ClearSpeak_VerticalLine", "Auto", expr, - "f of x evaluated at, x is equal to 5")?; + "f x helyettesítve, x egyenlő 5")?; return Ok(()); } @@ -346,7 +346,7 @@ fn vertical_line_evaluated_at_both() -> Result<()> { "; test_ClearSpeak("hu", "ClearSpeak_VerticalLine", "Auto", expr, - "x squared plus x, evaluated at 1 minus the same expression evaluated at 0")?; + "x a négyzeten plusz x, behelyettesítve a(z) 1 értékét, levonva belőle a korábbi kifejezéssel azonos eredményt, behelyettesítve a(z) 0 értéket")?; return Ok(()); } @@ -370,7 +370,7 @@ fn vertical_line_evaluated_at_divides() -> Result<()> { "; test_ClearSpeak("hu", "ClearSpeak_VerticalLine", "Divides", expr, - "f of x evaluated at, x is equal to 5")?; + "f x helyettesítve, x egyenlő 5")?; return Ok(()); } @@ -392,7 +392,7 @@ fn vertical_line_evaluated_at_both_given() -> Result<()> { "; test_ClearSpeak("hu", "ClearSpeak_VerticalLine", "Given", expr, - "x squared plus x, evaluated at 1 minus the same expression evaluated at 0")?; + "x a négyzeten plusz x, behelyettesítve a(z) 1 értékét, levonva belőle a korábbi kifejezéssel azonos eredményt, behelyettesítve a(z) 0 értéket")?; return Ok(()); -} \ No newline at end of file +} diff --git a/tests/Languages/hu/SimpleSpeak/functions.rs b/tests/Languages/hu/SimpleSpeak/functions.rs index 35a921da1..aa4c2a43a 100644 --- a/tests/Languages/hu/SimpleSpeak/functions.rs +++ b/tests/Languages/hu/SimpleSpeak/functions.rs @@ -17,7 +17,7 @@ fn trig_names() -> Result<()> { cscϕ+ cotφ "; - test("hu", "SimpleSpeak", expr, "sine of x plus cosine of y plus tangent of z plus secant of alpha, plus cosecant of phi, plus cotangent of phi")?; + test("hu", "SimpleSpeak", expr, "szinusz x plusz koszinusz y, plusz tangens z plusz szekáns alfa, plusz koszekáns phi, plusz kotangens fí")?; return Ok(()); } @@ -33,12 +33,7 @@ fn hyperbolic_trig_names() -> Result<()> { cschϕ+ cothφ "; - test("hu", "SimpleSpeak", expr, "hyperbolic sine of x, plus \ - hyperbolic cosine of y, plus \ - hyperbolic tangent of z, plus \ - hyperbolic secant of alpha, plus \ - hyperbolic cosecant of phi, plus \ - hyperbolic cotangent of phi")?; + test("hu", "SimpleSpeak", expr, "hiperbolikus szinusz, x, plusz hiperbolikus koszinusz, y, plusz hiperbolikus tangens, z, plusz, hiperbolikus szekáns, alfa, plusz, hiperbolikus koszekáns, phi, plusz, hiperbolikus kotangens, fí")?; return Ok(()); } @@ -48,7 +43,7 @@ fn hyperbolic_trig_names() -> Result<()> { #[test] fn inverse_trig() -> Result<()> { let expr = "sin-1x"; - test("hu", "SimpleSpeak", expr, "inverse sine of x")?; + test("hu", "SimpleSpeak", expr, "inverz szinusz x")?; return Ok(()); } @@ -57,7 +52,7 @@ fn inverse_trig() -> Result<()> { #[test] fn trig_squared() -> Result<()> { let expr = "sin2x"; - test("hu", "SimpleSpeak", expr, "sine squared of x")?; + test("hu", "SimpleSpeak", expr, "szinusz x a négyzeten")?; return Ok(()); } @@ -66,7 +61,7 @@ fn trig_squared() -> Result<()> { #[test] fn trig_cubed() -> Result<()> { let expr = "tan3x"; - test("hu", "SimpleSpeak", expr, "tangent cubed of x")?; + test("hu", "SimpleSpeak", expr, "tangens x a köbön")?; return Ok(()); } @@ -75,7 +70,7 @@ fn trig_cubed() -> Result<()> { #[test] fn trig_fourth() -> Result<()> { let expr = "sec4x"; - test("hu", "SimpleSpeak", expr, "the fourth power of, secant of x")?; + test("hu", "SimpleSpeak", expr, "szekáns; x, a(z) negyedik hatványon")?; return Ok(()); } @@ -85,7 +80,7 @@ fn trig_fourth() -> Result<()> { #[test] fn trig_power_other() -> Result<()> { let expr = "sinh>n-1x"; - test("hu", "SimpleSpeak", expr, "the n minus 1 power of, hyperbolic sine of x")?; + test("hu", "SimpleSpeak", expr, "hiperbolikus szinusz; x, a(z) n mínusz 1 hatványon")?; return Ok(()); } @@ -94,7 +89,7 @@ fn trig_power_other() -> Result<()> { #[test] fn simple_log() -> Result<()> { let expr = " logx "; - test("hu", "SimpleSpeak", expr, "the log of x")?; + test("hu", "SimpleSpeak", expr, "logaritmus x")?; return Ok(()); } @@ -103,7 +98,7 @@ fn simple_log() -> Result<()> { #[test] fn normal_log() -> Result<()> { let expr = "log(x+y)"; - test("hu", "SimpleSpeak", expr, "the log of, open paren x plus y, close paren")?; + test("hu", "SimpleSpeak", expr, "logaritmus, nyitott zárójel, x plusz y, zárt zárójel")?; return Ok(()); } @@ -112,7 +107,7 @@ fn normal_log() -> Result<()> { #[test] fn simple_log_with_base() -> Result<()> { let expr = " logbx "; - test("hu", "SimpleSpeak", expr, "the log base b, of x")?; + test("hu", "SimpleSpeak", expr, "alap logaritmus b; x")?; return Ok(()); } @@ -121,7 +116,7 @@ fn simple_log_with_base() -> Result<()> { #[test] fn normal_log_with_base() -> Result<()> { let expr = "logb(x+y)"; - test("hu", "SimpleSpeak", expr, "the log base b, of, open paren x plus y, close paren")?; + test("hu", "SimpleSpeak", expr, "alap logaritmus b; nyitott zárójel, x plusz y, zárt zárójel")?; return Ok(()); } @@ -131,11 +126,11 @@ fn normal_log_with_base() -> Result<()> { fn normal_ln() -> Result<()> { let expr = "ln(x+y)"; test_prefs("hu", "SimpleSpeak", vec![("Verbosity", "Terse")], - expr, "l n, open x plus y close")?; + expr, "l n, nyitott zárójel, x plusz y, zárt zárójel")?; test_prefs("hu", "SimpleSpeak", vec![("Verbosity", "Medium")], - expr, "the natural log of, open paren x plus y, close paren")?; + expr, "természetes alapú logaritmus; nyitott zárójel, x plusz y, zárt zárójel")?; test_prefs("hu", "SimpleSpeak", vec![("Verbosity", "Verbose")], - expr, "the natural log of, open paren x plus y, close paren")?; + expr, "természetes alapú logaritmus; nyitott zárójel, x plusz y, zárt zárójel")?; return Ok(()); } @@ -147,9 +142,9 @@ fn simple_ln() -> Result<()> { test_prefs("hu", "SimpleSpeak", vec![("Verbosity", "Terse")], expr, "l n x")?; test_prefs("hu", "SimpleSpeak", vec![("Verbosity", "Medium")], - expr, "the natural log of x")?; + expr, "természetes alapú logaritmus, x")?; test_prefs("hu", "SimpleSpeak", vec![("Verbosity", "Verbose")], - expr, "the natural log of x")?; + expr, "természetes alapú logaritmus, x")?; return Ok(()); } @@ -159,14 +154,14 @@ fn simple_ln() -> Result<()> { fn other_names() -> Result<()> { let expr = " Covx "; test_prefs("hu", "SimpleSpeak", vec![("Verbosity", "Terse")], - expr, "Cov x")?; + expr, "kovariancia x")?; test_prefs("hu", "SimpleSpeak", vec![("Verbosity", "Medium")], - expr, "covariance x")?; + expr, "kovariancia x")?; let expr = " exp(x) "; test_prefs("hu", "SimpleSpeak", vec![("Verbosity", "Terse")], - expr, "exp x")?; + expr, "exponenciális x")?; test_prefs("hu", "SimpleSpeak", vec![("Verbosity", "Medium")], - expr, "exponential of x")?; + expr, "exponenciális x")?; return Ok(()); } @@ -175,7 +170,7 @@ fn other_names() -> Result<()> { #[test] fn explicit_function_call_with_parens() -> Result<()> { let expr = "t(x)"; - test("hu", "SimpleSpeak", expr, "t of x")?; + test("hu", "SimpleSpeak", expr, "t x")?; return Ok(()); } @@ -185,7 +180,7 @@ fn explicit_function_call_with_parens() -> Result<()> { #[test] fn explicit_times_with_parens() -> Result<()> { let expr = "t(x)"; - test("hu", "SimpleSpeak", expr, "t times x")?; + test("hu", "SimpleSpeak", expr, "t szorozva x")?; return Ok(()); } @@ -194,7 +189,7 @@ fn explicit_times_with_parens() -> Result<()> { #[test] fn explicit_function_call() -> Result<()> { let expr = "tx"; - test("hu", "SimpleSpeak", expr, "t of x")?; + test("hu", "SimpleSpeak", expr, "t x")?; return Ok(()); } @@ -228,7 +223,7 @@ fn times_following_paren() -> Result<()> { 2 ( 3 ) "; - test("hu", "SimpleSpeak", expr, "2 times 3")?; + test("hu", "SimpleSpeak", expr, "2 szorozva 3")?; return Ok(()); } @@ -240,7 +235,7 @@ fn times_preceding_paren() -> Result<()> { ( 2 ) 3 "; - test("hu", "SimpleSpeak", expr, "2 times 3")?; + test("hu", "SimpleSpeak", expr, "2 szorozva 3")?; return Ok(()); } @@ -255,9 +250,9 @@ fn no_times_sqrt() -> Result<()> { ab "; test("hu", "SimpleSpeak", expr, - "the square root of eigh; times the square root of b; is equal to, the square root of eigh b, end root")?; + "a négyzetgyöke ennek: a; szorozva a négyzetgyöke ennek: b; egyenlő, a négyzetgyöke ennek: a b, gyök vége")?; test_prefs("hu", "SimpleSpeak", vec![("Impairment", "LearningDisability")], expr, - "the square root of eigh; times the square root of b; is equal to, the square root of eigh b")?; + "a négyzetgyöke ennek: a; szorozva a négyzetgyöke ennek: b; egyenlő, a négyzetgyöke ennek: a b")?; return Ok(()); } @@ -273,7 +268,7 @@ fn no_times_sqrt() -> Result<()> { ) x "; - test("hu", "SimpleSpeak", expr, "25 times x")?; + test("hu", "SimpleSpeak", expr, "25 szorozva x")?; return Ok(()); } @@ -286,7 +281,7 @@ fn no_times_sqrt() -> Result<()> { xy ) "; - test("hu", "SimpleSpeak", expr, "b, open paren x y close paren")?; + test("hu", "SimpleSpeak", expr, "b, nyitott zárójel, x y zárt zárójel")?; return Ok(()); } @@ -299,7 +294,7 @@ fn no_times_sqrt() -> Result<()> { 2 ) "; - test("hu", "SimpleSpeak", expr, "2 plus negative 2")?; + test("hu", "SimpleSpeak", expr, "2 plusz negatív 2")?; return Ok(()); } @@ -313,7 +308,7 @@ fn no_times_sqrt() -> Result<()> { ) +1 "; - test("hu", "SimpleSpeak", expr, "negative 2 x, plus 1")?; + test("hu", "SimpleSpeak", expr, "negatív 2 x, plusz 1")?; return Ok(()); } @@ -331,7 +326,7 @@ fn no_times_sqrt() -> Result<()> { "; - test("hu", "SimpleSpeak", expr, "open paren 2 x close paren squared")?; + test("hu", "SimpleSpeak", expr, "nyitott zárójel, 2 x zárt zárójel a négyzeten")?; return Ok(()); } @@ -346,7 +341,7 @@ fn no_times_sqrt() -> Result<()> { 12 ) "; - test("hu", "SimpleSpeak", expr, "2 plus 1 half")?; + test("hu", "SimpleSpeak", expr, "2 plusz 1 ketted")?; return Ok(()); } @@ -360,7 +355,7 @@ fn no_times_sqrt() -> Result<()> { (c,d) ) "; - test("hu", "SimpleSpeak",expr, "the open interval from c to d")?; + test("hu", "SimpleSpeak",expr, "c től d ig terjedő intervallum, nem tartalmazza a c elemet vagy d elemet")?; return Ok(()); } @@ -373,7 +368,7 @@ fn no_times_sqrt() -> Result<()> { [(]c,d) ) "; - test("hu", "SimpleSpeak",expr, "the closed open interval from c to d")?; + test("hu", "SimpleSpeak",expr, "c től d ig terjedő intervallum, tartalmazza a c elemet de nem tartalmazza a d elemet")?; return Ok(()); } @@ -387,7 +382,7 @@ fn parens_interval_open_closed() -> Result<()> { (c,d] ] "; - test("hu", "SimpleSpeak",expr,"the open closed interval from c to d")?; + test("hu", "SimpleSpeak",expr,"c től d ig terjedő intervallum, nem tartalmazza a c elemet de tartalmazza a d elemet")?; return Ok(()); } @@ -401,7 +396,7 @@ fn parens_interval_closed_closed() -> Result<()> { [(]c,d] ] "; - test("hu", "SimpleSpeak",expr, "the closed interval from c to d")?; + test("hu", "SimpleSpeak",expr, "c től d ig terjedő intervallum, tartalmazza a c elemet és d elemet")?; return Ok(()); } @@ -414,7 +409,7 @@ fn parens_interval_closed_closed() -> Result<()> { ) "; test("hu", "SimpleSpeak",expr, - "the open interval from negative infinity to d")?; + "negatív végtelen től d ig terjedő intervallum, nem tartalmazza a d elemet")?; return Ok(()); } @@ -427,7 +422,7 @@ fn parens_interval_closed_closed() -> Result<()> { ] "; test("hu", "SimpleSpeak",expr, - "the open closed interval from negative infinity to d")?; + "negatív végtelen től d ig terjedő intervallum, tartalmazza a d elemet")?; return Ok(()); } diff --git a/tests/Languages/hu/SimpleSpeak/geometry.rs b/tests/Languages/hu/SimpleSpeak/geometry.rs index e7287b846..8eb1b2483 100644 --- a/tests/Languages/hu/SimpleSpeak/geometry.rs +++ b/tests/Languages/hu/SimpleSpeak/geometry.rs @@ -7,7 +7,7 @@ use anyhow::Result; #[test] fn arc() -> Result<()> { let expr = " BC "; - test("hu", "SimpleSpeak", expr, "arc cap b cap c")?; + test("hu", "SimpleSpeak", expr, "ív nagy b nagy c")?; return Ok(()); } @@ -16,7 +16,7 @@ fn arc() -> Result<()> { #[test] fn ray() -> Result<()> { let expr = " XY¯ "; - test("hu", "SimpleSpeak", expr, "line segment cap x cap y")?; + test("hu", "SimpleSpeak", expr, "vonalszakasz nagy x nagy y")?; return Ok(()); } @@ -25,7 +25,7 @@ fn ray() -> Result<()> { #[test] fn arc_mtext() -> Result<()> { let expr = " BC "; - test("hu", "SimpleSpeak", expr, "arc cap b cap c")?; + test("hu", "SimpleSpeak", expr, "ív nagy b nagy c")?; return Ok(()); } @@ -34,7 +34,7 @@ fn arc_mtext() -> Result<()> { #[test] fn ray_mtext() -> Result<()> { let expr = " XY "; - test("hu", "SimpleSpeak", expr, "ray cap x cap y")?; + test("hu", "SimpleSpeak", expr, "sugár nagy x nagy y")?; return Ok(()); } diff --git a/tests/Languages/hu/SimpleSpeak/large_ops.rs b/tests/Languages/hu/SimpleSpeak/large_ops.rs index 5a3f2fc99..1d798202c 100644 --- a/tests/Languages/hu/SimpleSpeak/large_ops.rs +++ b/tests/Languages/hu/SimpleSpeak/large_ops.rs @@ -12,7 +12,7 @@ fn sum_both() -> Result<()> { n "; - test("hu", "SimpleSpeak", expr, "the sum from n is equal to 1, to 10 of n")?; + test("hu", "SimpleSpeak", expr, "összeg ettől: n egyenlő 1, eddig: 10 értéke: n")?; return Ok(()); } @@ -27,7 +27,7 @@ fn sum_under() -> Result<()> { i "; - test("hu", "SimpleSpeak", expr, "the sum over cap s of i")?; + test("hu", "SimpleSpeak", expr, "összeg alatta nagy s i")?; return Ok(()); } @@ -42,7 +42,7 @@ fn sum_both_msubsup() -> Result<()> { n "; - test("hu", "SimpleSpeak", expr, "the sum from n is equal to 1, to 10 of n")?; + test("hu", "SimpleSpeak", expr, "összeg ettől: n egyenlő 1, eddig: 10 értéke: n")?; return Ok(()); } @@ -57,7 +57,7 @@ fn sum_sub() -> Result<()> { i "; - test("hu", "SimpleSpeak", expr, "the sum over cap s of i")?; + test("hu", "SimpleSpeak", expr, "összeg alatta nagy s i")?; return Ok(()); } @@ -69,7 +69,7 @@ fn sum() -> Result<()> { ai "; - test("hu", "SimpleSpeak", expr, "the sum of eigh sub i")?; + test("hu", "SimpleSpeak", expr, "összeg a alsó index i")?; return Ok(()); } @@ -85,7 +85,7 @@ fn product_both() -> Result<()> { n "; - test("hu", "SimpleSpeak", expr, "the product from n is equal to 1, to 10 of n")?; + test("hu", "SimpleSpeak", expr, "produktum ettől: n egyenlő 1, eddig: 10 értéke: n")?; return Ok(()); } @@ -100,7 +100,7 @@ fn product_under() -> Result<()> { i "; - test("hu", "SimpleSpeak", expr, "the product over cap s of i")?; + test("hu", "SimpleSpeak", expr, "produktum alatta nagy s i")?; return Ok(()); } @@ -112,7 +112,7 @@ fn product() -> Result<()> { ai "; - test("hu", "SimpleSpeak", expr, "the product of eigh sub i")?; + test("hu", "SimpleSpeak", expr, "produktum a alsó index i")?; return Ok(()); } @@ -128,7 +128,7 @@ fn intersection_both() -> Result<()> { Si "; - test("hu", "SimpleSpeak", expr, "the intersection from i is equal to 1, to 10 of; cap s sub i")?; + test("hu", "SimpleSpeak", expr, "kereszteződés ettől: i egyenlő 1, eddig: 10 értéke:; nagy s alsó index i")?; return Ok(()); } @@ -143,7 +143,7 @@ fn intersection_under() -> Result<()> { Si "; - test("hu", "SimpleSpeak", expr, "the intersection over cap c of, cap s sub i")?; + test("hu", "SimpleSpeak", expr, "kereszteződés alatta nagy c, nagy s alsó index i")?; return Ok(()); } @@ -155,7 +155,7 @@ fn intersection() -> Result<()> { Si "; - test("hu", "SimpleSpeak", expr, "the intersection of cap s sub i")?; + test("hu", "SimpleSpeak", expr, "kereszteződés nagy s alsó index i")?; return Ok(()); } @@ -171,7 +171,7 @@ fn union_both() -> Result<()> { Si "; - test("hu", "SimpleSpeak", expr, "the union from i is equal to 1, to 10 of; cap s sub i")?; + test("hu", "SimpleSpeak", expr, "unió ettől: i egyenlő 1, eddig: 10 értéke:; nagy s alsó index i")?; return Ok(()); } @@ -186,7 +186,7 @@ fn union_under() -> Result<()> { Si "; - test("hu", "SimpleSpeak", expr, "the union over cap c of, cap s sub i")?; + test("hu", "SimpleSpeak", expr, "unió alatta nagy c, nagy s alsó index i")?; return Ok(()); } @@ -198,7 +198,7 @@ fn union() -> Result<()> { Si "; - test("hu", "SimpleSpeak", expr, "the union of cap s sub i")?; + test("hu", "SimpleSpeak", expr, "unió nagy s alsó index i")?; return Ok(()); } @@ -217,7 +217,7 @@ fn integral_both() -> Result<()> { dx "; - test("hu", "SimpleSpeak", expr, "the integral from 0, to 1 of, f of x; d x")?; + test("hu", "SimpleSpeak", expr, "integrál ettől: 0, eddig: 1 értéke:; f x; d x")?; return Ok(()); } @@ -233,7 +233,7 @@ fn integral_under() -> Result<()> { f(x ) dx "; - test("hu", "SimpleSpeak", expr, "the integral over the real numbers of; f of x d x")?; + test("hu", "SimpleSpeak", expr, "integrál alatta a valós számok halmaza; f x d x")?; return Ok(()); } @@ -246,7 +246,7 @@ fn integral() -> Result<()> { f(x ) dx "; - test("hu", "SimpleSpeak", expr, "the integral of f of x d x")?; + test("hu", "SimpleSpeak", expr, "integrál f x d x")?; return Ok(()); -} \ No newline at end of file +} diff --git a/tests/Languages/hu/SimpleSpeak/linear_algebra.rs b/tests/Languages/hu/SimpleSpeak/linear_algebra.rs index eea4d17fe..6a3007faa 100644 --- a/tests/Languages/hu/SimpleSpeak/linear_algebra.rs +++ b/tests/Languages/hu/SimpleSpeak/linear_algebra.rs @@ -5,7 +5,7 @@ use anyhow::Result; #[test] fn transpose() -> Result<()> { let expr = " MT "; - test("hu", "SimpleSpeak", expr, "cap m transpose")?; + test("hu", "SimpleSpeak", expr, "nagy m transzponált")?; return Ok(()); } @@ -14,7 +14,7 @@ fn transpose() -> Result<()> { #[test] fn trace() -> Result<()> { let expr = " TrM "; - test("hu", "SimpleSpeak", expr, "trace of cap m")?; + test("hu", "SimpleSpeak", expr, "nyom nagy m")?; return Ok(()); } @@ -23,7 +23,7 @@ fn trace() -> Result<()> { #[test] fn dimension() -> Result<()> { let expr = " DimM "; - test("hu", "SimpleSpeak", expr, "dimension of cap m")?; + test("hu", "SimpleSpeak", expr, "dimenzió nagy m")?; return Ok(()); } @@ -32,7 +32,7 @@ fn dimension() -> Result<()> { #[test] fn homomorphism() -> Result<()> { let expr = " Hom(M) "; - test("hu", "SimpleSpeak", expr, "homomorphism of cap m")?; + test("hu", "SimpleSpeak", expr, "homomorfizmus nagy m")?; return Ok(()); } @@ -41,7 +41,7 @@ fn homomorphism() -> Result<()> { #[test] fn kernel() -> Result<()> { let expr = " ker(L) "; - test("hu", "SimpleSpeak", expr, "kernel of cap l")?; + test("hu", "SimpleSpeak", expr, "kernel nagy l")?; return Ok(()); } @@ -57,7 +57,7 @@ fn norm() -> Result<()> { "; - test("hu", "SimpleSpeak", expr, "norm of f")?; + test("hu", "SimpleSpeak", expr, "normalizálás f")?; return Ok(()); } @@ -75,7 +75,7 @@ fn norm_non_simple() -> Result<()> { "; - test("hu", "SimpleSpeak", expr, "norm of x plus y end norm")?; + test("hu", "SimpleSpeak", expr, "normalizálás x plusz y normalizálás vége")?; return Ok(()); } @@ -94,7 +94,7 @@ fn norm_subscripted() -> Result<()> { "; - test("hu", "SimpleSpeak", expr, "p norm of f")?; + test("hu", "SimpleSpeak", expr, "p normalizálás a f")?; return Ok(()); } @@ -114,7 +114,7 @@ fn not_gradient() -> Result<()> { a "#; - test("hu", "SimpleSpeak", expr, "open paren, b times nahblah, close paren; times eigh")?; + test("hu", "SimpleSpeak", expr, "nyitott zárójel, b szorozva nahblah, zárt zárójel; szorozva a")?; return Ok(()); -} \ No newline at end of file +} diff --git a/tests/Languages/hu/SimpleSpeak/mfrac.rs b/tests/Languages/hu/SimpleSpeak/mfrac.rs index d326ae365..86b13287d 100644 --- a/tests/Languages/hu/SimpleSpeak/mfrac.rs +++ b/tests/Languages/hu/SimpleSpeak/mfrac.rs @@ -10,7 +10,7 @@ fn common_fraction_half() -> Result<()> { let expr = " 1 2 "; - test("hu", "SimpleSpeak", expr, "1 half")?; + test("hu", "SimpleSpeak", expr, "1 ketted")?; return Ok(()); } @@ -21,7 +21,7 @@ fn common_fraction_thirds() -> Result<()> { let expr = " 2 3 "; - test("hu", "SimpleSpeak", expr, "2 thirds")?; + test("hu", "SimpleSpeak", expr, "2 harmad")?; return Ok(()); } @@ -32,7 +32,7 @@ fn common_fraction_tenths() -> Result<()> { let expr = " 17 10 "; - test("hu", "SimpleSpeak", expr, "17 tenths")?; + test("hu", "SimpleSpeak", expr, "17 tized")?; return Ok(()); } @@ -44,7 +44,7 @@ fn not_SimpleSpeak_common_fraction_tenths() -> Result<()> { let expr = " 89 10 "; - test("hu", "SimpleSpeak", expr, "89 over 10")?; + test("hu", "SimpleSpeak", expr, "89 per 10")?; return Ok(()); } @@ -63,7 +63,7 @@ fn non_simple_fraction() -> Result<()> { "; - test("hu", "SimpleSpeak", expr, "fraction, x plus y, over, x minus y, end fraction")?; + test("hu", "SimpleSpeak", expr, "tört, x plusz y, per, x mínusz y, tört vége")?; return Ok(()); } @@ -82,7 +82,7 @@ fn nested_fraction() -> Result<()> { "; - test("hu", "SimpleSpeak", expr, "fraction, x plus, fraction, 1 over y, end fraction; over, x minus y, end fraction")?; + test("hu", "SimpleSpeak", expr, "tört, x plusz, tört, 1 per y, tört vége; per, x mínusz y, tört vége")?; return Ok(()); } @@ -102,7 +102,7 @@ fn deeply_nested_fraction_msqrt() -> Result<()> { "; - test("hu", "SimpleSpeak", expr, "fraction, x plus, the square root of 1 over y; end root; over, x minus y, end fraction")?; + test("hu", "SimpleSpeak", expr, "tört, x plusz, a négyzetgyöke ennek: 1 per y; gyök vége; per, x mínusz y, tört vége")?; return Ok(()); } @@ -121,7 +121,7 @@ fn deeply_nested_fraction_mrow_msqrt() -> Result<()> { "; - test("hu", "SimpleSpeak", expr, "fraction, x plus, the square root of 2 plus 1 over y; end root; over, x minus y, end fraction")?; + test("hu", "SimpleSpeak", expr, "tört, x plusz, a négyzetgyöke ennek: 2 plusz 1 per y; gyök vége; per, x mínusz y, tört vége")?; return Ok(()); } @@ -140,7 +140,7 @@ fn numerator_simple_fraction() -> Result<()> { "; - test("hu", "SimpleSpeak", expr, "fraction, x over, x minus y, end fraction")?; + test("hu", "SimpleSpeak", expr, "tört, x per, x mínusz y, tört vége")?; return Ok(()); } @@ -156,7 +156,7 @@ fn denominator_simple_fraction() -> Result<()> { "; - test("hu", "SimpleSpeak", expr, "fraction, x minus y, over x, end fraction")?; + test("hu", "SimpleSpeak", expr, "tört, x mínusz y, per x, tört vége")?; return Ok(()); } @@ -175,7 +175,7 @@ fn frac_with_units() -> Result<()> { "; - test("hu", "SimpleSpeak", expr, "62 miles per hour")?; + test("hu", "SimpleSpeak", expr, "62 mérföld per óra")?; return Ok(()); } @@ -193,7 +193,7 @@ fn singular_frac_with_units() -> Result<()> { "; - test("hu", "SimpleSpeak", expr, "1 gallon per mile")?; + test("hu", "SimpleSpeak", expr, "1 gallon per mérföld")?; return Ok(()); } @@ -211,7 +211,7 @@ fn number_in_numerator_with_units() -> Result<()> { mi "; - test("hu", "SimpleSpeak", expr, "3 gallons per mile")?; + test("hu", "SimpleSpeak", expr, "3 gallon per mérföld")?; return Ok(()); } @@ -226,7 +226,7 @@ fn units_with_powers() -> Result<()> { s2 "; - test("hu", "SimpleSpeak", expr, "3 metres per second squared")?; + test("hu", "SimpleSpeak", expr, "3 méter per másodperc a négyzeten")?; return Ok(()); } @@ -239,7 +239,7 @@ fn mixed_number() -> Result<()> { 3 1 2 "; - test("hu", "SimpleSpeak", expr, "3 and 1 half")?; + test("hu", "SimpleSpeak", expr, "3 és 1 ketted")?; return Ok(()); } @@ -252,7 +252,7 @@ fn explicit_mixed_number() -> Result<()> { 1 8 "; - test("hu", "SimpleSpeak", expr, "3 and 1 eighth")?; + test("hu", "SimpleSpeak", expr, "3 és 1 nyolcad")?; return Ok(()); } @@ -264,7 +264,7 @@ fn mixed_number_big() -> Result<()> { 3 7 83 "; - test("hu", "SimpleSpeak", expr, "3 and 7 eighty thirds")?; + test("hu", "SimpleSpeak", expr, "3 és 7 kilenc harmad")?; return Ok(()); } @@ -275,7 +275,7 @@ fn simple_text() -> Result<()> { let expr = " rise run "; - test("hu", "SimpleSpeak", expr, "rise over run")?; + test("hu", "SimpleSpeak", expr, "rise per run")?; return Ok(()); } @@ -286,12 +286,12 @@ fn number_and_text() -> Result<()> { let expr = " - 2miles + 2mérföld - 3gallons + 3gallon "; - test("hu", "SimpleSpeak", expr, "fraction, 2 miles, over, 3 gallons, end fraction")?; + test("hu", "SimpleSpeak", expr, "tört, 2 mérföld, per, 3 gallon, tört vége")?; return Ok(()); } @@ -318,7 +318,7 @@ fn nested_simple_fractions() -> Result<()> { "; - test("hu", "SimpleSpeak", expr, "fraction, 1 half, over, 2 thirds, end fraction")?; + test("hu", "SimpleSpeak", expr, "tört, 1 ketted, per, 2 harmad, tört vége")?; return Ok(()); } @@ -332,7 +332,7 @@ fn binomial() -> Result<()> { 7 3 ) "; - test("hu", "SimpleSpeak", expr, "2 times 7 choose 3")?; + test("hu", "SimpleSpeak", expr, "2 szorozva 7 a 3")?; return Ok(()); } @@ -346,7 +346,7 @@ fn binomial_non_simple_top() -> Result<()> { n+7 3 ) "; - test("hu", "SimpleSpeak", expr, "2 times, binomial n plus 7 choose 3")?; + test("hu", "SimpleSpeak", expr, "2 szorozva, binomiális kezdete n plusz 7 a 3")?; return Ok(()); } @@ -360,7 +360,7 @@ fn binomial_non_simple_bottom() -> Result<()> { 7 k+3 ) "; - test("hu", "SimpleSpeak", expr, "2 times, 7 choose k plus 3 end binomial")?; + test("hu", "SimpleSpeak", expr, "2 szorozva, 7 a k plusz 3 binomiális vége")?; return Ok(()); } @@ -374,7 +374,7 @@ fn binomial_non_simple_top_and_bottom() -> Result<()> { n+7 k+3 ) "; - test("hu", "SimpleSpeak", expr, "2 times, binomial n plus 7 choose k plus 3 end binomial")?; + test("hu", "SimpleSpeak", expr, "2 szorozva; binomiális kezdete n plusz 7 a k plusz 3 binomiális vége")?; return Ok(()); } diff --git a/tests/Languages/hu/SimpleSpeak/msup.rs b/tests/Languages/hu/SimpleSpeak/msup.rs index 0afc2fccb..3dd63e5a8 100644 --- a/tests/Languages/hu/SimpleSpeak/msup.rs +++ b/tests/Languages/hu/SimpleSpeak/msup.rs @@ -10,7 +10,7 @@ fn squared() -> Result<()> { let expr = " x 2 "; - test("hu", "SimpleSpeak", expr, "x squared")?; + test("hu", "SimpleSpeak", expr, "x a négyzeten")?; return Ok(()); } @@ -21,7 +21,7 @@ fn cubed() -> Result<()> { let expr = " x 3 "; - test("hu", "SimpleSpeak", expr, "x cubed")?; + test("hu", "SimpleSpeak", expr, "x a köbön")?; return Ok(()); } @@ -32,7 +32,7 @@ fn cubed() -> Result<()> { let expr = " x 4 "; - test("hu", "SimpleSpeak", expr, "x to the fourth")?; + test("hu", "SimpleSpeak", expr, "x a(z) negyedik hatványon")?; return Ok(()); } @@ -43,7 +43,7 @@ fn simple_mi_power() -> Result<()> { let expr = " x n "; - test("hu", "SimpleSpeak", expr, "x to the n-th")?; + test("hu", "SimpleSpeak", expr, "x a(z) n-edik hatványon")?; return Ok(()); } @@ -54,7 +54,7 @@ fn zero_power() -> Result<()> { let expr = " x 0 "; - test("hu", "SimpleSpeak", expr, "x to the 0")?; + test("hu", "SimpleSpeak", expr, "x a(z) nulladik hatványon")?; return Ok(()); } @@ -66,7 +66,7 @@ fn decimal_power() -> Result<()> { let expr = " x 2.0 "; - test("hu", "SimpleSpeak", expr, "x to the 20")?; + test("hu", "SimpleSpeak", expr, "x a(z) 20 hatványon")?; return Ok(()); } @@ -83,7 +83,7 @@ fn non_simple_power() -> Result<()> { "; - test("hu", "SimpleSpeak", expr, "3 raised to the y plus 2 power")?; + test("hu", "SimpleSpeak", expr, "3 a(z) y plusz 2 hatványon")?; return Ok(()); } @@ -97,7 +97,7 @@ fn negative_power() -> Result<()> { - 2 "; - test("hu", "SimpleSpeak", expr, "x to the negative 2")?; + test("hu", "SimpleSpeak", expr, "x a negatív 2 hatványon")?; return Ok(()); } @@ -111,7 +111,7 @@ fn simple_fraction_power() -> Result<()> { 13 "; - test("hu", "SimpleSpeak", expr, "x raised to the 1 third power")?; + test("hu", "SimpleSpeak", expr, "x a(z) 1 harmad hatványon")?; return Ok(()); } @@ -133,7 +133,7 @@ fn nested_squared_power_with_coef() -> Result<()> { "; - test("hu", "SimpleSpeak", expr, "3 raised to the 2 x squared power")?; + test("hu", "SimpleSpeak", expr, "3 emelve a(z) 2 x a négyzeten hatványra")?; return Ok(()); } @@ -156,7 +156,7 @@ fn nested_squared_power_with_neg_coef() -> Result<()> { "; - test("hu", "SimpleSpeak", expr, "3 raised to the negative 2 x squared power")?; + test("hu", "SimpleSpeak", expr, "3 emelve a negatív 2 x a négyzeten hatványra")?; return Ok(()); } @@ -174,7 +174,7 @@ fn nested_cubed_power() -> Result<()> { "; - test("hu", "SimpleSpeak", expr, "y raised to the 4 fifths cubed power")?; + test("hu", "SimpleSpeak", expr, "y emelve a(z) 4 ötöd a köbön hatványra")?; return Ok(()); } @@ -194,7 +194,7 @@ fn nested_cubed_power_with_neg_base() -> Result<()> { "; - test("hu", "SimpleSpeak", expr, "y raised to the negative 4 fifths cubed power")?; + test("hu", "SimpleSpeak", expr, "y a(z) negatív 4 ötöd a köbön hatványon")?; return Ok(()); } @@ -219,7 +219,7 @@ fn nested_number_times_squared() -> Result<()> { "; - test("hu", "SimpleSpeak", expr, "e raised to the 1 half x squared power")?; + test("hu", "SimpleSpeak", expr, "e emelve a(z) 1 ketted x a négyzeten hatványra")?; return Ok(()); } @@ -244,7 +244,7 @@ fn nested_negative_number_times_squared() -> Result<()> { "; - test("hu", "SimpleSpeak", expr, "e raised to the negative 1 half x squared power")?; + test("hu", "SimpleSpeak", expr, "e emelve a negatív 1 ketted, x a négyzeten hatványra")?; return Ok(()); } @@ -266,7 +266,7 @@ fn nested_expr_to_tenth() -> Result<()> { "; - test("hu", "SimpleSpeak", expr, "3 raised to the 3 to the tenth power")?; + test("hu", "SimpleSpeak", expr, "3 emelve a következő kitevőre:, 3 a(z) tizedik hatványon, kitevő vége")?; return Ok(()); } @@ -291,7 +291,7 @@ fn nested_non_simple_squared_exp() -> Result<()> { "; - test("hu", "SimpleSpeak", expr, "3 raised to the open paren x plus 1, close paren squared power")?; + test("hu", "SimpleSpeak", expr, "3 emelve a következő kitevőre:, nyitott zárójel, x plusz 1, zárt zárójel a négyzeten, kitevő vége")?; return Ok(()); } @@ -308,7 +308,7 @@ fn nested_simple_power() -> Result<()> { "; - test("hu", "SimpleSpeak", expr, "t raised to the 4 fifths to the n-th power")?; + test("hu", "SimpleSpeak", expr, "t emelve a következő kitevőre:, 4 ötöd a(z) n-edik hatványon, kitevő vége")?; return Ok(()); } @@ -325,9 +325,9 @@ fn nested_end_exponent_power() -> Result<()> { "; - test("hu", "SimpleSpeak", expr, "t raised to the 4 fifths raised to the n plus 1 power; end exponent")?; + test("hu", "SimpleSpeak", expr, "t emelve a következő kitevőre:, 4 ötöd a(z) n plusz 1 hatványon, kitevő vége")?; test_prefs("hu", "SimpleSpeak", vec![("Impairment", "LearningDisability")], expr, - "t raised to the 4 fifths raised to the n plus 1 power")?; + "t emelve a következő kitevőre:, 4 ötöd a(z) n plusz 1 hatványon, kitevő vége")?; return Ok(()); } @@ -344,7 +344,7 @@ fn nested_end_exponent_neg_power() -> Result<()> { "; - test("hu", "SimpleSpeak", expr, "t raised to the 4 fifths to the negative 3, end exponent")?; + test("hu", "SimpleSpeak", expr, "t emelve a következő kitevőre:, 4 ötöd a negatív 3 hatványon, kitevő vége")?; return Ok(()); } @@ -378,7 +378,7 @@ fn nested_complex_power() -> Result<()> { "; - test("hu", "SimpleSpeak", expr, "e raised to the negative 1 half times; open paren, fraction, x minus mu, over sigma, end fraction; close paren squared power")?; + test("hu", "SimpleSpeak", expr, "e emelve a következő kitevőre:, negatív 1 ketted, szorozva; nyitott zárójel; tört, x mínusz mű, per szigma, tört vége; zárt zárójel a négyzeten, kitevő vége")?; return Ok(()); } @@ -395,7 +395,7 @@ fn default_power() -> Result<()> { "; - test("hu", "SimpleSpeak", expr, "t raised to the fraction, b plus 1, over 3, end fraction; power")?; + test("hu", "SimpleSpeak", expr, "t a(z) tört, b plusz 1, per 3, tört vége; hatványon")?; return Ok(()); } diff --git a/tests/Languages/hu/SimpleSpeak/multiline.rs b/tests/Languages/hu/SimpleSpeak/multiline.rs index 373776c96..5c529693c 100644 --- a/tests/Languages/hu/SimpleSpeak/multiline.rs +++ b/tests/Languages/hu/SimpleSpeak/multiline.rs @@ -13,28 +13,25 @@ fn case_1() -> Result<()> { - 1 if x<0 + 1 ha x<0 - 0 if x=0 + 0 ha x=0 - 1 if x>0 + 1 ha x>0 "; - test("hu", "SimpleSpeak", expr, "f of x is equal to; 3 cases; \ - case 1; negative 1 if x; is less than 0; \ - case 2; 0 if x, is equal to 0; \ - case 3; 1 if x, is greater than 0")?; + test("hu", "SimpleSpeak", expr, "f x egyenlő; 3 eset; eset 1; negatív 1 ha x; kisebb, mint 0; eset 2; 0 ha x, egyenlő 0; eset 3; 1 ha x, nagyobb, mint 0")?; return Ok(()); } @@ -73,8 +70,6 @@ fn equation_1() -> Result<()> { "; - test("hu", "SimpleSpeak", expr, "2 equations; \ - equation 1; x plus y, is equal to 7; \ - equation 2; 2 x plus 3 y; is equal to 17")?; + test("hu", "SimpleSpeak", expr, "2 egyenlet; egyenlet 1; x plusz y, egyenlő 7; egyenlet 2; 2 x plusz 3 y; egyenlő 17")?; return Ok(()); } diff --git a/tests/Languages/hu/SimpleSpeak/sets.rs b/tests/Languages/hu/SimpleSpeak/sets.rs index a8b900291..57feca756 100644 --- a/tests/Languages/hu/SimpleSpeak/sets.rs +++ b/tests/Languages/hu/SimpleSpeak/sets.rs @@ -7,7 +7,7 @@ fn complex() -> Result<()> { let expr = " "; - test("hu", "SimpleSpeak", expr, "the complex numbers")?; + test("hu", "SimpleSpeak", expr, "a komplex számok halmaza")?; return Ok(()); } @@ -18,7 +18,7 @@ fn natural() -> Result<()> { let expr = " "; - test("hu", "SimpleSpeak", expr, "the natural numbers")?; + test("hu", "SimpleSpeak", expr, "a természetes számok halmaza")?; return Ok(()); } @@ -29,7 +29,7 @@ fn rationals() -> Result<()> { let expr = " "; - test("hu", "SimpleSpeak", expr, "the rational numbers")?; + test("hu", "SimpleSpeak", expr, "a racionális számok halmaza")?; return Ok(()); } @@ -40,7 +40,7 @@ fn reals() -> Result<()> { let expr = " "; - test("hu", "SimpleSpeak", expr, "the real numbers")?; + test("hu", "SimpleSpeak", expr, "a valós számok halmaza")?; return Ok(()); } @@ -51,7 +51,7 @@ fn integers() -> Result<()> { let expr = " "; - test("hu", "SimpleSpeak", expr, "the integers")?; + test("hu", "SimpleSpeak", expr, "az egész számok halmaza")?; return Ok(()); } @@ -67,7 +67,7 @@ fn msup_complex() -> Result<()> { 2 "; - test("hu", "SimpleSpeak", expr, "C 2")?; + test("hu", "SimpleSpeak", expr, "komplex számhalmaz 2")?; return Ok(()); } @@ -81,7 +81,7 @@ fn msup_natural() -> Result<()> { 2 "; - test("hu", "SimpleSpeak", expr, "N 2")?; + test("hu", "SimpleSpeak", expr, "természetes számhalmaz 2")?; return Ok(()); } @@ -95,7 +95,7 @@ fn msup_rationals() -> Result<()> { 2 "; - test("hu", "SimpleSpeak", expr, "Q 2")?; + test("hu", "SimpleSpeak", expr, "racionális számhalmaz 2")?; return Ok(()); } @@ -109,7 +109,7 @@ fn msup_reals() -> Result<()> { 3 "; - test("hu", "SimpleSpeak", expr, "R 3")?; + test("hu", "SimpleSpeak", expr, "valós számhalmaz 3")?; return Ok(()); } @@ -123,7 +123,7 @@ fn msup_integers() -> Result<()> { 4 "; - test("hu", "SimpleSpeak", expr, "Z 4")?; + test("hu", "SimpleSpeak", expr, "egész számhalmaz 4")?; return Ok(()); } @@ -137,7 +137,7 @@ fn msup_positive_integers() -> Result<()> { + "; - test("hu", "SimpleSpeak", expr, "the positive integers")?; + test("hu", "SimpleSpeak", expr, "pozitív egész számok")?; return Ok(()); } @@ -151,7 +151,7 @@ fn msup_negative_integers() -> Result<()> { - "; - test("hu", "SimpleSpeak", expr, "the negative integers")?; + test("hu", "SimpleSpeak", expr, "negatív egész számok")?; return Ok(()); } @@ -165,7 +165,7 @@ fn msup_positive_rationals() -> Result<()> { + "; - test("hu", "SimpleSpeak", expr, "the positive rational numbers")?; + test("hu", "SimpleSpeak", expr, "pozitív racionális számok")?; return Ok(()); } @@ -179,7 +179,7 @@ fn msup_negative_rationals() -> Result<()> { - "; - test("hu", "SimpleSpeak", expr, "the negative rational numbers")?; + test("hu", "SimpleSpeak", expr, "negatív racionális számok")?; return Ok(()); } @@ -190,7 +190,7 @@ fn empty_set() -> Result<()> { let expr = " { } "; - test("hu", "SimpleSpeak", expr, "the empty set")?; + test("hu", "SimpleSpeak", expr, "az üres halmaz")?; return Ok(()); } @@ -201,7 +201,7 @@ fn single_element_set() -> Result<()> { let expr = " { 12} "; - test("hu", "SimpleSpeak", expr, "the set 12")?; + test("hu", "SimpleSpeak", expr, "a(z) 12 halmaz")?; return Ok(()); } @@ -212,7 +212,7 @@ fn multiple_element_set() -> Result<()> { let expr = " { 5 , 10 , 15 } "; - test("hu", "SimpleSpeak", expr, "the set 5 comma, 10 comma, 15")?; + test("hu", "SimpleSpeak", expr, "a(z) 5 vessző, 10 vessző, 15 halmaz")?; return Ok(()); } @@ -223,7 +223,7 @@ fn set_with_colon() -> Result<()> { let expr = " { x:x>2 } "; - test("hu", "SimpleSpeak", expr, "the set of all x such that x is greater than 2")?; + test("hu", "SimpleSpeak", expr, "x melyekre teljesül, hogy minden x nagyobb, mint 2")?; return Ok(()); } @@ -234,7 +234,7 @@ fn set_with_bar() -> Result<()> { let expr = " { x|x>2 } "; - test("hu", "SimpleSpeak", expr, "the set of all x such that x is greater than 2")?; + test("hu", "SimpleSpeak", expr, "x melyekre teljesül, hogy minden x nagyobb, mint 2")?; return Ok(()); } @@ -245,7 +245,7 @@ fn element_alone() -> Result<()> { let expr = " 3+2i "; - test("hu", "SimpleSpeak", expr, "3 plus 2 i, is not an element of, the real numbers")?; + test("hu", "SimpleSpeak", expr, "3 plusz 2 i, nem eleme ennek:, a valós számok halmaza")?; return Ok(()); } @@ -264,7 +264,7 @@ fn element_under_sum() -> Result<()> { "; test("hu", "SimpleSpeak", expr, - "the sum over i is an element of the integers of; fraction, 1 over, i squared, end fraction")?; + "összeg alatta i eleme ennek:, az egész számok halmaza; tört, 1 per, i a négyzeten, tört vége")?; return Ok(()); } @@ -285,7 +285,7 @@ fn complicated_set_with_colon() -> Result<()> { 7 } "; - test("hu", "SimpleSpeak", expr, "the set of all x an element of the integers such that 2 is less than x is less than 7")?; + test("hu", "SimpleSpeak", expr, "x eleme ennek:, az egész számok halmaza melyekre teljesül, hogy minden 2 kisebb, mint x kisebb, mint 7")?; return Ok(()); } @@ -298,11 +298,11 @@ fn complicated_set_with_mtext() -> Result<()> { { x | - x  is an even number + x  egy páros szám } "; test("hu", "SimpleSpeak", expr, - "the set of all x an element of the natural numbers such that x is an even number")?; + "x eleme ennek:, a természetes számok halmaza melyekre teljesül, hogy minden x egy páros szám")?; return Ok(()); } diff --git a/tests/Languages/hu/SimpleSpeak/subscripts.rs b/tests/Languages/hu/SimpleSpeak/subscripts.rs index aaed05b4f..d7e238f91 100644 --- a/tests/Languages/hu/SimpleSpeak/subscripts.rs +++ b/tests/Languages/hu/SimpleSpeak/subscripts.rs @@ -6,8 +6,8 @@ use anyhow::Result; fn msub_simple() -> Result<()> { let expr = " x 1 "; test_prefs("hu", "SimpleSpeak", vec![("Verbosity", "Terse")], expr, "x 1")?; - test_prefs("hu", "SimpleSpeak", vec![("Verbosity", "Medium")], expr, "x sub 1")?; - test_prefs("hu", "SimpleSpeak", vec![("Verbosity", "Verbose")], expr, "x sub 1")?; + test_prefs("hu", "SimpleSpeak", vec![("Verbosity", "Medium")], expr, "x alsó index 1")?; + test_prefs("hu", "SimpleSpeak", vec![("Verbosity", "Verbose")], expr, "x alsó index 1")?; return Ok(()); } @@ -16,7 +16,7 @@ fn msub_simple() -> Result<()> { #[test] fn msub_not_simple() -> Result<()> { let expr = " x 1.2 "; - test_prefs("hu", "SimpleSpeak", vec![("Verbosity", "Terse")], expr, "x sub 12")?; + test_prefs("hu", "SimpleSpeak", vec![("Verbosity", "Terse")], expr, "x alsó index 12")?; return Ok(()); } @@ -25,7 +25,7 @@ fn msub_not_simple() -> Result<()> { #[test] fn msubsup_not_simple() -> Result<()> { let expr = " x 1.2 3 "; - test_prefs("hu", "SimpleSpeak", vec![("Verbosity", "Terse")], expr, "x sub 12, cubed")?; + test_prefs("hu", "SimpleSpeak", vec![("Verbosity", "Terse")], expr, "x alsó index 12, a köbön")?; return Ok(()); } @@ -34,8 +34,8 @@ fn msubsup_not_simple() -> Result<()> { #[test] fn msub_simple_mi() -> Result<()> { let expr = " x i "; - test_prefs("hu", "SimpleSpeak", vec![("Verbosity", "Terse")], expr, "x sub i")?; - test_prefs("hu", "SimpleSpeak", vec![("Verbosity", "Verbose")], expr, "x sub i")?; + test_prefs("hu", "SimpleSpeak", vec![("Verbosity", "Terse")], expr, "x alsó index i")?; + test_prefs("hu", "SimpleSpeak", vec![("Verbosity", "Verbose")], expr, "x alsó index i")?; return Ok(()); } @@ -44,8 +44,8 @@ fn msub_simple_mi() -> Result<()> { #[test] fn msub_simple_number_follows() -> Result<()> { let expr = " x 1 102 "; - test_prefs("hu", "SimpleSpeak", vec![("Verbosity", "Terse")], expr, "x 1, 10 squared")?; - test_prefs("hu", "SimpleSpeak", vec![("Verbosity", "Verbose")], expr, "x sub 1, 10 squared")?; + test_prefs("hu", "SimpleSpeak", vec![("Verbosity", "Terse")], expr, "x 1, 10 a négyzeten")?; + test_prefs("hu", "SimpleSpeak", vec![("Verbosity", "Verbose")], expr, "x alsó index 1; 10 a négyzeten")?; return Ok(()); } @@ -54,8 +54,8 @@ fn msub_simple_number_follows() -> Result<()> { #[test] fn msub_simple_non_number_follows() -> Result<()> { let expr = " x 1 2 "; - test_prefs("hu", "SimpleSpeak", vec![("Verbosity", "Terse")], expr, "x 1, squared")?; - test_prefs("hu", "SimpleSpeak", vec![("Verbosity", "Verbose")], expr, "x sub 1, squared")?; + test_prefs("hu", "SimpleSpeak", vec![("Verbosity", "Terse")], expr, "x 1, a négyzeten")?; + test_prefs("hu", "SimpleSpeak", vec![("Verbosity", "Verbose")], expr, "x alsó index 1, a négyzeten")?; return Ok(()); } @@ -64,8 +64,8 @@ fn msub_simple_non_number_follows() -> Result<()> { #[test] fn msubsup_simple() -> Result<()> { let expr = " x 1 x,2 "; - test_prefs("hu", "SimpleSpeak", vec![("Verbosity", "Terse")], expr, "x 1, x squared")?; - test_prefs("hu", "SimpleSpeak", vec![("Verbosity", "Verbose")], expr, "x sub 1, x squared")?; + test_prefs("hu", "SimpleSpeak", vec![("Verbosity", "Terse")], expr, "x 1, x a négyzeten")?; + test_prefs("hu", "SimpleSpeak", vec![("Verbosity", "Verbose")], expr, "x alsó index 1; x a négyzeten")?; return Ok(()); } diff --git a/tests/Languages/hu/alphabets.rs b/tests/Languages/hu/alphabets.rs index 9d5f1a598..7fcdecbda 100644 --- a/tests/Languages/hu/alphabets.rs +++ b/tests/Languages/hu/alphabets.rs @@ -8,11 +8,11 @@ use anyhow::Result; #[test] fn special_alphabet_chars() -> Result<()> { let expr = " ,"; - test("hu", "SimpleSpeak", expr, "fraktur cap h comma, fraktur cap c")?; + test("hu", "SimpleSpeak", expr, "fraktur nagy h vessző, fraktur nagy c")?; let expr = " ,"; - test("hu", "SimpleSpeak", expr, "double struck cap h, comma, double struck cap pi")?; + test("hu", "SimpleSpeak", expr, "dupla leütésű nagy h, vessző; dupla leütésű nagy pí")?; let expr = " ,"; - test("hu", "SimpleSpeak", expr, "script cap i comma, script cap m")?; + test("hu", "SimpleSpeak", expr, "script nagy i vessző, script nagy m")?; return Ok(()); } @@ -21,14 +21,14 @@ fn special_alphabet_chars() -> Result<()> { #[test] fn greek() -> Result<()> { let expr = " Α,Ω"; - test("hu", "SimpleSpeak", expr, "cap alpha comma, cap omega")?; + test("hu", "SimpleSpeak", expr, "nagy alfa vessző, nagy omega")?; let expr = " α,ω"; - test("hu", "SimpleSpeak", expr, "alpha comma, omega")?; + test("hu", "SimpleSpeak", expr, "alfa vessző, omega")?; // MathType private space versions let expr = " ,"; - test("hu", "SimpleSpeak", expr, "double struck cap delta, comma, double struck cap upsilon")?; + test("hu", "SimpleSpeak", expr, "dupla leütésű nagy delta, vessző; dupla leütésű nagy üpszilon")?; let expr = " α,ω"; - test("hu", "SimpleSpeak", expr, "alpha comma, omega")?; + test("hu", "SimpleSpeak", expr, "alfa vessző, omega")?; return Ok(()); } @@ -37,7 +37,7 @@ fn greek() -> Result<()> { #[test] fn cap_cyrillic() -> Result<()> { let expr = " А,Я"; - test("hu", "SimpleSpeak", expr, "cap a comma, cap ya")?; + test("hu", "SimpleSpeak", expr, "nagybetű а vessző, nagybetű ya")?; return Ok(()); } @@ -46,7 +46,7 @@ fn cap_cyrillic() -> Result<()> { #[test] fn parenthesized() -> Result<()> { let expr = " ,"; - test("hu", "SimpleSpeak", expr, "parenthesized eigh comma, parenthesized z")?; + test("hu", "SimpleSpeak", expr, "zárójeles a vessző, zárójeles z")?; return Ok(()); } @@ -55,11 +55,11 @@ fn parenthesized() -> Result<()> { #[test] fn circled() -> Result<()> { let expr = " ,"; - test("hu", "SimpleSpeak", expr, "circled cap eigh comma, circled cap z")?; + test("hu", "SimpleSpeak", expr, "bekarikázott nagy a, vessző, bekarikázott nagy z")?; let expr = " 🅐,🅩"; - test("hu", "SimpleSpeak", expr, "black circled cap eigh, comma, black circled cap z")?; + test("hu", "SimpleSpeak", expr, "fekete körrel jelölt nagy a, vessző; fekete körrel jelölt nagy z")?; let expr = " ,"; - test("hu", "SimpleSpeak", expr, "circled eigh comma, circled z")?; + test("hu", "SimpleSpeak", expr, "bekarikázott a vessző, bekarikázott z")?; return Ok(()); } @@ -68,14 +68,14 @@ fn circled() -> Result<()> { #[test] fn fraktur() -> Result<()> { let expr = " 𝔄,𝔜"; - test("hu", "SimpleSpeak", expr, "fraktur cap eigh comma, fraktur cap y")?; + test("hu", "SimpleSpeak", expr, "fraktur nagy a vessző, fraktur nagy y")?; let expr = " 𝔞,𝔷"; - test("hu", "SimpleSpeak", expr, "fraktur eigh comma, fraktur z")?; + test("hu", "SimpleSpeak", expr, "fraktur a vessző, fraktur z")?; // MathType private space versions let expr = " ,"; - test("hu", "SimpleSpeak", expr, "fraktur cap eigh comma, fraktur cap y")?; + test("hu", "SimpleSpeak", expr, "fraktur nagy a vessző, fraktur nagy y")?; let expr = " ,"; - test("hu", "SimpleSpeak", expr, "fraktur eigh comma, fraktur z")?; + test("hu", "SimpleSpeak", expr, "fraktur a vessző, fraktur z")?; return Ok(()); } @@ -84,14 +84,14 @@ fn fraktur() -> Result<()> { #[test] fn bold_fraktur() -> Result<()> { let expr = " 𝕬,𝖅"; - test("hu", "SimpleSpeak", expr, "fraktur bold cap eigh, comma, fraktur bold cap z")?; + test("hu", "SimpleSpeak", expr, "fraktur félkövér nagy a, vessző; fraktur félkövér nagy z")?; let expr = " 𝖆,𝖟"; - test("hu", "SimpleSpeak", expr, "fraktur bold eigh comma, fraktur bold z")?; + test("hu", "SimpleSpeak", expr, "fraktur félkövér a, vessző, fraktur félkövér z")?; // MathType private space versions let expr = " ,"; - test("hu", "SimpleSpeak", expr, "fraktur bold cap eigh, comma, fraktur bold cap z")?; + test("hu", "SimpleSpeak", expr, "fraktur félkövér nagy a, vessző; fraktur félkövér nagy z")?; let expr = " ,"; - test("hu", "SimpleSpeak", expr, "fraktur bold eigh comma, fraktur bold z")?; + test("hu", "SimpleSpeak", expr, "fraktur félkövér a, vessző, fraktur félkövér z")?; return Ok(()); } @@ -100,18 +100,18 @@ fn bold_fraktur() -> Result<()> { #[test] fn double_struck() -> Result<()> { let expr = " 𝔸,𝕐"; - test("hu", "SimpleSpeak", expr, "double struck cap eigh, comma, double struck cap y")?; + test("hu", "SimpleSpeak", expr, "dupla leütésű nagy a, vessző; dupla leütésű nagy y")?; let expr = " 𝕒,𝕫"; - test("hu", "SimpleSpeak", expr, "double struck eigh comma, double struck z")?; + test("hu", "SimpleSpeak", expr, "dupla leütésű a, vessző, dupla leütésű z")?; let expr = " 𝟘,𝟡"; - test("hu", "SimpleSpeak", expr, "double struck 0 comma, double struck 9")?; + test("hu", "SimpleSpeak", expr, "dupla leütésű 0, vessző, dupla leütésű 9")?; // MathType private space versions let expr = " ,"; - test("hu", "SimpleSpeak", expr, "double struck cap eigh, comma, double struck cap y")?; + test("hu", "SimpleSpeak", expr, "dupla leütésű nagy a, vessző; dupla leütésű nagy y")?; let expr = " ,"; - test("hu", "SimpleSpeak", expr, "double struck eigh comma, double struck z")?; + test("hu", "SimpleSpeak", expr, "dupla leütésű a, vessző, dupla leütésű z")?; let expr = " ,"; - test("hu", "SimpleSpeak", expr, "double struck 0 comma, double struck 9")?; + test("hu", "SimpleSpeak", expr, "dupla leütésű 0, vessző, dupla leütésű 9")?; return Ok(()); } @@ -120,14 +120,14 @@ fn double_struck() -> Result<()> { #[test] fn script() -> Result<()> { let expr = " 𝒜,𝒵"; - test("hu", "SimpleSpeak", expr, "script cap eigh comma, script cap z")?; + test("hu", "SimpleSpeak", expr, "script nagy a vessző, script nagy z")?; let expr = " 𝒶,𝓏"; - test("hu", "SimpleSpeak", expr, "script eigh comma, script z")?; + test("hu", "SimpleSpeak", expr, "script a vessző, script z")?; // MathType private space versions let expr = " ,"; - test("hu", "SimpleSpeak", expr, "script cap eigh comma, script cap z")?; + test("hu", "SimpleSpeak", expr, "script nagy a vessző, script nagy z")?; let expr = " ,"; - test("hu", "SimpleSpeak", expr, "script eigh comma, script z")?; + test("hu", "SimpleSpeak", expr, "script a vessző, script z")?; return Ok(()); } @@ -136,14 +136,14 @@ fn script() -> Result<()> { #[test] fn bold_script() -> Result<()> { let expr = " 𝓐,𝓩"; - test("hu", "SimpleSpeak", expr, "script bold cap eigh, comma, script bold cap z")?; + test("hu", "SimpleSpeak", expr, "script félkövér nagy a, vessző; script félkövér nagy z")?; let expr = " 𝓪,𝔃"; - test("hu", "SimpleSpeak", expr, "script bold eigh comma, script bold z")?; + test("hu", "SimpleSpeak", expr, "script félkövér a, vessző, script félkövér z")?; // MathType private space versions let expr = " ,"; - test("hu", "SimpleSpeak", expr, "script bold cap eigh, comma, script bold cap z")?; + test("hu", "SimpleSpeak", expr, "script félkövér nagy a, vessző; script félkövér nagy z")?; let expr = " ,"; - test("hu", "SimpleSpeak", expr, "script bold eigh comma, script bold z")?; + test("hu", "SimpleSpeak", expr, "script félkövér a, vessző, script félkövér z")?; return Ok(()); } @@ -152,14 +152,14 @@ fn bold_script() -> Result<()> { #[test] fn bold() -> Result<()> { let expr = " 𝐀,𝐙"; - test("hu", "SimpleSpeak", expr, "bold cap eigh comma, bold cap z")?; + test("hu", "SimpleSpeak", expr, "félkövér nagy a, vessző, félkövér nagy z")?; let expr = " 𝐚,𝐳"; - test("hu", "SimpleSpeak", expr, "bold eigh comma, bold z")?; + test("hu", "SimpleSpeak", expr, "félkövér a vessző, félkövér z")?; // MathType private space versions let expr = " ,"; - test("hu", "SimpleSpeak", expr, "bold cap eigh comma, bold cap z")?; + test("hu", "SimpleSpeak", expr, "félkövér nagy a, vessző, félkövér nagy z")?; let expr = " ,"; - test("hu", "SimpleSpeak", expr, "bold eigh comma, bold z")?; + test("hu", "SimpleSpeak", expr, "félkövér a vessző, félkövér z")?; return Ok(()); } @@ -168,14 +168,14 @@ fn bold() -> Result<()> { #[test] fn italic() -> Result<()> { let expr = " 𝐴,𝑍"; - test("hu", "SimpleSpeak", expr, "cap eigh comma, cap z")?; + test("hu", "SimpleSpeak", expr, "nagy a vessző, nagy z")?; let expr = " 𝑎,𝑧"; - test("hu", "SimpleSpeak", expr, "eigh comma, z")?; + test("hu", "SimpleSpeak", expr, "a vessző, z")?; // MathType private space versions let expr = " ,"; - test("hu", "SimpleSpeak", expr, "cap eigh comma, cap z")?; + test("hu", "SimpleSpeak", expr, "nagy a vessző, nagy z")?; let expr = " ,"; - test("hu", "SimpleSpeak", expr, "eigh comma, z")?; + test("hu", "SimpleSpeak", expr, "a vessző, z")?; return Ok(()); } @@ -184,14 +184,14 @@ fn italic() -> Result<()> { #[test] fn sans_serif() -> Result<()> { let expr = " 𝖠,𝖹"; - test("hu", "SimpleSpeak", expr, "cap eigh comma, cap z")?; + test("hu", "SimpleSpeak", expr, "nagy a vessző, nagy z")?; let expr = " 𝖺,𝗓"; - test("hu", "SimpleSpeak", expr, "eigh comma, z")?; + test("hu", "SimpleSpeak", expr, "a vessző, z")?; // MathType private space versions let expr = " ,"; - test("hu", "SimpleSpeak", expr, "cap eigh comma, cap z")?; + test("hu", "SimpleSpeak", expr, "nagy a vessző, nagy z")?; let expr = " ,"; - test("hu", "SimpleSpeak", expr, "eigh comma, z")?; + test("hu", "SimpleSpeak", expr, "a vessző, z")?; return Ok(()); } @@ -200,14 +200,14 @@ fn sans_serif() -> Result<()> { #[test] fn sans_serif_bold() -> Result<()> { let expr = " 𝗔,𝗭"; - test("hu", "SimpleSpeak", expr, "bold cap eigh comma, bold cap z")?; + test("hu", "SimpleSpeak", expr, "félkövér nagy a, vessző, félkövér nagy z")?; let expr = " 𝗮,𝘇"; - test("hu", "SimpleSpeak", expr, "bold eigh comma, bold z")?; + test("hu", "SimpleSpeak", expr, "félkövér a vessző, félkövér z")?; // MathType private space versions let expr = " ,"; - test("hu", "SimpleSpeak", expr, "bold cap eigh comma, bold cap z")?; + test("hu", "SimpleSpeak", expr, "félkövér nagy a, vessző, félkövér nagy z")?; let expr = " ,"; - test("hu", "SimpleSpeak", expr, "bold eigh comma, bold z")?; + test("hu", "SimpleSpeak", expr, "félkövér a vessző, félkövér z")?; return Ok(()); } @@ -216,14 +216,14 @@ fn sans_serif_bold() -> Result<()> { #[test] fn sans_serif_italic() -> Result<()> { let expr = " 𝘈,𝘡"; - test("hu", "SimpleSpeak", expr, "cap eigh comma, cap z")?; + test("hu", "SimpleSpeak", expr, "nagy a vessző, nagy z")?; let expr = " 𝘢,𝘻"; - test("hu", "SimpleSpeak", expr, "eigh comma, z")?; + test("hu", "SimpleSpeak", expr, "a vessző, z")?; // MathType private space versions let expr = " ,"; - test("hu", "SimpleSpeak", expr, "cap eigh comma, cap z")?; + test("hu", "SimpleSpeak", expr, "nagy a vessző, nagy z")?; let expr = " ,"; - test("hu", "SimpleSpeak", expr, "eigh comma, z")?; + test("hu", "SimpleSpeak", expr, "a vessző, z")?; return Ok(()); } @@ -232,14 +232,14 @@ fn sans_serif_italic() -> Result<()> { #[test] fn sans_serif_bold_italic() -> Result<()> { let expr = " 𝘼,𝙕"; - test("hu", "SimpleSpeak", expr, "bold cap eigh comma, bold cap z")?; + test("hu", "SimpleSpeak", expr, "félkövér nagy a, vessző, félkövér nagy z")?; let expr = " 𝙖,𝙯"; - test("hu", "SimpleSpeak", expr, "bold eigh comma, bold z")?; + test("hu", "SimpleSpeak", expr, "félkövér a vessző, félkövér z")?; // MathType private space versions let expr = " ,"; - test("hu", "SimpleSpeak", expr, "bold cap eigh comma, bold cap z")?; + test("hu", "SimpleSpeak", expr, "félkövér nagy a, vessző, félkövér nagy z")?; let expr = " ,"; - test("hu", "SimpleSpeak", expr, "bold eigh comma, bold z")?; + test("hu", "SimpleSpeak", expr, "félkövér a vessző, félkövér z")?; return Ok(()); } @@ -248,14 +248,14 @@ fn sans_serif_bold_italic() -> Result<()> { #[test] fn monospace() -> Result<()> { let expr = " 𝙰,𝚉"; - test("hu", "SimpleSpeak", expr, "cap eigh comma, cap z")?; + test("hu", "SimpleSpeak", expr, "nagy a vessző, nagy z")?; let expr = " 𝚊,𝚣"; - test("hu", "SimpleSpeak", expr, "eigh comma, z")?; + test("hu", "SimpleSpeak", expr, "a vessző, z")?; // MathType private space versions let expr = " ,"; - test("hu", "SimpleSpeak", expr, "cap eigh comma, cap z")?; + test("hu", "SimpleSpeak", expr, "nagy a vessző, nagy z")?; let expr = " ,"; - test("hu", "SimpleSpeak", expr, "eigh comma, z")?; + test("hu", "SimpleSpeak", expr, "a vessző, z")?; return Ok(()); } @@ -265,14 +265,14 @@ fn monospace() -> Result<()> { #[test] fn bold_greek() -> Result<()> { let expr = " 𝚨,𝛀"; - test("hu", "SimpleSpeak", expr, "bold cap alpha comma, bold cap omega")?; + test("hu", "SimpleSpeak", expr, "félkövér nagy alfa, vessző, félkövér nagy omega")?; let expr = " 𝛂,𝛚"; - test("hu", "SimpleSpeak", expr, "bold alpha comma, bold omega")?; + test("hu", "SimpleSpeak", expr, "félkövér alfa vessző, félkövér omega")?; // MathType private space versions let expr = " ,"; - test("hu", "SimpleSpeak", expr, "bold cap alpha comma, bold cap omega")?; + test("hu", "SimpleSpeak", expr, "félkövér nagy alfa, vessző, félkövér nagy omega")?; let expr = " ,"; - test("hu", "SimpleSpeak", expr, "bold alpha comma, bold omega")?; + test("hu", "SimpleSpeak", expr, "félkövér alfa vessző, félkövér omega")?; return Ok(()); } @@ -281,10 +281,10 @@ fn bold_greek() -> Result<()> { #[test] fn bold_greek_others() -> Result<()> { let expr = " 𝛛,𝛡"; - test("hu", "SimpleSpeak", expr, "bold partial derivative, comma, bold pi")?; + test("hu", "SimpleSpeak", expr, "félkövér parciális derivált, vessző, félkövér pí")?; // MathType private space versions let expr = " ,"; - test("hu", "SimpleSpeak", expr, "bold partial derivative, comma, bold pi")?; + test("hu", "SimpleSpeak", expr, "félkövér parciális derivált, vessző, félkövér pí")?; return Ok(()); } @@ -294,14 +294,14 @@ fn bold_greek_others() -> Result<()> { #[test] fn italic_greek() -> Result<()> { let expr = " 𝛢,𝛺"; - test("hu", "SimpleSpeak", expr, "cap alpha comma, cap omega")?; + test("hu", "SimpleSpeak", expr, "nagy alfa vessző, nagy omega")?; let expr = " 𝛼,𝜔"; - test("hu", "SimpleSpeak", expr, "alpha comma, omega")?; + test("hu", "SimpleSpeak", expr, "alfa vessző, omega")?; // MathType private space versions let expr = " ,"; - test("hu", "SimpleSpeak", expr, "cap alpha comma, cap omega")?; + test("hu", "SimpleSpeak", expr, "nagy alfa vessző, nagy omega")?; let expr = " ,"; - test("hu", "SimpleSpeak", expr, "alpha comma, omega")?; + test("hu", "SimpleSpeak", expr, "alfa vessző, omega")?; return Ok(()); } @@ -310,10 +310,10 @@ fn italic_greek() -> Result<()> { #[test] fn italic_greek_others() -> Result<()> { let expr = " 𝜕,𝜛"; - test("hu", "SimpleSpeak", expr, "partial derivative comma, pi")?; + test("hu", "SimpleSpeak", expr, "parciális derivált, vessző, pí")?; // MathType private space versions let expr = " ,"; - test("hu", "SimpleSpeak", expr, "partial derivative comma, pi")?; + test("hu", "SimpleSpeak", expr, "parciális derivált, vessző, pí")?; return Ok(()); } @@ -322,14 +322,14 @@ fn italic_greek_others() -> Result<()> { #[test] fn bold_italic_greek() -> Result<()> { let expr = " 𝜜,𝜴"; - test("hu", "SimpleSpeak", expr, "bold cap alpha comma, bold cap omega")?; + test("hu", "SimpleSpeak", expr, "félkövér nagy alfa, vessző, félkövér nagy omega")?; let expr = " 𝜶,𝝎"; - test("hu", "SimpleSpeak", expr, "bold alpha comma, bold omega")?; + test("hu", "SimpleSpeak", expr, "félkövér alfa vessző, félkövér omega")?; // MathType private space versions let expr = " ,"; - test("hu", "SimpleSpeak", expr, "bold cap alpha comma, bold cap omega")?; + test("hu", "SimpleSpeak", expr, "félkövér nagy alfa, vessző, félkövér nagy omega")?; let expr = " ,"; - test("hu", "SimpleSpeak", expr, "bold alpha comma, bold omega")?; + test("hu", "SimpleSpeak", expr, "félkövér alfa vessző, félkövér omega")?; return Ok(()); } @@ -338,10 +338,10 @@ fn bold_italic_greek() -> Result<()> { #[test] fn bold_italic_greek_others() -> Result<()> { let expr = " 𝝏,𝝕"; - test("hu", "SimpleSpeak", expr, "bold partial derivative, comma, bold pi")?; + test("hu", "SimpleSpeak", expr, "félkövér parciális derivált, vessző, félkövér pí")?; // MathType private space versions let expr = " ,"; - test("hu", "SimpleSpeak", expr, "bold partial derivative, comma, bold pi")?; + test("hu", "SimpleSpeak", expr, "félkövér parciális derivált, vessző, félkövér pí")?; return Ok(()); } @@ -350,14 +350,14 @@ fn bold_italic_greek_others() -> Result<()> { #[test] fn sans_serif_bold_greek() -> Result<()> { let expr = " 𝝖,𝝮"; - test("hu", "SimpleSpeak", expr, "bold cap alpha comma, bold cap omega")?; + test("hu", "SimpleSpeak", expr, "félkövér nagy alfa, vessző, félkövér nagy omega")?; let expr = " 𝝰,𝞈"; - test("hu", "SimpleSpeak", expr, "bold alpha comma, bold omega")?; + test("hu", "SimpleSpeak", expr, "félkövér alfa vessző, félkövér omega")?; // MathType private space versions let expr = " ,"; - test("hu", "SimpleSpeak", expr, "bold cap alpha comma, bold cap omega")?; + test("hu", "SimpleSpeak", expr, "félkövér nagy alfa, vessző, félkövér nagy omega")?; let expr = " ,"; - test("hu", "SimpleSpeak", expr, "bold alpha comma, bold omega")?; + test("hu", "SimpleSpeak", expr, "félkövér alfa vessző, félkövér omega")?; return Ok(()); } @@ -366,10 +366,10 @@ fn sans_serif_bold_greek() -> Result<()> { #[test] fn sans_serif_bold_greek_others() -> Result<()> { let expr = " 𝞉,𝞏"; - test("hu", "SimpleSpeak", expr, "bold partial derivative, comma, bold pi")?; + test("hu", "SimpleSpeak", expr, "félkövér parciális derivált, vessző, félkövér pí")?; // MathType private space versions let expr = " ,"; - test("hu", "SimpleSpeak", expr, "bold partial derivative, comma, bold pi")?; + test("hu", "SimpleSpeak", expr, "félkövér parciális derivált, vessző, félkövér pí")?; return Ok(()); } @@ -378,14 +378,14 @@ fn sans_serif_bold_greek_others() -> Result<()> { #[test] fn sans_serif_bold_italic_greek() -> Result<()> { let expr = " 𝞐,𝞨"; - test("hu", "SimpleSpeak", expr, "bold cap alpha comma, bold cap omega")?; + test("hu", "SimpleSpeak", expr, "félkövér nagy alfa, vessző, félkövér nagy omega")?; let expr = " 𝞪,𝟂"; - test("hu", "SimpleSpeak", expr, "bold alpha comma, bold omega")?; + test("hu", "SimpleSpeak", expr, "félkövér alfa vessző, félkövér omega")?; // MathType private space versions let expr = " ,"; - test("hu", "SimpleSpeak", expr, "bold cap alpha comma, bold cap omega")?; + test("hu", "SimpleSpeak", expr, "félkövér nagy alfa, vessző, félkövér nagy omega")?; let expr = " ,"; - test("hu", "SimpleSpeak", expr, "bold alpha comma, bold omega")?; + test("hu", "SimpleSpeak", expr, "félkövér alfa vessző, félkövér omega")?; return Ok(()); } @@ -394,10 +394,10 @@ fn sans_serif_bold_italic_greek() -> Result<()> { #[test] fn sans_serif_bold_italic_greek_others() -> Result<()> { let expr = " 𝟃,𝟉"; - test("hu", "SimpleSpeak", expr, "bold partial derivative, comma, bold pi")?; + test("hu", "SimpleSpeak", expr, "félkövér parciális derivált, vessző, félkövér pí")?; // MathType private space versions let expr = " ,"; - test("hu", "SimpleSpeak", expr, "bold partial derivative, comma, bold pi")?; + test("hu", "SimpleSpeak", expr, "félkövér parciális derivált, vessző, félkövér pí")?; return Ok(()); } @@ -406,7 +406,7 @@ fn sans_serif_bold_italic_greek_others() -> Result<()> { #[test] fn pua_regular() -> Result<()> { let expr = " ,"; - test("hu", "SimpleSpeak", expr, "cap eigh comma, cap z")?; + test("hu", "SimpleSpeak", expr, "nagy a vessző, nagy z")?; return Ok(()); } @@ -415,7 +415,7 @@ fn pua_regular() -> Result<()> { #[test] fn turned() -> Result<()> { let expr = " ,"; - test("hu", "SimpleSpeak", expr, "turned cap f comma, turned sans-serif cap y")?; + test("hu", "SimpleSpeak", expr, "fordított nagy f, vessző; fordított talpatlan nagy y")?; return Ok(()); } @@ -423,8 +423,8 @@ fn turned() -> Result<()> { // AI generated #[test] fn unicode_typo_regressions() -> Result<()> { - test("hu", "SimpleSpeak", "", "to the i-th power")?; - test("hu", "SimpleSpeak", "", "conjunction")?; + test("hu", "SimpleSpeak", "", "i-edik hatványig")?; + test("hu", "SimpleSpeak", "", "összekapcsolás")?; Ok(()) } @@ -432,15 +432,15 @@ fn unicode_typo_regressions() -> Result<()> { #[test] fn enclosed_numbers() -> Result<()> { let expr = " ,"; - test("hu", "SimpleSpeak", expr, "circled 1 comma, circled 9")?; + test("hu", "SimpleSpeak", expr, "bekarikázott 1 vessző, bekarikázott 9")?; let expr = " ,"; - test("hu", "SimpleSpeak", expr, "black circled one comma, circled number fifty")?; + test("hu", "SimpleSpeak", expr, "fekete bekarikázott egy, vessző; bekarikázott szám ötven")?; let expr = " ,"; - test("hu", "SimpleSpeak", expr, "parenthesized 1 comma, parenthesized 9")?; + test("hu", "SimpleSpeak", expr, "zárójeles 1 vessző, zárójeles 9")?; let expr = " ,"; - test("hu", "SimpleSpeak", expr, "1 with period comma, 9 with period")?; + test("hu", "SimpleSpeak", expr, "1 ponttal vessző, 9 ponttal")?; let expr = " ,"; - test("hu", "SimpleSpeak", expr, "double circled 1 comma, double circled 9")?; + test("hu", "SimpleSpeak", expr, "dupla bekarikázott 1, vessző, dupla bekarikázott 9")?; return Ok(()); } diff --git a/tests/Languages/hu/chemistry.rs b/tests/Languages/hu/chemistry.rs index 51612bd96..42d426275 100644 --- a/tests/Languages/hu/chemistry.rs +++ b/tests/Languages/hu/chemistry.rs @@ -7,7 +7,7 @@ use anyhow::Result; #[test] fn salt() -> Result<()> { let expr = "NaCl"; - test_prefs("hu", "SimpleSpeak", vec![("Verbosity", "Terse")], expr, "cap n eigh, cap c l")?; + test_prefs("hu", "SimpleSpeak", vec![("Verbosity", "Terse")], expr, "nagy n a; láthatatlan elválasztó, nagy c l")?; return Ok(()); } @@ -16,9 +16,9 @@ fn salt() -> Result<()> { #[test] fn water() -> Result<()> { let expr = "H2O"; - test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Terse")], expr, "cap h, 2 cap o")?; - test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Medium")], expr, "cap h, sub 2 cap o")?; - test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Verbose")], expr, "cap h, subscript 2, cap o")?; + test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Terse")], expr, "nagy h, 2, láthatatlan elválasztó, nagy o")?; + test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Medium")], expr, "nagy h, alsó index 2, láthatatlan elválasztó, nagy o")?; + test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Verbose")], expr, "nagy h, alsó index 2, láthatatlan elválasztó, nagy o")?; return Ok(()); } @@ -27,7 +27,7 @@ fn water() -> Result<()> { #[test] fn carbon() -> Result<()> { let expr = "C"; // not enough to trigger recognition - test_prefs("hu", "SimpleSpeak", vec![("Verbosity", "Terse")], expr, "cap c")?; + test_prefs("hu", "SimpleSpeak", vec![("Verbosity", "Terse")], expr, "nagy c")?; return Ok(()); } @@ -39,7 +39,7 @@ fn sulfate() -> Result<()> { [SO4] 2 "; - test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Medium")], expr, "open bracket, cap s, cap o, sub 4; close bracket super 2 minus")?; + test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Medium")], expr, "nyitott zárójel; nagy s; láthatatlan elválasztó, nagy o, alsó index 4; zárójel felső index 2 mínusz")?; return Ok(()); } @@ -49,9 +49,9 @@ fn sulfate() -> Result<()> { fn aluminum_sulfate() -> Result<()> { let expr = "Al2 (SO4)3"; - test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Terse")], expr, "cap eigh l, 2, open cap s, cap o, 4, close 3")?; - test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Medium")], expr, "cap eigh l, sub 2; open paren, cap s, cap o, sub 4; close paren sub 3")?; - test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Verbose")], expr, "cap eigh l, subscript 2; open paren, cap s, cap o, subscript 4; close paren subscript 3")?; + test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Terse")], expr, "nagy a l, 2, láthatatlan elválasztó; nyitott zárójel; nagy s; láthatatlan elválasztó, nagy o, 4; zárt zárójel 3")?; + test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Medium")], expr, "nagy a l, alsó index 2, láthatatlan elválasztó; nyitott zárójel; nagy s; láthatatlan elválasztó, nagy o, alsó index 4; zárt zárójel alsó index 3")?; + test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Verbose")], expr, "nagy a l, alsó index 2, láthatatlan elválasztó; nyitott zárójel; nagy s; láthatatlan elválasztó, nagy o, alsó index 4; zárt zárójel alsó index 3")?; return Ok(()); } @@ -71,7 +71,7 @@ fn ethanol_bonds() -> Result<()> { H "; - test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Terse")], expr, "cap c, cap h, 3 single bond cap c, cap h, 2 single bond cap o, cap h")?; + test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Terse")], expr, "nagy c; láthatatlan elválasztó, nagy h, 3 egyes kötés nagy c; láthatatlan elválasztó, nagy h, 2 egyes kötés nagy o; láthatatlan elválasztó, nagy h")?; return Ok(()); @@ -91,14 +91,11 @@ fn dichlorine_hexoxide() -> Result<()> { "; test_prefs("hu", "SimpleSpeak", vec![("Verbosity", "Terse")], - expr, "open bracket, cap c l, cap o, 2, close bracket plus; \ - open bracket, cap c l, cap o, 4, close bracket minus")?; + expr, "nyitott zárójel; nagy c l; láthatatlan elválasztó, nagy o, 2; zárójel plusz; láthatatlan elválasztó; nyitott zárójel; nagy c l; láthatatlan elválasztó, nagy o, 4; zárójel mínusz")?; test_prefs("hu", "SimpleSpeak", vec![("Verbosity", "Medium")], - expr, "open bracket, cap c l, cap o, sub 2; close bracket super plus; \ - open bracket, cap c l, cap o, sub 4; close bracket super minus")?; + expr, "nyitott zárójel; nagy c l; láthatatlan elválasztó, nagy o, alsó index 2; zárójel felső index plusz; láthatatlan elválasztó; nyitott zárójel; nagy c l; láthatatlan elválasztó, nagy o, alsó index 4; zárójel felső index mínusz")?; test_prefs("hu", "SimpleSpeak", vec![("Verbosity", "Verbose")], - expr, "open bracket, cap c l, cap o, subscript 2; close bracket superscript plus; \ - open bracket, cap c l, cap o, subscript 4; close bracket superscript minus")?; + expr, "nyitott zárójel; nagy c l; láthatatlan elválasztó, nagy o, alsó index 2; zárójel felső index plusz; láthatatlan elválasztó; nyitott zárójel; nagy c l; láthatatlan elválasztó, nagy o, alsó index 4; zárójel felső index mínusz")?; return Ok(()); } @@ -112,7 +109,7 @@ fn ethylene_with_bond() -> Result<()> { = CH2 "; - test_prefs("hu", "SimpleSpeak", vec![("Verbosity", "Terse")], expr, "cap h, 2 cap c, double bond cap c, cap h, 2")?; + test_prefs("hu", "SimpleSpeak", vec![("Verbosity", "Terse")], expr, "nagy h, 2, láthatatlan elválasztó, nagy c, kettős kötés nagy c; láthatatlan elválasztó, nagy h, 2")?; return Ok(()); } @@ -125,7 +122,7 @@ fn ferric_chloride_aq() -> Result<()> { Cl3 (aq) "; - test_prefs("hu", "SimpleSpeak", vec![("Verbosity", "Terse")], expr, "cap f e, cap c l, 3 aqueous")?; + test_prefs("hu", "SimpleSpeak", vec![("Verbosity", "Terse")], expr, "nagy f e; láthatatlan elválasztó, nagy c l, 3, láthatatlan elválasztó, vizes oldat")?; return Ok(()); } @@ -138,7 +135,7 @@ fn ethylene_with_colon_bond() -> Result<()> { :: CH2 "; - test_prefs("hu", "SimpleSpeak", vec![("Verbosity", "Terse")], expr, "cap h, 2 cap c, double bond cap c, cap h, 2")?; + test_prefs("hu", "SimpleSpeak", vec![("Verbosity", "Terse")], expr, "nagy h, 2, láthatatlan elválasztó, nagy c, kettős kötés nagy c; láthatatlan elválasztó, nagy h, 2")?; return Ok(()); } @@ -172,11 +169,11 @@ fn beta_decay() -> Result<()> { "; test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Terse")], expr, - "14, 6, cap c; forms, 14, 7, cap n; plus 0, negative 1, e")?; + "14, 6, nagy c; keletkezik; 14, 7, nagy n; plusz 0, negatív 1, e")?; test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Medium")], expr, - "super 14, sub 6, cap c; reacts to form; super 14, sub 7, cap n; plus super 0, sub negative 1, e")?; + "felső index 14, alsó index 6, nagy c; reakcióba lép, és keletkezik; felső index 14, alsó index 7, nagy n; plusz, felső index 0, alsó index negatív 1, e")?; test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Verbose")], expr, - "superscript 14, subscript 6, cap c; reacts to form; superscript 14, subscript 7, cap n; plus, superscript 0, subscript negative 1, e")?; + "felső index 14, alsó index 6, nagy c; reakcióba lép, és keletkezik; felső index 14, alsó index 7, nagy n; plusz, felső index 0, alsó index negatív 1, e")?; return Ok(()); } @@ -439,11 +436,11 @@ fn mhchem_beta_decay() -> Result<()> { "; test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Terse")], expr, - "14, 6, cap c; forms, 14, 7, cap n; plus 0, negative 1, e")?; + "14, 6, nagy c; keletkezik; 14, 7, nagy n; plusz 0, negatív 1, e")?; test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Medium")], expr, - "super 14, sub 6, cap c; reacts to form; super 14, sub 7, cap n; plus super 0, sub negative 1, e")?; + "felső index 14, alsó index 6, nagy c; reakcióba lép, és keletkezik; felső index 14, alsó index 7, nagy n; plusz, felső index 0, alsó index negatív 1, e")?; test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Verbose")], expr, - "superscript 14, subscript 6, cap c; reacts to form; superscript 14, subscript 7, cap n; plus, superscript 0, subscript negative 1, e")?; + "felső index 14, alsó index 6, nagy c; reakcióba lép, és keletkezik; felső index 14, alsó index 7, nagy n; plusz, felső index 0, alsó index negatív 1, e")?; return Ok(()); } @@ -459,7 +456,7 @@ fn hcl_na_yields() -> Result<()> { "; test_prefs("hu", "SimpleSpeak", vec![("Verbosity", "Verbose")], expr, - "2, cap h, cap c l; plus 2 cap n eigh; reacts to form; 2, cap n eigh, cap c l; plus cap h, subscript 2")?; + "2, nagy h; láthatatlan elválasztó, nagy c l; plusz 2 nagy n a; reakcióba lép, és keletkezik; 2, nagy n a; láthatatlan elválasztó, nagy c l; plusz nagy h, alsó index 2")?; return Ok(()); } @@ -507,9 +504,9 @@ fn mhchem_so4_2plus() -> Result<()> { "; - test_prefs("hu", "SimpleSpeak", vec![("Verbosity", "Terse")], expr, "cap s; cap o, 4, 2 plus")?; - test_prefs("hu", "SimpleSpeak", vec![("Verbosity", "Medium")], expr, "cap s; cap o, sub 4, super 2 plus")?; - test_prefs("hu", "SimpleSpeak", vec![("Verbosity", "Verbose")], expr, "cap s; cap o, subscript 4, superscript 2 plus")?; + test_prefs("hu", "SimpleSpeak", vec![("Verbosity", "Terse")], expr, "nagy s; láthatatlan elválasztó, nagy o, 4, 2 plusz")?; + test_prefs("hu", "SimpleSpeak", vec![("Verbosity", "Medium")], expr, "nagy s; láthatatlan elválasztó; nagy o, alsó index 4, felső index 2 plusz")?; + test_prefs("hu", "SimpleSpeak", vec![("Verbosity", "Verbose")], expr, "nagy s; láthatatlan elválasztó; nagy o, alsó index 4, felső index 2 plusz")?; return Ok(()); } @@ -600,7 +597,7 @@ fn mhchem_hcl_aq_etc() -> Result<()> { "; test_prefs("hu", "SimpleSpeak", vec![("Verbosity", "Terse")], - expr, "2, cap h, cap c l, aqueous; plus, 2, cap n eigh, solid; forms; 2, cap n eigh, cap c l, aqueous; plus, cap h, 2, gas")?; + expr, "2; nagy h; láthatatlan elválasztó, nagy c l; láthatatlan elválasztó, vizes oldat; plusz; 2, nagy n a; láthatatlan elválasztó, szilárd; keletkezik; 2; nagy n a; láthatatlan elválasztó, nagy c l; láthatatlan elválasztó, vizes oldat; plusz, nagy h, 2; láthatatlan elválasztó, gáz")?; return Ok(()); @@ -669,7 +666,7 @@ fn mhchem_barbed_equilibrium() -> Result<()> { "; test_prefs("hu", "SimpleSpeak", vec![("Verbosity", "Terse")], - expr, "cap h, 2, gas; plus; cap i, 2, gas; is in equilibrium with, 2, cap h, cap i, gas")?; + expr, "nagy h, 2; láthatatlan elválasztó, gáz; plusz; nagy i, 2; láthatatlan elválasztó, gáz; egyensúlyban van a következővel:, 2; nagy h; láthatatlan elválasztó, nagy i; láthatatlan elválasztó, gáz")?; return Ok(()); } @@ -701,7 +698,7 @@ fn mhchem_roman_in_superscript() -> Result<()> { "; test_prefs("hu", "SimpleSpeak", vec![("Verbosity", "Terse")], - expr, "cap f e, 2; cap f e, 3; cap o, 4")?; + expr, "nagy f e, 2; láthatatlan elválasztó, nagy f e, 3; láthatatlan elválasztó, nagy o, 4")?; return Ok(()); } @@ -779,7 +776,7 @@ fn dropped_msubsup_bug_358() -> Result<()> { "#; test_prefs("hu", "SimpleSpeak", vec![("Verbosity", "Terse")], - expr, "2, cap s, cap o, 2; plus; cap o, 2 is in equilibrium with, 2, cap s, cap o, 3")?; + expr, "2, nagy s; láthatatlan elválasztó, nagy o, 2; plusz; nagy o, 2 egyensúlyban van a következővel:, 2, nagy s; láthatatlan elválasztó, nagy o, 3")?; return Ok(()); } diff --git a/tests/Languages/hu/intent.rs b/tests/Languages/hu/intent.rs index 0e5af2d02..c5c2fa3ec 100644 --- a/tests/Languages/hu/intent.rs +++ b/tests/Languages/hu/intent.rs @@ -77,7 +77,7 @@ fn function_intent() -> Result<()> { y z "#; - test("hu", "SimpleSpeak", expr, "testing of x comma, y comma, z comma, 2")?; + test("hu", "SimpleSpeak", expr, "testing x vessző, y vessző, z vessző, 2")?; return Ok(()); } @@ -100,7 +100,7 @@ fn function_one_arg_intent() -> Result<()> { let expr = r#" x "#; - test("hu", "SimpleSpeak", expr, "testing of x")?; + test("hu", "SimpleSpeak", expr, "testing x")?; return Ok(()); } @@ -123,35 +123,8 @@ fn silent_intent_msup() -> Result<()> { H 2 "; - test("hu", "SimpleSpeak", expr, "cap h 2")?; - test("hu", "ClearSpeak", expr, "cap h 2")?; - return Ok(()); - -} - -// AI generated -#[test] -fn silent_intent_underscore() -> Result<()> { - let expr = " - - H - 2 - "; - test("hu", "SimpleSpeak", expr, "cap h 2")?; - test("hu", "ClearSpeak", expr, "cap h 2")?; - return Ok(()); - -} - -// AI generated -#[test] -fn intent_prob_x() -> Result<()> { - let expr = " - - x - P - "; - test("hu", "ClearSpeak", expr, "probability of x")?; + test("hu", "SimpleSpeak", expr, "nagy h 2")?; + test("hu", "ClearSpeak", expr, "nagy h 2")?; return Ok(()); } diff --git a/tests/Languages/hu/mtable.rs b/tests/Languages/hu/mtable.rs index 86ba304c5..f02050e47 100644 --- a/tests/Languages/hu/mtable.rs +++ b/tests/Languages/hu/mtable.rs @@ -14,8 +14,8 @@ fn matrix_1x1() -> Result<()> { ) "; - test("hu", "ClearSpeak", expr, "the 1 by 1 matrix with entry 3")?; - test("hu", "SimpleSpeak", expr, "the 1 by 1 matrix with entry 3")?; + test("hu", "ClearSpeak", expr, "a(z) egy-szer-egyes mátrix eleme: 3")?; + test("hu", "SimpleSpeak", expr, "a(z) egy-szer-egyes mátrix eleme: 3")?; return Ok(()); } @@ -33,8 +33,8 @@ fn determinant_1x1() -> Result<()> { | "; - test("hu", "ClearSpeak", expr, "the 1 by 1 determinant with entry 3")?; - test("hu", "SimpleSpeak", expr, "the 1 by 1 determinant with entry 3")?; + test("hu", "ClearSpeak", expr, "a(z) egy-szer-egyes determináns eleme: 3")?; + test("hu", "SimpleSpeak", expr, "a(z) egy-szer-egyes determináns eleme: 3")?; return Ok(()); } @@ -60,8 +60,8 @@ fn matrix_1x2() -> Result<()> { ) "; - test("hu", "ClearSpeak", expr, "the 1 by 2 row matrix; 3, 5")?; - test("hu", "SimpleSpeak", expr, "the 1 by 2 row matrix; 3, 5")?; + test("hu", "ClearSpeak", expr, "az 1-szer 2 -es sor mátrix; 3, 5")?; + test("hu", "SimpleSpeak", expr, "az 1-szer 2 -es sor mátrix; 3, 5")?; return Ok(()); } @@ -90,8 +90,8 @@ fn matrix_1x3() -> Result<()> { ) "; - test("hu", "ClearSpeak", expr, "the 1 by 3 row matrix; negative x, 5, 12")?; - test("hu", "SimpleSpeak", expr, "the 1 by 3 row matrix; negative x, 5, 12")?; + test("hu", "ClearSpeak", expr, "az 1-szer 3 -es sor mátrix; negatív x, 5, 12")?; + test("hu", "SimpleSpeak", expr, "az 1-szer 3 -es sor mátrix; negatív x, 5, 12")?; return Ok(()); } @@ -121,8 +121,8 @@ fn matrix_2x1_not_simple() -> Result<()> { ) "; - test("hu", "ClearSpeak", expr, "the 2 by 1 column matrix; row 1; x plus 1; row 2; x minus 1")?; - test("hu", "SimpleSpeak", expr, "the 2 by 1 column matrix; row 1; x plus 1; row 2; x minus 1")?; + test("hu", "ClearSpeak", expr, "a(z) 2 x 1-es oszlop mátrix; 1 . sor; x plusz 1; 2 . sor; x mínusz 1")?; + test("hu", "SimpleSpeak", expr, "a(z) 2 x 1-es oszlop mátrix; 1 . sor; x plusz 1; 2 . sor; x mínusz 1")?; return Ok(()); } @@ -161,14 +161,8 @@ fn matrix_3x1_not_simple() -> Result<()> { ) "; - test("hu", "SimpleSpeak", expr, "the 3 by 1 column matrix; \ - row 1; x; \ - row 2; eigh; \ - row 3; fraction, x over, x plus 1, end fraction")?; - test("hu", "ClearSpeak", expr, "the 3 by 1 column matrix; \ - row 1; x; \ - row 2; eigh; \ - row 3; the fraction with numerator x; and denominator x plus 1")?; + test("hu", "SimpleSpeak", expr, "a(z) 3 x 1-es oszlop mátrix; 1 . sor; x; 2 . sor; a; 3 . sor; tört, x per, x plusz 1, tört vége")?; + test("hu", "ClearSpeak", expr, "a(z) 3 x 1-es oszlop mátrix; 1 . sor; x; 2 . sor; a; 3 . sor; a tört, melynek számlálója x; nevezője pedig x plusz 1")?; return Ok(()); } @@ -200,8 +194,8 @@ fn determinant_2x2() -> Result<()> { | "; - test("hu", "ClearSpeak", expr, "the 2 by 2 determinant; row 1; 2, 1; row 2; 7, 5")?; - test("hu", "SimpleSpeak", expr, "the 2 by 2 determinant; row 1; 2, 1; row 2; 7, 5")?; + test("hu", "ClearSpeak", expr, "a(z) 2 x 2 determináns; 1 . sor; 2, 1; 2 . sor; 7, 5")?; + test("hu", "SimpleSpeak", expr, "a(z) 2 x 2 determináns; 1 . sor; 2, 1; 2 . sor; 7, 5")?; return Ok(()); } @@ -240,8 +234,8 @@ fn matrix_2x3() -> Result<()> { ] "; - test("hu", "ClearSpeak", expr, "the 2 by 3 matrix; row 1; 3, 1, 4; row 2; 0, 2, 6")?; - test("hu", "SimpleSpeak", expr, "the 2 by 3 matrix; row 1; 3, 1, 4; row 2; 0, 2, 6")?; + test("hu", "ClearSpeak", expr, "a(z) 2 x 3 mátrix; 1 . sor; 3, 1, 4; 2 . sor; 0, 2, 6")?; + test("hu", "SimpleSpeak", expr, "a(z) 2 x 3 mátrix; 1 . sor; 3, 1, 4; 2 . sor; 0, 2, 6")?; return Ok(()); } @@ -284,11 +278,9 @@ fn matrix_2x3_labeled() -> Result<()> { "; test("hu", "ClearSpeak", expr, - "the 2 by 3 matrix; row 1 with label (3.1); column 1; 3, column 2; 1, column 3; 4; \ - row 2; column 1; 0, column 2; 2, column 3; 6")?; + "a(z) 2 x 3 mátrix; 1 . sor címkéje: (3.1); oszlop 1; 3, oszlop 2; 1, oszlop 3; 4; 2 . sor; oszlop 1; 0, oszlop 2; 2, oszlop 3; 6")?; test("hu", "SimpleSpeak", expr, - "the 2 by 3 matrix; row 1 with label (3.1); column 1; 3, column 2; 1, column 3; 4; \ - row 2; column 1; 0, column 2; 2, column 3; 6")?; + "a(z) 2 x 3 mátrix; 1 . sor címkéje: (3.1); oszlop 1; 3, oszlop 2; 1, oszlop 3; 4; 2 . sor; oszlop 1; 0, oszlop 2; 2, oszlop 3; 6")?; return Ok(()); } @@ -319,8 +311,8 @@ fn matrix_3x1() -> Result<()> { ] "; - test("hu", "ClearSpeak", expr, "the 3 by 1 column matrix; 1; 2; 3")?; - test("hu", "SimpleSpeak", expr, "the 3 by 1 column matrix; 1; 2; 3")?; + test("hu", "ClearSpeak", expr, "a(z) 3 x 1-es oszlop mátrix; 1; 2; 3")?; + test("hu", "SimpleSpeak", expr, "a(z) 3 x 1-es oszlop mátrix; 1; 2; 3")?; return Ok(()); } @@ -357,8 +349,8 @@ fn matrix_4x1() -> Result<()> { ) "; - test("hu", "ClearSpeak", expr, "the 4 by 1 column matrix; row 1; 3; row 2; 6; row 3; 1; row 4; 2")?; - test("hu", "SimpleSpeak", expr, "the 4 by 1 column matrix; row 1; 3; row 2; 6; row 3; 1; row 4; 2")?; + test("hu", "ClearSpeak", expr, "a(z) 4 x 1-es oszlop mátrix; 1 . sor; 3; 2 . sor; 6; 3 . sor; 1; 4 . sor; 2")?; + test("hu", "SimpleSpeak", expr, "a(z) 4 x 1-es oszlop mátrix; 1 . sor; 3; 2 . sor; 6; 3 . sor; 1; 4 . sor; 2")?; return Ok(()); } @@ -399,9 +391,9 @@ fn matrix_4x1_labeled() -> Result<()> { "; test("hu", "ClearSpeak", expr, - "the 4 by 1 column matrix; row 1; 3; row 2; 6; row 3; 1; row 4 with label (3.1); 2")?; + "a(z) 4 x 1-es oszlop mátrix; 1 . sor; 3; 2 . sor; 6; 3 . sor; 1; 4 . sor címkéje: (3.1); 2")?; test("hu", "SimpleSpeak", expr, - "the 4 by 1 column matrix; row 1; 3; row 2; 6; row 3; 1; row 4 with label (3.1); 2")?; + "a(z) 4 x 1-es oszlop mátrix; 1 . sor; 3; 2 . sor; 6; 3 . sor; 1; 4 . sor címkéje: (3.1); 2")?; return Ok(()); } @@ -432,8 +424,8 @@ fn matrix_1x4() -> Result<()> { ) "; - test("hu", "ClearSpeak", expr, "the 1 by 4 row matrix; column 1; 3, column 2; 6, column 3; 1, column 4; 2")?; - test("hu", "SimpleSpeak", expr, "the 1 by 4 row matrix; column 1; 3, column 2; 6, column 3; 1, column 4; 2")?; + test("hu", "ClearSpeak", expr, "az 1-szer 4 -es sor mátrix; oszlop 1; 3, oszlop 2; 6, oszlop 3; 1, oszlop 4; 2")?; + test("hu", "SimpleSpeak", expr, "az 1-szer 4 -es sor mátrix; oszlop 1; 3, oszlop 2; 6, oszlop 3; 1, oszlop 4; 2")?; return Ok(()); } @@ -506,16 +498,8 @@ fn matrix_4x4() -> Result<()> { ) "; - test("hu", "ClearSpeak", expr, "the 4 by 4 matrix; \ - row 1; column 1; 0, column 2; 3, column 3; 4, column 4; 3; \ - row 2; column 1; 2, column 2; 1, column 3; 0, column 4; 9; \ - row 3; column 1; 3, column 2; 0, column 3; 2, column 4; 1; \ - row 4; column 1; 6, column 2; 2, column 3; 9, column 4; 0")?; - test("hu", "SimpleSpeak", expr, "the 4 by 4 matrix; \ - row 1; column 1; 0, column 2; 3, column 3; 4, column 4; 3; \ - row 2; column 1; 2, column 2; 1, column 3; 0, column 4; 9; \ - row 3; column 1; 3, column 2; 0, column 3; 2, column 4; 1; \ - row 4; column 1; 6, column 2; 2, column 3; 9, column 4; 0")?; + test("hu", "ClearSpeak", expr, "a(z) 4 x 4 mátrix; 1 . sor; oszlop 1; 0, oszlop 2; 3, oszlop 3; 4, oszlop 4; 3; 2 . sor; oszlop 1; 2, oszlop 2; 1, oszlop 3; 0, oszlop 4; 9; 3 . sor; oszlop 1; 3, oszlop 2; 0, oszlop 3; 2, oszlop 4; 1; 4 . sor; oszlop 1; 6, oszlop 2; 2, oszlop 3; 9, oszlop 4; 0")?; + test("hu", "SimpleSpeak", expr, "a(z) 4 x 4 mátrix; 1 . sor; oszlop 1; 0, oszlop 2; 3, oszlop 3; 4, oszlop 4; 3; 2 . sor; oszlop 1; 2, oszlop 2; 1, oszlop 3; 0, oszlop 4; 9; 3 . sor; oszlop 1; 3, oszlop 2; 0, oszlop 3; 2, oszlop 4; 1; 4 . sor; oszlop 1; 6, oszlop 2; 2, oszlop 3; 9, oszlop 4; 0")?; return Ok(()); } @@ -564,18 +548,8 @@ fn matrix_4x2() -> Result<()> { ) "; - test("hu", "ClearSpeak", expr, "the 4 by 2 matrix; \ - row 1; column 1; 1, column 2; 3; \ - row 2; column 1; 4, column 2; 2; \ - row 3; column 1; 2, column 2; 1; \ - row 4; column 1; 0, column 2; 5\ - ")?; - test("hu", "SimpleSpeak", expr, "the 4 by 2 matrix; \ - row 1; column 1; 1, column 2; 3; \ - row 2; column 1; 4, column 2; 2; \ - row 3; column 1; 2, column 2; 1; \ - row 4; column 1; 0, column 2; 5\ - ")?; + test("hu", "ClearSpeak", expr, "a(z) 4 x 2 mátrix; 1 . sor; oszlop 1; 1, oszlop 2; 3; 2 . sor; oszlop 1; 4, oszlop 2; 2; 3 . sor; oszlop 1; 2, oszlop 2; 1; 4 . sor; oszlop 1; 0, oszlop 2; 5")?; + test("hu", "SimpleSpeak", expr, "a(z) 4 x 2 mátrix; 1 . sor; oszlop 1; 1, oszlop 2; 3; 2 . sor; oszlop 1; 4, oszlop 2; 2; 3 . sor; oszlop 1; 2, oszlop 2; 1; 4 . sor; oszlop 1; 0, oszlop 2; 5")?; return Ok(()); } @@ -586,11 +560,11 @@ fn simple_absolute_value() -> Result<()> { let expr = " | x | "; - test("hu", "SimpleSpeak", expr, "the absolute value of x")?; - test("hu", "ClearSpeak", expr, "the absolute value of x")?; - test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Terse"), ("ClearSpeak_AbsoluteValue", "Auto")], expr, "absolute value of x")?; + test("hu", "SimpleSpeak", expr, "az abszolút érték x")?; + test("hu", "ClearSpeak", expr, "x abszolút értéke")?; + test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Terse"), ("ClearSpeak_AbsoluteValue", "Auto")], expr, "x abszolút értéke")?; test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Verbose"), ("ClearSpeak_AbsoluteValue", "AbsEnd")], - expr, "the absolute value of x, end absolute value")?; + expr, "x abszolút értéke, vége az abszolút értéknek")?; return Ok(()); } @@ -602,9 +576,9 @@ let expr = " x+1 | "; - test("hu", "ClearSpeak", expr, "the absolute value of x plus 1")?; + test("hu", "ClearSpeak", expr, "x plusz 1 abszolút értéke")?; test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Terse"), ("ClearSpeak_AbsoluteValue", "AbsEnd")], - expr, "absolute value of x plus 1, end absolute value")?; + expr, "x plusz 1 abszolút értéke, vége az abszolút értéknek")?; return Ok(()); } @@ -615,7 +589,7 @@ fn simple_cardinality_value() -> Result<()> { | S | "; test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_AbsoluteValue", "Cardinality")], expr, - "the cardinality of cap s")?; + "nagy s számossága")?; return Ok(()); } @@ -640,7 +614,7 @@ let expr = " ) "; test_ClearSpeak("hu", "ClearSpeak_Matrix", "SpeakColNum", - expr, "the 2 by 2 matrix; row 1; column 1; 2, column 2; 1; row 2; column 1; 7, column 2; 5")?; + expr, "a(z) 2 x 2 mátrix; 1 . sor; oszlop 1; 2, oszlop 2; 1; 2 . sor; oszlop 1; 7, oszlop 2; 5")?; return Ok(()); } @@ -665,7 +639,7 @@ let expr = " ) "; test_ClearSpeak("hu", "ClearSpeak_Matrix", "SpeakColNum", - expr, "the 3 by 1 column matrix; row 1; 1; row 2; 2; row 3; 3")?; + expr, "a(z) 3 x 1-es oszlop mátrix; 1 . sor; 1; 2 . sor; 2; 3 . sor; 3")?; return Ok(()); } @@ -684,7 +658,7 @@ let expr = " ] "; test_ClearSpeak("hu", "ClearSpeak_Matrix", "SpeakColNum", - expr, "the 1 by 2 row matrix; column 1; 1, column 2; 2")?; + expr, "az 1-szer 2 -es sor mátrix; oszlop 1; 1, oszlop 2; 2")?; return Ok(()); } @@ -704,8 +678,7 @@ let expr = "( )"; test_ClearSpeak("hu", "ClearSpeak_Matrix", "SpeakColNum", - expr, "the 2 by 2 matrix; row 1; column 1; b sub 1 1; column 2; b sub 1 2; \ - row 2; column 1; b sub 2 1; column 2; b sub 2 2")?; + expr, "a(z) 2 x 2 mátrix; 1 . sor; oszlop 1; b alsó index 1 láthatatlan elválasztó 1; oszlop 2; b alsó index 1 láthatatlan elválasztó 2; 2 . sor; oszlop 1; b alsó index 2 láthatatlan elválasztó 1; oszlop 2; b alsó index 2 láthatatlan elválasztó 2")?; return Ok(()); } @@ -730,7 +703,7 @@ let expr = " ) "; test_ClearSpeak("hu", "ClearSpeak_Matrix", "SilentColNum", - expr, "the 2 by 2 matrix; row 1; 2, 1; row 2; 7, 5")?; + expr, "a(z) 2 x 2 mátrix; 1 . sor; 2, 1; 2 . sor; 7, 5")?; return Ok(()); } @@ -755,7 +728,7 @@ let expr = " ) "; test_ClearSpeak("hu", "ClearSpeak_Matrix", "SilentColNum", - expr, "the 3 by 1 column matrix; 1; 2; 3")?; + expr, "a(z) 3 x 1-es oszlop mátrix; 1; 2; 3")?; return Ok(()); } @@ -774,7 +747,7 @@ let expr = " ] "; test_ClearSpeak("hu", "ClearSpeak_Matrix", "SilentColNum", - expr, "the 1 by 2 row matrix; 1, 2")?; + expr, "az 1-szer 2 -es sor mátrix; 1, 2")?; return Ok(()); } @@ -794,8 +767,7 @@ let expr = "( )"; test_ClearSpeak("hu", "ClearSpeak_Matrix", "SilentColNum", - expr, "the 2 by 2 matrix; row 1; b sub 1 1; b sub 1 2; \ - row 2; b sub 2 1; b sub 2 2")?; + expr, "a(z) 2 x 2 mátrix; 1 . sor; b alsó index 1 láthatatlan elválasztó 1; b alsó index 1 láthatatlan elválasztó 2; 2 . sor; b alsó index 2 láthatatlan elválasztó 1; b alsó index 2 láthatatlan elválasztó 2")?; return Ok(()); } @@ -820,7 +792,7 @@ let expr = " ) "; test_ClearSpeak("hu", "ClearSpeak_Matrix", "EndMatrix", - expr, "the 2 by 2 matrix; row 1; 2, 1; row 2; 7, 5; end matrix")?; + expr, "a(z) 2 x 2 mátrix; 1 . sor; 2, 1; 2 . sor; 7, 5; vége a mátrixnak")?; return Ok(()); } @@ -845,7 +817,7 @@ let expr = " ) "; test_ClearSpeak("hu", "ClearSpeak_Matrix", "EndMatrix", - expr, "the 3 by 1 column matrix; 1; 2; 3; end matrix")?; + expr, "a(z) 3 x 1-es oszlop mátrix; 1; 2; 3; vége a mátrixnak")?; return Ok(()); } @@ -864,7 +836,7 @@ let expr = " ] "; test_ClearSpeak("hu", "ClearSpeak_Matrix", "EndMatrix", - expr, "the 1 by 2 row matrix; 1, 2; end matrix")?; + expr, "az 1-szer 2 -es sor mátrix; 1, 2; vége a mátrixnak")?; return Ok(()); } @@ -884,8 +856,7 @@ let expr = "( )"; test_ClearSpeak("hu", "ClearSpeak_Matrix", "EndMatrix", - expr, "the 2 by 2 matrix; row 1; column 1; b sub 1 1; column 2; b sub 1 2; \ - row 2; column 1; b sub 2 1; column 2; b sub 2 2; end matrix")?; + expr, "a(z) 2 x 2 mátrix; 1 . sor; oszlop 1; b alsó index 1 láthatatlan elválasztó 1; oszlop 2; b alsó index 1 láthatatlan elválasztó 2; 2 . sor; oszlop 1; b alsó index 2 láthatatlan elválasztó 1; oszlop 2; b alsó index 2 láthatatlan elválasztó 2; vége a mátrixnak")?; return Ok(()); } @@ -910,7 +881,7 @@ let expr = " ) "; test_ClearSpeak("hu", "ClearSpeak_Matrix", "Vector", - expr, "the 2 by 2 matrix; row 1; 2, 1; row 2; 7, 5")?; + expr, "a(z) 2 x 2 mátrix; 1 . sor; 2, 1; 2 . sor; 7, 5")?; return Ok(()); } @@ -935,7 +906,7 @@ let expr = " ) "; test_ClearSpeak("hu", "ClearSpeak_Matrix", "Vector", - expr, "the 3 by 1 column vector; 1; 2; 3")?; + expr, "a(z) 3 x 1-es oszlop vektor; 1; 2; 3")?; return Ok(()); } @@ -954,7 +925,7 @@ let expr = " ] "; test_ClearSpeak("hu", "ClearSpeak_Matrix", "Vector", - expr, "the 1 by 2 row vector; 1, 2")?; + expr, "az 1-szer 2 -es sor vektor; 1, 2")?; return Ok(()); } @@ -974,8 +945,7 @@ let expr = "( )"; test_ClearSpeak("hu", "ClearSpeak_Matrix", "Vector", - expr, "the 2 by 2 matrix; row 1; column 1; b sub 1 1; column 2; b sub 1 2; \ - row 2; column 1; b sub 2 1; column 2; b sub 2 2")?; + expr, "a(z) 2 x 2 mátrix; 1 . sor; oszlop 1; b alsó index 1 láthatatlan elválasztó 1; oszlop 2; b alsó index 1 láthatatlan elválasztó 2; 2 . sor; oszlop 1; b alsó index 2 láthatatlan elválasztó 1; oszlop 2; b alsó index 2 láthatatlan elválasztó 2")?; return Ok(()); } @@ -1000,7 +970,7 @@ let expr = " ) "; test_ClearSpeak("hu", "ClearSpeak_Matrix", "EndVector", - expr, "the 2 by 2 matrix; row 1; 2, 1; row 2; 7, 5; end matrix")?; + expr, "a(z) 2 x 2 mátrix; 1 . sor; 2, 1; 2 . sor; 7, 5; vége a mátrixnak")?; return Ok(()); } @@ -1025,7 +995,7 @@ let expr = " ) "; test_ClearSpeak("hu", "ClearSpeak_Matrix", "EndVector", - expr, "the 3 by 1 column vector; 1; 2; 3; end vector")?; + expr, "a(z) 3 x 1-es oszlop vektor; 1; 2; 3; vége a vektornak")?; return Ok(()); } @@ -1044,7 +1014,7 @@ let expr = " ] "; test_ClearSpeak("hu", "ClearSpeak_Matrix", "EndVector", - expr, "the 1 by 2 row vector; 1, 2; end vector")?; + expr, "az 1-szer 2 -es sor vektor; 1, 2; vége a vektornak")?; return Ok(()); } @@ -1064,8 +1034,7 @@ let expr = "( )"; test_ClearSpeak("hu", "ClearSpeak_Matrix", "EndVector", - expr, "the 2 by 2 matrix; row 1; column 1; b sub 1 1; column 2; b sub 1 2; \ - row 2; column 1; b sub 2 1; column 2; b sub 2 2; end matrix")?; + expr, "a(z) 2 x 2 mátrix; 1 . sor; oszlop 1; b alsó index 1 láthatatlan elválasztó 1; oszlop 2; b alsó index 1 láthatatlan elválasztó 2; 2 . sor; oszlop 1; b alsó index 2 láthatatlan elválasztó 1; oszlop 2; b alsó index 2 láthatatlan elválasztó 2; vége a mátrixnak")?; return Ok(()); } @@ -1079,7 +1048,7 @@ fn matrix_binomial() -> Result<()> { 32 ) "; - test_ClearSpeak("hu", "ClearSpeak_Matrix", "Combinatorics", expr, "3 choose 2")?; + test_ClearSpeak("hu", "ClearSpeak_Matrix", "Combinatorics", expr, "3 alatt a 2")?; return Ok(()); } @@ -1091,7 +1060,7 @@ fn matrix_times() -> Result<()> { abcd "; test("hu", "SimpleSpeak", expr, - "the 2 by 2 matrix; row 1; 1, 2; row 2; 3, 4; times, the 2 by 2 matrix; row 1; eigh, b; row 2; c, d")?; + "a(z) 2 x 2 mátrix; 1 . sor; 1, 2; 2 . sor; 3, 4; szorozva; a(z) 2 x 2 mátrix; 1 . sor; a, b; 2 . sor; c, d")?; return Ok(()); } @@ -1130,7 +1099,7 @@ fn unknown_mtable_property() -> Result<()> { "; test("hu", "ClearSpeak", expr, - "2 lines; line 1; eigh is equal to, b plus c minus d; line 2; plus e minus f")?; + "2 sor; 1 . sor; a egyenlő, b plusz c mínusz d; 2 . sor; plusz e mínusz f")?; return Ok(()); } @@ -1147,7 +1116,7 @@ fn zero_matrix() -> Result<()> { ] "; test("hu", "SimpleSpeak", expr, - "the 2 by 2 zero matrix")?; + "a(z) 2 x 2 zérusmátrix")?; return Ok(()); } @@ -1164,7 +1133,7 @@ fn identity_matrix() -> Result<()> { ) "; test("hu", "SimpleSpeak", expr, - "the 3 by 3 identity matrix")?; + "a(z) 3 x 3 egységmátrix")?; return Ok(()); } @@ -1180,7 +1149,7 @@ fn identity_matrix_false_positive_negative_one() -> Result<()> { ] "; test_prefs("hu", "SimpleSpeak", vec![("Verbosity", "Terse")], - expr, "the 2 by 2 diagonal matrix; column 1; 1; column 2; negative 1")?; + expr, "a(z) 2 x 2 diagonális mátrix; oszlop 1; 1; oszlop 2; negatív 1")?; Ok(()) } @@ -1196,7 +1165,7 @@ fn identity_matrix_false_positive_zero_diagonal() -> Result<()> { ] "; test_prefs("hu", "SimpleSpeak", vec![("Verbosity", "Terse")], - expr, "the 2 by 2 diagonal matrix; column 1; 1")?; + expr, "a(z) 2 x 2 diagonális mátrix; oszlop 1; 1")?; Ok(()) } @@ -1213,7 +1182,7 @@ fn diagonal_matrix() -> Result<()> { ) "; test_prefs("hu", "SimpleSpeak", vec![("Verbosity", "Terse")], - expr, "the 3 by 3 diagonal matrix; column 1; 2; column 2; 1; column 3; x squared")?; + expr, "a(z) 3 x 3 diagonális mátrix; oszlop 1; 2; oszlop 2; 1; oszlop 3; x a négyzeten")?; // test_prefs("hu", "SimpleSpeak", vec![("Verbosity", "Verbose")], // expr, "the 3 by 3 diagonal matrix; row 1, column 1, 2; row 2, column 2, 1; row 3, column 3, x squared"); return Ok(()); @@ -1231,8 +1200,8 @@ fn single_line_with_label() -> Result<()> { "#; test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Terse")], - expr, "1 line, with label 2; b equals 2")?; + expr, "1 sor, címkével: 2; b egyenlő 2")?; test_prefs("hu", "SimpleSpeak", vec![("Verbosity", "Terse")], - expr, "1 equation, with label 2; b equals 2")?; + expr, "1 egyenlet, címkével 2; b egyenlő 2")?; return Ok(()); } diff --git a/tests/Languages/hu/shared.rs b/tests/Languages/hu/shared.rs index 12968c6c9..1d47de7fe 100644 --- a/tests/Languages/hu/shared.rs +++ b/tests/Languages/hu/shared.rs @@ -22,8 +22,7 @@ fn modified_vars() -> Result<()> { t "; test("hu", "SimpleSpeak", expr, - "eigh grave, b tilde, c breve, b check, c grave; plus \ - r check plus; x dot, y dot, z double dot, u triple dot, v quadruple dot; plus x hat, plus vector t")?; + "a súlyozott, b tilde, c rövid, b ellenőrzés, c súlyozott; plusz, r hacsek karakter mint repülő ékezet, plusz; x pont, y pont, z dupla pont, u hármas pont, v négyes pont; plusz x kalap, plusz vektor kezdete t")?; return Ok(()); } @@ -43,9 +42,9 @@ fn limit() -> Result<()> { "; - test("hu", "SimpleSpeak", expr, "the limit as x approaches 0, of, fraction, sine of x, over x, end fraction")?; + test("hu", "SimpleSpeak", expr, "határérték x megközelítések 0; tört, szinusz x, per x, tört vége")?; test_prefs("hu", "SimpleSpeak", vec![("Impairment", "LearningDisability")], expr, - "the limit as x approaches 0, of; sine of x, over x")?; + "határérték x megközelítések 0; szinusz x, per x")?; return Ok(()); } @@ -62,7 +61,7 @@ fn limit_from_below() -> Result<()> { sin x "; - test("hu", "SimpleSpeak", expr, "the limit as x approaches from below 0, of sine of x")?; + test("hu", "SimpleSpeak", expr, "határérték x alulról közelít 0; szinusz x")?; return Ok(()); } @@ -72,7 +71,7 @@ fn limit_from_below() -> Result<()> { #[test] fn binomial_mmultiscripts() -> Result<()> { let expr = "Cmn"; - test("hu", "SimpleSpeak", expr, "n choose m")?; + test("hu", "SimpleSpeak", expr, "n a m")?; return Ok(()); } @@ -81,7 +80,7 @@ fn binomial_mmultiscripts() -> Result<()> { #[test] fn binomial_mmultiscripts_other() -> Result<()> { let expr = "Cmn"; - test("hu", "SimpleSpeak", expr, "n choose m")?; + test("hu", "SimpleSpeak", expr, "n a m")?; return Ok(()); } @@ -90,7 +89,7 @@ fn binomial_mmultiscripts_other() -> Result<()> { #[test] fn binomial_subscript() -> Result<()> { // C_{n,k} let expr = "Cn,m"; - test("hu", "SimpleSpeak", expr, "n choose m")?; + test("hu", "SimpleSpeak", expr, "n a m")?; return Ok(()); } @@ -99,7 +98,7 @@ fn binomial_subscript() -> Result<()> { // C_{n,k} #[test] fn permutation_mmultiscripts() -> Result<()> { let expr = "Pkn"; - test("hu", "SimpleSpeak", expr, "k permutations of n")?; + test("hu", "SimpleSpeak", expr, "k permutációja n")?; return Ok(()); } @@ -108,7 +107,7 @@ fn permutation_mmultiscripts() -> Result<()> { #[test] fn permutation_mmultiscripts_sup() -> Result<()> { let expr = "Pkn"; - test("hu", "SimpleSpeak", expr, "k permutations of n")?; + test("hu", "SimpleSpeak", expr, "k permutációja n")?; return Ok(()); } @@ -117,7 +116,7 @@ fn permutation_mmultiscripts_sup() -> Result<()> { #[test] fn permutation_msubsup() -> Result<()> { let expr = "Pkn"; - test("hu", "SimpleSpeak", expr, "k permutations of n")?; + test("hu", "SimpleSpeak", expr, "k permutációja n")?; return Ok(()); } @@ -129,9 +128,9 @@ fn tensor_mmultiscripts() -> Result<()> { R i j k l "; test_prefs("hu", "SimpleSpeak", vec![("Verbosity", "Verbose")], expr, - "cap r with 4 postscripts, subscript i superscript j subscript k subscript l")?; + "nagy r posskriptek 4, subscript i superscript j subscript k subscript l")?; test_prefs("hu", "SimpleSpeak", vec![("Verbosity", "Medium")], expr, - "cap r with 4 postscripts, sub i super j sub k sub l")?; + "nagy r posskriptek 4, sub i super j sub k sub l")?; return Ok(()); } @@ -144,7 +143,7 @@ fn huge_num_mmultiscripts() -> Result<()> { I J K L "; test_prefs("hu", "SimpleSpeak", vec![("Verbosity", "Verbose")], expr, - "cap r with 4 prescripts, pre subscript cap i, pre superscript cap j and alternating prescripts cap k none cap l none end prescripts and with 5 postscripts, subscript i superscript j subscript k subscript l and alternating scripts m none end scripts")?; + "nagy r preskriptek 4, pre subscript nagy i, pre superscript nagy j és váltakozó preskriptek nagy k none nagy l none preskriptek vége és posskriptek 5, subscript i superscript j subscript k subscript l és váltakozó szkriptek m none szkriptek vége")?; return Ok(()); } @@ -153,7 +152,7 @@ fn huge_num_mmultiscripts() -> Result<()> { #[test] fn prime() -> Result<()> { let expr = " x "; - test("hu", "SimpleSpeak", expr, "x prime")?; + test("hu", "SimpleSpeak", expr, "x prím")?; return Ok(()); } @@ -162,8 +161,8 @@ fn prime() -> Result<()> { #[test] fn given() -> Result<()> { let expr = "P(A|B)"; - test("hu", "SimpleSpeak", expr, "cap p, open paren, cap eigh given cap b, close paren")?; - test("hu", "ClearSpeak", expr, "cap p, open paren, cap eigh given cap b, close paren")?; // not good, but follows the spec + test("hu", "SimpleSpeak", expr, "nagy p; nyitott zárójel, nagy a adott nagy b, zárt zárójel")?; + test("hu", "ClearSpeak", expr, "nagy p; nyitott zárójel, nagy a adott nagy b, zárt zárójel")?; // not good, but follows the spec return Ok(()); } @@ -184,7 +183,7 @@ fn simple_msubsup() -> Result<()> { "; - test("hu", "ClearSpeak", expr, "x sub k, to the i-th power")?; + test("hu", "ClearSpeak", expr, "x alsó index k, a(z) i-edik hatványon")?; return Ok(()); } @@ -193,10 +192,10 @@ fn simple_msubsup() -> Result<()> { #[test] fn non_simple_msubsup() -> Result<()> { let expr = "ij2k"; - test("hu", "SimpleSpeak", expr, "i sub j minus 2 end sub, to the k-th")?; - test("hu", "ClearSpeak", expr, "i sub j minus 2 end sub, to the k-th power")?; + test("hu", "SimpleSpeak", expr, "i alsó index j mínusz 2 alsó index vége, a(z) k-edik hatványon")?; + test("hu", "ClearSpeak", expr, "i alsó index j mínusz 2 alsó index vége, a(z) k-edik hatványon")?; test_prefs("hu", "SimpleSpeak", vec![("Impairment", "LearningDisability")], expr, - "i sub j minus 2, to the k-th")?; + "i alsó index j mínusz 2, a(z) k-edik hatványon")?; return Ok(()); } @@ -220,7 +219,7 @@ fn presentation_mathml_in_semantics() -> Result<()> { "; - test("hu", "ClearSpeak", expr, "x sub k, to the i-th power")?; + test("hu", "ClearSpeak", expr, "x alsó index k, a(z) i-edik hatványon")?; return Ok(()); } @@ -240,7 +239,7 @@ fn ignore_period() -> Result<()> { A -  and  +  és  B @@ -267,7 +266,7 @@ fn ignore_period() -> Result<()> { "; - test("hu", "SimpleSpeak", expr, "cap p; open paren, cap eigh and cap b; close paren; is equal to; cap p, open paren, cap eigh intersection cap b; close paren; is equal to, cap p of cap eigh, cap p of cap b")?; + test("hu", "SimpleSpeak", expr, "nagy p; nyitott zárójel, nagy a és nagy b; zárt zárójel; egyenlő; nagy p; nyitott zárójel, nagy a metszéspont nagy b; zárt zárójel; egyenlő, nagy p nagy a, nagy p nagy b")?; return Ok(()); } @@ -276,7 +275,7 @@ fn ignore_period() -> Result<()> { #[test] fn ignore_mtext_period() -> Result<()> { let expr = "{2}."; - test("hu", "SimpleSpeak", expr, "the set 2")?; + test("hu", "SimpleSpeak", expr, "a(z) 2 halmaz")?; return Ok(()); } @@ -316,7 +315,7 @@ fn ignore_comma() -> Result<()> { "; - test("hu", "SimpleSpeak", expr, "phi of x is equal to; c times, e raised to the negative h squared, x squared power")?; + test("hu", "SimpleSpeak", expr, "phi x egyenlő; c szorozva; e emelve a következő kitevőre:, negatív h a négyzeten, x a négyzeten, kitevő vége")?; return Ok(()); } @@ -382,7 +381,7 @@ fn bug_199_2pi() -> Result<()> { ) "; - test("hu", "SimpleSpeak",expr, "the closed open interval from 0 to 2 pi")?; + test("hu", "SimpleSpeak",expr, "0 től 2 pí ig terjedő intervallum, tartalmazza a 0 elemet de nem tartalmazza a 2 pí elemet")?; return Ok(()); } @@ -391,7 +390,7 @@ fn bug_199_2pi() -> Result<()> { #[test] fn caret_and_hat() -> Result<()> { let expr = "x^2+y^"; - test("hu", "SimpleSpeak",expr, "x caret 2 plus y hat")?; + test("hu", "SimpleSpeak",expr, "x fölfelényíl 2, plusz y kalap")?; return Ok(()); } @@ -421,9 +420,9 @@ fn ignore_bold() -> Result<()> { 1 "#; test_prefs("hu", "SimpleSpeak", vec![("IgnoreBold", "false")], - expr, "bold x is equal to, 2 sine of bold t, minus 1")?; + expr, "félkövér x egyenlő, 2 szinusz félkövér t; mínusz 1")?; test_prefs("hu", "SimpleSpeak", vec![("IgnoreBold", "true")], - expr, "x is equal to, 2 sine of t, minus 1")?; + expr, "x egyenlő, 2 szinusz t, mínusz 1")?; return Ok(()); } @@ -441,8 +440,8 @@ fn mn_with_block_and_decimal_separators() -> Result<()> { #[test] fn divergence() -> Result<()> { let expr = "·F"; // may want to change this for another language - test_prefs("hu", "SimpleSpeak", vec![("Verbosity", "Terse")], expr, "dihv cap f")?; - test_prefs("hu", "SimpleSpeak", vec![("Verbosity", "Verbose")], expr, "divergence of cap f")?; + test_prefs("hu", "SimpleSpeak", vec![("Verbosity", "Terse")], expr, "eltérés nagy f")?; + test_prefs("hu", "SimpleSpeak", vec![("Verbosity", "Verbose")], expr, "eltérés nagy f")?; return Ok(()); } @@ -452,8 +451,8 @@ fn divergence() -> Result<()> { fn curl() -> Result<()> { let expr = "×F"; // may want to change this for another language - test_prefs("hu", "SimpleSpeak", vec![("Verbosity", "Terse")], expr, "curl cap f")?; - test_prefs("hu", "SimpleSpeak", vec![("Verbosity", "Verbose")], expr, "curl of cap f")?; + test_prefs("hu", "SimpleSpeak", vec![("Verbosity", "Terse")], expr, "rotáció nagy f")?; + test_prefs("hu", "SimpleSpeak", vec![("Verbosity", "Verbose")], expr, "rotáció nagy f")?; return Ok(()); } @@ -463,8 +462,8 @@ fn curl() -> Result<()> { fn gradient() -> Result<()> { let expr = "F"; // may want to change this for another language - test_prefs("hu", "SimpleSpeak", vec![("Verbosity", "Terse")], expr, "del cap f")?; - test_prefs("hu", "SimpleSpeak", vec![("Verbosity", "Verbose")], expr, "gradient of cap f")?; + test_prefs("hu", "SimpleSpeak", vec![("Verbosity", "Terse")], expr, "gradiens nagy f")?; + test_prefs("hu", "SimpleSpeak", vec![("Verbosity", "Verbose")], expr, "gradiens nagy f")?; return Ok(()); } @@ -485,7 +484,7 @@ fn literal_speak_perpendicular() -> Result<()> { "#; - test("hu", "LiteralSpeak", expr, "cap eigh right arrow, perpendicular to, cap b right arrow")?; + test("hu", "LiteralSpeak", expr, "nagy a jobbra nyíl, perpendicular to, nagy b jobbra nyíl")?; return Ok(()); } @@ -506,7 +505,7 @@ fn literal_speak_chars() -> Result<()> { "#; - test("hu", "LiteralSpeak", expr, "vertical line; x cross, y dot z slash 2; plus eigh; double vertical line, b plus x exclamation point; vertical line")?; + test("hu", "LiteralSpeak", expr, "függőleges vonal; x kereszt, y pont z per 2; plusz a; dupla függőleges vonal, b plusz x felkiáltójel; függőleges vonal")?; return Ok(()); } @@ -528,7 +527,7 @@ fn literal_speak_with_name() -> Result<()> { "#; - test("hu", "LiteralSpeak", expr, "forced f, left paren x exclamation point, right paren")?; + test("hu", "LiteralSpeak", expr, "forced f, bal zárójel, x felkiáltójel, jobb zárójel")?; return Ok(()); } @@ -550,7 +549,7 @@ fn literal_speak_with_property() -> Result<()> { "#; - test("hu", "LiteralSpeak", expr, "f, left paren x exclamation point, right paren")?; + test("hu", "LiteralSpeak", expr, "f, bal zárójel, x felkiáltójel, jobb zárójel")?; return Ok(()); } @@ -571,7 +570,7 @@ fn literal_intent_property() -> Result<()> { "#; - test("hu", "SimpleSpeak", expr, "cap eigh right arrow, perpendicular to, cap b right arrow")?; + test("hu", "SimpleSpeak", expr, "nagy a jobbra nyíl, perpendicular to, nagy b jobbra nyíl")?; return Ok(()); } @@ -593,7 +592,7 @@ fn literal_intent_property_with_name() -> Result<()> { "#; - test("hu", "SimpleSpeak", expr, "forced f, open paren x exclamation point, close paren")?; + test("hu", "SimpleSpeak", expr, "forced f, nyitott zárójel, x felkiáltójel, zárt zárójel")?; return Ok(()); } diff --git a/tests/Languages/hu/units.rs b/tests/Languages/hu/units.rs index 5819d3215..e3df22cd4 100644 --- a/tests/Languages/hu/units.rs +++ b/tests/Languages/hu/units.rs @@ -41,30 +41,7 @@ fn prefix_sweep() -> Result<()> { qg "#; test("hu", "SimpleSpeak", expr, - "quetta-grams, comma, \ - ronna-grams, comma, \ - yotta-grams, comma, \ - zetta-grams, comma, \ - exa-grams, comma, \ - peta-grams, comma, \ - tera-grams, comma, \ - giga-grams, comma, \ - mega-grams, comma, \ - kilo-grams, comma, \ - hecto-grams, comma, \ - deka-grams, comma, \ - deci-grams, comma, \ - centi-grams, comma, \ - milli-grams, comma, \ - micro-grams, comma, \ - nano-grams, comma, \ - pico-grams, comma, \ - femto-grams, comma, \ - atto-grams, comma, \ - zepto-grams, comma, \ - yocto-grams, comma, \ - ronto-grams, comma, \ - quecto-grams")?; + "quetta-gram, vessző, ronna-gram, vessző, yotta-gram, vessző, zetta-gram, vessző, exa-gram, vessző, peta-gram, vessző, tera-gram, vessző, giga-gram, vessző, mega-gram, vessző, kiló-gram, vessző, hektó-gram, vessző, deka-gram, vessző, deci-gram, vessző, centi-gram, vessző, milli-gram, vessző, mikro-gram, vessző, nano-gram, vessző, pikó-gram, vessző, femto-gram, vessző, atto-gram, vessző, zepto-gram, vessző, yokto-gram, vessző, ronto-gram, vessző, quecto-gram")?; return Ok(()); } @@ -86,17 +63,7 @@ fn si_base() -> Result<()> { 1sec,2sec "#; test("hu", "SimpleSpeak", expr, - "1 amp, comma, 2 amps, comma, \ - 1 candela, comma; 2 candelas, comma, \ - 1 kelvin, comma, 2 kelvins, comma, \ - 1 kelvin, comma, 2 kelvins, comma, \ - 1 gram, comma, 2 grams, comma, \ - 1 metre, comma, 2 metres, comma, \ - 1 mole, comma, 2 moles, comma, \ - 1 second, comma, 2 seconds, comma, \ - 1 second, comma, 2 seconds, comma, \ - 1 second, comma, 2 seconds, comma, \ - 1 second, comma, 2 seconds")?; + "1 amper, vessző; 2 amper, vessző, 1 kandela, vessző; 2 kandela, vessző, 1 kelvin, vessző; 2 kelvin, vessző, 1 kelvin, vessző; 2 kelvin, vessző, 1 gram, vessző; 2 gram, vessző, 1 méter, vessző; 2 méter, vessző, 1 mol, vessző, 2 mol, vessző; 1 másodperc, vessző; 2 másodperc, vessző; 1 másodperc, vessző; 2 másodperc, vessző; 1 másodperc, vessző; 2 másodperc, vessző; 1 másodperc, vessző; 2 másodperc")?; return Ok(()); } @@ -116,15 +83,7 @@ fn si_base_with_prefixes() -> Result<()> { 1nsec,2psec "#; test("hu", "SimpleSpeak", expr, - "1 quetta-amp, comma; 2 ronna-amps, comma; \ - 1 yotta-candela, comma; 2 zetta-candelas, comma; \ - 1 exa-kelvin, comma; 2 peta-kelvins, comma; \ - 1 tera-kelvin, comma; 2 giga-kelvins, comma; \ - 1 mega-gram, comma; 2 kilo-grams, comma; \ - 1 hecto-metre, comma; 2 deka-metres, comma; \ - 1 deci-mole, comma; 2 centi-moles, comma; \ - 1 milli-second, comma; 2 micro-seconds, comma; \ - 1 nano-second, comma; 2 pico-seconds")?; + "1 quetta-amper, vessző; 2 ronna-amper, vessző; 1 yotta-kandela, vessző; 2 zetta-kandela, vessző; 1 exa-kelvin, vessző; 2 peta-kelvin, vessző; 1 tera-kelvin, vessző; 2 giga-kelvin, vessző; 1 mega-gram, vessző; 2 kiló-gram, vessző; 1 hektó-méter, vessző; 2 deka-méter, vessző; 1 deci-mol, vessző; 2 centi-mol, vessző; 1 milli-másodperc, vessző; 2 mikro-másodperc; vessző; 1 nano-másodperc, vessző; 2 pikó-másodperc")?; return Ok(()); } @@ -148,18 +107,7 @@ fn si_derived_1() -> Result<()> { 1lx,2lx "#; test("hu", "SimpleSpeak", expr, - "1 becquerel, comma; 2 becquerels, comma, \ - 1 coulomb, comma; 2 coulombs, comma; \ - 1 degree celsius, comma; 2 degrees celsius, comma; \ - 1 degree celsius, comma; 2 degrees celsius, comma, \ - 1 farad, comma, 2 farads, comma, \ - 1 gray, comma, 2 grays, comma, \ - 1 henry, comma, 2 henries, comma, \ - 1 hertz, comma, 2 hertz, comma, \ - 1 joule, comma, 2 joules, comma, \ - 1 katal, comma, 2 katals, comma, \ - 1 lumen, comma, 2 lumens, comma, \ - 1 lux, comma, 2 lux")?; + "1 becquerel, vessző; 2 becquerel, vessző, 1 Coulomb, vessző; 2 Coulomb, vessző; 1 Celsius fok, vessző; 2 Celsius fok, vessző; 1 Celsius fok, vessző; 2 Celsius fok, vessző, 1 farád, vessző; 2 farád, vessző, 1 gray, vessző; 2 gray, vessző, 1 henry, vessző, 2 henri, vessző, 1 hertz, vessző, 2 hertz, vessző, 1 joule, vessző; 2 joule, vessző, 1 katal, vessző; 2 katal, vessző, 1 lumen, vessző; 2 lumen, vessző, 1 lux, vessző, 2 lux")?; return Ok(()); } @@ -182,18 +130,7 @@ fn si_derived_1_with_prefixes() -> Result<()> { 1p℃,2n℃ "#; test("hu", "SimpleSpeak", expr, - "1 quetta-becquerel, comma; 2 ronna-becquerels; comma; \ - 1 yotta-coulomb, comma; 2 zetta-coulombs, comma; \ - 1 exa-farad, comma; 2 peta-farads, comma; \ - 1 tera-gray, comma; 2 giga-grays, comma; \ - 1 mega-henry, comma; 2 kilo-henries, comma; \ - 1 deka-hertz, comma; 2 deci-hertz, comma; \ - 1 centi-joule, comma; 2 milli-joules, comma; \ - 1 micro-katal, comma; 2 nano-katals, comma; \ - 1 pico-lumen, comma; 2 femto-lumens, comma; \ - 1 atto-lux, comma; 2 zepto-lux, comma; \ - 1 milli-degree celsius; comma; 2 micro-degrees celsius; comma; \ - 1 pico-degree celsius; comma; 2 nano-degrees celsius")?; + "1 quetta-becquerel, vessző; 2 ronna-becquerel; vessző; 1 yotta-Coulomb, vessző; 2 zetta-Coulomb, vessző; 1 exa-farád, vessző; 2 peta-farád, vessző; 1 tera-gray, vessző; 2 giga-gray, vessző; 1 mega-henry, vessző; 2 kiló-henri, vessző; 1 deka-hertz, vessző; 2 deci-hertz, vessző; 1 centi-joule, vessző; 2 milli-joule, vessző; 1 mikro-katal, vessző; 2 nano-katal, vessző; 1 pikó-lumen, vessző; 2 femto-lumen, vessző; 1 atto-lux, vessző; 2 zepto-lux, vessző; 1 milli-Celsius fok, vessző; 2 mikro-Celsius fok; vessző; 1 pikó-Celsius fok, vessző; 2 nano-Celsius fok")?; return Ok(()); } @@ -214,16 +151,7 @@ fn si_derived_2() -> Result<()> { 1Wb,2Wb "#; test("hu", "SimpleSpeak", expr, - "1 newton, comma, 2 newtons, comma, \ - 1 ohm, comma, 2 ohms, comma, \ - 1 ohm, comma, 2 ohms, comma, \ - 1 pascal, comma, 2 pascals, comma, \ - 1 siemens, comma, 2 siemens, comma, \ - 1 sievert, comma; 2 sieverts, comma, \ - 1 tesla, comma, 2 teslas, comma, \ - 1 volt, comma, 2 volts, comma, \ - 1 watt, comma, 2 watts, comma, \ - 1 weber, comma, 2 webers")?; + "1 newton, vessző; 2 newton, vessző, 1 ohm, vessző, 2 ohm, vessző, 1 ohm, vessző, 2 ohm, vessző, 1 pascal, vessző; 2 pascal, vessző, 1 siemens, vessző, 2 siemens, vessző, 1 sievert, vessző; 2 sievert, vessző, 1 tesla, vessző; 2 tesla, vessző, 1 volt, vessző; 2 volt, vessző, 1 watt, vessző; 2 watt, vessző, 1 weber, vessző; 2 weber")?; return Ok(()); } @@ -244,16 +172,7 @@ fn si_derived_2_with_prefixes() -> Result<()> { 1PWb,2EWb "#; test("hu", "SimpleSpeak", expr, - "1 quecto-newton, comma; 2 ronto-newtons, comma; \ - 1 yocto-ohm, comma; 2 zepto-ohms, comma; \ - 1 atto-ohm, comma; 2 femto-ohms, comma; \ - 1 pico-pascal, comma; 2 nano-pascals, comma; \ - 1 micro-siemens, comma; 2 milli-siemens, comma; \ - 1 centi-sievert, comma; 2 deci-sieverts, comma; \ - 1 deka-tesla, comma; 2 hecto-teslas, comma; \ - 1 kilo-volt, comma; 2 mega-volts, comma; \ - 1 giga-watt, comma; 2 tera-watts, comma; \ - 1 peta-weber, comma; 2 exa-webers")?; + "1 quecto-newton, vessző; 2 ronto-newton, vessző; 1 yokto-ohm, vessző; 2 zepto-ohm, vessző; 1 atto-ohm, vessző; 2 femto-ohm, vessző; 1 pikó-pascal, vessző; 2 nano-pascal, vessző; 1 mikro-siemens, vessző; 2 milli-siemens, vessző; 1 centi-sievert, vessző; 2 deci-sievert, vessző; 1 deka-tesla, vessző; 2 hektó-tesla, vessző; 1 kiló-volt, vessző; 2 mega-volt, vessző; 1 giga-watt, vessző; 2 tera-watt, vessző; 1 peta-weber, vessző; 2 exa-weber")?; return Ok(()); } @@ -280,21 +199,7 @@ fn si_accepted() -> Result<()> { 1Bd,2Bd "#; test("hu", "SimpleSpeak", expr, - "1 litre, comma, 2 litres, comma, \ - 1 litre, comma, 2 litres, comma, \ - 1 litre, comma, 2 litres, comma, \ - 1 metric ton, comma; 2 metric tons, comma, \ - 1 dalton, comma, 2 daltons, comma, \ - 1 neper, comma, 2 nepers, comma; \ - 1 atomic mass unit, comma; 2 atomic mass units, comma; \ - 1 electronvolt, comma; 2 electronvolts, comma, \ - 1 radian, comma, 2 radians, comma, \ - 1 steradian, comma; 2 steradians, comma, \ - 1 annum, comma, 2 annums, comma, \ - 1 arcsecond, comma; 2 arcseconds, comma, \ - 1 bit, comma, 2 bits, comma, \ - 1 byte, comma, 2 bytes, comma, \ - 1 baud, comma, 2 bauds")?; + "1 liter, vessző; 2 liter, vessző, 1 liter, vessző; 2 liter, vessző, 1 liter, vessző; 2 liter, vessző; 1 metrikus tonna, vessző; 2 metrikus tonna, vessző, 1 dalton, vessző; 2 dalton, vessző, 1 neper, vessző; 2 neper, vessző; 1 atomtömegegység, vessző; 2 atomtömegegység, vessző; 1 elektronvolt, vessző; 2 elektronvolt, vessző, 1 radián, vessző; 2 radián, vessző; 1 szteradián, vessző; 2 szteradián, vessző, 1 év, vessző, 2 év, vessző; 1 ívmásodperc, vessző; 2 ívmásodperc, vessző, 1 bit, vessző, 2 bit, vessző, 1 byte, vessző; 2 byte, vessző, 1 baud, vessző; 2 baud")?; return Ok(()); } @@ -320,21 +225,7 @@ fn si_accepted_with_prefixes() -> Result<()> { 1TBd,2EBd "#; test("hu", "SimpleSpeak", expr, - "1 quetta-litre, comma; 2 ronna-litres, comma; \ - 1 yotta-litre, comma; 2 zetta-litres, comma; \ - 1 exa-litre, comma; 2 peta-litres, comma; \ - 1 tera-metric ton, comma; 2 giga-metric tons; comma; \ - 1 mega-dalton, comma; 2 kilo-daltons, comma; \ - 1 deci-neper, comma; 2 centi-nepers, comma; \ - 1 hecto-atomic mass unit; comma; 2 deka-atomic mass units; comma; \ - 1 milli-electronvolt, comma; 2 micro-electronvolts; comma; \ - 1 nano-radian, comma; 2 pico-radians, comma; \ - 1 femto-steradian, comma; 2 atto-steradians; comma; \ - 1 giga-annum, comma; 2 mega-annums, comma; \ - 1 zepto-arcsecond, comma; 2 yocto-arcseconds; comma; \ - 1 kilo-bit, comma; 2 mega-bits, comma; \ - 1 giga-byte, comma; 2 tera-bytes, comma; \ - 1 tera-baud, comma; 2 exa-bauds")?; + "1 quetta-liter, vessző; 2 ronna-liter, vessző; 1 yotta-liter, vessző; 2 zetta-liter, vessző; 1 exa-liter, vessző; 2 peta-liter, vessző; 1 tera-metrikus tonna; vessző; 2 giga-metrikus tonna; vessző; 1 mega-dalton, vessző; 2 kiló-dalton, vessző; 1 deci-neper, vessző; 2 centi-neper, vessző; 1 hektó-atomtömegegység; vessző; 2 deka-atomtömegegység; vessző; 1 milli-elektronvolt; vessző; 2 mikro-elektronvolt; vessző; 1 nano-radián, vessző; 2 pikó-radián, vessző; 1 femto-szteradián, vessző; 2 atto-szteradián; vessző; 1 giga-év, vessző; 2 mega-év, vessző; 1 zepto-ívmásodperc; vessző; 2 yokto-ívmásodperc; vessző; 1 kiló-bit, vessző; 2 mega-bit, vessző; 1 giga-byte, vessző; 2 tera-byte, vessző; 1 tera-baud, vessző; 2 exa-baud")?; return Ok(()); } @@ -359,20 +250,7 @@ fn without_prefix_time() -> Result<()> { 1yr,2yr "#; test("hu", "SimpleSpeak", expr, - "1 second, comma, 2 seconds, comma, \ - 1 second, comma, 2 seconds, comma, \ - 1 minute, comma, 2 minutes, comma, \ - 1 minute, comma, 2 minutes, comma, \ - 1 minute, comma, 2 minutes, comma, \ - 1 hour, comma, 2 hours, comma, \ - 1 hour, comma, 2 hours, comma, \ - 1 hour, comma, 2 hours, comma, \ - 1 day, comma, 2 days, comma, \ - 1 day, comma, 2 days, comma, \ - 1 week, comma, 2 weeks, comma, \ - 1 week, comma, 2 weeks, comma, \ - 1 year, comma, 2 years, comma, \ - 1 year, comma, 2 years")?; + "1 másodperc, vessző; 2 másodperc, vessző; 1 másodperc, vessző; 2 másodperc, vessző, 1 perc, vessző; 2 perc, vessző, 1 perc, vessző; 2 perc, vessző, 1 perc, vessző; 2 perc, vessző, 1 óra, vessző; 2 óra, vessző, 1 óra, vessző; 2 óra, vessző, 1 óra, vessző; 2 óra, vessző, 1 nap, vessző, 2 nap, vessző, 1 nap, vessző, 2 nap, vessző, 1 hét, vessző; 2 hét, vessző, 1 hét, vessző; 2 hét, vessző, 1 év, vessző, 2 év, vessző, 1 év, vessző, 2 év")?; return Ok(()); } @@ -391,14 +269,7 @@ fn without_prefix_angles() -> Result<()> { 1asec,2asec "#; test("hu", "SimpleSpeak", expr, - "1 degree, comma, 2 degrees, comma, \ - 1 degree, comma, 2 degrees, comma, \ - 1 arcminute, comma; 2 arcminutes, comma, \ - 1 arcminute, comma; 2 arcminutes, comma, \ - 1 arcminute, comma; 2 arcminutes, comma, \ - 1 arcminute, comma; 2 arcminutes, comma, \ - 1 arcsecond, comma; 2 arcseconds, comma, \ - 1 arcsecond, comma; 2 arcseconds")?; + "1 fok, vessző, 2 fok, vessző, 1 fok, vessző, 2 fok, vessző, 1 ívperc, vessző; 2 ívperc, vessző, 1 ívperc, vessző; 2 ívperc, vessző, 1 ívperc, vessző; 2 ívperc, vessző, 1 ívperc, vessző; 2 ívperc, vessző; 1 ívmásodperc, vessző; 2 ívmásodperc, vessző; 1 ívmásodperc, vessző; 2 ívmásodperc")?; return Ok(()); } @@ -415,12 +286,7 @@ fn without_prefix_distance() -> Result<()> { 1fm,2fm "#; test("hu", "SimpleSpeak", expr, - "1 astronomical unit, comma; 2 astronomical units, comma, \ - 1 light year, comma; 2 light years, comma, \ - 1 parsec, comma, 2 parsecs, comma, \ - 1 angstrom, comma; 2 angstroms, comma, \ - 1 angstrom, comma; 2 angstroms, comma, \ - 1 fermi, comma, 2 fermis")?; + "1 csillagászati egység, vessző; 2 csillagászati egység; vessző; 1 fényév, vessző; 2 fényév, vessző, 1 parszek, vessző; 2 parszek, vessző; 1 angström, vessző; 2 angström, vessző; 1 angström, vessző; 2 angström, vessző, 1 fermi, vessző; 2 fermi")?; return Ok(()); } @@ -446,21 +312,7 @@ fn without_prefix_other() -> Result<()> { 1erg,2erg "#; test("hu", "SimpleSpeak", expr, - "1 hectare, comma; 2 hectares, comma, \ - 1 decibel, comma; 2 decibels, comma, \ - 1 atmosphere, comma; 2 atmospheres, comma; \ - 1 atomic mass unit, comma; 2 atomic mass units, comma, \ - 1 bar, comma, 2 bars, comma, \ - 1 calorie, comma; 2 calories, comma, \ - 1 curie, comma, 2 curies, comma, \ - 1 gradian, comma; 2 gradians, comma, \ - 1 molar, comma, 2 molars, comma, \ - 1 roentgen, comma; 2 roentgens, comma; \ - 1 revolution per minute, comma; 2 revolutions per minute, comma, \ - 1 fluid dram, comma; 2 fluid drams, comma, \ - 1 m-h-o, comma, 2 m-h-os, comma, \ - 1 dyne, comma, 2 dynes, comma, \ - 1 erg, comma, 2 ergs")?; + "1 hektár, vessző; 2 hektár, vessző, 1 decibel, vessző; 2 decibel, vessző; 1 atmoszféra, vessző; 2 atmoszféra, vessző; 1 atomikus tömeg, vessző; 2 atomikus tömeg, vessző, 1 bár, vessző; 2 bár, vessző; 1 kalória, vessző; 2 kalória, vessző, 1 curie, vessző; 2 curie, vessző; 1 gradiens, vessző; 2 gradiens, vessző, 1 mól, vessző; 2 mól, vessző; 1 röntgen, vessző; 2 röntgen, vessző; 1 fordulat per perc, vessző; 2 fordulat per perc, vessző; 1 folyadékdróm, vessző; 2 folyadékdróm, vessző, 1 m-h-o, vessző; 2 m-h-o, vessző, 1 dyn, vessző, 2 dyn, vessző, 1 erg, vessző, 2 erg")?; return Ok(()); } @@ -487,22 +339,7 @@ fn without_prefix_powers_of_2() -> Result<()> { 1YiB,2YiB "#; test("hu", "SimpleSpeak", expr, - "1 kibi-bit, comma; 2 kibi-bits, comma, \ - 1 mebi-bit, comma; 2 mebi-bits, comma, \ - 1 gibi-bit, comma; 2 gibi-bits, comma, \ - 1 tebi-bit, comma; 2 tebi-bits, comma, \ - 1 pebi-bit, comma; 2 pebi-bits, comma, \ - 1 exbi-bit, comma; 2 exbi-bits, comma, \ - 1 zebi-bit, comma; 2 zebi-bits, comma, \ - 1 yobi-bit, comma; 2 yobi-bits, comma, \ - 1 kibi-byte, comma; 2 kibi-bytes, comma, \ - 1 mebi-byte, comma; 2 mebi-bytes, comma, \ - 1 gibi-byte, comma; 2 gibi-bytes, comma, \ - 1 tebi-byte, comma; 2 tebi-bytes, comma, \ - 1 pebi-byte, comma; 2 pebi-bytes, comma, \ - 1 exbi-byte, comma; 2 exbi-bytes, comma, \ - 1 zebi-byte, comma; 2 zebi-bytes, comma, \ - 1 yobi-byte, comma; 2 yobi-bytes")?; + "1 kibi-bit, vessző; 2 kibi-bit, vessző; 1 mebi-bit, vessző; 2 mebi-bit, vessző; 1 gibi-bit, vessző; 2 gibi-bit, vessző; 1 tebi-bit, vessző; 2 tebi-bit, vessző; 1 pebi-bit, vessző; 2 pebi-bit, vessző; 1 exbi-bit, vessző; 2 exbi-bit, vessző; 1 zebi-bit, vessző; 2 zebi-bit, vessző; 1 yobi-bit, vessző; 2 yobi-bit, vessző; 1 kibi-byte, vessző; 2 kibi-byte, vessző; 1 mebi-byte, vessző; 2 mebi-byte, vessző; 1 gibi-byte, vessző; 2 gibi-byte, vessző; 1 tebi-byte, vessző; 2 tebi-byte, vessző; 1 pebi-byte, vessző; 2 pebi-byte, vessző; 1 exbi-byte, vessző; 2 exbi-byte, vessző; 1 zebi-byte, vessző; 2 zebi-byte, vessző; 1 yobi-byte, vessző; 2 yobi-byte")?; return Ok(()); } @@ -520,14 +357,11 @@ fn si_other_numbers() -> Result<()> { 2.5µsec, 32.34mol"#; test_prefs("hu", "SimpleSpeak", vec![("Verbosity", "Terse")], expr, - "10 l comma, 20 m comma; x milli-seconds, comma; y micro-seconds, comma, \ - deka-grams, comma; 1235 deka-newtons; comma; 25 micro-seconds, comma; 3234 moles")?; + "10 l vessző, 20 m vessző; x milli-másodperc; vessző; y mikro-másodperc; vessző, deka-gram, vessző; 1235 deka-newton; vessző; 25 mikro-másodperc; vessző; 3234 mol")?; test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Medium")], expr, - "10 litre, comma, 20 metres, comma; x milli-seconds, comma; y micro-seconds, comma, \ - deka-grams, comma; 1235 deka-newtons; comma; 25 micro-seconds, comma; 3234 moles")?; + "10 liter, vessző; 20 méter, vessző; x milli-másodperc; vessző; y mikro-másodperc; vessző, deka-gram, vessző; 1235 deka-newton; vessző; 25 mikro-másodperc; vessző; 3234 mol")?; test_prefs("hu", "SimpleSpeak", vec![("Verbosity", "Verbose")], expr, - "10 litre, comma, 20 metres, comma; x milli-seconds, comma; y micro-seconds, comma, \ - deka-grams, comma; 1235 deka-newtons; comma; 25 micro-seconds, comma; 3234 moles")?; + "10 liter, vessző; 20 méter, vessző; x milli-másodperc; vessző; y mikro-másodperc; vessző, deka-gram, vessző; 1235 deka-newton; vessző; 25 mikro-másodperc; vessző; 3234 mol")?; return Ok(()); } @@ -543,8 +377,7 @@ fn test_mtext_inference() -> Result<()> { 4.5mT ]"#; test("hu", "SimpleSpeak", expr, - "open bracket; 1 metric ton, comma; 2 peta-amps, comma, \ - 3 pascals, comma; 45 milli-teslas; close bracket")?; + "nyitott zárójel; 1 metrikus tonna, vessző; 2 peta-amper, vessző; 3 pascal, vessző; 45 milli-tesla; zárójel")?; return Ok(()); } @@ -559,7 +392,7 @@ fn test_mtext_inference() -> Result<()> { mmin "#; test("hu", "SimpleSpeak", expr, - "3 metres, comma; 1 kilo-metre, comma, 3 metres, comma; 3 tenths farads, comma; m sub min end sub")?; + "3 méter, vessző; 1 kiló-méter, vessző; 3 méter, vessző; 3 tized farád, vessző; m alsó index min alsó index vége")?; return Ok(()); } From 1fc4eca933ce0b89707651007fcbf942df54f84b Mon Sep 17 00:00:00 2001 From: nsoiffer Date: Fri, 26 Jun 2026 12:34:51 -0700 Subject: [PATCH 4/5] 'pronounce' had empty 'text' value which is an error. Wasn't actually used, so I removed it. --- Rules/Languages/hu/overview.yaml | 1 - 1 file changed, 1 deletion(-) diff --git a/Rules/Languages/hu/overview.yaml b/Rules/Languages/hu/overview.yaml index 23317dfed..e7b30e72e 100644 --- a/Rules/Languages/hu/overview.yaml +++ b/Rules/Languages/hu/overview.yaml @@ -57,7 +57,6 @@ if: "*[2][self::m:mi][string-length(.)=1]" then: - x: "*[2]" - - pronounce: [text: "", ipa: "θ", sapi5: "", eloquence: "T"] else: [x: "*[2]"] - T: "gyök" - test: From 1f092b9b1e919ca552f80f12510ea1bcf2a8c3c4 Mon Sep 17 00:00:00 2001 From: nsoiffer Date: Fri, 26 Jun 2026 12:39:55 -0700 Subject: [PATCH 5/5] improved error message for 'pronounce' --- src/tts.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/tts.rs b/src/tts.rs index bbadfd07e..c195f2a75 100644 --- a/src/tts.rs +++ b/src/tts.rs @@ -173,7 +173,7 @@ impl Pronounce { } } if text.is_empty() { - bail!("'text' key/value is required for 'pronounce' -- it is used is the speech engine is unknown.") + bail!("'text' key/value is required for 'pronounce' -- it can not be an empty string.") } return Ok( Pronounce{ text: text.to_string(),