diff --git a/Rules/Languages/hu/ClearSpeak_Rules.yaml b/Rules/Languages/hu/ClearSpeak_Rules.yaml
new file mode 100644
index 00000000..02040fc5
--- /dev/null
+++ b/Rules/Languages/hu/ClearSpeak_Rules.yaml
@@ -0,0 +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: "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
new file mode 100644
index 00000000..9c693296
--- /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: "laplaciánus" # phrase('laplacian' of x) -- "LahPlahsian" sounds better with speech engines tested
+ - test:
+ if: "count(*) = 1"
+ then:
+ - test:
+ if: "$Verbosity!='Terse'"
+ then: [T: "a"] # 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: "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]
+ - x: "*[1]"
+
+- name: curl
+ tag: curl
+ match: "count(*) = 1"
+ replace:
+ - T: "rotáció" # phrase(the 'curl of' a field)
+ - test:
+ if: "$Verbosity!='Terse'"
+ then: [T: "a"] # 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: "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]
+ - x: "*[1]"
diff --git a/Rules/Languages/hu/SharedRules/default.yaml b/Rules/Languages/hu/SharedRules/default.yaml
new file mode 100644
index 00000000..89aae5c0
--- /dev/null
+++ b/Rules/Languages/hu/SharedRules/default.yaml
@@ -0,0 +1,734 @@
+---
+#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"
+ - test:
+ - if: "@data-roman-numeral"
+ then: [SPELL: "text()", pause: "short"]
+ else: [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 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: "a karakterlánc" # 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: "per" # phrase("the fraction x 'over' y")
+ - x: "*[2]"
+ - pause: short
+
+- name: literal-default
+ tag: mfrac
+ match: "."
+ replace:
+ - 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: "per" # 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: "tört vége"] # 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: ""] # phrase("'the' root of x")
+ - T: "gyöke"
+ - test:
+ if: "$Verbosity!='Terse'"
+ then: [T: ""] # phrase("the root 'of' x")
+ - x: "*[1]"
+ - pause: short
+ - test:
+ if: "not(IsNode(*[1],'leaf')) or $Impairment = 'Blindness'"
+ 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
+ tag: mroot
+ match: "."
+ replace:
+ - test:
+ if: "$Verbosity!='Terse'"
+ then: [T: ""] # phrase("'the' root of x")
+ - T: "gyök indexszel" # phrase("the 'root with index' 3 of 5")
+ - x: "*[1]"
+ - pause: short
+ - T: "" # phrase("the root 'of' x")
+ - x: "*[2]"
+ - pause: short
+ - test:
+ if: "not(IsNode(*[2],'leaf'))"
+ then: [T: "gyök vége"] # 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: "alsó index" # phrase(x 'sub' 2)
+ - x: "*[2]"
+ - pause: short
+
+- name: power-indexed-by
+ tag: power-indexed-by
+ match: "."
+ replace:
+ - x: "*[1]"
+ - T: "alsó index" # 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: "alsó index"] # phrase(x 'sub' 2)
+ - x: "*[2]"
+
+
+- name: literal
+ tag: [msup, msubsup]
+ match: "."
+ replace:
+ - x: "*[1]"
+ - test:
+ if: "name(.)='msubsup'"
+ then:
+ - T: "alsó index" # 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: "alsó index" # phrase(x 'super' 2)
+ - x: "*[last()]"
+ - test:
+ if: "not(IsNode(*[last()], 'simple')) or $Impairment = 'Blindness'"
+ then: [T: "felső index vége"] # phrase(x super 2 'end of super')
+ else:
+ - test:
+ if: "$Verbosity='Verbose'"
+ then: [T: "felső index"]
+ else: [T: "felső index"]
+ - x: "*[last()]"
+ - test:
+ if: "$Verbosity='Verbose'"
+ then: [T: "felső index vége"]
+ else: [T: "felső index vége"]
+
+- name: default
+ tag: munder
+ match: "."
+ replace:
+ - test:
+ if: "not(IsNode(*[1], 'leaf'))"
+ then: [T: "mennyiség"] # phrase(phrase(x 'quantity' with y above it)
+ - x: "*[1]"
+ - T: "," # phrase(x 'with' z below it)
+ - x: "*[2]"
+ - T: "alatt" # 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: "mennyiség"] # phrase(phrase(the 'quantity' x plus 1 with y above it)
+ - x: "*[1]"
+ - T: "," # phrase(x modified 'with' y above it)
+ - x: "*[2]"
+ - T: "felett" # phrase(x modified 'with' y above it)
+
+- name: default
+ tag: munderover
+ match: "."
+ replace:
+ - test:
+ if: "not(IsNode(*[1], 'leaf'))"
+ then: [T: "mennyiség"] # phrase(the 'quantity' x plus 1 with y above it)
+ - x: "*[1]"
+ - T: "," # phrase(x modified 'with' y above it)
+ - x: "*[2]"
+ - T: "alatta és" # phrase(x modified with y 'below and' y above it)
+ - x: "*[3]"
+ - 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
+ # 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: "preskriptek" # phrase(substitute x 'with' y)
+ - x: "count($Prescripts) div 2"
+ - 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: "és"] # 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: "és"] # 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: "és váltakozó preskriptek" # phrase(in this case there are values 'and alternating prescripts')
+ - x: "$Prescripts[position() > 4]"
+ - T: "preskriptek vége" # 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: "és"] # phrase(10 is greater than 8 'and' less than 15)
+ - T: "posskriptek" # phrase(this material includes several 'postscripts')
+ - x: "count($Postscripts) div 2"
+ - 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: "és"] # 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: "és"] # 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: "és"] # 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: "és"] # 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: "és váltakozó szkriptek" # phrase(this situation involves complexities 'and alternating scripts')
+ - x: "$Postscripts[position() > 8]"
+ - T: "szkriptek vége" # phrase(At this point 'end scripts' occurs)
+
+- name: default
+ tag: [mtable, array]
+ variables:
+ - IsColumnSilent: "false()"
+ - NumColumns: "CountTableColumns(.)"
+ - NumRows: "CountTableRows(.)"
+ match: "."
+ replace:
+ - T: "táblázat" # phrase(the 'table with' 3 rows)
+ - x: "$NumRows"
+ - test:
+ 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: "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: "*"
+
+- 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: "sor" # phrase(the first 'row' of a matrix)
+ - x: "count(preceding-sibling::*)+1"
+ - test:
+ if: "self::m:mlabeledtr"
+ then:
+ - T: "címkével" # 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: "oszlop" # 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: "ü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
+ # Note: @notation can contain more than one value
+ tag: menclose
+ match: "."
+ replace:
+ - test:
+ if: ".[contains(concat(' ', normalize-space(@notation), ' '), ' box ')]"
+ then: [T: "doboz", pause: short] # phrase(the 'box' around the expression)
+ - test:
+ if: ".[contains(@notation,'roundedbox')]"
+ then: [T: "kerek doboz", pause: short] # phrase(the 'round box' around the expression)
+ - test:
+ if: ".[contains(@notation,'circle')]"
+ 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: "vonal" # phrase(draw a straight 'line' on the page)
+ - test:
+ if: ".[contains(concat(' ', normalize-space(@notation), ' '), ' left ')]"
+ then: [T: "balra", pause: short] # phrase(line on 'left' of the expression)
+ - test:
+ if: ".[contains(concat(' ', normalize-space(@notation), ' '), ' right ')]"
+ then: [T: "jobbra", pause: short] # phrase(line on 'right' of the expression)
+ - test:
+ if: ".[contains(@notation,'top')]"
+ then: [T: "felső", pause: short] # phrase(line on 'top' of the expression)
+ - test:
+ if: ".[contains(@notation,'bottom')]"
+ 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'
+ else:
+ - test:
+ if: ".[contains(@notation,'updiagonalstrike')]"
+ then: [T: "átlósan felfelé", pause: short] # phrase(the line runs 'up diagonal')
+ - test:
+ if: ".[contains(@notation,'downdiagonalstrike')]"
+ then: [T: "átlósan lefelé", pause: short] # phrase(the line runs 'down diagonal')
+ - test:
+ if: ".[contains(@notation,'verticalstrike')]"
+ then: [T: "függőleges", pause: short] # phrase(the line is 'vertical')
+ - test:
+ if: ".[contains(@notation,'horizontalstrike')]"
+ 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: "felfelé nyíl", pause: short] # phrase(direction is shown by the 'up arrow')
+ - test:
+ if: ".[contains(concat(' ', normalize-space(@notation), ' '), ' downarrow ')]"
+ then: [T: "lefelé nyíl", pause: short] # phrase(the trend is shown by the 'down arrow')
+ - test:
+ if: ".[contains(@notation,'leftarrow')]"
+ then: [T: "balra nyíl", pause: short] # phrase(the 'left arrow' indicates going back)
+ - test:
+ if: ".[contains(concat(' ', normalize-space(@notation), ' '), ' rightarrow ')]"
+ then: [T: "jobbra nyíl", pause: short] # phrase(the 'right arrow' indicates moving forward)
+ - test:
+ if: ".[contains(@notation,'northeastarrow')]"
+ 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: "délkeleti nyíl", pause: short] # phrase(direction is shown by the 'southeast arrow')
+ - test:
+ if: ".[contains(concat(' ', normalize-space(@notation), ' '), ' southwestarrow ')]"
+ then: [T: "délnyugati nyíl", pause: short] # phrase(direction is shown by the 'southwest arrow')
+ - test:
+ if: ".[contains(@notation,'northwestarrow')]"
+ then: [T: "északnyugati nyíl", pause: short] # phrase(direction is shown by the 'northwest arrow')
+ - test:
+ if: ".[contains(@notation,'updownarrow')]"
+ 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: "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: "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: "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: "aktuárius szimbólum", pause: short] # phrase(the 'actuarial symbol' represents a specific quantity)
+ - test:
+ if: ".[contains(@notation,'madrub')]"
+ 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: "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: "hosszú osztásjel", pause: short] # phrase(the 'long division symbol' indicates a long division calculation)
+ - test:
+ if: ".[contains(@notation,'radical')]"
+ 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: "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: "végpont vége"] # 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: "" # 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 # audit-ignore
+ # 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: 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: "*"
+ 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: "", 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 00000000..a5363878
--- /dev/null
+++ b/Rules/Languages/hu/SharedRules/general.yaml
@@ -0,0 +1,1080 @@
+---
+
+# 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: "" # phrase('the' square root of 25 equals 5)
+ - bookmark: "*[2]/@id"
+ - test:
+ - if: "*[2][.='+']"
+ 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: "komplex számok"] # phrase('complex numbers' consist of two parts)
+ - else_if: "*[1][.='ℕ']"
+ then: [T: "természetes számok"] # phrase('natural numbers' are numbers from 1 to infinity)
+ - else_if: "*[1][.='ℚ']"
+ then: [T: "racionális számok"] # phrase('rational numbers' are the fraction of 2 integers)
+ - else_if: "*[1][.='ℝ']"
+ then: [T: "valós számok"] # phrase('real numbers' can be both positive and negative)
+ - else_if: "*[1][.='ℤ']"
+ 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
+
+ # 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: "komplex számhalmaz"] # phrase(the letter 'C' used to represent complex number)
+ - else_if: "*[1][.='ℕ']"
+ then: [T: "természetes számhalmaz"] # phrase(the letter 'N' may represent natural numbers)
+ - else_if: "*[1][.='ℚ']"
+ then: [T: "racionális számhalmaz"] # phrase(the letter 'Q' may represent rational numbers)
+ - else_if: "*[1][.='ℝ']"
+ then: [T: "valós számhalmaz"] # phrase(the letter 'R' may represent real numbers)
+ - else_if: "*[1][.='ℤ']"
+ 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]"
+
+- name: simple-number-sets
+ tag: number-sets
+ match: "count(*)=0"
+ replace:
+ - bookmark: "@id"
+ - test:
+ - if: ".='ℂ'"
+ then: [T: "a komplex számok halmaza"] # phrase('the complex numbers' include 2 parts)
+ - else_if: ".='ℕ'"
+ then: [T: "a természetes számok halmaza"] # phrase('the natural numbers' begin at 1)
+ - else_if: ".='ℚ'"
+ then: [T: "a racionális számok halmaza"] # phrase('the rational numbers' are the fraction of 2 integers)
+ - else_if: ".='ℝ'"
+ then: [T: "a valós számok halmaza"] # phrase('the real numbers' can be both positive and negative)
+ - else_if: ".='ℤ'"
+ 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
+ tag: real-part
+ match: "."
+ replace:
+ - bookmark: "@id"
+ - 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: "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
+ tag: evaluate
+ match: "count(*)=2"
+ replace:
+ - x: "*[1]"
+ - pause: auto
+ - T: "helyettesítve" # phrase(results were 'evaluated at' a given point)
+ - pause: auto
+ - x: "*[2]"
+
+- name: evaluated-at-3 # audit-ignore
+ tag: evaluate
+ match: "count(*)=3"
+ replace:
+ - x: "*[1]"
+ - pause: auto
+ - T: "behelyettesítve a(z)" # phrase(results were 'evaluated at' this point)
+ - pause: auto
+ - x: "*[3]"
+ - 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
+ tag: pochhammer
+ match: "count(*)=2 and contains(@data-intent-property, ':infix:')"
+ replace:
+ - x: "*[2]"
+ - T: "permutációja" # 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: "" # phrase('the' square root of 25 equals 5)
+ - x: "translate(name(.),'-', ' ')"
+ - test:
+ if: "$Verbosity!='Terse'"
+ then:
+ - T: "ettől:" # phrase(subtracting 5 'from' 10 gives 5)
+ - x: "*[1]"
+ - T: "eddig:" # phrase(adding 6 'to' 6 equals 12)
+ - x: "*[2]"
+ else:
+ - x: "*[1]"
+ - T: "vessző" # 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: "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: "vessző" # 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: ""] # phrase('the' square root of 25 equals 5)
+ - x: "*[1]"
+ - T: "ettől:" # phrase(subtracting 5 'from' 10 gives 5)
+ - x: "*[2]"
+ - pause: short
+ - T: "eddig:" # phrase(adding 6 'to' 6 equals 12)
+ - x: "*[3]"
+ - test:
+ if: "following-sibling::*"
+ then: [T: "értéke:"] # phrase(the square root 'of' 25 equals 5)
+
+- name: bigop-under
+ tag: large-op
+ match: "count(*)=2"
+ replace:
+ - test:
+ if: "$Verbosity!='Terse'"
+ then: [T: ""] # phrase('the' square root of 25 equals 5)
+ - x: "*[1]"
+ - T: "alatta" # phrase(2 'over' 3 equals two thirds)
+ - x: "*[2]"
+ - test:
+ if: "following-sibling::*"
+ then: [T: ""] # 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: ""] # phrase('the' square root of 25 equals 5)
+ - x: "*[1]"
+ - T: "" # phrase(the square root 'of' 25 equals 5)
+ - x: "*[2]"
+
+- name: repeating-decimal
+ tag: repeating-decimal
+ match: "."
+ replace:
+ - x: "*[1]"
+ - T: "ismétlődő szakasszal:" # 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: "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: "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'
+ then: [pause: short]
+ - test:
+ if: "name(.)='say-super'"
+ then_test:
+ if: "$Verbosity='Verbose'"
+ 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
+
+# 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: ""]
+ 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: ""]
+
+# need to reverse the order of speech: $ 3 -> 3 dollars
+- 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]"
+ - 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: ""]
+
+
+- name: sin
+ tag: mi
+ match: ".='sin'"
+ replace:
+ - bookmark: "@id"
+ - T: "szinusz" # phrase(the 'sine' of the angle)
+- name: cos
+ tag: mi
+ match: ".='cos'"
+ replace:
+ - bookmark: "@id"
+ - test:
+ if: "$Verbosity='Terse'"
+ 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'"
+ replace:
+ - bookmark: "@id"
+ - test:
+ if: "$Verbosity='Terse'"
+ 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'"
+ replace:
+ - bookmark: "@id"
+ - test:
+ if: "$Verbosity='Terse'"
+ 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'"
+ replace:
+ - bookmark: "@id"
+ - test:
+ if: "$Verbosity='Terse'"
+ 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'"
+ replace:
+ - bookmark: "@id"
+ - test:
+ if: "$Verbosity='Terse'"
+ 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
+ match: ".='sinh'"
+ replace:
+ - bookmark: "@id"
+ - test:
+ if: "$Verbosity='Terse'"
+ 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'"
+ replace:
+ - bookmark: "@id"
+ - test:
+ if: "$Verbosity='Terse'"
+ 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'"
+ replace:
+ - bookmark: "@id"
+ - test:
+ if: "$Verbosity='Terse'"
+ 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'"
+ replace:
+ - bookmark: "@id"
+ - test:
+ if: "$Verbosity='Terse'"
+ 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'"
+ replace:
+ - bookmark: "@id"
+ - test:
+ if: "$Verbosity='Terse'"
+ 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'"
+ replace:
+ - bookmark: "@id"
+ - test:
+ if: "$Verbosity='Terse'"
+ 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'"
+ replace:
+ - bookmark: "@id"
+ - test:
+ if: "$Verbosity='Terse'"
+ then: [T: "exponenciális"] # phrase('exp' means exponential function)
+ else: [T: "exponenciális"] # phrase('exponential' function)
+- name: covariance
+ tag: mi
+ match: ".='Cov'"
+ replace:
+ - bookmark: "@id"
+ - test:
+ if: "$Verbosity='Terse'"
+ 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)
+ tag: mi
+ match: ".='log' or .='ln'"
+ replace:
+ - bookmark: "@id"
+ - test:
+ - if: "$Verbosity!='Terse'"
+ then: [T: ""] # phrase('the' logarithm function is used in mathematics)
+ - test:
+ - if: ".= 'log'"
+ then: [T: "logaritmus"] # phrase(the 'log' function is used in mathematics)
+ - else_if: "$Verbosity='Terse'"
+ then: [SPELL: "'ln'"]
+ else: [T: "természetes alapú logaritmus"] # 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: "eset"] # phrase(this is the first 'case' of three cases)
+ - else_if: "self::m:system-of-equations"
+ 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: ""] # 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: "eset"] # phrase('case' 1 of 10 cases)
+ - else_if: "parent::m:system-of-equations"
+ 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: "címkével" # 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: "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: "determináns"] # phrase(the 2 by 2 'determinant'))
+ else: [T: "mátrix"] # phrase(the 2 by 2 'mátrix')
+
+ - T: "eleme:" # 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: "a(z)" # phrase('the' 1 by 2 matrix M)
+ - x: count(*)
+ - T: "x" # phrase(the 1 'by' 2 matrix)
+ - x: count(*[self::m:mtr][1]/*)
+ - T: "zérusmátrix" # 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: "a(z)" # phrase('the' 1 by 2 matrix M)
+ - x: count(*)
+ - T: "x" # phrase(the 1 'by' 2 matrix)
+ - x: count(*[self::m:mtr][1]/*)
+ - T: "egységmátrix" # 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: "a(z)" # phrase('the' 1 by 2 matrix)
+ - x: count(*)
+ - T: "x" # phrase(the 1 'by' 2 matrix)
+ - x: count(*[self::m:mtr][1]/*)
+ - 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
+ # 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: "a(z)" # phrase('the' 2 by 2 matrix M)
+ - x: count(*)
+ - T: "x 1-es oszlop" # phrase(the 2 'by 1 column' matrix)
+ - test:
+ if: "$ClearSpeak_Matrix = 'Vector' or $ClearSpeak_Matrix = 'EndVector'"
+ 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: "vége a" # phrase('end' of matrix)
+ - test:
+ if: $ClearSpeak_Matrix = 'EndVector'
+ 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: "a(z)" # phrase('the' 2 by 2 matrix M)
+ - x: "count(*)"
+ - T: "x 1-es oszlop" # phrase(the 2 'by 1 column' matrix)
+ - test:
+ if: "$ClearSpeak_Matrix = 'Vector' or $ClearSpeak_Matrix = 'EndVector'"
+ 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: "mátrix vége"] # 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: "az 1-szer" # phrase('the 1 by' 2 matrix)
+ - x: count(*/*)
+ - T: "-es sor" # phrase(the 1 by 4 'row' matrix)
+ - test:
+ if: "$ClearSpeak_Matrix = 'Vector' or $ClearSpeak_Matrix = 'EndVector'"
+ 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: "vége a" # phrase(the 'end' of matrix has been reached)
+ - test:
+ if: $ClearSpeak_Matrix = 'EndMatrix'
+ 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: "az 1-szer" # phrase('the 1 by' 2 matrix)
+ - x: "count(*/*)"
+ - T: "-es sor" # phrase(the 1 by 2 'row' matrix)
+ - test:
+ if: "$ClearSpeak_Matrix = 'Vector' or $ClearSpeak_Matrix = 'EndVector'"
+ 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: "vége a" # phrase(the 'end' of matrix has been reached)
+ - test:
+ if: $ClearSpeak_Matrix = 'EndMatrix'
+ then: [T: "mátrixnak"] # phrase(the 2 by 2 'matrix')
+ else: [T: "vektornak"] # phrase(the 2 by 1 'vector')
+
+- name: simple-small-matrix # audit-ignore
+ 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: "a(z)" # phrase('the' 1 by 2 matrix M)
+ - x: count(*)
+ - T: "x" # phrase(the 1 'by' 2 matrix)
+ - x: count(*[self::m:mtr][1]/*)
+ - test:
+ if: "self::m:determinant"
+ 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: "vége a" # phrase(the 'end' of matrix has been reached)
+ - test:
+ if: "self::m:determinant"
+ then: [T: "determinánsnak"] # phrase(the 2 by 2 'determinant')
+ else: [T: "mátrixnak"] # phrase(the 2 by 2 'matrix')
+
+- name: default-matrix # audit-ignore
+ tag: [matrix, determinant]
+ variables: [IsColumnSilent: "$SpeechStyle = 'ClearSpeak' and $ClearSpeak_Matrix = 'SilentColNum'"]
+ match: "."
+ replace:
+ - T: "a(z)" # phrase('the' 1 by 2 matrix M)
+ - x: "count(*)"
+ - T: "x" # phrase(the 1 'by' 2 matrix)
+ - x: "count(*[self::m:mtr][1]/*)"
+ - test:
+ if: "self::m:determinant"
+ 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: "vége a" # phrase(the 'end' of matrix has been reached)
+ - test:
+ if: "self::m:determinant"
+ 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]
+ match: "*[1][.='msub']"
+ replace:
+ - x: "*[2]"
+ - test:
+ if: "$Verbosity='Verbose'"
+ then: [T: "alsó index"] # phrase(H 'subscript' 2)
+ else_test:
+ if: "$Verbosity='Medium'"
+ then: [T: "alsó index"] # phrase(H 'sub' 2)
+ - x: "*[3]"
+
+- name: dimension-by
+ tag: mrow
+ match: dimension-product
+ replace:
+ - insert:
+ nodes: "*"
+ replace: [T: "x", 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: "felső index"] # phrase(H 'superscript' 2)
+ else_test:
+ if: "$Verbosity='Medium'"
+ 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 -
+ 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: "felső index"] # phrase(H 'superscript' 2)
+ else_test:
+ if: "$Verbosity='Medium'"
+ then: [T: "felső index"] # phrase(H 'super' 2)
+ - x: "$Prescripts[2]"
+ - pause: "short"
+ - test:
+ if: "not($Prescripts[1][self::m:none])"
+ then:
+ - test:
+ if: "$Verbosity='Verbose'"
+ then: [T: "alsó index"] # phrase(a 'subscript' may be used to indicate an index)
+ else_test:
+ if: "$Verbosity='Medium'"
+ then: [T: "alsó index"] # 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: "felső index"] # phrase(H 'superscript' 2)
+ else_test:
+ if: "$Verbosity='Medium'"
+ then: [T: "felső index"] # phrase(H 'super' 2)
+ - x: "$Prescripts[4]"
+ - pause: "short"
+ - test:
+ if: "not($Prescripts[3][self::m:none])"
+ then:
+ - test:
+ if: "$Verbosity='Verbose'"
+ then: [T: "alsó index"] # phrase(H 'subscript' 2)
+ else_test:
+ if: "$Verbosity='Medium'"
+ then: [T: "alsó index"] # 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: "alsó index"] # phrase(phrase(H 'subscript' 2)
+ else_test:
+ if: "$Verbosity='Medium'"
+ then: [T: "alsó index"] # 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: "felső index"] # phrase(H 'superscript' 2)
+ else_test:
+ if: "$Verbosity='Medium'"
+ then: [T: "felső index"] # 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: "alsó index"] # phrase(H 'subscript' 2)
+ else_test:
+ if: "$Verbosity='Medium'"
+ then: [T: "alsó index"] # phrase(H 'sub' 2)
+ - x: "$Postscripts[3]"
+ - pause: "short"
+ - test:
+ if: "not($Postscripts[4][self::m:none])"
+ then:
+ - test:
+ if: "$Verbosity='Verbose'"
+ then: [T: "felső index"] # phrase(H 'superscript' 2)
+ else_test:
+ if: "$Verbosity='Medium'"
+ then: [T: "felső index"] # 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: "alsó index"] # phrase(H 'subscript' 2)
+ else_test:
+ if: "$Verbosity='Medium'"
+ then: [T: "alsó index"] # phrase(H 'sub' 2)
+ - x: "$Postscripts[5]"
+ - pause: "short"
+ - test:
+ if: "not($Postscripts[6][self::m:none])"
+ then:
+ - test:
+ if: "$Verbosity='Verbose'"
+ then: [T: "felső index"] # phrase(H 'superscript' 2)
+ else_test:
+ if: "$Verbosity='Medium'"
+ then: [T: "felső index"] # 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: "alsó index"] # phrase(H 'subscript' 2)
+ else_test:
+ if: "$Verbosity='Medium'"
+ then: [T: "alsó index"] # phrase(H 'sub' 2)
+ - x: "$Postscripts[7]"
+ - pause: "short"
+ - test:
+ if: "not($Postscripts[8][self::m:none])"
+ then:
+ - test:
+ if: "$Verbosity='Verbose'"
+ then: [T: "felső index"] # phrase(H 'superscript' 2)
+ else_test:
+ if: "$Verbosity='Medium'"
+ then: [T: "felső index"] # 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: "szilárd"] # phrase(Boron is a 'solid' in its natural state)
+ - else_if: ".='l'"
+ then: [T: "folyékony"] # phrase(water is a 'liquid')
+ - else_if: ".='g'"
+ 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
+ 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: "egyes kötés"] # phrase(a 'single bond' is formed when two atoms share one pair of electrons)
+ - else_if: ".='=' or .='∷'"
+ 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: "hármas kötés"] # phrase(a 'triple bond' occurs when two atoms share three pairs of electrons)
+ - else_if: ".='≣'"
+ 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
+ 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: "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: "egyensúlyban van a következővel:"] # phrase(a reactant 'is in equilibrium with' a product)
+ - else_if: ".=''" # U+1F8D3
+ 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: "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
+ 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 00000000..c23f2252
--- /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: "a vonalszakasz innen:" # phrase('the line segment from' A to B)
+ - x: "*[1]"
+ - T: "eddig:" # phrase(the line segment from A 'to' B)
+ - x: "*[2]"
+ else:
+ - T: "vonalszakasz" # 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: "a sugár innen:" # phrase('the ray from' A to B)
+ - x: "*[1]"
+ - T: "ide:" # phrase(the ray from A 'to' B)
+ - x: "*[2]"
+ else:
+ - T: "sugár" # phrase(the 'ray'A B)
+ - x: "*[1]"
+ - x: "*[2]"
+
+- name: geometry-arc
+ tag: arc
+ match: "count(*)=2"
+ replace:
+ - test:
+ if: "$Verbosity='Verbose'"
+ then: [T: "az"] # phrase('the' arc A B C)
+ - T: "ív" # 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: "a szög mértéke" # phrase('the measure of the angle' ABC)
+ else:
+ - T: "szög mértéke" # phrase('measure of angle' ABC)
+ - x: "*[1]"
+ - x: "*[2]"
+ - x: "*[3]"
+
+
+- name: coordinate
+ tag: coordinate
+ match: "."
+ replace:
+ - test:
+ if: "$Verbosity='Verbose'"
+ then: [T: "a"] # phrase('the' point at 1, 2)
+ - T: "pont" # phrase(the 'point' at 1, 2)
+ - test:
+ if: "$Verbosity='Verbose'"
+ then: [T: "a"] # phrase('the' point at 1, 2)
+ - pause: short
+ - insert:
+ nodes: "*"
+ 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: "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
new file mode 100644
index 00000000..12166322
--- /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: "a" # phrase('the' square root of 25 equals 5)
+ - T: "determináns" # phrase(the 'determinant' of a matrix)
+ - test:
+ if: "$Verbosity!='Terse'"
+ then:
+ - T: "a" # phrase(systems 'of' linear equations)
+ - x: "*[1]"
+ - test:
+ if: "not(IsNode(*[1], 'simple')) and $Impairment = 'Blindness'"
+ then: [T: "determináns vége"] # phrase('end determinant' of a matrix)
+
+
+- name: subscripted-norm
+ tag: subscripted-norm
+ match: "count(*)=2"
+ replace:
+ - test:
+ if: "$Verbosity='Verbose'"
+ then:
+ - T: "a" # phrase('the' square root of 25 equals 5)
+ - x: "*[2]"
+ - T: "normalizálás" # phrase(the 'norm' can be a measure of distance)
+ - test:
+ if: "$Verbosity!='Terse'"
+ then:
+ - 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
new file mode 100644
index 00000000..b5f263c3
--- /dev/null
+++ b/Rules/Languages/hu/SimpleSpeak_Rules.yaml
@@ -0,0 +1,666 @@
+---
+- 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(x 'minus' y)
+ - x: "translate(text(), '-_', '')"
+
+- name: default
+ tag: square-root
+ match: "."
+ replace:
+ - test:
+ if: "$Verbosity!='Terse'"
+ 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: "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: "gyök vége", pause: medium] # phrase(start the square root of x 'end of root')
+
+- name: default
+ tag: root
+ match: "."
+ replace:
+ - test:
+ if: "$Verbosity!='Terse'"
+ then: [T: "a"]
+ - test:
+ if: "*[2][self::m:mn and not(contains(., '.'))]"
+ then_test:
+ - if: "*[2][.='2']"
+ then: [T: "négyzetgyöke"] # phrase(the 'square root' of x)
+ - else_if: "*[2][.='3']"
+ 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: "-edik", ipa: "ɛdik", sapi5: "edik", eloquence: "edik"]
+ else: [x: "*[2]"]
+ - T: "gyöke" # phrase(the square 'root' of)
+ - test:
+ if: "$Verbosity!='Terse'"
+ then: [T: "ennek:"] # phrase(the square root 'of' x)
+ - x: "*[1]"
+ - pause: short
+ - test:
+ if: "not(IsNode(*[1], 'leaf')) and $Impairment = 'Blindness'"
+ 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
+- 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: "per" # phrase(the fraction 3 'over' 4)
+ - x: "*[2]"
+ - pause: short
+
+- name: default
+ tag: fraction
+ match: "."
+ replace:
+ - test:
+ if: "$Impairment = 'Blindness'"
+ then: [T: "tört"] # phrase(the 'fraction' 3 over 4)
+ - pause: short
+ - x: "*[1]"
+ - test:
+ if: "not(IsNode(*[1],'leaf'))"
+ then: [pause: short]
+ - T: "per" # 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: "tört vége"] # 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: "inverz" # phrase(the 'inverse' of f)
+ - x: "*[1]"
+
+# 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 # 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:
+ - x: "*[1]"
+ - bookmark: "*[2]/@id"
+ - test:
+ if: "*[2][.=2]"
+ 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 # 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"
+
+- 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]"
+ - 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: "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
+ # 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: "emelve a(z)" # phrase(15 'raised to the' second power equals 225)
+ - x: "*[2]"
+ - pause: short
+ - test:
+ if: "$Impairment = 'Blindness'"
+ then:
+ - T: "kitevő vége" # phrase(start 2 raised to the exponent 4 'end of exponent')
+ - pause: short
+ else:
+ - pause: medium
+
+- 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: "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(z)"] # phrase('the' set of integers)
+ - x: "*[1]"
+ - T: "halmaz" # phrase(this is a 'set' of integers)
+
+#
+# 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:
+ - ".='' 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: 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 "
+ - "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]"
+
+- 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"
+- include: "SharedRules/default.yaml"
diff --git a/Rules/Languages/hu/definitions.yaml b/Rules/Languages/hu/definitions.yaml
new file mode 100644
index 00000000..c0e75bee
--- /dev/null
+++ b/Rules/Languages/hu/definitions.yaml
@@ -0,0 +1,615 @@
+---
+- 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= 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= ; 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",
+ ### 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=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=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: {
+ "divergens", "gradiens", "rotáció"
+ }
+
+- 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", "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": "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
+# 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": "amper",
+ "cd": "kandela",
+ "K": "kelvin", "K": "kelvin", # U+212A
+ "g": "gram",
+ "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": "Celsius fok", "℃": "Celsius fok", # should only take negative powers
+ "F": "farád",
+ "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": "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": "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": "é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
+ "B": "byte", # should only take positive powers
+ "Bd": "baud", # should only take positive powers
+ }
+
+
+- UnitsWithoutPrefixes: {
+ # time
+ "″": "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
+ "°": "fok", "deg": "fok", # should only take negative powers
+ "arcmin": "ívperc",
+ "amin": "ívperc",
+ "am": "ívperc",
+ "MOA": "ívperc",
+ "arcsec": "ívmásodperc",
+ "asec": "ívmásodperc",
+
+ # distance
+ "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": "hektár",
+ # "B": "bel", # "B" more commonly means bytes
+ "dB": "decibel", # already logarithmic, so not used with SI prefixes
+
+ "amu": "atomikus tömeg",
+ "atm": "atmoszféra",
+ "bar": "bár",
+ "cal": "kalória",
+ "Ci": "curie",
+ "grad": "gradiens",
+ "M": "mól",
+ "R": "röntgen",
+ "rpm": "fordulat per perc",
+ "℧": "m-h-o",
+ "dyn": "dyn",
+ "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": "hüvelyk",
+ "ft": "láb",
+ "mi": "mérföld",
+ "rd": "rúd",
+ "li": "link",
+ "ch": "lánc",
+
+ # area
+ "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": "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": "folyadékdróm",
+ "fl oz": "folyadék uncia",
+ "gi": "gill",
+ "cp": "csésze", "cup": "csésze",
+ "pt": "pint",
+ "qt": "quart",
+ "gal": "gallon",
+
+ # weight
+ "gr": "gabona",
+ "dr": "dram",
+ "oz": "uncia", "℥": "uncia",
+ "lb": "font",
+ "cwt": "százfontos",
+ "dwt": "filléres",
+ "oz t": "troy uncia",
+ "lb t": "troy font",
+
+ # energy
+ "hp": "lóerő",
+ "BTU": "BTU",
+ "°F": "Fahrenheit fok", "℉": "Fahrenheit fok",
+
+ # other
+ "mph": "mérföld per óra",
+ "mpg": "mérföld per gallon",
+ }
+
+- CurrencySymbols: {
+ "$": "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": "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": "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
+# 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: [
+ "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: [
+ "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: [
+ "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: [
+ "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: [
+ "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: [
+ "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: [
+ "", "tizedik", "huszadik", "harmincadik", "negyvenedik", "ötvenedik", "hatvanadik", "hetvenedik", "nyolcvanadik", "kilencvenedik"
+ ]
+
+- NumbersOrdinalPluralTens: [
+ "", "tizedek", "huszadok", "harmincadok", "negyvenedikek", "ötvenedikek", "hatvanadikok", "hetvenedikek", "nyolcvanadikak", "kilencvenedekikek"
+ ]
+
+
+- NumbersHundreds: [
+ "", "száz", "kétszáz", "háromszáz", "négyszáz", "ötszáz",
+ "hatszáz", "hétszáz", "nyolcszáz", "kilencszáz"
+ ]
+
+- NumbersOrdinalHundreds: [
+ "", "századik", "kétszázadik", "háromszázadik", "négyszázadik", "ötszázadik",
+ "hatszázadik", "hétszázadik", "nyolcszázadik", "kilencszázadik"
+ ]
+
+- NumbersOrdinalPluralHundreds: [
+ "", "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: [
+ "", "ezer", "millió", "milliárd", "billió", "kvadrillió",
+ "kvintillió", "szextillon", "septillion", "oktilió", "nemmilliárd",
+ ]
+
+- NumbersOrdinalLarge: [
+ "", "ezredik", "milliomodik", "milliárdodik", "billiódik", "kvadrilliódik",
+ "kvintilliódik", "szextillonidik", "septillionodik", "oktillionodik", "nonmilliomodrészedik"
+ ]
+
+- NumbersOrdinalPluralLarge: [
+ "", "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
new file mode 100644
index 00000000..ff4afb8b
--- /dev/null
+++ b/Rules/Languages/hu/navigate.yaml
@@ -0,0 +1,1750 @@
+---
+# 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: "teljesen kinagyítva", pause: "medium"]
+ - else_if: "IsNode(., 'leaf') and starts-with($NavCommand, 'ZoomIn')"
+ then:
+ - test:
+ - if: "string-length(.) = 1"
+ then: [T: "teljesen ráközelített"] # phrase('zoomed in all of the way')
+ - else_if: "$NavNodeOffset = 0"
+ 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:
+ - 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: "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: "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: "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: "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: "jobbra"] # phrase(move to the 'right')
+ - else_if: "substring($NavCommand, string-length($Prefix)+1) = 'Previous'"
+ then: [T: "balra"] # phrase(move to the 'left')
+ - else_if: "substring($NavCommand, string-length($Prefix)+1) = 'Current'"
+ then: [T: "jelenlegi"] # phrase(who is the 'current' president)
+ - else_if: "substring($NavCommand, string-length($Prefix)+1) = 'LineStart'"
+ then: [T: "a sor elejére"] # phrase(move 'to start of line')
+ - else_if: "substring($NavCommand, string-length($Prefix)+1) = 'LineEnd'"
+ then: [T: "a sor végére"] # 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: "oszlop"
+ - 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: "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: "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: "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
+- 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: "része" # 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: "nagyítás visszavonása"] # phrase('undo zoom in')
+ - else_if: "$PreviousNavCommand = 'ZoomOut'"
+ then: [T: "kicsinyítés visszavonása"] # phrase('undo zoom out')
+ - else_if: "$PreviousNavCommand = 'ZoomInAll'"
+ then: [T: "a teljes nagyítás visszavonása"] # phrase('undo zooming in all of the way')
+ - else_if: "$PreviousNavCommand = 'ZoomOutAll'"
+ 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: "balra mozgatás visszavonása"] # phrase('undo move left')
+ - else_if: "$PreviousNavCommand = 'MoveNext' or $PreviousNavCommand = 'MoveNextZoom'"
+ then: [T: "Jobbra mozgatás visszavonása"] # phrase('undo move right')
+ - else_if: "$PreviousNavCommand = 'None'"
+ then: [T: "nincs előző parancs"] # 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: "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
+ - 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: "ugrás a matematikai blokk elejére"] # phrase('move to start of math')
+ - else_if: "$NavCommand = 'MoveLineStart'"
+ then: [T: "Ugrás a sor elejére"] # phrase('move to start of line')
+ - else_if: "$NavCommand = 'MoveEnd'"
+ 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'"
+ 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 , so no grandchild
+ then: [x: "*[1]/*[1]"]
+ else: [x: "*[1]"]
+ else:
+ - with:
+ variables: [NavCommand: "'MovePreviousZoom'"]
+ replace:
+ - test:
+ if: "*[last()]/*[last()]" # could be a , 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: "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'"
+ 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: "nincs a táblázatban" # 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: "balra lépés" # phrase('move left')
+ - pause: short
+ - test:
+ if: "$NavVerbosity != 'Terse'"
+ then:
+ - T: "oszlop" # 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: "nincs előző oszlop" # 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: "Jobbra lépés" # phrase('move right')
+ - pause: short
+ - test:
+ if: "$NavVerbosity != 'Terse'"
+ then:
+ - T: "oszlop" # 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: "nincs következő oszlop" # 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: "mozgás felfelé" # phrase('move up' to previous row in the table)
+ - pause: short
+ - test:
+ if: "$NavVerbosity != 'Terse'"
+ then:
+ - T: "sor" # phrase(the previous 'row' in the table)
+ - x: "count(../preceding-sibling::*)"
+ - pause: short
+ - T: "oszlop" # 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: "nincs előző sor" # 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: "mozgás lefelé" # phrase('move down' to the next row in the table)
+ - pause: short
+ - test:
+ if: "$NavVerbosity != 'Terse'"
+ then:
+ - T: "sor" # phrase(the next 'row' in the table)
+ - x: "count(../preceding-sibling::*)+2"
+ - pause: short
+ - T: "oszlop" # 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: "nincs következő sor" # 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: "mozgás az előző sorra" # 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: "nincs előző sor" # 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: "mozgás a következő sorra" # 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: "nincs következő sor" # 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: "mozgás az előző oszlopra" # phrase('move to previous column' in the table)
+ - pause: medium
+ - T: "nincs előző oszlop" # 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: "mozgás a következő oszlopra" # phrase('move to next column' in the table)
+ - pause: medium
+ - T: "nincs következő oszlop" # 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: "az aktuális elem felolvasása" # phrase('read current entry' in the table)
+ - pause: medium
+ - test:
+ if: "$NavVerbosity != 'Terse'"
+ then:
+ - T: "sor" # phrase(the previous 'row' in the table)
+ - x: "count($MTD[1]/../preceding-sibling::*)+1"
+ - pause: short
+ - 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: "nincs a táblázatban" # 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: "nincs a táblázatban" # 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: "nem tud jobbra mozogni" # 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: "nem tud" # phrase('cannot' move right in expression)
+ - test:
+ - if: "$NavCommand = 'MoveNext'"
+ then: [T: "mozogni"] # phrase('move' to next entry in table)
+ - else_if: "$NavCommand = 'ReadNext'"
+ 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: "matematematikai blokk vége" # 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: "oszlop" # 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: "nem tud balra mozogni" # 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: "matematikai blokk kezdete" # 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: "nem tud balra mozogni" # 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: "oszlop" # 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: "karakter" # phrase(a mathematical 'character')
+ - set_variables: [NavMode: "'Character'", ReadZoomLevel: "1"]
+ - else_if: "$NavMode = 'Character'"
+ then:
+ - T: "egyszerű" # phrase(a 'simple' way to do something)
+ - set_variables: [NavMode: "'Simple'", ReadZoomLevel: "1"]
+ - else:
+ - T: "továbbfejlesztett" # phrase(an 'enhanced' way to do something)
+ - set_variables: [NavMode: "'Enhanced'", ReadZoomLevel: "-1"]
+ - T: "mód" # 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: "egyszerű" # phrase(a 'simple' way to do something)
+ - set_variables: [NavMode: "'Simple'", ReadZoomLevel: "1"]
+ - else_if: "$NavMode = 'Character'"
+ then:
+ - T: "továbbfejlesztett" # phrase(an 'enhanced' way to do something)
+ - set_variables: [NavMode: "'Enhanced'", ReadZoomLevel: "-1"]
+ - else:
+ - T: "karakter" # phrase(a mathematical 'character')
+ - set_variables: [NavMode: "'Character'", ReadZoomLevel: "1"]
+ - T: "mód" # 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: "a kifejezés felolvasása mozgás után" # phrase('speak expression after move')
+ - pause: long
+ - set_variables: [Overview: "'false'"]
+ else:
+ - 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'"
+ replace:
+ - test:
+ if: "$NavVerbosity = 'Verbose'"
+ then:
+ - test:
+ - if: "$NavCommand = 'ReadCurrent'"
+ 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"]
+
+# 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: "olvassa el"] # phrase('read' next entry in table)
+ - else_if: "starts-with($NavCommand, 'Describe')"
+ then: [T: "írja le"] # phrase('describe' next entry in table)
+ - else_if: "starts-with($NavCommand, 'MoveTo')"
+ 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"]
+
+- name: set-placemarker
+ tag: "*"
+ match: "starts-with($NavCommand, 'SetPlacemarker')"
+ replace:
+ - test:
+ if: "$NavVerbosity != 'Terse'"
+ then:
+ - T: "helyjelző beállítása" # 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: "nincs több belső elem" # phrase('inside of nothing more')
+ - pause: long
+ - set_variables: [SpeakExpression: "'false'"]
+ else:
+ - T: "belül egy nagy kifejezés" # 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: "belül" # 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 00000000..e7b30e72
--- /dev/null
+++ b/Rules/Languages/hu/overview.yaml
@@ -0,0 +1,114 @@
+---
+# 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 # audit-ignore
+ 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:
+ - test:
+ if: "$Verbosity!='Terse'"
+ then: [T: ""]
+ - x: "*[1]"
+
+- name: overview-default # audit-ignore
+ 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]"
+ 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 # audit-ignore
+ 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 00000000..c45035bf
--- /dev/null
+++ b/Rules/Languages/hu/unicode-full.yaml
@@ -0,0 +1,3796 @@
+---
+
+
+ - "¢": [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: "é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: "szorozva"] # (en: 'times', DeepL translation)
+ else: [T: "pont"] # (en: 'dot', DeepL translation)
+ - "×": # 0xd7
+ - test:
+ if: "$SpeechStyle != 'ClearSpeak' or $ClearSpeak_MultSymbolX = 'Auto'"
+ then: [T: "szorozva"] # (en: 'times', DeepL translation)
+ else_test:
+ if: $ClearSpeak_MultSymbolX = 'By'
+ 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 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)
+ - "ˬ": [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:
+ - audio:
+ value: "beep.mp4"
+ replace: []
+ - test:
+ if: "$CapitalLetters_UseWord"
+ then_test:
+ if: "$SpeechOverrides_CapitalLetters = ''"
+ then_test:
+ if: "$Impairment = 'Blindness'"
+ then: [t: "nagybetű"] # (en: 'cap', DeepL translation)
+ else: [x: "$SpeechOverrides_CapitalLetters"]
+ - pitch:
+ value: "$CapitalLetters_Pitch"
+ replace: [spell: "translate('.', 'ΪΫϏ', 'ιυϗ')"]
+ - 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:
+ - audio:
+ value: "beep.mp4"
+ replace: []
+ - test:
+ if: "$CapitalLetters_UseWord"
+ then_test:
+ if: "$SpeechOverrides_CapitalLetters = ''"
+ then_test:
+ if: "$Impairment = 'Blindness'"
+ then: [t: "nagybetű"] # (en: 'cap', DeepL translation)
+ else: [x: "$SpeechOverrides_CapitalLetters"]
+ - pitch:
+ value: "$CapitalLetters_Pitch"
+ replace: [spell: "translate('.', 'АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ', 'абвгдежзийклмнопрстуфхцчшщъыьэюя')"]
+ - "а": [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: "pont"] # (en: 'dot', DeepL translation)
+ else: [t: "golyó"] # (en: 'bullet', 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: "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 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)
+ - "′": [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: "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: "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: "dupla leütésű" # (en: 'double struck', DeepL translation)
+ - spell: "translate('.', 'ℍℙℾℿ', 'HPΓΠ')"
+
+ - "ℎ": [t: "planck-állandó"] # 0x210e (en: 'planck constant', DeepL translation)
+ - "ℏ": [t: "h bar"] # 0x210f (DeepL translation)
+
+ - "ℐℒ℘ℬℰℱℳ": # 0x2110, 0x2112, 0x2118, 0x2130, 0x2131, 0x2133
+ - t: "script" # (DeepL translation)
+ - spell: "translate('.', 'ℐℒ℘ℬℰℱℳ', 'ILPBEFM')"
+
+ - "ℓ": [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
+ - test:
+ - if: "'.' = '℺'"
+ then: [t: "forgatott"] # (en: 'rotated', DeepL translation)
+ - else_if: "'.' = 'Ⅎ'"
+ then: [T: "fordított"] # (en: 'turned', DeepL translation)
+ - else_if: "'.' = '⅃'"
+ 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)
+ - "ℵ": [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: "alulról közelít"] # (en: 'approaches from below', DeepL translation)
+ else: [t: "északkeleti nyíl"] # (en: 'north east arrow', DeepL translation)
+
+ - "↘": # 0x2198
+ - test:
+ if: "ancestor::*[2][self::m:limit]"
+ 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: "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: "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 (DeepL translation)
+ - "∉": # 0x2209
+ # rule is identical to 0x2208
+ - test:
+ if: "$SpeechStyle != 'ClearSpeak'"
+ 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
+ then_test:
+ - if: $ClearSpeak_SetMemberSymbol = 'Auto' or $ClearSpeak_SetMemberSymbol = 'In'
+ then: [t: "not in"] # (DeepL translation)
+ - else_if: $ClearSpeak_SetMemberSymbol = 'Member'
+ then: [t: "nem tagja"] # (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)
+ else_test:
+ - if: $ClearSpeak_SetMemberSymbol = 'Auto' or $ClearSpeak_SetMemberSymbol = 'Member'
+ then: [t: "nem tagja"] # (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)
+ - 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)
+ - "∊": # 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: "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
+ then_test:
+ - if: $ClearSpeak_SetMemberSymbol = 'Auto' or $ClearSpeak_SetMemberSymbol = 'In'
+ then: [t: "in"] # (DeepL translation)
+ - else_if: $ClearSpeak_SetMemberSymbol = 'Member'
+ 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)
+ else_test:
+ - if: $ClearSpeak_SetMemberSymbol = 'Auto' or $ClearSpeak_SetMemberSymbol = 'Member'
+ then: [t: "tagja a"] # (en: 'is a member of', DeepL translation)
+ - else_if: $ClearSpeak_SetMemberSymbol = 'Element'
+ then: [t: "egy elem a"] # (en: 'is an element of', DeepL translation)
+ - else_if: $ClearSpeak_SetMemberSymbol = 'In'
+ 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: "pont"] # (en: 'dot', DeepL translation)
+ else: [t: "idők"] # (en: 'times', DeepL translation)
+
+ - "√": # 0x221a
+ - test:
+ if: "$Verbosity!='Terse'"
+ then: [t: "a"] # (en: 'the', DeepL translation)
+ - t: "négyzetgyök" # (en: 'square root of', DeepL translation)
+ - "∛": # 0x221b
+ - test:
+ if: "$Verbosity!='Terse'"
+ then: [t: "a"] # (en: 'the', DeepL translation)
+ - t: "kockagyökér" # (en: 'cube root of', DeepL translation)
+ - "∜": # 0x221c
+ - test:
+ if: "$Verbosity!='Terse'"
+ then: [t: "a"] # (en: 'the', DeepL translation)
+ - t: "negyedik gyöke" # (en: 'fourth root of', DeepL translation)
+ - "∝": # 0x221d
+ - test:
+ if: "$Verbosity!='Terse'"
+ 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: "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: "az"] # (en: 'is', DeepL translation)
+ - t: "geometriailag arányos" # (en: 'geometrically proportional to', DeepL translation)
+ - "∻": # 0x223b
+ - test:
+ if: "$Verbosity!='Terse'"
+ 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: "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: "az"] # (en: 'is', DeepL translation)
+ - t: "aszimptotikusan egyenlő" # (en: 'asymptotically equal to', DeepL translation)
+ - "≄": # 0x2244
+ - test:
+ if: "$Verbosity!='Terse'"
+ 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: "az"] # (en: 'is', DeepL translation)
+ - t: "kongruens a" # (en: 'congruent to', DeepL translation)
+ - "≆": # 0x2246
+ - test:
+ if: "$Verbosity!='Terse'"
+ 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: "az"] # (en: 'is', DeepL translation)
+ - t: "nem kongruens" # (en: 'not congruent to', DeepL translation)
+ - "≈": # 0x2248
+ - test:
+ if: "$Verbosity!='Terse'"
+ 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: "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: "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: "az"] # (en: 'is', DeepL translation)
+ - t: "egyenértékű" # (en: 'equivalent to', DeepL translation)
+ - "≎": # 0x224e
+ - test:
+ if: "$Verbosity!='Terse'"
+ 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: "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: "az"] # (en: 'is', DeepL translation)
+ - t: "geometriailag egyenlő" # (en: 'geometrically equal to', DeepL translation)
+ - "≒": # 0x2252
+ - test:
+ if: "$Verbosity!='Terse'"
+ 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: "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: "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: "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: "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: "az"] # (en: 'is', DeepL translation)
+ - t: "nem egyenlő" # (en: 'not equal to', DeepL translation)
+ - "≡": # 0x2261
+ - test:
+ if: "$Verbosity!='Terse'"
+ then: [t: "az"] # (en: 'is', DeepL translation)
+ - t: "azonos" # (en: 'identical to', DeepL translation)
+ - "≢": # 0x2262
+ - test:
+ if: "$Verbosity!='Terse'"
+ then: [t: "az"] # (en: 'is', DeepL translation)
+ - t: "nem azonos" # (en: 'not identical to', DeepL translation)
+ - "≣": # 0x2263
+ - test:
+ if: "$Verbosity!='Terse'"
+ 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: "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: "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: "az"] # (en: 'is', DeepL translation)
+ - t: "sokkal kisebb, mint" # (en: 'much less than', DeepL translation)
+ - "≫": # 0x226b
+ - test:
+ if: "$Verbosity!='Terse'"
+ then: [t: "az"] # (en: 'is', DeepL translation)
+ - t: "sokkal nagyobb, mint" # (en: 'much greater than', DeepL translation)
+ - "≬": # 0x226c
+ - test:
+ if: "$Verbosity!='Terse'"
+ then: [t: "az"] # (en: 'is', DeepL translation)
+ - t: "között" # (en: 'between', DeepL translation)
+ - "≭": # 0x226d
+ - test:
+ if: "$Verbosity!='Terse'"
+ 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: "az"] # (en: 'is', DeepL translation)
+ - t: "nem kisebb, mint" # (en: 'not less than', DeepL translation)
+ - "≯": # 0x226f
+ - test:
+ if: "$Verbosity!='Terse'"
+ then: [t: "az"] # (en: 'is', DeepL translation)
+ - t: "nem nagyobb, mint" # (en: 'not greater than', DeepL translation)
+ - "≰": # 0x2270
+ - test:
+ if: "$Verbosity!='Terse'"
+ 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: "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: "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: "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: "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: "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: "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: "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: "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: "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: "egy"] # (en: 'is a', DeepL translation)
+ - t: "részhalmaza" # (en: 'subset of', DeepL translation)
+ - "⊃": # 0x2283
+ - test:
+ if: "$Verbosity!='Terse'"
+ then: [t: "egy"] # (en: 'is a', DeepL translation)
+ - t: "szuperhalmaza" # (en: 'superset of', DeepL translation)
+ - "⊄": # 0x2284
+ - test:
+ if: "$Verbosity!='Terse'"
+ 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: "az"] # (en: 'is', DeepL translation)
+ - t: "not a superset of" # (DeepL translation)
+ - "⊆": # 0x2286
+ - test:
+ if: "$Verbosity!='Terse'"
+ 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: "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: "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: "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: "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: "pont"] # (en: 'dot', DeepL translation)
+ else: [T: "szorozva"] # (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
+ - test:
+ if: "$Verbosity!='Terse'"
+ 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: "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: "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: "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: "az"] # (en: 'is', DeepL translation)
+ - t: "kettős részhalmaza" # (en: 'a double subset of', DeepL translation)
+ - "⋑": # 0x22d1
+ - test:
+ if: "$Verbosity!='Terse'"
+ 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: "a"] # (en: 'the', DeepL translation)
+ - t: "kettős metszéspontja" # (en: 'double intersection of', DeepL translation)
+ - "⋓": # 0x22d3
+ - test:
+ if: "$Verbosity!='Terse'"
+ 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: "a"] # (en: 'the', DeepL translation)
+ - t: "megfelelő metszéspontja" # (en: 'proper intersection of', DeepL translation)
+ - "⋕": # 0x22d5
+ - test:
+ if: "$Verbosity!='Terse'"
+ 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: "az"] # (en: 'is', DeepL translation)
+ - t: "nagyon sokkal kisebb, mint" # (en: 'very much less than', DeepL translation)
+ - "⋙": # 0x22d9
+ - test:
+ if: "$Verbosity!='Terse'"
+ 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: "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: "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: "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
+ - spell: "ac"
+ - t: "jelenlegi" # (en: 'current', DeepL translation)
+ - "⏧": [t: "elektromos kereszteződés"] # 0x23e7 (en: 'electrical intersection', DeepL translation)
+ - "①-⑨": # 0x2460 - 0x2469
+ - T: "bekarikázott" # (en: 'circled', DeepL translation)
+ - spell: "translate('.', '①②③④⑤⑥⑦⑧⑨', '123456789')"
+ - "⑩": [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: "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: "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: "bekarikázott" # (en: 'circled', DeepL translation)
+ - spell: "translate('.', 'ⒶⒷⒸⒹⒺⒻⒼⒽⒾⒿⓀⓁⓂⓃⓄⓅⓆⓇⓈⓉⓊⓋⓌⓍⓎⓏ', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')"
+
+ - "🅐-🅩": # 0x1f150 - 0x1f169
+ - T: "fekete körrel jelölt" # (en: 'black circled', DeepL translation)
+ - spell: "translate('.', '🅐🅑🅒🅓🅔🅕🅖🅗🅘🅙🅚🅛🅜🅝🅞🅟🅠🅡🅢🅣🅤🅥🅦🅧🅨🅩', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')"
+
+ - "ⓐ-ⓩ": # 0x24d0 - 0x24e9
+ - 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 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)
+ - 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: "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: "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
+
+# The private use chars are from MathType
+ - "": [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" # (DeepL translation)
+ - spell: "translate('.', '𝔄𝔅𝔇𝔈𝔉𝔊𝔍𝔎𝔏𝔐𝔑𝔒𝔓𝔔𝔖𝔗𝔘𝔙𝔚𝔛𝔜', 'ABCDEFGHIJKLMNOPQRSTUVWXY')"
+
+ - "-": # 0xf000 - 0xf018
+ - t: "fraktur" # (DeepL translation)
+ - spell: "translate('.', '', 'ABCDEFGHIJKLMNOPQRSTUVWXY')"
+
+ - "𝔞-𝔷": # 0x1d51e - 0x1d537
+ - t: "fraktur" # (DeepL translation)
+ - spell: "translate('.', '𝔞𝔟𝔠𝔡𝔢𝔣𝔤𝔥𝔦𝔧𝔨𝔩𝔪𝔫𝔬𝔭𝔮𝔯𝔰𝔱𝔲𝔳𝔴𝔵𝔶𝔷', 'abcdefghijklmnopqrstuvwxyz')"
+ - "-": # 0xf01a - 0xf033
+ - t: "fraktur" # (DeepL translation)
+ - spell: "translate('.', '', 'abcdefghijklmnopqrstuvwxyz')"
+
+ - "𝕬-𝖅": # 0x1D56C - 0x1D585
+ - t: "fraktur" # (DeepL translation)
+ - test:
+ if: "not($IgnoreBold)"
+ then: [t: "félkövér"] # (en: 'bold', DeepL translation)
+ - spell: "translate('.', '𝕬𝕭𝕮𝕯𝕰𝕱𝕲𝕳𝕴𝕵𝕶𝕷𝕸𝕹𝕺𝕻𝕼𝕽𝕾𝕿𝖀𝖁𝖂𝖃𝖄𝖅', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')"
+
+ - "-": # 0xf040 - 0xf059
+ - t: "fraktur" # (DeepL translation)
+ - test:
+ if: "not($IgnoreBold)"
+ then: [t: "félkövér"] # (en: 'bold', DeepL translation)
+ - spell: "translate('.', '', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')"
+
+ - "𝖆-𝖟": # 0x1d586 - 0x1d59f
+ - t: "fraktur" # (DeepL translation)
+ - test:
+ if: "not($IgnoreBold)"
+ then: [t: "félkövér"] # (en: 'bold', DeepL translation)
+ - spell: "translate('.', '𝖆𝖇𝖈𝖉𝖊𝖋𝖌𝖍𝖎𝖏𝖐𝖑𝖒𝖓𝖔𝖕𝖖𝖗𝖘𝖙𝖚𝖛𝖜𝖝𝖞𝖟', 'abcdefghijklmnopqrstuvwxyz')"
+ - "-": # 0xf05a - 0xf073
+ - t: "fraktur" # (DeepL translation)
+ - test:
+ if: "not($IgnoreBold)"
+ 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: "dupla leütésű" # (en: 'double struck', DeepL translation)
+ - spell: "translate('.', '𝔸𝔹𝔻𝔼𝔽𝔾𝕀𝕁𝕂𝕃𝕄𝕆𝕊𝕋𝕌𝕍𝕎𝕏𝕐', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')"
+
+ - "-": # 0xf080 - 0xf098
+ - T: "dupla leütésű" # (en: 'double struck', DeepL translation)
+ - spell: "translate('.', '', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')"
+
+ - "𝕒-𝕫": # 0x1d552 - 0x1d56b
+ - T: "dupla leütésű" # (en: 'double struck', DeepL translation)
+ - spell: "translate('.', '𝕒𝕓𝕔𝕕𝕖𝕗𝕘𝕙𝕚𝕛𝕜𝕝𝕞𝕟𝕠𝕡𝕢𝕣𝕤𝕥𝕦𝕧𝕨𝕩𝕪𝕫', 'abcdefghijklmnopqrstuvwxyz')"
+ - "-": # 0xf09a - 0xf0b3
+ - T: "dupla leütésű" # (en: 'double struck', DeepL translation)
+ - spell: "translate('.', '', 'abcdefghijklmnopqrstuvwxyz')"
+ - "𝟘-𝟡": # 0x1d7d8 - 0x1d7e1
+ - T: "dupla leütésű" # (en: 'double struck', DeepL translation)
+ - spell: "translate('.', '𝟘𝟙𝟚𝟛𝟜𝟝𝟞𝟟𝟠𝟡', '0123456789')"
+ - "-": # 0xf0c0 - 0xf0c9
+ - 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)
+ - "": [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" # (DeepL translation)
+ - spell: "translate('.', '𝒜𝒞𝒟𝒢𝒥𝒦𝒩𝒪𝒫𝒬𝒮𝒯𝒰𝒱𝒲𝒳𝒴𝒵', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')"
+
+ - "-": # 0xf100 - 0xf119
+ - t: "script" # (DeepL translation)
+ - spell: "translate('.', '', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')"
+
+ - "𝒶-𝓏": # 0x1d4b6 - 0x1d4cf
+ - t: "script" # (DeepL translation)
+ - spell: "translate('.', '𝒶𝒷𝒸𝒹𝒻𝒽𝒾𝒿𝓀𝓁𝓂𝓃𝓅𝓆𝓇𝓈𝓉𝓊𝓋𝓌𝓍𝓎𝓏', 'abcdefghijklmnopqrstuvwxyz')"
+ - "-": # 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" # (DeepL translation)
+ - test:
+ if: "not($IgnoreBold)"
+ then: [t: "félkövér"] # (en: 'bold', DeepL translation)
+ - spell: "translate('.', '𝓐𝓑𝓒𝓓𝓔𝓕𝓖𝓗𝓘𝓙𝓚𝓛𝓜𝓝𝓞𝓟𝓠𝓡𝓢𝓣𝓤𝓥𝓦𝓧𝓨𝓩', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')"
+
+ - "-": # 0xf140 - 0xf159
+ - t: "script" # (DeepL translation)
+ - test:
+ if: "not($IgnoreBold)"
+ then: [t: "félkövér"] # (en: 'bold', DeepL translation)
+ - spell: "translate('.', '', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')"
+
+ - "𝓪-𝔃": # 0x1d4ea - 0x1d503
+ - t: "script" # (DeepL translation)
+ - test:
+ if: "not($IgnoreBold)"
+ then: [t: "félkövér"] # (en: 'bold', DeepL translation)
+ - spell: "translate('.', '𝓪𝓫𝓬𝓭𝓮𝓯𝓰𝓱𝓲𝓳𝓴𝓵𝓶𝓷𝓸𝓹𝓺𝓻𝓼𝓽𝓾𝓿𝔀𝔁𝔂𝔃', 'abcdefghijklmnopqrstuvwxyz')"
+ - "-": # 0xf15a - 0xf173
+ - t: "script" # (DeepL translation)
+ - test:
+ if: "not($IgnoreBold)"
+ then: [t: "félkövér"] # (en: 'bold', DeepL translation)
+ - 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: "nagybetű"] # (en: 'cap', DeepL translation)
+ else: [x: "$SpeechOverrides_CapitalLetters"]
+ - pitch:
+ value: "$CapitalLetters_Pitch"
+ replace: [t: "ligatúra ae"] # (en: 'ligature ae', DeepL translation)
+ - "": # 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: "nagybetű"] # (en: 'cap', DeepL translation)
+ else: [x: "$SpeechOverrides_CapitalLetters"]
+ - pitch:
+ value: "$CapitalLetters_Pitch"
+ replace: [t: "éles s"] # (en: 'sharp s', DeepL translation)
+ - "": # 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: "nagybetű"] # (en: 'cap', DeepL translation)
+ else: [x: "$SpeechOverrides_CapitalLetters"]
+ - pitch:
+ value: "$CapitalLetters_Pitch"
+ 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: "dupla leütésű" # (en: 'double struck', DeepL translation)
+ - spell: "translate('.', '', 'ΔΨΛΠΣΘΓΩΥ')"
+
+ - "-": # 0xf220 - 0xf236
+ - 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)
+ - "": [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: "félkövér"] # (en: 'bold', DeepL translation)
+ - spell: "translate('.', '𝐀𝐁𝐂𝐃𝐄𝐅𝐆𝐇𝐈𝐉𝐊𝐋𝐌𝐍𝐎𝐏𝐐𝐑𝐒𝐓𝐔𝐕𝐖𝐗𝐘𝐙', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')"
+
+ - "-": # 0xf260 - 0xf279
+ - test:
+ if: "not($IgnoreBold)"
+ then: [t: "félkövér"] # (en: 'bold', DeepL translation)
+ - spell: "translate('.', '', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')"
+
+ - "𝐚-𝐳": # 0x1d41a - 0x1d433
+ - test:
+ if: "not($IgnoreBold)"
+ then: [t: "félkövér"] # (en: 'bold', DeepL translation)
+ - spell: "translate('.', '𝐚𝐛𝐜𝐝𝐞𝐟𝐠𝐡𝐢𝐣𝐤𝐥𝐦𝐧𝐨𝐩𝐪𝐫𝐬𝐭𝐮𝐯𝐰𝐱𝐲𝐳', 'abcdefghijklmnopqrstuvwxyz')"
+
+ - "-": # 0xf27a - 0xf293
+ - test:
+ if: "not($IgnoreBold)"
+ then: [t: "félkövér"] # (en: 'bold', DeepL translation)
+ - 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: "félkövér"] # (en: 'bold', DeepL translation)
+ - spell: "translate('.', '𝑨𝑩𝑪𝑫𝑬𝑭𝑮𝑯𝑰𝑱𝑲𝑳𝑴𝑵𝑶𝑷𝑸𝑹𝑺𝑻𝑼𝑽𝑾𝑿𝒀𝒁', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')"
+
+ - "-": # 0xf2c8 - 0xf2e1
+ # - t: "bold italic"
+ - test:
+ if: "not($IgnoreBold)"
+ then: [t: "félkövér"] # (en: 'bold', DeepL translation)
+ - spell: "translate('.', '', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')"
+
+ - "𝒂-𝒛": # 0x1d482 - 0x1d49b
+ # - t: "bold italic"
+ - test:
+ if: "not($IgnoreBold)"
+ then: [t: "félkövér"] # (en: 'bold', DeepL translation)
+ - spell: "translate('.', '𝒂𝒃𝒄𝒅𝒆𝒇𝒈𝒉𝒊𝒋𝒌𝒍𝒎𝒏𝒐𝒑𝒒𝒓𝒔𝒕𝒖𝒗𝒘𝒙𝒚𝒛', 'abcdefghijklmnopqrstuvwxyz')"
+
+ - "-": # 0xf2e2 - 0xf2fb
+ # - t: "bold italic"
+ - test:
+ if: "not($IgnoreBold)"
+ then: [t: "félkövér"] # (en: 'bold', DeepL translation)
+ - 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: "félkövér"] # (en: 'bold', DeepL translation)
+ - spell: "translate('.', '𝗔𝗕𝗖𝗗𝗘𝗙𝗚𝗛𝗜𝗝𝗞𝗟𝗠𝗡𝗢𝗣𝗤𝗥𝗦𝗧𝗨𝗩𝗪𝗫𝗬𝗭', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')"
+
+ - "-": # 0xf334 - 0xf34d
+ - test:
+ if: "not($IgnoreBold)"
+ then: [t: "félkövér"] # (en: 'bold', DeepL translation)
+ - spell: "translate('.', '', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')"
+
+ - "𝗮-𝘇": # 0x1d5ee - 0x1d607
+ - test:
+ if: "not($IgnoreBold)"
+ then: [t: "félkövér"] # (en: 'bold', DeepL translation)
+ - spell: "translate('.', '𝗮𝗯𝗰𝗱𝗲𝗳𝗴𝗵𝗶𝗷𝗸𝗹𝗺𝗻𝗼𝗽𝗾𝗿𝘀𝘁𝘂𝘃𝘄𝘅𝘆𝘇', 'abcdefghijklmnopqrstuvwxyz')"
+
+ - "-": # 0xf34e - 0xf367
+ - test:
+ if: "not($IgnoreBold)"
+ then: [t: "félkövér"] # (en: 'bold', DeepL translation)
+ - 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: "félkövér"] # (en: 'bold', DeepL translation)
+ - spell: "translate('.', '𝘼𝘽𝘾𝘿𝙀𝙁𝙂𝙃𝙄𝙅𝙆𝙇𝙈𝙉𝙊𝙋𝙌𝙍𝙎𝙏𝙐𝙑𝙒𝙓𝙔𝙕', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')"
+
+ - "-": # 0xf39c - 0xf3b5
+ # - t: "bold italic"
+ - test:
+ if: "not($IgnoreBold)"
+ then: [t: "félkövér"] # (en: 'bold', DeepL translation)
+ - spell: "translate('.', '', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')"
+
+ - "𝙖-𝙯": # 0x1d656 - 0x1d66f
+ # - t: "bold italic"
+ - test:
+ if: "not($IgnoreBold)"
+ then: [t: "félkövér"] # (en: 'bold', DeepL translation)
+ - spell: "translate('.', '𝙖𝙗𝙘𝙙𝙚𝙛𝙜𝙝𝙞𝙟𝙠𝙡𝙢𝙣𝙤𝙥𝙦𝙧𝙨𝙩𝙪𝙫𝙬𝙭𝙮𝙯', 'abcdefghijklmnopqrstuvwxyz')"
+
+ - "-": # 0xf3b6 - 0xf3cf
+ # - t: "bold italic"
+ - test:
+ if: "not($IgnoreBold)"
+ then: [t: "félkövér"] # (en: 'bold', DeepL translation)
+ - spell: "translate('.', '', 'abcdefghijklmnopqrstuvwxyz')"
+
+ - "𝙰-𝚉": # 0x1d670 - 0x1d689
+ - spell: "translate('.', '𝙰𝙱𝙲𝙳𝙴𝙵𝙶𝙷𝙸𝙹𝙺𝙻𝙼𝙽𝙾𝙿𝚀𝚁𝚂𝚃𝚄𝚅𝚆𝚇𝚈𝚉', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')"
+
+ - "-": # 0xf3d0 - 0xf3e9
+ - spell: "translate('.', '', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')"
+
+ - "𝚊-𝚣": # 0x1d68a - 0x1d6a3
+ - spell: "translate('.', '𝚊𝚋𝚌𝚍𝚎𝚏𝚐𝚑𝚒𝚓𝚔𝚕𝚖𝚗𝚘𝚙𝚚𝚛𝚜𝚝𝚞𝚟𝚠𝚡𝚢𝚣', 'abcdefghijklmnopqrstuvwxyz')"
+
+ - "-": # 0xf3ea - 0xf403
+ - spell: "translate('.', '', 'abcdefghijklmnopqrstuvwxyz')"
+
+ - "": [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
+ - test:
+ if: "not($IgnoreBold)"
+ then: [t: "félkövér"] # (en: 'bold', DeepL translation)
+ - spell: "translate('.', '𝚨𝚩𝚪𝚫𝚬𝚭𝚮𝚯𝚰𝚱𝚲𝚳𝚴𝚵𝚶𝚷𝚸𝚹𝚺𝚻𝚼𝚽𝚾𝚿𝛀', 'ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩ')"
+
+ - "-": # 0xf408 - 0xf420
+ - test:
+ if: "not($IgnoreBold)"
+ then: [t: "félkövér"] # (en: 'bold', DeepL translation)
+ - spell: "translate('.', '', 'ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩ')"
+
+ - "𝛂-𝛚": # 0x1d6c2 - 0x1d6da
+ - test:
+ if: "not($IgnoreBold)"
+ then: [t: "félkövér"] # (en: 'bold', DeepL translation)
+ - spell: "translate('.', '𝛂𝛃𝛄𝛅𝛆𝛇𝛈𝛉𝛊𝛋𝛌𝛍𝛎𝛏𝛐𝛑𝛒𝛓𝛔𝛕𝛖𝛗𝛘𝛙𝛚', 'αβγδεζηθικλμνξοπρςστυφχψω')"
+
+ - "-": # 0xf422 - 0xf43a
+ - test:
+ if: "not($IgnoreBold)"
+ then: [t: "félkövér"] # (en: 'bold', DeepL translation)
+ - spell: "translate('.', '', 'αβγδεζηθικλμνξοπρςστυφχψω')"
+
+ - "": [t: "merész nahblah"] # 0xf421 (en: 'bold nahblah', DeepL translation)
+ - "𝛁": [t: "merész nahblah"] # 0x1d6c1 (en: 'bold nahblah', DeepL translation)
+
+ - "𝛛𝛜𝛝𝛞𝛟𝛠𝛡": # 0x1D6DB - 0x1D6E1
+ - test:
+ if: "not($IgnoreBold)"
+ then: [t: "félkövér"] # (en: 'bold', DeepL translation)
+ - spell: "translate('.', '𝛛𝛜𝛝𝛞𝛟𝛠𝛡', '∂εθκφρπ')"
+
+ - "": # 0xF43C - 0xF441
+ - test:
+ if: "not($IgnoreBold)"
+ then: [t: "félkövér"] # (en: 'bold', DeepL translation)
+ - 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: "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
+ # - t: "italic"
+ - spell: "translate('.', '𝜕𝜖𝜗𝜘𝜙𝜚𝜛', '∂εθκφρπ')"
+
+ - "": # 0xf475 - 0xf47b
+ # - t: "italic"
+ - spell: "translate('.', '', '∂εθκφρπ')"
+
+ - "𝜜-𝜴": # 0x1d71c - 0x1d734
+ # - t: "bold italic"
+ - test:
+ if: "not($IgnoreBold)"
+ then: [t: "félkövér"] # (en: 'bold', DeepL translation)
+ - spell: "translate('.', '𝜜𝜝𝜞𝜟𝜠𝜡𝜢𝜣𝜤𝜥𝜦𝜧𝜨𝜩𝜪𝜫𝜬𝜭𝜮𝜯𝜰𝜱𝜲𝜳𝜴', 'ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩ')"
+
+ - "-": # 0xf47c - 0xf494
+ # - t: "bold italic"
+ - test:
+ if: "not($IgnoreBold)"
+ then: [t: "félkövér"] # (en: 'bold', DeepL translation)
+ - spell: "translate('.', '', 'ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩ')"
+
+ - "𝜶-𝝎": # 0x1d736 - 0x1d74e
+ # - t: "bold italic"
+ - test:
+ if: "not($IgnoreBold)"
+ then: [t: "félkövér"] # (en: 'bold', DeepL translation)
+ - spell: "translate('.', '𝜶𝜷𝜸𝜹𝜺𝜻𝜼𝜽𝜾𝜿𝝀𝝁𝝂𝝃𝝄𝝅𝝆𝝇𝝈𝝉𝝊𝝋𝝌𝝍𝝎', 'αβγδεζηθικλμνξοπρςστυφχψω')"
+
+ - "-": # 0xf496 - 0xf4ae
+ # - t: "bold italic"
+ - test:
+ if: "not($IgnoreBold)"
+ then: [t: "félkövér"] # (en: 'bold', DeepL translation)
+ - spell: "translate('.', '', 'αβγδεζηθικλμνξοπρςστυφχψω')"
+
+ - "𝝏𝝐𝝑𝝒𝝓𝝔𝝕": # 0x1d74f - 0x1d755
+ # - t: "bold italic"
+ - test:
+ if: "not($IgnoreBold)"
+ then: [t: "félkövér"] # (en: 'bold', DeepL translation)
+ - spell: "translate('.', '𝝏𝝐𝝑𝝒𝝓𝝔𝝕', '∂εθκφρπ')"
+
+ - "": # 0xf422 - 0xf43a
+ # - t: "bold italic"
+ - test:
+ if: "not($IgnoreBold)"
+ then: [t: "félkövér"] # (en: 'bold', DeepL translation)
+ - spell: "translate('.', '', '∂εθκφρπ')"
+
+ - "𝜵": [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
+ - test:
+ if: "not($IgnoreBold)"
+ then: [t: "félkövér"] # (en: 'bold', DeepL translation)
+ - spell: "translate('.', '𝝖𝝗𝝘𝝙𝝚𝝛𝝜𝝝𝝞𝝟𝝠𝝡𝝢𝝣𝝤𝝥𝝦𝝧𝝨𝝩𝝪𝝫𝝬𝝭𝝮', 'ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩ')"
+ - "-": # 0xf4b6 - 0xf4ce
+ - test:
+ if: "not($IgnoreBold)"
+ then: [t: "félkövér"] # (en: 'bold', DeepL translation)
+ - spell: "translate('.', '', 'ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩ')"
+
+ - "𝝰-𝞈": # 0x1d770 - 0x1d788
+ - test:
+ if: "not($IgnoreBold)"
+ then: [t: "félkövér"] # (en: 'bold', DeepL translation)
+ - spell: "translate('.', '𝝰𝝱𝝲𝝳𝝴𝝵𝝶𝝷𝝸𝝹𝝺𝝻𝝼𝝽𝝾𝝿𝞀𝞁𝞂𝞃𝞄𝞅𝞆𝞇𝞈', 'αβγδεζηθικλμνξοπρςστυφχψω')"
+
+ - "-": # 0xf4d0 - 0xf4e8
+ - test:
+ if: "not($IgnoreBold)"
+ then: [t: "félkövér"] # (en: 'bold', DeepL translation)
+ - spell: "translate('.', '', 'αβγδεζηθικλμνξοπρςστυφχψω')"
+
+ - "𝞉𝞊𝞋𝞌𝞍𝞎𝞏": # 0x1d789 - 0x1d78f
+ - test:
+ if: "not($IgnoreBold)"
+ then: [t: "félkövér"] # (en: 'bold', DeepL translation)
+ - spell: "translate('.', '𝞉𝞊𝞋𝞌𝞍𝞎𝞏', '∂εθκφρπ')"
+
+ - "": # 0xf4e9 - 0xf4ef
+ - test:
+ if: "not($IgnoreBold)"
+ then: [t: "félkövér"] # (en: 'bold', DeepL translation)
+ - spell: "translate('.', '', '∂εθκφρπ')"
+
+ - "": [t: "merész nahblah"] # 0xf4cf (en: 'bold nahblah', DeepL translation)
+ - "𝝯": [t: "merész nahblah"] # 0x1d76f (en: 'bold nahblah', DeepL translation)
+
+ - "𝞐-𝞨": # 0x1d790 - 0x1d7a8
+ # - t: "bold italic"
+ - test:
+ if: "not($IgnoreBold)"
+ then: [t: "félkövér"] # (en: 'bold', DeepL translation)
+ - spell: "translate('.', '𝞐𝞑𝞒𝞓𝞔𝞕𝞖𝞗𝞘𝞙𝞚𝞛𝞜𝞝𝞞𝞟𝞠𝞡𝞢𝞣𝞤𝞥𝞦𝞧𝞨', 'ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩ')"
+
+ - "-": # 0xf4f0 - 0xf508
+ # - t: "bold italic"
+ - test:
+ if: "not($IgnoreBold)"
+ then: [t: "félkövér"] # (en: 'bold', DeepL translation)
+ - spell: "translate('.', '', 'ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩ')"
+
+ - "𝞪-𝟂": # 0x1d7aa - 0x1d7c2
+ # - t: "bold italic"
+ - test:
+ if: "not($IgnoreBold)"
+ then: [t: "félkövér"] # (en: 'bold', DeepL translation)
+ - spell: "translate('.', '𝞪𝞫𝞬𝞭𝞮𝞯𝞰𝞱𝞲𝞳𝞴𝞵𝞶𝞷𝞸𝞹𝞺𝞻𝞼𝞽𝞾𝞿𝟀𝟁𝟂', 'αβγδεζηθικλμνξοπρςστυφχψω')"
+
+ - "-": # 0xf50a - 0xf522
+ # - t: "bold italic"
+ - test:
+ if: "not($IgnoreBold)"
+ then: [t: "félkövér"] # (en: 'bold', DeepL translation)
+ - spell: "translate('.', '', 'αβγδεζηθικλμνξοπρςστυφχψω')"
+
+ - "𝟃𝟄𝟅𝟆𝟇𝟈𝟉": # 0x1d7c3 - 0x1d7c9
+ # - t: "bold italic"
+ - test:
+ if: "not($IgnoreBold)"
+ then: [t: "félkövér"] # (en: 'bold', DeepL translation)
+ - spell: "translate('.', '𝟃𝟄𝟅𝟆𝟇𝟈𝟉', '∂εθκφρπ')"
+
+ - "": # 0xf523 - 0xf529
+ # - t: "bold italic"
+ - test:
+ if: "not($IgnoreBold)"
+ then: [t: "félkövér"] # (en: 'bold', DeepL translation)
+ - spell: "translate('.', '', '∂εθκφρπ')"
+
+ - "": [t: "merész nahblah"] # 0xf509 (en: 'bold nahblah', DeepL translation)
+ - "𝞩": [t: "merész nahblah"] # 0x1d7a9 (en: 'bold nahblah', DeepL translation)
+
+ - "-": # 0xf52e - 0xf537 (old MathType)
+ - test:
+ if: "not($IgnoreBold)"
+ then: [t: "félkövér"] # (en: 'bold', DeepL translation)
+ - spell: "translate('.', '', '0123456789')"
+
+ - "𝟎-𝟗": # 0x1d7ce - 0x1d7d7
+ - test:
+ if: "not($IgnoreBold)"
+ then: [t: "félkövér"] # (en: 'bold', DeepL translation)
+ - spell: "translate('.', '𝟎𝟏𝟐𝟑𝟒𝟓𝟔𝟕𝟖𝟗', '0123456789')"
+
+ - "𝟬-𝟵": # 0x1D7EC - 0x1D7F5
+ - test:
+ if: "not($IgnoreBold)"
+ then: [t: "félkövér"] # (en: 'bold', DeepL translation)
+ - spell: "translate('.', '𝟬𝟭𝟮𝟯𝟰𝟱𝟲𝟳𝟴𝟵', '0123456789')"
+
+ - "-": # 0xf556 - 0xf55f (old MathType)
+ - spell: "translate('.', '', '0123456789')"
+
+ - "𝟢-𝟫": # 0x1d7e2 - 0x1d7eb
+ - spell: "translate('.', '𝟶𝟷𝟸𝟹𝟺𝟻𝟼𝟽𝟾𝟿', '0123456789')"
+
+ - "𝟶-𝟿": # 0x1d7f6 - 0x1d7ff
+ - spell: "translate('.', '𝟶𝟷𝟸𝟹𝟺𝟻𝟼𝟽𝟾𝟿', '0123456789')"
+
+
+ - "": [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)
+ replace:
+ - test:
+ - if: "$SpeechStyle != 'ClearSpeak'"
+ then_test:
+ if: "$DefaultToGiven"
+ 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: "függőleges vonal"] # (en: 'vertical line', DeepL translation)
+ - else_if: "$ClearSpeak_VerticalLine = 'SuchThat'"
+ 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)
+ - "~": [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: "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
diff --git a/Rules/Languages/hu/unicode.yaml b/Rules/Languages/hu/unicode.yaml
new file mode 100644
index 00000000..b184a627
--- /dev/null
+++ b/Rules/Languages/hu/unicode.yaml
@@ -0,0 +1,575 @@
+---
+ - "a":
+ - test:
+ if: "$TTS='none'"
+ 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":
+ - 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:
+ - 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"
+ # note: processing of ranges converts '.' into the character, so it needs to be in quotes below
+ replace: [SPELL: "translate('.', 'BCDEFGHIJKLMNOPQRSTUVWXYZ', 'bcdefghijklmnopqrstuvwxyz')"]
+
+ - "0-9": [T: "."] # (en: '.', DeepL translation)
+
+ - " ": [T: " "] # 0x20 (DeepL translation)
+
+ - "!": # 0x21
+ - test:
+ if: "ancestor-or-self::*[contains(@data-intent-property, ':literal:')]"
+ then_test:
+ if: "$Verbosity = 'Terse'"
+ 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: "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: "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á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: "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
+ 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: "vessző" # (en: 'comma', google translation)
+ - test:
+ if: "$Verbosity != Terse"
+ then: [pause: short]
+ # else silent
+
+ - "-": [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)
+ - "/": # 0x2f
+ - test:
+ if: "ancestor-or-self::*[contains(@data-intent-property, ':literal:')]"
+ 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)
+ - "<": # 0x3c
+ - test:
+ if: "$Verbosity!='Terse'"
+ 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ő"] # (en: 'equals', DeepL translation)
+
+ - ">": # 0x3e
+ - test:
+ if: "$Verbosity!='Terse'"
+ 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: "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)
+ - "^": # 0x5e
+ - test:
+ if: "parent::m:modified-variable or parent::m:mover"
+ 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)
+ - "|": # 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: "függőleges vonal"] # (en: 'vertical line', DeepL translation)
+ - else_if: "$SpeechStyle != 'ClearSpeak'"
+ then_test:
+ - if: "$DefaultToGiven"
+ 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)
+ - else_if: "not(preceding-sibling::*) or not(following-sibling::*)"
+ 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)
+ - else_if: "$ClearSpeak_VerticalLine = 'Given' or $DefaultToGiven"
+ 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)
+
+ - "~": [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: ""]
+
+ - "¬": [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: "szorozva"] # (DeepL translation)
+ - "×": # 0xd7
+ - test:
+ if: "$SpeechStyle = 'ClearSpeak'"
+ then_test:
+ - if: "$ClearSpeak_MultSymbolX = 'Auto'"
+ then: [T: "szorozva"] # (DeepL translation)
+ - else_if: "$ClearSpeak_MultSymbolX = 'By'"
+ 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: "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: "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
+ - "Α-Ω":
+ - 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"] # (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: "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)
+ - "…": # 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: "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 az alábbi értékig:"] # (en: 'and so on up to', DeepL translation)
+
+ - "": # 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: ""] # (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: "celsius fok"] # 0x2103 (en: 'degrees celsius', DeepL translation)
+ - "℉": [T: "fahrenheit fok"] # 0x2109 (en: 'degrees fahrenheit', DeepL translation)
+ - "ℋℛℓ": # 0x210b
+ - 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: "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: "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 nyíl"] # (en: 'right arrow', 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: "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: "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: ""] # (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: ""] # (DeepL translation)
+ - else_if: $ClearSpeak_SetMemberSymbol = 'Member'
+ then: [T: "tagja"] # (en: 'member of', DeepL translation)
+ - else_if: $ClearSpeak_SetMemberSymbol = 'Element'
+ 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: "tagja az alábbi halmaznak:"] # (en: 'is a member of', DeepL translation)
+ - else_if: $ClearSpeak_SetMemberSymbol = 'Element'
+ then: [T: "egy eleme ennek:"] # (en: 'is an element of', DeepL translation)
+ - else_if: $ClearSpeak_SetMemberSymbol = 'In'
+ 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:
+ if: "$SpeechStyle != 'ClearSpeak'"
+ then:
+ - test:
+ if: "$Verbosity!='Terse'"
+ 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: "nincs benne ebben:"] # (en: 'not in', DeepL translation)
+ - else_if: $ClearSpeak_SetMemberSymbol = 'Member'
+ then: [T: "nem tagja az alábbi halmaznak:"] # (en: 'not member of', DeepL translation)
+ - else_if: $ClearSpeak_SetMemberSymbol = 'Element'
+ 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 az alábbi halmaznak:"] # (en: 'is not a member of', DeepL translation)
+ - else_if: $ClearSpeak_SetMemberSymbol = 'Element'
+ then: [T: "nem eleme ennek:"] # (en: 'is not an element of', DeepL translation)
+ - else_if: $ClearSpeak_SetMemberSymbol = 'In'
+ 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 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: ""] # (DeepL translation)
+ - else_if: $ClearSpeak_SetMemberSymbol = 'Member'
+ then: [T: "tagja ennek:"] # (en: 'member of', DeepL translation)
+ - else_if: $ClearSpeak_SetMemberSymbol = 'Element'
+ 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 az alábbi halmaznak:"] # (en: 'is a member of', DeepL translation)
+ - else_if: $ClearSpeak_SetMemberSymbol = 'Element'
+ then: [T: "egy eleme ennek:"] # (en: 'is an element of', DeepL translation)
+ - else_if: $ClearSpeak_SetMemberSymbol = 'In'
+ 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)
+ - "∝": # 0x221d
+ - test:
+ if: "$Verbosity!='Terse'"
+ 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)
+ else:
+ - test:
+ if: "$Verbosity!='Terse'"
+ 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: "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: "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)
+ - "≠": # 0x2260
+ - test:
+ if: "$Verbosity!='Terse'"
+ 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)
+ - "≤": # 0x2264
+ - test:
+ if: "$Verbosity!='Terse'"
+ 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: ""] # (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: "egy"] # (DeepL translation)
+ - T: "részhalmaza" # (en: 'subset of', DeepL translation)
+ - "⊃": # 0x2283
+ - test:
+ if: "$Verbosity!='Terse'"
+ then: [T: "egy"] # (DeepL translation)
+ - T: "szuperhalmaza ennek:" # (en: 'superset of', DeepL translation)
+ - "⊄": # 0x2284
+ - test:
+ if: "$Verbosity!='Terse'"
+ 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: "egy"] # (en: 'is', DeepL translation)
+ - T: "nem szuperhalmaza ennek:" # (DeepL translation)
+ - "⊆": # 0x2286
+ - test:
+ if: "$Verbosity!='Terse'"
+ 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: "egy"] # (DeepL translation)
+ - T: "szuperhalmaza vagy egyenlő" # (en: 'superset of or equal to', DeepL translation)
diff --git a/tests/Languages/hu.rs b/tests/Languages/hu.rs
new file mode 100644
index 00000000..45bce3f9
--- /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 00000000..e9449b21
--- /dev/null
+++ b/tests/Languages/hu/ClearSpeak/functions.rs
@@ -0,0 +1,650 @@
+/// 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 = "";
+ 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(());
+
+}
+
+// AI generated
+#[test]
+fn hyperbolic_trig_names() -> Result<()> {
+ let expr = "";
+ 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(());
+
+}
+
+
+// AI generated
+#[test]
+fn inverse_trig() -> Result<()> {
+ let expr = "";
+ test("hu", "ClearSpeak", expr, "inverz szinusz x")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn inverse_trig_trig_inverse() -> Result<()> {
+ let expr = "";
+ test_ClearSpeak("hu", "ClearSpeak_Trig", "TrigInverse",expr,
+ "tangens inverz x")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn inverse_trig_arc() -> Result<()> {
+ let expr = "";
+ test_ClearSpeak("hu", "ClearSpeak_Trig", "ArcTrig",expr,
+ "arkusz hiperbolikus koszinusz, x")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn trig_squared() -> Result<()> {
+ let expr = "";
+ test("hu", "ClearSpeak", expr, "szinusz x a négyzeten")?;
+ return Ok(());
+
+}
+
+#[test]
+fn trig_squared2() -> Result<()> {
+ let expr = "";
+ 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 = "";
+ 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 = "";
+ test("hu", "ClearSpeak", expr, "szinusz, x, a(z) n hatványon")?;
+ return Ok(());
+
+}
+
+#[test]
+fn combined_sinus_expression() -> Result<()> {
+ let expr = "";
+ 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 = "";
+ test("hu", "ClearSpeak", expr, "tangens 1 a köbön")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn trig_cubed() -> Result<()> {
+ let expr = "";
+ test("hu", "ClearSpeak", expr, "tangens x a köbön")?;
+ return Ok(());
+
+}
+
+#[test]
+fn trig_tangent_test2() -> Result<()> {
+ let expr = "";
+ test("hu", "ClearSpeak", expr, "tangens; x, a(z) negyedik hatványon")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn trig_fourth() -> Result<()> {
+ let expr = "";
+ test("hu", "ClearSpeak", expr, "szekáns; x, a(z) negyedik hatványon")?;
+ return Ok(());
+
+}
+
+
+// AI generated
+#[test]
+fn trig_power_other() -> Result<()> {
+ let expr = "";
+ test("hu", "ClearSpeak", expr, "hiperbolikus szinusz; x, a(z) n mínusz 1 hatványon")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn simple_log() -> Result<()> {
+ let expr = "";
+ test("hu", "ClearSpeak", expr, "logaritmus x")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn normal_log() -> Result<()> {
+ let expr = "";
+ test("hu", "ClearSpeak", expr, "a logaritmus, nyitott zárójel, x plusz y, zárt zárójel")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn simple_log_with_base() -> Result<()> {
+ let expr = "";
+test("hu", "ClearSpeak", expr, "alap logaritmus b; x")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn normal_log_with_base() -> Result<()> {
+ let expr = "";
+ test("hu", "ClearSpeak", expr, "alap logaritmus b; nyitott zárójel, x plusz y, zárt zárójel")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn simple_ln() -> Result<()> {
+ let expr = "";
+ test("hu", "ClearSpeak", expr, "l n x")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn normal_ln() -> Result<()> {
+ let expr = "";
+ test("hu", "ClearSpeak", expr, "a l n, nyitott zárójel, x plusz y, zárt zárójel")?;
+ return Ok(());
+
+}
+
+
+// AI generated
+#[test]
+fn simple_natural_log() -> Result<()> {
+ let expr = "";
+ test_ClearSpeak("hu", "ClearSpeak_Log", "LnAsNaturalLog",expr,
+ "természetes alapú logaritmus, x")?;
+ return Ok(());
+
+}
+
+
+// AI generated
+#[test]
+fn natural_log() -> Result<()> {
+ let expr = "";
+ test_ClearSpeak("hu", "ClearSpeak_Log", "LnAsNaturalLog",expr,
+ "a természetes alapú logaritmus; nyitott zárójel, x plusz y, zárt zárójel")?;
+ return Ok(());
+
+}
+
+
+// AI generated
+#[test]
+fn explicit_function_call_with_parens() -> Result<()> {
+ let expr = "";
+ test("hu", "ClearSpeak", expr, "t x")?;
+ return Ok(());
+
+}
+
+
+// AI generated
+#[test]
+fn explicit_times_with_parens() -> Result<()> {
+ let expr = "";
+ test("hu", "ClearSpeak", expr, "t szorozva x")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn explicit_function_call() -> Result<()> {
+ let expr = "";
+ test("hu", "ClearSpeak", expr, "t x")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn explicit_times() -> Result<()> {
+ let expr = "";
+ test("hu", "ClearSpeak", expr, "t x")?;
+ return Ok(());
+
+}
+
+
+// AI generated
+#[test]
+fn test_functions_none_pref() -> Result<()> {
+ let expr = "";
+ test_ClearSpeak("hu", "ClearSpeak_Functions", "None",expr,
+ "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(());
+
+}
+
+// AI generated
+#[test]
+fn test_functions_none_pref_multiple_args() -> Result<()> {
+ let expr = "";
+ test_ClearSpeak("hu", "ClearSpeak_Functions", "None",expr,
+ "nagy b szorozva, nyitott zárójel, 2 vessző, 6, zárt zárójel")?;
+ return Ok(());
+
+}
+
+
+/*
+ * Tests for times
+ */
+// AI generated
+#[test]
+fn no_times_binomial() -> Result<()> {
+ let expr = "";
+ test("hu", "ClearSpeak", expr, "x y")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn times_following_paren() -> Result<()> {
+ let expr = "";
+ test("hu", "ClearSpeak", expr, "2 szorozva 3")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn times_preceding_paren() -> Result<()> {
+ let expr = "";
+ test("hu", "ClearSpeak", expr, "2 szorozva 3")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn times_sqrt() -> Result<()> {
+ let expr = "";
+ test("hu", "ClearSpeak", expr, "négyzetgyök a; szorozva négyzetgyök b; egyenlő, négyzetgyök a b")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn more_implied_times() -> Result<()> {
+ let expr = "";
+ test_ClearSpeak("hu", "ClearSpeak_ImpliedTimes", "MoreImpliedTimes",expr,
+ "nyitott zárójel, 2 szorozva x, zárt zárójel a négyzeten")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn explicit_times_more_implied_times() -> Result<()> {
+ let expr = "";
+ test_ClearSpeak("hu", "ClearSpeak_ImpliedTimes", "MoreImpliedTimes",expr, "t szorozva x")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn explicit_times_none_simple_right() -> Result<()> {
+ let expr = "";
+ test_ClearSpeak("hu", "ClearSpeak_ImpliedTimes", "None",
+ expr, "2, nyitott zárójel 3 zárójel")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn explicit_times_none_simple_left() -> Result<()> {
+ let expr = "";
+ test_ClearSpeak("hu", "ClearSpeak_ImpliedTimes", "None",
+ expr, "nyitott zárójel, 2 mínusz 1, zárt zárójel; x")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn explicit_times_none_superscript() -> Result<()> {
+ let expr = "";
+ test_ClearSpeak_prefs("hu",
+ vec![("ClearSpeak_ImpliedTimes", "None"), ("ClearSpeak_Functions", "None")],
+ 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(());
+
+}
+
+/*
+ * Tests for parens
+ */
+ #[test]
+ fn no_parens_number() -> Result<()> {
+ let expr = "";
+ test("hu", "ClearSpeak", expr, "25 szorozva x")?;
+ return Ok(());
+
+ }
+
+ #[test]
+ fn no_parens_monomial() -> Result<()> {
+ let expr = "";
+ test("hu", "ClearSpeak", expr, "b, nyitott zárójel, x y zárt zárójel")?;
+ return Ok(());
+
+ }
+
+ #[test]
+ fn no_parens_negative_number() -> Result<()> {
+ let expr = "";
+ test("hu", "ClearSpeak", expr, "2 plusz negatív 2")?;
+ return Ok(());
+
+ }
+
+
+ #[test]
+ fn no_parens_negative_number_with_var() -> Result<()> {
+ let expr = "";
+ test("hu", "ClearSpeak", expr, "negatív 2 x, plusz 1")?;
+ return Ok(());
+
+ }
+
+ #[test]
+ fn parens_superscript() -> Result<()> {
+ let expr = "";
+ test("hu", "ClearSpeak", expr, "nyitott zárójel, 2 x zárt zárójel a négyzeten")?;
+ return Ok(());
+
+ }
+
+ #[test]
+ fn no_parens_fraction() -> Result<()> {
+ let expr = "";
+ test("hu", "ClearSpeak", expr, "2 plusz 1 ketted")?;
+ return Ok(());
+
+ }
+
+
+ // Tests for the ten types of intervals in ClearSpeak
+ #[test]
+ fn parens_interval_open_open() -> Result<()> {
+ let expr = "";
+ test_ClearSpeak("hu", "ClearSpeak_Paren", "Interval",expr,
+ "c től d ig terjedő intervallum, nem tartalmazza a c elemet vagy d elemet")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+ fn parens_interval_closed_open() -> Result<()> {
+ let expr = "";
+ test_ClearSpeak("hu", "ClearSpeak_Paren", "Interval ",expr,
+ "c től d ig terjedő intervallum, tartalmazza a c elemet de nem tartalmazza a d elemet")?;
+ return Ok(());
+
+}
+
+
+// AI generated
+#[test]
+fn parens_interval_open_closed() -> Result<()> {
+ let expr = "";
+ test_ClearSpeak("hu", "ClearSpeak_Paren", "Interval ",expr,
+ "c től d ig terjedő intervallum, nem tartalmazza a c elemet de tartalmazza a d elemet")?;
+ return Ok(());
+
+}
+
+
+// AI generated
+#[test]
+fn parens_interval_closed_closed() -> Result<()> {
+ let expr = "";
+test_ClearSpeak("hu", "ClearSpeak_Paren", "Interval ",expr,
+"c től d ig terjedő intervallum, tartalmazza a c elemet és d elemet")?;
+return Ok(());
+
+}
+
+ #[test]
+ fn parens_interval_neg_infinity_open_open() -> Result<()> {
+ let expr = "";
+ test_ClearSpeak("hu", "ClearSpeak_Paren", "Interval ",expr,
+ "negatív végtelen től d ig terjedő intervallum, nem tartalmazza a d elemet")?;
+ return Ok(());
+
+}
+
+ #[test]
+ fn parens_interval_neg_infinity_closed_open() -> Result<()> {
+ let expr = "";
+ test_ClearSpeak("hu", "ClearSpeak_Paren", "Interval ",expr,
+ "negatív végtelen től d ig terjedő intervallum, tartalmazza a d elemet")?;
+ return Ok(());
+
+}
+
+
+// AI generated
+#[test]
+fn parens_interval_open_open_infinity() -> Result<()> {
+ let expr = "";
+ test_ClearSpeak("hu", "ClearSpeak_Paren", "Interval ",expr,
+ "c től végtelen ig terjedő intervallum, nem tartalmazza a c elemet")?;
+ return Ok(());
+
+}
+
+
+// AI generated
+#[test]
+fn parens_interval_closed_open_infinity() -> Result<()> {
+ let expr = "";
+ test_ClearSpeak("hu", "ClearSpeak_Paren", "Interval ",expr,
+"c től végtelen ig terjedő intervallum, tartalmazza a c elemet")?;
+return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn parens_interval_neg_infinity_to_infinity() -> Result<()> {
+ let expr = "";
+ test_ClearSpeak("hu", "ClearSpeak_Paren", "Interval ",expr,
+ "negatív végtelen től végtelen ig terjedő intervallum")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn parens_interval_neg_infinity_to_pos_infinity() -> Result<()> {
+ let expr = "";
+ test_ClearSpeak("hu", "ClearSpeak_Paren", "Interval ",expr,
+ "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
new file mode 100644
index 00000000..994dafff
--- /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 = "";
+ test("hu", "ClearSpeak", expr, "összeg ettől: n egyenlő 1, eddig: 10 értéke: n")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn sum_under() -> Result<()> {
+ let expr = "";
+ test("hu", "ClearSpeak", expr, "összeg alatta nagy s i")?;
+ return Ok(());
+
+}
+// AI generated
+#[test]
+fn sum_both_msubsup() -> Result<()> {
+ let expr = "";
+ test("hu", "ClearSpeak", expr, "összeg ettől: n egyenlő 1, eddig: 10 értéke: n")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn sum_sub() -> Result<()> {
+ let expr = "";
+ test("hu", "ClearSpeak", expr, "összeg alatta nagy s i")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn sum() -> Result<()> {
+ let expr = "";
+ test("hu", "ClearSpeak", expr, "összeg a alsó index i")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn product_both() -> Result<()> {
+ let expr = "";
+ test("hu", "ClearSpeak", expr, "produktum ettől: n egyenlő 1, eddig: 10 értéke: n")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn product_under() -> Result<()> {
+ let expr = "";
+ test("hu", "ClearSpeak", expr, "produktum alatta nagy s i")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn product() -> Result<()> {
+ let expr = "";
+ test("hu", "ClearSpeak", expr, "produktum a alsó index i")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn intersection_both() -> Result<()> {
+ let expr = "";
+ test("hu", "ClearSpeak", expr, "kereszteződés ettől: i egyenlő 1, eddig: 10 értéke:; nagy s alsó index i")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn intersection_under() -> Result<()> {
+ let expr = "";
+ test("hu", "ClearSpeak", expr, "kereszteződés alatta nagy c, nagy s alsó index i")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn intersection() -> Result<()> {
+ let expr = "";
+ test("hu", "ClearSpeak", expr, "kereszteződés nagy s alsó index i")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn union_both() -> Result<()> {
+ let expr = "";
+ test("hu", "ClearSpeak", expr, "unió ettől: i egyenlő 1, eddig: 10 értéke:; nagy s alsó index i")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn union_under() -> Result<()> {
+ let expr = "";
+ test("hu", "ClearSpeak", expr, "unió alatta nagy c, nagy s alsó index i")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn union() -> Result<()> {
+ let expr = "";
+ test("hu", "ClearSpeak", expr, "unió nagy s alsó index i")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn integral_both() -> Result<()> {
+ let expr = "";
+ test("hu", "ClearSpeak", expr, "integrál ettől: 0, eddig: 1 értéke:; f x; d x")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn integral_under() -> Result<()> {
+ let expr = "";
+ test("hu", "ClearSpeak", expr, "integrál alatta a valós számok halmaza; f x d x")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn integral() -> Result<()> {
+ let expr = "";
+ test("hu", "ClearSpeak", expr, "integrál f x d x")?;
+ return Ok(());
+
+}
diff --git a/tests/Languages/hu/ClearSpeak/menclose.rs b/tests/Languages/hu/ClearSpeak/menclose.rs
new file mode 100644
index 00000000..33c03f69
--- /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 = "";
+ test("hu", "ClearSpeak", expr, "aktuárius szimbólum, kezdet: 3 plusz 2 i végpont vége")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn menclose_box() -> Result<()> {
+ let expr = "";
+ test("hu", "ClearSpeak", expr, "doboz, kör, kezdet: 3 plusz 2 i végpont vége")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn menclose_left() -> Result<()> {
+ let expr = "";
+ test("hu", "ClearSpeak", expr, "vonal balra, kezdet: 3 ketted végpont vége")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn menclose_right() -> Result<()> {
+ let expr = "";
+ test("hu", "ClearSpeak", expr, "vonal jobbra, kezdet: 3 ketted végpont vége")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn menclose_top_bottom() -> Result<()> {
+ let expr = "";
+ test("hu", "ClearSpeak", expr, "vonal felső, alsó, kezdet: 3 ketted végpont vége")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn menclose_updiagonalstrike() -> Result<()> {
+ let expr = "";
+ test("hu", "ClearSpeak", expr, "átlósan felfelé, kihúzva, kezdet: 3 ketted végpont vége")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn menclose_downdiagonalstrike() -> Result<()> {
+ let expr = "";
+ test("hu", "ClearSpeak", expr, "átlósan lefelé, kihúzva, kezdet: 3 ketted végpont vége")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn menclose_cross_out() -> Result<()> {
+ let expr = "";
+ test("hu", "ClearSpeak", expr, "x, kihúzva, kezdet: 3 ketted végpont vége")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn menclose_vertical_horizontal_strike() -> Result<()> {
+ let expr = "";
+ test("hu", "ClearSpeak", expr, "függőleges, vízszintes, kihúzva, kezdet: 3 ketted végpont vége")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn menclose_leftarrow() -> Result<()> {
+ let expr = "";
+ test("hu", "ClearSpeak", expr, "balra nyíl, kezdet: 3 ketted végpont vége")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn menclose_right_up_down_arrow() -> Result<()> {
+ let expr = "";
+ test("hu", "ClearSpeak", expr, "felfelé nyíl, lefelé nyíl, jobbra nyíl, kezdet: 3 ketted végpont vége")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn menclose_northeastarrow() -> Result<()> {
+ let expr = "";
+ test("hu", "ClearSpeak", expr, "északkeleti nyíl, kezdet: 3 ketted végpont vége")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn menclose_other_single_arrows() -> Result<()> {
+ let expr = "";
+ test("hu", "ClearSpeak", expr, "délkeleti nyíl, délnyugati nyíl, északnyugati nyíl, kezdet: 3 ketted végpont vége")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn menclose_northwestsoutheastarrow() -> Result<()> {
+ let expr = "";
+ test("hu", "ClearSpeak", expr, "kétvégű lefelé mutató átlós nyíl, kezdet: 3 ketted végpont vége")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn menclose_other_double_arrows() -> Result<()> {
+ let expr = "";
+ 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(());
+
+}
+
+// AI generated
+#[test]
+fn menclose_madrub() -> Result<()> {
+ let expr = "";
+ test("hu", "ClearSpeak", expr, "arab faktoriális szimbólum, kezdet: 3 ketted végpont vége")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn menclose_phasorangle() -> Result<()> {
+ let expr = "";
+ test("hu", "ClearSpeak", expr, "fázisszög, kezdet: 3 ketted végpont vége")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn menclose_circle_phasorangle() -> Result<()> {
+ let expr = "";
+ test("hu", "ClearSpeak", expr, "kör, fázisszög, kezdet: 3 ketted végpont vége")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn menclose_longdiv() -> Result<()> {
+ let expr = "";
+ test("hu", "ClearSpeak", expr, "hosszú osztásjel, kezdet: 3 ketted végpont vége")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn menclose_longdiv_default() -> Result<()> {
+ let expr = "";
+ test("hu", "ClearSpeak", expr, "hosszú osztásjel, kezdet: 3 ketted végpont vége")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn menclose_longdiv_empty_string() -> Result<()> {
+ let expr = "";
+ test("hu", "ClearSpeak", expr, "hosszú osztásjel, kezdet: 3 ketted végpont vége")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn menclose_longdiv_whitespace_string() -> Result<()> {
+ let expr = "";
+ test("hu", "ClearSpeak", expr, "hosszú osztásjel, kezdet: 3 ketted végpont vége")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn menclose_radical() -> Result<()> {
+ let expr = "";
+ test("hu", "ClearSpeak", expr, "négyzetgyök, kezdet: 3 ketted végpont vége")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn simple_speak_menclose_top_bottom() -> Result<()> {
+ let expr = "";
+ 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
new file mode 100644
index 00000000..74599f26
--- /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 = "";
+ test("hu", "ClearSpeak", expr, "1 ketted")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn common_fraction_thirds() -> Result<()> {
+ let expr = "";
+ test("hu", "ClearSpeak", expr, "2 harmad")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn common_fraction_tenths() -> Result<()> {
+ let expr = "";
+ 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(());
+
+}
+
+// AI generated
+#[test]
+#[allow(non_snake_case)]
+fn not_ClearSpeak_common_fraction_tenths() -> Result<()> {
+ let expr = "";
+ 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(());
+
+}
+
+// AI generated
+#[test]
+fn non_simple_fraction() -> Result<()> {
+ let expr = "
+ ";
+ 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(());
+
+}
+
+// AI generated
+#[test]
+fn frac_with_units() -> Result<()> {
+ let expr = "
+ ";
+ test("hu", "ClearSpeak", expr, "62 mérföld per óra")?;
+ return Ok(());
+
+}
+
+
+// AI generated
+#[test]
+fn mixed_number() -> Result<()> {
+ let expr = "";
+ test("hu", "ClearSpeak", expr, "3 és 1 ketted")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn explicit_mixed_number() -> Result<()> {
+ let expr = "";
+ test("hu", "ClearSpeak", expr, "3 és 1 nyolcad")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn mixed_number_big() -> Result<()> {
+ let expr = "";
+ test("hu", "ClearSpeak", expr, "3 és 7 per 83")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn simple_text() -> Result<()> {
+ let expr = "";
+ test("hu", "ClearSpeak", expr, "rise per run")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn number_and_text() -> Result<()> {
+ let expr = "";
+ test("hu", "ClearSpeak", expr, "2 miles per 3 gallons")?;
+ return Ok(());
+
+}
+
+
+// AI generated
+#[test]
+fn nested_simple_fractions() -> Result<()> {
+ let expr = "";
+ 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,
+ "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,
+ "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,
+ "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 per 2, tört vége, per 2 per 3, tört vége; tört vége")?;
+ return Ok(());
+
+}
+
+
+// AI generated
+#[test]
+fn semi_nested_fraction() -> Result<()> {
+ let expr = "";
+ test("hu", "ClearSpeak", expr, "2 harmad x per 6")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn general_nested_fraction() -> Result<()> {
+ let expr = "
+
+ ";
+ test("hu", "ClearSpeak", expr, "a tört, melynek számlálója; 10 per n; nevezője pedig 2 per n")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn complex_nested_fraction() -> Result<()> {
+ let expr = "
+
+ ";
+ 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(());
+
+}
+
+// AI generated
+#[test]
+fn simple_function() -> Result<()> {
+ let expr = "";
+ 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(());
+
+}
+
+// AI generated
+#[test]
+fn function_over_function() -> Result<()> {
+ let expr = "";
+ 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(());
+
+}
+
+// AI generated
+#[test]
+fn non_simple_function_over_function() -> Result<()> {
+ let expr = "";
+ test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Fractions", "Auto")], expr,
+ "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,
+ "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(());
+
+}
+
+// AI generated
+#[test]
+fn binomial() -> Result<()> {
+ let expr = "";
+ 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
new file mode 100644
index 00000000..86cdb90e
--- /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 = "";
+ test("hu", "ClearSpeak", expr, "négyzetgyök x")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn msqrt_simple_end_root() -> Result<()> {
+ let expr = "";
+ test_ClearSpeak("hu", "ClearSpeak_Roots", "RootEnd", expr, "négyzetgyök x, gyök vége")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn msqrt_simple_positive() -> Result<()> {
+ let expr = "";
+ test_ClearSpeak("hu", "ClearSpeak_Roots", "PosNegSqRoot", expr, "pozitív négyzetgyök x")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn msqrt_simple_pos_end_root() -> Result<()> {
+ let expr = "";
+ test_ClearSpeak("hu", "ClearSpeak_Roots", "PosNegSqRootEnd", expr, "pozitív négyzetgyök x, gyök vége")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn msqrt_simple_pos_end_with_neg_root() -> Result<()> {
+ let expr = "";
+ test_ClearSpeak("hu", "ClearSpeak_Roots", "PosNegSqRootEnd", expr,
+ "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(());
+
+}
+
+// AI generated
+#[test]
+fn mroot_simple_pos_end_with_neg_root() -> Result<()> {
+ let expr = "";
+ test_ClearSpeak("hu", "ClearSpeak_Roots", "PosNegSqRoot", expr,
+ "a negatív köbgyök x; mínusz pozitív négyzetgyök x")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn neg_without_root() -> Result<()> {
+ let expr = "";
+ test("hu", "ClearSpeak", expr, "negatív x mínusz y")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn msqrt() -> Result<()> {
+ let expr = "";
+ test("hu", "ClearSpeak", expr, "négyzetgyök x plusz y")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn mroot_as_square_root() -> Result<()> {
+ let expr = "";
+ test("hu", "ClearSpeak", expr, "négyzetgyök x")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn cube_root() -> Result<()> {
+ let expr = "";
+ test("hu", "ClearSpeak", expr, "a köbgyök x")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn ordinal_root() -> Result<()> {
+ let expr = "";
+ test("hu", "ClearSpeak", expr, "a kilencedik gyök x")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn simple_mi_root() -> Result<()> {
+ let expr = "";
+ test("hu", "ClearSpeak", expr, "a n-edik gyök x")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn mroot_simple_pos_end_root() -> Result<()> {
+ let expr = "";
+ test_ClearSpeak("hu", "ClearSpeak_Roots", "PosNegSqRootEnd", expr, "a pozitív t-edik gyök x, gyök vége")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn mroot_simple_end_root() -> Result<()> {
+ let expr = "";
+ test_ClearSpeak("hu", "ClearSpeak_Roots", "RootEnd", expr, "a huszonegyedik gyök x plusz y, gyök vége")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn simple_fraction_power() -> Result<()> {
+ let expr = "";
+ 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
new file mode 100644
index 00000000..8edcc2f7
--- /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 = "";
+ 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(());
+
+}
+
+// AI generated
+#[test]
+fn cubed() -> Result<()> {
+ let expr = "";
+ 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(());
+
+}
+
+// AI generated
+#[test]
+fn ordinal_power() -> Result<()> {
+ let expr = "";
+ 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(());
+
+}
+
+
+// AI generated
+#[test]
+fn zero_power() -> Result<()> {
+ let expr = "";
+ 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(());
+
+}
+
+// AI generated
+#[test]
+fn simple_mi_power() -> Result<()> {
+ let expr = "";
+ 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(());
+
+}
+
+// AI generated
+#[test]
+fn decimal_power() -> Result<()> {
+ let expr = "";
+ 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(());
+
+}
+
+// AI generated
+#[test]
+fn non_simple_power() -> Result<()> {
+ let expr = "";
+ 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(());
+
+}
+
+// AI generated
+#[test]
+fn negative_power() -> Result<()> {
+ let expr = "";
+ 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(());
+
+}
+
+// AI generated
+#[test]
+fn simple_fraction_power() -> Result<()> {
+ let expr = "";
+ test("hu", "ClearSpeak", expr, "x a(z) 1 harmad hatványon")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn nested_squared_power_with_coef() -> Result<()> {
+ let expr = "";
+ 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(());
+
+}
+
+// AI generated
+#[test]
+fn nested_squared_power_with_neg_coef() -> Result<()> {
+ let expr = "";
+ test("hu", "ClearSpeak", expr, "3 emelve a negatív 2 x a négyzeten hatványra")?;
+ return Ok(());
+
+}
+
+
+// AI generated
+#[test]
+fn nested_cubed_power() -> Result<()> {
+ let expr = "";
+ test("hu", "ClearSpeak", expr, "y emelve a(z) 4 ötöd a köbön hatványra")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn nested_cubed_power_with_neg_base() -> Result<()> {
+ let expr = "";
+ test("hu", "ClearSpeak", expr, "y a(z) negatív 4 ötöd a köbön hatványon")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn nested_number_times_squared() -> Result<()> {
+ let expr = "";
+ 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(());
+
+}
+
+// AI generated
+#[test]
+fn nested_negative_number_times_squared() -> Result<()> {
+ let expr = "";
+ 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(());
+
+}
+
+// AI generated
+#[test]
+fn nested_expr_to_tenth() -> Result<()> {
+ let expr = "";
+ 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(());
+
+}
+
+// AI generated
+#[test]
+fn nested_non_simple_squared_exp() -> Result<()> {
+ let expr = "";
+ 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(());
+
+}
+
+// AI generated
+#[test]
+fn nested_default_power() -> Result<()> {
+ let expr = "";
+ 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(());
+
+}
+
+// AI generated
+#[test]
+fn nested_complex_power() -> Result<()> {
+ let expr = "";
+ test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "Auto")], expr,
+ "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 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 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 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(());
+
+}
+
+// AI generated
+#[test]
+fn default_power() -> Result<()> {
+ let expr = "";
+ 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
new file mode 100644
index 00000000..22ca5b27
--- /dev/null
+++ b/tests/Languages/hu/ClearSpeak/multiline.rs
@@ -0,0 +1,184 @@
+use crate::common::*;
+use anyhow::Result;
+
+
+// AI generated
+#[test]
+fn case_1() -> Result<()> {
+ let expr = "
+ ";
+ test_ClearSpeak("hu", "ClearSpeak_MultiLineLabel", "Auto", expr,
+ "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(());
+}
+
+// AI generated
+#[test]
+fn equation_auto() -> Result<()> {
+ let expr = "
+ ";
+ 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(());
+}
+
+
+// AI generated
+#[test]
+fn equation_plus_at_start() -> Result<()> {
+ let expr = "
+ ";
+ 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(());
+}
+
+// AI generated
+#[test]
+fn equation_case() -> Result<()> {
+ let expr = "
+ ";
+ test_ClearSpeak("hu", "ClearSpeak_MultiLineLabel", "Case", expr,
+ "2 eset; 1 . eset; x plusz y, egyenlő 7; 2 . eset; 2 x plusz 3 y; egyenlő 17")?;
+ return Ok(());
+}
+
+// AI generated
+#[test]
+fn equation_constraint() -> Result<()> {
+ let expr = "
+ ";
+ 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(());
+}
+
+// AI generated
+#[test]
+fn equation_equation() -> Result<()> {
+ let expr = "
+ ";
+ 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(());
+}
+
+// AI generated
+#[test]
+fn equation_line() -> Result<()> {
+ let expr = "
+ ";
+ 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(());
+}
+
+// AI generated
+#[test]
+fn equation_none() -> Result<()> {
+ let expr = "
+ ";
+ test_ClearSpeak("hu", "ClearSpeak_MultiLineLabel", "None", expr,
+ "2 sor; x plusz y, egyenlő 7; 2 x plusz 3 y; egyenlő 17")?;
+ return Ok(());
+}
+
+// AI generated
+#[test]
+fn equation_row() -> Result<()> {
+ let expr = "
+ ";
+ 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(());
+}
+
+// AI generated
+#[test]
+fn equation_step() -> Result<()> {
+ let expr = "
+ ";
+ 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(());
+}
+
+// AI generated
+#[test]
+fn continued_row() -> Result<()> {
+ let expr = "";
+test("hu", "SimpleSpeak", expr,
+ "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
new file mode 100644
index 00000000..c2b9d589
--- /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, "a komplex számok halmaza")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn natural() -> Result<()> {
+ let expr = "";
+ test("hu", "ClearSpeak", expr, "a természetes számok halmaza")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn rationals() -> Result<()> {
+ let expr = "";
+ test("hu", "ClearSpeak", expr, "a racionális számok halmaza")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn reals() -> Result<()> {
+ let expr = "";
+ test("hu", "ClearSpeak", expr, "a valós számok halmaza")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn integers() -> Result<()> {
+ let expr = "";
+ test("hu", "ClearSpeak", expr, "az egész számok halmaza")?;
+ return Ok(());
+
+}
+
+
+
+// AI generated
+#[test]
+fn msup_complex() -> Result<()> {
+ let expr = "";
+ test("hu", "ClearSpeak", expr, "komplex számhalmaz 2")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn msup_natural() -> Result<()> {
+ let expr = "";
+ test("hu", "ClearSpeak", expr, "természetes számhalmaz 2")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn msup_rationals() -> Result<()> {
+ let expr = "";
+ test("hu", "ClearSpeak", expr, "racionális számhalmaz 2")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn msup_reals() -> Result<()> {
+ let expr = "";
+ test("hu", "ClearSpeak", expr, "valós számhalmaz 3")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn msup_integers() -> Result<()> {
+ let expr = "";
+ test("hu", "ClearSpeak", expr, "egész számhalmaz 4")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn msup_positive_integers() -> Result<()> {
+ let expr = "";
+ test("hu", "ClearSpeak", expr, "pozitív egész számok")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn msup_negative_integers() -> Result<()> {
+ let expr = "";
+ test("hu", "ClearSpeak", expr, "negatív egész számok")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn msup_positive_rationals() -> Result<()> {
+ let expr = "";
+ test("hu", "ClearSpeak", expr, "pozitív racionális számok")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn msup_negative_rationals() -> Result<()> {
+ let expr = "";
+ test("hu", "ClearSpeak", expr, "negatív racionális számok")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn empty_set() -> Result<()> {
+ let expr = "";
+ test("hu", "ClearSpeak", expr, "az üres halmaz")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn single_element_set() -> Result<()> {
+ let expr = "";
+ test("hu", "ClearSpeak", expr, "a halmaz 12")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn multiple_element_set() -> Result<()> {
+ let expr = "";
+ test("hu", "ClearSpeak", expr, "a halmaz 5 vessző, 10 vessző, 15")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn set_with_colon() -> Result<()> {
+ let expr = "";
+ test("hu", "ClearSpeak", expr, "x melyekre teljesül, hogy minden x nagyobb, mint 2")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn set_with_bar() -> Result<()> {
+ let expr = "";
+ test("hu", "ClearSpeak", expr, "x melyekre teljesül, hogy minden x nagyobb, mint 2")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn element_alone() -> Result<()> {
+ let expr = "";
+ test("hu", "ClearSpeak", expr, "3 plusz 2 i; nem tagja az alábbi halmaznak:, a valós számok halmaza")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn element_under_sum() -> Result<()> {
+ let expr = "";
+ test("hu", "ClearSpeak", 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(());
+
+}
+
+// AI generated
+#[test]
+fn complicated_set_with_colon() -> Result<()> {
+ let expr = "";
+ 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(());
+
+}
+
+// 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 = "";
+ test("hu", "ClearSpeak", expr,
+ "x a természetes számok halmaza melyekre teljesül, hogy minden x páros szám")?;
+ return Ok(());
+
+}
+
+
+// AI generated
+#[test]
+fn set_with_bar_member() -> Result<()> {
+ let expr = "";
+ test_ClearSpeak("hu", "ClearSpeak_SetMemberSymbol", "Member",
+ expr, "x tagja az egész számok halmaza melyekre teljesül, hogy minden x nagyobb, mint 5")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn element_alone_member() -> Result<()> {
+ let expr = "";
+ test_ClearSpeak("hu", "ClearSpeak_SetMemberSymbol", "Member",
+ expr, "3 plusz 2 i; nem tagja az alábbi halmaznak:, a valós számok halmaza")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn element_under_sum_member() -> Result<()> {
+ let expr = "";
+ test_ClearSpeak("hu", "ClearSpeak_SetMemberSymbol", "Member",
+ 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(());
+
+}
+
+
+// AI generated
+#[test]
+fn set_with_bar_element() -> Result<()> {
+ let expr = "";
+ test_ClearSpeak("hu", "ClearSpeak_SetMemberSymbol", "Element",
+ expr, "x eleme ennek:, az egész számok halmaza melyekre teljesül, hogy minden x nagyobb, mint 5")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn element_alone_element() -> Result<()> {
+ let expr = "";
+ test_ClearSpeak("hu", "ClearSpeak_SetMemberSymbol", "Element",
+ expr, "3 plusz 2 i, nem eleme ennek:, a valós számok halmaza")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn element_under_sum_element() -> Result<()> {
+ let expr = "";
+ test_ClearSpeak("hu", "ClearSpeak_SetMemberSymbol", "Element",
+ 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(());
+
+}
+
+// AI generated
+#[test]
+fn set_with_bar_in() -> Result<()> {
+ let expr = "";
+ test_ClearSpeak("hu", "ClearSpeak_SetMemberSymbol", "In",
+ expr, "x az egész számok halmaza melyekre teljesül, hogy minden x nagyobb, mint 5")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn element_alone_in() -> Result<()> {
+ let expr = "";
+ test_ClearSpeak("hu", "ClearSpeak_SetMemberSymbol", "In",
+ expr, "3 plusz 2 i; nincs benne az alábbi halmazban:, a valós számok halmaza")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn element_under_sum_in() -> Result<()> {
+ let expr = "";
+ test_ClearSpeak("hu", "ClearSpeak_SetMemberSymbol", "In",
+ 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(());
+
+}
+
+// AI generated
+#[test]
+fn set_with_bar_belongs() -> Result<()> {
+ let expr = "";
+ test_ClearSpeak("hu", "ClearSpeak_SetMemberSymbol", "Belongs",
+ expr, "x hozzátartozó eleme ennek:, az egész számok halmaza melyekre teljesül, hogy minden x nagyobb, mint 5")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn element_alone_belongs() -> Result<()> {
+ let expr = "";
+ test_ClearSpeak("hu", "ClearSpeak_SetMemberSymbol", "Belongs",
+ expr, "3 plusz 2 i, nem tartozik ebbe:, a valós számok halmaza")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn element_under_sum_belongs() -> Result<()> {
+ let expr = "";
+ test_ClearSpeak("hu", "ClearSpeak_SetMemberSymbol", "Belongs",
+ 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(());
+
+}
+
+
+// AI generated
+#[test]
+fn set_member_woall() -> Result<()> {
+ let expr = "";
+ test_ClearSpeak_prefs("hu", vec![("ClearSpeak_SetMemberSymbol", "Member"), ("ClearSpeak_Sets", "woAll")],
+ expr, "x tagja az egész számok halmaza melyekre teljesül, hogy x nagyobb, mint 5")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn multiple_element_set_woall() -> Result<()> {
+ let expr = "";
+ test_ClearSpeak("hu", "ClearSpeak_Sets", "woAll", expr, "a halmaz 5 vessző, 10 vessző, 15")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn multiple_element_set_silent_bracket() -> Result<()> {
+ let expr = "";
+ test_ClearSpeak("hu", "ClearSpeak_Sets", "SilentBracket", expr, "5 vessző, 10 vessző, 15")?;
+ return Ok(());
+
+ }
+
+// AI generated
+#[test]
+fn silent_bracket() -> Result<()> {
+ let expr = "";
+ test_ClearSpeak("hu", "ClearSpeak_Sets", "SilentBracket", expr,
+ "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
new file mode 100644
index 00000000..ff38686c
--- /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 = "";
+ test("hu", "ClearSpeak", expr, "2 szorozva 3")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn multiplication_by() -> Result<()> {
+ let expr = "";
+ test_ClearSpeak("hu", "ClearSpeak_MultSymbolX", "By", expr, "2 szorozva 3")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn multiplication_cross() -> Result<()> {
+ let expr = "";
+ test_ClearSpeak("hu", "ClearSpeak_MultSymbolX", "Cross", expr, "u kereszt v")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn ellipses_auto_start() -> Result<()> {
+ let expr = "";
+ test("hu", "ClearSpeak", expr, "pont pont pont vessző, negatív 2 vessző, negatív 1 vessző, 0")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn ellipses_auto_end() -> Result<()> {
+ let expr = "";
+ test_ClearSpeak("hu", "ClearSpeak_Ellipses", "Auto", expr, "1 vessző, 2 vessző, 3 vessző, pont pont pont")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn ellipses_auto_middle() -> Result<()> {
+ let expr = "";
+ test_ClearSpeak("hu", "ClearSpeak_Ellipses", "Auto", expr,
+ "1 vessző, 2 vessző, 3 vessző, pont pont pont vessző, 20")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn ellipses_auto_both() -> Result<()> {
+ let expr = "";
+ test_ClearSpeak("hu", "ClearSpeak_Ellipses", "Auto", expr,
+ "pont pont pont vessző, negatív 2 vessző, negatív 1 vessző, 0 vessző, 1 vessző, 2 vessző, pont pont pont")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn ellipses_and_so_on_start() -> Result<()> {
+ let expr = "";
+ test_ClearSpeak("hu", "ClearSpeak_Ellipses", "AndSoOn", expr, "pont pont pont vessző, negatív 2 vessző, negatív 1 vessző, 0")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn ellipses_and_so_on_end() -> Result<()> {
+ let expr = "";
+ test_ClearSpeak("hu", "ClearSpeak_Ellipses", "AndSoOn", expr, "1 vessző, 2 vessző, 3 és így tovább")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn ellipses_and_so_on_middle() -> Result<()> {
+ let expr = "";
+ test_ClearSpeak("hu", "ClearSpeak_Ellipses", "AndSoOn", expr,
+ "1 vessző, 2 vessző, 3, és így tovább egészen az alábbi értékig:; 20")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn ellipses_and_so_on_both() -> Result<()> {
+ let expr = "";
+ test_ClearSpeak("hu", "ClearSpeak_Ellipses", "AndSoOn", expr,
+ "pont pont pont vessző, negatív 2 vessző, negatív 1 vessző, 0 vessző, 1 vessző, 2 vessző, pont pont pont")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn vertical_line_auto() -> Result<()> {
+ let expr = "";
+ test_ClearSpeak("hu", "ClearSpeak_VerticalLine", "Auto", expr,
+ "3 osztja 6")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn vertical_line_divides() -> Result<()> {
+ let expr = "";
+ test_ClearSpeak("hu", "ClearSpeak_VerticalLine", "Divides", expr,
+ "3 osztja 6")?;
+ return Ok(());
+
+}
+
+ #[test]
+ fn vertical_line_given() -> Result<()> {
+ let expr = "";
+ test_ClearSpeak("hu", "ClearSpeak_VerticalLine", "Given", expr,
+ "3 adott 6")?;
+ return Ok(());
+
+ }
+
+ #[test]
+ fn vertical_line_probability_given() -> Result<()> {
+ let expr = "";
+ test_ClearSpeak_prefs("hu", vec![("ClearSpeak_VerticalLine", "Given"), ("ClearSpeak_ImpliedTimes", "None")]
+ , expr, "nagy p; nyitott zárójel, nagy a adott nagy b, zárt zárójel")?;
+ return Ok(());
+ }
+
+// AI generated
+#[test]
+fn vertical_line_set() -> Result<()> {
+ let expr = "";
+ test_ClearSpeak("hu", "ClearSpeak_VerticalLine", "Auto", expr,
+ "x melyekre teljesül, hogy minden x nagyobb, mint 0")?;
+ return Ok(());
+
+}
+
+
+// AI generated
+#[test]
+fn vertical_line_set_such_that() -> Result<()> {
+ let expr = "";
+ test_ClearSpeak("hu", "ClearSpeak_VerticalLine", "SuchThat", expr,
+ "x melyekre teljesül, hogy minden x nagyobb, mint 0")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn vertical_line_set_given() -> Result<()> {
+ let expr = "";
+ // the rules for set will override all the options -- ClearSpeak spec should be clarified
+ test_ClearSpeak("hu", "ClearSpeak_VerticalLine", "Given", expr,
+ "x melyekre teljesül, hogy minden x nagyobb, mint 0")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn vertical_line_set_and_abs() -> Result<()> {
+ let expr = "";
+ test_ClearSpeak("hu", "ClearSpeak_VerticalLine", "Auto", expr,
+ "x melyekre teljesül, hogy minden x abszolút értéke; nagyobb, mint 2")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn vertical_line_evaluated_at() -> Result<()> {
+ let expr = "";
+ test_ClearSpeak("hu", "ClearSpeak_VerticalLine", "Auto", expr,
+ "f x helyettesítve, x egyenlő 5")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn vertical_line_evaluated_at_both() -> Result<()> {
+ let expr = "";
+ test_ClearSpeak("hu", "ClearSpeak_VerticalLine", "Auto", expr,
+ "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(());
+
+}
+// AI generated
+#[test]
+fn vertical_line_evaluated_at_divides() -> Result<()> {
+ let expr = "";
+ test_ClearSpeak("hu", "ClearSpeak_VerticalLine", "Divides", expr,
+ "f x helyettesítve, x egyenlő 5")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn vertical_line_evaluated_at_both_given() -> Result<()> {
+ let expr = "";
+ test_ClearSpeak("hu", "ClearSpeak_VerticalLine", "Given", expr,
+ "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(());
+
+}
diff --git a/tests/Languages/hu/SimpleSpeak/functions.rs b/tests/Languages/hu/SimpleSpeak/functions.rs
new file mode 100644
index 00000000..aa4c2a43
--- /dev/null
+++ b/tests/Languages/hu/SimpleSpeak/functions.rs
@@ -0,0 +1,429 @@
+/// 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 = "";
+ 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(());
+
+}
+
+// AI generated
+#[test]
+fn hyperbolic_trig_names() -> Result<()> {
+ let expr = "";
+ 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(());
+
+}
+
+
+// AI generated
+#[test]
+fn inverse_trig() -> Result<()> {
+ let expr = "";
+ test("hu", "SimpleSpeak", expr, "inverz szinusz x")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn trig_squared() -> Result<()> {
+ let expr = "";
+ test("hu", "SimpleSpeak", expr, "szinusz x a négyzeten")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn trig_cubed() -> Result<()> {
+ let expr = "";
+ test("hu", "SimpleSpeak", expr, "tangens x a köbön")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn trig_fourth() -> Result<()> {
+ let expr = "";
+ test("hu", "SimpleSpeak", expr, "szekáns; x, a(z) negyedik hatványon")?;
+ return Ok(());
+
+}
+
+
+// AI generated
+#[test]
+fn trig_power_other() -> Result<()> {
+ let expr = "";
+ test("hu", "SimpleSpeak", expr, "hiperbolikus szinusz; x, a(z) n mínusz 1 hatványon")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn simple_log() -> Result<()> {
+ let expr = "";
+ test("hu", "SimpleSpeak", expr, "logaritmus x")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn normal_log() -> Result<()> {
+ let expr = "";
+ test("hu", "SimpleSpeak", expr, "logaritmus, nyitott zárójel, x plusz y, zárt zárójel")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn simple_log_with_base() -> Result<()> {
+ let expr = "";
+ test("hu", "SimpleSpeak", expr, "alap logaritmus b; x")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn normal_log_with_base() -> Result<()> {
+ let expr = "";
+ test("hu", "SimpleSpeak", expr, "alap logaritmus b; nyitott zárójel, x plusz y, zárt zárójel")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn normal_ln() -> Result<()> {
+ let expr = "";
+ test_prefs("hu", "SimpleSpeak", vec![("Verbosity", "Terse")],
+ expr, "l n, nyitott zárójel, x plusz y, zárt zárójel")?;
+ test_prefs("hu", "SimpleSpeak", vec![("Verbosity", "Medium")],
+ 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, "természetes alapú logaritmus; nyitott zárójel, x plusz y, zárt zárójel")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn simple_ln() -> Result<()> {
+ let expr = "";
+ test_prefs("hu", "SimpleSpeak", vec![("Verbosity", "Terse")],
+ expr, "l n x")?;
+ test_prefs("hu", "SimpleSpeak", vec![("Verbosity", "Medium")],
+ expr, "természetes alapú logaritmus, x")?;
+ test_prefs("hu", "SimpleSpeak", vec![("Verbosity", "Verbose")],
+ expr, "természetes alapú logaritmus, x")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn other_names() -> Result<()> {
+ let expr = "";
+ test_prefs("hu", "SimpleSpeak", vec![("Verbosity", "Terse")],
+ expr, "kovariancia x")?;
+ test_prefs("hu", "SimpleSpeak", vec![("Verbosity", "Medium")],
+ expr, "kovariancia x")?;
+ let expr = "";
+ test_prefs("hu", "SimpleSpeak", vec![("Verbosity", "Terse")],
+ expr, "exponenciális x")?;
+ test_prefs("hu", "SimpleSpeak", vec![("Verbosity", "Medium")],
+ expr, "exponenciális x")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn explicit_function_call_with_parens() -> Result<()> {
+ let expr = "";
+ test("hu", "SimpleSpeak", expr, "t x")?;
+ return Ok(());
+
+}
+
+
+// AI generated
+#[test]
+fn explicit_times_with_parens() -> Result<()> {
+ let expr = "";
+ test("hu", "SimpleSpeak", expr, "t szorozva x")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn explicit_function_call() -> Result<()> {
+ let expr = "";
+ test("hu", "SimpleSpeak", expr, "t x")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn explicit_times() -> Result<()> {
+ let expr = "";
+ test("hu", "SimpleSpeak", expr, "t x")?;
+ return Ok(());
+
+}
+
+
+/*
+ * Tests for times
+ */
+// AI generated
+#[test]
+fn no_times_binomial() -> Result<()> {
+ let expr = "";
+ test("hu", "SimpleSpeak", expr, "x y")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn times_following_paren() -> Result<()> {
+ let expr = "";
+ test("hu", "SimpleSpeak", expr, "2 szorozva 3")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn times_preceding_paren() -> Result<()> {
+ let expr = "";
+ test("hu", "SimpleSpeak", expr, "2 szorozva 3")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn no_times_sqrt() -> Result<()> {
+ let expr = "";
+ test("hu", "SimpleSpeak", expr,
+ "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,
+ "a négyzetgyöke ennek: a; szorozva a négyzetgyöke ennek: b; egyenlő, a négyzetgyöke ennek: a b")?;
+ return Ok(());
+
+}
+
+/*
+ * Tests for parens
+ */
+ #[test]
+ fn no_parens_number() -> Result<()> {
+ let expr = "";
+ test("hu", "SimpleSpeak", expr, "25 szorozva x")?;
+ return Ok(());
+
+ }
+
+ #[test]
+ fn no_parens_monomial() -> Result<()> {
+ let expr = "";
+ test("hu", "SimpleSpeak", expr, "b, nyitott zárójel, x y zárt zárójel")?;
+ return Ok(());
+
+ }
+
+ #[test]
+ fn no_parens_negative_number() -> Result<()> {
+ let expr = "";
+ test("hu", "SimpleSpeak", expr, "2 plusz negatív 2")?;
+ return Ok(());
+
+ }
+
+
+ #[test]
+ fn no_parens_negative_number_with_var() -> Result<()> {
+ let expr = "";
+ test("hu", "SimpleSpeak", expr, "negatív 2 x, plusz 1")?;
+ return Ok(());
+
+ }
+
+ #[test]
+ fn parens_superscript() -> Result<()> {
+ let expr = "";
+ test("hu", "SimpleSpeak", expr, "nyitott zárójel, 2 x zárt zárójel a négyzeten")?;
+ return Ok(());
+
+ }
+
+ #[test]
+ fn no_parens_fraction() -> Result<()> {
+ let expr = "";
+ test("hu", "SimpleSpeak", expr, "2 plusz 1 ketted")?;
+ return Ok(());
+
+ }
+
+
+ // Tests for the four types of intervals in SimpleSpeak
+ #[test]
+ fn parens_interval_open_open() -> Result<()> {
+ let expr = "";
+ test("hu", "SimpleSpeak",expr, "c től d ig terjedő intervallum, nem tartalmazza a c elemet vagy d elemet")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+ fn parens_interval_closed_open() -> Result<()> {
+ let expr = "";
+ test("hu", "SimpleSpeak",expr, "c től d ig terjedő intervallum, tartalmazza a c elemet de nem tartalmazza a d elemet")?;
+ return Ok(());
+
+}
+
+
+// AI generated
+#[test]
+fn parens_interval_open_closed() -> Result<()> {
+ let expr = "";
+ test("hu", "SimpleSpeak",expr,"c től d ig terjedő intervallum, nem tartalmazza a c elemet de tartalmazza a d elemet")?;
+ return Ok(());
+
+}
+
+
+// AI generated
+#[test]
+fn parens_interval_closed_closed() -> Result<()> {
+ let expr = "";
+ test("hu", "SimpleSpeak",expr, "c től d ig terjedő intervallum, tartalmazza a c elemet és d elemet")?;
+ return Ok(());
+
+}
+
+ #[test]
+ fn parens_interval_neg_infinity_open_open() -> Result<()> {
+ let expr = "";
+ test("hu", "SimpleSpeak",expr,
+ "negatív végtelen től d ig terjedő intervallum, nem tartalmazza a d elemet")?;
+ return Ok(());
+
+}
+
+ #[test]
+ fn parens_interval_neg_infinity_open_closed() -> Result<()> {
+ let expr = "";
+ test("hu", "SimpleSpeak",expr,
+ "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
new file mode 100644
index 00000000..8eb1b248
--- /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 = "";
+ test("hu", "SimpleSpeak", expr, "ív nagy b nagy c")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn ray() -> Result<()> {
+ let expr = "";
+ test("hu", "SimpleSpeak", expr, "vonalszakasz nagy x nagy y")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn arc_mtext() -> Result<()> {
+ let expr = "";
+ test("hu", "SimpleSpeak", expr, "ív nagy b nagy c")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn ray_mtext() -> Result<()> {
+ let expr = "";
+ 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
new file mode 100644
index 00000000..1d798202
--- /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 = "";
+ test("hu", "SimpleSpeak", expr, "összeg ettől: n egyenlő 1, eddig: 10 értéke: n")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn sum_under() -> Result<()> {
+ let expr = "";
+ test("hu", "SimpleSpeak", expr, "összeg alatta nagy s i")?;
+ return Ok(());
+
+}
+// AI generated
+#[test]
+fn sum_both_msubsup() -> Result<()> {
+ let expr = "";
+ test("hu", "SimpleSpeak", expr, "összeg ettől: n egyenlő 1, eddig: 10 értéke: n")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn sum_sub() -> Result<()> {
+ let expr = "";
+ test("hu", "SimpleSpeak", expr, "összeg alatta nagy s i")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn sum() -> Result<()> {
+ let expr = "";
+ test("hu", "SimpleSpeak", expr, "összeg a alsó index i")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn product_both() -> Result<()> {
+ let expr = "";
+ test("hu", "SimpleSpeak", expr, "produktum ettől: n egyenlő 1, eddig: 10 értéke: n")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn product_under() -> Result<()> {
+ let expr = "";
+ test("hu", "SimpleSpeak", expr, "produktum alatta nagy s i")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn product() -> Result<()> {
+ let expr = "";
+ test("hu", "SimpleSpeak", expr, "produktum a alsó index i")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn intersection_both() -> Result<()> {
+ let expr = "";
+ test("hu", "SimpleSpeak", expr, "kereszteződés ettől: i egyenlő 1, eddig: 10 értéke:; nagy s alsó index i")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn intersection_under() -> Result<()> {
+ let expr = "";
+ test("hu", "SimpleSpeak", expr, "kereszteződés alatta nagy c, nagy s alsó index i")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn intersection() -> Result<()> {
+ let expr = "";
+ test("hu", "SimpleSpeak", expr, "kereszteződés nagy s alsó index i")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn union_both() -> Result<()> {
+ let expr = "";
+ test("hu", "SimpleSpeak", expr, "unió ettől: i egyenlő 1, eddig: 10 értéke:; nagy s alsó index i")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn union_under() -> Result<()> {
+ let expr = "";
+ test("hu", "SimpleSpeak", expr, "unió alatta nagy c, nagy s alsó index i")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn union() -> Result<()> {
+ let expr = "";
+ test("hu", "SimpleSpeak", expr, "unió nagy s alsó index i")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn integral_both() -> Result<()> {
+ let expr = "";
+ test("hu", "SimpleSpeak", expr, "integrál ettől: 0, eddig: 1 értéke:; f x; d x")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn integral_under() -> Result<()> {
+ let expr = "";
+ test("hu", "SimpleSpeak", expr, "integrál alatta a valós számok halmaza; f x d x")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn integral() -> Result<()> {
+ let expr = "";
+ test("hu", "SimpleSpeak", expr, "integrál f x d x")?;
+ return Ok(());
+
+}
diff --git a/tests/Languages/hu/SimpleSpeak/linear_algebra.rs b/tests/Languages/hu/SimpleSpeak/linear_algebra.rs
new file mode 100644
index 00000000..6a3007fa
--- /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 = "";
+ test("hu", "SimpleSpeak", expr, "nagy m transzponált")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn trace() -> Result<()> {
+ let expr = "";
+ test("hu", "SimpleSpeak", expr, "nyom nagy m")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn dimension() -> Result<()> {
+ let expr = "";
+ test("hu", "SimpleSpeak", expr, "dimenzió nagy m")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn homomorphism() -> Result<()> {
+ let expr = "";
+ test("hu", "SimpleSpeak", expr, "homomorfizmus nagy m")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn kernel() -> Result<()> {
+ let expr = "";
+ test("hu", "SimpleSpeak", expr, "kernel nagy l")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn norm() -> Result<()> {
+ let expr = "
+";
+ test("hu", "SimpleSpeak", expr, "normalizálás f")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn norm_non_simple() -> Result<()> {
+ let expr = "
+";
+ test("hu", "SimpleSpeak", expr, "normalizálás x plusz y normalizálás vége")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn norm_subscripted() -> Result<()> {
+ let expr = "
+";
+ test("hu", "SimpleSpeak", expr, "p normalizálás a 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#"
+"#;
+ test("hu", "SimpleSpeak", expr, "nyitott zárójel, b szorozva nahblah, zárt zárójel; szorozva a")?;
+ return Ok(());
+
+}
diff --git a/tests/Languages/hu/SimpleSpeak/mfrac.rs b/tests/Languages/hu/SimpleSpeak/mfrac.rs
new file mode 100644
index 00000000..86b13287
--- /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 = "";
+ test("hu", "SimpleSpeak", expr, "1 ketted")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn common_fraction_thirds() -> Result<()> {
+ let expr = "";
+ test("hu", "SimpleSpeak", expr, "2 harmad")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn common_fraction_tenths() -> Result<()> {
+ let expr = "";
+ test("hu", "SimpleSpeak", expr, "17 tized")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+#[allow(non_snake_case)]
+fn not_SimpleSpeak_common_fraction_tenths() -> Result<()> {
+ let expr = "";
+ test("hu", "SimpleSpeak", expr, "89 per 10")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn non_simple_fraction() -> Result<()> {
+ let expr = "
+
+ ";
+ test("hu", "SimpleSpeak", expr, "tört, x plusz y, per, x mínusz y, tört vége")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn nested_fraction() -> Result<()> {
+ let expr = "
+
+ ";
+ 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(());
+
+}
+
+
+// AI generated
+#[test]
+fn deeply_nested_fraction_msqrt() -> Result<()> {
+ let expr = "
+
+ ";
+ 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(());
+
+}
+
+// AI generated
+#[test]
+fn deeply_nested_fraction_mrow_msqrt() -> Result<()> {
+ let expr = "
+
+ ";
+ 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(());
+
+}
+
+// AI generated
+#[test]
+fn numerator_simple_fraction() -> Result<()> {
+ let expr = "
+
+ ";
+ test("hu", "SimpleSpeak", expr, "tört, x per, x mínusz y, tört vége")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn denominator_simple_fraction() -> Result<()> {
+ let expr = "
+
+ ";
+ test("hu", "SimpleSpeak", expr, "tört, x mínusz y, per x, tört vége")?;
+ return Ok(());
+
+}
+
+
+// AI generated
+#[test]
+fn frac_with_units() -> Result<()> {
+ let expr = "
+ ";
+ test("hu", "SimpleSpeak", expr, "62 mérföld per óra")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn singular_frac_with_units() -> Result<()> {
+ let expr = "
+ ";
+ test("hu", "SimpleSpeak", expr, "1 gallon per mérföld")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn number_in_numerator_with_units() -> Result<()> {
+ let expr = "
+ ";
+ test("hu", "SimpleSpeak", expr, "3 gallon per mérföld")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn units_with_powers() -> Result<()> {
+ let expr = "
+ ";
+ test("hu", "SimpleSpeak", expr, "3 méter per másodperc a négyzeten")?;
+ return Ok(());
+
+}
+
+
+// AI generated
+#[test]
+fn mixed_number() -> Result<()> {
+ let expr = "";
+ test("hu", "SimpleSpeak", expr, "3 és 1 ketted")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn explicit_mixed_number() -> Result<()> {
+ let expr = "";
+ test("hu", "SimpleSpeak", expr, "3 és 1 nyolcad")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn mixed_number_big() -> Result<()> {
+ let expr = "";
+ test("hu", "SimpleSpeak", expr, "3 és 7 kilenc harmad")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn simple_text() -> Result<()> {
+ let expr = "";
+ test("hu", "SimpleSpeak", expr, "rise per run")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn number_and_text() -> Result<()> {
+ let expr = "";
+ test("hu", "SimpleSpeak", expr, "tört, 2 mérföld, per, 3 gallon, tört vége")?;
+ return Ok(());
+
+}
+
+
+// AI generated
+#[test]
+fn nested_simple_fractions() -> Result<()> {
+ let expr = "";
+ test("hu", "SimpleSpeak", expr, "tört, 1 ketted, per, 2 harmad, tört vége")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn binomial() -> Result<()> {
+ let expr = "";
+ test("hu", "SimpleSpeak", expr, "2 szorozva 7 a 3")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn binomial_non_simple_top() -> Result<()> {
+ let expr = "";
+ test("hu", "SimpleSpeak", expr, "2 szorozva, binomiális kezdete n plusz 7 a 3")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn binomial_non_simple_bottom() -> Result<()> {
+ let expr = "";
+ test("hu", "SimpleSpeak", expr, "2 szorozva, 7 a k plusz 3 binomiális vége")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn binomial_non_simple_top_and_bottom() -> Result<()> {
+ let expr = "";
+ 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
new file mode 100644
index 00000000..3dd63e5a
--- /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 = "";
+ test("hu", "SimpleSpeak", expr, "x a négyzeten")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn cubed() -> Result<()> {
+ let expr = "";
+ test("hu", "SimpleSpeak", expr, "x a köbön")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+ fn ordinal_power() -> Result<()> {
+ let expr = "";
+ test("hu", "SimpleSpeak", expr, "x a(z) negyedik hatványon")?;
+ return Ok(());
+
+ }
+
+// AI generated
+#[test]
+fn simple_mi_power() -> Result<()> {
+ let expr = "";
+ test("hu", "SimpleSpeak", expr, "x a(z) n-edik hatványon")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn zero_power() -> Result<()> {
+ let expr = "";
+ test("hu", "SimpleSpeak", expr, "x a(z) nulladik hatványon")?;
+ return Ok(());
+
+}
+
+
+// AI generated
+#[test]
+fn decimal_power() -> Result<()> {
+ let expr = "";
+ test("hu", "SimpleSpeak", expr, "x a(z) 20 hatványon")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn non_simple_power() -> Result<()> {
+ let expr = "";
+ test("hu", "SimpleSpeak", expr, "3 a(z) y plusz 2 hatványon")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn negative_power() -> Result<()> {
+ let expr = "";
+ test("hu", "SimpleSpeak", expr, "x a negatív 2 hatványon")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn simple_fraction_power() -> Result<()> {
+ let expr = "";
+ test("hu", "SimpleSpeak", expr, "x a(z) 1 harmad hatványon")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn nested_squared_power_with_coef() -> Result<()> {
+ let expr = "";
+ test("hu", "SimpleSpeak", expr, "3 emelve a(z) 2 x a négyzeten hatványra")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn nested_squared_power_with_neg_coef() -> Result<()> {
+ let expr = "";
+ test("hu", "SimpleSpeak", expr, "3 emelve a negatív 2 x a négyzeten hatványra")?;
+ return Ok(());
+
+}
+
+
+// AI generated
+#[test]
+fn nested_cubed_power() -> Result<()> {
+ let expr = "";
+ test("hu", "SimpleSpeak", expr, "y emelve a(z) 4 ötöd a köbön hatványra")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn nested_cubed_power_with_neg_base() -> Result<()> {
+ let expr = "";
+ test("hu", "SimpleSpeak", expr, "y a(z) negatív 4 ötöd a köbön hatványon")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn nested_number_times_squared() -> Result<()> {
+ let expr = "";
+ test("hu", "SimpleSpeak", expr, "e emelve a(z) 1 ketted x a négyzeten hatványra")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn nested_negative_number_times_squared() -> Result<()> {
+ let expr = "";
+ test("hu", "SimpleSpeak", expr, "e emelve a negatív 1 ketted, x a négyzeten hatványra")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn nested_expr_to_tenth() -> Result<()> {
+ let expr = "";
+ test("hu", "SimpleSpeak", expr, "3 emelve a következő kitevőre:, 3 a(z) tizedik hatványon, kitevő vége")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn nested_non_simple_squared_exp() -> Result<()> {
+ let expr = "";
+ 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(());
+
+}
+
+// AI generated
+#[test]
+fn nested_simple_power() -> Result<()> {
+ let expr = "";
+ 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(());
+
+}
+
+// AI generated
+#[test]
+fn nested_end_exponent_power() -> Result<()> {
+ let expr = "";
+ 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 emelve a következő kitevőre:, 4 ötöd a(z) n plusz 1 hatványon, kitevő vége")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn nested_end_exponent_neg_power() -> Result<()> {
+ let expr = "";
+ 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(());
+
+}
+
+// AI generated
+#[test]
+fn nested_complex_power() -> Result<()> {
+ let expr = "";
+ 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(());
+
+}
+
+// AI generated
+#[test]
+fn default_power() -> Result<()> {
+ let expr = "";
+ 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
new file mode 100644
index 00000000..5c529693
--- /dev/null
+++ b/tests/Languages/hu/SimpleSpeak/multiline.rs
@@ -0,0 +1,75 @@
+use crate::common::*;
+use anyhow::Result;
+
+// AI generated
+#[test]
+fn case_1() -> Result<()> {
+ let expr = "
+ ";
+ 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(());
+}
+
+// AI generated
+#[test]
+fn equation_1() -> Result<()> {
+ let expr = "
+ ";
+ 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
new file mode 100644
index 00000000..57feca75
--- /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, "a komplex számok halmaza")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn natural() -> Result<()> {
+ let expr = "";
+ test("hu", "SimpleSpeak", expr, "a természetes számok halmaza")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn rationals() -> Result<()> {
+ let expr = "";
+ test("hu", "SimpleSpeak", expr, "a racionális számok halmaza")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn reals() -> Result<()> {
+ let expr = "";
+ test("hu", "SimpleSpeak", expr, "a valós számok halmaza")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn integers() -> Result<()> {
+ let expr = "";
+ test("hu", "SimpleSpeak", expr, "az egész számok halmaza")?;
+ return Ok(());
+
+}
+
+
+
+// AI generated
+#[test]
+fn msup_complex() -> Result<()> {
+ let expr = "";
+ test("hu", "SimpleSpeak", expr, "komplex számhalmaz 2")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn msup_natural() -> Result<()> {
+ let expr = "";
+ test("hu", "SimpleSpeak", expr, "természetes számhalmaz 2")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn msup_rationals() -> Result<()> {
+ let expr = "";
+ test("hu", "SimpleSpeak", expr, "racionális számhalmaz 2")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn msup_reals() -> Result<()> {
+ let expr = "";
+ test("hu", "SimpleSpeak", expr, "valós számhalmaz 3")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn msup_integers() -> Result<()> {
+ let expr = "";
+ test("hu", "SimpleSpeak", expr, "egész számhalmaz 4")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn msup_positive_integers() -> Result<()> {
+ let expr = "";
+ test("hu", "SimpleSpeak", expr, "pozitív egész számok")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn msup_negative_integers() -> Result<()> {
+ let expr = "";
+ test("hu", "SimpleSpeak", expr, "negatív egész számok")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn msup_positive_rationals() -> Result<()> {
+ let expr = "";
+ test("hu", "SimpleSpeak", expr, "pozitív racionális számok")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn msup_negative_rationals() -> Result<()> {
+ let expr = "";
+ test("hu", "SimpleSpeak", expr, "negatív racionális számok")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn empty_set() -> Result<()> {
+ let expr = "";
+ test("hu", "SimpleSpeak", expr, "az üres halmaz")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn single_element_set() -> Result<()> {
+ let expr = "";
+ test("hu", "SimpleSpeak", expr, "a(z) 12 halmaz")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn multiple_element_set() -> Result<()> {
+ let expr = "";
+ test("hu", "SimpleSpeak", expr, "a(z) 5 vessző, 10 vessző, 15 halmaz")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn set_with_colon() -> Result<()> {
+ let expr = "";
+ test("hu", "SimpleSpeak", expr, "x melyekre teljesül, hogy minden x nagyobb, mint 2")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn set_with_bar() -> Result<()> {
+ let expr = "";
+ test("hu", "SimpleSpeak", expr, "x melyekre teljesül, hogy minden x nagyobb, mint 2")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn element_alone() -> Result<()> {
+ let expr = "";
+ test("hu", "SimpleSpeak", expr, "3 plusz 2 i, nem eleme ennek:, a valós számok halmaza")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn element_under_sum() -> Result<()> {
+ let expr = "";
+ test("hu", "SimpleSpeak", expr,
+ "ö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(());
+
+}
+
+// AI generated
+#[test]
+fn complicated_set_with_colon() -> Result<()> {
+ let expr = "";
+ 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(());
+
+}
+
+// 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 = "";
+ test("hu", "SimpleSpeak", expr,
+ "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
new file mode 100644
index 00000000..d7e238f9
--- /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 = "";
+ test_prefs("hu", "SimpleSpeak", vec![("Verbosity", "Terse")], expr, "x 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(());
+
+ }
+
+// AI generated
+#[test]
+fn msub_not_simple() -> Result<()> {
+ let expr = "";
+ test_prefs("hu", "SimpleSpeak", vec![("Verbosity", "Terse")], expr, "x alsó index 12")?;
+ return Ok(());
+
+ }
+
+// AI generated
+#[test]
+fn msubsup_not_simple() -> Result<()> {
+ let expr = "";
+ test_prefs("hu", "SimpleSpeak", vec![("Verbosity", "Terse")], expr, "x alsó index 12, a köbön")?;
+ return Ok(());
+
+ }
+
+// AI generated
+#[test]
+fn msub_simple_mi() -> Result<()> {
+ let expr = "";
+ 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(());
+
+}
+
+// AI generated
+#[test]
+fn msub_simple_number_follows() -> Result<()> {
+ let expr = "";
+ 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(());
+
+}
+
+// AI generated
+#[test]
+fn msub_simple_non_number_follows() -> Result<()> {
+ let expr = "";
+ 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(());
+
+}
+
+// AI generated
+#[test]
+fn msubsup_simple() -> Result<()> {
+ let expr = "";
+ 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
new file mode 100644
index 00000000..7fcdecbd
--- /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 nagy h vessző, fraktur nagy c")?;
+ let expr = "";
+ test("hu", "SimpleSpeak", expr, "dupla leütésű nagy h, vessző; dupla leütésű nagy pí")?;
+ let expr = "";
+ test("hu", "SimpleSpeak", expr, "script nagy i vessző, script nagy m")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn greek() -> Result<()> {
+ let expr = "";
+ test("hu", "SimpleSpeak", expr, "nagy alfa vessző, nagy omega")?;
+ let expr = "";
+ test("hu", "SimpleSpeak", expr, "alfa vessző, omega")?;
+ // MathType private space versions
+ let expr = "";
+ test("hu", "SimpleSpeak", expr, "dupla leütésű nagy delta, vessző; dupla leütésű nagy üpszilon")?;
+ let expr = "";
+ test("hu", "SimpleSpeak", expr, "alfa vessző, omega")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn cap_cyrillic() -> Result<()> {
+ let expr = "";
+ test("hu", "SimpleSpeak", expr, "nagybetű а vessző, nagybetű ya")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn parenthesized() -> Result<()> {
+ let expr = "";
+ test("hu", "SimpleSpeak", expr, "zárójeles a vessző, zárójeles z")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn circled() -> Result<()> {
+ let expr = "";
+ test("hu", "SimpleSpeak", expr, "bekarikázott nagy a, vessző, bekarikázott nagy z")?;
+ let expr = "";
+ 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, "bekarikázott a vessző, bekarikázott z")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn fraktur() -> Result<()> {
+ let expr = "";
+ test("hu", "SimpleSpeak", expr, "fraktur nagy a vessző, fraktur nagy y")?;
+ let expr = "";
+ test("hu", "SimpleSpeak", expr, "fraktur a vessző, fraktur z")?;
+ // MathType private space versions
+ let expr = "";
+ test("hu", "SimpleSpeak", expr, "fraktur nagy a vessző, fraktur nagy y")?;
+ let expr = "";
+ test("hu", "SimpleSpeak", expr, "fraktur a vessző, fraktur z")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn bold_fraktur() -> Result<()> {
+ let expr = "";
+ 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 félkövér a, vessző, fraktur félkövér z")?;
+ // MathType private space versions
+ let expr = "";
+ 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 félkövér a, vessző, fraktur félkövér z")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn double_struck() -> Result<()> {
+ let expr = "";
+ test("hu", "SimpleSpeak", expr, "dupla leütésű nagy a, vessző; dupla leütésű nagy y")?;
+ let expr = "";
+ test("hu", "SimpleSpeak", expr, "dupla leütésű a, vessző, dupla leütésű z")?;
+ let expr = "";
+ 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, "dupla leütésű nagy a, vessző; dupla leütésű nagy y")?;
+ let expr = "";
+ test("hu", "SimpleSpeak", expr, "dupla leütésű a, vessző, dupla leütésű z")?;
+ let expr = "";
+ test("hu", "SimpleSpeak", expr, "dupla leütésű 0, vessző, dupla leütésű 9")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn script() -> Result<()> {
+ let expr = "";
+ test("hu", "SimpleSpeak", expr, "script nagy a vessző, script nagy z")?;
+ let expr = "";
+ test("hu", "SimpleSpeak", expr, "script a vessző, script z")?;
+ // MathType private space versions
+ let expr = "";
+ test("hu", "SimpleSpeak", expr, "script nagy a vessző, script nagy z")?;
+ let expr = "";
+ test("hu", "SimpleSpeak", expr, "script a vessző, script z")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn bold_script() -> Result<()> {
+ let expr = "";
+ 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 félkövér a, vessző, script félkövér z")?;
+ // MathType private space versions
+ let expr = "";
+ 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 félkövér a, vessző, script félkövér z")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn bold() -> Result<()> {
+ let expr = "";
+ test("hu", "SimpleSpeak", expr, "félkövér nagy a, vessző, félkövér nagy z")?;
+ let expr = "";
+ 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, "félkövér nagy a, vessző, félkövér nagy z")?;
+ let expr = "";
+ test("hu", "SimpleSpeak", expr, "félkövér a vessző, félkövér z")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn italic() -> Result<()> {
+ let expr = "";
+ test("hu", "SimpleSpeak", expr, "nagy a vessző, nagy z")?;
+ let expr = "";
+ test("hu", "SimpleSpeak", expr, "a vessző, z")?;
+ // MathType private space versions
+ let expr = "";
+ test("hu", "SimpleSpeak", expr, "nagy a vessző, nagy z")?;
+ let expr = "";
+ test("hu", "SimpleSpeak", expr, "a vessző, z")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn sans_serif() -> Result<()> {
+ let expr = "";
+ test("hu", "SimpleSpeak", expr, "nagy a vessző, nagy z")?;
+ let expr = "";
+ test("hu", "SimpleSpeak", expr, "a vessző, z")?;
+ // MathType private space versions
+ let expr = "";
+ test("hu", "SimpleSpeak", expr, "nagy a vessző, nagy z")?;
+ let expr = "";
+ test("hu", "SimpleSpeak", expr, "a vessző, z")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn sans_serif_bold() -> Result<()> {
+ let expr = "";
+ test("hu", "SimpleSpeak", expr, "félkövér nagy a, vessző, félkövér nagy z")?;
+ let expr = "";
+ 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, "félkövér nagy a, vessző, félkövér nagy z")?;
+ let expr = "";
+ test("hu", "SimpleSpeak", expr, "félkövér a vessző, félkövér z")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn sans_serif_italic() -> Result<()> {
+ let expr = "";
+ test("hu", "SimpleSpeak", expr, "nagy a vessző, nagy z")?;
+ let expr = "";
+ test("hu", "SimpleSpeak", expr, "a vessző, z")?;
+ // MathType private space versions
+ let expr = "";
+ test("hu", "SimpleSpeak", expr, "nagy a vessző, nagy z")?;
+ let expr = "";
+ test("hu", "SimpleSpeak", expr, "a vessző, z")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn sans_serif_bold_italic() -> Result<()> {
+ let expr = "";
+ test("hu", "SimpleSpeak", expr, "félkövér nagy a, vessző, félkövér nagy z")?;
+ let expr = "";
+ 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, "félkövér nagy a, vessző, félkövér nagy z")?;
+ let expr = "";
+ test("hu", "SimpleSpeak", expr, "félkövér a vessző, félkövér z")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn monospace() -> Result<()> {
+ let expr = "";
+ test("hu", "SimpleSpeak", expr, "nagy a vessző, nagy z")?;
+ let expr = "";
+ test("hu", "SimpleSpeak", expr, "a vessző, z")?;
+ // MathType private space versions
+ let expr = "";
+ test("hu", "SimpleSpeak", expr, "nagy a vessző, nagy z")?;
+ let expr = "";
+ test("hu", "SimpleSpeak", expr, "a vessző, z")?;
+ return Ok(());
+
+}
+
+
+// AI generated
+#[test]
+fn bold_greek() -> Result<()> {
+ let expr = "";
+ test("hu", "SimpleSpeak", expr, "félkövér nagy alfa, vessző, félkövér nagy omega")?;
+ let expr = "";
+ 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, "félkövér nagy alfa, vessző, félkövér nagy omega")?;
+ let expr = "";
+ test("hu", "SimpleSpeak", expr, "félkövér alfa vessző, félkövér omega")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn bold_greek_others() -> Result<()> {
+ let expr = "";
+ 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, "félkövér parciális derivált, vessző, félkövér pí")?;
+ return Ok(());
+
+}
+
+
+// AI generated
+#[test]
+fn italic_greek() -> Result<()> {
+ let expr = "";
+ test("hu", "SimpleSpeak", expr, "nagy alfa vessző, nagy omega")?;
+ let expr = "";
+ test("hu", "SimpleSpeak", expr, "alfa vessző, omega")?;
+ // MathType private space versions
+ let expr = "";
+ test("hu", "SimpleSpeak", expr, "nagy alfa vessző, nagy omega")?;
+ let expr = "";
+ test("hu", "SimpleSpeak", expr, "alfa vessző, omega")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn italic_greek_others() -> Result<()> {
+ let expr = "";
+ test("hu", "SimpleSpeak", expr, "parciális derivált, vessző, pí")?;
+ // MathType private space versions
+ let expr = "";
+ test("hu", "SimpleSpeak", expr, "parciális derivált, vessző, pí")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn bold_italic_greek() -> Result<()> {
+ let expr = "";
+ test("hu", "SimpleSpeak", expr, "félkövér nagy alfa, vessző, félkövér nagy omega")?;
+ let expr = "";
+ 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, "félkövér nagy alfa, vessző, félkövér nagy omega")?;
+ let expr = "";
+ test("hu", "SimpleSpeak", expr, "félkövér alfa vessző, félkövér omega")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn bold_italic_greek_others() -> Result<()> {
+ let expr = "";
+ 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, "félkövér parciális derivált, vessző, félkövér pí")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn sans_serif_bold_greek() -> Result<()> {
+ let expr = "";
+ test("hu", "SimpleSpeak", expr, "félkövér nagy alfa, vessző, félkövér nagy omega")?;
+ let expr = "";
+ 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, "félkövér nagy alfa, vessző, félkövér nagy omega")?;
+ let expr = "";
+ test("hu", "SimpleSpeak", expr, "félkövér alfa vessző, félkövér omega")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn sans_serif_bold_greek_others() -> Result<()> {
+ let expr = "";
+ 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, "félkövér parciális derivált, vessző, félkövér pí")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn sans_serif_bold_italic_greek() -> Result<()> {
+ let expr = "";
+ test("hu", "SimpleSpeak", expr, "félkövér nagy alfa, vessző, félkövér nagy omega")?;
+ let expr = "";
+ 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, "félkövér nagy alfa, vessző, félkövér nagy omega")?;
+ let expr = "";
+ test("hu", "SimpleSpeak", expr, "félkövér alfa vessző, félkövér omega")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn sans_serif_bold_italic_greek_others() -> Result<()> {
+ let expr = "";
+ 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, "félkövér parciális derivált, vessző, félkövér pí")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn pua_regular() -> Result<()> {
+ let expr = "";
+ test("hu", "SimpleSpeak", expr, "nagy a vessző, nagy z")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn turned() -> Result<()> {
+ let expr = "";
+ test("hu", "SimpleSpeak", expr, "fordított nagy f, vessző; fordított talpatlan nagy y")?;
+ return Ok(());
+
+ }
+
+// AI generated
+#[test]
+fn unicode_typo_regressions() -> Result<()> {
+ test("hu", "SimpleSpeak", "", "i-edik hatványig")?;
+ test("hu", "SimpleSpeak", "", "összekapcsolás")?;
+ Ok(())
+}
+
+// AI generated
+#[test]
+fn enclosed_numbers() -> Result<()> {
+ let expr = "";
+ test("hu", "SimpleSpeak", expr, "bekarikázott 1 vessző, bekarikázott 9")?;
+ let expr = "";
+ test("hu", "SimpleSpeak", expr, "fekete bekarikázott egy, vessző; bekarikázott szám ötven")?;
+ let expr = "";
+ test("hu", "SimpleSpeak", expr, "zárójeles 1 vessző, zárójeles 9")?;
+ let expr = "";
+ test("hu", "SimpleSpeak", expr, "1 ponttal vessző, 9 ponttal")?;
+ let expr = "";
+ 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
new file mode 100644
index 00000000..42d42627
--- /dev/null
+++ b/tests/Languages/hu/chemistry.rs
@@ -0,0 +1,784 @@
+/// Tests for rules shared between various speech styles:
+/// * modified var
+use crate::common::*;
+use anyhow::Result;
+
+// AI generated
+#[test]
+fn salt() -> Result<()> {
+ let expr = "";
+ test_prefs("hu", "SimpleSpeak", vec![("Verbosity", "Terse")], expr, "nagy n a; láthatatlan elválasztó, nagy c l")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn water() -> Result<()> {
+ let expr = "";
+ 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(());
+
+}
+
+// AI generated
+#[test]
+fn carbon() -> Result<()> {
+ let expr = ""; // not enough to trigger recognition
+ test_prefs("hu", "SimpleSpeak", vec![("Verbosity", "Terse")], expr, "nagy c")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn sulfate() -> Result<()> {
+ let expr = "";
+ 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(());
+
+}
+
+// AI generated
+#[test]
+fn aluminum_sulfate() -> Result<()> {
+ let expr = "";
+ 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(());
+
+}
+
+// AI generated
+#[test]
+fn ethanol_bonds() -> Result<()> {
+ let expr = "";
+ 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(());
+
+}
+
+// AI generated
+#[test]
+fn dichlorine_hexoxide() -> Result<()> {
+ let expr = "";
+ test_prefs("hu", "SimpleSpeak", vec![("Verbosity", "Terse")],
+ 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, "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, "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(());
+
+}
+
+
+// AI generated
+#[test]
+fn ethylene_with_bond() -> Result<()> {
+ let expr = "";
+ 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(());
+
+}
+
+// AI generated
+#[test]
+fn ferric_chloride_aq() -> Result<()> {
+ let expr = "";
+ 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(());
+
+ }
+
+// AI generated
+#[test]
+fn ethylene_with_colon_bond() -> Result<()> {
+ let expr = "";
+ 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(());
+
+}
+
+// AI generated
+#[test]
+fn beta_decay() -> Result<()> {
+ let expr = "";
+ test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Terse")], expr,
+ "14, 6, nagy c; keletkezik; 14, 7, nagy n; plusz 0, negatív 1, e")?;
+ test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Medium")], expr,
+ "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,
+ "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(());
+
+}
+
+// AI generated
+#[test]
+fn mhchem_beta_decay() -> Result<()> {
+ let expr = "";
+ test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Terse")], expr,
+ "14, 6, nagy c; keletkezik; 14, 7, nagy n; plusz 0, negatív 1, e")?;
+ test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Medium")], expr,
+ "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,
+ "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(());
+
+}
+
+// AI generated
+#[test]
+fn hcl_na_yields() -> Result<()> {
+ let expr = "";
+ test_prefs("hu", "SimpleSpeak", vec![("Verbosity", "Verbose")], expr,
+ "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(());
+
+}
+
+// AI generated
+#[test]
+fn mhchem_so4_2plus() -> Result<()> {
+ let expr = "";
+ 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(());
+
+}
+
+
+// AI generated
+#[test]
+fn mhchem_hcl_aq_etc() -> Result<()> {
+ let expr = "";
+ test_prefs("hu", "SimpleSpeak", vec![("Verbosity", "Terse")],
+ 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(());
+
+}
+
+
+// AI generated
+#[test]
+fn mhchem_barbed_equilibrium() -> Result<()> {
+ let expr = "";
+ test_prefs("hu", "SimpleSpeak", vec![("Verbosity", "Terse")],
+ 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(());
+
+}
+
+
+
+// AI generated
+#[test]
+fn mhchem_roman_in_superscript() -> Result<()> {
+ let expr = "";
+ test_prefs("hu", "SimpleSpeak", vec![("Verbosity", "Terse")],
+ expr, "nagy f e, 2; láthatatlan elválasztó, nagy f e, 3; láthatatlan elválasztó, nagy o, 4")?;
+ return Ok(());
+
+}
+
+
+// AI generated
+#[test]
+fn dropped_msubsup_bug_358() -> Result<()> {
+ let expr = r#""#;
+ test_prefs("hu", "SimpleSpeak", vec![("Verbosity", "Terse")],
+ 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
new file mode 100644
index 00000000..c5c2fa3e
--- /dev/null
+++ b/tests/Languages/hu/intent.rs
@@ -0,0 +1,130 @@
+/// 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 = "";
+ test("hu", "SimpleSpeak", expr, "2 x")?;
+ test("hu", "LiteralSpeak", expr, "2 x")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn prefix_intent() -> Result<()> {
+ let expr = r#""#;
+ test("hu", "SimpleSpeak", expr, "testing x")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn postfix_intent() -> Result<()> {
+ let expr = r#""#;
+ test("hu", "SimpleSpeak", expr, "x testing")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn infix_intent() -> Result<()> {
+ let expr = r#""#;
+ 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#""#;
+ test("hu", "SimpleSpeak", expr, "x")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn infix_intent_one_arg() -> Result<()> {
+ let expr = r#""#;
+ // 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#""#;
+ test("hu", "SimpleSpeak", expr, "testing x vessző, y vessző, z vessző, 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#""#;
+ test("hu", "SimpleSpeak", expr, "x")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn function_one_arg_intent() -> Result<()> {
+ let expr = r#""#;
+ test("hu", "SimpleSpeak", expr, "testing x")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn silent_intent_mi() -> Result<()> {
+ let expr = "";
+ test("hu", "SimpleSpeak", expr, "2")?;
+ test("hu", "ClearSpeak", expr, "2")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn silent_intent_msup() -> Result<()> {
+ let expr = "";
+ 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
new file mode 100644
index 00000000..f02050e4
--- /dev/null
+++ b/tests/Languages/hu/mtable.rs
@@ -0,0 +1,1207 @@
+use crate::common::*;
+use anyhow::Result;
+
+// AI generated
+#[test]
+fn matrix_1x1() -> Result<()> {
+ let expr = "
+
+ ";
+ 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(());
+
+}
+
+// AI generated
+#[test]
+fn determinant_1x1() -> Result<()> {
+ let expr = "
+
+ ";
+ 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(());
+
+}
+
+
+// AI generated
+#[test]
+fn matrix_1x2() -> Result<()> {
+ let expr = "
+
+ ";
+ 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(());
+
+}
+
+
+// AI generated
+#[test]
+fn matrix_1x3() -> Result<()> {
+ let expr = "
+
+ ";
+ 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(());
+
+}
+
+// AI generated
+#[test]
+fn matrix_2x1_not_simple() -> Result<()> {
+ let expr = "
+
+ ";
+ 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(());
+
+}
+// AI generated
+#[test]
+fn matrix_3x1_not_simple() -> Result<()> {
+ let expr = "
+ ";
+ 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(());
+
+}
+
+// AI generated
+#[test]
+fn determinant_2x2() -> Result<()> {
+ let expr = "";
+ 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(());
+
+}
+
+// AI generated
+#[test]
+fn matrix_2x3() -> Result<()> {
+ let expr = "
+
+ ";
+ 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(());
+
+}
+
+// AI generated
+#[test]
+fn matrix_2x3_labeled() -> Result<()> {
+ let expr = "
+
+ ";
+ test("hu", "ClearSpeak", expr,
+ "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,
+ "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(());
+
+}
+
+// AI generated
+#[test]
+fn matrix_3x1() -> Result<()> {
+ let expr = "
+
+ ";
+ 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(());
+
+}
+
+// AI generated
+#[test]
+fn matrix_4x1() -> Result<()> {
+ let expr = "
+
+ ";
+ 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(());
+
+}
+
+// AI generated
+#[test]
+fn matrix_4x1_labeled() -> Result<()> {
+ let expr = "
+
+ ";
+ test("hu", "ClearSpeak", expr,
+ "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,
+ "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(());
+
+}
+
+// AI generated
+#[test]
+fn matrix_1x4() -> Result<()> {
+ let expr = "
+
+ ";
+ 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(());
+
+}
+
+// AI generated
+#[test]
+fn matrix_4x4() -> Result<()> {
+ let expr = "
+
+ ";
+ 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(());
+}
+
+// AI generated
+#[test]
+fn matrix_4x2() -> Result<()> {
+ let expr = "
+
+ ";
+ 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(());
+}
+
+// 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 = "";
+ 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, "x abszolút értéke, vége az abszolút értéknek")?;
+ return Ok(());
+}
+
+// AI generated
+#[test]
+fn absolute_value_plus_1() -> Result<()> {
+let expr = "";
+ test("hu", "ClearSpeak", expr, "x plusz 1 abszolút értéke")?;
+ test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Terse"), ("ClearSpeak_AbsoluteValue", "AbsEnd")],
+ expr, "x plusz 1 abszolút értéke, vége az abszolút értéknek")?;
+ return Ok(());
+}
+
+// AI generated
+#[test]
+fn simple_cardinality_value() -> Result<()> {
+ let expr = "";
+ test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_AbsoluteValue", "Cardinality")], expr,
+ "nagy s számossága")?;
+ return Ok(());
+}
+
+// Test preferences
+// AI generated
+#[test]
+fn simple_matrix_speak_col_num() -> Result<()> {
+let expr = "";
+ test_ClearSpeak("hu", "ClearSpeak_Matrix", "SpeakColNum",
+ 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(());
+}
+
+// AI generated
+#[test]
+fn col_matrix_3x1_speak_col_num() -> Result<()> {
+let expr = "";
+test_ClearSpeak("hu", "ClearSpeak_Matrix", "SpeakColNum",
+ expr, "a(z) 3 x 1-es oszlop mátrix; 1 . sor; 1; 2 . sor; 2; 3 . sor; 3")?;
+ return Ok(());
+}
+
+// AI generated
+#[test]
+fn row_matrix_1x2_speak_col_num() -> Result<()> {
+let expr = "";
+test_ClearSpeak("hu", "ClearSpeak_Matrix", "SpeakColNum",
+ expr, "az 1-szer 2 -es sor mátrix; oszlop 1; 1, oszlop 2; 2")?;
+ return Ok(());
+}
+
+// AI generated
+#[test]
+fn matrix_2x2_speak_col_num() -> Result<()> {
+let expr = "";
+test_ClearSpeak("hu", "ClearSpeak_Matrix", "SpeakColNum",
+ 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(());
+}
+
+
+// AI generated
+#[test]
+fn simple_matrix_silent_col_num() -> Result<()> {
+let expr = "";
+ test_ClearSpeak("hu", "ClearSpeak_Matrix", "SilentColNum",
+ expr, "a(z) 2 x 2 mátrix; 1 . sor; 2, 1; 2 . sor; 7, 5")?;
+ return Ok(());
+}
+
+// AI generated
+#[test]
+fn col_matrix_3x1_silent_col_num() -> Result<()> {
+let expr = "";
+test_ClearSpeak("hu", "ClearSpeak_Matrix", "SilentColNum",
+ expr, "a(z) 3 x 1-es oszlop mátrix; 1; 2; 3")?;
+ return Ok(());
+}
+
+// AI generated
+#[test]
+fn row_matrix_1x2_silent_col_num() -> Result<()> {
+let expr = "";
+test_ClearSpeak("hu", "ClearSpeak_Matrix", "SilentColNum",
+ expr, "az 1-szer 2 -es sor mátrix; 1, 2")?;
+ return Ok(());
+}
+
+// AI generated
+#[test]
+fn matrix_2x2_silent_col_num() -> Result<()> {
+let expr = "";
+test_ClearSpeak("hu", "ClearSpeak_Matrix", "SilentColNum",
+ 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(());
+ }
+
+
+// AI generated
+#[test]
+fn simple_matrix_end_matrix() -> Result<()> {
+let expr = "";
+ test_ClearSpeak("hu", "ClearSpeak_Matrix", "EndMatrix",
+ expr, "a(z) 2 x 2 mátrix; 1 . sor; 2, 1; 2 . sor; 7, 5; vége a mátrixnak")?;
+ return Ok(());
+ }
+
+// AI generated
+#[test]
+fn col_matrix_3x1_end_matrix() -> Result<()> {
+let expr = "";
+test_ClearSpeak("hu", "ClearSpeak_Matrix", "EndMatrix",
+ expr, "a(z) 3 x 1-es oszlop mátrix; 1; 2; 3; vége a mátrixnak")?;
+ return Ok(());
+ }
+
+// AI generated
+#[test]
+fn row_matrix_1x2_end_matrix() -> Result<()> {
+let expr = "";
+test_ClearSpeak("hu", "ClearSpeak_Matrix", "EndMatrix",
+ expr, "az 1-szer 2 -es sor mátrix; 1, 2; vége a mátrixnak")?;
+ return Ok(());
+ }
+
+// AI generated
+#[test]
+fn matrix_2x2_end_matrix() -> Result<()> {
+let expr = "";
+test_ClearSpeak("hu", "ClearSpeak_Matrix", "EndMatrix",
+ 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(());
+ }
+
+
+// AI generated
+#[test]
+fn simple_matrix_vector() -> Result<()> {
+let expr = "";
+ test_ClearSpeak("hu", "ClearSpeak_Matrix", "Vector",
+ expr, "a(z) 2 x 2 mátrix; 1 . sor; 2, 1; 2 . sor; 7, 5")?;
+ return Ok(());
+ }
+
+// AI generated
+#[test]
+fn col_matrix_3x1_vector() -> Result<()> {
+let expr = "";
+test_ClearSpeak("hu", "ClearSpeak_Matrix", "Vector",
+ expr, "a(z) 3 x 1-es oszlop vektor; 1; 2; 3")?;
+ return Ok(());
+ }
+
+// AI generated
+#[test]
+fn row_matrix_1x2_vector() -> Result<()> {
+let expr = "";
+test_ClearSpeak("hu", "ClearSpeak_Matrix", "Vector",
+ expr, "az 1-szer 2 -es sor vektor; 1, 2")?;
+ return Ok(());
+ }
+
+// AI generated
+#[test]
+fn matrix_2x2_vector() -> Result<()> {
+let expr = "";
+test_ClearSpeak("hu", "ClearSpeak_Matrix", "Vector",
+ 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(());
+ }
+
+
+// AI generated
+#[test]
+fn simple_matrix_end_vector() -> Result<()> {
+let expr = "";
+ test_ClearSpeak("hu", "ClearSpeak_Matrix", "EndVector",
+ expr, "a(z) 2 x 2 mátrix; 1 . sor; 2, 1; 2 . sor; 7, 5; vége a mátrixnak")?;
+ return Ok(());
+ }
+
+// AI generated
+#[test]
+fn col_matrix_3x1_end_vector() -> Result<()> {
+let expr = "";
+test_ClearSpeak("hu", "ClearSpeak_Matrix", "EndVector",
+ expr, "a(z) 3 x 1-es oszlop vektor; 1; 2; 3; vége a vektornak")?;
+ return Ok(());
+ }
+
+// AI generated
+#[test]
+fn row_matrix_1x2_end_vector() -> Result<()> {
+let expr = "";
+test_ClearSpeak("hu", "ClearSpeak_Matrix", "EndVector",
+ expr, "az 1-szer 2 -es sor vektor; 1, 2; vége a vektornak")?;
+ return Ok(());
+ }
+
+// AI generated
+#[test]
+fn matrix_2x2_end_vector() -> Result<()> {
+let expr = "";
+test_ClearSpeak("hu", "ClearSpeak_Matrix", "EndVector",
+ 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(());
+ }
+
+
+
+// AI generated
+#[test]
+fn matrix_binomial() -> Result<()> {
+ let expr = "";
+ test_ClearSpeak("hu", "ClearSpeak_Matrix", "Combinatorics", expr, "3 alatt a 2")?;
+ return Ok(());
+ }
+
+// AI generated
+#[test]
+fn matrix_times() -> Result<()> {
+ let expr = "";
+ test("hu", "SimpleSpeak", expr,
+ "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(());
+ }
+
+// AI generated
+#[test]
+fn unknown_mtable_property() -> Result<()> {
+ let expr = "";
+ test("hu", "ClearSpeak", expr,
+ "2 sor; 1 . sor; a egyenlő, b plusz c mínusz d; 2 . sor; plusz e mínusz f")?;
+ return Ok(());
+ }
+
+
+// AI generated
+#[test]
+fn zero_matrix() -> Result<()> {
+ let expr = "";
+ test("hu", "SimpleSpeak", expr,
+ "a(z) 2 x 2 zérusmátrix")?;
+ return Ok(());
+ }
+
+// AI generated
+#[test]
+fn identity_matrix() -> Result<()> {
+ let expr = "";
+ test("hu", "SimpleSpeak", expr,
+ "a(z) 3 x 3 egységmátrix")?;
+ return Ok(());
+ }
+
+// AI generated
+#[test]
+fn identity_matrix_false_positive_negative_one() -> Result<()> {
+ let expr = "";
+ test_prefs("hu", "SimpleSpeak", vec![("Verbosity", "Terse")],
+ expr, "a(z) 2 x 2 diagonális mátrix; oszlop 1; 1; oszlop 2; negatív 1")?;
+ Ok(())
+}
+
+// AI generated
+#[test]
+fn identity_matrix_false_positive_zero_diagonal() -> Result<()> {
+ let expr = "";
+ test_prefs("hu", "SimpleSpeak", vec![("Verbosity", "Terse")],
+ expr, "a(z) 2 x 2 diagonális mátrix; oszlop 1; 1")?;
+ Ok(())
+}
+
+// AI generated
+#[test]
+fn diagonal_matrix() -> Result<()> {
+ let expr = "";
+ test_prefs("hu", "SimpleSpeak", vec![("Verbosity", "Terse")],
+ 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(());
+ }
+
+// AI generated
+#[test]
+fn single_line_with_label() -> Result<()> {
+ let expr = r#""#;
+ test_prefs("hu", "ClearSpeak", vec![("Verbosity", "Terse")],
+ expr, "1 sor, címkével: 2; b egyenlő 2")?;
+ test_prefs("hu", "SimpleSpeak", vec![("Verbosity", "Terse")],
+ 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
new file mode 100644
index 00000000..1d47de7f
--- /dev/null
+++ b/tests/Languages/hu/shared.rs
@@ -0,0 +1,598 @@
+/// 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 = "";
+ test("hu", "SimpleSpeak", expr,
+ "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(());
+
+}
+
+// AI generated
+#[test]
+fn limit() -> Result<()> {
+ let expr = "";
+ 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,
+ "határérték x megközelítések 0; szinusz x, per x")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn limit_from_below() -> Result<()> {
+ let expr = "";
+ test("hu", "SimpleSpeak", expr, "határérték x alulról közelít 0; szinusz x")?;
+ return Ok(());
+
+}
+
+
+// AI generated
+#[test]
+fn binomial_mmultiscripts() -> Result<()> {
+ let expr = "";
+ test("hu", "SimpleSpeak", expr, "n a m")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn binomial_mmultiscripts_other() -> Result<()> {
+ let expr = "";
+ test("hu", "SimpleSpeak", expr, "n a m")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn binomial_subscript() -> Result<()> { // C_{n,k}
+ let expr = "";
+ test("hu", "SimpleSpeak", expr, "n a m")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn permutation_mmultiscripts() -> Result<()> {
+ let expr = "";
+ test("hu", "SimpleSpeak", expr, "k permutációja n")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn permutation_mmultiscripts_sup() -> Result<()> {
+ let expr = "";
+ test("hu", "SimpleSpeak", expr, "k permutációja n")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn permutation_msubsup() -> Result<()> {
+ let expr = "";
+ test("hu", "SimpleSpeak", expr, "k permutációja n")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn tensor_mmultiscripts() -> Result<()> {
+ let expr = "";
+ test_prefs("hu", "SimpleSpeak", vec![("Verbosity", "Verbose")], expr,
+ "nagy r posskriptek 4, subscript i superscript j subscript k subscript l")?;
+ test_prefs("hu", "SimpleSpeak", vec![("Verbosity", "Medium")], expr,
+ "nagy r posskriptek 4, sub i super j sub k sub l")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn huge_num_mmultiscripts() -> Result<()> {
+ let expr = "";
+ test_prefs("hu", "SimpleSpeak", vec![("Verbosity", "Verbose")], expr,
+ "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(());
+
+}
+
+// AI generated
+#[test]
+fn prime() -> Result<()> {
+ let expr = "";
+ test("hu", "SimpleSpeak", expr, "x prím")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn given() -> Result<()> {
+ let expr = "";
+ 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(());
+
+}
+
+// AI generated
+#[test]
+fn simple_msubsup() -> Result<()> {
+ let expr = "";
+ test("hu", "ClearSpeak", expr, "x alsó index k, a(z) i-edik hatványon")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn non_simple_msubsup() -> Result<()> {
+ let expr = "";
+ 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 alsó index j mínusz 2, a(z) k-edik hatványon")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn presentation_mathml_in_semantics() -> Result<()> {
+ let expr = "";
+ test("hu", "ClearSpeak", expr, "x alsó index k, a(z) i-edik hatványon")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn ignore_period() -> Result<()> {
+ // from https://hu.wikipedia.org/wiki/Probability
+ let expr = "";
+ 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(());
+
+}
+
+// AI generated
+#[test]
+fn ignore_mtext_period() -> Result<()> {
+ let expr = "";
+ test("hu", "SimpleSpeak", expr, "a(z) 2 halmaz")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn ignore_comma() -> Result<()> {
+ // from https://hu.wikipedia.org/wiki/Probability
+ let expr = "";
+ 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(());
+
+}
+
+// AI generated
+#[test]
+#[ignore] // issue #14
+fn ignore_period_and_space() -> Result<()> {
+ // from https://hu.wikipedia.org/wiki/Probability
+ let expr = "";
+ 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 = "";
+ 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(());
+
+}
+
+// AI generated
+#[test]
+fn caret_and_hat() -> Result<()> {
+ let expr = "";
+ test("hu", "SimpleSpeak",expr, "x fölfelényíl 2, plusz y kalap")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn mn_with_space() -> Result<()> {
+ let expr = "";
+ test_prefs("hu", "SimpleSpeak", vec![("DecimalSeparators", "."), ("BlockSeparators", " ,")], expr, "1234567")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn ignore_bold() -> Result<()> {
+ let expr = r#""#;
+ test_prefs("hu", "SimpleSpeak", vec![("IgnoreBold", "false")],
+ 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 egyenlő, 2 szinusz t, mínusz 1")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn mn_with_block_and_decimal_separators() -> Result<()> {
+ let expr = ""; // 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 = ""; // may want to change this for another language
+ 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(());
+
+}
+
+// AI generated
+#[test]
+fn curl() -> Result<()> {
+ let expr = "";
+ // may want to change this for another language
+ 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(());
+
+}
+
+// AI generated
+#[test]
+fn gradient() -> Result<()> {
+ let expr = "";
+ // may want to change this for another language
+ test_prefs("hu", "SimpleSpeak", vec![("Verbosity", "Terse")], expr, "gradiens nagy f")?;
+ test_prefs("hu", "SimpleSpeak", vec![("Verbosity", "Verbose")], expr, "gradiens nagy f")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn literal_speak_perpendicular() -> Result<()> {
+ let expr = r#""#;
+ test("hu", "LiteralSpeak", expr, "nagy a jobbra nyíl, perpendicular to, nagy b jobbra nyíl")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn literal_speak_chars() -> Result<()> {
+ let expr = r#""#;
+ 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(());
+
+}
+
+// AI generated
+#[test]
+fn literal_speak_with_name() -> Result<()> {
+ let expr = r#""#;
+ test("hu", "LiteralSpeak", expr, "forced f, bal zárójel, x felkiáltójel, jobb zárójel")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn literal_speak_with_property() -> Result<()> {
+ let expr = r#""#;
+ test("hu", "LiteralSpeak", expr, "f, bal zárójel, x felkiáltójel, jobb zárójel")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn literal_intent_property() -> Result<()> {
+ let expr = r#""#;
+ test("hu", "SimpleSpeak", expr, "nagy a jobbra nyíl, perpendicular to, nagy b jobbra nyíl")?;
+ return Ok(());
+
+}
+
+// AI generated
+#[test]
+fn literal_intent_property_with_name() -> Result<()> {
+ let expr = r#""#;
+ 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
new file mode 100644
index 00000000..e3df22cd
--- /dev/null
+++ b/tests/Languages/hu/units.rs
@@ -0,0 +1,398 @@
+/// 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#""#;
+ test("hu", "SimpleSpeak", expr,
+ "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(());
+
+}
+
+// AI generated
+#[test]
+fn si_base() -> Result<()> {
+ let expr = r#""#;
+ test("hu", "SimpleSpeak", expr,
+ "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(());
+
+}
+
+// AI generated
+#[test]
+fn si_base_with_prefixes() -> Result<()> {
+ let expr = r#""#;
+ test("hu", "SimpleSpeak", expr,
+ "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(());
+
+}
+
+
+// AI generated
+#[test]
+fn si_derived_1() -> Result<()> {
+ let expr = r#""#;
+ test("hu", "SimpleSpeak", expr,
+ "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(());
+
+}
+
+// AI generated
+#[test]
+fn si_derived_1_with_prefixes() -> Result<()> {
+ let expr = r#""#;
+ test("hu", "SimpleSpeak", expr,
+ "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(());
+
+}
+
+// AI generated
+#[test]
+fn si_derived_2() -> Result<()> {
+ let expr = r#""#;
+ test("hu", "SimpleSpeak", expr,
+ "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(());
+
+}
+
+// AI generated
+#[test]
+fn si_derived_2_with_prefixes() -> Result<()> {
+ let expr = r#""#;
+ test("hu", "SimpleSpeak", expr,
+ "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(());
+
+}
+
+
+// AI generated
+#[test]
+fn si_accepted() -> Result<()> {
+ let expr = r#""#;
+ test("hu", "SimpleSpeak", expr,
+ "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(());
+
+}
+
+// AI generated
+#[test]
+fn si_accepted_with_prefixes() -> Result<()> {
+ let expr = r#""#;
+ test("hu", "SimpleSpeak", expr,
+ "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(());
+
+}
+
+// AI generated
+#[test]
+fn without_prefix_time() -> Result<()> {
+ let expr = r#""#;
+ test("hu", "SimpleSpeak", expr,
+ "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(());
+
+}
+
+// AI generated
+#[test]
+fn without_prefix_angles() -> Result<()> {
+ let expr = r#""#;
+ test("hu", "SimpleSpeak", expr,
+ "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(());
+
+}
+
+// AI generated
+#[test]
+fn without_prefix_distance() -> Result<()> {
+ let expr = r#""#;
+ test("hu", "SimpleSpeak", expr,
+ "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(());
+
+}
+
+// AI generated
+#[test]
+fn without_prefix_other() -> Result<()> {
+ let expr = r#""#;
+ test("hu", "SimpleSpeak", expr,
+ "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(());
+
+}
+
+// AI generated
+#[test]
+fn without_prefix_powers_of_2() -> Result<()> {
+ let expr = r#""#;
+ test("hu", "SimpleSpeak", expr,
+ "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(());
+
+}
+
+
+// AI generated
+#[test]
+fn si_other_numbers() -> Result<()> {
+ let expr = r#""#;
+ test_prefs("hu", "SimpleSpeak", vec![("Verbosity", "Terse")], expr,
+ "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 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 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(());
+
+}
+
+
+// AI generated
+#[test]
+fn test_mtext_inference() -> Result<()> {
+ let expr = r#""#;
+ test("hu", "SimpleSpeak", expr,
+ "nyitott zárójel; 1 metrikus tonna, vessző; 2 peta-amper, vessző; 3 pascal, vessző; 45 milli-tesla; zárójel")?;
+ return Ok(());
+
+}
+
+ #[test]
+ fn infer_unit() -> Result<()> {
+ let expr = r#""#;
+ test("hu", "SimpleSpeak", expr,
+ "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(());
+
+ }
diff --git a/tests/languages.rs b/tests/languages.rs
index 4952d935..ef3dc544 100644
--- a/tests/languages.rs
+++ b/tests/languages.rs
@@ -6,7 +6,8 @@ mod Languages {
mod intent;
mod zh;
mod en;
- mod ru;
+ mod hu;
+ mod ru;
mod fi;
mod sv;
mod nb;