diff --git a/Rules/Languages/el/ClearSpeak_Rules.yaml b/Rules/Languages/el/ClearSpeak_Rules.yaml index 7933d3b4e..49f027df0 100644 --- a/Rules/Languages/el/ClearSpeak_Rules.yaml +++ b/Rules/Languages/el/ClearSpeak_Rules.yaml @@ -1,4 +1,5 @@ --- + - name: pause tag: "!*" match: "not(self::m:math) and not($MatchingPause) and @data-intent-property[contains(., ':pause')]" @@ -34,20 +35,25 @@ replace: - test: if: "$Verbosity!='Terse'" - then: {t: "η"} # phrase('the' square root of 25) + then: + - test: + if: "preceding-sibling::*[1][self::m:mo and (.='=' or .='<' or .='>' or .='≤' or .='≥' or .='≰' or .='≱' or .='≮' or .='≯' or .='≝' or .='≡' or .='≃' or .='≄' or .='≅' or .='≆' or .='≇' or .='≈' or .='≉' or .='≊' or .='≢' or .='≨' or .='≩' or .='≞' or .='≪' or .='≫' or .='⫹' or .='⫺' or .='≼' or .='≽' or .='⋠' or .='⋡')]" + then: [t: "την"] #theodora. added rule for reading greek accusative after an operator "ισούται με" + else: [t: "η"] +# then: [t: "η"] # phrase('the' square root of 25) #theodora. not sure articles should be kept in greek. The current rules don't allow for creating cases for accusative, nominative etc. so it is easier to remove for now - test: - if: $ClearSpeak_Roots = 'PosNegSqRoot' or $ClearSpeak_Roots = 'PosNegSqRootEnd' + if: "$ClearSpeak_Roots = 'PosNegSqRoot' or $ClearSpeak_Roots = 'PosNegSqRootEnd'" then: - bookmark: "*[1]/@id" - test: - if: parent::*[self::m:negative] - then: [{t: "μείον"}] # phrase(minus 4 is a 'negative' number) - else: [{t: "σύν"}] # phrase(10 is a 'positive' number) + if: "parent::*[self::m:minus and count(*)=1]" + then: [t: "μείον"] # phrase(minus 4 is a 'negative' number) #check. positive and negative doesnt work well in all contexts, minus and plus were used for greek + else: [t: "συν"] # phrase(10 is a 'positive' number) - t: "τετραγωνική ρίζα" # phrase(8 is the 'square root' of 64) - test: if: "$Verbosity!='Terse'" - then: {t: "του"} # phrase(the square root 'of' 5) - else: {pause: short} + then: [t: "του"] # phrase(the square root 'of' 5) + else: [pause: short] - x: "*[1]" - test: - if: "$ClearSpeak_Roots = 'RootEnd' or $ClearSpeak_Roots = 'PosNegSqRootEnd'" @@ -56,74 +62,79 @@ - t: "τέλος ρίζας" # phrase(the square root of x 'end root') - pause: medium - else_if: "IsNode(*[1], 'simple')" - then: [{pause: short}] - else: [{pause: long}] + then: [pause: short] + else: [pause: long] - name: default tag: root match: "." replace: - test: - if: "$Verbosity!='Terse'" - then: {t: "η"} # phrase(6 is 'the' square root of 36) + - if: "$Verbosity!='Terse'" + then: + - test: + if: "preceding-sibling::*[1][self::m:mo and (.='=' or .='<' or .='>' or .='≤' or .='≥' or .='≰' or .='≱' or .='≮' or .='≯' or .='≝' or .='≡' or .='≃' or .='≄' or .='≅' or .='≆' or .='≇' or .='≈' or .='≉' or .='≊' or .='≢' or .='≨' or .='≩' or .='≞' or .='≪' or .='≫' or .='⫹' or .='⫺' or .='≼' or .='≽' or .='⋠' or .='⋡')]" + then: [t: "την"] #theodora. added rule for reading greek accusative after an operator "ισούται με" + else: [t: "η"] +# then: [t: "η"] - test: - if: $ClearSpeak_Roots = 'PosNegSqRoot' or $ClearSpeak_Roots = 'PosNegSqRootEnd' + if: "$ClearSpeak_Roots = 'PosNegSqRoot' or $ClearSpeak_Roots = 'PosNegSqRootEnd'" then: - test: - if: "parent::m:negative or parent::m:positive" - then: [{bookmark: "parent/@id"}] + if: "parent::*[(self::m:minus or self::m:plus) and count(*)=1]" + then: [bookmark: "parent/@id"] - test: - if: parent::m:negative - then: [{t: "μείον"}] # phrase(minus 6 is a 'negative' number) - else: [{t: "σύν"}] # phrase(10 is a 'positive' number) + if: "parent::m:minus" + then: [t: "μείον"] # phrase(minus 6 is a 'negative' number) + else: [t: "συν"] # phrase(10 is a 'positive' number) - test: - if: "*[2][self::m:mn]" + if: "*[2][self::m:mn and not(contains(., '.'))]" then_test: - - if: "*[2][text()='2']" - then: {t: "τετραγωνική ρίζα"} # phrase(5 is the 'square root' of 25) - - else_if: "*[2][text()='3']" - then: {t: "κυβική ρίζα"} # phrase(5 is the 'cube root' of 625) - - else_if: "*[2][not(contains(., '.'))]" - then: [{x: "ToOrdinal(*[2])"}, {t: "ρίζα"}] # phrase(the square 'root' of 25) + - if: "*[2][.='2']" + then: [t: "τετραγωνική ρίζα"] # phrase(5 is the 'square root' of 25) + - else_if: "*[2][.='3']" + then: [t: "κυβική ρίζα"] # phrase(5 is the 'cube root' of 625) + # - else_if: "*[2][not(contains(., '.'))]" + - else: [x: "ToOrdinal(*[2])", t: "ρίζα"] # phrase(the square 'root' of 25) else: - test: if: "*[2][self::m:mi][string-length(.)=1]" then: - x: "*[2]" - - pronounce: [{text: "οστή"}] - else: {x: "*[2]"} + - pronounce: [text: " οστή"] #check + else: [x: "*[2]"] - t: "ρίζα" # phrase(the square 'root' of 36) - test: if: "$Verbosity!='Terse'" - then: {t: "του"} # phrase(the square root 'of' 36) + then: [t: "του"] # phrase(the square root 'of' 36) - x: "*[1]" - test: - if: $ClearSpeak_Roots = 'RootEnd' or $ClearSpeak_Roots = 'PosNegSqRootEnd' + if: "$ClearSpeak_Roots = 'RootEnd' or $ClearSpeak_Roots = 'PosNegSqRootEnd'" then: - pause: short - t: "τέλος ρίζας" # phrase(start the fifth root of x 'end root') - pause: medium else_test: - if: IsNode(*[1], 'simple') - then: [{pause: short}] - else: [{pause: long}] + 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: [negative, positive] - match: "." + 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: ""} + then: [t: ""] else: - bookmark: "@id" - test: - if: "self::m:negative" - then: [{t: "μείον"}] # phrase(minus 5 is a 'negative' number) - else: [{t: "σύν"}] # phrase(7 is a 'positive' number) + if: "self::m:minus" + then: [t: "μείον"] # phrase(minus 5 is a 'negative' number) + else: [t: "συν"] # phrase(7 is a 'positive' number) - x: "*[1]" #theodora. "negative" and "positive" were translated as "minus" and "plus" because @@ -138,7 +149,12 @@ # Units (e.g., meters per second) - name: per-fraction tag: fraction - match: "$ClearSpeak_Fractions='Per'" + 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: "ανά" # phrase('5 meters 'per' second) @@ -148,18 +164,13 @@ tag: fraction match: - "($ClearSpeak_Fractions='Auto' or $ClearSpeak_Fractions='Ordinal' or $ClearSpeak_Fractions='EndFrac') and" - - "*[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))]" - replace: [{x: ToCommonFraction(.)}] - -- name: common-fraction-mixed-number - tag: fraction - match: - - "preceding-sibling::*[1][self::m:mo][text()='⁤'] and" # preceding element is invisible plus - - "($ClearSpeak_Fractions='Auto' or $ClearSpeak_Fractions='Ordinal' or $ClearSpeak_Fractions='EndFrac') and" - - "*[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))]" - replace: [{x: ToCommonFraction(.)}] + - "*[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 @@ -173,7 +184,7 @@ then: - test: if: "$Verbosity!='Terse'" - then: [{ot: "το"}] + then: [ot: "το"] - t: "κλάσμα" # phrase(the 'fraction' with 3 over 4) - x: "*[1]" - t: "προς" # phrase(the fraction 3 'over' 4) @@ -195,12 +206,12 @@ - " ((*[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][text()='⁢'] and " # invisible times + - " *[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][text()='⁢'] and " # invisible times + - " *[2][self::m:mo][.='⁢'] and " # invisible times - " *[3][self::m:mi or self::m:mtext][string-length(.)>1] ]) )" - ")" replace: @@ -221,8 +232,8 @@ - ot: "το" # phrase(5 is 'the' square toot of 25) - t: "κλάσμα με αριθμητή" # phrase(the 'fraction with numerator' 6) - test: - if: not(IsNode(*[1], 'simple')) - then: {pause: medium} + if: "not(IsNode(*[1], 'simple'))" + then: [pause: medium] - x: "*[1]" - pause: medium - t: "και παρονομαστή" # phrase(the fraction with numerator 5 'and denominator' 8) @@ -243,38 +254,42 @@ match: "." replace: - test: - if: $ClearSpeak_Trig = 'TrigInverse' - then: [{x: "*[1]"}, {bookmark: "*[2]/@id"}, {t: "αντίστροφο"}] # phrase(8 over 5 is the 'inverse' of 5 over 8) + if: "$ClearSpeak_Trig = 'TrigInverse'" + then: [bookmark: "*[2]/@id", t: "αντίστροφη", x: "*[1]"] # phrase(8 over 5 is the 'inverse' of 5 over 8) else_test: - if: $ClearSpeak_Trig = 'ArcTrig' - then: [{bookmark: "*[2]/@id"}, {t: "τόξο"}, {x: "*[1]"}] # phrase(the 'arc' of a circle) - else: [{bookmark: "*[2]/@id"}, {t: "αντίστροφη"}, {x: "*[1]"}] # default/Auto # phrase(8 over 5 is the 'inverse' of 5 over 8) + if: "$ClearSpeak_Trig = 'ArcTrig'" + then: [bookmark: "*[2]/@id", t: "τόξο", x: "*[1]"] # phrase(the 'arc' of a circle) + else: [bookmark: "*[2]/@id", t: "αντίστροφη", x: "*[1]"] # default/Auto # phrase(8 over 5 is the 'inverse' of 5 over 8) - name: function-squared-or-cubed tag: power match: - - "*[2][self::m:mn][text()='2' or text()='3'] and" - - "following-sibling::*[1][self::m:mo][text()='⁡']" #invisible function apply + - "*[2][self::m:mn][.='2' or .='3'] and" + - "following-sibling::*[1][self::m:mo][.='⁡']" #invisible function apply replace: - x: "*[1]" - bookmark: "*[2]/@id" - test: - if: "*[2][text()='2']" - then: {t: "στο τετράγωνο"} # phrase(25 equals 5 'squared') - else: {t: "στον κύβο"} # phrase(625 equals 5 'cubed') + if: "*[2][.='2']" + then: [t: "στο τετράγωνο"] # phrase(25 equals 5 'squared') + else: [t: "στον κύβο"] # phrase(625 equals 5 'cubed') - name: function-power tag: power match: - - "following-sibling::*[1][self::m:mo][text()='⁡']" #invisible function apply + - "following-sibling::*[1][self::m:mo][.='⁡']" #invisible function apply replace: - test: if: "$Verbosity!='Terse'" - then: {t: "η"} # phrase('the' third power of 2) + then: [t: "η"] # phrase('the' third power of 2) #theodora. not sure articles should be kept in greek. The current rules don't allow for creating cases for accusative, nominative etc. so it is easier to remove for now - bookmark: "*[2]/@id" - test: - if: "*[2][self::m:mn][not(contains(., '.'))]" - then: [{x: "ToOrdinal(*[2])"}] - else: [{x: "*[2]"}] + if: "*[2][.='∞']" + then: [t: "απειροστή"] + + else_test: + - if: "*[2][self::m:mn][not(contains(., '.'))]" + then: [x: "ToOrdinal(*[2])"] + else: [x: "*[2]"] - t: "δύναμη του" # phrase(the third 'power of' 6) - pause: short - x: "*[1]" @@ -303,7 +318,7 @@ - name: squared tag: power - match: "*[2][self::m:mn][text()='2'] and $ClearSpeak_Exponents = 'Auto'" + match: "*[2][self::m:mn][.='2'] and $ClearSpeak_Exponents = 'Auto'" replace: - x: "*[1]" - bookmark: "*[2]/@id" @@ -311,7 +326,7 @@ - name: cubed tag: power - match: "*[2][self::m:mn][text()='3'] and $ClearSpeak_Exponents = 'Auto'" + match: "*[2][self::m:mn][.='3'] and $ClearSpeak_Exponents = 'Auto'" replace: - x: "*[1]" - bookmark: "*[2]/@id" @@ -322,40 +337,40 @@ match: "*[2][self::m:mn][not(contains(., '.'))]" replace: - x: "*[1]" - - t: "στη" # phrase(2 raised 'to the' power 7) + - t: "στην" # phrase(2 raised 'to the' power 7) - test: if: "*[2][.>0]" - then: {x: "ToOrdinal(*[2])"} - else: {x: "*[2]"} + then: [x: "ToOrdinal(*[2])"] + else: [x: "*[2]"] - test: if: "$ClearSpeak_Exponents != 'Ordinal'" - then: [{t: "δύναμη"}] # phrase(2 raised to the 'power' 7) + then: [t: "δύναμη"] # phrase(2 raised to the 'power' 7) - name: simple-negative-integer tag: power match: - - "*[2][self::m:negative and" + - "*[2][self::m:minus and count(*)=1 and " - " *[1][self::m:mn][not(contains(., '.'))]" - " ]" replace: - x: "*[1]" - - t: "στη" # phrase(2 raised 'to the' power 7) + - t: "στην" # phrase(2 raised 'to the' power 7) - x: "*[2]" - test: if: "$ClearSpeak_Exponents != 'Ordinal'" - then: [{t: "δύναμη"}] # phrase(2 raised to the 'power' 7) + then: [t: "δύναμη"] # phrase(2 raised to the 'power' 7) - name: simple-var tag: power match: "*[2][self::m:mi][string-length(.)=1]" replace: - x: "*[1]" - - t: "στη" # phrase(3 raised 'to the' power 7) + - t: "στην" # phrase(3 raised 'to the' power 7) - x: "*[2]" - - pronounce: [{text: "οστή"}] #theodora. i removed {ipa: "θ"}, {sapi5: "th"}, {eloquence: "T"} . why was it needed/included? + - pronounce: [text: " οστή"] #theodora. i removed {ipa: "θ"}, {sapi5: "th"}, {eloquence: "T"} . check - test: if: "$ClearSpeak_Exponents != 'Ordinal'" - then: [{t: "δύναμη"}] # phrase(2 raised to the 'power' 7) + then: [t: "δύναμη"] # phrase(2 raised to the 'power' 7) # match nested exponent, where the nested exponent is has the power 2 or 3 (n below) # [xxx]^n, - [xxx]^n, [xxx] var^n, -[xxx] var^n @@ -371,7 +386,7 @@ match: - "$ClearSpeak_Exponents = 'Auto' and" - "*[2][self::m:power][" - - " *[2][self::m:mn][text()='2' or text()='3'] and " # exp is 2 or 3 + - " *[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" @@ -380,7 +395,7 @@ - " ]" replace: - x: "*[1]" - - t: "υψωμένο στη" # phrase(x 'raised to the' second power) + - t: "υψωμένο στην" # phrase(x 'raised to the' second power) - x: "*[2]" - t: "δύναμη" # phrase(x raised to the second 'power') @@ -389,9 +404,9 @@ tag: power match: - "$ClearSpeak_Exponents = 'Auto' and" - - " *[2][self::m:negative and " + - " *[2][self::m:minus and count(*)=1 and " - " *[1]/*[1][self::m:power][" - - " *[2][self::m:mn][text()='2' or text()='3'] and " # exp is 2 or 3" + - " *[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" @@ -401,7 +416,7 @@ - " ]" replace: - x: "*[1]" - - t: "υψωμένο στη" # phrase(x 'raised to the' second power) + - t: "υψωμένο στην" # phrase(x 'raised to the' second power) - x: "*[2]" - t: "δύναμη" # phrase(x raised to the second 'power') @@ -412,10 +427,10 @@ - "$ClearSpeak_Exponents = 'Auto' and" - " *[2][self::m:mrow][count(*)=3][ " - " *[3][self::m:power][" - - " *[2][self::m:mn][text()='2' or text()='3'] and " # exp is 2 or 3 + - " *[2][self::m:mn][.='2' or .='3'] and " # exp is 2 or 3 - " *[1][self::m:mi]" - " ] and " - - " *[2][self::m:mo][text()='⁢'] and " # invisible times + - " *[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" @@ -424,7 +439,7 @@ - " ]" replace: - x: "*[1]" - - t: "υψωμένο στη" # phrase(x 'raised to the' second power) + - t: "υψωμένο στην" # phrase(x 'raised to the' second power) - x: "*[2]" - t: "δύναμη" # phrase(x raised to the second 'power') @@ -435,11 +450,11 @@ - "$ClearSpeak_Exponents = 'Auto' and" - " *[2][self::m:mrow][count(*)=3][ " - " *[3][self::m:power][" - - " *[2][self::m:mn][text()='2' or text()='3'] and " # exp is 2 or 3 + - " *[2][self::m:mn][.='2' or .='3'] and " # exp is 2 or 3 - " *[1][self::m:mi]" - " ] and " - - " *[2][self::m:mo][text()='⁢'] and " # invisible times - - " *[1][self::m:negative 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" @@ -449,7 +464,7 @@ - " ]" replace: - x: "*[1]" - - t: "υψωμένο στη" # phrase(x 'raised to the' second power) + - t: "υψωμένο στην" # phrase(x 'raised to the' second power) - x: "*[2]" - t: "δύναμη" # phrase(x raised to the second 'power') @@ -470,7 +485,7 @@ match: "." replace: - x: "*[1]" - - t: "υψωμένο στη" # phrase(x 'raised to the' second power) + - t: "υψωμένο στην" # phrase(x 'raised to the' second power) - x: "*[2]" - t: "τέλος δύναμης" # phrase(x raised to the second 'power') @@ -481,12 +496,20 @@ name: ClearSpeak-absolute-value tag: absolute-value match: "." - variables: [{WordToSay: "IfThenElse($ClearSpeak_AbsoluteValue = 'Cardinality', 'cardinality', 'absolute value')"}] + # theodora.added WordToSayGen + variables: [WordToSay: "IfThenElse($ClearSpeak_AbsoluteValue = 'Cardinality', 'πληθικός αριθμός', 'απόλυτη τιμή')", WordToSayGen: "IfThenElse($ClearSpeak_AbsoluteValue = 'Cardinality', 'πληθικού αριθμού', 'απόλυτης τιμής')", WordToSayAcc: "IfThenElse($ClearSpeak_AbsoluteValue = 'Cardinality', 'πληθικό αριθμό', 'απόλυτη τιμή')"] replace: - test: if: "$Verbosity!='Terse'" - then: {t: "η"} # phrase('the' absolute value of 25) - - t: "απόλυτη τιμή" + then: [t: ""] + - test: + if: "preceding-sibling::*[1][self::m:mo and (.='=' or .='<' or .='>' or .='≤' or .='≥' or .='≰' or .='≱' or .='≮' or .='≯' or .='≝' or .='≡' or .='≃' or .='≄' or .='≅' or .='≆' or .='≇' or .='≈' or .='≉' or .='≊' or .='≢' or .='≨' or .='≩' or .='≞' or .='≪' or .='≫' or .='⫹' or .='⫺' or .='≼' or .='≽' or .='⋠' or .='⋡')]" + then: #theodora. added rule for reading greek accusative after an operator "ισούται με". generally seems to work or not interfere + - x: "$WordToSayAcc" + else: + - x: "$WordToSay" +# phrase('the' absolute value of 25) +# - x: "$WordToSay" - t: "του" # phrase(the absolute value 'of' 25) - x: "*[1]" - test: @@ -494,8 +517,19 @@ then: - pause: short - t: "τέλος" # phrase('end' absolute value) - - t: "απόλυτης τιμής" + - x: "$WordToSayGen" - pause: short + +- name: set-after-function + tag: set + match: + - "parent::*[preceding-sibling::*[1][self::m:mo][.='⁡'] and" + - "preceding-sibling::*[2][self::m:mi][text()='sup' or text()='inf' or" + - "text()='max' or text()='min' or text()='liminf' or text()='limsup']]" + replace: + - t: "συνόλου" + - x: "*[1]" + - name: set tag: set @@ -503,34 +537,52 @@ replace: - test: - if: "count(*)=0" - then: [{t: "το κενό σύνολο"}] # phrase('the empty set') + then: [t: "το κενό σύνολο"] # phrase('the empty set') - else_if: "count(*)=2" then: - test: if: "$Verbosity!='Terse'" - then: {t: "το"} # phrase('the' empty set) + then: [t: "το"] # phrase('the' empty set) - t: "κενό σύνολο" # phrase(the 'empty set') - - else_if: "count(*[1]/*)=3 and *[1]/*[2][self::m:mo][text()=':' or text()='|' or text()='∣']" + #theodora. rule slightly modified for greek syntax/grammar + - 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) - - t: "σύνολο" # phrase(this is a 'set of' numbers) . - - test: - if: $ClearSpeak_Sets != 'woAll' - then: [{t: "όλων των"}] # phrase(the set of 'all' integers) + if: "ancestor::m:mrow[m:mi[.='sup' or .='inf' or .='max' or .='min' or .='liminf' or .='limsup']]" + then: +# - test: +# if: "$Verbosity!='Terse'" +# then: [t: "του"] # phrase(inf 'of the' set of all integers in greek) #theodora. δεν χρειάζεται γιατί τώρα διαβάζει του ανεξάρτητα από verbosity, αλλά το αφήνω σε περιπτωση που αλλάξει κάτι στο μέλλον + - t: "συνόλου όλων των" + else: + - test: + if: "$Verbosity!='Terse'" + then: [t: "το"] # phrase('the' set of all integers) + - t: "σύνολο" + - test: + if: "$ClearSpeak_Sets != 'woAll'" + then: [t: "όλων των"] # phrase(the set of 'all' integers) - x: "*[1]/*[1]" - - t: "τέτοια ώστε " # phrase(the set S 'such that' x is less than y) + - t: "τέτοια ώστε" # phrase(the set S 'such that' x is less than y) - x: "*[1]/*[3]" + #theodora. rule slightly modified for greek syntax/grammar + - else_if: "ancestor::m:mrow[m:mi[.='sup' or .='inf' or .='max' or .='min' or .='liminf' or .='limsup']]" + then: +# - test: +# if: "$Verbosity!='Terse'" +# then: [t: "του"] #theodora. δεν χρειάζεται γιατί τώρα διαβάζει του ανεξάρτητα από verbosity, αλλά το αφήνω σε περιπτωση που αλλάξει κάτι στο μέλλον + - t: "συνόλου" + - x: "*[1]" else: - test: - if: $ClearSpeak_Sets != 'SilentBracket' + if: "$ClearSpeak_Sets != 'SilentBracket'" then: - test: if: "$Verbosity!='Terse'" - then: {t: "το"} # phrase('the' set of integers) + then: [t: "το"] # phrase('the' set of integers) - t: "σύνολο" # 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 @@ -538,8 +590,8 @@ # note that *[2] is an mrow with X, ",", Y, so getting X or Y is a double index name: ClearSpeak-intervals # avoid overriding with default "intervals" name variables: - - is_intervals_start_infinity: "*[1][self::m:negative and *[1][text()='∞']]" - - is_intervals_end_infinity: "*[2][text()='∞'or (self::m:positive and *[1][text()='∞'])]" + - is_intervals_start_infinity: "*[1][self::m:minus and count(*)=1 and *[1][.='∞']]" + - is_intervals_end_infinity: "*[2][.='∞'or (self::m:plus and count(*)=1 and *[1][.='∞'])]" tag: [open-interval, open-closed-interval, closed-interval, closed-open-interval] match: "." replace: @@ -553,7 +605,7 @@ then: - test: if: "starts-with(name(.), 'open')" - then: [{t: "δεν"}] # phrase(the interval from a to b 'not' including b) #theodora. "not" is translated in two ways in Greek. Examples: "not" including="δεν" περιέχει, "not" greater than= "όχι" μεγαλύτερο από, "not" (logical operator)="όχι". + then: [t: "δεν"] # phrase(the interval from a to b 'not' including b) #theodora. "not" is translated in two ways in Greek. Examples: "not" including="δεν" περιέχει, "not" greater than= "όχι" μεγαλύτερο από, "not" (logical operator)="όχι". - t: "περιέχει" # phrase(the interval from a to b not 'including' b) - x: "*[1]" # logic to deal with [not] arg #1 @@ -561,21 +613,21 @@ if: "not($is_intervals_start_infinity or $is_intervals_end_infinity)" then_test: - if: "name(.)='open-interval'" - then: [{t: "ή"}] # phrase(the interval including a 'or' b ) + then: [t: "ή"] # phrase(the interval including a 'or' b ) - else_if: "name(.)='closed-interval'" - then: [{t: "και"}] # phrase(the interval including a 'and' b) - else: [{t: "αλλά"}] # phrase(the interval including a 'but' not b) + then: [t: "και"] # phrase(the interval including a 'and' b) + else: [t: "αλλά"] # 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) + 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 + 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: "δεν"}] # phrase(the interval 'not' including a) + then: [t: "δεν"] # phrase(the interval 'not' including a) - t: "περιέχει" # phrase(the interval not 'including' a) - x: "*[2]" @@ -587,159 +639,203 @@ - "count(*[1]/*)=1 and count(*)=2" replace: - x: "*[1]/*[1]/*" # mtable/mtr/mtd - - t: "στοιχείων ανά" # phrase(the binomial coefficient n 'choose' m) + - t: "ανά" # phrase(the binomial coefficient n 'choose' m) - x: "*[2]/*[1]/*" - name: ClearSpeak-default tag: [mtr, mlabeledtr] match: "parent::m:matrix or parent::m:determinant" replace: - - t: "σειρά" # phrase(the first 'row' of a matrix) + - t: "γραμμή" # phrase(the first 'row' of a matrix) - x: "count(preceding-sibling::*)+1" - test: - if: .[self::m:mlabeledtr] + if: ".[self::m:mlabeledtr]" then: - - t: "με δείκτη" # phrase(the line 'with label' first equation) + - t: "με ένδειξη" # phrase(the line 'with label' first equation) - x: "*[1]/*" - pause: short - pause: medium - test: - if: .[self::m:mlabeledtr] - then: [{x: "*[position()>1]"}] - else: {x: "*"} + if: ".[self::m:mlabeledtr]" + then: [x: "*[position()>1]"] + else: [x: "*"] - # handle both log and ln + #new / changed name: ClearSpeak-log - tag: mrow - variables: [{log_is_simple: "IsNode(*[3],'simple')"}] - match: - - "count(*)=3 and" - - "*[1][self::m:mi][text()='log' or text()='ln'] and" - - "*[2][self::m:mo][text()='⁡']" - replace: + tag: mi + + + + match: ".='log' or .='ln'" + + replace: + - bookmark: "@id" + - test: + - if: "ancestor::m:mrow[1]/preceding-sibling::*[1][self::m:mo and (.='=' or .='<' or .='>' or .='≤' or .='≥' or .='≰' or .='≱' or .='≮' or .='≯' or .='≝' or .='≡' or .='≃' or .='≄' or .='≅' or .='≆' or .='≇' or .='≈' or .='≉' or .='≊' or .='≢' or .='≨' or .='≩' or .='≞' or .='≪' or .='≫' or .='⫹' or .='⫺' or .='≼' or .='≽' or .='⋠' or .='⋡')] and $Verbosity!='Terse' and not(IsNode(following-sibling::*[2],'simple'))" + then: [t: "το"] #theodora = το όχι τον για να πιάνει και τον λογάριθμο και το l n. πάνω μπορέι να χρειαστεί να προσθέσω κι άλλα σύμβολα που τελειώνουν με "με" ή "από" + - else_if: "$Verbosity!='Terse' and not(IsNode(following-sibling::*[2],'simple'))" + then: [t: "ο"] #theodora. not sure articles should be kept in greek. The current rules don't allow for creating cases for accusative, nominative etc. so it is easier to remove for now + +# if: "$Verbosity!='Terse' and not(IsNode(following-sibling::*[2],'simple'))" + # then: [t: "ο"] # phrase('the' square root of 25) - test: - if: "$log_is_simple" - then_test: - - if: "*[1][text()='log']" - then: [{t: "λογάριθμος"}] # phrase(the 'log' of x) - - else_if: $ClearSpeak_Log = 'LnAsNaturalLog' - then: [{t: "φυσικός λογάριθμος"}] # phrase(the 'natural log' of the product of 2 numbers) - else: [{spell: "'ln'"}] - else: + + + - if: ".='log'" + then: - test: - if: "$Verbosity!='Terse' and not(log_is_simple)" - then: {t: "ο"} # phrase('the' square root of 25) + - if: "ancestor::m:mrow[1]/preceding-sibling::*[1][self::m:mo and (.='=' or .='<' or .='>' or .='≤' or .='≥' or .='≰' or .='≱' or .='≮' or .='≯' or .='≝' or .='≡' or .='≃' or .='≄' or .='≅' or .='≆' or .='≇' or .='≈' or .='≉' or .='≊' or .='≢' or .='≨' or .='≩' or .='≞' or .='≪' or .='≫' or .='⫹' or .='⫺' or .='≼' or .='≽' or .='⋠' or .='⋡')]" + then: [t: "λογάριθμο"] + else: [t: "λογάριθμος"] + - else: - test: - - if: "*[1][text()='log']" - then: [{t: "λογάριθμος"}] - - else_if: $ClearSpeak_Log = 'LnAsNaturalLog' - then: [{t: "φυσικός λογάριθμος"}] # phrase(the 'natural log' of x) - else: [{spell: "'ln'"}] - - t: "του" # phrase(the natural log 'of' x) - - pause: short - - x: "*[3]" + - if: "$ClearSpeak_Log != 'LnAsNaturalLog'" + then: [spell: "'ln'"] + - else_if: "ancestor::m:mrow[1]/preceding-sibling::*[1][self::m:mo and (.='=' or .='<' or .='>' or .='≤' or .='≥' or .='≰' or .='≱' or .='≮' or .='≯' or .='≝' or .='≡' or .='≃' or .='≄' or .='≅' or .='≆' or .='≇' or .='≈' or .='≉' or .='≊' or .='≢' or .='≨' or .='≩' or .='≞' or .='≪' or .='≫' or .='⫹' or .='⫺' or .='≼' or .='≽' or .='⋠' or .='⋡')]" + then: [t: "φυσικό λογάριθμο"] + else: [t: "φυσικός λογάριθμος"] + + +# then: [t: "λογάριθμος"] +# - else_if: "$ClearSpeak_Log = 'LnAsNaturalLog'" + + + + + + + + + + +# then: [t: "φυσικός λογάριθμος"] # phrase(the 'natural log' of x) +# else: [spell: "'ln'"] + + - name: ClearSpeak-multi-line - tag: [cases, equations, lines] # these are ignored in favor of the ClearSpeak prefs + tag: [piecewise, system-of-equations, lines] # these are ignored in favor of the ClearSpeak prefs match: "." + #new + 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: "count(*)" + - test: - - if: $ClearSpeak_MultiLineOverview = 'Auto' + - if: "$ClearSpeak_MultiLineOverview = 'Auto'" then: + - x: "$LineCount" - test: - - if: "$ClearSpeak_MultiLineLabel = 'Case'" - then: [{t: "περίπτωση"}] # phrase(this is the first 'case' of three cases) - - else_if: "$ClearSpeak_MultiLineLabel = 'Line'" # already dealt with Auto/Case - then: [{t: "γραμμή"}] # phrase(this is the first 'line' of three lines) - - else_if: "$ClearSpeak_MultiLineLabel = 'Constraint'" - then: [{t: "περιορισμός"}] # phrase(this is the first 'constraint' of three constraints) - - else_if: "$ClearSpeak_MultiLineLabel = 'Equation'" - then: [{t: "εξίσωση"}] # phrase(this is the first 'equation' of three equations) - - else_if: "$ClearSpeak_MultiLineLabel = 'Row'" - then: [{t: "σειρά"}] # phrase(this is the first 'row' of three rows) - - else_if: "$ClearSpeak_MultiLineLabel = 'Step'" - then: [{t: "βήμα"}] # phrase(this is the first 'step' of three steps) - # else 'None -- don't say anything' - - test: - - if: "count(*) > 1 and $ClearSpeak_MultiLineLabel != 'None'" - #then: [{ct: "s"}] # plural # phrase(shown by the letter 's') - #theodora. This does not apply in Greek. The plural is formed individually for each word in this case. + - if: "$LineCount = 1" + then: + - test: + - if: "($ClearSpeak_MultiLineLabel = 'Auto' and self::m:piecewise) or $ClearSpeak_MultiLineLabel = 'Case'" + then: [t: "περίπτωση"] + - else_if: "$ClearSpeak_MultiLineLabel = 'Auto' or $ClearSpeak_MultiLineLabel = 'Line' or $ClearSpeak_MultiLineLabel = 'None'" + then: [t: "σειρά"] + - else_if: "$ClearSpeak_MultiLineLabel = 'Constraint'" + then: [t: "περιορισμός"] + - else_if: "$ClearSpeak_MultiLineLabel = 'Equation'" + then: [t: "εξίσωση"] + - else_if: "$ClearSpeak_MultiLineLabel = 'Row'" + then: [t: "γραμμή"] + - else_if: "$ClearSpeak_MultiLineLabel = 'Step'" + then: [t: "βήμα"] + - else: + - test: + - if: "($ClearSpeak_MultiLineLabel = 'Auto' and self::m:piecewise) or $ClearSpeak_MultiLineLabel = 'Case'" + then: [t: "περιπτώσεις"] + - else_if: "$ClearSpeak_MultiLineLabel = 'Auto' or $ClearSpeak_MultiLineLabel = 'Line' or $ClearSpeak_MultiLineLabel = 'None'" + then: [t: "σειρές"] + - else_if: "$ClearSpeak_MultiLineLabel = 'Constraint'" + then: [t: "περιορισμοί"] + - else_if: "$ClearSpeak_MultiLineLabel = 'Equation'" + then: [t: "εξισώσεις"] + - else_if: "$ClearSpeak_MultiLineLabel = 'Row'" + then: [t: "γραμμές"] + - else_if: "$ClearSpeak_MultiLineLabel = 'Step'" + then: [t: "βήματα"] + - pause: short + #the rule [ct: "s"] does not apply in Greek. The plural is formed individually for each word in this case. # Singular: εξίσωση--> plural: εξισώσεις, singular: περίπτωση-->plural: περιπτώσεις, # singular: γραμμή--> plural: γραμμές. singular: σειρά-->plural: σειρές, singular: βήμα--> plural: βήματα, # singular: περιορισμός--> plural: περιορισμοί #it seems that the following lines work for multiple lines, however i am not sure what it does for cases, constraints and steps - then: - test: - - if: "($ClearSpeak_MultiLineLabel = 'Auto' and self::m:cases)" - then: [{t: "περιπτώσεις"}] # phrase(this is the first 'case' of three cases) - - else_if: "($ClearSpeak_MultiLineLabel = 'Auto' and self::m:lines)" # already dealt with Auto/Case - then: [{t: "γραμμές"}] # phrase(this is the first 'line' of three lines) - - else_if: "($ClearSpeak_MultiLineLabel = 'Auto' and self::m:constraints)" - then: [{t: "περιορισμοί"}] # phrase(this is the first 'constraint' of three constraints) - - else_if: "($ClearSpeak_MultiLineLabel = 'Auto' and self::m:equations)" - then: [{t: "εξισώσεις"}] # phrase(this is the first 'equation' of three equations) - - else_if: "($ClearSpeak_MultiLineLabel = 'Auto' and self::m:rows)" - then: [{t: "σειρές"}] # phrase(this is the first 'row' of three rows) - - else_if: "($ClearSpeak_MultiLineLabel = 'Auto' and self::m:steps)" - then: [{t: "βήματα"}] # 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:cases or parent::m:equations or parent::m:lines" - replace: - - test: - - if: "($ClearSpeak_MultiLineLabel = 'Auto' and parent::m:cases) or $ClearSpeak_MultiLineLabel = 'Case'" - then: [{t: "περίπτωση"}] # 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: "γραμμή"}] # phrase(the straight 'line' between x and y) - - else_if: "$ClearSpeak_MultiLineLabel = 'Constraint'" - then: [{t: "περιορισμός"}] # phrase(there is a 'constraint' on possible values) - - else_if: "$ClearSpeak_MultiLineLabel = 'Equation'" - then: [{t: "εξίσωση"}] # phrase(the 'equation' pi r squared gives the area of a circle) - - else_if: "$ClearSpeak_MultiLineLabel = 'Row'" - then: [{t: "σειρά"}] # phrase(the values on the top 'row' are relevant) - - else_if: "$ClearSpeak_MultiLineLabel = 'Step'" - then: [{t: "βήμα"}] # phrase(this is a 'step' by step process) - # else 'None -- don't say anything' + 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: + #new /changed - test: - if: "$ClearSpeak_MultiLineLabel != 'None'" + if: "not($LineCount=1 or $ClearSpeak_MultiLineLabel='None' or contains(@data-intent-property, ':continued-row:'))" then: - - x: "count(preceding-sibling::*)+1" + - pause: medium - test: - if: .[self::m:mlabeledtr] - then: - - t: "με ένδειξη" # phrase(the item 'with label' complete) + - if: "($ClearSpeak_MultiLineLabel = 'Auto' and parent::m:piecewise) or $ClearSpeak_MultiLineLabel = 'Case'" + then: [t: "περίπτωση"] # 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: "σειρά"] # phrase(the straight 'line' between x and y) + - else_if: "$ClearSpeak_MultiLineLabel = 'Constraint'" + then: [t: "περιορισμός"] # phrase(there is a 'constraint' on possible values) + - else_if: "$ClearSpeak_MultiLineLabel = 'Equation'" + then: [t: "εξίσωση"] # phrase(the 'equation' pi r squared gives the area of a circle) + - else_if: "$ClearSpeak_MultiLineLabel = 'Row'" + then: [t: "γραμμή"] # phrase(the values on the top 'row' are relevant) + - else_if: "$ClearSpeak_MultiLineLabel = 'Step'" + then: [t: "βήμα"] # phrase(this is a 'step' by step process) + # else 'None -- don't say anything' + - x: "count(preceding-sibling::*[not(contains(@data-intent-property, ':continued-row:'))]) + 1" + - test: + if: "self::m:mlabeledtr" + then: + # - x: "count(preceding-sibling::*)+1" + # - test: + # if: .[self::m:mlabeledtr] + # then: + - t: "με ένδειξη" # phrase(the diagram is complete 'with label') - x: "*[1]/*" - - pause: medium + #new - test: - if: .[self::m:mlabeledtr] - then: [{x: "*[position()>1]"}] - else: {x: "*"} + - 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: "$ClearSpeak_MultiLineLabel != 'None'" - then: [{pause: long}] + if: "self::m:mlabeledtr" + then: [x: "*[position()>1]"] + else: [x: "*"] - name: ClearSpeak_Functions_None tag: mo match: - - "text()='⁡' and $ClearSpeak_Functions = 'None' and" + - ".='⁡' 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: "επί"}] # phrase(5 'times' 3 equals 15) + then: [t: ""] + else: [t: "επί"] # 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 - - "text()='⁢' and $ClearSpeak_ImpliedTimes = 'None'" + - ".='⁢' and $ClearSpeak_ImpliedTimes = 'None'" replace: - t: "" @@ -748,27 +844,37 @@ 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 - - "text()='⁢' and (not(@data-function-guess) or $ClearSpeak_Functions = 'None') and" - - "not(ancestor-or-self::*[contains(@data-intent-property, ':structure:')]) and (" + + - ".='⁢' 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 self::m:binomial or" # followed by parens - - " ( (self::m:msup or self::m:msub or self::m:msubsup or self::m:power) and " # followed by msup, etc. - - " *[1][self::m:mrow][IsBracketed(., '(', ')') or IsBracketed(., '[', ']') or IsBracketed(., '|', '|')]" # base has parens - - " )" + - " IsBracketed(., '(', ')') or IsBracketed(., '[', ']') or IsBracketed(., '|', '|') or " +# - " (IsBracketed(., '(', ')') and not(.//m:mo[.=','])) or" #theodora. added rule to exclude reading "times" when the following siblings include commas like B(2, 6), F(X,Y) from this rule. then removed because "times" was left blank due to many false positives +# - " IsBracketed(., '[', ']') or IsBracketed(., '|', '|') or " +#new / changed + # 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 + - " IsBracketed(., '(', ')') or IsBracketed(., '[', ']') or IsBracketed(., '|', '|')]" # followed by parens - " )" replace: - - t: "" # phrase(5 'times' 3 equals 15) - #theodora. left it blank because saying "times" before parentheses is incorrect in certain examples - #included here (ex operators and partial derivatives applied on expressions enclosed by parentheses). - # otherwise in greek "times" would be translated as "επί" in this context. + - t: "" # phrase(5 'times' 3 equals 15) #theodora. removed it because it was reading "times" examples like d/dt(). + + - name: no-say-parens tag: mrow @@ -777,11 +883,12 @@ - " not(self::m:math) ] and " # rule out [x] standing alone - "( IsBracketed(., '(', ')') or IsBracketed(., '[', ']') ) and " - "not( $ClearSpeak_Functions = 'None' and " - - " (preceding-sibling::*[1][text()='⁡'] or following-sibling::*[1][text()='⁡']) ) and " + - " (preceding-sibling::*[1][.='⁡'] or following-sibling::*[1][.='⁡']) ) and " - "not( $ClearSpeak_ImpliedTimes = 'None' and " - - " (preceding-sibling::*[1][text()='⁢'] or following-sibling::*[1][text()='⁢']) ) and " + - " (preceding-sibling::*[1][.='⁢'] or following-sibling::*[1][.='⁢']) ) and " - "IsNode(*[2], 'simple') and" - - "not(ancestor-or-self::*[contains(@data-intent-property, ':structure:')])" + - "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: diff --git a/Rules/Languages/el/SharedRules/calculus.yaml b/Rules/Languages/el/SharedRules/calculus.yaml new file mode 100644 index 000000000..4006b24c7 --- /dev/null +++ b/Rules/Languages/el/SharedRules/calculus.yaml @@ -0,0 +1,56 @@ +--- + +- name: laplacian + tag: laplacian + match: "count(*) <= 1" # can be on ∇^2 or on enclosing mrow + replace: + - t: "Λαπλασιανή" # phrase('laplacian' of x) -- "LahPlahsian" sounds better with speech engines tested + - test: + if: "count(*) = 1" + then: + - test: + if: "$Verbosity!='Terse'" + then: [t: "του"] # 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: "ντιβ"] # phrase('div' is short for divergence) -- note OneCore voices spell out "div" + else: [t: "απόκλιση του"] # 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: "στροβιλισμός" # phrase(the 'curl of' a field) + - test: + if: "$Verbosity!='Terse'" + then: [t: ""] # 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: "κλίση"] # phrase(the hill has a 'gradient of' five percent) + else: [t: "ανάδελτα"] # phrase(the delete key is labeled 'del') ??????????????????????????? + - test: + if: "not(IsNode(*[1], 'leaf'))" + then: [pause: short] + - x: "*[1]" diff --git a/Rules/Languages/el/SharedRules/default.yaml b/Rules/Languages/el/SharedRules/default.yaml index 57963e488..305f5b11b 100644 --- a/Rules/Languages/el/SharedRules/default.yaml +++ b/Rules/Languages/el/SharedRules/default.yaml @@ -10,6 +10,10 @@ - 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" @@ -23,7 +27,7 @@ tag: mrow match: "not(*)" replace: - - t: "" # say nothing -- placeholder + - t: " " # say nothing -- placeholder - name: default tag: mrow @@ -38,7 +42,7 @@ match: "." replace: - bookmark: "@id" - # FIX: removing the digit block separators is likely locale dependent + - x: "translate(., $BlockSeparators, '')" # remove digit block separators - name: default @@ -54,9 +58,11 @@ replace: - bookmark: "@id" - test: - if: "string-length(.) = 1 and text() != '_'" # need unicode.tdl to kick in for single letter tokens + - if: "string-length(.) = 1 and text() != '_'" # need unicode.tdl to kick in for single letter tokens then: [x: "text()"] - else: [x: "translate(., '-_', ' ')" ] # from intent literals + - else_if: "@data-chem-element" # NavMode=Character needs this + then: [spell: "text()", pause: "short"] + else: [x: "translate(., '-_\u00A0', ' ')"] # from intent literals or from extra spaces added (which get deleted) - name: default tag: ms @@ -72,7 +78,7 @@ replace: [x: "*"] -- name: structure-simple +- 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. @@ -86,59 +92,61 @@ - x: "*[2]" - pause: short -- name: structure-default +- name: literal-default tag: mfrac match: "." replace: - - t: " αρχή " # phrase("'start' fraction x over y end of fraction") + - t: "αρχή " # phrase("'start' fraction x over y end of fraction") - pause: short - x: "*[1]" - test: if: "not(IsNode(*[1],'leaf'))" - then: [{pause: short}] + then: [pause: short] - t: "προς " # phrase("the fraction x 'over' y") - test: if: "not(IsNode(*[2],'leaf'))" - then: [{pause: short}] + then: [pause: short] - x: "*[2]" - pause: short - - t: "τέλος κλάσματος" # phrase("start of fraction x over y 'end over'") + - test: + if: "$Impairment = 'Blindness'" + then: [t: "τέλος κλάσματος"] # 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: structure-default +- name: literal-default tag: msqrt match: "." replace: - test: if: "$Verbosity!='Terse'" - then: [t: "η"] # phrase("'the' root of x") + then: [t: ""] # phrase("'the' root of x") #theodora. not sure articles should be kept in greek. The current rules don't allow for creating cases for accusative, nominative etc. so it is easier to remove for now - t: "ρίζα" - test: if: "$Verbosity!='Terse'" - then: [t: "του"] # phrase("the root 'of' x") + then: [t: "του"] # phrase("the root 'of' x") - x: "*[1]" - pause: short - test: - if: "not(IsNode(*[1],'leaf'))" - then: [t: "τέλος ρίζας"] # phrase("root of x 'end root symbol'") + if: "not(IsNode(*[1],'leaf')) or $Impairment = 'Blindness'" + then: [t: "τέλος ρίζας", 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: structure-default +- name: literal-default tag: mroot match: "." replace: - test: if: "$Verbosity!='Terse'" - then: [t: "η"] # phrase("'the' root of x") - - t: "ρίζα του" - - t: "τάξης" # phrase("the root of x 'with index' 5") + then: [t: ""] # phrase("'the' root of x") #theodora. not sure articles should be kept in greek. The current rules don't allow for creating cases for accusative, nominative etc. so it is easier to remove for now + - t: "ρίζα τάξης" # phrase("the 'root with index' 3 of 5") - x: "*[1]" - pause: short - - test: - if: "$Verbosity!='Terse'" - then: [t: "του"] # phrase("the root 'of' x") +# - test: +# if: "$Verbosity!='Terse'" +# then: [t: "του"] + - t: "του" # phrase("the root 'of' x") - x: "*[2]" - pause: short - test: @@ -147,36 +155,48 @@ - name: simple-sub - tag: particular-value-of - # invisible comma -- want "x sub 1 1" without "end sub" - match: "count(*)=2 and (IsNode(*[2], 'leaf') or *[2][self::m:mrow][*[2][text()='⁣']])" - replace: + 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: +# tag: particular-value-of +# # invisible comma -- want "x sub 1 1" without "end sub" +# match: "count(*)=2 and (IsNode(*[2], 'leaf') or *[2][self::m:mrow][*[2][text()='⁣']])" +# replace: - x: "*[1]" - - test: - if: "$Verbosity!='Terse' or not(*[2][self::m:mn])" # just say "x 1" for terse vs "x sub 1" - then: [t: "δείκτης"] # phrase(x 'sub' 2) +# - test: +# if: "$Verbosity!='Terse' or not(*[2][self::m:mn])" # just say "x 1" for terse vs "x sub 1" +# then: [t: "δείκτης"] # phrase(x 'sub' 2) - x: "*[2]" + - pause: short -- name: default - tag: particular-value-of - match: "count(*)=2" +- name: no-end-sub + tag: indexed-by + match: "count(*)=2 and *[2][self::m:mrow and *[2][.='⁣']]" +#- name: default +# tag: particular-value-of +# match: "count(*)=2" replace: - x: "*[1]" - t: "δείκτης" # phrase(x 'sub' 2) - x: "*[2]" - - t: "τέλος δείκτη" # phrase(x sub 2 'end of sub') +# - t: "τέλος δείκτη" # phrase(x sub 2 'end of sub') - pause: short +# otherwise let definitions/default infix handle it -- name: structure +- name: literal tag: msub match: "." replace: - x: "*[1]" - - t: "δείκτης" # phrase(x 'sub' 2) + - 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: "δείκτης"] # phrase(x 'sub' 2) - x: "*[2]" -- name: structure + +- name: literal tag: [msup, msubsup] match: "." replace: @@ -190,33 +210,84 @@ if: "*[last()][translate(., '′″‴⁗†‡°*', '')='']" then: [x: "*[last()]"] else_test: - if: "ancestor-or-self::*[contains(@data-intent-property, ':structure:')]" # FIX: is this test necessary? + if: "ancestor-or-self::*[contains(@data-intent-property, ':literal:')]" # FIX: is this test necessary? then: - - t: "εκθέτης" # phrase(x 'super' 2) # + - t: "εκθέτης" # phrase(x 'super' 2) - x: "*[last()]" - test: - if: "not(IsNode(*[last()], 'simple'))" + if: "not(IsNode(*[last()], 'simple')) or $Impairment = 'Blindness'" then: [t: "τέλος εκθέτη"] # phrase(x super 2 'end of super') else: - - t: "που υψώνεται στη " # phrase(5 'raised to the' second power equals 25) + - test: + if: "$Verbosity='Verbose'" + then: [t: "εκθέτης"] + else: [t: "εκθέτης"] +# - t: "που υψώνεται στη " # phrase(5 'raised to the' second power equals 25) - x: "*[last()]" - - t: "τέλος δύναμης" # phrase(5 raised to the second 'power' equals 25) +# - t: "τέλος δύναμης" # phrase(5 raised to the second 'power' equals 25) + - test: + if: "$Verbosity='Verbose'" + then: [t: "τέλος εκθέτη"] + else: [t: "τέλος εκθέτη"] - name: default tag: munder match: "." replace: + #theodora. added this part so that conditions under max, inf, sup, unions, intersections are read more naturally in greek. - test: - if: "not(IsNode(*[1], 'leaf'))" - then: [t: "τροποποιημένο"] # phrase(phrase(x 'modified' with y above it) - - x: "*[1]" - - t: "με" # phrase(x 'with' z below it) - - x: "*[2]" - - t: "από κάτω" # phrase(x with z 'below' it) + - if: + - "(*[1][self::m:mi][.='max' or .='min' or .='sup' or .='inf' or .='liminf' or .='limsup']) or" + - "(*[1][self::m:mrow][*[1][self::m:mi][.='liminf' or .='limsup']]) or" + - "*[1][self::m:mo][.='∪' or .='∩']" + then: + - test: + - if: "*[1][self::m:mo][.='∪']" + then: [t: "ένωση"] + - else_if: "*[1][self::m:mo][.='∩']" + then: [t: "τομή"] + - else_if: "*[1][.='max'] or *[1]/*[1][.='max']" + then: + - test: + if: "$Verbosity='Terse'" + then: [t: "μαξ"] + else: [t: "μέγιστο"] + - else_if: "*[1][.='min'] or *[1]/*[1][.='min']" + then: + - test: + if: "$Verbosity='Terse'" + then: [t: "μιν"] + else: [t: "ελάχιστο"] + - else_if: "*[1][.='sup']" + then: + - test: + if: "$Verbosity='Terse'" + then: [t: "σουπ"] + else: [t: "σουπρέμουμ"] + - else_if: "*[1][.='inf']" + then: + - test: + if: "$Verbosity='Terse'" + then: [t: "ινφ"] + else: [t: "ινφίμουμ"] + - else_if: "*[1][.='limsup'] or *[1]/*[1][.='limsup']" + then: [t: "ανώτατο όριο"] + - else: [t: "κατώτατο όριο"] + - t: "για" + - x: "*[2]" + else: + - test: + if: "not(IsNode(*[1], 'leaf'))" + then: [t: "παράσταση"] # phrase(phrase(x 'quantity' with y above it) + - x: "*[1]" + - t: "με" # phrase(x 'with' z below it) + - x: "*[2]" + - t: "από κάτω" # phrase(x with z 'below' it) + - name: diacriticals tag: mover - match: "*[1][self::m:mi] and *[2][translate(., '\u0306\u030c.\u00A8\u02D9\u20DB\u20DC`^~→¯_', '')='']" + match: "*[1][self::m:mi] and *[2][translate(., '\u0306\u030c.\u00A8\u02D9\u20DB\u20DC`^ˇ~→¯_', '')='']" replace: - x: "*[1]" - x: "*[2]" @@ -227,11 +298,11 @@ replace: - test: if: "not(IsNode(*[1], 'leaf'))" - then: [t: "τροποποιημένο"] # phrase(phrase(x 'modified' with y above it) + then: [t: "παράσταση"] # phrase(phrase(the 'quantity' x plus 1 with y above it) - x: "*[1]" - t: "με" # phrase(x modified 'with' y above it) - x: "*[2]" - - t: "από πάνω" # phrase(x modified 'with' y above it) + - t: "από πάνω" # phrase(x modified 'with' y above it) - name: default tag: munderover @@ -239,13 +310,13 @@ replace: - test: if: "not(IsNode(*[1], 'leaf'))" - then: [t: "τροποποιημένο"] # phrase(the equation has been 'modified') + then: [t: "παράσταση"] # phrase(the 'quantity' x plus 1 with y above it) - x: "*[1]" - t: "με" # phrase(x modified 'with' y above it) - x: "*[2]" - - t: "από κάτω και" # phrase(x modified with y 'below and' y above it) + - t: "από κάτω και" # phrase(x modified with y 'below and' y above it) - x: "*[3]" - - t: "από πάνω" # phrase(x modified with y 'above' it) + - t: "από πάνω" # 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 @@ -266,30 +337,28 @@ then: - with: variables: - - PreSubscript: "IfThenElse($Verbosity='Verbose', 'pre subscript', 'pre sub')" - - PreSuperscript: "IfThenElse($Verbosity='Verbose', 'pre superscript', 'pre super')" + - PreSubscript: "IfThenElse($Verbosity='Verbose', 'προτεταγμένος δείκτης', 'προτεταγμένος δείκτης')" + - PreSuperscript: "IfThenElse($Verbosity='Verbose', 'προτεταγμένος εκθέτης', 'προτεταγμένος εκθέτης')" replace: - test: # only bother announcing if there is more than one prescript if: "count($Prescripts) > 2" then: - t: "με" # phrase(substitute x 'with' y) - x: "count($Prescripts) div 2" - - t: "προαναγραφόμενες εκφράσεις" # phrase(in this equation certain 'prescripts' apply) + - t: "προτεταγμένα μέρη" # phrase(in this equation certain 'prescripts' apply) - pause: short - test: if: "not($Prescripts[1][self::m:none])" then: - - t: "προαναγραφόμενος δείκτης" #theodora. the translations were missing. the following line was #deleted so that the english word is not read. - #- x: "$PreSubscript" + - x: "$PreSubscript" - x: "$Prescripts[1]" - test: if: "not($Prescripts[1][self::m:none] or $Prescripts[2][self::m:none])" - then: [t: "και "] # phrase(10 is greater than 8 'and' less than 15) + then: [t: "και"] # phrase(10 is greater than 8 'and' less than 15) - test: if: "not($Prescripts[2][self::m:none])" then: - - t: "προαναγραφόμενος εκθέτης" - #- x: "$PreSuperscript" + - x: "$PreSuperscript" - x: "$Prescripts[2]" - pause: short - test: @@ -298,56 +367,52 @@ - test: if: "not($Prescripts[3][self::m:none])" then: - - t: "προαναγραφόμενος εκθέτης" - #- x: "$PreSubscript" + - x: "$PreSubscript" - x: "$Prescripts[3]" - test: if: "not($Prescripts[3][self::m:none] or $Prescripts[4][self::m:none])" - then: [t: "και "] # phrase(10 is grater than 8 'and' less than 15) + then: [t: "και"] # phrase(10 is grater than 8 'and' less than 15) - test: if: "not($Prescripts[4][self::m:none])" then: - - t: "προαναγραφόμενος δείκτης" - #- x: "$PreSuperscript" + - 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: "και εναλλάξ προαναγραφόμενες εκφράσεις" # phrase(in this case there are values 'and alternating prescripts') + - t: "και εναλλάξ προτεταγμένα μέρη" # phrase(in this case there are values 'and alternating prescripts') - x: "$Prescripts[position() > 4]" - - t: "τέλος προαναγραφόμενων εκφράσεων" # phrase(This is where 'end prescripts' occurs) + - t: "τέλος προτεταγμένων μερών" # 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')" + - PostSubscript: "IfThenElse($Verbosity='Verbose', 'δείκτης', 'δείκτης')" + - PostSuperscript: "IfThenElse($Verbosity='Verbose', 'εκθέτης', 'εκθέτης')" replace: - test: # only bother announcing if there is more than one postscript if: "count($Postscripts) > 2" then: - test: if: "$Prescripts" - then: [t: "και "] # phrase(10 is greater than 8 'and' less than 15) + then: [t: "και"] # phrase(10 is greater than 8 'and' less than 15) - t: "με" # phrase(substitute x 'with' y) - x: "count($Postscripts) div 2" - - t: "μεταναγραφόμενες εκφράσεις" # phrase(this material includes several 'postscripts') + - t: "μετατεταγμένα μέρη" # phrase(this material includes several 'postscripts') - pause: short - test: if: "not($Postscripts[1][self::m:none])" then: - - t: "μεταναγραφόμενος δείκτης" - #- x: "$PostSubscript" + - x: "$PostSubscript" - x: "$Postscripts[1]" - test: if: "not($Postscripts[1][self::m:none] or $Postscripts[2][self::m:none])" - then: [t: "και "] # phrase(10 is greater than 8 'and' less than 15) + then: [t: "και"] # phrase(10 is greater than 8 'and' less than 15) - test: if: "not($Postscripts[2][self::m:none])" then: - - t: "μεταναγραφόμενος εκθέτης" - #- x: "$PostSuperscript" + - x: "$PostSuperscript" - x: "$Postscripts[2]" - test: if: "count($Postscripts) > 2" @@ -355,17 +420,15 @@ - test: if: "not($Postscripts[3][self::m:none])" then: - - t: "μεταναγραφόμενος δείκτης" - #- x: "$PostSubscript" + - x: "$PostSubscript" - x: "$Postscripts[3]" - test: if: "not($Postscripts[3][self::m:none] or $Postscripts[4][self::m:none])" - then: [t: "και "] # phrase(10 is greater than 8 'and' less than 15) + then: [t: "και"] # phrase(10 is greater than 8 'and' less than 15) - test: if: "not($Postscripts[4][self::m:none])" then: - - t: "μεταναγραφόμενος εκθέτης" - #- x: "$PostSuperscript" + - x: "$PostSuperscript" - x: "$Postscripts[4]" - test: if: "count($Postscripts) > 4" @@ -373,17 +436,15 @@ - test: if: "not($Postscripts[5][self::m:none])" then: - - t: "μεταναγραφόμενος δείκτης" - #- x: "$PostSubscript" + - x: "$PostSubscript" - x: "$Postscripts[5]" - test: if: "not($Postscripts[5][self::m:none] or $Postscripts[6][self::m:none])" - then: [t: "και "] # phrase(10 is greater than 8 'and' less than 15) + then: [t: "και"] # phrase(10 is greater than 8 'and' less than 15) - test: if: "not($Postscripts[6][self::m:none])" then: - - t: "μεταναγραφόμενος εκθέτης" - #- x: "$PostSuperscript" + - x: "$PostSuperscript" - x: "$Postscripts[6]" - test: if: "count($Postscripts) > 6" @@ -391,8 +452,7 @@ - test: if: "not($Postscripts[7][self::m:none])" then: - - t: "μεταναγραφόμενος δείκτης" - #- x: "$PostSubscript" + - x: "$PostSubscript" - x: "$Postscripts[7]" - test: if: "not($Postscripts[7][self::m:none] or $Postscripts[8][self::m:none])" @@ -400,31 +460,36 @@ - test: if: "not($Postscripts[8][self::m:none])" then: - - t: "μεταναγραφόμενος εκθέτης" - #- x: "$PostSuperscript" + - 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: "και εναλλάξ εκφράσεις" # phrase(this situation involves complexities 'and alternating scripts') + - t: "και εναλλάξ τεταγμένα μέρη" # phrase(this situation involves complexities 'and alternating scripts') - x: "$Postscripts[position() > 8]" - - t: "τέλος εκφράσεων" # phrase(At this point 'end scripts' occurs) + - t: "τέλος τεταγμένων μερών" # phrase(At this point 'end scripts' occurs) - name: default tag: mtable - variables: [IsColumnSilent: false()] + variables: + - IsColumnSilent: "false()" + - NumColumns: "count(*[1]/*) - IfThenElse(*/self::m:mlabeledtr, 1, 0)" match: "." replace: - - t: "πίνακας με" # phrase(the 'table with' 3 rows) + - test: + if: "preceding-sibling::*[1][self::m:mo and (.='=' or .='<' or .='>' or .='≤' or .='≥' or .='≰' or .='≱' or .='≮' or .='≯' or .='≝' or .='≡' or .='≃' or .='≄' or .='≅' or .='≆' or .='≇' or .='≈' or .='≉' or .='≊' or .='≢' or .='≨' or .='≩' or .='≞' or .='≪' or .='≫' or .='⫹' or .='⫺' or .='≼' or .='≽' or .='⋠' or .='⋡')]" + then: [t: "πίνακα με"] #theodora. added rule for reading greek accusative after an operator "ισούται με" + else: [t: "πίνακας με"] +# - t: "πίνακας με" # phrase(the 'table with' 3 rows) - x: count(*) - test: if: count(*)=1 - then: [t: "σειρά"] # phrase(the table with 1 'row') - else: [t: "σειρές"] # phrase(the table with 3 'rows') + then: [t: "γραμμή"] # phrase(the table with 1 'row') + else: [t: "γραμμές"] # phrase(the table with 3 'rows') - t: "και" # phrase(the table with 3 rows 'and' 4 columns) - - x: "count(*[1]/*)" + - x: "$NumColumns" - test: - if: "count(*[1]/*)=1" + if: "NumColumns=1" then: [t: "στήλη"] # phrase(the table with 3 rows and 1 'column') else: [t: "στήλες"] # phrase(the table with 3 rows and 4 'columns') - pause: long @@ -436,19 +501,20 @@ tag: [mtr, mlabeledtr] match: "." replace: - - t: "σειρά" # phrase(the first 'row' of a matrix) + - pause: medium + - t: "γραμμή" # phrase(the first 'row' of a matrix) - x: "count(preceding-sibling::*)+1" - test: - if: .[self::m:mlabeledtr] + if: "self::m:mlabeledtr" then: - t: "με ένδειξη" # phrase(the line 'with label' first equation) - x: "*[1]/*" - pause: short - pause: medium - test: - if: .[self::m:mlabeledtr] - then: [{x: "*[position()>1]"}] - else: {x: "*"} + if: "self::m:mlabeledtr" + then: [x: "*[position()>1]"] + else: [x: "*"] - name: default tag: mtd @@ -461,25 +527,25 @@ if: "not($IsColumnSilent)" then: - t: "στήλη" # phrase(the first 'column' of the matrix) - - x: "count(preceding-sibling::*)+1" + - 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} + then: [pause: short] - else_if: count(../following-sibling::*) > 0 - then: {pause: medium} - else: {pause: long} + 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 text()=' ']" + match: "@notation='box' and *[self::m:mtext and .=' ']" replace: - - t: "κενό κουτάκι" # phrase(the 'empty box' contains no values) + - t: "κενό περίβλημα" # 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 @@ -489,10 +555,10 @@ replace: - test: if: ".[contains(concat(' ', normalize-space(@notation), ' '), ' box ')]" - then: [t: "κουτάκι", pause: short] # phrase(the 'box' around the expression) + then: [t: "περίβλημα", pause: short] # phrase(the 'box' around the expression) - test: if: ".[contains(@notation,'roundedbox')]" - then: [t: "κυκλικό κουτάκι", pause: short] # phrase(the 'round box' around the expression) + then: [t: "κυκλικό περίβλημα", pause: short] # phrase(the 'round box' around the expression) - test: if: ".[contains(@notation,'circle')]" then: [t: "κύκλος", pause: short] # phrase(the 'circle' around the expression) @@ -521,7 +587,7 @@ else: - test: if: ".[contains(@notation,'updiagonalstrike')]" - then: [t: "διαγώνια", pause: short] # phrase(the line runs 'up diagonal') + then: [t: "άνω διαγώνια", pause: short] # phrase(the line runs 'up diagonal') - test: if: ".[contains(@notation,'downdiagonalstrike')]" then: [t: "κάτω διαγώνια", pause: short] # phrase(the line runs 'down diagonal') @@ -586,13 +652,13 @@ then: [t: "τετραγωνική ρίζα", pause: short] # phrase(5 is the 'square root' of 25) - t: "περικλείει" # phrase(parentheses are 'enclosing' part of the equation) - test: - if: "*[self::m:mtext and text()=' ']" + if: "*[self::m:mtext and .=' ']" then: [t: "άδεια περιοχή"] # 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: "τέλος περίκλεισης"] # phrase(reached the 'end enclosure' point) - - pause: short + - pause: short - name: semantics tag: "semantics" @@ -606,65 +672,110 @@ replace: - x: "*[1]" +#new - name: apply-function tag: "apply-function" match: . replace: - x: "*[1]" - - t: "εφαρμόζεται σε" # phrase(the function sine 'applied to' x plus y) - - x: "*[2]" - +# - t: "εφαρμόζεται σε" # phrase(the function sine 'applied to' x plus y) +# - x: "*[2]" + - 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 - # uncaught intent -- speak as arg1 arg2 .... + # uncaught intent -- the args have been inserted in the order of speech tag: "*" - match: "contains(@data-intent-property, ':silent:') and count(*)>0" + 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 -- speak as arg1 arg2 .... + # uncaught intent -- the args have been inserted in the order of speech tag: "*" - match: "contains(@data-intent-property, ':prefix:') and count(*)>0" + match: "count(*)>0 and contains(@data-intent-property, ':prefix:')" replace: - - x: "translate(name(.), '-_', ' ')" + - x: "SpeakIntentName(name(.), $Verbosity, 'prefix')" - x: "*" - - pause: short + - test: + if: "not( IsBracketed(., '', '') or IsNode(*[last()], 'simple') )" + then: [x: "GetBracketingIntentName(name(.), $Verbosity, 'prefix', 'end')"] + - test: + if: "IsNode(., '2D')" + then: [pause: short] + else: [pause: auto] - name: postfix-intent - # uncaught intent -- speak as arg1 arg2 .... + # uncaught intent -- the args have been inserted in the order of speech tag: "*" - match: "contains(@data-intent-property, ':postfix:') and count(*)>0" + match: "count(*)>0 and contains(@data-intent-property, ':postfix:')" replace: - - pause: short + - test: + if: "$Impairment = 'Blindness' and not( IsBracketed(., '', '') or IsNode(*[1], 'simple') )" + then: [x: "GetBracketingIntentName(name(.), $Verbosity, 'postfix', 'start')"] - x: "*" - - x: "translate(name(.), '-_', ' ')" - + - x: "SpeakIntentName(name(.), $Verbosity, 'postfix')" - name: infix-intent - # uncaught intent -- speak as foo of arg1 comma arg2 .... + # uncaught intent -- the args have been inserted in the order of speech tag: "*" - match: "contains(@data-intent-property, ':infix:') and count(*)>0" + match: "count(*)>0 and contains(@data-intent-property, ':infix:')" replace: - - pause: short - - insert: - nodes: "*" - replace: [x: "translate(name(.), '-_', ' ')", pause: auto] - - pause: short - + - 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 .... + # uncaught intent -- speak as foo of arg1 comma arg2 .... The MathML spec requires arguments to functions tag: "*" - match: count(*)>0 + match: "count(*)>0" replace: - - x: "translate(name(.), '-_', ' ')" - - t: "του" # phrase(sine 'of' 5) - - pause: short + - 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: [t: "κόμμα", pause: auto] # phrase(f of x 'comma' y) + 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 diff --git a/Rules/Languages/el/SharedRules/general.yaml b/Rules/Languages/el/SharedRules/general.yaml index 45b216ce0..e52764195 100644 --- a/Rules/Languages/el/SharedRules/general.yaml +++ b/Rules/Languages/el/SharedRules/general.yaml @@ -3,31 +3,31 @@ # 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][text()='+' or text()='-']" + match: "count(*)=2 and *[2][.='+' or .='-']" replace: - test: if: "$Verbosity!='Terse'" then: - - t: "" # phrase('the' square root of 25 equals 5) + - t: "οι" # phrase('the' square root of 25 equals 5) - bookmark: "*[2]/@id" - test: - - if: "*[2][text()='+']" - then: [{t: "θετικοί"}] # phrase(set of all 'positive' integers less than 10) - else: [{t: "αρνητικοί"}] # phrase(set of all 'negative' integers less than minus 10) + - if: "*[2][.='+']" + then: [t: "θετικοί"] # phrase(set of all 'positive' integers less than 10) + else: [t: "αρνητικοί"] # phrase(set of all 'negative' integers less than minus 10) - bookmark: "*[1]/@id" - test: - - if: "*[1][text()='ℂ']" - then: [{t: "μιγαδικοί αριθμοί"}] # phrase('complex numbers' consist of two parts) - - else_if: "*[1][text()='ℕ']" - then: [{t: "φυσικοί αριθμοί"}] # phrase('natural numbers' are numbers from 1 to infinity) - - else_if: "*[1][text()='ℚ']" - then: [{t: "ρητοί αριθμοί"}] # phrase('rational numbers' are the fraction of 2 integers) - - else_if: "*[1][text()='ℝ']" - then: [{t: "πραγματικοί αριθμοί"}] # phrase('real numbers' can be both positive and negative) - - else_if: "*[1][text()='ℤ']" - then: [{t: "ακέραιοι"}] # phrase(positive 'integers' are natural numbers above 0) - else: [{x: "*[1][text()]"}] # shouldn't happen - + - if: "*[1][.='ℂ']" + then: [t: "μιγαδικοί αριθμοί"] # phrase('complex numbers' consist of two parts) + - else_if: "*[1][.='ℕ']" + then: [t: "φυσικοί αριθμοί"] # phrase('natural numbers' are numbers from 1 to infinity) + - else_if: "*[1][.='ℚ']" + then: [t: "ρητοί αριθμοί"] # phrase('rational numbers' are the fraction of 2 integers) + - else_if: "*[1][.='ℝ']" + then: [t: "πραγματικοί αριθμοί"] # phrase('real numbers' can be both positive and negative) + - else_if: "*[1][.='ℤ']" + then: [t: "ακέραιοι αριθμοί"] # 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) @@ -36,38 +36,170 @@ replace: - bookmark: "*[1]/@id" - test: - - if: "*[1][text()='ℂ']" - then: [{t: "c"}] # phrase(the letter 'C' used to represent complex number) - - else_if: "*[1][text()='ℕ']" - then: [{t: "n"}] # phrase(the letter 'N' may represent natural numbers) - - else_if: "*[1][text()='ℚ']" - then: [{t: "q"}] # phrase(the letter 'Q' may represent rational numbers) - - else_if: "*[1][text()='ℝ']" - then: [{t: "r"}] # phrase(the letter 'R' may represent real numbers) - - else_if: "*[1][text()='ℤ']" - then: [{t: "z"}] # phrase(the letter 'Z' may represent integers) - else: [{x: "*[1][text()]"}] # shouldn't happen + - if: "*[1][.='ℂ']" + then: [t: "c"] # phrase(the letter 'C' used to represent complex number) + - else_if: "*[1][.='ℕ']" + then: [t: "n"] # phrase(the letter 'N' may represent natural numbers) + - else_if: "*[1][.='ℚ']" + then: [t: "q"] # phrase(the letter 'Q' may represent rational numbers) + - else_if: "*[1][.='ℝ']" + then: [t: "r"] # phrase(the letter 'R' may represent real numbers) + - else_if: "*[1][.='ℤ']" + then: [t: "z"] # phrase(the letter 'Z' may represent integers) + else: [x: "*[1][text()]"] # shouldn't happen - bookmark: "*[2]/@id" - - t: "εις την" +# - t: "εις την" - x: "*[2]" - + - name: simple-number-sets tag: number-sets match: "count(*)=0" replace: - bookmark: "@id" - test: - - if: "text()='ℂ'" - then: [{t: "οι μιγαδικοί αριθμοί"}] # phrase('the complex numbers' include 2 parts) - - else_if: "text()='ℕ'" - then: [{t: "οι φυσικοί αριθμοί"}] # phrase('the natural numbers' begin at 1) - - else_if: "text()='ℚ'" - then: [{t: "οι ρητοί αριθμοί"}] # phrase('the rational numbers' are the fraction of 2 integers) - - else_if: "text()='ℝ'" - then: [{t: "οι πραγματικοί αριθμοί"}] # phrase('the real numbers' can be both positive and negative) - - else_if: "text()='ℤ'" - then: [{t: "οι ακέραιοι αριθμοί"}] # phrase('the integers' are natural numbers above 0) - else: [x: "text()"] # shouldn't happen + + # κάτω από ολοκλήρωμα + #- if: "parent::m:munder and ../*[1][.='∫']" + #- if: "parent::*[self::m:munder][*[1][.='∫']]" + - if: "preceding-sibling::*[1][.='∫']" + then: + - test: + - if: ".='ℂ'" + then: [t: "των μιγαδικών αριθμών"] + - else_if: ".='ℕ'" + then: [t: "των φυσικών αριθμών"] + - else_if: ".='ℚ'" + then: [t: "των ρητών αριθμών"] + - else_if: ".='ℝ'" + then: [t: "των πραγματικών αριθμών"] + - else_if: ".='ℤ'" + then: [t: "των ακεραίων αριθμών"] + - else: [x: "text()"] + + # μετά από (δεν) υπάρχει + - else_if: "preceding-sibling::*[1][self::m:mo][.='∈' or .='∉']" + then: + - test: + - if: ".='ℂ'" + then: [t: "στους μιγαδικούς αριθμούς"] + - else_if: ".='ℕ'" + then: [t: "στους φυσικούς αριθμούς"] + - else_if: ".='ℚ'" + then: [t: "στους ρητούς αριθμούς"] + - else_if: ".='ℝ'" + then: [t: "στους πραγματικούς αριθμούς"] + - else_if: ".='ℤ'" + then: [t: "στους ακέραιους αριθμούς"] + #theodora. when unions and intersections have R, C, Q, etc as a condition below them + - else_if: "parent::*[self::m:munder][*[1][self::m:mo][.='∪' or .='∩']]" + then: + - test: + - if: ".='ℂ'" + then: [t: "τους μιγαδικούς αριθμούς"] + - else_if: ".='ℕ'" + then: [t: "τους φυσικούς αριθμούς"] + - else_if: ".='ℚ'" + then: [t: "τους ρητούς αριθμούς"] + - else_if: ".='ℝ'" + then: [t: "τους πραγματικούς αριθμούς"] + - else_if: ".='ℤ'" + then: [t: "τους ακέραιους αριθμούς"] + #theodora. wanted to add logic to read "ανήκει στο for Member and Element (see unicode)" but it was causing problems so commented out +# then: +# - test: +# if: "../../self::m:set or ../../../self::m:set" +# then: [t: "σέ"] +# else: +# - test: +# if: "$ClearSpeak_SetMemberSymbol = 'Member' or $ClearSpeak_SetMemberSymbol = 'Element'" +# then: [t: "σύνολο των μιγαδικών"] +# else: [t: "στους μιγαδικούς αριθμούς"] +# - else_if: ".='ℕ'" +# then: +# - test: +# if: "../../self::m:set or ../../../self::m:set" +# then: [t: "έν"] +# else: +# - test: +# if: "$ClearSpeak_SetMemberSymbol = 'Member' or $ClearSpeak_SetMemberSymbol = 'Element'" +# then: [t: "σύνολο των φυσικών"] +# else: [t: "στους φυσικούς αριθμούς"] +# - else_if: ".='ℚ'" +# then: +# - test: +# if: "../../self::m:set or ../../../self::m:set" +# then: [t: "κιού"] +# else: +# - test: +# if: "$ClearSpeak_SetMemberSymbol = 'Member' or $ClearSpeak_SetMemberSymbol = 'Element'" +# then: [t: "σύνολο των ρητών"] +# else: [t: "στους ρητούς αριθμούς"] +# - else_if: ".='ℝ'" +# then: +# - test: +# if: "../../self::m:set or ../../../self::m:set" +# then: [t: "άρ"] +# else: +# - test: +# if: "$ClearSpeak_SetMemberSymbol = 'Member' or $ClearSpeak_SetMemberSymbol = 'Element'" +# then: [t: "σύνολο των πραγματικών"] +# else: [t: "στους πραγματικούς αριθμούς"] +# - else_if: ".='ℤ'" +# then: +# - test: +# if: "../../self::m:set or ../../../self::m:set" +# then: [t: "ζέντ"] +# else: +# - test: +# if: "$ClearSpeak_SetMemberSymbol = 'Member' or $ClearSpeak_SetMemberSymbol = 'Element'" +# then: [t: "σύνολο των ακεραίων"] +# else: [t: "στους ακέραιους αριθμούς"] + - else: [x: "text()"] + #theodora. ίδια λογική για το (δεν) είναι υποσύνολο , (δεν) είναι υπερσύνολο, (δεν) είναι υποσύνολο η ίσον με, (δεν) είναι υπερσύνολο η ίσο με + - else_if: "preceding-sibling::*[1][self::m:mo][.='⊂' or .='⊄' or .='⊃' or .='⊅' or .='⊏' or .='⊐' or .='⊷' or .='⊶' or .='⋪' or .='⋔']" + then: + - test: + - if: ".='ℂ'" + then: [t: "συνόλου των μιγαδικών αριθμών"] + - else_if: ".='ℕ'" + then: [t: "συνόλου των φυσικών αριθμών"] + - else_if: ".='ℚ'" + then: [t: "συνόλου των ρητών αριθμών"] + - else_if: ".='ℝ'" + then: [t: "συνόλου των πραγματικών αριθμών"] + - else_if: ".='ℤ'" + then: [t: "συνόλου των ακέραιων αριθμών"] + - else: [x: "text()"] + #theodora. ίδια λογική (δεν) είναι υποσύνολο η ίσον με, (δεν) είναι υπερσύνολο η ίσο με + - else_if: "preceding-sibling::*[1][self::m:mo][.='⊆' or .='⊈' or .='⊇' or .='⊉' or .='⊊' or .='⊋' or .='⊑' or .='⊒' or .='⊴' or .='⊵' or .='⋢' or .='⋣' or .='⋤' or .='⋥' or .='⋬' or .='⋭' or .='⫑' or .='⫒' or .='⫉' or .='⫊' or .='⫋' or .='⫌']" + then: + - test: + - if: ".='ℂ'" + then: [t: "τους μιγαδικούς αριθμούς"] + - else_if: ".='ℕ'" + then: [t: "τους φυσικούς αριθμούς"] + - else_if: ".='ℚ'" + then: [t: "τους ρητούς αριθμούς"] + - else_if: ".='ℝ'" + then: [t: "τους πραγματικούς αριθμούς"] + - else_if: ".='ℤ'" + then: [t: "τους ακέραιους αριθμούς"] + - else: [x: "text()"] + + #μόνο του + - else: + - test: + - if: ".='ℂ'" + then: [t: "οι μιγαδικοί αριθμοί"] # phrase('the complex numbers' include 2 parts) + - else_if: ".='ℕ'" + then: [t: "οι φυσικοί αριθμοί"] # phrase('the natural numbers' begin at 1) + - else_if: ".='ℚ'" + then: [t: "οι ρητοί αριθμοί"] # phrase('the rational numbers' are the fraction of 2 integers) + - else_if: ".='ℝ'" + then: [t: "οι πραγματικοί αριθμοί"] # phrase('the real numbers' can be both positive and negative) + - else_if: ".='ℤ'" + then: [t: "οι ακέραιοι αριθμοί"] # phrase('the integers' are natural numbers above 0) + - else: [x: "text()"] # shouldn't happen - name: real-part tag: real-part @@ -90,7 +222,7 @@ replace: - x: "*[1]" - pause: auto - - t: "εκτιμάται στο" # phrase(results were 'evaluated at' a given point) + - t: "υπολογισμένο για" # phrase(results were 'evaluated at' a given point) - pause: auto - x: "*[2]" @@ -100,23 +232,25 @@ replace: - x: "*[1]" - pause: auto - - t: "εκτιμάται στο" # phrase(results were 'evaluated at' this point) + - t: "υπολογισμένο για" # phrase(results were 'evaluated at' this point) - pause: auto - x: "*[3]" - - t: "μείον την ίδια έκφραση που εκτιμάται στο" # phrase(this result is 'minus the same expression evaluated at' an earlier point) + - t: "μείον την ίδια έκφραση υπολογισμένη στο" # phrase(this result is 'minus the same expression evaluated at' an earlier point) - x: "*[2]" -- name: binomial - tag: binomial - match: "count(*)=2 and not(@data-intent-property)" - replace: - - x: "*[1]" - - t: "ανά" # phrase(you can 'choose' a number at random) - - x: "*[2]" +#- name: binomial +# tag: binomial +# match: "count(*)=2 and not(@data-intent-property)" +# replace: +# - x: "*[1]" +# - t: "ανά" # phrase(you can 'choose' a number at random) +# - x: "*[2]" - name: permutation - tag: permutation-symbol - match: "count(*)=2 and not(@data-intent-property)" +# tag: permutation-symbol + # 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: "μεταθέσεις των" # phrase(the solution involves several 'permutations of' values) @@ -124,7 +258,7 @@ - name: intervals tag: [open-interval, open-closed-interval, closed-interval, closed-open-interval] - match: "count(*)=2 and not(@data-intent-property)" + match: "count(*)=2" replace: - test: if: "$Verbosity!='Terse'" @@ -151,16 +285,16 @@ then: - t: "από" # phrase(subtracting 5 'from' 10 gives 5) - x: "*[1]" - - t: "ως" # phrase(adding 6 'to' 6 equals 12) + - t: "ως" # phrase(adding 6 'to' 6 equals 12) - x: "*[2]" else: - x: "*[1]" - - t: "κόμμα" # phrase(use a 'comma' to divide large numbers or as a decimal point) + - t: "κόμμα" # phrase(use a 'comma' to divide large numbers or as a decimal point) - x: "*[2]" - name: default-point tag: point - match: "count(*)=2 and not(@data-intent-property)" + match: "count(*)=2" replace: - test: if: "$Verbosity!='Terse'" @@ -171,54 +305,54 @@ - t: "κόμμα" # phrase(use a 'comma' to divide large numbers or as a decimal point) - x: "*[2]" -- name: absolute-value - tag: absolute-value - match: "count(*)=1 and not(@data-intent-property)" - replace: - - test: - if: "$Verbosity='Terse'" - then: [{t: "απόλυτη τιμή"}] # phrase(the 'absolute value' of a number represents its distance from 0) - else: [{t: "η απόλυτη τιμή του"}] # phrase('the absolute value of' a number represents its distance from 0) - - x: "*[1]" - - test: - if: "IsNode(*[1], 'leaf') or $Impairment != 'Blindness'" - then: [{pause: short}] - else: [{pause: short}, {t: "τέλος απόλυτης τιμής"}, {pause: short}] # phrase(show 'end absolute value' position) - -- name: negative - tag: negative - match: "count(*)=1 and not(@data-intent-property)" - replace: - - bookmark: "./@id" - - t: "μείον" # phrase('negative' numbers are those less than 0) - - x: "*[1]" - -- name: positive - tag: positive - match: "count(*)=1 and not(@data-intent-property)" - replace: - - bookmark: "./@id" - - t: "συν" # phrase(multiplying two negatives results in a 'positive' number) - - x: "*[1]" - -- name: subscript - tag: sub - match: "count(*)=2 and not(@data-intent-property)" - replace: - - x: "*[1]" - - t: "δείκτης" # phrase(the subscripted variable a 'sub' i) - - x: "*[2]" - - test: - if: "DEBUG(not(IsNode(*[2],'leaf')))" - then: - - test: - if: "$Verbosity='Verbose'" - then: {t: "τέλος δείκτη"} # phrase(this is the 'end subscript' position) - else: {t: "τέλος δείκτη"} # 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] +#- name: absolute-value +# tag: absolute-value +# match: "count(*)=1 and not(@data-intent-property)" +# replace: +# - test: +# if: "$Verbosity='Terse'" +# then: [t: "απόλυτη τιμή"] # phrase(the 'absolute value' of a number represents its distance from 0) +# else: [t: "η απόλυτη τιμή του"] # phrase('the absolute value of' a number represents its distance from 0) +# - x: "*[1]" +# - test: +# if: "IsNode(*[1], 'leaf') or $Impairment != 'Blindness'" +# then: [pause: short] +# else: [pause: short}, [t: "τέλος απόλυτης τιμής"], {pause: short] # phrase(show 'end absolute value' position) +# +#- name: negative +# tag: negative +# match: "count(*)=1 and not(@data-intent-property)" +# replace: +# - bookmark: "./@id" +# - t: "μείον" # phrase('negative' numbers are those less than 0) +# - x: "*[1]" +# +#- name: positive +# tag: positive +# match: "count(*)=1 and not(@data-intent-property)" +# replace: +# - bookmark: "./@id" +# - t: "συν" # phrase(multiplying two negatives results in a 'positive' number) +# - x: "*[1]" +# +#- name: subscript +# tag: sub +# match: "count(*)=2 and not(@data-intent-property)" +# replace: +# - x: "*[1]" +# - t: "δείκτης" # phrase(the subscripted variable a 'sub' i) +# - x: "*[2]" +# - test: +# if: "DEBUG(not(IsNode(*[2],'leaf')))" +# then: +# - test: +# if: "$Verbosity='Verbose'" +# then: [t: "τέλος δείκτη"] # phrase(this is the 'end subscript' position) +# else: [t: "τέλος δείκτη"] # 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] - name: bigop-both tag: large-op @@ -226,7 +360,7 @@ replace: - test: if: "$Verbosity!='Terse'" - then: [{t: ""}] # phrase('the' square root of 25 equals 5) + then: [t: ""] # phrase('the' square root of 25 equals 5) - x: "*[1]" - t: "από" # phrase(subtracting 5 'from' 10 gives 5) - x: "*[2]" @@ -234,21 +368,27 @@ - x: "*[3]" - test: if: "following-sibling::*" - then: [{t: "του"}] # phrase(the square root 'of' 25 equals 5) + then: [t: "του"] # phrase(the square root 'of' 25 equals 5) - name: bigop-under tag: large-op - match: "count(*)=2 and not(@data-intent-property)" + match: "count(*)=2" replace: - test: if: "$Verbosity!='Terse'" - then: [{t: ""}] # phrase('the' square root of 25 equals 5) + then: [t: ""] # phrase('the' square root of 25 equals 5) - x: "*[1]" - - t: "πάνω από" # phrase(2 'over' 3 equals two thirds) #theodora. this expression is not the most suitable in greek for integrals, but it works. + - test: + - if: "*[1][.='∫'] and *[2][self::m:mrow]" + then: [t: "για"] + - else_if: "*[1][.='∫']" + then: [t: "επί του συνόλου"] + - else: + - t: "για" - x: "*[2]" - test: if: "following-sibling::*" - then: [{t: "του"}] # phrase(the square root 'of' 25 equals 5) + then: [t: "του"] # phrase(the square root 'of' 25 equals 5) - name: largeop tag: mrow @@ -256,52 +396,60 @@ replace: - test: if: "$Verbosity!='Terse'" - then: [{t: ""}] # phrase('the' square root of 25 equals 5) #theodora. in greek "the" is depended on the following word and syntax of the sentence. it is better to leave it blank where multiple cases are needed. + then: [t: ""] # phrase('the' square root of 25 equals 5) #theodora. in greek "the" is depended on the following word and syntax of the sentence. it is better to leave it blank where multiple cases are needed. - x: "*[1]" - t: "του" # phrase(the square root 'of' 25 equals 5) - x: "*[2]" -- name: limit - tag: limit - match: "count(*)=2 and not(@data-intent-property)" - replace: - - test: - if: "$Verbosity!='Terse'" - then: [{t: "το όριο όταν"}] # phrase('the limit as' indicated by this result) - else: [{t: "όριο όταν"}] # phrase(the 'limit as' indicated by this result) - - x: "*[2]" - - pause: short - -- name: vector - tag: modified-variable - match: "count(*)=2 and *[2][text()='→']" - replace: - - t: "διάνυσμα" # phrase(the 'vector' reflects size and direction) - - x: "*[1]" - -- name: default - - tag: modified-variable - match: "count(*)=2 and not(@data-intent-property)" - replace: - - x: "*[1]" - - x: "*[2]" - - pause: short - -- name: default - # handles single, double, etc., prime - tag: [skip-super, say-super] - match: "count(*)=2" +#- name: limit +# tag: limit +# match: "count(*)=2 and not(@data-intent-property)" +# replace: +# - test: +# if: "$Verbosity!='Terse'" +# then: [t: "το όριο όταν"] # phrase('the limit as' indicated by this result) +# else: [t: "όριο όταν"] # phrase(the 'limit as' indicated by this result) +# - x: "*[2]" +# - pause: short + +#- name: vector +# tag: modified-variable +# match: "count(*)=2 and *[2][text()='→']" +# replace: +# - t: "διάνυσμα" # phrase(the 'vector' reflects size and direction) +# - x: "*[1]" +# +#- name: default +# +# tag: modified-variable +# match: "count(*)=2 and not(@data-intent-property)" +# replace: +# - x: "*[1]" +# - x: "*[2]" +# - pause: short +# +#- name: default +# # handles single, double, etc., prime +# tag: [skip-super, say-super] +# match: "count(*)=2" +# replace: +# - x: "*[1]" +# - test: +# if: "name(.)='say-super'" +# then_test: +# if: "$Verbosity='Terse'" +# then: [t: "στη"] # phrase(this is a 'super' set of numbers) +# else: [t: "με εκθέτη"] # phrase(a 'superscript' number indicates raised to a power) +# - x: "*[2]" +# - pause: short + +- name: repeating-decimal + tag: repeating-decimal + match: "." replace: - x: "*[1]" - - test: - if: "name(.)='say-super'" - then_test: - if: "$Verbosity='Terse'" - then: {t: "στη"} # phrase(this is a 'super' set of numbers) - else: {t: "με εκθέτη"} # phrase(a 'superscript' number indicates raised to a power) - - x: "*[2]" - - pause: short + - t: "with repeating digits" # phrase('with repeating digits') + - spell: "*[2]" - name: msubsup-skip-super # handles single, double, etc., prime @@ -311,16 +459,16 @@ - x: "*[1]" - test: if: "$Verbosity='Verbose'" - then: {t: "με δείκτη"} # phrase(a 'subscript' may be used to indicate an index) - else: {t: "δείκτης"} # phrase(the result is 'sub' optimal) + then: [t: "με δείκτη"] # phrase(a 'subscript' may be used to indicate an index) + else: [t: "δείκτης"] # phrase(the result is 'sub' optimal) - x: "*[2]" - test: - if: "DEBUG(not(IsNode(*[2],'leaf')))" + if: "not(IsNode(*[2],'leaf') and $Impairment = 'Blindness')" then: - test: if: "$Verbosity='Verbose'" - then: {t: "τέλος δείκτη"} # phrase(this is the 'end subscript' position) - else: {t: "τέλος δείκτη"} # phrase(this is the 'end sub' position) + then: [t: "τέλος δείκτη"] # phrase(this is the 'end subscript' position) + else: [t: "τέλος δείκτη"] # 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' @@ -329,106 +477,200 @@ if: "name(.)='say-super'" then_test: if: "$Verbosity='Verbose'" - then: {t: "με εκθέτη"} # phrase(a 'superscript' number indicates raised to a power) - else: {t: "στη"} # phrase(this is a 'super' set of numbers) + then: [t: "με εκθέτη"] # phrase(a 'superscript' number indicates raised to a power) + else: [t: "στην"] # phrase(this is a 'super' set of numbers) - x: "*[3]" - pause: short - -############### greek to greek -- name: ημ - tag: mi - match: "text()='ημ'" - replace: - - bookmark: "@id" - - t: "ημίτονο" # phrase(the 'sine' of the angle) -- name: συν - tag: mi - match: "text()='συν'" - replace: - - bookmark: "@id" - - test: - if: "$Verbosity='Terse'" - then: {t: "συνημίτονο"} # phrase('cos' is the abbreviation for cosine) - else: {t: "συνημίτονο"} # phrase(find the 'cosine' in a right-angle triangle) -- name: εφ - tag: mi - match: "text()='εφ' or text()='εφαπτ'" - replace: - - bookmark: "@id" - - test: - if: "$Verbosity='Terse'" - then: {t: "εφαπτομένη"} # phrase(the 'tan' is the ratio of the opposite to the adjacent side of a right-angled triangle) - else: {t: "εφαπτομένη"} # phrase(a 'tangent' is a straight line that touches a curve) -- name: σφ - tag: mi - match: "text()='σφ'" - replace: - - bookmark: "@id" - - test: - if: "$Verbosity='Terse'" - then: {t: "συνεφαπτομένη"} # phrase(find the 'cotangent' in a right-angle triangle) - else: {t: "συνεφαπτομένη"} # phrase(the 'cotangent' is the reciprocal of the tangent) -- name: τεμ - tag: mi - match: "text()='τεμ'" +# 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" - - test: - if: "$Verbosity='Terse'" - then: {t: "τέμνουσα"} # phrase(to 'seek' a solution) - else: {t: "τέμνουσα"} # phrase(a 'secant' intersects a curve at two or more points) -- name: στεμ - tag: mi - match: "text()='στεμ'" - replace: - - bookmark: "@id" - - test: - if: "$Verbosity='Terse'" - then: {t: "συντέμνουσα"} # phrase(we will 'cosecant' a solution) #theodora. how is this case different than the following line? - else: {t: "συντέμνουσα"} # phrase(the 'cosecant' is the reciprocal of the secant) - - -- name: ΕΚΠ - tag: mi - match: "text()='ΕΚΠ'" - replace: - - bookmark: "@id" - - test: - if: "$Verbosity='Terse'" - then: {t: "ελάχιστο κοινό πολλαπλάσιο"} - else: {t: "ελάχιστο κοινό πολλαπλάσιο"} - -- name: ΜΚΔ - tag: mi - match: "text()='ΜΚΔ'" + - 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: - if: "$Verbosity='Terse'" - then: {t: "μέγιστος κοινός διαιρέτης"} - else: {t: "μέγιστος κοινός διαιρέτης"} + # is the whole string match a SI Unit without a prefix? + - if: "DefinitionValue(., 'Speech', 'SIUnits') != ''" + then: + - set_variables: [Word: "DefinitionValue(., 'Speech', 'SIUnits')"] + - else_if: "DefinitionValue(., 'Speech', 'UnitsWithoutPrefixes') != ''" + then: + - set_variables: [Word: "DefinitionValue(., 'Speech', 'UnitsWithoutPrefixes')"] + - else_if: "DefinitionValue(., 'Speech', 'EnglishUnits') != ''" + then: + - set_variables: [Word: "DefinitionValue(., 'Speech', 'EnglishUnits')"] + # do the first two chars match "da" and the remainder match an SIUnit + - else_if: "string-length(.) >= 3 and + substring(., 1, 2) = 'da' and + DefinitionValue(substring(., 3), 'Speech', 'SIUnits') != ''" + then: + - set_variables: + - Prefix: "DefinitionValue('da', 'Speech', 'SIPrefixes')" + - Word: "DefinitionValue(substring(., 3), 'Speech', 'SIUnits')" + + # does the first char match a prefix and the remainder match an SIUnit + - else_if: "string-length(.) >= 2 and + DefinitionValue(substring(., 1, 1), 'Speech', 'SIPrefixes') != '' and + DefinitionValue(substring(., 2), 'Speech', 'SIUnits') != ''" + then: + - set_variables: + - Prefix: "DefinitionValue(substring(., 1, 1), 'Speech', 'SIPrefixes')" + - Word: "DefinitionValue(substring(., 2), 'Speech', 'SIUnits')" + + # not a known unit -- just speak the text, possibly as a plural + - else: + - set_variables: + - Word: "text()" + + # somewhat complicated logic to avoid spaces around "-" as in "centi-grams" vs "centi - grams" -- probably doesn't matter + - test: + if: "$Prefix = ''" + then: + - test: + - if: "$IsSingular" + # HACK: '\uF8FE' is used internally for the concatenation char by 'ct' -- this gets the prefix concatenated to the base + then: [x: "$Word"] + - else_if: "DefinitionValue($Word, 'Speech', 'PluralForms') != ''" + then: [x: "DefinitionValue($Word, 'Speech', 'PluralForms')"] + else: [x: "$Word", ct: "s"] + else: + - x: "$Prefix" + - ct: "-" + - test: + - if: "$IsSingular" + # HACK: '\uF8FE' is used internally for the concatenation char by 'ct' -- this gets the prefix concatenated to the base + then: [x: "concat('\uF8FE', $Word)"] + - else_if: "DefinitionValue($Word, 'Speech', 'PluralForms') != ''" + then: [x: "concat('\uF8FE', DefinitionValue($Word, 'Speech', 'PluralForms'))"] + else: [x: "concat('\uF8FE', $Word)", ct: "s"] + + +# theodora +############### greek to greek +#- name: ημ +# tag: mi +# match: "text()='ημ'" +# replace: +# - bookmark: "@id" +# - t: "ημίτονο" # phrase(the 'sine' of the angle) +#- name: συν +# tag: mi +# match: "text()='συν'" +# replace: +# - bookmark: "@id" +# - test: +# if: "$Verbosity='Terse'" +# then: [t: "συνημίτονο"] # phrase('cos' is the abbreviation for cosine) +# else: [t: "συνημίτονο"] # phrase(find the 'cosine' in a right-angle triangle) +#- name: εφ +# tag: mi +# match: "text()='εφ' or text()='εφαπτ'" +# replace: +# - bookmark: "@id" +# - test: +# if: "$Verbosity='Terse'" +# then: [t: "εφαπτομένη"] # phrase(the 'tan' is the ratio of the opposite to the adjacent side of a right-angled triangle) +# else: [t: "εφαπτομένη"] # phrase(a 'tangent' is a straight line that touches a curve) +#- name: σφ +# tag: mi +# match: "text()='σφ'" +# replace: +# - bookmark: "@id" +# - test: +# if: "$Verbosity='Terse'" +# then: [t: "συνεφαπτομένη"] # phrase(find the 'cotangent' in a right-angle triangle) +# else: [t: "συνεφαπτομένη"] # phrase(the 'cotangent' is the reciprocal of the tangent) +#- name: τεμ +# tag: mi +# match: "text()='τεμ'" +# replace: +# - bookmark: "@id" +# - test: +# if: "$Verbosity='Terse'" +# then: [t: "τέμνουσα"] # phrase(to 'seek' a solution) +# else: [t: "τέμνουσα"] # phrase(a 'secant' intersects a curve at two or more points) +#- name: στεμ +# tag: mi +# match: "text()='στεμ'" +# replace: +# - bookmark: "@id" +# - test: +# if: "$Verbosity='Terse'" +# then: [t: "συντέμνουσα"] # phrase(we will 'cosecant' a solution) #theodora. how is this case different than the following line? +# else: [t: "συντέμνουσα"] # phrase(the 'cosecant' is the reciprocal of the secant) +# +# +#- name: ΕΚΠ +# tag: mi +# match: "text()='ΕΚΠ'" +# replace: +# - bookmark: "@id" +# - test: +# if: "$Verbosity='Terse'" +# then: [t: "ελάχιστο κοινό πολλαπλάσιο"] +# else: [t: "ελάχιστο κοινό πολλαπλάσιο"] +# +#- name: ΜΚΔ +# tag: mi +# match: "text()='ΜΚΔ'" +# replace: +# - bookmark: "@id" +# - test: +# if: "$Verbosity='Terse'" +# then: [t: "μέγιστος κοινός διαιρέτης"] +# else: [t: "μέγιστος κοινός διαιρέτης"] + +# theodora ############### non-existent english to greek - name: gcd tag: mi - match: "text()='max'" + match: ".='μκδ'" replace: - bookmark: "@id" - test: if: "$Verbosity='Terse'" - then: {t: "greatest common denominator"} - else: {t: "μέγιστος κοινός διαιρέτης"} + then: [t: "μέγιστος κοινός διαιρέτης"] + else: [t: "μέγιστος κοινός διαιρέτης"] - name: lcm tag: mi - match: "text()='max'" + match: ".='εκπ'" replace: - bookmark: "@id" - test: if: "$Verbosity='Terse'" - then: {t: "least common multiple"} - else: {t: "ελάχιστο κοινό πολλαπλάσιο"} + then: [t: "ελάχιστο κοινό πολλαπλάσιο"] + else: [t: "ελάχιστο κοινό πολλαπλάσιο"] - name: max tag: mi @@ -437,368 +679,445 @@ - bookmark: "@id" - test: if: "$Verbosity='Terse'" - then: {t: "μαξ"} - else: {t: "μέγιστο"} + then: [t: "μαξ"] + else: [t: "μέγιστο"] - name: min tag: mi - match: "text()='min'" + match: ".='min'" replace: - bookmark: "@id" - test: if: "$Verbosity='Terse'" - then: {t: "μιν"} - else: {t: "ελάχιστο"} + then: [t: "μιν"] + else: [t: "ελάχιστο"] - name: sgn tag: mi - match: "text()='min'" + match: ".='sgn'" replace: - bookmark: "@id" - test: if: "$Verbosity='Terse'" - then: {t: "σάιν"} - else: {t: "πρόσημο"} + then: [t: "σάιν"] + else: [t: "πρόσημο"] - name: arg tag: mi - match: "text()='min'" + match: ".='arg'" replace: - bookmark: "@id" - test: if: "$Verbosity='Terse'" - then: {t: "άργκιουμεντ"} - else: {t: "όρισμα"} + then: [t: "άργκιουμεντ"] + else: [t: "όρισμα"] - name: arc tag: mi - match: "text()='min'" + match: ".='arc'" replace: - bookmark: "@id" - test: if: "$Verbosity='Terse'" - then: {t: "αρκ"} - else: {t: "τόξο"} + then: [t: "τόξο"] + else: [t: "τόξο"] - name: det tag: mi - match: "text()='min'" + match: ".='det'" replace: - bookmark: "@id" - test: if: "$Verbosity='Terse'" - then: {t: "ντετ"} - else: {t: "ορίζουσα΄"} + then: [t: "ντετ"] + else: [t: "ορίζουσα"] - name: grad tag: mi - match: "text()='min'" + match: ".='grad'" replace: - bookmark: "@id" - test: if: "$Verbosity='Terse'" - then: {t: "γκραντ"} - else: {t: "κλίση"} + then: [t: "γκραντ"] + else: [t: "κλίση"] - name: ker tag: mi - match: "text()='min'" + match: ".='ker'" + replace: + - bookmark: "@id" + - test: + if: "$Verbosity='Terse'" + then: [t: "πυρήνας"] + else: [t: "πυρήνας"] + +- name: limsup + tag: mi + match: ".='limsup'" replace: - bookmark: "@id" - test: if: "$Verbosity='Terse'" - then: {t: "κέρνελ"} - else: {t: "πυρήνας"} + then: [t: "ανώτατο όριο"] + else: [t: "ανώτατο όριο"] +- name: liminf + tag: mi + match: ".='liminf'" + replace: + - bookmark: "@id" + - test: + if: "$Verbosity='Terse'" + then: [t: "κατώτατο όριο"] + else: [t: "κατώτατο όριο"] +################# non-existent english to english +#theodora. needed for proper pronounciation, otherwise doesn't sound good. - name: mod tag: mi - match: "text()='min'" + match: "text()='mod'" replace: - bookmark: "@id" - test: if: "$Verbosity='Terse'" - then: {t: "μοντ"} - else: {t: "μόντουλο"} - -############### non-existent english to english - + then: [t: "μοντ"] + else: [t: "μόντουλο"] + - name: sup tag: mi - match: "text()='sup'" + match: ".='sup'" replace: - bookmark: "@id" - test: if: "$Verbosity='Terse'" - then: {t: "σουπ"} - else: {t: "σουπρέμουμ"} - -#- name: inf - #tag: mi - #match: "text()='inf'" - #replace: - #- bookmark: "@id" - #- test: - #if: "$Verbosity='Terse'" - #then: {t: "inf"} - #else: {t: "infimum"} - - ############### + then: [t: "σουπ"] + else: [t: "σουπρέμουμ"] + +- name: infimum #theodora. inf cannot be used, it produces parsing errors + tag: mi + match: ".='inf'" + replace: + - bookmark: "@id" + - test: + if: "$Verbosity='Terse'" + then: [t: "ινφ"] + else: [t: "ινφίμουμ"] +##################### - name: sin tag: mi - match: "text()='sin'" + match: ".='sin'" replace: - bookmark: "@id" - t: "ημίτονο" # phrase(the 'sine' of the angle) - name: cos tag: mi - match: "text()='cos'" + match: ".='cos'" replace: - bookmark: "@id" - test: if: "$Verbosity='Terse'" - then: {t: "συνημίτονο"} # phrase('cos' is the abbreviation for cosine) - else: {t: "συνημίτονο"} # phrase(find the 'cosine' in a right-angle triangle) + then: [t: "συνημίτονο"] # phrase('cos' is the abbreviation for cosine) + else: [t: "συνημίτονο"] # phrase(find the 'cosine' in a right-angle triangle) - name: tan tag: mi - match: "text()='tan' or text()='tg'" + match: ".='tan' or .='tg'" replace: - bookmark: "@id" - test: if: "$Verbosity='Terse'" - then: {t: "εφαπτομένη"} # phrase(the 'tan' is the ratio of the opposite to the adjacent side of a right-angled triangle) - else: {t: "εφαπτομένη"} # phrase(a 'tangent' is a straight line that touches a curve) + then: [t: "εφαπτομένη"] # phrase(the 'tan' is the ratio of the opposite to the adjacent side of a right-angled triangle) + else: [t: "εφαπτομένη"] # phrase(a 'tangent' is a straight line that touches a curve) - name: sec tag: mi - match: "text()='sec'" + match: ".='sec'" replace: - bookmark: "@id" - test: if: "$Verbosity='Terse'" - then: {t: "τέμνουσα"} # phrase(to 'seek' a solution) - else: {t: "τέμνουσα"} # phrase(a 'secant' intersects a curve at two or more points) + then: [t: "τέμνουσα"] # phrase(to 'seek' a solution) + else: [t: "τέμνουσα"] # phrase(a 'secant' intersects a curve at two or more points) - name: csc tag: mi - match: "text()='csc'" + match: ".='csc'" replace: - bookmark: "@id" - test: if: "$Verbosity='Terse'" - then: {t: "συντέμνουσα"} # phrase(we will 'cosecant' a solution) #theodora. how is this case different than the following line? - else: {t: "συντέμνουσα"} # phrase(the 'cosecant' is the reciprocal of the secant) + then: [t: "συντέμνουσα"] # phrase(we will 'cosecant' a solution) + else: [t: "συντέμνουσα"] # phrase(the 'cosecant' is the reciprocal of the secant) - name: cot tag: mi - match: "text()='cot'" + match: ".='cot'" replace: - bookmark: "@id" - test: if: "$Verbosity='Terse'" - then: {t: "συνεφαπτομένη"} # phrase(find the 'cotangent' in a right-angle triangle) - else: {t: "συνεφαπτομένη"} # phrase(the 'cotangent' is the reciprocal of the tangent) + then: [t: "συνεφαπτομένη"] # phrase(find the 'cotangent' in a right-angle triangle) + else: [t: "συνεφαπτομένη"] # phrase(the 'cotangent' is the reciprocal of the tangent) - name: sinh tag: mi - match: "text()='sinh'" + match: ".='sinh'" replace: - bookmark: "@id" - test: if: "$Verbosity='Terse'" - then: {t: "υπερβολικό ημίτονο"} # phrase(the word 'sinch' is an abbreviation for hyperbolic sine) - else: {t: "υπερβολικό ημίτονο"} # phrase(the 'hyperbolic sine' is used in mathematics) + then: [t: "υπερβολικό ημίτονο"] # phrase(the word 'sinch' is an abbreviation for hyperbolic sine) + else: [t: "υπερβολικό ημίτονο"] # phrase(the 'hyperbolic sine' is used in mathematics) - name: cosh tag: mi - match: "text()='cosh'" + match: ".='cosh'" replace: - bookmark: "@id" - test: if: "$Verbosity='Terse'" - then: {t: "υπερβολικό συνημίτονο"} # phrase('cosh' is an abbreviation of hyperbolic cosine) - else: {t: "υπερβολικό συνημίτονο"} # phrase(the 'hyperbolic cosine' is a mathematical function) + then: [t: "υπερβολικό συνημίτονο"] # phrase('cosh' is an abbreviation of hyperbolic cosine) + else: [t: "υπερβολικό συνημίτονο"] # phrase(the 'hyperbolic cosine' is a mathematical function) - name: tanh tag: mi - match: "text()='tanh'" + match: ".='tanh'" replace: - bookmark: "@id" - test: if: "$Verbosity='Terse'" - then: {t: "υπερβολική εφαπτομένη"} # phrase('tanch' is shorthand for hyperbolic tangent) - else: {t: "υπερβολική εφαπτομένη"} # phrase('hyperbolic tangent' is a mathematical function) + then: [t: "υπερβολική εφαπτομένη"] # phrase('tanch' is shorthand for hyperbolic tangent) + else: [t: "υπερβολική εφαπτομένη"] # phrase('hyperbolic tangent' is a mathematical function) - name: sech tag: mi - match: "text()='sech'" + match: ".='sech'" replace: - bookmark: "@id" - test: if: "$Verbosity='Terse'" - then: {t: "υπερβολική τέμνουσα"} # phrase('sheck' is shorthand for hyperbolic secant) - else: {t: "υπερβολική τέμνουσα"} # phrase('hyperbolic secant' is a mathematical function) + then: [t: "υπερβολική τέμνουσα"] # phrase('sheck' is shorthand for hyperbolic secant) + else: [t: "υπερβολική τέμνουσα"] # phrase('hyperbolic secant' is a mathematical function) - name: csch tag: mi - match: "text()='csch'" + match: ".='csch'" replace: - bookmark: "@id" - test: if: "$Verbosity='Terse'" - then: {t: "υπερβολική συντέμνουσα"} # phrase('cosheck' is shorthand for hyperbolic cosecant) - else: {t: "υπερβολική συντέμνουσα"} # phrase('hyperbolic cosecant' is a mathematical function) + then: [t: "υπερβολική συντέμνουσα"] # phrase('cosheck' is shorthand for hyperbolic cosecant) + else: [t: "υπερβολική συντέμνουσα"] # phrase('hyperbolic cosecant' is a mathematical function) - name: coth tag: mi - match: "text()='coth'" + match: ".='coth'" replace: - bookmark: "@id" - test: if: "$Verbosity='Terse'" - then: {t: "υπερβολική συνεφαπτομένη"} # phrase('cotanch' is shorthand for hyperbolic cotangent) - else: {t: "υπερβολική συνεφαπτομένη"} # phrase(the 'hyperbolic cotangent' is a mathematical function) - -- # handle both log and ln - name: log - tag: mrow - variables: [{log_is_simple: "IsNode(*[3],'simple')"}] - match: - - "count(*)=3 and" - - "*[1][self::m:mi][text()='log' or text()='ln'] and" - - "*[2][self::m:mo][text()='⁡']" + then: [t: "υπερβολική συνεφαπτομένη"] # phrase('cotanch' is shorthand for hyperbolic cotangent) + else: [t: "υπερβολική συνεφαπτομένη"] # phrase(the 'hyperbolic cotangent' is a mathematical function) +- name: exponential + tag: mi + match: ".='exp'" replace: - - bookmark: "*[1]/@id" + - bookmark: "@id" - test: - if: "$log_is_simple" - then_test: - - if: "*[1][text()='log']" - then: [{t: "λογάριθμος"}] # phrase(the 'log' function is used in mathematics) - - else_if: "$Verbosity='Terse'" - then: [{spell: "'ln'"}] - else: [{t: "φυσικός λογάριθμος"}] # phrase(the 'natural log' function is used in mathematics) - else: - - test: - if: "$Verbosity!='Terse' and not(log_is_simple)" - then: {t: "ο"} # phrase('the' square root of 25 equals 5) - - test: - - if: "*[1][text()='log']" - then: [{t: "λογάριθμος"}] # phrase(the 'log' function is used in mathematics) - - else_if: "$Verbosity='Terse'" - then: [{spell: "'ln'"}] - else: [{t: "φυσικός λογάριθμος"}] # phrase(the 'natural log' function is used in mathematics) - - t: "του" # phrase(5 is the square root 'of' 25) - - pause: short - - x: "*[3]" - -- name: log-base - tag: log-base - match: "not(@data-intent-property)" + if: "$Verbosity='Terse'" + then: [t: "εκθετική"] # phrase('exp' means exponential function) + else: [t: "εκθετική"] # phrase('exponential' function) +- name: covariance + tag: mi + match: ".='Cov'" replace: - bookmark: "@id" - test: - if: "$Verbosity!='Terse'" - then: {t: "ο"} # phrase('the' square root of 25 equals 5) - - t: "λογάριθμος με βάση" # phrase(the 'log base' is often base 10) - - x: "*[1]" - -- name: log-base-power - tag: log-base-power - match: "not(@data-intent-property)" + if: "$Verbosity='Terse'" + then: [t: "συνδιακύμανση"] # phrase('Cov' is shorthand for the covariance function) + else: [t: "συνδιακύμανση"] # phrase('covariance' function) + +#- # handle both log and ln +# name: log +# tag: mrow +# variables: [log_is_simple: "IsNode(*[3],'simple')"] +# match: +# - "count(*)=3 and" +# - "*[1][self::m:mi][text()='log' or text()='ln'] and" +# - "*[2][self::m:mo][text()='⁡']" +# replace: +# - bookmark: "*[1]/@id" +# - test: +# if: "$log_is_simple" +# then_test: +# - if: "*[1][text()='log']" +# then: [t: "λογάριθμος"] # phrase(the 'log' function is used in mathematics) +# - else_if: "$Verbosity='Terse'" +# then: [spell: "'ln'"] +# else: [t: "φυσικός λογάριθμος"] # phrase(the 'natural log' function is used in mathematics) +# else: +# - test: +# if: "$Verbosity!='Terse' and not(log_is_simple)" +# then: [t: "ο"] # phrase('the' square root of 25 equals 5) +# - test: +# - if: "*[1][text()='log']" +# then: [t: "λογάριθμος"] # phrase(the 'log' function is used in mathematics) +# - else_if: "$Verbosity='Terse'" +# then: [spell: "'ln'"] +# else: [t: "φυσικός λογάριθμος"] # phrase(the 'natural log' function is used in mathematics) +# - t: "του" # phrase(5 is the square root 'of' 25) +# - pause: short +# - x: "*[3]" + +#- name: log-base +# tag: log-base +# match: "not(@data-intent-property)" +# replace: +# - bookmark: "@id" +# - test: +# if: "$Verbosity!='Terse'" +# then: [t: "ο"] # phrase('the' square root of 25 equals 5) +# - t: "λογάριθμος με βάση" # phrase(the 'log base' is often base 10) +# - x: "*[1]" + +#- name: log-base-power +# tag: log-base-power +# match: "not(@data-intent-property)" +# replace: +# - bookmark: "@id" +# - test: +# if: "$Verbosity!='Terse'" +# then: [t: "ο"] # phrase('the' square root of 25 equals 5) +# - t: "λογάριθμος με βάση" # phrase(the 'log base' is often base 10) +# - x: "*[1]" +# - pause: medium +# - test: +# - if: "*[2][text()=2]" +# then: [t: "στο τετραγωνο"] +# - else_if: "*[2][text()=3]" +# then: [t: "στον κύβο"] +# else: # don't bother with special cases as this isn't likely to happen +# - t: "υψωμένο στη" # phrase(x 'raised to the' second power) +# - x: "*[2]" +# - t: "τέλος δύναμης" # phrase(x raised to the second 'power') +# - pause: short + +- name: log # handle both log and ln (if in an mrow, 'intents' are used) + tag: mi + match: ".='log' or .='ln'" replace: - - bookmark: "@id" + - bookmark: "@id" - test: - if: "$Verbosity!='Terse'" - then: {t: "ο"} # phrase('the' square root of 25 equals 5) - - t: "λογάριθμος με βάση" # phrase(the 'log base' is often base 10) - - x: "*[1]" - - pause: medium + - if: "ancestor::m:mrow[1]/preceding-sibling::*[1][self::m:mo and (.='=' or .='<' or .='>' or .='≤' or .='≥' or .='≰' or .='≱' or .='≮' or .='≯' or .='≝' or .='≡' or .='≃' or .='≄' or .='≅' or .='≆' or .='≇' or .='≈' or .='≉' or .='≊' or .='≢' or .='≨' or .='≩' or .='≞' or .='≪' or .='≫' or .='⫹' or .='⫺' or .='≼' or .='≽' or .='⋠' or .='⋡')] and $Verbosity!='Terse'" + then: [t: "το"] #theodora = το όχι τον για να πιάνει και τον λογάριθμο και το l n. πάνω μπορέι να χρειαστεί να προσθέσω κι άλλα σύμβολα που τελειώνουν με "με" ή "από" + - else_if: "$Verbosity!='Terse'" + then: [t: "ο"] +# - if: "$Verbosity!='Terse'" +# then: [t: "ο"] # phrase('the' logarithm function is used in mathematics) - test: - - if: "*[2][text()=2]" - then: [t: "στο τετραγωνο"] - - else_if: "*[2][text()=3]" - then: [t: "στον κύβο"] - else: # don't bother with special cases as this isn't likely to happen - - t: "υψωμένο στη" # phrase(x 'raised to the' second power) - - x: "*[2]" - - t: "τέλος δύναμης" # phrase(x raised to the second 'power') - - pause: short + - if: ".='log'" + then: + - test: + - if: "ancestor::m:mrow[1]/preceding-sibling::*[1][self::m:mo and (.='=' or .='<' or .='>' or .='≤' or .='≥' or .='≰' or .='≱' or .='≮' or .='≯' or .='≝' or .='≡' or .='≃' or .='≄' or .='≅' or .='≆' or .='≇' or .='≈' or .='≉' or .='≊' or .='≢' or .='≨' or .='≩' or .='≞' or .='≪' or .='≫' or .='⫹' or .='⫺' or .='≼' or .='≽' or .='⋠' or .='⋡')]" + then: [t: "λογάριθμο"] + else: [t: "λογάριθμος"] + - else: + - test: + - if: "$Verbosity='Terse'" + then: [spell: "'ln'"] + - else_if: "ancestor::m:mrow[1]/preceding-sibling::*[1][self::m:mo and (.='=' or .='<' or .='>' or .='≤' or .='≥' or .='≰' or .='≱' or .='≮' or .='≯' or .='≝' or .='≡' or .='≃' or .='≄' or .='≅' or .='≆' or .='≇' or .='≈' or .='≉' or .='≊' or .='≢' or .='≨' or .='≩' or .='≞' or .='≪' or .='≫' or .='⫹' or .='⫺' or .='≼' or .='≽' or .='⋠' or .='⋡')]" + then: [t: "φυσικό λογάριθμο"] + else: [t: "φυσικός λογάριθμος"] + + + +# then: [t: "λογάριθμος"] # phrase(the 'log' function is used in mathematics) +# - else_if: "$Verbosity='Terse'" +# then: [spell: "'ln'"] +# else: [t: "φυσικός λογάριθμος"] # 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: [cases, equations, lines] + 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) - - LineCountTry: "count(*/*[1][count(*)=1 and *[1][@data-added!='missing-content']])" - - LineCount: "IfThenElse($LineCountTry=0, count(*/*[1]), $LineCountTry)" + - LineCount: "count(*[not(contains(@data-intent-property, ':continued-row:'))])" + - NextLineIsContinuedRow: "false()" # default value + - IsColumnSilent: true() replace: - x: "$LineCount" - test: - - if: "self::m:cases" - then: [{t: "περιπτώσεις"}] # phrase(this is the first 'case' of three cases) #change - - else_if: "self::m:equations" - then: [{t: "εξισώσεις"}] # phrase(this is the first 'equation' of three equations) - else: [{t: "γραμμές"}] # phrase(this is the first 'line' of three lines) - - test: - - if: "$LineCount = 1" - then: - test: - - if: "self::m:cases" - then: [{t: "περίπτωση"}] - - else_if: "self::m:equations" - then: [{t: "εξίσωση"}] - - else: [{t: "γραμμή"}] + - if: "self::m:piecewise" + then: + - test: + - if: "$LineCount = 1" + then: [t: "περίπτωση"] # phrase(this is the first 'case' of three cases) #change + else: [t: "περιπτώσεις"] # plural - # theodora. the previous was changed because the plural is formed individually in greek. - # Singular: εξίσωση--> plural: εξισώσεις, singular: περίπτωση-->plural: περιπτώσεις, - # singular: γραμμή--> plural: γραμμές - # i think it needs some checking to make sure its correct + - else_if: "self::m:system-of-equations" + then: + - test: + - if: "$LineCount = 1" + then: [t: "εξίσωση"] # phrase(this is the first 'equation' of three equations) + else: [t: "εξισώσεις"] # plural + + - else: + - test: + if: "$LineCount = 1" + then: [t: "γραμμή"] # phrase(this is the first 'line' of three lines) + else: [t: "γραμμές"] # plural - pause: short - x: "*" + - pause: long + - name: default-multiline tag: [mtr, mlabeledtr] - match: "parent::m:cases or parent::m:equations or parent::m:lines" + 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: "parent::m:equations and *[1][count(*)=1 and *[1][@data-added='missing-content']] and - count(*/*[1][count(*)=1 and *[1][@data-added!='missing-content']]) != 0" + if: "not($LineCount=1 or contains(@data-intent-property, ':continued-row:'))" then: - - t: "επόμενη γραμμή" - else_test: - if: "$LineCount != 1" - then: - - test: - - if: "parent::m:cases" - then: [{t: "περίπτωση"}] # phrase('case' 1 of 10 cases) - - else_if: "parent::m:equations" - then: [{t: "εξίσωση"}] # phrase('equation' 1 of 10 equations) - else: [{t: "γραμμή"}] # phrase('line 1 of 10 lines) - - x: "count(preceding-sibling::*)+1" - - - test: - if: .[self::m:mlabeledtr] + - pause: medium + - test: + - if: "parent::m:piecewise" + then: [t: "περίπτωση"] # phrase('case' 1 of 10 cases) + - else_if: "parent::m:system-of-equations" + then: [t: "εξίσωση"] # phrase('equation' 1 of 10 equations) + else: [t: "γραμμή"] # 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: "με ένδειξη" # phrase(the diagram is complete 'with label') - x: "*[1]/*" - - pause: medium - test: - if: .[self::m:mlabeledtr] - then: [{x: "*[position()>1]"}] - else: {x: "*"} + 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:cases or parent::m:equations or parent::m:lines]" + match: "parent::*[parent::m:piecewise or parent::m:system-of-equations or parent::m:lines]" variables: [LongPause: "$SpeechStyle = 'ClearSpeak' and $ClearSpeak_MultiLinePausesBetweenColumns = 'Long'"] replace: - - x: "*" - test: - # short 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" - then_test: - if: "$LongPause" - then: {pause: medium} - else: {pause: short} - - else_if: "count(../following-sibling::*) > 0" + 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: "$LongPause" - then: {pause: long} - else: {pause: medium} - else: {pause: long} + 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 @@ -806,23 +1125,106 @@ # 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()}] + variables: [IsColumnSilent: true()] match: "count(*)=1 and *[self::m:mtr][count(*) = 1]" replace: - ot: "" # phrase('the' 1 by 1 matrix M) - t: "ένα επί ένα" # 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: "ορίζουσα"} # phrase(the 2 by 2 'determinant')) - else: {t: "πίνακας"} # phrase(the 2 by 2 'matrix') + then: [t: "ορίζουσα"] # phrase(the 2 by 2 'determinant')) + else: + - test: + if: "preceding-sibling::*[1][self::m:mo and (.='=' or .='<' or .='>' or .='≤' or .='≥' or .='≰' or .='≱' or .='≮' or .='≯' or .='≝' or .='≡' or .='≃' or .='≄' or .='≅' or .='≆' or .='≇' or .='≈' or .='≉' or .='≊' or .='≢' or .='≨' or .='≩' or .='≞' or .='≪' or .='≫' or .='⫹' or .='⫺' or .='≼' or .='≽' or .='⋠' or .='⋡')]" + then: [t: "πίνακα"] #theodora. added logic for reading greek accusative after an operator "ισούται με" + else: [t: "πίνακας"] +# else: [t: "πίνακας"] # phrase(the 2 by 2 'matrix') - t: "με καταχώρηση" # 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: + - test: + if: "preceding-sibling::*[1][self::m:mo and (.='=' or .='<' or .='>' or .='≤' or .='≥' or .='≰' or .='≱' or .='≮' or .='≯' or .='≝' or .='≡' or .='≃' or .='≄' or .='≅' or .='≆' or .='≇' or .='≈' or .='≉' or .='≊' or .='≢' or .='≨' or .='≩' or .='≞' or .='≪' or .='≫' or .='⫹' or .='⫺' or .='≼' or .='≽' or .='⋠' or .='⋡')]" + then: [t: "τον"] #theodora. added logic for reading greek accusative after an operator "ισούται με" + else: [t: "ο"] +# - t: "ο" # phrase('the' 1 by 2 matrix M) + - x: count(*) + - t: "επί" # phrase(the 1 'by' 2 matrix) + - x: count(*[self::m:mtr][1]/*) + - test: + if: "preceding-sibling::*[1][self::m:mo and (.='=' or .='<' or .='>' or .='≤' or .='≥' or .='≰' or .='≱' or .='≮' or .='≯' or .='≝' or .='≡' or .='≃' or .='≄' or .='≅' or .='≆' or .='≇' or .='≈' or .='≉' or .='≊' or .='≢' or .='≨' or .='≩' or .='≞' or .='≪' or .='≫' or .='⫹' or .='⫺' or .='≼' or .='≽' or .='⋠' or .='⋡')]" + then: [t: "μηδενικό πίνακα"] #theodora. added logic for reading greek accusative after an operator "ισούται με" + else: [t: "μηδενικός πίνακας"] +# - t: "μηδενικός πίνακας" # phrase(the 2 by 2 'zero matrix') + - pause: long + +- name: identity-matrix + tag: matrix + # select all the non-zero entries...if they are not on the diagonal, or are != 1 + # if there are any of them, then this isn't an identity matrix + 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: + - test: + if: "preceding-sibling::*[1][self::m:mo and (.='=' or .='<' or .='>' or .='≤' or .='≥' or .='≰' or .='≱' or .='≮' or .='≯' or .='≝' or .='≡' or .='≃' or .='≄' or .='≅' or .='≆' or .='≇' or .='≈' or .='≉' or .='≊' or .='≢' or .='≨' or .='≩' or .='≞' or .='≪' or .='≫' or .='⫹' or .='⫺' or .='≼' or .='≽' or .='⋠' or .='⋡')]" + then: [t: "τον"] #theodora. added logic for reading greek accusative after an operator "ισούται με" + else: [t: "ο"] +# - t: "ο" # phrase('the' 1 by 2 matrix M) + - x: count(*) + - t: "επί" # phrase(the 1 'by' 2 matrix) + - x: count(*[self::m:mtr][1]/*) + - test: + if: "preceding-sibling::*[1][self::m:mo and (.='=' or .='<' or .='>' or .='≤' or .='≥' or .='≰' or .='≱' or .='≮' or .='≯' or .='≝' or .='≡' or .='≃' or .='≄' or .='≅' or .='≆' or .='≇' or .='≈' or .='≉' or .='≊' or .='≢' or .='≨' or .='≩' or .='≞' or .='≪' or .='≫' or .='⫹' or .='⫺' or .='≼' or .='≽' or .='⋠' or .='⋡')]" + then: [t: "μοναδιαίο πίνακα"] #theodora. added logic for reading greek accusative after an operator "ισούται με" + else: [t: "μοναδιαίος πίνακας"] +# - t: "μοναδιαίος πίνακας" # 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: + - test: + if: "preceding-sibling::*[1][self::m:mo and (.='=' or .='<' or .='>' or .='≤' or .='≥' or .='≰' or .='≱' or .='≮' or .='≯' or .='≝' or .='≡' or .='≃' or .='≄' or .='≅' or .='≆' or .='≇' or .='≈' or .='≉' or .='≊' or .='≢' or .='≨' or .='≩' or .='≞' or .='≪' or .='≫' or .='⫹' or .='⫺' or .='≼' or .='≽' or .='⋠' or .='⋡')]" + then: [t: "τον"] #theodora. added logic for reading greek accusative after an operator "ισούται με" + else: [t: "ο"] +# - t: "ο" # phrase('the' 1 by 2 matrix) + - x: count(*) + - t: "επί" # phrase(the 1 'by' 2 matrix) + - x: count(*[self::m:mtr][1]/*) + - test: + if: "preceding-sibling::*[1][self::m:mo and (.='=' or .='<' or .='>' or .='≤' or .='≥' or .='≰' or .='≱' or .='≮' or .='≯' or .='≝' or .='≡' or .='≃' or .='≄' or .='≅' or .='≆' or .='≇' or .='≈' or .='≉' or .='≊' or .='≢' or .='≨' or .='≩' or .='≞' or .='≪' or .='≫' or .='⫹' or .='⫺' or .='≼' or .='≽' or .='⋠' or .='⋡')]" + then: [t: "διαγώνιο πίνακα"] #theodora. added logic for reading greek accusative after an operator "ισούται με" + else: [t: "διαγώνιος πίνακας"] +# - t: "διαγώνιος πίνακας" # 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()}] + variables: [IsColumnSilent: true()] match: - "$ClearSpeak_Matrix != 'SpeakColNum' and " # "simple" isn't used for this preference - "*[self::m:mtr][count(*) = 1] and " # one column @@ -834,8 +1236,13 @@ - t: "επί ένα" # phrase(the 2 'by 1 column' matrix) - test: if: "$ClearSpeak_Matrix = 'Vector' or $ClearSpeak_Matrix = 'EndVector'" - then: {t: "διάνυσμα στήλη"} # phrase(the 2 by 2 'vector') - else: {t: "πίνακας στήλη"} # phrase(the 2 by 2 'matrix') #theodora. in greek, the correct expression is "matrix column" not "column matrix" and "vector column" not "column vector". + then: [t: "διάνυσμα-στήλη"] # phrase(the 2 by 2 'vector') + else: + - test: + if: "preceding-sibling::*[1][self::m:mo and (.='=' or .='<' or .='>' or .='≤' or .='≥' or .='≰' or .='≱' or .='≮' or .='≯' or .='≝' or .='≡' or .='≃' or .='≄' or .='≅' or .='≆' or .='≇' or .='≈' or .='≉' or .='≊' or .='≢' or .='≨' or .='≩' or .='≞' or .='≪' or .='≫' or .='⫹' or .='⫺' or .='≼' or .='≽' or .='⋠' or .='⋡')]" + then: [t: "πίνακα-στήλη"] #theodora. added logic for reading greek accusative after an operator "ισούται με" + else: [t: "πίνακας-στήλη"] +# else: [t: "πίνακας-στήλη"] # phrase(the 2 by 2 'matrix') #theodora. in greek, the correct expression is "matrix column" not "column matrix" and "vector column" not "column vector". - pause: long - x: "*/*" - test: @@ -844,12 +1251,12 @@ - t: "τέλος" # phrase('end' of matrix) - test: if: $ClearSpeak_Matrix = 'EndVector' - then: {t: "διανύσματος"} # phrase(the 2 column 'vector') - else: {t: "πίνακα"} # phrase(the 2 by 2 'matrix') + then: [t: "διανύσματος"] # phrase(the 2 column 'vector') + else: [t: "πίνακα"] # phrase(the 2 by 2 'matrix') - name: default-column-matrix tag: matrix - variables: [{IsColumnSilent: true()}] + variables: [IsColumnSilent: true()] match: "*[self::m:mtr][count(*) = 1]" replace: - t: "" # phrase('the' 2 by 2 matrix M) @@ -857,17 +1264,22 @@ - t: "επί ένα" # phrase(the 2 'by 1 column' matrix) - test: if: "$ClearSpeak_Matrix = 'Vector' or $ClearSpeak_Matrix = 'EndVector'" - then: {t: "διάνυσμα στήλη"} # phrase(the 2 column 'vector') - else: {t: "πίνακας στήλη"} # phrase(the 2 by 2 'matrix') + then: [t: "διάνυσμα-στήλη"] # phrase(the 2 column 'vector') + else: + - test: + if: "preceding-sibling::*[1][self::m:mo and (.='=' or .='<' or .='>' or .='≤' or .='≥' or .='≰' or .='≱' or .='≮' or .='≯' or .='≝' or .='≡' or .='≃' or .='≄' or .='≅' or .='≆' or .='≇' or .='≈' or .='≉' or .='≊' or .='≢' or .='≨' or .='≩' or .='≞' or .='≪' or .='≫' or .='⫹' or .='⫺' or .='≼' or .='≽' or .='⋠' or .='⋡')]" + then: [t: "πίνακα-στήλη"] #theodora. added logic for reading greek accusative after an operator "ισούται με" + else: [t: "πίνακας-στήλη"] +# else: [t: "πίνακας-στήλη"] # phrase(the 2 by 2 'matrix') - pause: long - x: "*" # select the rows (mtr) - test: if: "$ClearSpeak_Matrix = 'EndMatrix' or $ClearSpeak_Matrix = 'EndVector'" - then: [{t: "τέλος του πίνακα"}] # phrase(the 'end of matrix' has been reached) + then: [t: "τέλος του πίνακα"] # 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')"}] + 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 @@ -879,8 +1291,13 @@ #- t: "γραμμή" # phrase(the 1 by 4 'row' matrix) theodora. In Greek, the correct order of words is "vector row" not "row vector" and "matrix row" not "row matrix". so, the full expressions were placed below and the "row" word was #deleted. - test: if: "$ClearSpeak_Matrix = 'Vector' or $ClearSpeak_Matrix = 'EndVector'" - then: {t: "διάνυσμα γραμμή"} # phrase('the 1 by' 2 row 'vector') # - else: {t: "πίνακας γραμμή"} # phrase('the 1 by' 2 'matrix') + then: [t: "διάνυσμα-γραμμή"] # phrase('the 1 by' 2 row 'vector') + else: + - test: + if: "preceding-sibling::*[1][self::m:mo and (.='=' or .='<' or .='>' or .='≤' or .='≥' or .='≰' or .='≱' or .='≮' or .='≯' or .='≝' or .='≡' or .='≃' or .='≄' or .='≅' or .='≆' or .='≇' or .='≈' or .='≉' or .='≊' or .='≢' or .='≨' or .='≩' or .='≞' or .='≪' or .='≫' or .='⫹' or .='⫺' or .='≼' or .='≽' or .='⋠' or .='⋡')]" + then: [t: "πίνακα-γραμμή"] #theodora. added logic for reading greek accusative after an operator "ισούται με" + else: [t: "πίνακας-γραμμή"] +# else: [t: "πίνακας-γραμμή"] # phrase('the 1 by' 2 'matrix') - pause: long - x: "*/*" - test: @@ -889,12 +1306,12 @@ - t: "τέλος" # phrase(the 'end' of matrix has been reached) - test: if: $ClearSpeak_Matrix = 'EndMatrix' - then: {t: "πίνακα"} # phrase(the 2 by 2 'matrix') - else: {t: "διανύσματος"} # phrase(the 2 by 1 'vector') + then: [t: "πίνακα"] # phrase(the 2 by 2 'matrix') + else: [t: "διανύσματος"] # phrase(the 2 by 1 'vector') - name: default-row-matrix tag: matrix - variables: [{IsColumnSilent: "$SpeechStyle = 'ClearSpeak' and $ClearSpeak_Matrix = 'SilentColNum'"}] + variables: [IsColumnSilent: "$SpeechStyle = 'ClearSpeak' and $ClearSpeak_Matrix = 'SilentColNum'"] match: "count(*)=1" # one row replace: - t: "ένα επί" # phrase('the 1 by' 2 matrix) @@ -902,8 +1319,13 @@ #- t: "γραμμή" # phrase(the 1 by 2 'row' matrix) - test: if: "$ClearSpeak_Matrix = 'Vector' or $ClearSpeak_Matrix = 'EndVector'" - then: {t: "διάνυσμα γραμμή"} # phrase(the 2 by 1 'vector') - else: {t: "πίνακας γραμμή"} # phrase(the 2 by 2 'matrix') + then: [t: "διάνυσμα-γραμμή"] # phrase(the 2 by 1 'vector') + else: + - test: + if: "preceding-sibling::*[1][self::m:mo and (.='=' or .='<' or .='>' or .='≤' or .='≥' or .='≰' or .='≱' or .='≮' or .='≯' or .='≝' or .='≡' or .='≃' or .='≄' or .='≅' or .='≆' or .='≇' or .='≈' or .='≉' or .='≊' or .='≢' or .='≨' or .='≩' or .='≞' or .='≪' or .='≫' or .='⫹' or .='⫺' or .='≼' or .='≽' or .='⋠' or .='⋡')]" + then: [t: "πίνακα-γραμμή"] #theodora. added logic for reading greek accusative after an operator "ισούται με" + else: [t: "πίνακας-γραμμή"] +# else: [t: "πίνακας-γραμμή"] # phrase(the 2 by 2 'matrix') - pause: long - pause: medium - x: "*/*" # select the cols (mtd) @@ -913,8 +1335,8 @@ - t: "τέλος" # phrase(the 'end' of matrix has been reached) - test: if: $ClearSpeak_Matrix = 'EndMatrix' - then: {t: "πίνακα"} # phrase(the 2 by 2 'matrix') - else: {t: "διανύσματος"} # phrase(the 2 by 1 'vector') + then: [t: "πίνακα"] # phrase(the 2 by 2 'matrix') + else: [t: "διανύσματος"] # phrase(the 2 by 1 'vector') - name: simple-small-matrix tag: [matrix, determinant] @@ -922,7 +1344,7 @@ - "$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')"}] + variables: [IsColumnSilent: "$SpeechStyle = 'SimpleSpeak' or ($SpeechStyle = 'ClearSpeak' and $ClearSpeak_Matrix != 'SpeakColNum')"] replace: - t: "" # phrase('the' 1 by 2 matrix M) - x: count(*) @@ -930,8 +1352,13 @@ - x: count(*[self::m:mtr][1]/*) - test: if: "self::m:determinant" - then: {t: "ορίζουσα"} # phrase(the 2 by 2 'determinant') - else: {t: "πίνακας"} # phrase(the 2 by 2 'matrix') + then: [t: "ορίζουσα"] # phrase(the 2 by 2 'determinant') + else: + - test: + if: "preceding-sibling::*[1][self::m:mo and (.='=' or .='<' or .='>' or .='≤' or .='≥' or .='≰' or .='≱' or .='≮' or .='≯' or .='≝' or .='≡' or .='≃' or .='≄' or .='≅' or .='≆' or .='≇' or .='≈' or .='≉' or .='≊' or .='≢' or .='≨' or .='≩' or .='≞' or .='≪' or .='≫' or .='⫹' or .='⫺' or .='≼' or .='≽' or .='⋠' or .='⋡')]" + then: [t: "πίνακα"] #theodora. added logic for reading greek accusative after an operator "ισούται με" + else: [t: "πίνακας"] +# else: [t: "πίνακας"] # phrase(the 2 by 2 'matrix') - pause: long - x: "*" - test: @@ -940,13 +1367,13 @@ - t: "τέλος" # phrase(the 'end' of matrix has been reached) - test: if: "self::m:determinant" - then: {t: "ορίζουσας"} # phrase(the 2 by 2 'determinant') - else: {t: "πίνακα"} # phrase(the 2 by 2 'matrix') + then: [t: "ορίζουσας"] # phrase(the 2 by 2 'determinant') + else: [t: "πίνακα"] # phrase(the 2 by 2 'matrix') - name: default-matrix tag: [matrix, determinant] - variables: [{IsColumnSilent: "$SpeechStyle = 'ClearSpeak' and $ClearSpeak_Matrix = 'SilentColNum'"}] - match: "not(@data-intent-property)" + variables: [IsColumnSilent: "$SpeechStyle = 'ClearSpeak' and $ClearSpeak_Matrix = 'SilentColNum'"] + match: "." replace: - t: "" # phrase('the' 1 by 2 matrix M) - x: "count(*)" @@ -954,8 +1381,13 @@ - x: "count(*[self::m:mtr][1]/*)" - test: if: "self::m:determinant" - then: {t: "ορίζουσα"} # phrase(the 2 by 2 'determinant') - else: {t: "πίνακας"} # phrase(the 2 by 2 'matrix') + then: [t: "ορίζουσα"] # phrase(the 2 by 2 'determinant') + else: + - test: + if: "preceding-sibling::*[1][self::m:mo and (.='=' or .='<' or .='>' or .='≤' or .='≥' or .='≰' or .='≱' or .='≮' or .='≯' or .='≝' or .='≡' or .='≃' or .='≄' or .='≅' or .='≆' or .='≇' or .='≈' or .='≉' or .='≊' or .='≢' or .='≨' or .='≩' or .='≞' or .='≪' or .='≫' or .='⫹' or .='⫺' or .='≼' or .='≽' or .='⋠' or .='⋡')]" + then: [t: "πίνακα"] #theodora. added logic for reading greek accusative after an operator "ισούται με" + else: [t: "πίνακας"] +# else: [t: "πίνακας"] # phrase(the 2 by 2 'matrix') - pause: long - x: "*" - test: @@ -964,38 +1396,46 @@ - t: "τέλος" # phrase(the 'end' of matrix has been reached) - test: if: "self::m:determinant" - then: {t: "ορίζουσας"} # phrase(the 2 by 2 'determinant') - else: {t: "πίνακα"} # phrase(the 2 by 2 'matrix's) + then: [t: "ορίζουσας"] # phrase(the 2 by 2 'determinant') + else: [t: "πίνακα"] # phrase(the 2 by 2 'matrix's) - name: chemistry-msub tag: [chemical-formula] - match: "*[1][text()='msub']" + match: "*[1][.='msub']" replace: - x: "*[2]" - test: if: "$Verbosity='Verbose'" - then: [{t: "με δείκτη"}] # phrase(H 'subscript' 2) + then: [t: "κάτω δείκτης"] # phrase(H 'subscript' 2) else_test: if: "$Verbosity='Medium'" - then: [{t: "δείκτης"}] # phrase(H 'sub' 2) + then: [t: "κάτω"] # phrase(H 'sub' 2) - x: "*[3]" +- name: dimension-by + tag: mrow + match: dimension-product + replace: + - insert: + nodes: "*" + replace: [t: "by", pause: auto] # phrase(3 'by' 5 matrix) + - name: chemistry-msup tag: [chemical-formula] - match: "count(*)=3 and *[1][text()='msup']" + match: "count(*)=3 and *[1][.='msup']" replace: - x: "*[2]" - test: if: "$Verbosity='Verbose'" - then: [{t: "με εκθέτη"}] # phrase(H 'superscript' 2) + then: [t: "άνω δείκτης"] # phrase(H 'superscript' 2) else_test: if: "$Verbosity='Medium'" - then: [{t: "εκθέτης"}] # phrase(H 'super' 2) + then: [t: "άνω"] # phrase(H 'super' 2) - x: "*[3]" - test: - if: "following-sibling::*[1][text()='+' or text()='-']" # a little lazy -- assumes chemistry superscripts end with + or - - then: [{pause: medium}] + 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 @@ -1019,10 +1459,10 @@ then: - test: if: "$Verbosity='Verbose'" - then: [{t: "με εκθέτη"}] # phrase(H 'superscript' 2) + then: [t: "άνω δείκτης"] # phrase(H 'superscript' 2) else_test: if: "$Verbosity='Medium'" - then: [{t: "εκθέτης"}] # phrase(H 'super' 2) + then: [t: "άνω"] # phrase(H 'super' 2) - x: "$Prescripts[2]" - pause: "short" - test: @@ -1030,10 +1470,10 @@ then: - test: if: "$Verbosity='Verbose'" - then: [{t: "με δείκτη"}] # phrase(a 'subscript' may be used to indicate an index) + then: [t: "κάτω δείκτης"] # phrase(a 'subscript' may be used to indicate an index) else_test: if: "$Verbosity='Medium'" - then: [{t: "δείκτης"}] # phrase(here is a 'sub' total) + then: [t: "κάτω"] # phrase(here is a 'sub' total) - x: "$Prescripts[1]" - pause: "short" - test: @@ -1044,10 +1484,10 @@ then: - test: if: "$Verbosity='Verbose'" - then: [{t: "με εκθέτη"}] # phrase(H 'superscript' 2) + then: [t: "άνω δείκτης"] # phrase(H 'superscript' 2) else_test: if: "$Verbosity='Medium'" - then: [{t: "εκθέτης"}] # phrase(H 'super' 2) + then: [t: "άνω"] # phrase(H 'super' 2) - x: "$Prescripts[4]" - pause: "short" - test: @@ -1055,10 +1495,10 @@ then: - test: if: "$Verbosity='Verbose'" - then: [{t: "με δείκτη"}] # phrase(H 'subscript' 2) + then: [t: "κάτω δείκτης"] # phrase(H 'subscript' 2) else_test: if: "$Verbosity='Medium'" - then: [{t: "δείκτης"}] # phrase(H 'sub' 2) + then: [t: "κάτω"] # phrase(H 'sub' 2) - x: "$Prescripts[3]" - pause: "short" - x: "*[1]" # base @@ -1070,10 +1510,10 @@ then: - test: if: "$Verbosity='Verbose'" - then: [{t: "με δείκτη"}] # phrase(phrase(H 'subscript' 2) + then: [t: "κάτω δείκτης"] # phrase(phrase(H 'subscript' 2) else_test: if: "$Verbosity='Medium'" - then: [{t: "δείκτης"}] # phrase(phrase(H 'sub' 2) + then: [t: "κάτω"] # phrase(phrase(H 'sub' 2) - x: "$Postscripts[1]" - pause: "short" - test: @@ -1081,10 +1521,10 @@ then: - test: if: "$Verbosity='Verbose'" - then: [{t: "με εκθέτη"}] # phrase(H 'superscript' 2) + then: [t: "άνω δείκτης"] # phrase(H 'superscript' 2) else_test: if: "$Verbosity='Medium'" - then: [{t: "εκθέτης"}] # phrase(H 'super' 2) + then: [t: "άνω"] # phrase(H 'super' 2) - x: "$Postscripts[2]" - pause: "short" - test: @@ -1095,10 +1535,10 @@ then: - test: if: "$Verbosity='Verbose'" - then: [{t: "με δείκτη"}] # phrase(H 'subscript' 2) + then: [t: "κάτω δείκτης"] # phrase(H 'subscript' 2) else_test: if: "$Verbosity='Medium'" - then: [{t: "δείκτης"}] # phrase(H 'sub' 2) + then: [t: "κάτω"] # phrase(H 'sub' 2) - x: "$Postscripts[3]" - pause: "short" - test: @@ -1106,10 +1546,10 @@ then: - test: if: "$Verbosity='Verbose'" - then: [{t: "με εκθέτη"}] # phrase(H 'superscript' 2) + then: [t: "άνω δείκτης"] # phrase(H 'superscript' 2) else_test: if: "$Verbosity='Medium'" - then: [{t: "εκθέτης"}] # phrase(H 'super' 2) + then: [t: "άνω"] # phrase(H 'super' 2) - x: "$Postscripts[4]" - pause: "short" - test: @@ -1120,10 +1560,10 @@ then: - test: if: "$Verbosity='Verbose'" - then: [{t: "με δείκτη"}] # phrase(H 'subscript' 2) + then: [t: "κάτω δείκτης"] # phrase(H 'subscript' 2) else_test: if: "$Verbosity='Medium'" - then: [{t: "δείκτης"}] # phrase(H 'sub' 2) + then: [t: "κάτω"] # phrase(H 'sub' 2) - x: "$Postscripts[5]" - pause: "short" - test: @@ -1131,10 +1571,10 @@ then: - test: if: "$Verbosity='Verbose'" - then: [{t: "με εκθέτη"}] # phrase(H 'superscript' 2) + then: [t: "άνω δείκτης"] # phrase(H 'superscript' 2) else_test: if: "$Verbosity='Medium'" - then: [{t: "εκθέτης"}] # phrase(H 'super' 2) + then: [t: "άνω"] # phrase(H 'super' 2) - x: "$Postscripts[6]" - pause: "short" - test: @@ -1145,10 +1585,10 @@ then: - test: if: "$Verbosity='Verbose'" - then: [{t: "με δείκτη"}] # phrase(H 'subscript' 2) + then: [t: "κάτω δείκτης"] # phrase(H 'subscript' 2) else_test: if: "$Verbosity='Medium'" - then: [{t: "δείκτης"}] # phrase(H 'sub' 2) + then: [t: "κάτω"] # phrase(H 'sub' 2) - x: "$Postscripts[7]" - pause: "short" - test: @@ -1156,19 +1596,17 @@ then: - test: if: "$Verbosity='Verbose'" - then: [{t: "με εκθέτη"}] # phrase(H 'superscript' 2) + then: [t: "άνω δείκτης"] # phrase(H 'superscript' 2) else_test: if: "$Verbosity='Medium'" - then: [{t: "εκθέτης"}] # phrase(H 'super' 2) + then: [t: "άνω"] # phrase(H 'super' 2) - x: "$Postscripts[8]" - pause: "short" - test: - if: "$Postscripts[last()][not(self::m:none)] and following-sibling::*[1][text()='+' or text()='-']" - then: [{pause: medium}] + if: "$Postscripts[last()][not(self::m:none)] and following-sibling::*[1][.='+' or .='-']" + then: [pause: medium] - name: chemistry - - tag: chemical-equation match: "." replace: @@ -1189,12 +1627,12 @@ - bookmark: "*[1]/@id" - test: - if: ".='s'" - then: [{t: "στερεό"}] # phrase(Boron is a 'solid' in its natural state) + then: [t: "στερεό"] # phrase(Boron is a 'solid' in its natural state) - else_if: ".='l'" - then: [{t: "υγρό"}] # phrase(water is a 'liquid') + then: [t: "υγρό"] # phrase(water is a 'liquid') - else_if: ".='g'" - then: [{t: "αέριο"}] # phrase(hydrogen is a 'gas' ) - else: [{t: "υδατικό"}] # phrase(an 'aqueous' solution is contained in water) + then: [t: "αέριο"] # phrase(hydrogen is a 'gas' ) + else: [t: "υδατικό"] # phrase(an 'aqueous' solution is contained in water) - pause: short - name: chemical-formula-operator-bond @@ -1204,15 +1642,15 @@ # FIX: this might be better/more efficient if in unicode.yaml - bookmark: "@id" - test: - - if: "text()='-' or text() = ':'" - then: [{t: "απλός δεσμός"}] # phrase(a 'single bond' is formed when two atoms share one pair of electrons) - - else_if: "text()='=' or text() = '∷'" - then: [{t: "διπλός δεσμός"}] # phrase(a 'double bond' may occur when two atoms share two pairs of electrons) - - else_if: "text()='≡'" - then: [{t: "τριπλός δεσμός"}] # phrase(a 'triple bond' occurs when two atoms share three pairs of electrons) - - else_if: "text()='≣'" - then: [{t: "τετραπλός δεσμός"}] # phrase(a 'quadruple bond' occurs when two atoms share four pairs of electrons) - else: [{x: "text()"}] + - if: ".='-' or .=':'" + then: [t: "απλός δεσμός"] # phrase(a 'single bond' is formed when two atoms share one pair of electrons) + - else_if: ".='=' or .='∷'" + then: [t: "διπλός δεσμός"] # phrase(a 'double bond' may occur when two atoms share two pairs of electrons) + - else_if: ".='≡'" + then: [t: "τριπλός δεσμός"] # phrase(a 'triple bond' occurs when two atoms share three pairs of electrons) + - else_if: ".='≣'" + then: [t: "τετραπλός δεσμός"] # phrase(a 'quadruple bond' occurs when two atoms share four pairs of electrons) + else: [x: "text()"] - name: chemical-formula-operator tag: chemical-formula-operator @@ -1230,15 +1668,15 @@ - if: ".='→' or .='⟶'" then_test: if: "$Verbosity='Terse'" - then: [{t: "σχηματίζουν"}] # phrase(hydrogen and oxygen 'forms' water ) - else: [{t: "αντιδρούν για να σχηματίσουν"}] # phrase(hydrogen and oxygen 'reacts to form' water) - - else_if: ".='⇌' or .='⮖'" - then: [{t: "είναι σε ισορροπία με"}] # phrase(a reactant 'is in equilibrium with' a product) - - else_if: ".='⭴'" - then: [{t: "είναι σε ισορροπία μετατοπισμένη προς τα αριστερά με το"}] # phrase(the reactant 'is in equilibrium biased to the left with' the product) - - else_if: ".='⭵'" - then: [{t: "είναι σε ισορροπία μετατοπισμένη προς τα δεξιά με το"}] # phrase(the reactant 'is in equilibrium biased to the right with' the product) - else: [x: "."] + then: [t: "σχηματίζουν"] # phrase(hydrogen and oxygen 'forms' water ) + else: [t: "αντιδρούν για να σχηματίσουν"] # phrase(hydrogen and oxygen 'reacts to form' water) + - else_if: ".='⇌' or .='\u1f8d2'" + then: [t: "είναι σε ισορροπία με"] # phrase(a reactant 'is in equilibrium with' a product) + - else_if: ".='⇌' or .='🣑'" # U+01F8D1 + then: [t: "είναι σε ισορροπία μετατοπισμένη προς τα αριστερά με το"] # phrase(the reactant 'is in equilibrium biased to the left with' the product) + - else_if: ".='🣒'" # U+1F8D2 + then: [t: "είναι σε ισορροπία μετατοπισμένη προς τα δεξιά με το"] # phrase(the reactant 'is in equilibrium biased to the right with' the product) + else: [x: "*"] - name: chemical-equation-operator tag: chemical-equation-operator diff --git a/Rules/Languages/el/SharedRules/geometry.yaml b/Rules/Languages/el/SharedRules/geometry.yaml index 1b6f90725..7ad37fdeb 100644 --- a/Rules/Languages/el/SharedRules/geometry.yaml +++ b/Rules/Languages/el/SharedRules/geometry.yaml @@ -38,7 +38,7 @@ replace: - test: if: "$Verbosity='Verbose'" - then: [{t: "το"}] # phrase('the' arc A B C) + then: [t: "το"] # phrase('the' arc A B C) - t: "τόξο" # phrase(the 'arc' A B C) - x: "*[1]" - x: "*[2]" @@ -57,3 +57,23 @@ - x: "*[2]" - x: "*[3]" +#new +- name: coordinate + tag: coordinate + match: "." + replace: + - test: + if: "$Verbosity='Verbose'" + then: [t: "το"] # phrase('the' point at 1, 2) + - t: "σημείο" # phrase(the 'point' at 1, 2) + - test: + if: "$Verbosity='Verbose'" + then: [t: "στο"] # phrase('the' point at 1, 2) + - pause: short + - insert: + nodes: "*" + replace: [t: "κόμμα", pause: auto] # phrase(f of x 'comma' y) + - pause: short + - test: + if: "($SpeechStyle='ClearSpeak' and $Verbosity='Verbose') or not(IsNode(*[last()],'leaf'))" + then: [t: "τέλος σημείου"] # phrase(start point, 'end point') diff --git a/Rules/Languages/el/SharedRules/linear-algebra.yaml b/Rules/Languages/el/SharedRules/linear-algebra.yaml index b619412cb..a28c93b61 100644 --- a/Rules/Languages/el/SharedRules/linear-algebra.yaml +++ b/Rules/Languages/el/SharedRules/linear-algebra.yaml @@ -7,7 +7,11 @@ - test: if: "$Verbosity='Verbose'" then: - - t: "η" # phrase('the' square root of 25 equals 5) + - test: + if: "preceding-sibling::*[1][self::m:mo and (.='=' or .='<' or .='>' or .='≤' or .='≥' or .='≰' or .='≱' or .='≮' or .='≯' or .='≝' or .='≡' or .='≃' or .='≄' or .='≅' or .='≆' or .='≇' or .='≈' or .='≉' or .='≊' or .='≢' or .='≨' or .='≩' or .='≞' or .='≪' or .='≫' or .='⫹' or .='⫺' or .='≼' or .='≽' or .='⋠' or .='⋡')]" + then: [t: "την"] #theodora. added logic for reading greek accusative after an operator "ισούται με" + else: [t: "η"] +# - t: "η" # phrase('the' square root of 25 equals 5) - t: "ορίζουσα" # phrase(the 'determinant' of a matrix) - test: if: "$Verbosity!='Terse'" @@ -15,36 +19,22 @@ - t: "του" # phrase(systems 'of' linear equations) - x: "*[1]" - test: - if: "not(IsNode(*[1], 'simple'))" + if: "not(IsNode(*[1], 'simple')) and $Impairment = 'Blindness'" then: [t: "τέλος ορίζουσας"] # phrase('end determinant' of a matrix) -- name: norm - tag: norm - match: "count(*)=1 and not(@data-intent-property)" - replace: - - test: - if: "$Verbosity='Verbose'" - then: - - t: "η" # phrase('the' square root of 25 equals 5) - - t: "νόρμα" # phrase(the 'norm' can be a measure of distance) - - test: - if: "$Verbosity!='Terse'" - then: - - t: "του" # phrase(this is the mean 'of' the data) - - x: "*[1]" - - test: - if: "not(IsNode(*[1], 'simple'))" - then: [t: "τέλος νόρμας"] # phrase('end norm' that is a measure of distance) - - name: subscripted-norm tag: subscripted-norm - match: count(*)=2 and "not(@data-intent-property)" + match: "count(*)=2" replace: - test: if: "$Verbosity='Verbose'" then: - - t: "η" # phrase('the' square root of 25 equals 5) + - test: + if: "preceding-sibling::*[1][self::m:mo and (.='=' or .='<' or .='>' or .='≤' or .='≥' or .='≰' or .='≱' or .='≮' or .='≯' or .='≝' or .='≡' or .='≃' or .='≄' or .='≅' or .='≆' or .='≇' or .='≈' or .='≉' or .='≊' or .='≢' or .='≨' or .='≩' or .='≞' or .='≪' or .='≫' or .='⫹' or .='⫺' or .='≼' or .='≽' or .='⋠' or .='⋡')]" + then: [t: "την"] #theodora. added logic for reading greek accusative after an operator "ισούται με" + else: [t: "η"] +# - t: "η" # phrase('the' square root of 25 equals 5) #theodora. not sure articles should be kept in greek. The current rules don't allow for creating cases for accusative, nominative etc. so it is easier to remove for now - x: "*[2]" - t: "νόρμα" # phrase(the 'norm' can be a measure of distance) - test: @@ -53,69 +43,87 @@ - t: "του" # phrase(systems 'of' linear equations) - x: "*[1]" -- name: transpose - tag: transpose - match: "count(*)=1 and not(@data-intent-property)" - replace: - - x: "*[1]" - - t: "ανάστροφος" # phrase(this will 'transpose' the values) -- name: trace - tag: trace - match: "not(@data-intent-property)" - replace: - - test: - if: "$Verbosity='Verbose'" - then: - - t: "το" # phrase('the' square root of 25 equals 5) - - t: "ίχνος" # phrase('trace' of a matrix) - - test: - if: "$Verbosity!='Terse'" - then: - - t: "του" # phrase(systems 'of' linear equations) - - x: "*[1]" +#- name: norm +# tag: norm +# match: "count(*)=1 and not(@data-intent-property)" +# replace: +# - test: +# if: "$Verbosity='Verbose'" +# then: +# - t: "η" # phrase('the' square root of 25 equals 5) +# - t: "νόρμα" # phrase(the 'norm' can be a measure of distance) +# - test: +# if: "$Verbosity!='Terse'" +# then: +# - t: "του" # phrase(this is the mean 'of' the data) +# - x: "*[1]" +# - test: +# if: "not(IsNode(*[1], 'simple'))" +# then: [t: "τέλος νόρμας"] # phrase('end norm' that is a measure of distance) -- name: dimension - tag: dimension - match: "count(*)=1 and not(@data-intent-property)" - replace: - - test: - if: "$Verbosity='Verbose'" - then: - - t: "η" # phrase('the' square root of 25 equals 5) - - t: "διάσταση" # phrase(the 'dimension' of the matrix) - - test: - if: "$Verbosity!='Terse'" - then: - - t: "του" # phrase(systems 'of' linear equations) - - x: "*[1]" +#- name: transpose +# tag: transpose +# match: "count(*)=1 and not(@data-intent-property)" +# replace: +# - x: "*[1]" +# - t: "ανάστροφος" # phrase(this will 'transpose' the values) +#- name: trace +# tag: trace +# match: "not(@data-intent-property)" +# replace: +# - test: +# if: "$Verbosity='Verbose'" +# then: +# - t: "το" # phrase('the' square root of 25 equals 5) +# - t: "ίχνος" # phrase('trace' of a matrix) +# - test: +# if: "$Verbosity!='Terse'" +# then: +# - t: "του" # phrase(systems 'of' linear equations) +# - x: "*[1]" -- name: homomorphism - tag: homomorphism - match: "count(*)=1 and not(@data-intent-property)" - replace: - - test: - if: "$Verbosity='Verbose'" - then: - - t: "ο" # phrase('the' square root of 25 equals 5) - - t: "ομομορφισμός" # phrase('homomorphism' indicates similarity of form) - - test: - if: "$Verbosity!='Terse'" - then: - - t: "του" # phrase(systems 'of' linear equations) - - x: "*[1]" +#- name: dimension +# tag: dimension +# match: "count(*)=1 and not(@data-intent-property)" +# replace: +# - test: +# if: "$Verbosity='Verbose'" +# then: +# - t: "η" # phrase('the' square root of 25 equals 5) +# - t: "διάσταση" # phrase(the 'dimension' of the matrix) +# - test: +# if: "$Verbosity!='Terse'" +# then: +# - t: "του" # phrase(systems 'of' linear equations) +# - x: "*[1]" -- name: kernel - tag: kernel - match: "count(*)=1 and not(@data-intent-property)" - replace: - - test: - if: "$Verbosity='Verbose'" - then: - - t: "ο" # phrase('the' square root of 25 equals 5) - - t: "πυρήνας" # phrase(this is the 'kernel' of the function) - - test: - if: "$Verbosity!='Terse'" - then: - - t: "του" # phrase(systems 'of' linear equations) - - x: "*[1]" +#- name: homomorphism +# tag: homomorphism +# match: "count(*)=1 and not(@data-intent-property)" +# replace: +# - test: +# if: "$Verbosity='Verbose'" +# then: +# - t: "ο" # phrase('the' square root of 25 equals 5) +# - t: "ομομορφισμός" # phrase('homomorphism' indicates similarity of form) +# - test: +# if: "$Verbosity!='Terse'" +# then: +# - t: "του" # phrase(systems 'of' linear equations) +# - x: "*[1]" + +#- name: kernel +# tag: kernel +# match: "count(*)=1 and not(@data-intent-property)" +# replace: +# - test: +# if: "$Verbosity='Verbose'" +# then: +# - t: "ο" # phrase('the' square root of 25 equals 5) +# - t: "πυρήνας" # phrase(this is the 'kernel' of the function) +# - test: +# if: "$Verbosity!='Terse'" +# then: +# - t: "του" # phrase(systems 'of' linear equations) +# - x: "*[1]" diff --git a/Rules/Languages/el/SimpleSpeak_Rules.yaml b/Rules/Languages/el/SimpleSpeak_Rules.yaml index 574fdae88..b8c23bc80 100644 --- a/Rules/Languages/el/SimpleSpeak_Rules.yaml +++ b/Rules/Languages/el/SimpleSpeak_Rules.yaml @@ -34,17 +34,23 @@ replace: - test: if: "$Verbosity!='Terse'" - then: {t: "η"} # phrase('the' square root of x) + then: + - test: + if: "preceding-sibling::*[1][self::m:mo and (.='=' or .='<' or .='>' or .='≤' or .='≥' or .='≰' or .='≱' or .='≮' or .='≯' or .='≝' or .='≡' or .='≃' or .='≄' or .='≅' or .='≆' or .='≇' or .='≈' or .='≉' or .='≊' or .='≢' or .='≨' or .='≩' or .='≞' or .='≪' or .='≫' or .='⫹' or .='⫺' or .='≼' or .='≽' or .='⋠' or .='⋡')]" + then: [t: "την"] #theodora. added logic for reading greek accusative after an operator "ισούται με" + else: [t: "η"] +# then: [t: "η"] # phrase('the' square root of x) #theodora. not sure articles should be kept in greek. The current rules don't allow for creating cases for accusative, nominative etc. so it is easier to remove for now - t: "τετραγωνική ρίζα" # phrase(the 'square root' of x) - test: if: "$Verbosity!='Terse'" - then: {t: "του"} # phrase(the square root 'of' x) - else: {pause: short} + then: [t: "του"] # phrase(the square root 'of' x) + else: [pause: short] - x: "*[1]" + - pause: short - test: - if: IsNode(*[1], 'leaf') - then: [{pause: short}] - else: [{t: "τέλος ρίζας"}, {pause: short}] # phrase(start the square root of x 'end of root') + if: "not(IsNode(*[1], 'leaf')) and $Impairment = 'Blindness'" + + then: [t: "τέλος ρίζας", pause: medium] # phrase(start the square root of x 'end of root') - name: default tag: root @@ -52,32 +58,32 @@ replace: - test: if: "$Verbosity!='Terse'" - then: [{t: "η"}] + then: [t: ""] #theodora. removed the articles because current rules dont support nominative, accusative etc for greek - test: - if: "*[2][self::m:mn]" + if: "*[2][self::m:mn and not(contains(., '.'))]" then_test: - - if: "*[2][text()='2']" - then: [{t: "τετραγωνική ρίζα"}] # phrase(the 'square root' of x) - - else_if: "*[2][text()='3']" - then: [{t: "κυβική ρίζα"}] # phrase(the 'cube root' of x) - - else_if: "*[2][not(contains(., '.'))]" - then: [{x: "ToOrdinal(*[2])"}, {t: "ρίζα"}] # phrase(the square 'root' of x) + - if: "*[2][.='2']" + then: [t: "τετραγωνική ρίζα"] # phrase(the 'square root' of x) + - else_if: "*[2][.='3']" + then: [t: "κυβική ρίζα"] # phrase(the 'cube root' of x) + + - else: [x: "ToOrdinal(*[2])", t: "ρίζα"] # phrase(the square 'root' of x) else: - test: if: "*[2][self::m:mi][string-length(.)=1]" then: - x: "*[2]" - - pronounce: [{text: "οστή"}] - else: [{x: "*[2]"}] + - pronounce: [text: " οστή"] + else: [x: "*[2]"] - t: "ρίζα" # phrase(the square 'root' of) - test: if: "$Verbosity!='Terse'" - then: [{t: "του"}] # phrase(the square root 'of' x) + then: [t: "του"] # phrase(the square root 'of' x) - x: "*[1]" + - pause: short - test: - if: IsNode(*[1], 'leaf') - then: [{pause: short}] - else: [{t: "τέλος ρίζας"}, {pause: short}] # phrase(start the fifth root of x 'end of root') + if: "not(IsNode(*[1], 'leaf')) and $Impairment = 'Blindness'" + then: [t: "τέλος ρίζας", 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 @@ -86,15 +92,38 @@ match: - "*[1][self::m:mn][not(contains(., '.')) and text()<20] and" - "*[2][self::m:mn][not(contains(., '.')) and 2<= text() and text()<=10]" - replace: [{x: ToCommonFraction(.)}] + #new + 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][text()='⁤'] and" # preceding element is invisible plus + - "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(., '.'))]" - replace: [{x: ToCommonFraction(.)}] - +#new + variables: [IsPlural: "*[1]!=1"] + replace: + - x: "*[1]" + - x: "ToOrdinal(*[2], true(), $IsPlural)" # extra args specify fractional ordinal and whether it is plural + #new + # 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')] " + #new + #variables: [IsPlural: "*[1]!=1"] + replace: + - x: "*[1]" + #- x: "ToOrdinal(*[1], true(), $IsPlural)" # extra args specify fractional ordinal and whether it is plural // vivi + - t: "ανά" # 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 @@ -113,19 +142,23 @@ tag: fraction match: "." replace: - - t: "κλάσμα" # phrase(the 'fraction' 3 over 4) + - test: + if: "$Impairment = 'Blindness'" + then: [t: "κλάσμα"] # phrase(the 'fraction' 3 over 4) - pause: short - x: "*[1]" - test: if: "not(IsNode(*[1],'leaf'))" - then: [{pause: short}] + then: [pause: short] - t: "προς" # phrase(the fraction 3 'over' 4) - test: if: "not(IsNode(*[2],'leaf'))" - then: [{pause: short}] + then: [pause: short] - x: "*[2]" - pause: short - - t: "τέλος του κλάσματος" # phrase(start 7 over 8 'end of fraction') + - test: + if: "$Impairment = 'Blindness'" + then: [t: "τέλος κλάσματος"] # phrase(start 7 over 8 'end of fraction') - pause: medium # rules for functions raised to a power @@ -135,34 +168,34 @@ tag: inverse-function match: "." replace: - - t: "αντίστροφη" # phrase(the 'inverse' of f) + - t: "αντίστροφη" # phrase(the 'inverse' of f) - x: "*[1]" - name: function-squared-or-cubed tag: power match: - - "*[2][self::m:mn][text()='2' or text()='3'] and" - - "following-sibling::*[1][self::m:mo][text()='⁡']" #invisible function apply + - "*[2][self::m:mn][.='2' or .='3'] and" + - "following-sibling::*[1][self::m:mo][.='⁡']" #invisible function apply replace: - x: "*[1]" - bookmark: "*[2]/@id" - test: - if: "*[2][text()=2]" - then: {t: "στο τετράγωνο"} # phrase(5 'squared' equals 25) - else: {t: "στον κύβο"} # phrase(5 'cubed' equals 125) + if: "*[2][.=2]" + then: [t: "στο τετράγωνο"] # phrase(5 'squared' equals 25) + else: [t: "στον κύβο"] # phrase(5 'cubed' equals 125) - name: function-power tag: power match: - - "following-sibling::*[1][self::m:mo][text()='⁡']" #invisible function apply + - "following-sibling::*[1][self::m:mo][.='⁡']" #invisible function apply replace: - test: if: "$Verbosity!='Terse'" - then: {t: "η"} # # phrase('the' fourth power of 10) + then: [t: "η"] # # phrase('the' fourth power of 10) - bookmark: "*[2]/@id" - test: if: "*[2][self::m:mn][not(contains(., '.'))]" - then: [{x: "ToOrdinal(*[2])"}] - else: [{x: "*[2]"}] + then: [x: "ToOrdinal(*[2])"] + else: [x: "*[2]"] - t: "δύναμη του" # phrase(the fourth 'power of' 2) - pause: short - x: "*[1]" @@ -170,49 +203,49 @@ # non-function rules for power - name: squared-or-cubed tag: power - match: "*[2][self::m:mn][text()='2' or text()='3']" + match: "*[2][self::m:mn][.='2' or .='3']" replace: - x: "*[1]" - bookmark: "*[2]/@id" - test: - if: "*[2][text()=2]" - then: {t: "στο τετράγωνο"} # phrase(5 'squared' equals 25) - else: {t: "στον κύβο"} # phrase(5 'cubed' equals 125) + if: "*[2][.=2]" + then: [t: "στο τετράγωνο"] # phrase(5 'squared' equals 25) + else: [t: "στον κύβο"] # phrase(5 'cubed' equals 125) - name: simple-integer tag: power match: "*[2][self::m:mn][not(contains(., '.'))]" replace: - x: "*[1]" - - t: "στη" # phrase(15 raised 'to the' second power equals 225) + - t: "στην" # phrase(15 raised 'to the' second power equals 225) - test: if: "*[2][.>0]" - then: {x: "ToOrdinal(*[2])"} - else: {x: "*[2]"} + then: [x: "ToOrdinal(*[2])"] + else: [x: "*[2]"] - name: simple-negative-integer tag: power match: - - "*[2][self::m:negative and" + - "*[2][self::m:minus and count(*)=1 and" - " *[1][self::m:mn][not(contains(., '.'))]]" replace: - x: "*[1]" - - t: "στη" # phrase(15 raised 'to the' second power equals 225) + - t: "στην" # phrase(15 raised 'to the' second power equals 225) - x: "*[2]" - name: simple-var tag: power match: "*[2][self::m:mi][string-length(.)=1]" replace: - x: "*[1]" - - t: "στη" # phrase(15 raised 'to the' second power equals 225) + - t: "στην" # phrase(15 raised 'to the' second power equals 225) - x: "*[2]" - - pronounce: [{text: "οστή"}] + - pronounce: [text: " οστή"] - name: simple tag: power match: "IsNode(*[2], 'leaf')" replace: - x: "*[1]" - - t: "στη" # phrase(15 raised 'to the' second power equals 225) + - t: "στην" # phrase(15 raised 'to the' second power equals 225) - x: "*[2]" - name: nested @@ -230,7 +263,14 @@ - t: "που υψώνεται στη " # phrase(15 'raised to the' second power equals 225) - x: "*[2]" - pause: short - - t: "τέλος εκθέτη" # phrase(start 2 raised to the exponent 4 'end of exponent') + #new / changed + - test: + if: "$Impairment = 'Blindness'" + then: + - t: "τέλος εκθέτη" # phrase(start 2 raised to the exponent 4 'end of exponent') + - pause: short + else: + - pause: medium - name: default tag: power match: "." @@ -239,6 +279,7 @@ - t: "που υψώνεται στη" # phrase(15 'raised to the' second power equals 225) - x: "*[2]" - t: "τέλος δύναμης" # phrase(15 raised to the second 'power' equals 225) + - pause: short # # Some rules on mrows @@ -252,21 +293,38 @@ then: - test: if: "$Verbosity!='Terse'" - then: {t: "το"} # phrase('the' empty set) + then: [t: "το"] # phrase('the' empty set) - t: "κενό σύνολο" # phrase(when a set contains no value it is called an 'empty set' and this is valid) - - else_if: "count(*[1]/*)=3 and *[1]/*[2][self::m:mo][text()=':' or text()='|' or text()='∣']" + #theodora. rule slightly modified for greek syntax/grammar + - 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) - - t: "σύνολο όλων των" # phrase(the 'set of all' positive integers less than 10) + if: "ancestor::m:mrow[m:mi[.='sup' or .='inf' or .='max' or .='min' or .='liminf' or .='limsup']]" + then: +# - test: +# if: "$Verbosity!='Terse'" #theodora. δεν χρειάζεται γιατί τώρα διαβάζει του ανεξάρτητα από verbosity, αλλά το αφήνω σε περιπτωση που αλλάξει κάτι στο μέλλον +# then: [t: "του"] + - t: "συνόλου όλων των" # phrase(the inf 'of the set of' all positive integers less than 10 in greek) + else: + - test: + if: "$Verbosity!='Terse'" + then: [t: "το"] # phrase('the' set of all integers) + - t: "σύνολο όλων των" # phrase(the 'set of all' positive integers less than 10) - x: "*[1]/*[1]" - t: "τέτοια ώστε " # phrase(x 'such that' x is less than y) - x: "*[1]/*[3]" + #theodora. rule slightly modifies for greek syntax/grammar + - else_if: "ancestor::m:mrow[m:mi[.='sup' or .='inf' or .='max' or .='min' or .='liminf' or .='limsup']]" + then: +# - test: +# if: "$Verbosity!='Terse'" +# then: [t: "του"] #theodora. δεν χρειάζεται γιατί τώρα διαβάζει του ανεξάρτητα από verbosity, αλλά το αφήνω σε περιπτωση που αλλάξει κάτι στο μέλλον + - t: "συνόλου" + - x: "*[1]" else: - test: if: "$Verbosity!='Terse'" - then: {t: "το"} # phrase('the' set of integers) + then: [t: "το"] # phrase('the' set of integers) - t: "σύνολο" # phrase(here is a 'set' of numbers) - x: "*[1]" @@ -274,26 +332,31 @@ tag: mo match: # say "times" when invisible times is followed by parens or a superscript that has a base with parens or "|"s + # added: say times is the superscript is not simple # if we aren't sure if it is times or not, don't say anything - - "text()='⁢' and" + - ".='⁢' and" - "not(@data-function-guess) and (" - - "not(ancestor-or-self::*[contains(@data-intent-property, ':structure:')]) and " + - "not(ancestor-or-self::*[contains(@data-intent-property, ':literal:')]) and " - " following-sibling::*[1][" - - " IsBracketed(., '(', ')') or IsBracketed(., '[', ']') or IsBracketed(., '|', '|') or self::m:binomial or" # followed by parens - - " ( (self::m:msup or self::m:msub or self::m:msubsup or self::m:power) and " # followed by msup, etc. - - " *[1][self::m:mrow][IsBracketed(., '(', ')') or IsBracketed(., '[', ']') or IsBracketed(., '|', '|')]" # base has parens - - " )" - - " ]" - # other possibility is the preceding element has parens (but not the following) +# - " (IsBracketed(., '(', ')') and not(.//m:mo[.=','])) or " #theodora. added rule to exclude reading "times" when the following siblings include commas like B(2, 6), F(X,Y) from this rule. then removed because "times" was left blank due to many false positives +# - " IsBracketed(., '[', ']') or IsBracketed(., '|', '|') or " + - " self::m:matrix or self::m:determinant or self::m:binomial or" # followed by parens + - " self::m:square-root or self::m:msqrt or self::m:root or self::m:mroot or" + - " (self::m:msub or self::m:msubsup or" + - " ((self::m:msup or self::m:power) and not(IsNode(*[1], 'leaf') and *[2][self::m:mn and (.=2 or '.=3')]))) and " # followed by msup, etc. + - " (*[1][self::m:mrow[IsBracketed(., '(', ')') or IsBracketed(., '[', ']') or IsBracketed(., '|', '|')] or " + - " self::m:matrix or self::m:determinant] or" # base has parens + - " not(IsNode(*[2], 'simple')) or " + - " (self::m:msubsup and not(IsNode(*[3], 'simple')))" + - " )" + - " ]" # other possibility is the preceding element has parens (but not the following) - " or " - " preceding-sibling::*[1][" - " IsBracketed(., '(', ')') or IsBracketed(., '[', ']') or IsBracketed(., '|', '|')]" # followed by parens - " )" replace: - - t: "" # phrase(7 'times' 5 equals 35) - #theodora. left it blank because saying "times" before parentheses - # is incorrect in certain examples included here (ex operators and partial derivatives applied - # on expressions enclosed by parentheses). otherwise in greek "times" would be translated as "επί" in this context. + - t: "" # phrase(7 'times' 5 equals 35) #theodora. removed it because it was reading "times" examples like d/dt() + - name: no-say-parens tag: mrow @@ -302,7 +365,8 @@ - " not(self::m:math) ] and " # rule out [x] standing alone - "( IsBracketed(., '(', ')') or IsBracketed(., '[', ']') ) and " - "( IsNode(*[2], 'simple') ) and" - - "not(ancestor-or-self::*[contains(@data-intent-property, ':structure:')])" + - "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: diff --git a/Rules/Languages/el/definitions.yaml b/Rules/Languages/el/definitions.yaml index ede2ab916..d507f0719 100644 --- a/Rules/Languages/el/definitions.yaml +++ b/Rules/Languages/el/definitions.yaml @@ -1,3 +1,4 @@ + --- - include: "../../definitions.yaml" @@ -10,50 +11,51 @@ # 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= ; δείκτης κάτω; τέλος δείκτη κάτω: τέλος δείκτη κάτω: τέλος δείκτη κάτω", + "indexed-by": "infix= ; δείκτης; τέλος δείκτη: τέλος δείκτη: τέλος δείκτη", "modified-variable": "silent= ", - "say-super": "infix=υπέρ: εκθέτης: εκθέτης", # used with 'mo' for superscripts (e.g, "<") + "say-super": "infix= εις την: εκθέτης: εκθέτης", # used with 'mo' for superscripts (e.g, "<") "skip-super": "silent=", # used with 'mo' for superscripts (e.g, "*") "absolute-value": "function= ; απόλυτη τιμή: η απόλυτη τιμή: η απόλυτη τιμή; τέλος απόλυτης τιμής", - "binomial": "infix=διωνυμικός συντελεστής; επιλογή; τέλος διωνυμικού", + "binomial": "infix=διωνυμικό; ανά; τέλος διωνυμικού", #theodora. ανἀ = chooce in english. check "dimension-product": "infix=επί", # "closed-interval": "other=closed-interval; from,to; end closed-interval", - "greatest-common-divisor": "function=μκδ: ο μέγιστος κοινός διαιρέτης: ο μέγιστος κοινός διαιρέτης", - "imaginary-part": "function=φανταστικό μέρος: το φανταστικό μέρος: το φανταστικό μέρος", - "least-common-multiple": "function=εκπ: το ελάχιστο κοινό πολλαπλάσιο: το ελάχιστο κοινό πολλαπλάσιο", + "greatest-common-divisor": "function=μκδ: ο μκδ: ο μέγιστος κοινός διαιρέτης", # theodora. check how μκδ and εκπ sounds + "imaginary-part": "function=φανταστικό μέρος, το φανταστικό μέρος, το φανταστικό μέρος", + "least-common-multiple": "function=εκπ:το εκπ:το ελάχιστο κοινό πολλαπλάσιο", # "large-op": "infix=over || other=from,to", - "limit": "prefix=όριο καθώς: το όριο καθώς: το όριο καθώς", - "lim-sup": "prefix=lim sup καθώς: ανώ όριο καθώς: ανώ όριο καθώς", - "lim-inf": "prefix=lim inf καθώς: κάτω όριο καθώς: κάτω όριο καθώς", - "logarithm-with-base": "prefix=λογάριθμος με βάση: ο λογάριθμος με βάση: ο λογάριθμος με βάση", - "natural-logarithm": "function=φυσικός λογάριθμος: φυσικός λογάριθμος: φυσικός λογάριθμος", - "minus": "infix=μείον || prefix=αρνητικός", - "plus": "infix=συν || prefix=θετικός", + "limit": "prefix=όριο όταν: το όριο όταν: το όριο όταν", + "lim-sup": "prefix=ανώτατο όριο όταν: το ανώτατο όριο όταν: το ανώτατο όριο όταν", #theodora. check "όταν " english: as + "lim-inf": "prefix=κατώτατο όριο όταν: το κατώτατο όριο όταν : το κατώτατο όριο όταν", + "logarithm-with-base": "prefix=ο λογάριθμος με βάση: ο λογάριθμος με βάση: ο λογάριθμος με βάση", + "natural-logarithm": "function=l n: φυσικός λογάριθμος: φυσικός λογάριθμος", + "minus": "infix=μείον || prefix=μείον", + "plus": "infix=συν || prefix=συν", + # check. prefix = negative prefix = positive in english. not always appropriate/unatural for greek # "pochhammer": "infix=permutations of", # arguments are in reverse order, so can't work here "real-part": "function=το πραγματικό μέρος", - "transpose": "postfix=μετάθεση || function=μετάθεση", + "transpose": "postfix=ανάστροφος || function=ανάστροφος", + "magnitude": "postfix=νόρμα || function=νόρμα", #theodora. added the magnitude, was read in english otherwise. Check if "διπλή κάθετος" is more appropriate "norm": "function=; νόρμα: νόρμα: νόρμα; τέλος νόρμας", - "trace": "function= ; ίχνος: ίχνος: το ίχνος; τέλος ίχνους", - "dimension": "function=; διάσταση: διάσταση: η διάσταση; τέλος διάστασης", - "homomorphism": "function= ; ομομορφισμός: ομομορφισμός: ο ομομορφισμός; τέλος ομομορφισμού", - "kernel": "function= ; πυρήνας: πυρήνας: ο πυρήνας; τέλος πυρήνα", + "trace": "function=;ίχνος : ίχνος: το ίχνος; τέλος ίχνους", + "dimension": "function=; διάσταση : διάσταση: η διάσταση; τέλος διάστασης", + "homomorphism": "function= ; ομομορφισμός : ομομορφισμός: ο ομομορφισμός; τέλος ομομορφισμού", + "kernel": "function= ; πυρήνας : πυρήνας: ο πυρήνας; τέλος πυρήνα", "vector": "function= ; διάνυσμα || prefix=διάνυσμα", - "cross-product": "infix=εξωτερικό γινόμενο: εξωτερικό γινόμενο: εξωτερικό γινόμενο", - "dot-product": "infix=εσωτερικό γινόμενο: εσωτερικό γινόμενο: εσωτερικό γινόμενο", + "cross-product": "infix=διανυσματικό γινόμενο", # theodora. check το είχε έτσι "infix=cross: διανυσματικό γινόμενο: διανυσματικό γινόμενο", + "dot-product": "infix=τελεία: εσωτερικό γινόμενο: τελεία: εσωτερικό γινόμενο", #theodora. check. είναι ολα εσωτερικό γινόμενο ή πιάνει κι άλλα οπότε θέλει πιο γενικό όρο; "divergence": "function= ; απόκλιση: απόκλιση: απόκλιση; τέλος απόκλισης", "curl": "function= ; στροβιλισμός; τέλος στροβιλισμού", - "gradient": "function= ; κλίση: κλίση: η κλίση; τέλος κλίσης", - "laplacian": "function=λαπλασιανός", # speech engines don't do a good job with "laplacian" + "gradient": "function= ; ανάδελτα: ανάδελτα: ανάδελτα; τέλος ανάδελτα", + "laplacian": "function=λαπλασιανή", # speech engines don't do a good job with "laplacian" - "chemistry-concentration": "function= ; συγκέντρωση: συγκέντρωση του: η συγκέντρωση του; τέλος συγκέντρωσης", + "chemistry-concentration": "function= ; συγκέντρωση: η συγκέντρωση του: η συγκέντρωση του; τέλος συγκέντρωσης", } # Names of functions that in terse mode don't say "of" (or it's equivalent in other languages) -- TerseFunctionNames: { - "divergence", "gradient", "curl" +- TerseFunctionNames: {"divergence", "gradient", "curl" } - NavigationParts: { @@ -63,26 +65,25 @@ "fraction": "αριθμητής; παρονομαστής", "msqrt": "ρίζα", "square-root": "ρίζα", - "mroot": "ρίζα; δείκτης ρίζας", - "root": "ρίζα; δείκτης ρίζας", - "msub": "βάση; δείκτης κάτω", - "sub": "βάση; δείκτης κάτω", - "logarithm-with-base": "βάση", - "indexed-by": "βάση; δείκτης κάτω", - "msup": "βάση; δείκτης πάνω", - "say-super": "βάση; δείκτης πάνω", - "skip-super": "βάση; δείκτης πάνω", + "mroot": "ρίζα; τάξη ρίζας", + "root": "ρίζα; τάξη ρίζας", + "msub": "βάση; δείκτης", + "sub": "βάση; δείκτης", + "msup": "βάση; εκθέτης", + "say-super": "βάση; εκθέτης", + "skip-super": "βάση; εκθέτης", "power": "βάση; εκθέτης", - "msubsup": "βάση; δείκτης κάτω; δείκτης πάνω", + "msubsup": "βάση; δείκτης; εκθέτης", "munder": "βάση; κάτω όριο", "mover": "βάση; άνω όριο", "munderover": "βάση; κάτω όριο; άνω όριο", # 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": "σε", - "out": "έξω από", + "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. @@ -90,70 +91,79 @@ # I asked bard and chatgpt for formula words that are alphabetical, and they failed. # Here are the words I managed to find, but it almost certainly not complete. Change the list for other languages. - "Abel", "aery", "ails", "airy", "amps", "ceil", "cents", "chop", "flux", "flow", "knot", "most" + # "Abel", "aery", "ails", "airy", "amps", "cents", "flux", "flow", "knot", #theodora. removed for now } - SIPrefixes: { - "Q": "κουέττα", "R": "ροννά", "Y": "γιοττά", "Z": "ζεττά", "E": "εξά", "P": "πετά", "T": "τερά", "G": "γκίγκα", "M": "μέγα", "k": "κιλό", "h": "εκτό", "da": "δεκά", - "d": "δεσί", "c": "εκατοστό", "m": "χιλιοστό", "µ": "μικρό", "n": "νάνο", "p": "πικο", "f": "φεμτό", "a": "αττό", "z": "ζεπτό", "y": "γιοκτό", "r": "ροντό", "q": "κουεκτό" - } - + "Q": "κουέτα", "R": "ρόνα", "Y": "γιότα", "Z": "ζἐτα", "E": "έξα", "P": "πέτα", "T": "τέρα", "G": "γκίγκα", "M": "μέγκα", "k": "χίλιο", "h": "χέκτο", "da": "δέκα", + "d": "δεκατό", "c": "εκατοστό", "m": "μίλι", "µ": "μίκρο", "n": "νάνο", "p": "πίκο", "f": "φέμτο", "a": "άτο", "z": "ζέπτο", "y": "γιόκτο", "r": "ρόντο", "q": "κουέκτο" + } + #theodora. issues with prefixies will occur when in greek the unit of measurement is derived/borrowed directly from of the english word. ex. decibel = ντεσιμπέλ but centimeter=εκατοστόμετρο + #would be useful to be able to distinguis between Greek an english prefixes and SIUnits + #- SIPrefixesEnglish: { +# "Q": "κουέτα", "R": "ρόνα", "Y": "γιότα", "Z": "ζἐτα", "E": "έξα", "P": "πέτα", "T": "τέρα", "G": "γκίγκα", "M": "μέγκα", "k": "κίλο", "h": "χέκτο", "da": "δεκα", +# "d": "ντέσι", "c": "σέντι", "m": "μίλι", "µ": "μίκρο", "n": "νάνο", "p": "πίκο", "f": "φέμτο", "a": "άτο", "z": "ζέπτο", "y": "γιόκτο", "r": "ρόντο", "q": "κουέκτο" +#} # 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 +# Prefixes may be used with any of the 29 SI units with specsial 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 + # base units "A": "αμπέρ", - "cd": "κάντελα", + "cd": "καντέλα", "K": "κέλβιν", "K": "κέλβιν", # U+212A "g": "γραμμάριο", - "m": "μέτρο", - "mol": "mol", + "m": "μέτρο", # British spelling works for US also + "mol": "μολ", "s": "δευτερόλεπτο", "sec": "δευτερόλεπτο", # "sec" not actually legal + "kg": "κιλό", #theodora. see if keep, or change k=κίλο to k=χίλιο + "cm": "εκατοστό", # derived units "Bq": "μπεκερέλ", "C": "κουλόμπ", - "°C": "βαθμός Κελσίου", "℃": "βαθμός Κελσίου", # should only take negative powers + "°C": "βαθμός κελσίου", "℃": "βαθμός κελσίου", # should only take negative powers "F": "φαράντ", - "Gy": "γκρί", - "H": "ενρί", - "Hz": "χέρτζ", - "J": "τζουλ", - "kat": "κάταλ", + "Gy": "γκρέυ", + "H": "χένρι", + "Hz": "χέρτς", + "J": "τζάουλ", + "kat": "κάτελ", "lm": "λούμεν", "lx": "λουξ", - "N": "νεύτον", - "Ω": "ωμ", "Ω": "ωμ", # U+2126 OHM SIGN + "N": "νιούτον", + "Ω": "ωμ", "Ω": "ωμ", # Greek Cap letter, U+2126 OHM SIGN "Pa": "πασκάλ", - "S": "σιμένς", + "S": "ζίμενς", "Sv": "σίβερτ", "T": "τέσλα", - "V": "βολτ", + "V": "βόλτ", "W": "βατ", "Wb": "βέμπερ", # accepted (plus a few variants) that take SI prefixes "l": "λίτρο", "L": "λίτρο", "ℓ": "λίτρο", # Should only take negative powers; British spelling works for US also - "t": "μετρικός τόνος", # should only take positive powers + "t": "τόνος", # should only take positive powers "Da": "ντάλτον", "Np": "νέπερ", # should only take negative powers "u": "ατομική μονάδα μάζας", # 'u' is correct: https://en.wikipedia.org/wiki/Dalton_(unit) - "eV": "ηλεκτρονιοβολτ", + "eV": "ηλεκτρονιοβόλτ", "rad": "ακτίνιο", # should only take negative powers - "sr": "στερακτίνιο", # should only take negative powers - + "sr": "στερακτίνιο", # should only take negative powers + # others that take a prefix - "a": "έτος", # should only take positive powers + "a": "άνουμ", # should only take positive powers "as": "δευτερόλεπτο τόξου", # see en.wikipedia.org/wiki/Minute_and_second_of_arc - # technically wrong, but used in practice with SI Units "b": "μπιτ", # should only take positive powers "B": "μπάιτ", # should only take positive powers - "Bd": "μπόντ", # should only take positive powers - } - + "Bd": "μπώ", # should only take positive powers + "kb": "κιλο-μπιτ", # should only take positive powers + "kB": "κιλο-μπάιτ", # should only take positive powers + "kBd": "κιλο-μπώ", +} - UnitsWithoutPrefixes: { # time @@ -162,22 +172,24 @@ "h": "ώρα", "hr": "ώρα", "Hr": "ώρα", "d": "ημέρα", "dy": "ημέρα", "w": "εβδομάδα", "wk": "εβδομάδα", - "y": "έτος", "yr": "έτος", + "y": "έτος", "yr": "έτος", # angles - "°": "μοίρα", "deg": "μοίρα", # should only take negative powers + "°": "βαθμός", "deg": "βαθμός", # should only take negative powers "arcmin": "λεπτό τόξου", "amin": "λεπτό τόξου", "am": "λεπτό τόξου", "MOA": "λεπτό τόξου", - "arcsec": "δευτερόλεπτο τόξου", + "arcsec": "δευτερόλεπτο τόξου", #arcsec = πρώτο δευτερόλεπτο ή δευτερόλεπτο του τόξου "asec": "δευτερόλεπτο τόξου", # distance - "au": "αστρονομική μονάδα", "AU": "αστρονομική μονάδα", + "au": "αστρονομική μονάδα", + "AU": "αστρονομική μονάδα", "ltyr": "έτος φωτός", "ly": "έτος φωτός", "pc": "παρσέκ", - "Å": "άνγκστρομ", "Å": "άνγκστρομ", + "parsec": "παρσέκ", + "Å": "άνγκστρομ", "Å": "άνγκστρομ", # U+00C5 and U+212B "fm": "φέρμι", # others @@ -190,36 +202,40 @@ "bar": "μπαρ", "cal": "θερμίδα", "Ci": "κιουρί", - "grad": "γκραντιάν", - "M": "μόλαρ", + "grad": "βαθμός", + "M": "μολάρ", "R": "ρέντγκεν", - "rpm": "στροφές ανά λεπτό", - "℧": "μ-χ-ο", - "dyn": "ντύν", - "erg": "έργκ", + "rpm": "στροφή ανά λεπτό", + "℧": "μο", + "dyn": "ντυν", + "erg": "εργ", + # powers of 2 used with bits and bytes - "Kib": "κιμπι-μπιτ", "Mib": "μεμπι-μπιτ", "Gib": "γκιμπι-μπιτ", "Tib": "τεμπι-μπιτ", "Pib": "πεμπι-μπιτ", "Eib": "εξμπι-μπιτ", "Zib": "ζετμπι-μπιτ", "Yib": "γιοτμπι-μπιτ", - "KiB": "κιμπι-μπάιτ", "MiB": "μεμπι-μπάιτ", "GiB": "γκιμπι-μπάιτ", "TiB": "τεμπι-μπάιτ", "PiB": "πεμπι-μπάιτ", "EiB": "εξμπι-μπάιτ", "ZiB": "ζετμπι-μπάιτ", "YiB": "γιοτμπι-μπάιτ", - } + "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", + } #theodora. left the english words # this will only be used if the language is English, so it can be empty for other countries - EnglishUnits: { # length "in": "ίντσα", + "inch": "ίντσα", "ft": "πόδι", + "foot": "πόδι", "mi": "μίλι", + "mile": "μίλι", "rd": "ροντ", - "li": "λίνκ", - "ch": "αλλυσίδα", + "li": "λινκ", + "ch": "τσέιν", # area "sq in": "τετραγωνική ίντσα", "sq. in": "τετραγωνική ίντσα", "sq. in.": "τετραγωνική ίντσα", "sq ft": "τετραγωνικό πόδι", "sq. ft": "τετραγωνικό πόδι", "sq. ft.": "τετραγωνικό πόδι", "sq yd": "τετραγωνική γιάρδα", "sq. yd": "τετραγωνική γιάρδα", "sq. yd.": "τετραγωνική γιάρδα", "sq mi": "τετραγωνικό μίλι", "sq. mi": "τετραγωνικό μίλι", "sq. mi.": "τετραγωνικό μίλι", - "ac": "ακρέ", - "FBM": "πόδι σανίδας", + "ac": "έικρ", #στρέμμα + "FBM": "εφ μπι εμ", # volume "cu in": "κυβική ίντσα", "cu. in": "κυβική ίντσα", "cu. in.": "κυβική ίντσα", @@ -232,65 +248,201 @@ "tbl": "κουταλιά της σούπας", # liquid - "fl dr": "υγρό ντραμ", - "fl oz": "υγρή ουγγιά", - "gi": "γκιλ", - "cp": "φλιτζάνι", "cup": "φλιτζάνι", + "fl dr": "δράμι υγρών", + "fl oz": "ουγγιά υγρών", + "gi": "τζιλ", + "cp": "φλιτζάνι", "φλιτζάνι": "φλιτζάνι", "pt": "πίντα", - "qt": "κουάρτα", + "qt": "κουάρτ", "gal": "γαλόνι", # weight - "gr": "κόκκος", - "dr": "νραμ", + "gr": "γκρέιν", # είναι και τα γραμμ'αρια + "dr": "δράμι", "oz": "ουγγιά", "℥": "ουγγιά", "lb": "λίβρα", - "cwt": "εκατοστόλιρο", + "cwt": "χάντρεντγουέιτ", "dwt": "πένιγουέιτ", - "oz t": "τρόϊ ουγγιά", - "lb t": "τρόϊ λίβρα", + "oz t": "τρόι ουγγιά", + "lb t": "τρόι λίβρα", # energy "hp": "ίππος", - "BTU": "BTU", - "°F": "βαθμός Φαρενάιτ", "℉": "βαθμός Φαρενάιτ", + "BTU": "μπι τι γιού", + "°F": "βαθμός φαρενάϊτ", "℉": "βαθμός φαρενάϊτ", # other - "mph": "μίλια ανά ώρα", - "mpg": "μίλια ανά γαλόνι", - } - -- CurrencySymbols: { - "$": "δολάριο", "¢": "σεντ", "€": "ευρώ", "£": "λίρα στερλίνα", "₡": "κολόν", "₤": "λίρα", "₨": "ρουπία", - "₩": "γουόν", "₪": "σέκελ", "₱": "πέσο", "₹": "ρουπία", "₺": "λίρα", "₿": "μπιτκόιν", - # could add more currencies... + "mph": "μίλι ανά ώρα", + "mpg": "μίλι ανά γαλόνι", } - PluralForms: { # FIX: this needs to be flushed out - "ίντσα": "ίντσες", "τετραγωνική ίντσα": "τετραγωνικές ίντσες", "κυβική ίντσα": "κυβικές ίντσες", - "πόδι": "πόδια", "τετραγωνικό πόδι": "τετραγωνικά πόδια", "κυβικό πόδι": "κυβικά πόδια", - "πόδι σανίδας": "πόδια σανίδας", - "βαθμός Κελσίου": "βαθμοί Κελσίου", - "βαθμός Φαρενάιτ": "βαθμοί Φαρενάιτ", - "ενρί": "ενρί", - "χέρτζ": "χέρτζ", + ### -------------- SIUnits -------------- ### vivi + # base units + "γραμμάριο": "γραμμάρια", + "κιλό": "κιλά", + "εκατοστό": "εκατοστά", + "μέτρο": "μέτρα", # British spelling works for US also + "δευτερόλεπτο": "δευτερόλεπτα", + "αμπέρ": "αμπέρ", + "καντέλα": "καντέλα", + "κέλβιν": "κέλβιν", # U+212A + "μολ": "μολ", + + + # derived units + "βαθμός κελσίου": "βαθμοί κελσίου", + "μπεκερέλ": "μπεκερέλ", + "κουλόμπ":"κουλόμπ", + "φαράντ": "φαράντ", + "γκρέυ": "γκρέυ", + "χένρι": "χένρι", + "χέρτς": "χέρτς", + "τζάουλ": "τζάουλ", + "κάτελ": "κάτελ", + "λούμεν": "λούμεν", "λουξ": "λουξ", - "σιμένς": "σιμένς", - "στροφές ανά λεπτό": "στροφές ανά λεπτό", - "μίλια ανά ώρα": "μίλια ανά ώρα", - "μίλια ανά γαλόνι": "μίλια ανά γαλόνι", - "κολόν": "κολόνες", "λίρα": "λίρες", "γουόν": "γουόν", "μπιτκόιν": "μπιτκόιν", - "μέτρο": "μέτρα", "γραμμάριο": "γραμμάρια", "λίτρο": "λίτρα", "δευτερόλεπτο": "δευτερόλεπτα" - } + "νιούτον": "νιούτον", + "ωμ": "ωμ", # Greek Cap letter, U+2126 OHM SIGN + "πασκάλ": "πασκάλ", + "ζίμενς": "ζίμενς", + "σίβερτ": "σίβερτ", + "τέσλα": "τέσλα", + "βόλτ": "βόλτ", + "βατ": "βατ", + "βέμπερ": "βέμπερ", + + # accepted (plus a few variants) that take SI prefixes + "λίτρο": "λίτρα", + "τόνος": "τόνοι", # should only take positive powers + "ατομική μονάδα μάζας": "ατομικές μονάδες μάζας", # 'u' is correct: https://en.wikipedia.org/wiki/Dalton_(unit) + "ακτίνιο": "ακτίνια", # should only take negative powers + "στερακτίνιο": "στερακτίνια", # should only take negative powers + "ντάλτον": "ντάλτον", + "νέπερ": "νέπερ", # should only take negative powers + "ηλεκτρονιοβόλτ": "ηλεκτρονιοβόλτ", + + + # others that take a prefix + "δευτερόλεπτο τόξου": "δευτερόλεπτα τόξου", # see en.wikipedia.org/wiki/Minute_and_second_of_arc + "άνουμ": "άνουμ", + + "μπιτ": "μπιτ", # should only take positive powers + "μπάιτ": "μπάιτ", # should only take positive powers + "μπώ": "μπώ", # should only take positive powers + + + # technically wrong, but used in practice with SI Units + + ### --------------UnitsWithoutPrefixes -------------- ### vivi + # time + "δευτερόλεπτο": "δευτερόλεπτα", + "λεπτό": "λεπτά", + "ώρα": "ώρες", + "ημέρα": "ημέρες", + "εβδομάδα": "εβδομάδες", + "έτος": "έτη", + + # angles + "βαθμός": "βαθμοί", + "λεπτό τόξου": "λεπτά τόξου", + "δευτερόλεπτο τόξου": "δευτερόλεπτα τόξου", + + # distance + "αστρονομική μονάδα": "αστρονομικές μονάδες", + "έτος φωτός": "έτη φωτός", + "παρσέκ": "παρσέκ", + "άνγκστρομ": "άνγκστρομ", # U+00C5 and U+212B + "φέρμι": "φέρμι", + + # others + "εκτάριο": "εκτάρια", + "ντεσιμπέλ": "ντεσιμπέλ", + + "ατομική μονάδα μάζας": "ατομικές μονάδες μάζας", + "ατμόσφαιρα": "ατμόσφαιρες", + "θερμίδα": "θερμίδες", + "βαθμός": "βαθμοί", + "στροφή ανά λεπτό": "στροφές ανά λεπτό", + "μπαρ": "μπαρ", + "κιουρί": "κιουρί", + "μολάρβ": "μολάρβ", + "ρέντγκεν": "ρεντγκεν", + "μο": "μο", + "μολάρ": "μολάρ", + "ντυν": "ντυν", + "εργ": "εργ", + + + ### -------------- EnglishUnits -------------- ### vivi + # length + "ίντσα": "ίντσες", + "πόδι": "πόδια", + "μίλι": "μίλια", + "ροντ": "ροντ", + "λινκ": "λινκ", + "τσέιν": "τσέιν", + + # area + "τετραγωνική ίντσα": "τετραγωνικές ίντσες", + "τετραγωνικό πόδι": "τετραγωνικά πόδια", + "τετραγωνική γιάρδα": "τετραγωνικές γιάρδες", + "τετραγωνικό μίλι": "τετραγωνικά μίλια", + "έικρ": "έικρ", + "εφ μπι εμ": "εφ μπι εμ", + + # volume + "κυβική ίντσα": "κυβικές ίντσες", + "κυβικό πόδι": "κυβικά πόδια", + "κυβική γιάρδα": "κυβικές γιάρδες", + "βαρέλι": "βαρέλια", + "κουταλάκι του γλυκού": "κουταλάκια του γλυκού", + "κουταλιά της σούπας": "κουταλιές της σούπας", + "πεκ": "πεκ", + "μπούσελ": "μπούσελ", + + + # liquid + "δράμι υγρών": "δράμια υγρών", + "ουγγιά υγρών": "ουγγιές υγρών", + + "φλιτζάνι": "φλιτζάνια", + "πίντα": "πίντες", + "γαλόνι": "γαλόνια", + "πίντα": "πίντα", + "κουάρτ": "κουάρτ", + # weight + "δράμι": "δράμια", + "ουγγιά": "ουγγιές", + "λίβρα": "λίβρες", + "χάντρεντγουέιτ": "χάντρεντγουέιτ", + "πένιγουέιτ": "πένιγουέιτ", + "τρόι ουγγιά": "τρόι ουγγιές", + "τρόι λίβρα": "τρόι λίβρες", + "γκρέιν": "γκρέιν", # είναι και τα γραμμ'αρια + + + # energy + "ίππος": "ίπποι", + "βαθμός φαρενάϊτ": "βαθμοί φαρενάϊτ", + "μπι τι γιού": "μπι τι γιού", + + # other + "μίλι ανά ώρα": "μίλια ανά ώρα", + "μίλι ανά γαλόνι": "μίλια ανά γαλόνι", + + # derived units + + + } # Lines starting with "#" are a comment # Each definition in this file is of the form -# name: { "...", "..." "..." } +# - 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: @@ -303,77 +455,77 @@ # 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 # theodora. NumbersOrdinalOnes, NumbersOrdinalTens, NumbersOrdinalHundreds and NumbersOrdinalLarge # are used in roots and powers, all feminine gendered in greek, so for now one case for ordinals is sufficient. -# however, if in the future these rules are applied elsewhere, adding more grammatical genders might +# however, if in the future these rules are applied elsewhere, adding more grammatical genders might # be needed. - NumbersOnes: [ - "μηδέν", "ένα", "δύο", "τρία", "τέσσερα", "πέντε", "έξι", "επτά", "οκτώ", "εννιά", - "δέκα", "έντεκα", "δώδεκα", "δεκατρία", "δεκατέσσερα", "δεκαπέντε", "δεκαέξι", - "δεκαεπτά", "δεκαοκτώ", "δεκαεννέα" + "μηδέν", "ένα", "δύο", "τρία", "τέσσερα", "πέντε", "έξι", "επτά", "οκτώ", "εννέα", "δέκα", "έντεκα", "δώδεκα", "δεκατρία", "δεκατέσσερα", "δεκαπέντε", "δεκαέξι", "δεκαεπτά", "δεκαοκτώ", "δεκαεννέα" ] -#check again +# theodora. σε δυνάμεις και ρίζες κυρίως -> θηλυκό +# I needed to add all these numbers because of how it handles plurals in english, after twenty. +# It seems to combine NumbersTens + NumbersOrdinalOnes, which is incorrect in greek +# The issue remains thouhg for numbers over 100 - NumbersOrdinalOnes: [ - "μηδενική", "πρώτη", "δεύτερη", "τρίτη", "τέταρτη", "πέμπτη", "έκτη", "έβδομη", "όγδοη", "ένατη", "δέκατη", "ενδέκατη", "δωδέκατη", "δέκατη τρίτη", "δέκατη τέταρτη", "δέκατη πέμπτη", "δέκατη έκτη", "δέκατη έβδομη", "δέκατη όγδοοη", "δέκατη ένατη" + "μηδενική", "πρώτη", "δεύτερη", "τρίτη", "τέταρτη", "πέμπτη", "έκτη", "έβδομη", "όγδοη", "ένατη", "δέκατη", "ενδέκατη", "δωδέκατη", "δέκατη τρίτη", "δέκατη τέταρτη", "δέκατη πέμπτη", "δέκατη έκτη", "δέκατη έβδομη", "δέκατη όγδοη", "δέκατη ένατη", "εικοστή", "εικοστή πρώτη", "εικοστή δεύτερη", "εικοστή τρίτη", "εικοστή τέταρτη", "εικοστή πέμπτη", "εικοστή έκτη", "εικοστή έβδομη", "εικοστή όγδοη", "εικοστή ένατη", +"τριακοστή", "τριακοστή πρώτη", "τριακοστή δεύτερη", "τριακοστή τρίτη", "τριακοστή τέταρτη", "τριακοστή πέμπτη", "τριακοστή έκτη", "τριακοστή έβδομη", "τριακοστή όγδοη", "τριακοστή ένατη", +"τεσσαρακοστή", "τεσσαρακοστή πρώτη", "τεσσαρακοστή δεύτερη", "τεσσαρακοστή τρίτη", "τεσσαρακοστή τέταρτη", "τεσσαρακοστή πέμπτη", "τεσσαρακοστή έκτη", "τεσσαρακοστή έβδομη", "τεσσαρακοστή όγδοη", "τεσσαρακοστή ένατη", +"πεντηκοστή", "πεντηκοστή πρώτη", "πεντηκοστή δεύτερη", "πεντηκοστή τρίτη", "πεντηκοστή τέταρτη", "πεντηκοστή πέμπτη", "πεντηκοστή έκτη", "πεντηκοστή έβδομη", "πεντηκοστή όγδοη", "πεντηκοστή ένατη", +"εξηκοστή", "εξηκοστή πρώτη", "εξηκοστή δεύτερη", "εξηκοστή τρίτη", "εξηκοστή τέταρτη", "εξηκοστή πέμπτη", "εξηκοστή έκτη", "εξηκοστή έβδομη", "εξηκοστή όγδοη", "εξηκοστή ένατη", +"εβδομηκοστή", "εβδομηκοστή πρώτη", "εβδομηκοστή δεύτερη", "εβδομηκοστή τρίτη", "εβδομηκοστή τέταρτη", "εβδομηκοστή πέμπτη", "εβδομηκοστή έκτη", "εβδομηκοστή έβδομη", "εβδομηκοστή όγδοη", "εβδομηκοστή ένατη", +"ογδοηκοστή", "ογδοηκοστή πρώτη", "ογδοηκοστή δεύτερη", "ογδοηκοστή τρίτη", "ογδοηκοστή τέταρτη", "ογδοηκοστή πέμπτη", "ογδοηκοστή έκτη", "ογδοηκοστή έβδομη", "ογδοηκοστή όγδοη", "ογδοηκοστή ένατη", +"ενενηκοστή", "ενενηκοστή πρώτη", "ενενηκοστή δεύτερη", "ενενηκοστή τρίτη", "ενενηκοστή τέταρτη", "ενενηκοστή πέμπτη", "ενενηκοστή έκτη", "ενενηκοστή έβδομη", "ενενηκοστή όγδοη", "ενενηκοστή ένατη" ] - -#check again + +# theodora. check again, σε παρονομαστές κυρίως -> ουδέτερο ??????????????????? - NumbersOrdinalPluralOnes: [ - "μηδενικοί", "πρώτοι", "δεύτεροι", "τρίτοι", "τέταρτοι", "πέμπτοι", "έκτοι", "έβδομοι", "όγδοοι", "ένατοι", - "δέκατοι", "ενδέκατοι", "δωδέκατοι" + "μηδενικά", "πρώτα", "δεύτερα", "τρίτα", "τέταρτα", "πέμπτα", "έκτα", "έβδομα", "όγδοα", "ένατα", "δέκατα", "ενδέκατα", "δωδέκατα", "δέκατα τρίτα", "δέκατα τέταρτα", "δέκατα πέμπτα", "δέκατα έκτα", "δέκατα έβδομα", "δέκατα όγδοα", "δέκατα ένατα" ] - # stop when regularity begins + # stop when regularity begins, σε παρονομαστές όταν ο αριθμητής είναι 1 -> ουδέτερο - NumbersOrdinalFractionalOnes: [ "μηδενικό", "πρώτο", "δεύτερο", "τρίτο", "τέταρτο", "πέμπτο", "έκτο", "έβδομο", "όγδοο", "ένατο", "δέκατο", "ενδέκατο", "δωδέκατο", "δέκατο τρίτο", "δέκατο τέταρτο", "δέκατο πέμπτο", "δέκατο έκτο", "δέκατο έβδομο", "δέκατο όγδοο", "δέκατο ένατο" ] - # stop when regularity begins + # stop when regularity begins, παρονομαστές κλασμάτων όταν ο αριθμητής είναι μεγαλύτερος του 1 -> ουδέτερο - NumbersOrdinalFractionalPluralOnes: [ "μηδενικά", "πρώτα", "δεύτερα", "τρίτα", "τέταρτα", "πέμπτα", "έκτα", "έβδομα", "όγδοα", "ένατα", "δέκατα", "ενδέκατα", "δωδέκατα", "δέκατα τρίτα", "δέκατα τέταρτα", "δέκατα πέμπτα", "δέκατα έκτα", "δέκατα έβδομα", "δέκατα όγδοα", "δέκατα ένατα" ] - # What to use for multiples of 10 - NumbersTens: [ "", "δέκα", "είκοσι", "τριάντα", "σαράντα", "πενήντα", "εξήντα", "εβδομήντα", "ογδόντα", "ενενήντα" ] -#check again - NumbersOrdinalTens: [ "", "δέκατη", "εικοστή", "τριακοστή", "τεσσαρακοστή", "πεντηκοστή", "εξηκοστή", "εβδομηκοστή", "ογδοηκοστή", "ενενηκοστή" ] -#check again + - NumbersOrdinalPluralTens: [ "", "δέκατοι", "εικοστοί", "τριακοστοί", "τεσσαρακοστοί", "πεντηκοστοί", "εξηκοστοί", "εβδομηκοστοί", "ογδοηκοστοί", "ενενηκοστοί" ] - - NumbersHundreds: [ "", "εκατό", "διακόσια", "τριακόσια", "τετρακόσια", "πεντακόσια", "εξακόσια", "επτακόσια", "οκτακόσια", "εννιακόσια" - ] + ] + -#check again - NumbersOrdinalHundreds: [ "", "εκατοστή", "διακοσιοστή", "τριακοσιοστή", "τετρακοσιοστή", "πεντακοσιοστή", "εξακοσιοστή", "επτακοσιοστή", "οκτακοσιοστή", "εννιακοσιοστή" ] -#check again + - NumbersOrdinalPluralHundreds: [ "", "εκατοστοί", "διακοσιοστοί", "τριακοσιοστοί", "τετρακοσιοστοί", "πεντακοσιοστοί", "εξακοσιοστοί", "επτακοσιοστοί", "οκτακοσιοστοί", "εννιακοσιοστοί" ] - # At this point, hopefully the language is regular. If not, code needs to be written - NumbersLarge: [ "", "χιλιάδες", "εκατομμύρια", "δισεκατομμύρια", "τρισεκατομμύρια", "τετράκις εκατομμύρια", "πεντάκις εκατομμύρια", "εξάκις εκατομμύρια", "επτάκις εκατομμύρια", "οκτάκις εκατομμύρια", "εννεάκις εκατομμύρια", "δεκάκις εκατομμύρια", "ενδεκάκις εκατομμύρια", "δωδεκάκις εκατομμύρια", "δεκατριάκις εκατομμύρια", "δεκατετράκις εκατομμύρια", "δεκαπεντάκις εκατομμύρια", "δεκαεξάκις εκατομμύρια", "δεκαεπτάκις εκατομμύρια", "δεκαοκτάκις εκατομμύρια", "δεκαεννεάκις εκατομμύρια", "εικοσάκις εκατομμύρια", "εικοσιάπαξ εκατομμύρια", "εικοσιδίς εκατομμύρια", "εικοσιτρίς εκατομμύρια", "εικοσιτετράκις εκατομμύρια", "εικοσιπεντάκις εκατομμύρια", "εικοσιεξάκις εκατομμύρια" @@ -382,7 +534,6 @@ - NumbersOrdinalLarge: [ "", "χιλιαστή", "εκατομμυριοστή", "δισεκατομμυριοστή", "τρισεκατομμυριοστή", "τετράκις εκατομμυριοστή", "πεντάκις εκατομμυριοστή", "εξάκις εκατομμυριοστή", "επτάκις εκατομμυριοστός", "οκτάκις εκατομμυριοστή", "εννεάκις εκατομμυριοστή", "δεκάκις εκατομμυριοστή", "ενδεκάκις εκατομμυριοστή", "δωδεκάκις εκατομμυριοστή", "δεκατριάκις εκατομμυριοστή", "δεκατετράκις εκατομμυριοστή", "δεκαπεντάκις εκατομμυριοστή", "δεκαεξάκις εκατομμυριοστή", "δεκαεπτάκις εκατομμυριοστή", "δεκαοκτάκις εκατομμυριοστή", "δεκαεννεάκις εκατομμυριοστή", "εικοσάκις εκατομμυριοστή", "εικοσιάπαξ εκατομμυριοστή", "εικοσιδίς εκατομμυριοστή", "εικοσιτρίς εκατομμυριοστή", "εικοσιτετράκις εκατομμυριοστή", "εικοσιπεντάκις εκατομμυριοστή", "εικοσιεξάκις εκατομμυριοστή" ] - - NumbersOrdinalPluralLarge: [ "", "χιλιαστοί", "εκατομμυριοστοί", "δισεκατομμυριοστοί", "τρισεκατομμυριοστοί", "τετράκις εκατομμυριοστοί", "πεντάκις εκατομμυριοστοί", "εξάκις εκατομμυριοστοί", "επτάκις εκατομμυριοστοί", "οκτάκις εκατομμυριοστοί", "εννεάκις εκατομμυριοστοί", "δεκάκις εκατομμυριοστοί", "ενδεκάκις εκατομμυριοστοί", "δωδεκάκις εκατομμυριοστοί", "δεκατριάκις εκατομμυριοστοί", "δεκατετράκις εκατομμυριοστοί", "δεκαπεντάκις εκατομμυριοστοί", "δεκαεξάκις εκατομμυριοστοί", "δεκαεπτάκις εκατομμυριοστοί", "δεκαοκτάκις εκατομμυριοστοί", "δεκαεννεάκις εκατομμυριοστοί", "εικοσάκις εκατομμυριοστοί", "εικοσιάπαξ εκατομμυριοστοί", "εικοσιδίς εκατομμυριοστοί", "εικοσιτρίς εκατομμυριοστοί", "εικοσιτετράκις εκατομμυριοστοί", "εικοσιπεντάκις εκατομμυριοστοί", "εικοσιεξάκις εκατομμυριοστοί" - ] + ] \ No newline at end of file diff --git a/Rules/Languages/el/navigate.yaml b/Rules/Languages/el/navigate.yaml index 51044775d..2466efd8c 100644 --- a/Rules/Languages/el/navigate.yaml +++ b/Rules/Languages/el/navigate.yaml @@ -48,16 +48,9 @@ - if: "$MatchCounter = 0 and $SayCommand = 'true'" then_test: - if: "self::m:math and starts-with($NavCommand, 'ZoomOut')" - then: [t: "πλήρης σμίκρυνση", pause: "medium"] + then: [t: "πλήρης μεγέθυνση", pause: "medium"] - else_if: "IsNode(., 'leaf') and starts-with($NavCommand, 'ZoomIn')" - then: - - test: - - if: "string-length(.) = 1" - then: [t: "μεγεθύνθηκε πλήρως"] # phrase('zoomed in all of the way') - - else_if: "$NavNodeOffset = 0" - then: [t: "μεγέθυνση στον πρώτο χαρακτήρα"] # phrase('zoomed in to first character') - else: [t: "μεγέθυνση σε χαρακτήρα"] # phrase('zoomed in to character') - - pause: "medium" + then: [t: "πλήρης μεγέθυνση", pause: "medium"] else: - test: - if: "starts-with($NavCommand, 'Zoom')" @@ -74,21 +67,21 @@ - x: "$Prefix" - test: - if: "substring($NavCommand, string-length($Prefix)+1) = 'In'" - then: [t: "σε"] # phrase(zoom 'in' to see more details) + then: [t: "εντός"] # phrase(zoom 'in' to see more details) - else_if: "substring($NavCommand, string-length($Prefix)+1) = 'InAll'" # HACK: '\uF8FE' is used internally for the concatenation char by 'ct' -- this gets "ed" concatenated to "zoom" - then: [t: "\uF8FEed in all of the way"] # phrase(zoom 'out all of the way' to see more details) + then: [t: "\uF8FEed πλήρως"] #theodora. check # phrase(zoom 'out all the way' to see more details) - else_if: "substring($NavCommand, string-length($Prefix)+1) = 'Out'" - then: [t: "έξω"] # phrase(zoom 'out' to see more details) + then: [t: "εκτός"] # phrase(zoom 'out' to see more details) - else_if: "substring($NavCommand, string-length($Prefix)+1) = 'OutAll'" # HACK: '\uF8FE' is used internally for the concatenation char by 'ct' -- this gets "ed" concatenated to "zoom" - then: [t: "\uF8FEed out all of the way"] # phrase(zoom 'out all of the way' to see more details) + then: [t: "\uF8FEed πλήρως"] #theodora. check # phrase(zoom 'out all the way' to see more details) - else_if: "substring($NavCommand, string-length($Prefix)+1) = 'Next'" then: [t: "δεξιά"] # phrase(move to the 'right') - else_if: "substring($NavCommand, string-length($Prefix)+1) = 'Previous'" then: [t: "αριστερά"] # phrase(move to the 'left') - else_if: "substring($NavCommand, string-length($Prefix)+1) = 'Current'" - then: [t: "τρέχων"] # phrase(who is the 'current' president) + then: [t: "τρέχον"] # phrase(who is the 'current' president) - else_if: "substring($NavCommand, string-length($Prefix)+1) = 'LineStart'" then: [t: "στην αρχή της γραμμής"] # phrase(move 'to start of line') - else_if: "substring($NavCommand, string-length($Prefix)+1) = 'LineEnd'" @@ -105,7 +98,7 @@ - name: into-or-out-of-mtr tag: [mtr, mlabeledtr] - match: "$Move2D = 'σε'" + match: "$Move2D = 'in'" replace: - t: "στήλη" - x: "count($Child2D/preceding-sibling::*)+1" @@ -130,8 +123,8 @@ then: - test: # in postscripts -- base shifts by one if: "$NumPrecedingSiblings mod 2 = 0" - then: [t: "προδείκτης"] # phrase(x with 'subscript' 2) - else: [t: "προεκθέτης"] # phrase(x with 'superscript' 2) + then: [t: "προτεταγμένος δείκτης"] # phrase(x with 'subscript' 2) + else: [t: "προτεταγμένος εκθέτης"] # phrase(x with 'superscript' 2) else: - test: if: "$NumPrecedingSiblings mod 2 = 0" @@ -187,9 +180,9 @@ - else_if: "$PreviousNavCommand = 'ZoomOut'" then: [t: "αναίρεση σμίκρυνσης"] # phrase('undo zoom out') - else_if: "$PreviousNavCommand = 'ZoomInAll'" - then: [t: "αναίρεση πλήρους μεγέθυνσης"] # phrase('undo zooming in all of the way') + then: [t: "αναίρεση πλήρους μεγέθυνσης"] # phrase('undo zooming in all the way') - else_if: "$PreviousNavCommand = 'ZoomOutAll'" - then: [t: "αναίρεση πλήρους σμίκρυνσης"] # phrase('undo zooming out all of the way') + then: [t: "αναίρεση πλήρους σμίκρυνσης"] # phrase('undo zooming out all the way') - else_if: "$PreviousNavCommand = 'MovePrevious' or $PreviousNavCommand = 'MovePreviousZoom'" then: [t: "αναίρεση μετακίνησης αριστερά"] # phrase('undo move left') - else_if: "$PreviousNavCommand = 'MoveNext' or $PreviousNavCommand = 'MoveNextZoom'" @@ -212,19 +205,18 @@ # ********* 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" + if: "$MatchCounter = 0 and $NavVerbosity != 'Terse'" + then: [t: "πλήρως μεγεθυσμένο", pause: "long"] # phrase('zoomed in all of the way') + - 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')" + - set_variables: [NavNode: "@id"] # special case of zooming into a table -- move to the first row (if only one row, first column) - name: zoom-in-table @@ -234,7 +226,12 @@ - with: variables: [SayCommand: "string($NavVerbosity = 'Verbose')"] replace: [x: "."] - - set_variables: [NavNode: "IfThenElse(count(*)=1, (*[1]/*[1]/@id), (*[1]/@id))"] + - test: + if: "count(*)=1" + then: + - set_variables: [NavNode: "*[1]/*[1]/@id"] + else: + - set_variables: [NavNode: "*[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 @@ -248,6 +245,7 @@ - # For msqrt and menclose, if the single child isn't an mrow, don't zoom in name: zoom-in-again + # If there is only one child, this isn't an interesting move -- zoom in again tag: "*" match: - "($NavCommand = 'ZoomIn' or " @@ -260,10 +258,10 @@ variables: [SayCommand: "string($NavVerbosity = 'Verbose')"] replace: [x: "."] - test: - if: "not(*[1][self::m:mrow or @data-from-mathml='mrow'])" + if: "name(*[1]) != 'mrow'" then: - with: - variables: [Move2D: "'σε'", Child2D: "IfThenElse($NavCommand = 'MovePreviousZoom', (*[last()]), (*[1]))"] # phrase('in' the denominator) + variables: [Move2D: "'in'", Child2D: "IfThenElse(count(*)=0, $Move2D, $Move2D)"] # phrase('in' the denominator) replace: [x: "IfThenElse($NavCommand = 'MovePreviousZoom', 1, $Child2D)"] - test: if: "$NavCommand = 'MovePreviousZoom'" @@ -281,23 +279,20 @@ - if: "self::m:mtr or self::m:mlabeledtr" then: - with: - variables: [Move2D: "'σε'", Child2D: "*[1]/*[1]"] # phrase('in' the denominator) + 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: "'σε'", Child2D: "*[1]"] # phrase('in' the denominator) + variables: [Move2D: "'in'", Child2D: "*[1]"] # phrase('in' the denominator) replace: [x: "."] - set_variables: [NavNode: "*[1]/*[2]/@id"] # skip parens/brackets else: - with: - variables: [Move2D: "'σε'", Child2D: "*[1]"] # phrase('in' the denominator) + 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')" + - set_variables: [NavNode: "*[1]/@id"] - name: zoom-in-simple @@ -308,14 +303,11 @@ 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')" + if: "DEBUG($MatchCounter) > 1 and IsNode(., '2D') " + then: [set_variables: [NavNode: "@id"]] # time to stop, not going "in" to next thing, so before "Move2D" else: - with: - variables: [Move2D: "'σε'", Child2D: "*[1]"] # phrase('in' the denominator) + variables: [Move2D: "'in'", Child2D: "*[1]"] # phrase('in' the denominator) replace: [x: "."] - x: "*[1]" @@ -328,7 +320,7 @@ variables: [SayCommand: "string($NavVerbosity = 'Verbose')"] replace: [x: "."] - with: - variables: [Move2D: "'σε'", Child2D: "*[1]"] # phrase('in' the denominator) + variables: [Move2D: "'in'", Child2D: "*[1]"] # phrase('in' the denominator) replace: [x: "."] - test: if: "$NavMode = 'Simple'" @@ -358,7 +350,7 @@ variables: [SayCommand: "string($NavVerbosity = 'Verbose')"] replace: [x: "."] - with: - variables: [Move2D: "'σε'", Child2D: "*[1]"] # phrase('in' the denominator) + variables: [Move2D: "'in'", Child2D: "*[1]"] # phrase('in' the denominator) replace: [x: "."] - x: "*[1]" @@ -367,7 +359,7 @@ match: "$NavCommand = 'ZoomOut' or $NavCommand = 'ZoomOutAll'" replace: - with: - variables: [SayCommand: "string($NavVerbosity != 'Terse')"] + variables: [SayCommand: "string($NavVerbosity = 'Verbose')"] replace: [x: "."] - set_variables: [NavNode: "*[1]/@id"] # no-op for $NavCommand = 'ZoomOut' @@ -384,7 +376,7 @@ tag: "*" match: - "($NavCommand = 'ZoomOut' or $NavCommand = 'ZoomOutAll') and" - - "parent::m:math" + - "parent::m:math " replace: - x: ".." # let math rule deal with it @@ -396,7 +388,7 @@ variables: [SayCommand: "string($NavVerbosity = 'Verbose')"] replace: [x: "."] - with: - variables: [Move2D: "'έξω από'", Child2D: "."] + variables: [Move2D: "'out of'", Child2D: "."] replace: [x: ".."] - x: ".." @@ -410,15 +402,12 @@ - "$NavMode = 'Enhanced'" replace: - with: - variables: [Move2D: "'σε'", Child2D: "*[1]"] # phrase('in' the denominator) + 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')" + then: [set_variables: [NavNode: "@id"]] else: [x: "*[1]"] - name: move-next-zoom-not-enhanced @@ -431,14 +420,12 @@ if: "IsNode(., 'leaf') or $ReadZoomLevel >= DistanceFromLeaf(., false, $NavMode!='Character')" then: # - with: - # variables: [Move2D: "'σε'", Child2D: "following-sibling::*[1]"] # phrase('in' the denominator) + # 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')" + - set_variables: [NavNode: "@id"] else: - with: - variables: [Move2D: "'σε'", Child2D: "*[1]"] # phrase('in' the denominator) + variables: [Move2D: "'in'", Child2D: "*[1]"] # phrase('in' the denominator) replace: [x: "."] - x: "*[1]" @@ -452,19 +439,19 @@ if: "$ReadZoomLevel >= DistanceFromLeaf(., true, $NavMode!='Character')" then: # - with: - # variables: [Move2D: "'σε'", Child2D: "preceding-sibling::*[1]"] # phrase('in' the denominator) + # 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')" + - set_variables: [NavNode: "@id"] else: - with: - variables: [Move2D: "'σε'", Child2D: "*[last()]"] # phrase('in' the denominator) + 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: @@ -472,13 +459,11 @@ variables: [SayCommand: "string($NavVerbosity = 'Verbose')"] replace: [x: "."] # we need to speak it here - # - t: "row" # phrase(the first 'row' of the matrix) + # - t: "γραμμή" # 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')" + - set_variables: [NavNode: "../@id"] - name: zoom-out # a row around a single element -- these might duplicate the position/offset, so we jump an extra level here @@ -489,15 +474,11 @@ 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))]" + 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: "'έξω από'", Child2D: "."] # phrase('out of' the denominator) + variables: [Move2D: "'out of'", Child2D: "."] replace: [x: ".."] - test: if: "parent::m:mtd" @@ -506,9 +487,7 @@ - test: if: "$ReadZoomLevel!=-1" then: [set_variables: [ReadZoomLevel: "DistanceFromLeaf(.., true, $NavMode!='Character')"]] - - set_variables: - - NavNode: "../@id" - - NavNodeOffset: "IfThenElse(../@data-id-offset, ../@data-id-offset, '0')" + - set_variables: [NavNode: "../@id"] # ********* MoveStart/End *************** - name: math-move-to-start-or-end @@ -568,7 +547,7 @@ then: - test: if: "$NavCommand = 'MoveLineStart'" - then: [t: "μετακίνηση στην αρχή της γραμμής"] # phrase('move to start of line') + then: [t: "ετακίνηση στην αρχή της γραμμής"] # phrase('move to start of line') else: [t: "μετακίνηση στο τέλος της γραμμής"] # "$NavCommand = 'MoveLineEnd'" # phrase('move to end of line') - pause: "medium" - test: @@ -605,7 +584,7 @@ - "$NavCommand='MoveColumnStart' or $NavCommand='MoveColumnEnd' or" - "$NavCommand='ReadCellCurrent'" replace: - - t: "δεν υπάρχει στον πίνακα" # phrase('not in table') + - t: "όχι στον πίνακα" # phrase('not in table') - pause: long - set_variables: [SpeakExpression: "'false'"] @@ -718,7 +697,7 @@ - test: if: "$NavVerbosity = 'Verbose'" then: - - t: "μετακίνηση προς τα κάτω" # phrase('move down' to the next row in the table) + - t: "μετακίνηση προς τα κάτω" # phrase('move down to the next row in the table) - pause: short - test: if: "$NavVerbosity != 'Terse'" @@ -748,7 +727,7 @@ - test: if: "$NavVerbosity = 'Verbose'" then: - - t: "μετακίνηση προς τα επάνω" # phrase('move to previous row' in the table) + - t: "μετακίνηση στην προηγούμενη γραμμή" # phrase('move to previous row' to the previous row in the table) - pause: medium - test: if: "preceding-sibling::*" @@ -772,7 +751,7 @@ - test: if: "$NavVerbosity = 'Verbose'" then: - - t: "μετακίνηση προς τα κάτω" # phrase('move to next row' in the table) + - t: "μετακίνηση στην επόμενη γραμμή" # phrase('move to next row' to the next row in the table) - pause: medium - test: if: "following-sibling::*" @@ -797,7 +776,7 @@ - test: if: "$NavVerbosity = 'Verbose'" then: - - t: "μετακίνηση στην προηγούμενη στήλη" # phrase('move to previous column' in the table) + - t: "μετακίνηση στην προηγούμενη στήλη" # phrase('move to previous column' to the previous row in the table) - pause: medium - t: "δεν υπάρχει προηγούμενη στήλη" # phrase('no previous column' in the table) - set_variables: [SpeakExpression: "'false'"] @@ -810,7 +789,7 @@ - test: if: "$NavVerbosity = 'Verbose'" then: - - t: "μετακίνηση στην επόμενη στήλη" # phrase('move to next column' in the table) + - t: "μετακίνηση στην επόμενη στήλη" # phrase('move up' to the previous row in the table) - pause: medium - t: "δεν υπάρχει επόμενη στήλη" # phrase('no next row' in the table) - set_variables: [SpeakExpression: "'false'"] @@ -1087,28 +1066,6 @@ # ======== 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] @@ -1125,12 +1082,34 @@ then: [x: "$Following"] else: - with: - variables: [Move2D: "'σε'", Child2D: "$Following"] # phrase('in' the denominator) + variables: [Move2D: "'in'", Child2D: "$Following"] # phrase('in' the denominator) replace: [x: ".."] - with: variables: [NavCommand: "'MoveNextZoom'"] replace: [x: "$Following"] +# 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 @@ -1184,7 +1163,7 @@ - if: "$NavCommand = 'MoveNext'" then: [t: "μετακίνηση"] # phrase('move' to next entry in table) - else_if: "$NavCommand = 'ReadNext'" - then: [t: "ανάγνωση"] # phrase('read' next entry in table) + then: [t: "ανάγνωση"] #theodora. check # phrase('read' next entry in table) else: [t: "περιγραφή"] # phrase('describe' next entry in table) - t: "δεξιά" # phrase(move 'right') - pause: short @@ -1211,11 +1190,11 @@ if: "following-sibling::*" then: - with: - variables: [Move2D: "'σε'", Child2D: "."] # phrase('in' the denominator) + variables: [Move2D: "'in'", Child2D: "."] # phrase('in' the denominator) replace: [x: ".."] else: - with: - variables: [Move2D: "'έξω από'", Child2D: "."] + variables: [Move2D: "'out of'", Child2D: "."] replace: [x: ".."] - x: ".." @@ -1296,12 +1275,12 @@ if: "preceding-sibling::* and following-sibling::*[1][name(.)='none']" then: - with: - variables: [Move2D: "'έξω από'", Child2D: "."] + variables: [Move2D: "'out of'", Child2D: "."] replace: [x: ".."] - x: "following-sibling::*[1]" else: - with: - variables: [Move2D: "'σε'", Child2D: "following-sibling::*[1]"] # phrase('in' the denominator) + variables: [Move2D: "'in'", Child2D: "following-sibling::*[1]"] # phrase('in' the denominator) replace: [x: ".."] - with: variables: [NavCommand: "'MoveNextZoom'"] @@ -1322,35 +1301,12 @@ if: "IsNode(.., '2D') or not(IsNode(.., 'mathml'))" then: - with: - variables: [Move2D: "'σε'", Child2D: "following-sibling::*[1]"] # phrase('in' the denominator) + 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: "'σε'", 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: "*" @@ -1393,7 +1349,7 @@ - "($NavCommand = 'MovePrevious' or $NavCommand = 'ReadPrevious' or $NavCommand = 'DescribePrevious') and" - "(self::m:math or name(EdgeNode(., 'left', 'math'))='math')" replace: - - t: "αρχή μαθηματικών" # phrase('start of math') + - t: "έναρξη μαθηματικών" # phrase('start of math') - pause: long - set_variables: [SpeakExpression: "'false'"] @@ -1414,27 +1370,6 @@ - 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 @@ -1454,11 +1389,11 @@ if: "preceding-sibling::*" then: - with: - variables: [Move2D: "'σε'", Child2D: "."] # phrase('in' the denominator) + variables: [Move2D: "'in'", Child2D: "."] # phrase('in' the denominator) replace: [x: ".."] else: - with: - variables: [Move2D: "'έξω από'", Child2D: "."] + variables: [Move2D: "'out of'", Child2D: "."] replace: [x: ".."] - x: ".." @@ -1484,7 +1419,7 @@ if: "not(parent::m:mrow)" then: - with: - variables: [Move2D: "'σε'", Child2D: "preceding-sibling::*[1]"] # phrase('in' the denominator) + variables: [Move2D: "'in'", Child2D: "preceding-sibling::*[1]"] # phrase('in' the denominator) replace: [x: ".."] - set_variables: [NavNode: "preceding-sibling::*[1]/*[2]/@id"] @@ -1548,12 +1483,12 @@ if: "count(preceding-sibling::*) > 2 and preceding-sibling::*[1][name(.)='none']" then: - with: - variables: [Move2D: "'έξω από'", Child2D: "."] + variables: [Move2D: "'out of'", Child2D: "."] replace: [x: ".."] - x: "preceding-sibling::*[1]" # skip over 'none' else: - with: - variables: [Move2D: "'σε'", Child2D: "preceding-sibling::*[1]"] # phrase('in' the denominator) + variables: [Move2D: "'in'", Child2D: "preceding-sibling::*[1]"] # phrase('in' the denominator) replace: [x: ".."] - with: variables: [NavCommand: "'MovePreviousZoom'"] @@ -1574,7 +1509,7 @@ if: "IsNode(.., '2D') or not(IsNode(.., 'mathml'))" then: - with: - variables: [Move2D: "'σε'", Child2D: "preceding-sibling::*[1]"] # phrase('in' the denominator) + variables: [Move2D: "'in'", Child2D: "preceding-sibling::*[1]"] # phrase('in' the denominator) replace: [x: ".."] - set_variables: [NavNode: "preceding-sibling::*[1]/@id"] @@ -1588,14 +1523,14 @@ - test: - if: "$NavMode = 'Enhanced'" then: - - t: "χαρακτήρας" # phrase(a mathematical 'character') + - t: "χαρακτήρα" # phrase(a mathematical 'character') - set_variables: [NavMode: "'Character'", ReadZoomLevel: "1"] - else_if: "$NavMode = 'Character'" then: - - t: "απλός" # phrase(a 'simple' way to do something) + - t: "απλή" #theodora. check # phrase(a 'simple' way to do something) - set_variables: [NavMode: "'Simple'", ReadZoomLevel: "1"] - else: - - t: "ενισχυμένος" # phrase(an 'enhanced' way to do something) + - t: "ενισχυμένη" # phrase(an 'enhanced' way to do something) - set_variables: [NavMode: "'Enhanced'", ReadZoomLevel: "-1"] - t: "λειτουργία" # phrase(a simple 'mode' of use) - pause: long @@ -1613,14 +1548,14 @@ - test: - if: "$NavMode = 'Enhanced'" then: - - t: "απλός" # phrase(a 'simple' way to do something) + - t: "απλού" # phrase(an 'simple' way to do something) - set_variables: [NavMode: "'Simple'", ReadZoomLevel: "1"] - else_if: "$NavMode = 'Character'" then: - - t: "ενισχυμένος" # phrase(an 'enhanced' way to do something) + - t: "ενισχυμένου" # phrase(an 'enhanced' way to do something) - set_variables: [NavMode: "'Enhanced'", ReadZoomLevel: "-1"] - else: - - t: "χαρακτήρας" # phrase(a mathematical 'character') + - t: "χαρακτήρα" # phrase(a mathematical 'character') - set_variables: [NavMode: "'Character'", ReadZoomLevel: "1"] - t: "λειτουργία" # phrase(a simple 'mode' of use) - pause: long @@ -1638,11 +1573,11 @@ - test: if: "$Overview = 'true'" then: - - t: "απόδοση έκφρασης μετά τη μετακίνηση" # phrase('speak expression after move') + - t: "εκφώνηση της έκφρασης μετά την μετακίνηση" # phrase('speak expression after move') - pause: long - set_variables: [Overview: "'false'"] else: - - t: "επισκόπηση έκφρασης μετά τη μετακίνηση" # phrase('overview of expression after move') + - t: "επισκόπηση της έκφρασης μετά την μετακίνηση" # phrase('overview of expression after move') - pause: long - set_variables: [Overview: "'true'"] @@ -1657,7 +1592,7 @@ - if: "$NavCommand = 'ReadCurrent'" then: [t: "ανάγνωση"] # phrase('read' next entry in table) else: [t: "περιγραφή"] # phrase('describe' next entry in table) - - t: "τρέχων" # phrase('current' entry in table) + - t: "current" # phrase('current' entry in table) - pause: long - set_variables: [NavNode: "@id"] @@ -1679,9 +1614,9 @@ - else_if: "starts-with($NavCommand, 'Describe')" then: [t: "περιγραφή"] # phrase('describe' next entry in table) - else_if: "starts-with($NavCommand, 'MoveTo')" - then: [t: "μετακίνηση στο "] # phrase('move to' the next entry in table) + then: [t: "μετακίνηση"] # phrase('move to' the next entry in table) else: [t: "ορισμός"] # phrase('set' the value of the next entry in table) - - t: "δεσμευτικό θέσης" # phrase('placeholder' for the value) + - t: "κενής θέσης" # phrase('placeholder' for the value) - x: "$PlaceMarkerIndex" - pause: long - set_variables: [NavNode: "$PlaceMarker"] @@ -1693,7 +1628,7 @@ - test: if: "$NavVerbosity != 'Terse'" then: - - t: "ορισμός δεσμευτικού θέσης" # phrase('set placeholder' to the value) + - t: "ορισμός κενής θέσης" # phrase('set placeholder' to the value) - x: "$PlaceMarkerIndex" - pause: long - set_variables: [NavNode: "@id"] @@ -1725,11 +1660,11 @@ - test: if: "$NavCommand = 'WhereAmI'" then: - - t: "εντός χωρίς τίποτα παραπάνω" # phrase('inside of nothing more') + - t: "μέσα σε τίποτα περισσότερο" # phrase('inside of nothing more') - pause: long - set_variables: [SpeakExpression: "'false'"] else: - - t: "εντός" # phrase('inside' a big expression) + - t: "μέσα σε" # phrase('inside' a big expression) - pause: medium - set_variables: [NavNode: "@id"] @@ -1737,7 +1672,7 @@ tag: "*" match: "$NavCommand = 'WhereAmI' or $NavCommand = 'WhereAmIAll'" replace: - - t: "εντός" # phrase('inside' a big expression) + - t: "μέσα σε" # phrase('inside' a big expression) - pause: medium - test: - if: "$NavMode='Enhanced' and parent::*[self::m:mrow and (IsBracketed(., '(', ')', false) or IsBracketed(., '[', ']', false))]" diff --git a/Rules/Languages/el/overview.yaml b/Rules/Languages/el/overview.yaml index a5c84a9fa..b18c7690a 100644 --- a/Rules/Languages/el/overview.yaml +++ b/Rules/Languages/el/overview.yaml @@ -12,18 +12,9 @@ # 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: default - tag: math - match: "." - replace: [{x: "*[1]"}] - -- name: default - tag: [mi, mn, mo, mtext] - match: "." - replace: [{x: text()}] -- name: default - tag: mfrac +- name: overview-default + tag: [mfrac, fraction] match: "." replace: - test: @@ -35,8 +26,8 @@ else: - t: "κλάσμα" -- name: default - tag: msqrt +- name: overview-default + tag: [msqrt, "square-root"] match: "." replace: - t: "τετραγωνική ρίζα" @@ -45,28 +36,28 @@ then: - test: if: "$Verbosity!='Terse'" - then: {t: "του"} + then: [t: "του"] - x: "*[1]" -- name: default - tag: mroot +- name: overview-default + tag: [mroot, root] match: "." replace: - test: if: "*[2][self::m:mn]" then_test: - - if: "*[2][text()='2']" - then: {t: "τετραγωνική ρίζα"} - - else_if: "*[2][text()='3']" - then: {t: "κυβική ρίζα"} + - if: "*[2][.='2']" + then: [t: "τετραγωνική ρίζα"] + - else_if: "*[2][.='3']" + then: [t: "κυβική ρίζα"] - else_if: "*[2][not(contains(., '.'))]" - then: [{x: "ToOrdinal(*[2])"}, {t: "ρίζα"}] + then: [x: "ToOrdinal(*[2])", t: "ρίζα"] else: - test: if: "*[2][self::m:mi][string-length(.)=1]" then: - x: "*[2]" - - pronounce: [{text: "οστή"}] + - pronounce: [{text: " οστή"}] #theodora. english version: -pronounce: [{text: "-th"}, {ipa: "θ"}, {sapi5: "th"}, {eloquence: "T"}] else: {x: "*[2]"} - t: "ρίζα" - test: @@ -74,11 +65,11 @@ then: - test: if: "$Verbosity!='Terse'" - then: {t: "του"} + then: [t: "του"] - x: "*[1]" -- name: default - tag: mtable +- name: matrix-override + tag: mrow match: - "*[2][self::m:mtable] and" - "(IsBracketed(., '(', ')') or IsBracketed(., '[', ']') or IsBracketed(., '|', '|'))" @@ -88,15 +79,15 @@ - t: "με" - x: count(*[2]/*[self::m:mtr][1]/*) - test: - if: "*[1][text()='|']" # just need to check the first bracket since we know it must be (, [, or | - then: {t: "ορίζουσα"} - else: {t: "πίνακας"} + if: "*[1][.='|']" # just need to check the first bracket since we know it must be (, [, or | + then: [t: "ορίζουσα"] + else: [t: "πίνακας"] -- name: default +- name: overview-default tag: mtable match: "." replace: - - t: "ο" + - t: "" - x: count(*[2]/*) - t: "με" - x: count(*[2]/*[self::m:mtr][1]/*) @@ -108,7 +99,7 @@ replace: - insert: nodes: "*" - replace: [{pause: auto}] + replace: [pause: auto] - name: long-mrow tag: mrow diff --git a/Rules/Languages/el/unicode-full.yaml b/Rules/Languages/el/unicode-full.yaml index 5bc566e02..9df9be30a 100644 --- a/Rules/Languages/el/unicode-full.yaml +++ b/Rules/Languages/el/unicode-full.yaml @@ -31,12 +31,15 @@ - "×": # 0xd7 - test: if: "$SpeechStyle != 'ClearSpeak' or $ClearSpeak_MultSymbolX = 'Auto'" - then: [t: "φορές"] # (en: 'times', google translation) + then: [t: "επί"] # (en: 'times', google translation) else_test: if: $ClearSpeak_MultSymbolX = 'By' then: [t: "επί"] # (en: 'by', google translation) else: [t: "σταυρός"] # (en: 'cross', google: 'σταυρός') - "÷": [t: "διά"] # 0xf7 (en: 'divided by', google: 'διαιρείται από') + - "¡": [t: "ανεστραμμένο ερωτηματικό"] # 0xa1 + - "¶": [t: "σημάδι παραγράφου"] # 0xb6 + - "¿": [t: "ανεστραμμένο αγγλικό ερωτηματικό"] # 0xbf - "ʰ": [t: "τροποποιητής μικρό h"] # 0x2b0 (en: 'modifier small h', google translation) - "ʱ": [t: "τροποποιητής μικρό h με γάντζο"] # 0x2b1 (en: 'modifier small h with hook', google translation) - "ʲ": [t: "τροποποιητής μικρό j"] # 0x2b2 (en: 'modifier small j', google translation) @@ -216,9 +219,11 @@ - "ϒ": [t: "κεφαλαίο καλλιγραφικό ύψιλον"] # 0x3d2 (en: 'upsilon with hook', google: 'upsilon με γάντζο') - "ϓ": [t: "κεφαλαίο καλλιγραφικό ύψηλον με οξεία"] # 0x3d3 (en: 'upsilon with acute and hook', google translation) - "ϔ": [t: "κεφαλαίο καλλιγραφικό ύψιλον με διαλυτικά"] # 0x3d4 (en: 'upsilon with diaeresis and hook', google translation) - - "ϕ": [t: "φι"] # 0x3d5 (en: 'phi', google: 'phi') - - "ϖ": [t: "παραλλαγή του πι"] # 0x3d6 (en: 'pi', google: 'πι') + - "ϕ": [t: "φ"] # 0x3d5 (en: 'phi', google: 'phi') + - "ϖ": [t: "παραλλαγή του π"] # 0x3d6 (en: 'pi', google: 'πι') - "ϗ": [t: "παραλλαγή του κάππα"] # 0x3d7 (en: 'kai', google: 'κάι') + - "Ϙ": [t: "κεφαλαίο αρχαϊκό κάππα"] # 0x3d8 + - "ϙ": [t: "αρχαϊκό κάππα"] # 0x3d9 - "ϵ": [t: παραλλαγή του έψιλον"] # 0x3f5 (en: 'epsilon', google: 'έψιλο') - "϶": [t: "ανεστραμμένο έψιλον"] # 0x3f6 (en: 'reversed epsilon', google: 'αντιστρέψιμο epsilon') - "А-Я": # 0x410 - 0x42f @@ -271,6 +276,9 @@ - "э": [t: "ε"] # 0x44d (google: 'э') - "ю": [t: "γιού"] # 0x44e - "я": [t: "γιά"] # 0x44f (google: 'ναι') + - "؆": [t: "αραβο-ινδική κυβική ρίζα"] # 0x606 + - "؇": [t: "αραβο-ινδική ρίζα τέταρτης τάξης"] # 0x607 + - "؈": [t: "αραβική ακτίνα"] # 0x608 - "‐": [t: "ενωτικό"] # 0x2010 (en: 'hyphen', google: 'ενωτικό') - "‑": [t: "ενωτικό"] # 0x2011 (en: 'hyphen', google translation) - "‒": [t: "παύλα αριθμών"] # 0x2012 (en: 'figure dash', google translation) @@ -281,6 +289,7 @@ - "†": [t: "οβελίσκος"] # 0x2020 (en: 'dagger', google: 'στιλέτο') - "‡": [t: "διπλός οβελίσκος"] # 0x2021 (en: 'double dagger', google: 'διπλό μαχαίρι') + - " - ": [t: " "] # 0x2000 - 0x2007 - "•": # 0x2022 - test: if: "@data-chem-formula-op" @@ -293,12 +302,12 @@ - "$SpeechStyle != 'ClearSpeak' or $ClearSpeak_Ellipses = 'Auto' or" # must be ClearSpeak and $ClearSpeak_Ellipses = 'AndSoOn' # speak '…' as 'and so on...' unless expr starts with '…' - - "../*[1][text()='…']" - then: [t: "τρεις τελείες"] # (google translation) + - "../*[1][.='…']" + then: [t: "αποσιωπητικά"] # (google translation) else_test: # must have $ClearSpeak_Ellipses = 'AndSoOn' if: "count(following-sibling::*) = 0" - then: [t: "αποσιωπητικά"] # (en: 'and so on', google translation) - else: [t: "και ούτω καθεξής"] # (en: 'and so on up to', google: 'και ούτω καθεξής') + then: [t: "και ούτω καθεξής"] # (en: 'and so on', google translation) + else: [t: "και ούτω καθεξής ως"] # (en: 'and so on up to', google: 'και ούτω καθεξής') - "‰": [t: "ποσοστό επί τοις χιλίους"] # 0x2030 (en: 'per mille', google: 'ανά χιλιοστό') - "‱": [t: "ποσοστό επί τοις δεκάκις χιλίοις"] # 0x2031 (en: 'per ten thousand', google: 'ανά δέκα χιλιάδες') @@ -315,10 +324,18 @@ - "⁄": [t: "διαιρείται από"] # 0x2044 (en: 'divided by', google: 'διαιρείται από') - "⁅": [t: "αριστερή τετραγωνική αγκύλη με παύλα"] # 0x2045 (en: 'left square bracket with quill', google translation) - "⁆": [t: "δεξιά τετραγωνική αγκύλη με παύλα"] # 0x2046 (en: 'right square bracket with quill', google translation) - - "⁗": [t: "τετραπλή παράγωγος"] # 0x2057 (google: 'τετραπλή πρωταρχική') + - "※": [t: "σημαδι αναφοράς"] # 0x203b + - "‿": [t: "τόξο σύνδεσης κάτω από"] # 0x203F + - "⁀": [t: "τόξο σύνδεσης"] # 0x2040 + - "⁎": [t: "αστερίσκος χαμηλά"] # 0x204e + - "⁏": [t: "ανεστραμμένο ελληνικό ερωτηματικό"] # 0x204f + - "⁐": [t: "κλείσιμο κενού"] # 0x2050 + - "⁑": [t: "κάθετα διατεταγμένοι αστερίσκοι"] # 0x2051 + - "⁒": [t: "εμπορισκό σύμβολο μείον"] # 0x2052 + - "⁗": [t: "τετραπλή παράγωγος"] # 0x2057 (google: 'τετραπλή πρωταρχική') - "⁠": [t: ""] # 0x2060 - "⁰": [t: "στη μηδενική δύναμη"] # 0x2070 (en: 'to the zeroth power', google translation) - - "ⁱ": [t: "εις το i"] # 0x2071 (en: 'to the eihth power', google translation) + - "ⁱ": [t: "εις την i οστή δύναμη"] # 0x2071 (en: 'to the eihth power', google translation) - "⁴": [t: "στην τέταρτη δύναμη"] # 0x2074 (en: 'to the fourth power', google translation) - "⁵": [t: "στην πέμπτη δύναμη"] # 0x2075 (en: 'to the fifth power', google translation) - "⁶": [t: "στην έκτη δύναμη"] # 0x2076 (en: 'to the sixth power', google translation) @@ -347,7 +364,7 @@ - "₍": [t: "δείκτης αριστερή παρένθεση"] # 0x208d (en: 'subscript left parenthesis', google translation) - "₎": [t: "δείκτης δεξιά παρένθεση"] # 0x208e (en: 'subscript right parenthesis', google translation) - "ₐ": [t: "δείκτης αγγλικό a"] # 0x2090 (en: 'sub A', google translation) - - "ₑ": [t: "δείκτης αγγλικό i"] # 0x2091 (en: 'sub E', google translation) + - "ₑ": [t: "δείκτης αγγλικό e"] # 0x2091 (en: 'sub E', google translation) - "ₒ": [t: "δείκτης αγγλικό o"] # 0x2092 (en: 'sub O', google translation) - "ₓ": [t: "δείκτης αγγλικό x"] # 0x2093 (en: 'sub X', google translation) - "ₕ": [t: "δείκτης αγγλικό h"] # 0x2095 (en: 'sub H', google translation) @@ -412,12 +429,12 @@ - "⃨": [t: "τριπλή τελεία κάτω από"] # 0x20e8 (en: 'triple underdot', google translation) - "⃩": [t: "καλλωπιστική πλατιά γέφυρα πάνω από"] # 0x20e9 (en: 'wide bridge above embellishment', google translation) - "⃪": [t: "καλλωπιστικό βέλος που επικαλύπτει"] # 0x20ea (en: 'leftwards arrow overlay embellishment', google translation) - - "⃫": [t: "καλλωπιστικός μεγάλος διπλός σόλιδος που επικαλύπτει"] # 0x20eb (en: 'long double solidus overlay embellishment', google translation) - - "⃬": [t: "καλλωπιστική μύτη βέλους προς τα δεξιά κάτω από"] # 0x20ec (en: 'rightwards harpoon with barb downwards embellishment', google translation) + - "⃫": [t: "καλλωπιστικός μεγάλος διπλός σόλιδος που επικαλύπτει"] # 0x20eb (en: 'long double solidus overlay embellishment', google translation) + - "⃬": [t: "καλλωπιστική μύτη βέλους προς τα δεξιά κάτω από"] # 0x20ec (en: 'rightwards harpoon with barb downwards embellishment', google translation) - "⃭": [t: "καλλωπιστική κάτω μύτη βέλους προς τα αριστερά κάτω από"] # 0x20ed (en: 'leftwards harpoon with barb downwards embellishment', google translation) - - "⃮": [t: "καλλωπιστικό βέλος προς τα αριστερά κάτω από"] # 0x20ee (en: 'left arrow below embellishment', google translation) + - "⃮": [t: "καλλωπιστικό βέλος προς τα αριστερά κάτω από"] # 0x20ee (en: 'left arrow below embellishment', google translation) - "⃯": [t: "καλλωπιστικό βέλος προς τα δεξιά κάτω από"] # 0x20ef (en: 'right arrow below embellishment', google translation) - - "⃰": [t: "καλλωπιστικός αστερίσκος πάνω από"] # 0x20f0 (en: 'asterisk above embellishment', google translation) + - "⃰": [t: "καλλωπιστικός αστερίσκος πάνω από"] # 0x20f0 (en: 'asterisk above embellishment', google translation) - "℄": [t: "σύμβολο κεντρικής γραμμής"] # 0x2104 (en: 'center line symbol', google translation) - "℅": [t: "υπόψιν"] # 0x2105 (google: 'φροντίδα του') - "℆": [t: "το καθένα"] # 0x2106 (google translation) @@ -426,21 +443,23 @@ - "℉": [t: "βαθμοί Φαρενάιτ"] # 0x2109 (en: 'degrees fahrenheit', google: 'βαθμοί φάρεναϊτ') - "ℊ": [t: "καλλιγραφικό g"] # 0x210a (en: 'script g', google: 'σενάριο g') - "ℌℑℨℭ": # 0x210c, 0x2111, 0x2128, 0x212d - - t: "καλλιγραφικό g" # (en: 'fraktur', google: 'fraktur') + - t: "φράκτουρ" # (en: 'fraktur', google: 'fraktur') - spell: "translate('.', 'ℌℑℨℭ', 'HIZC')" - "ℍℙℾℿ": # 0x210d, 0x2119, 0x213e, 0x213f - - test: - if: "$Verbosity!='Terse'" - then: [t: "με διπλή γραφή"] # (en: 'double struck', google translation) + + # - test: + # if: "$Verbosity!='Terse'" + - t: "με διπλή γραφή" # (en: 'double struck', google translation) - spell: "translate('.', 'ℍℙℾℿ', 'HPΓΠ')" - "ℎ": [t: "σταθερά του Πλάνκ"] # 0x210e (en: 'planck constant', google: 'planck σταθερά') - - "ℏ": # 0x210f - - test: - if: "($Verbosity='Terse')" - then: [t: "h με παύλα"] # (google translation) - else: [t: "h με παύλα"] # (en: 'reduced planck constant', google: 'μειωμένη σταθερά planck') + - "ℏ": [t: "h με παύλα"] + #- "ℏ": # 0x210f + # - test: + # if: "($Verbosity='Terse')" + # then: [t: "h με παύλα"] # (google translation) + # else: [t: "h με παύλα"] # (en: 'reduced planck constant', google: 'μειωμένη σταθερά planck') - "ℐℒ℘ℬℰℱℳ": # 0x2110, 0x2112, 0x2118, 0x2130, 0x2131, 0x2133 - t: "καλλιγραφικό" # (en: 'script', google: 'γραφή') @@ -477,9 +496,12 @@ - "ℼ": [t: "πι με διπλή γραφή"] # 0x213c (en: 'double struck pi', google translation) - "ℽ": [t: "γάμμα με διπλή γραφή"] # 0x213d (en: 'double struck gamma', google translation) - "⅀": [t: "νιοστό άθροισμα με διπλή γραμμή"] # 0x2140 (en: 'double struck n-ary summation', google translation) - - "⅋": [t: "ανάποδο ampersand"] # 0x214b (en: 'turned ampersand', google translation) + - "⅋": [t: "ανάποδο άμπερσαντ"] # 0x214b (en: 'turned ampersand', google translation) - "⅌": [t: "ανά"] # 0x214c (en: 'per', google translation) - "ⅎ": [t: "ανάποδο κεφαλαίο f"] # 0x214e (en: 'turned F', google translation) + - "¼": [t: "ένα τέταρτο"] # 0x00bc + - "½": [t: "μισό"] # 0x00bd + - "¾": [t: "τρία τέταρτα"] # 0x00be - "⅐": [t: "ένα έβδομο"] # 0x2150 (en: 'one seventh', google translation) - "⅑": [t: "ένα ένατο"] # 0x2151 (en: 'one ninth', google translation) - "⅒": [t: "ένα δέκατο"] # 0x2152 (en: 'one tenth', google translation) @@ -525,8 +547,8 @@ - "ⅺ": [t: "λατινικός μικρός αριθμός έντεκα"] # 0x217a (en: 'X I', google translation) - "ⅻ": [t: "λατινικός μικρός αριθμός δώδεκα"] # 0x217b (en: 'X I I', google translation) - "ⅼ": [t: "λατινικός μικρός αριθμός πενήντα"] # 0x217c (en: 'L', google translation) - - "ⅽ": [t: "λατινικός μικρός αριθμός εκατό"] # 0x217d (en: 'C', google translation) - - "ⅾ": [t: "λατινικός μικρός αριθμός πεντακόσια"] # 0x217e (en: 'D', google translation) + - "ⅽ": [t: "λατινικός μικρhhός αριθμός εκατό"] # 0x217d (en: 'C', google translation) + - "ⅾ": [t: "λατινικός μικρόςHhh αριθμός πεντακόσια"] # 0x217e (en: 'D', google translation) - "ⅿ": [t: "λατινικός μικρός αριθμός χίλια"] # 0x217f (en: 'M', google translation) - "↉": [t: "μηδεν τρίτα"] # 0x2189 (en: 'zero thirds', google translation) - "←": [t: "βέλος προς τα αριστερά"] # 0x2190 (en: 'leftwards arrow', google: 'βέλος αριστερά') @@ -656,95 +678,103 @@ - test: if: "$Verbosity!='Terse'" then: [t: "το"] # (en: 'the', google translation) - - t: "συμπλήρωμα" # (en: 'complement of', google: 'συμπλήρωμα του') + - t: "συμπλήρωμα" # (en: 'complement of', google: 'συμπλήρωμα του') - "∂": # 0x2202 - test: if: "$Verbosity='Terse'" then: [t: "μερικό"] # (en: 'partial', google translation) - else: [t: "μερική παράγωγος"] # (en: 'partial derivative', google: 'μερικό παράγωγο') + else: [t: "μερικό διαφορικό"] # (en: 'partial derivative', google: 'μερικό παράγωγο') - "∃": [t: "υπάρχει"] # 0x2203 (en: 'there exists') - "∄": [t: "δεν υπάρχει"] # 0x2204 (en: 'there does not exist') - "∅": [t: "κενό σύνολο"] # 0x2205 (en: 'empty set', google: 'άδειο σετ') + # new /changed - "∆": # 0x2206 - - test: - if: "$Verbosity!='Terse'" - then: [t: "ο"] # (en: 'the', google translation) - - t: "τελεστής δέλτα" # (en: 'laplacian of', google: 'laplacian του') - - "∇": # 0x2207 - - test: - if: "$Verbosity!='Terse'" - then: [t: "ο"] # (en: 'the', google translation) - - t: "τελεστής ανάδελτα" # (en: 'gradient of', google: 'κλίση του') - - "∈": # 0x2208 - test: - if: "$SpeechStyle != 'ClearSpeak'" - then: [t: "είναι στοιχείο του"] # (en: 'an element of', google translation) - # Several options for speaking elements in ClearSpeak -- they split between being inside a set or not and then the option - else_test: - if: "../../self::m:set or ../../../self::m:set" # inside a set - then_test: - - if: $ClearSpeak_SetMemberSymbol = 'Auto' or $ClearSpeak_SetMemberSymbol = 'In' - then: [t: "σε"] # (en: 'in', google translation) - - else_if: $ClearSpeak_SetMemberSymbol = 'Member' - then: [t: "στοιχείο του"] # (en: 'member of', google translation) - - else_if: $ClearSpeak_SetMemberSymbol = 'Element' - then: [t: "στοιχείο του"] # (en: 'element of', google translation) - - else: [t: "ανήκει στο"] # $ClearSpeak_SetMemberSymbol = 'Belongs' (en: 'belonging to', google: 'ανήκει σε') - else_test: - - if: $ClearSpeak_SetMemberSymbol = 'Auto' or $ClearSpeak_SetMemberSymbol = 'Member' - then: [t: "είναι στοιχείο του"] # (en: 'is a member of', google translation) - - else_if: $ClearSpeak_SetMemberSymbol = 'Element' - then: [t: "είναι στοιχείο του"] # (en: 'is an element of', google translation) - - else_if: $ClearSpeak_SetMemberSymbol = 'In' - then: [t: "είναι εντός του"] # (en: 'is in', google translation) - - else: [t: "ανήκει στο"] # $ClearSpeak_SetMemberSymbol = 'Belongs' (en: 'belongs to', google: 'ανήκει στον') + if: "following-sibling::*" + + + then_test: + if: "$Verbosity!='Terse'" + then: [t: "η λαπλασιανή του"] # "LahPlahsian" sounds better than "laplacian" in speech engines tested + else: [t: "λαπλασιανή"] + else: [t: "λαπλασιανή"] + + - "∇": [t: "ανάδελτα"] # 0x2207 + # check. theodora. the english version has the 22208 rules removed + #- "∈": # 0x2208 + # - test: + # if: "$SpeechStyle != 'ClearSpeak'" + # then: [t: "είναι στοιχείο του"] # (en: 'an element of', google translation) + # # Several options for speaking elements in ClearSpeak -- they split between being inside a set or not and then the option + # else_test: + # if: "../../self::m:set or ../../../self::m:set" # inside a set + # then_test: + # - if: $ClearSpeak_SetMemberSymbol = 'Auto' or $ClearSpeak_SetMemberSymbol = 'In' + # then: [t: "σε"] # (en: 'in', google translation) + # - else_if: $ClearSpeak_SetMemberSymbol = 'Member' + # then: [t: "στοιχείο του"] # (en: 'member of', google translation) + # - else_if: $ClearSpeak_SetMemberSymbol = 'Element' + # then: [t: "στοιχείο του"] # (en: 'element of', google translation) + # - else: [t: "ανήκει στο"] # $ClearSpeak_SetMemberSymbol = 'Belongs' (en: 'belonging to', google: 'ανήκει σε') + # else_test: + # - if: $ClearSpeak_SetMemberSymbol = 'Auto' or $ClearSpeak_SetMemberSymbol = 'Member' + # then: [t: "είναι στοιχείο του"] # (en: 'is a member of', google translation) + # - else_if: $ClearSpeak_SetMemberSymbol = 'Element' + # then: [t: "είναι στοιχείο του"] # (en: 'is an element of', google translation) + # - else_if: $ClearSpeak_SetMemberSymbol = 'In' + # then: [t: "είναι εντός του"] # (en: 'is in', google translation) + # - else: [t: "ανήκει στο"] # $ClearSpeak_SetMemberSymbol = 'Belongs' (en: 'belongs to', google: 'ανήκει στον') - "∉": # 0x2209 # rule is identical to 0x2208 - test: if: "$SpeechStyle != 'ClearSpeak'" - then: [t: "δεν είναι στοιχείο του"] # (en: 'is not an element of', google translation) + then: [t: "δεν ανήκει"] # (en: 'is not an element of', google translation) -- δεν είναι στοιχείο του # Several options for speaking elements in ClearSpeak -- they split between being inside a set or not and then the option else_test: if: "../../self::m:set or ../../../self::m:set" # inside a set then_test: - if: $ClearSpeak_SetMemberSymbol = 'Auto' or $ClearSpeak_SetMemberSymbol = 'In' - then: [t: "όχι εντός του"] # (en: 'not in', google translation) + then: [t: "δεν ανήκει"] # (en: 'not in', google translation) - else_if: $ClearSpeak_SetMemberSymbol = 'Member' - then: [t: "όχι στοιχείο του"] # (en: 'not member of', google translation) + then: [t: "δεν ανήκει στο"] # (en: 'not member of', google translation) -- όχι στοιχείο του - else_if: $ClearSpeak_SetMemberSymbol = 'Element' - then: [t: "όχι στοιχείο του"] # (en: 'not element of', google translation) - - else: [t: "δεν ανήκει στο"] # $ClearSpeak_SetMemberSymbol = 'Belongs' (en: 'not belonging to', google: 'δεν ανήκει σε') + then: [t: "δεν ανήκει στο"] # (en: 'not element of', google translation) -- όχι στοιχείο του + - else: [t: "δεν ανήκει"] # $ClearSpeak_SetMemberSymbol = 'Belongs' (en: 'not belonging to', google: 'δεν ανήκει σε') else_test: - - if: $ClearSpeak_SetMemberSymbol = 'Auto' or $ClearSpeak_SetMemberSymbol = 'Member' - then: [t: "δεν είναι στοιχείο του"] # (en: 'is not a member of', google translation) + - if: $ClearSpeak_SetMemberSymbol = 'Auto' or $ClearSpeak_SetMemberSymbol = 'In' + then: [t: "δεν ανήκει"] # (en: 'is not a member of', google translation) -- δεν είναι στοιχείο του - else_if: $ClearSpeak_SetMemberSymbol = 'Element' - then: [t: "δεν είναι στοιχείο του"] # (en: 'is not an element of', google translation) - - else_if: $ClearSpeak_SetMemberSymbol = 'In' - then: [t: "δεν είναι εντός του"] # (en: 'is not in', google translation) - - else: [t: "δεν ανήκει στο"] # $ClearSpeak_SetMemberSymbol = 'Belongs' (en: 'does not belong to', google: 'δεν ανήκει') + then: [t: "δεν ανήκει"] # (en: 'is not an element of', google translation) -- δεν είναι στοιχείο του + - else_if: $ClearSpeak_SetMemberSymbol = 'Member' + then: [t: "δεν ανήκει στο"] # (en: 'is not in', google translation) + - else: [t: "δεν ανήκει"] # $ClearSpeak_SetMemberSymbol = 'Belongs' (en: 'does not belong to', google: 'δεν ανήκει') - "∊": # 0x220a - test: if: "$SpeechStyle != 'ClearSpeak'" - then: [t: "είναι στοιχείο του"] # (en: 'is an element of', google translation) + then: + - test: + if: "$Verbosity!='Terse' and not(parent::m:set)" # "the set x is an element of ..." sounds bad + then: [t: ""] #??? + - t: "ανήκει" # -- ένα στοιχείο του # 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: "εντός του"] # (en: 'in', google translation) + then: [t: "ανήκει"] # (en: 'in', google translation) - else_if: $ClearSpeak_SetMemberSymbol = 'Member' - then: [t: "στοιχείο του"] # (en: 'member of', google translation) + then: [t: "ανήκει"] # (en: 'member of', google translation) - else_if: $ClearSpeak_SetMemberSymbol = 'Element' - then: [t: "στοιχείο του"] # (en: 'element of', google translation) - - else: [t: "ανήκει στο"] # $ClearSpeak_SetMemberSymbol = 'Belongs' (en: 'belonging to', google: 'ανήκει σε') + then: [t: "ανήκει"] # (en: 'element of', google translation) + - else: [t: "ανήκει"] # $ClearSpeak_SetMemberSymbol = 'Belongs' (en: 'belonging to', google: 'ανήκει σε') else_test: - - if: $ClearSpeak_SetMemberSymbol = 'Auto' or $ClearSpeak_SetMemberSymbol = 'Member' - then: [t: "είναι στοιχείο του"] # (en: 'is a member of', google translation) + - if: $ClearSpeak_SetMemberSymbol = 'Auto' or $ClearSpeak_SetMemberSymbol = 'In' + then: [t: "ανήκει"] # (en: 'is a member of', google translation) - else_if: $ClearSpeak_SetMemberSymbol = 'Element' - then: [t: "είναι στοιχείο του"] # (en: 'is an element of', google translation) - - else_if: $ClearSpeak_SetMemberSymbol = 'In' - then: [t: "είναι εντός του"] # (en: 'is in', google translation) - - else: [t: "ανήκει στο"] # $ClearSpeak_SetMemberSymbol = 'Belongs' (en: 'belongs to', google: 'ανήκει στον') + then: [t: "ανήκει"] # (en: 'is an element of', google translation) -- είναι στοιχείο του + - else_if: $ClearSpeak_SetMemberSymbol = 'Member' + then: [t: "ανήκει"] # (en: 'is in', google translation) + - else: [t: "ανήκει"] # $ClearSpeak_SetMemberSymbol = 'Belongs' (en: 'belongs to', google: 'ανήκει στον') - "∋": [t: "περιέχει"] # 0x220b (en: 'contains the member', google: 'περιέχει το μέλος') - "∌": [t: "δεν περιέχει"] # 0x220c (en: 'does not contain the member', google: 'δεν περιέχει το μέλος') - "∍": [t: "περιέχει"] # 0x220d (en: 'contains the member', google: 'περιέχει το μέλος') @@ -768,17 +798,17 @@ - "√": # 0x221a - test: if: "$Verbosity!='Terse'" - then: [t: "η"] # (en: 'the', google translation) + then: [t: ""] # (en: 'the', google translation) #theodora. not sure articles should be kept in greek. The current rules don't allow for creating cases for accusative, nominative etc. so it is easier to remove for now - t: "τετραγωνική ρίζα" # (en: 'square root of', google: 'τετραγωνική ρίζα του') - "∛": # 0x221b - test: if: "$Verbosity!='Terse'" - then: [t: "η"] # (en: 'the', google translation) + then: [t: ""] # (en: 'the', google translation) #theodora. not sure articles should be kept in greek. The current rules don't allow for creating cases for accusative, nominative etc. so it is easier to remove for now - t: "κυβική ρίζα" # (en: 'cube root of', google: 'ρίζα κύβου του') - "∜": # 0x221c - test: if: "$Verbosity!='Terse'" - then: [t: "η"] # (en: 'the', google translation) + then: [t: ""] # (en: 'the', google translation) #theodora. not sure articles should be kept in greek. The current rules don't allow for creating cases for accusative, nominative etc. so it is easier to remove for now - t: "τέταρτη ρίζα" # (en: 'fourth root of', google: 'τέταρτη ρίζα του') - "∝": # 0x221d - test: @@ -891,7 +921,7 @@ - "≏": # 0x224f - test: if: "$Verbosity!='Terse'" - then: [t: "η"] # (en: 'the', google translation) + then: [t: ""] # (en: 'the', google translation) #theodora. not sure articles should be kept in greek. The current rules don't allow for creating cases for accusative, nominative etc. so it is easier to remove for now - t: "διαφορά μεταξύ" # (en: 'difference between') - "≐": [t: "προσεγγίζει το όριο"] # 0x2250 (en: 'approaches the limit') - "≑": # 0x2251 @@ -1107,15 +1137,15 @@ - "⊒": [t: "τετραγωνικό σύμβολο αρχικό του ή ίσο με"] # 0x2292 (en: 'square original of or equal to', google: 'τετραγωνικό πρωτότυπο ή ίσο με') - "⊓": [t: "τετραγωνικό σύμβολο τομής"] # 0x2293 (en: 'square cap', google: 'τετραγωνική κεφαλαία') - "⊔": [t: "τετραγωνικό σύμβολο ένωσης"] # 0x2294 (google: 'τετράγωνο κύπελλο') - - "⊕": [t: "κύκλος με συν"] # 0x2295 (en: 'circled plus', google: 'circled plus') - - "⊖": [t: "κύκλος με μείον"] # 0x2296 (en: 'circled minus', google: 'μείον μείον') - - "⊗": [t: "κύκλος με επί"] # 0x2297 (en: 'circled times', google: 'περιστρεφόμενες φορές') - - "⊘": [t: "κύκλος με διαγώνιο"] # 0x2298 (en: 'circled slash', google: 'κύκλιση') - - "⊙": [t: "κύκλος με τελεία"] # 0x2299 (en: 'circled dot operator', google: 'circled dot operator') - - "⊚": [t: "κύκλος με δακτύλιο"] # 0x229a (en: 'circled ring', google: 'δακτύλιος') - - "⊛": [t: "κύκλος με αστερίσκο"] # 0x229b (en: 'circled asterisk', google: 'περιστρεφόμενος αστερίσκος') - - "⊜": [t: "κύκλος με ίσον"] # 0x229c (en: 'circled equals', google: 'ο κύκλος ισούται') - - "⊝": [t: "κύκλος με παύλα"] # 0x229d (en: 'circled dash', google: 'circled dash') + - "⊕": [t: "κυκλωμένο συν"] # 0x2295 (en: 'circled plus', google: 'circled plus') + - "⊖": [t: "κυκλωμένο μείον"] # 0x2296 (en: 'circled minus', google: 'μείον μείον') + - "⊗": [t: "κυκλωμένο επί"] # 0x2297 (en: 'circled times', google: 'περιστρεφόμενες φορές') + - "⊘": [t: "κυκλωμένη διαγώνιος"] # 0x2298 (en: 'circled slash', google: 'κύκλιση') + - "⊙": [t: "κυκλωμένη τελεία"] # 0x2299 (en: 'circled dot operator', google: 'circled dot operator') + - "⊚": [t: "κυκλωμένος δακτύλιος"] # 0x229a (en: 'circled ring', google: 'δακτύλιος') + - "⊛": [t: "κυκλωμένος αστερίσκος"] # 0x229b (en: 'circled asterisk', google: 'περιστρεφόμενος αστερίσκος') + - "⊜": [t: "κυκλωμένο ίσον"] # 0x229c (en: 'circled equals', google: 'ο κύκλος ισούται') + - "⊝": [t: "κυκλωμένη παύλα"] # 0x229d (en: 'circled dash', google: 'circled dash') - "⊞": [t: "τετράγωνο με συν"] # 0x229e (en: 'squared plus', google: 'squared plus') - "⊟": [t: "τετράγωνο με μείον"] # 0x229f (en: 'squared minus', google: 'τετράγωνο μείον') - "⊠": [t: "τετράγωνο με επί"] # 0x22a0 (en: 'squared times', google: 'τετραγωνισμένοι χρόνοι') @@ -1193,10 +1223,10 @@ - "⋇": [t: "διαίρεση φορές"] # 0x22c7 (google: 'τρόφους διαίρεσης') - "⋈": [t: "σύζευξη"] # 0x22c8 (google: 'παπιγιό') - "⋉": # 0x22c9 - - test: - if: "$Verbosity!='Terse'" - then: [t: "είναι"] # (en: 'is', google translation) - - t: "ημιευθύ γινόμενο με αριστερά κανονικό παράγοντα" # (en: 'the left normal factor semidirect product of', google: 'το αριστερό κανονικό παράγοντα semidirect προϊόν του') + - test: + if: "$Verbosity!='Terse'" + then: [t: "είναι"] # (en: 'is', google translation) + - t: "ημιευθύ γινόμενο με αριστερά κανονικό παράγοντα" # (en: 'the left normal factor semidirect product of', google: 'το αριστερό κανονικό παράγοντα semidirect προϊόν του') - "⋊": # 0x22ca - test: if: "$Verbosity!='Terse'" @@ -1228,17 +1258,17 @@ - "⋒": # 0x22d2 - test: if: "$Verbosity!='Terse'" - then: [t: "η"] # (en: 'the', google translation) + then: [t: ""] # (en: 'the', google translation) #theodora. not sure articles should be kept in greek. The current rules don't allow for creating cases for accusative, nominative etc. so it is easier to remove for now - t: "διπλή τομή" # (en: 'double intersection of', google: 'διπλή διασταύρωση του') - "⋓": # 0x22d3 - test: if: "$Verbosity!='Terse'" - then: [t: "η"] # (en: 'the', google translation) + then: [t: ""] # (en: 'the', google translation) #theodora. not sure articles should be kept in greek. The current rules don't allow for creating cases for accusative, nominative etc. so it is easier to remove for now - t: "διπλή ένωση" # (en: 'double union of', google: 'διπλή ένωση του') - "⋔": # 0x22d4 - test: if: "$Verbosity!='Terse'" - then: [t: "η"] # (en: 'the', google translation) + then: [t: ""] # (en: 'the', google translation) #theodora. not sure articles should be kept in greek. The current rules don't allow for creating cases for accusative, nominative etc. so it is easier to remove for now - t: "γνήσια τομή του" # (en: 'proper intersection of', google: 'σωστή διασταύρωση του') - "⋕": # 0x22d5 - test: @@ -1286,7 +1316,7 @@ - test: if: "$Verbosity!='Terse'" then: [t: "είναι"] # (en: 'is', google translation) - - t: "ίσο με ή έπεται" # (google: 'ίσο ή πετυχαίνει') + - t: "ίσο με ή έπεται από" # (google: 'ίσο ή πετυχαίνει') - "⋠": [t: "δεν προηγείται ή ισούται με"] # 0x22e0 (en: 'does not precede nor is equal to', google: 'δεν προηγείται ούτε είναι ίσο με') - "⋡": [t: "δεν έπεται ή ισούται με"] # 0x22e1 (en: 'does not succeed nor is equal to', google: 'δεν επιτυγχάνει ούτε είναι ίση με') - "⋢": [t: "όχι τετράγωνικό σύμβολο εικόνα του ή ίσον με"] # 0x22e2 (en: 'not square image of or equal to', google: 'όχι τετραγωνική εικόνα ή ίση με') @@ -1318,8 +1348,8 @@ else: [t: "όχι κανονική υποομάδα του ούτε ισούται με"] - t: "όχι κανονική υποομάδα του ή ίσον με" # (en: 'not a normal subgroup of nor is equal to', google: 'δεν είναι μια κανονική υποομάδα nor είναι ίση με') - "⋭": [t: "δεν περιέχει ως κανονική υποομάδα ούτε ισούται με"] # 0x22ed (en: 'does not contain as a normal subgroup nor is equal to', google: 'δεν περιέχει ως κανονική υποομάδα ούτε είναι ίση με') - - "⋮": [t: "κάθετα αποσιωπητικά"] # 0x22ee (en: 'vertical ellipsis', google: 'κατακόρυφη ελλειψία') - - "⋯": [t: "οριζόντια αποσιωπητικά"] # 0x22ef (en: 'dot dot dot', google: 'dot dot dot') + - "⋮": [t: "κατακόρυφα αποσιωπητικά"] # 0x22ee (en: 'vertical ellipsis', google: 'κατακόρυφη ελλειψία') + - "⋯": [t: "αποσιωπητικά"] # 0x22ef (en: 'dot dot dot', google: 'dot dot dot') - "⋰": [t: "διαγώνια αποσιωπητικά προς τα πάνω δεξιά"] # 0x22f0 (en: 'upwards diagonal ellipsis', google: 'προς τα πάνω διαγώνια ελλειψία') - "⋱": [t: "διαγώνια αποσιωπητικά προς τα κάτω δεξιά"] # 0x22f1 (en: 'diagonal ellipsis', google: 'διαγώνια ελλειψία') - "⋲": [t: "στοιχείο του με οριζόντια διαγραφή"] # 0x22f2 (google: 'στοιχείο με μακρύ οριζόντιο εγκεφαλικό επεισόδιο') @@ -1390,10 +1420,28 @@ - "⌳": [t: "κλίση"] # 0x2333 (en: 'slope', google translation) - "⌴": [t: "διευρυμένο διαμέτρημα"] # 0x2334 (google translation) - "⌵": [t: "διευρυμένη οπή"] # 0x2335 (en: 'countersink', google translation) - - "⍰": [t: "ερωτιματικό εντός κουτιού"] # 0x2370 (en: 'unknown box', google: 'άγνωστο πλαίσιο') + - "⌶": [t: "apl i beam"] # 0x2336 + - "⌽": [t: "apl circle stile"] # 0x233d + - "⌿": [t: "apl slash bar"] # 0x233f + - "⍰": [t: "ερωτηματικό εντός κουτιού"] # 0x2370 (en: 'unknown box', google: 'άγνωστο πλαίσιο') + - "⍼": [t: "δεξιά γωνία με βέλος ζιγκ ζαγκ προς τα κάτω"] # 0x237c + - "⎔": [t: "εξάγωνο"] # 0x2394 - "⎕": [t: "κουτί"] # 0x2395 (en: 'box', google translation) - - "⏞": [t: "άνω άγκιστρο"] # 0x23DE (en: 'top brace', google: 'κορυφαίο στήριγμα') - - "⏟": [t: "κάτω άγκιστρο"] # 0x23DF (en: 'bottom brace', google: 'κάτω στήριγμα') + - "⎶": [t: "κάτω τετραγωνική αγκύλη πάνω από άνω τετραγωνική αγκύλη"] # 0x23b6 + - "⏜": [t: "άνω παρένθεση"] # 0x23dc + - "⏝": [t: "κάτω παρένθεση"] # 0x23dd + - "⏞": [t: "άνω άγκιστρο"] # 0x23de + - "⏟": [t: "κάτω άγκιστρο"] # 0x23df + - "⏠": [t: "άνω αγκύλη σαν καύκαλο χελώνας"] # 0x23e0 + - "⏡": [t: "κάτω αγκύλη σαν καύκαλο χελώνας"] # 0x23e1 + - "⏢": [t: "λευκό τραπέζιο"] # 0x23e2 + - "⏣": [t: "δακτύλιος βενζολίου με κύκλο"] # 0x23e3 + - "⏤": [t: "ευθύτητα"] # 0x23e4 + - "⏥": [t: "επιπεδότητα"] # 0x23e5 + - "⏦": # 0x23e6 + - spell: "εναλλασσόμενο" + - t: "ρεύμα" + - "⏧": [t: "ηλεκτρική διασταύρωση"] # 0x23e7 - "①-⑨": # 0x2460 - 0x2469 - t: "κυκλωμένο" # (en: 'circled', google: 'περιστρέφεται') - spell: "translate('.', '①②③④⑤⑥⑦⑧⑨', '123456789')" @@ -1442,7 +1490,10 @@ - "Ⓐ-Ⓩ": - t: "κυκλωμένο" # (en: 'circled', google translation) - spell: "translate('.', 'ⒶⒷⒸⒹⒺⒻⒼⒽⒾⒿⓀⓁⓂⓃⓄⓅⓆⓇⓈⓉⓊⓋⓌⓍⓎⓏ', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" - + - "🅐-🅩": # 0x1f150 - 0x1f169 + - t: "μαύρο κυκλωμένο" + - spell: "translate('.', '🅐🅑🅒🅓🅔🅕🅖🅗🅘🅙🅚🅛🅜🅝🅞🅟🅠🅡🅢🅣🅤🅥🅦🅧🅨🅩', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" + - "ⓐ-ⓩ": # 0x24d0 - 0x24e9 - t: "κυκλωμένο" # (en: 'circled', google translation) - spell: "translate('.', 'ⓐⓑⓒⓓⓔⓕⓖⓗⓘⓙⓚⓛⓜⓝⓞⓟⓠⓡⓢⓣⓤⓥⓦⓧⓨⓩ', 'abcdefghijklmnopqrstuvwxyz')" @@ -1558,6 +1609,28 @@ - "◽": [t: "λευκό μεσαίο τετράγωνο"] # 0x25fd (en: 'white medium small square', google: 'λευκό μεσαίο μικρό τετράγωνο') - "◾": [t: "μαύρο μικρομεσαίο τετράγωνο"] # 0x25fe (en: 'black medium small square', google: 'μαύρο μεσαίο μικρό τετράγωνο') - "◿": [t: "κάτω δεξιά ορθογώνιο"] # 0x25ff (google: 'κάτω δεξιό τρίγωνο') + - "★": [t: "μαύρο αστέρι"] # 0x2605 + - "☆": [t: "λευκό αστέρι"] # 0x2606 + - "☉": [t: "ήλιος"] # 0x2609 + - "☌": [t: "σύνοδος"] # 0x260c + - "☒": [t: "κουτί με χι"] # 0x2612 + - "☽": [t: "φεγγαρι που γεμίζει"] # 0x263d + - "☾": [t: "φεγγάρι που αδειάζει"] # 0x263e + - "☿": [t: "ερμής"] # 0x263f + - "♀": [t: "θηλυκό"] # 0x2640 + - "♁": [t: "γη"] # 0x2641 + - "♂": [t: "αρσενικό"] # 0x2642 + - "♃": [t: "Δίας"] # 0x2643 + - "♄": [t: "Κρόνος"] # 0x2644 + - "♅": [t: "Ουρανός"] # 0x2645 + - "♆": [t: "Ποσειδώνας"] # 0x2646 + - "♇": [t: "Πλούτωνας"] # 0x2647 + - "♈": [t: "Κριός"] # 0x2648 + - "♉": [t: "Ταύρος"] # 0x2649 + - "♩": [t: "ένα τέταρτο"] # 0x2669 + - "♭": [t: "ύφεση"] # 0x266d + - "♮": [t: "αναίρεση"] # 0x266e + - "♯": [t: "δίεση"] # 0x266f - "♠": [t: "μαύρο μπαστούνι"] # 0x2660 (google: 'μαύρο κοστούμι φτυάρι') - "♡": [t: "λευκή καρδιά"] # 0x2661 (google: 'λευκό κοστούμι καρδιάς') - "♢": [t: "λευκό διαμάντι"] # 0x2662 (google: 'λευκό κοστούμι διαμαντιών') @@ -1566,6 +1639,24 @@ - "♥": [t: "μαύρη καρδιά"] # 0x2665 (google: 'μαύρο κοστούμι καρδιάς') - "♦": [t: "μαύρο διαμάντι"] # 0x2666 (google: 'μαύρο κοστούμι διαμαντιών') - "♧": [t: "λευκό τριφύλλι"] # 0x2667 (google: 'λευκό κοστούμι') + - "⚀": [t: "ζἀρι πλευρά 1"] # 0x2680 + - "⚁": [t: "ζάρι πλευρά 2"] # 0x2681 + - "⚂": [t: "ζάρι πλευρά 3"] # 0x2682 + - "⚃": [t: "ζάρι πλευρά 4"] # 0x2683 + - "⚄": [t: "ζάρι πλευρά 5"] # 0x2684 + - "⚅": [t: "ζάρι πλευρά 6"] # 0x2685 + - "⚆": [t: "λευκός κύκλος με δεξιά κουκκίδα"] # 0x2686 + - "⚇": [t: "λευκός κύκλος με δύο κουκκίδες"] # 0x2687 + - "⚈": [t: "μαύρος κύκλος με δεξιά κουκκίδα"] # 0x2688 + - "⚉": [t: "μαύρος κύκλος με δύο κουκκίδες"] # 0x2689 + - "⚪": [t: "μεσαίος λευκός κύκλος"] # 0x26aa + - "⚫": [t: "μεσαίος μαύρος κύκλος"] # 0x26ab + - "⚬": [t: "μεσαίος μικρός λευκός κύκλος"] # 0x26ac + - "⚲": [t: "ουδέτερο"] # 0x26b2 + - "✓": [t: "σημάδι τσεκ"] # 0x2713 + - "✠": [t: "σταυρός της Μάλτας"] # 0x2720 + - "✪": [t: "κυκλωμένο λευκό αστέρι"] # 0x272a + - "✶": [t: "εξάκτινο μαύρο αστέρι"] # 0x2736 - "❨": [t: "διακοσμητική μεσαία αριστερή παρενθέση"] # 0x2768 (en: 'medium left parentheses ornament', google translation) - "❩": [t: "διακοσμητική μεσαία δεξιά παρενθέση"] # 0x2769 (en: 'medium right parentheses ornament', google translation) - "❪": [t: "διακοσμητική μεσαία πεπλατυσμένη αριστερή παρένθεση"] # 0x276a (en: 'medium flattened left parentheses ornament', google translation) @@ -1611,7 +1702,7 @@ - "➒": [t: "κυκλωμένο μαύρο εννιά χωρίς σέριφ"] # 0x2792 (en: 'black circled sans serif nine', google translation) - "➓": [t: "κυκλωμένο μαύρο δέκα χωρίς σέριφ"] # 0x2793 (en: 'black circled sans serif ten', google translation) - "➔": [t: "έντονο βέλος προς τα δεξιά με πλατειά μύτη"] # 0x2794 (en: 'heavy wide-headed rightwards arrow', google translation) - - "➕": [t: "΄έντονο σύμβολο συν"] # 0x2795 (en: 'heavy plus sign', google translation) + - "➕": [t: "έντονο σύμβολο συν"] # 0x2795 (en: 'heavy plus sign', google translation) - "➖": [t: "έντονο σύμβολο μείον"] # 0x2796 (en: 'heavy minus sign', google translation) - "➗": [t: "έντονο σύμβολο διαίρεσης"] # 0x2797 (en: 'heavy division sign', google translation) - "➘": [t: "έντονο νοτιοανατολικό βέλος"] # 0x2798 (en: 'heavy south east arrow', google translation) @@ -2031,7 +2122,12 @@ - "⨬": [t: "σύμβολο μείον με ανερχόμενες τελείες"] # 0x2a2c (en: 'minus sign with rising dots', google translation) - "⨭": [t: "σύμβολο συν μέσα σε αριστερό ημικύκλιο"] # 0x2a2d (google: 'plus συνδεθείτε στον αριστερό μισό κύκλο') - "⨮": [t: "σύμβολο συν μέσα σε δεξί ημικύκλιο"] # 0x2a2e (google: 'επιπλέον, υπογράψτε το δεξί μισό κύκλο') - - "⨯": [t: "διανυσματικό ή εξωτερικό γινόμενο"] # 0x2a2f (en: 'cross product', google: 'σταυροί προϊόν') +#new / changed + - "⨯": # 0x2a2f + - test: + if: "$Verbosity='Terse'" + then: [t: "επί"] + else: [t: "διανυσματικό γινόμενο"] - "⨰": [t: "σύμβολο πολλαπλασιασμού με τελεία από πάνω"] # 0x2a30 (google: 'σημάδι πολλαπλασιασμού με κουκκίδα παραπάνω') - "⨱": [t: "σύμβολο πολλαπλασιασμού με παύλα από κάτω"] # 0x2a31 (google: 'σημάδι πολλαπλασιασμού με underbar') - "⨲": [t: "ημιευθύ γινόμενο με κλειστό κάτω μέρος"] # 0x2a32 (en: 'semidirect product with bottom closed', google translation) @@ -2047,6 +2143,7 @@ - "⨼": [t: "εσωτερικό γινόμενο"] # 0x2a3c (google: 'εσωτερικό προϊόν') - "⨽": [t: "εσωτερικό γινόμενο δεξιάς πλευράς"] # 0x2a3d (en: 'righthand interior product', google translation) - "⨿": [t: "αμάγαλμα ή συνγινόμενο"] # 0x2a3f (google: 'συγχώνευση ή συνωμοσία') + - "⨾": [t: "σημειογραφία ζεντ σύνθεση σχέσεων"] # 0x2a3e - "⩀": [t: "τομή με τελεία"] # 0x2a40 (google: 'διασταύρωση με κουκκίδα') - "⩁": [t: "ένωση με σύμβολο μείον"] # 0x2a41 (en: 'union with minus sign', google translation) - "⩂": [t: "ένωση με παύλα από πάνω"] # 0x2a42 (google: 'ένωση με overbar') @@ -2425,17 +2522,31 @@ - "㉘": [t: "κυκλωμένος αριθμός εικοσιοκτώ"] # 0x3258 (en: 'circled number twenty eight', google translation) - "㉙": [t: "κυκλωμένος αριθμός εικοσιεννέα"] # 0x3259 (google translation) - "㉚": [t: "κυκλωμένος αριθμός τριάντα"] # 0x325a (en: 'circled number thirty', google translation) - - "㉛": [t: "κυκλωμένος αριθμός τριανταένα"] # 0x325b (en: 'circled number thirty one', google translation) - - "㉜": [t: "κυκλωμένος αριθμός τριανταδύο"] # 0x325c (en: 'circled number thirty two', google translation) - - "㉝": [t: "κυκλωμένος αριθμός τριαντατρία"] # 0x325d (en: 'circled number thirty three', google translation) - - "㉞": [t: "κυκλωμένος αριθμός τριαντατέσσερα"] # 0x325e (en: 'circled number thirty four', google translation) - - "㉟": [t: "κυκλωμένος αριθμός τριανταπέντε"] # 0x325f (en: 'circled number thirty five', google translation) - - "㊱": [t: "κυκλωμένος αριθμός τριανταέξι"] # 0x32b1 (en: 'circled number thirty six', google translation) + - "㉛": [t: "κυκλωμένος αριθμός τριαντα ένα"] # 0x325b (en: 'circled number thirty one', google translation) + - "㉜": [t: "κυκλωμένος αριθμός τριαντα δύο"] # 0x325c (en: 'circled number thirty two', google translation) + - "㉝": [t: "κυκλωμένος αριθμός τριαντα τρία"] # 0x325d (en: 'circled number thirty three', google translation) + - "㉞": [t: "κυκλωμένος αριθμός τριαντα τέσσερα"] # 0x325e (en: 'circled number thirty four', google translation) + - "㉟": [t: "κυκλωμένος αριθμός τριαντα πέντε"] # 0x325f (en: 'circled number thirty five', google translation) + - "㊱": [t: "κυκλωμένος αριθμός τριαντα έξι"] # 0x32b1 (en: 'circled number thirty six', google translation) + - "㊲": [t: "κυκλωμένος αριθμός τριάντα επτά"] # 0x32b2 (GPT-5.4 translation) + - "㊳": [t: "κυκλωμένος αριθμός τριάντα οκτώ"] # 0x32b3 (GPT-5.4 translation) + - "㊴": [t: "κυκλωμένος αριθμός τριάντα εννιά"] # 0x32b4 (GPT-5.4 translation) + - "㊵": [t: "κυκλωμένος αριθμός σαράντα"] # 0x32b5 (GPT-5.4 translation) + - "㊶": [t: "κυκλωμένος αριθμός σαράντα ένα"] # 0x32b6 (GPT-5.4 translation) + - "㊷": [t: "κυκλωμένος αριθμός σαράντα δύο"] # 0x32b7 (GPT-5.4 translation) + - "㊸": [t: "κυκλωμένος αριθμός σαράντα τρία"] # 0x32b8 (GPT-5.4 translation) + - "㊹": [t: "κυκλωμένος αριθμός σαράντα τέσσερα"] # 0x32b9 (GPT-5.4 translation) + - "㊺": [t: "κυκλωμένος αριθμός σαράντα πέντε"] # 0x32ba (GPT-5.4 translation) + - "㊻": [t: "κυκλωμένος αριθμός σαράντα έξι"] # 0x32bb (GPT-5.4 translation) + - "㊼": [t: "κυκλωμένος αριθμός σαράντα επτά"] # 0x32bc (GPT-5.4 translation) + - "㊽": [t: "κυκλωμένος αριθμός σαράντα οκτώ"] # 0x32bd (GPT-5.4 translation) + - "㊾": [t: "κυκλωμένος αριθμός σαράντα εννιά"] # 0x32be (GPT-5.4 translation) + - "㊿": [t: "κυκλωμένος αριθμός πενήντα"] # 0x32bf (GPT-5.4 translation) - "㋌": [t: "υδράργυρος"] # 0x32cc (en: 'mercury', google translation) - - "㋍": [t: "εργκ"] # 0x32cd (google translation) + - "㋍": [t: "εργ"] # 0x32cd (google translation) - "㋎": [t: "ηλεκτρονιοβόλτ"] # 0x32ce (google translation) - "㋏": [t: "σήμα περιορισμένης ευθύνης"] # 0x32cf (en: 'limited liability sign', google translation) - - "㍱": [t: "εκατοπασκάλ"] # 0x3371 (google translation) + - "㍱": [t: "εκτοπασκάλ"] # 0x3371 (google translation) - "㍲": [t: "Ντάλτον"] # 0x3372 (google translation) - "㍳": [t: "αστρονομικές μονάδες"] # 0x3373 (en: 'astronomical units', google translation) - "㍴": [t: "μπαρ"] # 0x3374 (en: 'bars', google translation) @@ -2444,7 +2555,7 @@ - "㍷": [t: "δεκάμετρα"] # 0x3377 (en: 'decimeters', google translation) - "㍸": [t: "τετραγωνικά δεκάμετρα"] # 0x3378 (en: 'decimeters squared', google translation) - "㍹": [t: "κυβικά δεκάμετρα"] # 0x3379 (en: 'decimeters cubed', google translation) - - "㍺": [t: "άι γιους"] # 0x337a (en: 'instrumental units', google translation) + - "㍺": [t: "άι γιου"] # 0x337a (en: 'instrumental units', google translation) - "㎀": [t: "πικοαμπέρ"] # 0x3380 (google translation) - "㎁": [t: "νανοαμπέρ"] # 0x3381 (en: 'nanoamps', google translation) - "㎂": [t: "μικροαμπέρ"] # 0x3382 (en: 'microamps', google translation) @@ -2461,11 +2572,11 @@ - "㎍": [t: "μικρογραμμάρια"] # 0x338d (en: 'micrograms', google translation) - "㎎": [t: "χιλιοστόγραμμα"] # 0x338e (en: 'milligrams', google translation) - "㎏": [t: "κιλά"] # 0x338f (en: 'kilograms', google translation) - - "㎐": [t: "χέρτζ"] # 0x3390 (en: 'hertz', google translation) - - "㎑": [t: "κιλοχέρτζ"] # 0x3391 (google translation) - - "㎒": [t: "μεγαχέρτζ"] # 0x3392 (google translation) - - "㎓": [t: "γιγαχέρτζ"] # 0x3393 (en: 'gigahertz', google translation) - - "㎔": [t: "τεραχέρντζ"] # 0x3394 (google translation) + - "㎐": [t: "χέρτς"] # 0x3390 (en: 'hertz', google translation) + - "㎑": [t: "κιλοχέρτς"] # 0x3391 (google translation) + - "㎒": [t: "μεγαχέρτς"] # 0x3392 (google translation) + - "㎓": [t: "γιγαχέρτς"] # 0x3393 (en: 'gigahertz', google translation) + - "㎔": [t: "τεραχέρντς"] # 0x3394 (google translation) - "㎕": [t: "μικρολίτρα"] # 0x3395 (en: 'microliters', google translation) - "㎖": [t: "χιλιοστόλιτρα"] # 0x3396 (en: 'milliliters', google translation) - "㎗": [t: "δεκατόλιτρα"] # 0x3397 (en: 'deciliters', google translation) @@ -2565,7 +2676,7 @@ - "": [t: "σχεδόν ίσο με μείον"] # 0xe91f (en: 'almost equal to minus', google translation) - "": [t: "διπλή τετράγωνική ένωση"] # 0xe920 (en: 'double square cup', google translation) - "": [t: "διπλή τετράγωνική τομή"] # 0xe921 (en: 'double square cap', google translation) - - "": [t: "μικρότερο από, ίσον ή μεγαλύτερο από΄"] # 0xe922 (en: 'less than equal to or greater than', google translation) + - "": [t: "μικρότερο από, ίσον ή μεγαλύτερο από"] # 0xe922 (en: 'less than equal to or greater than', google translation) - "": [t: "κυματοειδής γραμμή με τελεία"] # 0xe924 (en: 'tilde with dot', google translation) - "": [t: "κυματοειδής γραμμή με δύο τελείες"] # 0xe925 (en: 'tilde with two dots', google translation) - "": [t: "μικρότερο από, μεγαλύτερο από ή ίσο με"] # 0xe926 (en: 'less than greater than or equal to', google translation) @@ -3021,7 +3132,7 @@ - " ": [t: ""] # 0x205f - "": [t: ""] # 0xef04 - "": [t: ""] # 0xef05 - - " ": [t: ""] # 0x2003 + - "": [t: ""] # 0xef06 - "": [t: ""] # 0xef07 - "": [t: ""] # 0xef08 @@ -3075,44 +3186,48 @@ # 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: "διπλής γραφής" - spell: "translate('.', '𝔸𝔹𝔺𝔻𝔼𝔽𝔾𝔿𝕀𝕁𝕂𝕃𝕄𝕅𝕆𝕇𝕈𝕉𝕊𝕋𝕌𝕍𝕎𝕏𝕐', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" - - test: - if: "$Verbosity!='Terse'" - then: [t: "με διπλή γραφή"] # (en: 'double struck', google translation) - #theodora. in greek, it sounds better to say the letter/number first, followed by the + # - test: + # if: "$Verbosity!='Terse'" + # then: [t: "με διπλή γραφή"] # (en: 'double struck', google translation) + # theodora. check all double struck-με διπλή γραφή.again in greek, it sounds better to say the letter/number first, followed by the # expression "double-struck", so the order was changed here. the same is true for the following # lines dealing with double-struck letters. - "-": # 0xf080 - 0xf098 + - t: "διπλής γραφής" - spell: "translate('.', '', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" - - test: - if: "$Verbosity!='Terse'" - then: [t: " με διπλή γραφή"] # (en: 'double struck', google translation) + # - test: + # if: "$Verbosity!='Terse'" + # then: [t: " με διπλή γραφή"] # (en: 'double struck', google translation) - "𝕒-𝕫": # 0x1d552 - 0x1d56b + - t: "διπλής γραφής" - spell: "translate('.', '𝕒𝕓𝕔𝕕𝕖𝕗𝕘𝕙𝕚𝕛𝕜𝕝𝕞𝕟𝕠𝕡𝕢𝕣𝕤𝕥𝕦𝕧𝕨𝕩𝕪𝕫', 'abcdefghijklmnopqrstuvwxyz')" - - test: - if: "$Verbosity!='Terse'" - then: [t: "με διπλή γραφή"] # (en: 'double struck', google translation) + # - test: + # if: "$Verbosity!='Terse'" + # then: [t: "με διπλή γραφή"] # (en: 'double struck', google translation) - - "-": # 0xf09a - 0xf0b3 + - "-": # 0xf09a - 0xf0b3 + - t: "διπλής γραφής" - spell: "translate('.', '', 'abcdefghijklmnopqrstuvwxyz')" - - test: - if: "$Verbosity!='Terse'" - then: [t: "με διπλή γραφή"] # (en: 'double struck', google translation) - - - "𝟘-𝟡": # 0x1d7d8 - 0x1d7e1 + # - test: + # if: "$Verbosity!='Terse'" + # then: [t: "με διπλή γραφή"] # (en: 'double struck', google translation) + - "𝟘-𝟡": # 0x1d7d8 - 0x1d7e1 + - t: "διπλής γραφής" - spell: "translate('.', '𝟘𝟙𝟚𝟛𝟜𝟝𝟞𝟟𝟠𝟡', '0123456789')" - - test: - if: "$Verbosity!='Terse'" - then: [t: "με διπλή γραφή"] # (en: 'double struck', google translation) - + # - test: + # if: "$Verbosity!='Terse'" + # then: [t: "με διπλή γραφή"] # (en: 'double struck', google translation) - "-": # 0xf0c0 - 0xf0c9 + - t: "διπλής γραφής" - spell: "translate('.', '', '0123456789')" - - test: - if: "$Verbosity!='Terse'" - then: [t: "με διπλή γραφή"] # (en: 'double struck', google translation) + # - test: + # if: "$Verbosity!='Terse'" + # then: [t: "με διπλή γραφή"] # (en: 'double struck', google translation) - "": [t: "ανάδελτα με διπλή γραφή"] # 0xf0ca (en: 'double struck nabla', google translation) @@ -3210,17 +3325,19 @@ # MathType only has a few of the cap Greek letters in PUA - "": # 0xf201 - 0xf209 + - t: "διπλής γραφής" - spell: "translate('.', '', 'ΔΨΛΠΣΘΓΩΥ')" - - test: - if: "$Verbosity!='Terse'" - then: [t: "με διπλή γραφή"] # (en: 'double struck', google translation) + # - test: + # if: "$Verbosity!='Terse'" + # then: [t: "με διπλή γραφή"] # (en: 'double struck', google translation) - "-": # 0xf220 - 0xf236 + - t: "διπλης γραφής" - spell: "translate('.', '', 'ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡ΢ΣΤΥΦΧΨΩ')" - - test: - if: "$Verbosity!='Terse'" - then: [t: "με διπλή γραφή"] # (en: 'double struck', google translation) + # - test: + # if: "$Verbosity!='Terse'" + # then: [t: "με διπλή γραφή"] # (en: 'double struck', google translation) - "": [t: "τελικό σίγμα με διπλή γραφή"] # 0xf237 (en: 'double struck final sigma', google translation) @@ -3260,12 +3377,12 @@ - "𝑨-𝒁": # 0x1d468 - 0x1d481 # - t: "bold italic" - - t: "έντονο" # (en: 'bold', google translation) + - t: "έντονο πλάγιο" # (en: 'bold', google translation) - spell: "translate('.', '𝑨𝑩𝑪𝑫𝑬𝑭𝑮𝑯𝑰𝑱𝑲𝑳𝑴𝑵𝑶𝑷𝑸𝑹𝑺𝑻𝑼𝑽𝑾𝑿𝒀𝒁', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" - "-": # 0xf2c8 - 0xf2e1 # - t: "bold italic" - - t: "έντονο" # (en: 'bold', google translation) + - t: "έντονο πλάγιο" # (en: 'bold', google translation) - spell: "translate('.', '', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" - "𝒂-𝒛": # 0x1d482 - 0x1d49b @@ -3437,7 +3554,7 @@ - "": # 0xf422 - 0xf43a # - t: "bold italic" # theodora. bold italic = έντονο πλάγιο - - t: "΄έντονο" # (en: 'bold', google translation) + - t: "έντονο" # (en: 'bold', google translation) - spell: "translate('.', '', '∂εθκφρπ')" - "𝜵": [t: "έντονο πλάγιο ανάδελτα"] # 0x1d735 (en: 'bold italic nabla', google translation) @@ -3499,89 +3616,33 @@ - t: "έντονο" # (en: 'bold', google translation) - spell: "translate('.', '', '∂εθκφρπ')" - - "": [t: "έντονο ανάδελτα"] # 0xf509 (en: 'bold nabla', google translation) - - "𝞩": [t: "έντονο ανάδελτα"] # 0x1d7a9 (en: 'bold nabla', google translation) - - - "": [t: "έντονο μηδέν"] # 0xf52e (en: 'bold zero', google translation) - - "𝟎": [t: "έντονο μηδέν"] # 0x1d7ce (en: 'bold zero', google translation) - - "": [t: "έντονο ένα"] # 0xf52f (en: 'bold one', google translation) - - "𝟏": [t: "έντονο ένα"] # 0x1d7cf (en: 'bold one', google translation) - - "": [t: "έντονο δύο"] # 0xf530 (en: 'bold two', google translation) - - "𝟐": [t: "έντονο δύο"] # 0x1d7d0 (en: 'bold two', google translation) - - "": [t: "έντονο τρία"] # 0xf531 (en: 'bold three', google translation) - - "𝟑": [t: "έντονο τρία"] # 0x1d7d1 (en: 'bold three', google translation) - - "": [t: "έντονο τέσσερα"] # 0xf532 (en: 'bold four', google translation) - - "𝟒": [t: "έντονο τέσσερα"] # 0x1d7d2 (en: 'bold four', google translation) - - "": [t: "έντονο πέντε"] # 0xf533 (en: 'bold five', google translation) - - "𝟓": [t: "έντονο πέντε"] # 0x1d7d3 (en: 'bold five', google translation) - - "": [t: "έντονο έξι"] # 0xf534 (en: 'bold six', google translation) - - "𝟔": [t: "έντονο έξι"] # 0x1d7d4 (en: 'bold six', google translation) - - "": [t: "έντονο επτά"] # 0xf535 (en: 'bold seven', google translation) - - "𝟕": [t: "έντονο επτά"] # 0x1d7d5 (en: 'bold seven', google translation) - - "": [t: "έντονο οκτώ"] # 0xf536 (en: 'bold eight', google translation) - - "𝟖": [t: "έντονο οκτώ"] # 0x1d7d6 (en: 'bold eight', google translation) - - "": [t: "έντονο εννέα"] # 0xf537 (en: 'bold nine', google translation) - - "𝟗": [t: "έντονο εννέα"] # 0x1d7d7 (en: 'bold nine', google translation) - - "": [t: "μηδέν"] # 0xf542 (en: 'zero', google translation) - - "𝟢": [t: "μηδέν"] # 0x1d7e2 (en: 'zero', google translation) - - "": [t: "ένα"] # 0xf543 (en: 'one', google translation) - - "𝟣": [t: "ένα"] # 0x1d7e3 (en: 'one', google translation) - - "": [t: "δύο"] # 0xf544 (en: 'two', google translation) - - "𝟤": [t: "δύο"] # 0x1d7e4 (en: 'two', google translation) - - "": [t: "τρία"] # 0xf545 (en: 'three', google translation) - - "𝟥": [t: "τρία"] # 0x1d7e5 (en: 'three', google translation) - - "": [t: "τέσσερα"] # 0xf546 (en: 'four', google translation) - - "𝟦": [t: "τέσσερα"] # 0x1d7e6 (en: 'four', google translation) - - "": [t: "πέντε"] # 0xf547 (en: 'five', google translation) - - "𝟧": [t: "πέντε"] # 0x1d7e7 (en: 'five', google translation) - - "": [t: "έξι"] # 0xf548 (en: 'six', google translation) - - "𝟨": [t: "έξι"] # 0x1d7e8 (en: 'six', google translation) - - "": [t: "επτά"] # 0xf549 (en: 'seven', google translation) - - "𝟩": [t: "επτά"] # 0x1d7e9 (en: 'seven', google translation) - - "": [t: "οκτώ"] # 0xf54a (en: 'eight', google translation) - - "𝟪": [t: "οκτώ"] # 0x1d7ea (en: 'eight', google translation) - - "": [t: "εννέα"] # 0xf54b (en: 'nine', google translation) - - "𝟫": [t: "εννέα"] # 0x1d7eb (en: 'nine', google translation) - - "": [t: "έντονο μηδέν"] # 0xf54c (en: 'bold zero', google translation) - - "𝟬": [t: "έντονο μηδέν"] # 0x1d7ec (en: 'bold zero', google translation) - - "": [t: "έντονο ένα"] # 0xf54d (en: 'bold one', google translation) - - "𝟭": [t: "έντονο ένα"] # 0x1d7ed (en: 'bold one', google translation) - - "": [t: "έντονο δύο"] # 0xf54e (en: 'bold two', google translation) - - "𝟮": [t: "έντονο δύο"] # 0x1d7ee (en: 'bold two', google translation) - - "": [t: "έντονο τρία"] # 0xf54f (en: 'bold three', google translation) - - "𝟯": [t: "έντονο τρία"] # 0x1d7ef (en: 'bold three', google translation) - - "": [t: "έντονο τέσσερα"] # 0xf550 (en: 'bold four', google translation) - - "𝟰": [t: "έντονο τέσσερα"] # 0x1d7f0 (en: 'bold four', google translation) - - "": [t: "έντονο πέντε"] # 0xf551 (en: 'bold five', google translation) - - "𝟱": [t: "έντονο πέντε"] # 0x1d7f1 (en: 'bold five', google translation) - - "": [t: "έντονο έξι"] # 0xf552 (en: 'bold six', google translation) - - "𝟲": [t: "έντονο έξι"] # 0x1d7f2 (en: 'bold six', google translation) - - "": [t: "έντονο επτά"] # 0xf553 (en: 'bold seven', google translation) - - "𝟳": [t: "έντονο επτά"] # 0x1d7f3 (en: 'bold seven', google translation) - - "": [t: "έντονο οκτώ"] # 0xf554 (en: 'bold eight', google translation) - - "𝟴": [t: "έντονο οκτώ"] # 0x1d7f4 (en: 'bold eight', google translation) - - "": [t: "έντονο εννέα"] # 0xf555 (en: 'bold nine', google translation) - - "𝟵": [t: "έντονο εννέα"] # 0x1d7f5 (en: 'bold nine', google translation) - - "": [t: "μηδέν"] # 0xf556 (en: 'zero', google translation) - - "𝟶": [t: "μηδέν"] # 0x1d7f6 (en: 'zero', google translation) - - "": [t: "ένας"] # 0xf557 (en: 'one', google translation) - - "𝟷": [t: "ένας"] # 0x1d7f7 (en: 'one', google translation) - - "": [t: "δύο"] # 0xf558 (en: 'two', google translation) - - "𝟸": [t: "δύο"] # 0x1d7f8 (en: 'two', google translation) - - "": [t: "τρία"] # 0xf559 (en: 'three', google translation) - - "𝟹": [t: "τρία"] # 0x1d7f9 (en: 'three', google translation) - - "": [t: "τέσσερα"] # 0xf55a (en: 'four', google translation) - - "𝟺": [t: "τέσσερα"] # 0x1d7fa (en: 'four', google translation) - - "": [t: "πέντε"] # 0xf55b (en: 'five', google translation) - - "𝟻": [t: "πέντε"] # 0x1d7fb (en: 'five', google translation) - - "": [t: "έξι"] # 0xf55c (en: 'six', google translation) - - "𝟼": [t: "έξι"] # 0x1d7fc (en: 'six', google translation) - - "": [t: "επτά"] # 0xf55d (en: 'seven', google translation) - - "𝟽": [t: "επτά"] # 0x1d7fd (en: 'seven', google translation) - - "": [t: "οκτώ"] # 0xf55e (en: 'eight', google translation) - - "𝟾": [t: "οκτώ"] # 0x1d7fe (en: 'eight', google translation) - - "": [t: "εννέα"] # 0xf55f (en: 'nine', google translation) - - "𝟿": [t: "εννέα"] # 0x1d7ff (en: 'nine', google translation) + - "": [t: "έντονο ανάδελτα"] # 0xf509 + - "𝞩": [t: "έντονο ανάδελτα"] # 0x1d7a9 + + - "-": # 0xf52e - 0xf537 (old MathType) + - t: "bold" + - spell: "translate('.', '', '0123456789')" + + - "𝟎-𝟗": # 0x1d7ce - 0x1d7d7 + - t: "bold" + - spell: "translate('.', '𝟎𝟏𝟐𝟑𝟒𝟓𝟔𝟕𝟖𝟗', '0123456789')" + + - "-": # 0xf52e - 0xf537 (old MathType) + - t: "bold" + - spell: "translate('.', '', '0123456789')" + + - "𝟬-𝟵": # 0x1D7EC - 0x1D7F5 + - t: "bold" + - spell: "translate('.', '𝟬𝟭𝟮𝟯𝟰𝟱𝟲𝟳𝟴𝟵', '0123456789')" + + - "-": # 0xf556 - 0xf55f (old MathType) + - spell: "translate('.', '', '0123456789')" + + - "𝟢-𝟫": # 0x1d7e2 - 0x1d7eb + - spell: "translate('.', '𝟶𝟷𝟸𝟹𝟺𝟻𝟼𝟽𝟾𝟿', '0123456789')" + + - "𝟶-𝟿": # 0x1d7f6 - 0x1d7ff + - spell: "translate('.', '𝟶𝟷𝟸𝟹𝟺𝟻𝟼𝟽𝟾𝟿', '0123456789')" - "": [t: "άγνωστος χαρακτήρας"] # 0xf700 (en: 'unknown character', google translation) - "": [t: "κάτω δεξιά και κάτω αριστερά τρίγωνα"] # 0xf726 (en: 'lower right and lower left triangles', google translation) - "": [t: "επέκταση οριζόντιων αποσιωπητικών"] # 0xf72d (en: 'horizontal ellipsis extender', google translation) @@ -3612,13 +3673,14 @@ - "": [t: "μέσο δεξιά άγκιστρο"] # 0xf8fd (en: 'right brace mid', google translation) - "": [t: "κάτω δεξιά άγκιστρο"] # 0xf8fe (en: 'right brace bottom', google translation) - "": [t: "λογότυπο της apple"] # 0xf8ff (en: 'apple logo', google translation) - - "ff": [t: "λιγατούρα f f"] # 0xfb00 (en: 'ff', google: 'ff') - - "fi": [t: "λιγατούρα f i"] # 0xfb01 (en: 'fi', google: 'fi') - - "fl": [t: "λιγατούρα f l"] # 0xfb02 (en: 'fl', google: 'fl') - - "ffi": [t: "λιγατούρα f f i"] # 0xfb03 (en: 'ffi', google: 'ffi') - - "ffl": [t: "λιγατούρα f f l"] # 0xfb04 (en: 'ffl', google: 'ffl') - - "ſt": [t: "λιγατούρα f t"] # 0xfb05 (google translation) - - "st": [t: "λιγατούρα s t"] # 0xfb06 (google translation) + - "ff": [t: "f f"] # 0xfb00 (en: 'ff', google: 'ff') + - "fi": [t: "f i"] # 0xfb01 (en: 'fi', google: 'fi') + - "fl": [t: "f l"] # 0xfb02 (en: 'fl', google: 'fl') + - "ffi": [t: "f f i"] # 0xfb03 (en: 'ffi', google: 'ffi') + - "ffl": [t: "f f l"] # 0xfb04 (en: 'ffl', google: 'ffl') + - "ſt": [t: "f t"] # 0xfb05 (google translation) + - "st": [t: "s t"] # 0xfb06 (google translation) + - "﬩": [t: "εβραϊκό εναλλακτικό συν"] # 0xfb29 - "︠": [t: "καλλωπιστική αριστερά μισή λιγατούρα"] # 0xfe20 (en: 'ligature left half embellishment', google translation) - "︡": [t: "καλλωπιστική δεξιά μισή λιγατούρα"] # 0xfe21 (en: 'ligature right half embellishment', google translation) - "︢": [t: "καλλωπιστική αριστερά μισή διπλή κυματιστή γραμμή"] # 0xfe22 (en: 'double tilde left half embellishment', google translation) @@ -3632,6 +3694,10 @@ - "︸": [t: "άγκιστρο προς τα κάτω"] # 0xfe38 (en: 'under brace', google: 'κάτω από το στήριγμα') - "︿": [t: "γωνιακή αγκύλη προς τα πάνω"] # 0xfe3f (google: 'πάνω από γωνιακό βραχίονα') - "﹀": [t: "γωνιακή αγκύλη προς τα κάτω"] # 0xfe40 (google: 'κάτω από γωνιακό βραχίονα') - - "﹨": [t: "διαίρεση ακεραίων"] # 0xfe68 (google: 'ακέραιος διαιρέτης') - - "": [t: "άγνωστο ή λείπον αντικείμενο"] # 0xfffc (en: 'unknown or missing object', google translation) - - "�": [t: "άγνωστος ή λείπων χαρακτήρας"] # 0xfffd (google: 'άγνωστος ή λείπει χαρακτήρας') + - "﹡": [t: "μικρός αστερίσκος"] # 0xfe61 + - "﹢": [t: "μικρό συν"] # 0xfe62 + - "﹣": [t: "μικρό μείον"] # 0xfe63 + - "﹤": [t: "μικρό μικρότερο από"] # 0xfe64 + - "﹥": [t: "μικρό μεγαλύτερο από"] # 0xfe65 + - "﹦": [t: "μικρό ίσον"] # 0xfe66 + - "+": [t: "σύμβολο ίσον"] # 0xff0b \ No newline at end of file diff --git a/Rules/Languages/el/unicode.yaml b/Rules/Languages/el/unicode.yaml index 50919705c..a428f7e6c 100644 --- a/Rules/Languages/el/unicode.yaml +++ b/Rules/Languages/el/unicode.yaml @@ -1,8 +1,7 @@ --- - # 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 +# most languages don't have two ways to pronounce 'a' -- if not need, remove the rules and change "B-Z" to "A-Z" +# some languages say the word for "uppercase" after the letter. Make sure to change that where appropriate by moving some code around - "a": - test: if: "$TTS='none'" @@ -11,12 +10,12 @@ - "b-z": - test: if: "$TTS='none'" - then: [t: "a"] # (en: '.', google translation) + then: [t: "."] # (en: '.', google translation) else: [spell: "'.'"] - # Capital letters are a little tricky: users can pick their favorite word (something that was requested) and - # screen readers have options to use pitch changes or beeps instead of or in addition to say "cap" - # Also, if a user can see the screen, they probably don't need to hear "cap", but if they specified an override, they must want to hear the override. +# Capital letters are a little tricky: users can pick their favorite word (something that was requested) and +# screen readers have options to use pitch changes or beeps instead of or in addition to say "cap" +# Also, if a user can see the screen, they probably don't need to hear "cap", but if they specified an override, they must want to hear the override. - "A": - test: @@ -63,16 +62,17 @@ - "0-9": [t: "."] # (en: '.', google: 'A') #theodora. is this replacing dots with commas in decimals for greek? + - " ": [t: " "] # 0x20 - "!": # 0x21 - test: - if: "ancestor-or-self::*[contains(@data-intent-property, ':structure:')]" + if: "ancestor-or-self::*[contains(@data-intent-property, ':literal:')]" then_test: if: "$Verbosity = 'Terse'" then: [t: "πάταγος"] # 0x21 (en: 'bang', google translation) else: [t: "θαυμαστικό"] # 0x21 (en: 'exclamation point', google: 'θαυμαστικό') else: [t: "παραγοντικό"] # 0x21 (en: 'factorial') - - "\"": [t: "εισαγωγικά"] # 0x22 (en: 'quotation mark', google: 'εισαγωγικά') + - \"": [t: "εισαγωγικά"] # 0x22 (en: 'quotation mark', google: 'εισαγωγικά') - "#": [t: "σύμβολο αριθμού"] # 0x23 (en: 'number', google: 'αριθμός') - "$": [t: "δολάριο"] # 0x24 (en: 'dollars', google: 'δολάρια') - "%": [t: "τοις εκατό"] # 0x25 (en: 'percent') @@ -101,7 +101,7 @@ then: [t: "αστερίσκος"] # 0x2a (en: 'star', google translation) else: [t: "επί"] # 0x2a (en: 'times', google: 'φορές') - "+": [t: "συν"] # 0x2b (en: 'plus') - - ",": # 0x2c + - ",": # 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: @@ -111,19 +111,28 @@ # speak "comma" when not adjacent to '…' - "( following-sibling::*[1][text()!= '…'] and preceding-sibling::*[1][text()!='…'] ) or " # except if expression starts with '…' - - "../*[1][text()='…'] " - then: [t: "κόμμα"] # (en: 'comma', google translation) + - "../*[1][.='…'] " + then: + - T: "κόμμα" # (en: 'comma', google translation) + - test: + if: "$Verbosity != Terse" + then: [pause: short] # else silent - - "-": [t: "μείον"] # 0x2d (en: 'minus') - - ".": # 0x2e + - "-": [t: "μείον"] # 0x2d + - ".": # 0x2e - test: if: "parent::*[1][self::m:mn]" - then: [t: "σημείο"] # (en: 'point', google translation) - else: [t: "τελεία"] # (en: 'dot', google translation) - - "/": [t: "κάθετος"] # 0x2f (en: 'divided by', google: 'διαιρείται από') + then: [t: "σημείο"] + else: [t: "τελεία"] + - "/": # 0x2f + - test: + if: "ancestor-or-self::*[contains(@data-intent-property, ':literal:')]" + then: [t: "κάθετος"] # 0x2f + else: [t: "διαιρείται από"] # 0x2f + - ":": [t: "άνω κάτω τελεία"] # 0x3a (en: 'colon', google: 'άνω κάτω τελεία') - - ";": [t: "ερωτηματικό"] # 0x3b (en: 'semicolon', google: 'άνω τελεία') + - ";": [t: "ελληνικό ερωτηματικό"] # 0x3b (en: 'semicolon', google: 'άνω τελεία') - "<": # 0x3c - test: if: "$Verbosity!='Terse'" @@ -132,7 +141,7 @@ - "=": # 0x3d - test: if: "$Verbosity!='Terse'" - then: [t: "είναι ίσο με"] # (en: 'is equal to', google translation) + then: [t: "ισούται με"] # (en: 'is equal to', google translation) else: [t: "ισούται με"] # (en: 'equals', google translation) - ">": # 0x3e @@ -140,7 +149,7 @@ if: "$Verbosity!='Terse'" then: [t: "είναι"] # (en: 'is', google translation) - t: "μεγαλύτερο από" # (en: 'greater than', google: 'μεγαλύτερος από') - - "?": [t: "λατινικό ερωτηματικό"] # 0x3f (en: 'question mark', google: 'ερωτηματικό') + - "?": [t: "αγγλικό ερωτηματικό"] # 0x3f (en: 'question mark', google: 'ερωτηματικό') - "@": [t: "σύμβολο at"] # 0x40 (en: 'at sign', google: 'στο σημείο') - "[": # 0x5b - test: @@ -153,9 +162,13 @@ if: $SpeechStyle = 'ClearSpeak' or $SpeechStyle = 'SimpleSpeak' then: [t: "κλείνει αγκύλη"] # (en: 'close bracket', google translation) else: [t: "δεξιά αγκύλη"] # (en: 'right bracket', google: 'δεξιά βραχίονα') - - "^": [t: "καπέλο"] # 0x5e (en: 'hat', google: 'καπέλο') - - "_": [t: "κάτω παύλα"] # 0x5f (en: 'under bar', google: 'κάτω από το μπαρ') - - "`": [t: "βαρεία"] # 0x60 (en: 'grave', google: 'τάφος') + - "^": # 0x5e + - test: + if: "parent::m:modified-variable or parent::m:mover" + then: [t: "καπέλο"] + else: [t: "καπέλο"] + - "_": [t: "κάτω παύλα"] # 0x5f + - "`": [t: "βαρεία"] # 0x60 - "{": # 0x7b - test: if: $SpeechStyle = 'ClearSpeak' or $SpeechStyle = 'SimpleSpeak' @@ -163,14 +176,28 @@ else: [t: "αριστερό άγκιστρο"] # (en: 'left brace', google: 'αριστερό στήριγμα') - "|": # 0x7c # note: for ClearSpeak and SimpleSpeak, "|" inside of sets is handled at the mrow level, same for 'sets' - - test: - - if: "$SpeechStyle != 'ClearSpeak' or not(preceding-sibling::*) or not(following-sibling::*)" - then: [t: "κάθετη γραμμή"] # (en: 'vertical line', google translation) - - else_if: "$ClearSpeak_VerticalLine = 'SuchThat'" - then: [t: "τέτοια ώστε"] # (en: 'such that', google translation) - - else_if: "$ClearSpeak_VerticalLine = 'Given'" - then: [t: "δοσμένων"] # (en: 'given', google translation) - - else: [t: "διαιρεί"] # (en: 'divides', google: 'χωρίζει') + # new / changed + - 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: "κάθετη γραμμη"] + - else_if: "$SpeechStyle != 'ClearSpeak'" + then_test: + - if: "$DefaultToGiven" + then: [t: "δεδομένου"] + - 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: "διαιρεί"] + else: [t: "κάθετη γραμμη"] + - else_if: "not(preceding-sibling::*) or not(following-sibling::*)" + then: [t: "κάθετη γραμμή"] + - else_if: "$ClearSpeak_VerticalLine = 'SuchThat'" + then: [t: "τέτοια ώστε"] # (en: 'such that', google translation) + - else_if: "$ClearSpeak_VerticalLine = 'Given' or $DefaultToGiven" + then: [t: "δεδομένου"] # (en: 'given', google translation) + - else: [t: "διαιρεί"] # (en: 'divides', google: 'χωρίζει') - "}": # 0x7d - test: @@ -191,17 +218,23 @@ - "´": [t: "οξεία"] # 0xb4 (en: 'acute', google: 'οξύς') - "·": # 0xB7 - test: - if: "$SpeechStyle != 'ClearSpeak' or $ClearSpeak_MultSymbolDot = 'Auto'" - then: [t: "φορές"] # (en: 'times', google translation) - else: [t: "τελεία"] # (en: 'dot', google: 'τελεία') + if: "ancestor-or-self::*[contains(@data-intent-property, ':literal:')] or not($SpeechStyle = 'ClearSpeak' and $ClearSpeak_MultSymbolDot = 'Auto')" + then: [t: "τελεία"] # (en: 'times', google translation) + else: [t: "φορές"] # (en: 'dot', google: 'τελεία') - "×": # 0xd7 - test: - if: "$SpeechStyle != 'ClearSpeak' or $ClearSpeak_MultSymbolX = 'Auto'" - then: [t: "φορές"] # (en: 'times', google translation) + if: "$SpeechStyle = 'ClearSpeak'" + then_test: + - if: "$ClearSpeak_MultSymbolX = 'Auto'" + then: [t: "επί"] # (en: 'times', google translation) + - else_if: "$ClearSpeak_MultSymbolX = 'By'" + then: [t: "επί"] + else: [t: "πολλαπλασιασμός"] else_test: - if: $ClearSpeak_MultSymbolX = 'By' - then: [t: "επί"] # (en: 'by', google translation) - else: [t: "σύμβολο πολλαπλασιασμού"] # (en: 'cross', google: 'σταυρός') + if: "ancestor-or-self::*[contains(@data-intent-property, ':literal:')]" + then: [t: "σύμβολο πολλαπλασιασμού"] + else: [t: "επί"] + - "÷": [t: "διά"] # 0xf7 (en: 'divided by', google: 'διαιρείται από') - "̀": [t: "καλλωπιστικός τόνος βαρεία"] # 0x300 (en: 'grave accent embellishment', google: 'grave accent excellishing') - "́": [t: "καλλωπιστικός τόνος οξεία"] # 0x301 (en: 'acute accent embellishment', google: 'οξεία διακοσμητική προφορά') @@ -252,17 +285,18 @@ - "ρ": [t: "ρ"] # 0x3c1 (en: 'rho', google: 'rho') - "ς": [t: "μικρό σίγμα"] # 0x3c2 (en: 'final sigma', google: 'τελική sigma') - "σ": [t: "σίγμα"] # 0x3c3 (en: 'sigma', google: 'sigma') - - "τ": [t: "ταύ"] # 0x3c4 (en: 'tau', google: 'tau') + - "τ": [t: "τάαφ"] # 0x3c4 (en: 'tau', google: 'tau') - "υ": [t: "ύψιλον"] # 0x3c5 (en: 'upsilon', google: 'ύψιλο') - "φ": [t: "φ"] # 0x3c6 (en: 'phi', google: 'phi') - "χ": [t: "χ"] # 0x3c7 (en: 'chi', google: 'τσι') - "ψ": [t: "ψ"] # 0x3c8 (en: 'psi', google: 'psi') - "ω": [t: "ωμέγα"] # 0x3c9 (en: 'omega', google: 'ωμέγα') - - "ϕ": [t: "παραλλαγή του φι"] # 0x3d5 (en: 'phi', google: 'phi') - - "ϖ": [t: "παραλλαγή του πι"] # 0x3d6 (en: 'pi', google: 'πι') + - "ϕ": [t: "παραλλαγή του φ"] # 0x3d5 (en: 'phi', google: 'phi') + - "ϖ": [t: "παραλλαγή του π"] # 0x3d6 (en: 'pi', google: 'πι') - "ϵ": [t: "παραλλαγή του έψιλον"] # 0x3f5 (en: 'epsilon', google: 'έψιλο') - "϶": [t: "ανεστραμμένο έψιλον"] # 0x3f6 (en: 'reversed epsilon', google: 'αντιστρέψιμο epsilon') + - "–": [t: "μικρή παύλα"] # 0x2013 - "—": [t: "μεγάλη παύλα"] # 0x2014 - "―": [t: "οριζόντια παύλα"] # 0x2015 (en: 'horizontal bar') @@ -273,17 +307,25 @@ - "$SpeechStyle != 'ClearSpeak' or $ClearSpeak_Ellipses = 'Auto' or" # must be ClearSpeak and $ClearSpeak_Ellipses = 'AndSoOn' # speak '…' as 'and so on...' unless expr starts with '…' - - "../*[1][text()='…']" - then: [t: "τρεις τελείες"] # (google translation) + - "../*[1][.='…']" + then: [t: "αποσιωπητικά"] # (google translation) else_test: # must have $ClearSpeak_Ellipses = 'AndSoOn' if: "count(following-sibling::*) = 0" - then: [t: "και λοιπά"] # (en: 'and so on', google translation) - else: [t: "και ούτω καθεξής"] # (en: 'and so on up to', google: 'και ούτω καθεξής') + then: [t: "και ούτω καθεξής"] # (en: 'and so on', google translation) + else: [t: "και ούτω καθεξής ως"] # (en: 'and so on up to', google: 'και ούτω καθεξής') - "⁡": # 0x2061 - test: - if: "$Verbosity!='Terse' and not(preceding-sibling::*[1][IsInDefinition(., 'GeometryShapes')]) and - not(@data-changed='added' and ancestor-or-self::*[contains(@data-intent-property, ':structure:')])" + # 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: "του"] # (en: 'of', google translation) # theodora. depending on the following word and syntax of a sentence, the word "of" # has multiple translations in Greek. this is okay for now. @@ -296,17 +338,17 @@ - "‴": [t: "τριπλή παράγωγος"] # 0x2034 - "ℂℕℚℝℤ": # here we rely on this running through the table again to speak "cap xxx" - - t: "triple prime" # (en: 'double-struck', google: 'διπλό χτύπημα') + - t: "διπλή γραφή" # (en: 'double-struck', google: 'διπλό χτύπημα') - spell: "translate('.', 'ℂℕℚℝℤ', 'CNQRZ')" - "℃": [t: "βαθμοί κελσίου"] # 0x2103 (en: 'degrees celsius', google: 'βαθμοί κελσίου') - "℉": [t: "βαθμοί φάρεναϊτ"] # 0x2109 (en: 'degrees fahrenheit', google: 'βαθμοί φάρεναϊτ') - "ℋℛℓ": # 0x210b - - t: "βαθμούς Fahrenheit" # (en: 'script', google: 'γραφή') + - t: "καλλιγραφικό" # (en: 'script', google: 'γραφή') - spell: "translate('.', 'ℋℛℓ', 'HRl')" - "ℎ": [t: "σταθερά του Πλάνκ"] # 0x210e (en: 'planck constant', google: 'planck σταθερά') - "ℜ": # 0x211c - - t: "φρακτουρ κεφαλαίο άρ" # (en: 'fraktur', google: 'fraktur') + - t: "φράκτουρ" # (en: 'fraktur', google: 'fraktur') - spell: "'R'" - "Ω": [t: "ωμ"] # 0x2126 (en: 'ohms', google: 'ohms') @@ -331,48 +373,62 @@ - test: if: "$Verbosity='Terse'" then: [t: "μερικό"] # (en: 'partial', google translation) - else: [t: "διαφορικό"] # (en: 'partial derivative', google: 'μερικό παράγωγο') + else: [t: "μερικό διαφορικό"] # (en: 'partial derivative', google: 'μερικό παράγωγο') - "∃": [t: "υπάρχει"] # 0x2203 (en: 'there exists') - "∄": [t: "δεν υπάρχει"] # 0x2204 (en: 'there does not exist') - "∅": [t: "κενό σύνολο"] # 0x2205 (en: 'empty set', google: 'άδειο σετ') - "∆": # 0x2206 - test: if: "$Verbosity!='Terse'" - then: [t: "ο"] # (en: 'the', google translation) - - t: "τελεστής δέλτα" # (en: 'laplacian of', google: 'laplacian του') - - "∇": # 0x2207 + then: + - test: + if: "preceding-sibling::*[1][self::m:mo and (.='=' or .='<' or .='>' or .='≤' or .='≥' or .='≰' or .='≱' or .='≮' or .='≯' or .='≝' or .='≡' or .='≃' or .='≄' or .='≅' or .='≆' or .='≇' or .='≈' or .='≉' or .='≊' or .='≢' or .='≨' or .='≩' or .='≞' or .='≪' or .='≫' or .='⫹' or .='⫺' or .='≼' or .='≽' or .='⋠' or .='⋡')]" + then: [t: "τη"] #theodora. added logic for reading greek accusative after an operator "ισούται με" + else: [t: "η"] + # then: [t: "η"] # (en: 'the', google translation) #theodora. not sure articles should be kept in greek. The current rules don't allow for creating cases for accusative, nominative etc. so it is easier to remove for now + - t: "λαπλασιανή" # (en: 'laplacian of', google: 'laplacian του') + - "∇": # 0x2207 - test: if: "$Verbosity!='Terse'" - then: [t: "το"] # (en: 'the', google translation) + then: [t: "το"] # (en: 'the', google translation) #theodora. not sure articles should be kept in greek. The current rules don't allow for creating cases for accusative, nominative etc. so it is easier to remove for now - t: "ανάδελτα" # (en: 'gradient of', google: 'κλίση του') - - "∈": # 0x2208 + - "∈": #new / changed # 0x2208 - test: if: "$SpeechStyle != 'ClearSpeak'" - then: [t: "ένα στοιχείο του"] # (en: 'an element of', google translation) + then: + - test: + if: "$Verbosity!='Terse' and not(ancestor::*[self::m:set])" # "the set x is an element of ..." sounds bad" + then: [t: ""] # ??? + else: [t: "που"] # ??? + - t: "ανήκει" # -- ένα στοιχείο του # 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: "σε"] # (en: 'in', google translation) + then: [t: "ανήκει"] # (en: 'in', google translation) - else_if: $ClearSpeak_SetMemberSymbol = 'Member' - then: [t: "στοιχείο του"] # (en: 'member of', google translation) + then: [t: "ανήκει"] # (en: 'member of', google translation) - else_if: $ClearSpeak_SetMemberSymbol = 'Element' - then: [t: "στοιχείο του"] # (en: 'element of', google translation) - - else: [t: "ανήκει στο"] # $ClearSpeak_SetMemberSymbol = 'Belongs' (en: 'belonging to', google: 'ανήκει σε') + then: [t: "ανήκει"] # (en: 'element of', google translation) + - else: [t: "ανήκει"] # $ClearSpeak_SetMemberSymbol = 'Belongs' (en: 'belonging to', google: 'ανήκει σε') else_test: - - if: $ClearSpeak_SetMemberSymbol = 'Auto' or $ClearSpeak_SetMemberSymbol = 'Member' - then: [t: "είναι στοιχείο του"] # (en: 'is a member of', google translation) + - if: $ClearSpeak_SetMemberSymbol = 'Member' or $ClearSpeak_SetMemberSymbol = 'Auto' + then: [t: "ανήκει"] # (en: 'is a member of', google translation) -- είναι στοιχείο του - else_if: $ClearSpeak_SetMemberSymbol = 'Element' - then: [t: "είναι ένα στοιχείο του"] # (en: 'is an element of', google translation) + then: [t: "ανήκει"] # (en: 'is an element of', google translation) -- είναι ένα στοιχείο του - else_if: $ClearSpeak_SetMemberSymbol = 'In' - then: [t: "είναι εντός του"] # (en: 'is in', google translation) - - else: [t: "ανήκει στο"] # $ClearSpeak_SetMemberSymbol = 'Belongs' (en: 'belongs to', google: 'ανήκει στον') + then: [t: "ανήκει"] # (en: 'is in', google translation) + - else: [t: "ανήκει"] # $ClearSpeak_SetMemberSymbol = 'Belongs' (en: 'belongs to', google: 'ανήκει στον') - "∉": # 0x2209 # rule is identical to 0x2208 - test: if: "$SpeechStyle != 'ClearSpeak'" - then: [t: "δεν είναι ένα στοιχείο του"] # (en: 'is not an element of', google translation) + then: + - test: + if: "$Verbosity!='Terse'" + then: [t: "δεν ανήκει"] # όχι στοιχείο του + else: [t: "δεν ανήκει"] # theodora. check -- δεν είναι στοιχείο του # 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 @@ -380,41 +436,45 @@ - if: $ClearSpeak_SetMemberSymbol = 'Auto' or $ClearSpeak_SetMemberSymbol = 'In' then: [t: "δεν ανήκει"] # (en: 'not in', google translation) - else_if: $ClearSpeak_SetMemberSymbol = 'Member' - then: [t: "όχι στοιχείο του"] # (en: 'not member of', google translation) + then: [t: "δεν ανήκει"] # (en: 'not member of', google translation) -- όχι στοιχείο του - else_if: $ClearSpeak_SetMemberSymbol = 'Element' - then: [t: "όχι στοιχείο του"] # (en: 'not element of', google translation) - - else: [t: "δεν ανήκει στο"] # $ClearSpeak_SetMemberSymbol = 'Belongs' (en: 'not belonging to', google: 'δεν ανήκει σε') + then: [t: "δεν ανήκει"] # (en: 'not element of', google translation) -- όχι στοιχείο του + - else: [t: "δεν ανήκει"] # $ClearSpeak_SetMemberSymbol = 'Belongs' (en: 'not belonging to', google: 'δεν ανήκει σε') else_test: - if: $ClearSpeak_SetMemberSymbol = 'Auto' or $ClearSpeak_SetMemberSymbol = 'Member' - then: [t: "δεν είναι στοιχείο του"] # (en: 'is not a member of', google translation) + then: [t: "δεν ανήκει"] # (en: 'is not a member of', google translation) -- δεν είναι στοιχείο του - else_if: $ClearSpeak_SetMemberSymbol = 'Element' - then: [t: "δεν είναι ένα στοιχείο του"] # (en: 'is not an element of', google translation) + then: [t: "δεν ανήκει"] # (en: 'is not an element of', google translation) -- δεν είναι ένα στοιχείο του - else_if: $ClearSpeak_SetMemberSymbol = 'In' - then: [t: "δεν ανήκει στο"] # (en: 'is not in', google translation) - - else: [t: "δεν ανήκει στο"] # $ClearSpeak_SetMemberSymbol = 'Belongs' (en: 'does not belong to', google: 'δεν ανήκει') + then: [t: "δεν ανήκει"] # (en: 'is not in', google translation) + - else: [t: "δεν ανήκει"] # $ClearSpeak_SetMemberSymbol = 'Belongs' (en: 'does not belong to', google: 'δεν ανήκει') - "∊": # 0x220a - test: - if: "$SpeechStyle != 'ClearSpeak'" - then: [t: "είναι ένα στοιχείο του"] # (en: 'is an element of', google translation) + 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: ""] # ??? + - t: "ανήκει" # 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: "σε"] # (en: 'in', google translation) + then: [t: "ανήκει"] # (en: 'in', google translation) - else_if: $ClearSpeak_SetMemberSymbol = 'Member' - then: [t: "στοιχείο του"] # (en: 'member of', google translation) + then: [t: "ανήκει στο"] # (en: 'member of', google translation) - else_if: $ClearSpeak_SetMemberSymbol = 'Element' - then: [t: "στοιχείο του"] # (en: 'element of', google translation) - - else: [t: "ανήκει στο"] # $ClearSpeak_SetMemberSymbol = 'Belongs' (en: 'belonging to', google: 'ανήκει σε') + then: [t: "ανήκει στο"] # (en: 'element of', google translation) + - else: [t: "ανήκει"] # $ClearSpeak_SetMemberSymbol = 'Belongs' (en: 'belonging to', google: 'ανήκει σε') else_test: - - if: $ClearSpeak_SetMemberSymbol = 'Auto' or $ClearSpeak_SetMemberSymbol = 'Member' - then: [t: "είναι στοιχείο του"] # (en: 'is a member of', google translation) + - if: $ClearSpeak_SetMemberSymbol = 'Auto' or $ClearSpeak_SetMemberSymbol = 'In' + then: [t: "ανήκει"] # (en: 'is a member of', google translation) - else_if: $ClearSpeak_SetMemberSymbol = 'Element' - then: [t: "είναι ένα στοιχείο του"] # (en: 'is an element of', google translation) - - else_if: $ClearSpeak_SetMemberSymbol = 'In' - then: [t: "είναι μέσα"] # (en: 'is in', google translation) - - else: [t: "ανήκει στο"] # $ClearSpeak_SetMemberSymbol = 'Belongs' (en: 'belongs to', google: 'ανήκει στον') + then: [t: "ανήκει στο"] # (en: 'is an element of', google translation) -- είναι ένα στοιχείο του + - else_if: $ClearSpeak_SetMemberSymbol = 'Member' + then: [t: "ανήκει στο"] # (en: 'is in', google translation) + - else: [t: "ανήκει"] # $ClearSpeak_SetMemberSymbol = 'Belongs' (en: 'belongs to', google: 'ανήκει στον') - "∏": [t: "γινόμενο"] # 0x220f (en: 'product', google: 'προϊόν') - "∐": [t: "συνγινόμενο"] # 0x2210 (en: 'co-product', google: 'συμπαραγωγή') - "∑": [t: "άθροισμα"] # 0x2211 (en: 'sum') @@ -425,7 +485,7 @@ - "√": # 0x221a - test: if: "$Verbosity!='Terse'" - then: [t: "η"] # (en: 'the', google translation) + then: [t: ""] # (en: 'the', google translation) #theodora. not sure articles should be kept in greek. The current rules don't allow for creating cases for accusative, nominative etc. so it is easier to remove for now - t: "τετραγωνική ρίζα" # (en: 'square root of', google: 'τετραγωνική ρίζα του') - "∝": # 0x221d - test: @@ -438,12 +498,16 @@ - "∡": [t: "γωνία με τόξο εντός της"] # 0x2221 (en: 'measured angle', google: 'μετρούμενη γωνία') - "∣": [t: "διαιρεί"] # 0x2223 (en: 'divides', google: 'χωρίζει') - "∤": [t: "δεν διαιρεί"] # 0x2224 (en: 'does not divide', google: 'δεν χωρίζει') - - "∥": # 0x2225 - - test: - if: "$Verbosity!='Terse'" - then: [t: "είναι"] # (en: 'is', google translation) - - t: "παράλληλο προς" # (en: 'parallel to', google: 'παράλληλο προς') - - "∦": # 0x2226 + - "∥": # 0x2225 + - test: + if: "ancestor-or-self::*[contains(@data-intent-property, ':literal:')]" + then: [t: "διπλή κάθετη γραμμή"] + else: + - test: + if: "$Verbosity!='Terse'" + then: [t: "έίναι"] + - t: "παράλληλο προς" + - "∦": # 0x2226 - test: if: "$Verbosity!='Terse'" then: [t: "δεν είναι παράλληλο στο"] # (en: 'is', google translation) @@ -465,11 +529,12 @@ - "∷": [t: "σύμβολο αναλογίας"] # 0x2237 (en: 'as', google: 'όπως και') - "∼": [t: "κυματοειδής γραμμή"] # 0x223c (en: 'varies with', google: 'ποικίλλει με') - "∽": [t: "ανεστραμμένη κυματοειδής γραμμή"] # 0x223d (en: 'reversed tilde', google: 'αντιστράφηκε tilde') - - "∾": # 0x223e - - test: - if: "$Verbosity!='Terse'" - then: [t: "είναι"] # (en: 'is', google translation) - - t: "ανεστραμμένο s" # (en: 'most positive', google: 'το πιο θετικό') +# new +# - "∾": # 0x223e +# - test: +# if: "$Verbosity!='Terse'" +# then: [t: "είναι"] +# - t: "most positive" - "∿": [t: "ημιτονοειδές κύμα"] # 0x223f (en: 'sine wave') - "≠": # 0x2260 - test: @@ -490,13 +555,14 @@ - test: if: "$Verbosity!='Terse'" then: [t: "είναι"] # (en: 'is', google translation) - - t: "μεγαλύτερο ή ίσο από" # (en: 'greater than or equal to', google: 'μεγαλύτερο ή ίσο με') - - "≦": [t: "μικρότερο από πάνω από ίσον"] # 0x2266 (en: 'less than over equal to', google: 'λιγότερο από πάνω από ίσο με') - - "≧": [t: "μεγαλύτερο από πάνω από ίσον"] # 0x2267 (en: 'greater than over equal to', google: 'μεγαλύτερη από ό, τι ισούται με') + - t: "μεγαλύτερο από ή ίσο με" # (en: 'greater than or equal to', google: 'μεγαλύτερο ή ίσο με') + - "≦": [t: "μικρότερο από πάνω από ίσον"] # 0x2266 (en: 'less than over equal to', google: 'λιγότερο από πάνω από ίσο με') + - "≧": [t: "μεγαλύτερο από πάνω από ίσον"] # 0x2267 (en: 'greater than over equal to', google: 'μεγαλύτερη από ό, τι ισούται με') - "≺": [t: "προηγείται του"] # 0x227a (en: 'precedes', google: 'προηγείται') - "≻": [t: "έπεται του"] # 0x227b (en: 'succeeds', google: 'επιτυγχάνει') - "⊂": # 0x2282 - test: + if: "$Verbosity!='Terse'" if: "$Verbosity!='Terse'" then: [t: "είναι ένα"] # (en: 'is a', google translation) - t: "υποσύνολο του" # (en: 'subset of', google: 'υποσύνολο του') diff --git a/tests/Languages/el.rs b/tests/Languages/el.rs new file mode 100644 index 000000000..08d7d4e43 --- /dev/null +++ b/tests/Languages/el.rs @@ -0,0 +1,40 @@ +#![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; + + +//mod difficult_greek; +//mod uoa_corpus_Clearspeak; +//mod uoa_corpus_Simplespeak; + diff --git a/tests/Languages/el/ClearSpeak/functions.rs b/tests/Languages/el/ClearSpeak/functions.rs new file mode 100644 index 000000000..68eb17a15 --- /dev/null +++ b/tests/Languages/el/ClearSpeak/functions.rs @@ -0,0 +1,570 @@ +/// 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; + +#[test] +fn trig_names() -> Result<()> { + let expr = " + sinx+ + cosy+ + tanz+ + secα+ + cscϕ+ + cotφ + "; + test("el", "ClearSpeak", expr, "ημίτονο x, συν συνημίτονο, y, συν εφαπτομένη, z, συν, τέμνουσα άλφα, συν, συντέμνουσα, παραλλαγή του φ; συν, συνεφαπτομένη, φ")?; + return Ok(()); +} + +#[test] +fn hyperbolic_trig_names() -> Result<()> { + let expr = " + sinhx+ + coshy+ + tanhz+ + sechα+ + cschϕ+ + cothφ + "; + test("el", "ClearSpeak", expr, "υπερβολικό ημίτονο, του x; συν, \ + υπερβολικό συνημίτονο, του y; συν, \ + υπερβολική εφαπτομένη, του z; συν, \ + υπερβολική τέμνουσα, του άλφα; συν; \ + υπερβολική συντέμνουσα, του παραλλαγή του φ; συν, \ + υπερβολική συνεφαπτομένη; του φ")?; + return Ok(()); + +} + + +#[test] +fn inverse_trig() -> Result<()> { + let expr = "sin-1x"; + test("el", "ClearSpeak", expr, "αντίστροφη ημίτονο, του x")?; + return Ok(()); + +} + +#[test] +fn inverse_trig_trig_inverse() -> Result<()> { + let expr = "tan-1x"; + test_ClearSpeak("el", "ClearSpeak_Trig", "TrigInverse",expr, + "αντίστροφη εφαπτομένη, του x")?; + return Ok(()); + +} + +#[test] +fn inverse_trig_arc() -> Result<()> { + let expr = "cosh-1x"; + test_ClearSpeak("el", "ClearSpeak_Trig", "ArcTrig",expr, + "τόξο υπερβολικό συνημίτονο; του x")?; + return Ok(()); + +} + +#[test] +fn trig_squared() -> Result<()> { + let expr = "sin2x"; + test("el", "ClearSpeak", expr, "ημίτονο στο τετράγωνο, του x")?; + return Ok(()); + +} + +#[test] +fn trig_cubed() -> Result<()> { + let expr = "tan3x"; + test("el", "ClearSpeak", expr, "εφαπτομένη στον κύβο, του x")?; + return Ok(()); + +} + +#[test] +fn trig_fourth() -> Result<()> { + let expr = "sec4x"; + test("el", "ClearSpeak", expr, "η τέταρτη δύναμη του, τέμνουσα; του x")?; + return Ok(()); + +} + + +#[test] +fn trig_power_other() -> Result<()> { + let expr = "sinh>n-1x"; + test("el", "ClearSpeak", expr, "η n μείον 1 δύναμη του, υπερβολικό ημίτονο; του x")?; + return Ok(()); + +} + +#[test] +fn simple_log() -> Result<()> { + let expr = " logx "; + test("el", "ClearSpeak", expr, "λογάριθμος, x")?; + return Ok(()); + +} + +#[test] +fn normal_log() -> Result<()> { + let expr = "log(x+y)"; + test("el", "ClearSpeak", expr, "ο λογάριθμος, του; ανοίγει παρένθεση, x συν y, κλείνει παρένθεση")?; + return Ok(()); + +} + +#[test] +fn simple_log_with_base() -> Result<()> { + let expr = " logbx "; + test("el", "ClearSpeak", expr, "ο λογάριθμος με βάση b; του x")?; + return Ok(()); + +} + +#[test] +fn normal_log_with_base() -> Result<()> { + let expr = "logb(x+y)"; + test("el", "ClearSpeak", expr, "ο λογάριθμος με βάση b; του; ανοίγει παρένθεση, x συν y, κλείνει παρένθεση")?; + return Ok(()); + +} + +#[test] +fn simple_ln() -> Result<()> { + let expr = " lnx "; + test("el", "ClearSpeak", expr, "l n x")?; + return Ok(()); + +} + +#[test] +fn normal_ln() -> Result<()> { + let expr = "ln(x+y)"; + test("el", "ClearSpeak", expr, "ο l n του; ανοίγει παρένθεση, x συν y, κλείνει παρένθεση")?; + return Ok(()); + +} + + +#[test] +fn simple_natural_log() -> Result<()> { + let expr = " lnx "; + test_ClearSpeak("el", "ClearSpeak_Log", "LnAsNaturalLog",expr, + "φυσικός λογάριθμος, x")?; + return Ok(()); + +} + + +#[test] +fn natural_log() -> Result<()> { + let expr = "ln(x+y)"; + test_ClearSpeak("el", "ClearSpeak_Log", "LnAsNaturalLog",expr, + "ο φυσικός λογάριθμος, του; ανοίγει παρένθεση, x συν y, κλείνει παρένθεση")?; + return Ok(()); + +} + + +#[test] +fn explicit_function_call_with_parens() -> Result<()> { + let expr = "t(x)"; + test("el", "ClearSpeak", expr, "t του x")?; + return Ok(()); + +} + + +#[test] +fn explicit_times_with_parens() -> Result<()> { + let expr = "t(x)"; + test("el", "ClearSpeak", expr, "t επί x")?; + return Ok(()); + //theodora. fails because "times" was removed from the ClearSpeak rule and left blank (keeping it resulted in false positives) +} + +#[test] +fn explicit_function_call() -> Result<()> { + let expr = "tx"; + test("el", "ClearSpeak", expr, "t του x")?; + return Ok(()); + +} + +#[test] +fn explicit_times() -> Result<()> { + let expr = "tx"; + test("el", "ClearSpeak", expr, "t x")?; + return Ok(()); +} + + +#[test] +fn test_functions_none_pref() -> Result<()> { + let expr = " + log(x+y) + + + f(x+y) + "; + test_ClearSpeak("el", "ClearSpeak_Functions", "None",expr, + "ο λογάριθμος, του; ανοίγει παρένθεση, x συν y, κλείνει παρένθεση; συν; f επί; ανοίγει παρένθεση, x συν y, κλείνει παρένθεση")?; + return Ok(()); +} + +#[test] +fn stest_functions_none_pref_multiple_arg() -> Result<()> { + let expr = "B( 2,6 ) + "; + test_ClearSpeak("el", "ClearSpeak_Functions", "None",expr, + "κεφαλαίο b; ανοίγει παρένθεση; 2 κόμμα, 6, κλείνει παρένθεση")?; + return Ok(()); +} + + +/* + * Tests for times + */ +#[test] +fn no_times_binomial() -> Result<()> { + let expr = "x y"; + test("el", "ClearSpeak", expr, "x y")?; + return Ok(()); + + +} + +#[test] +fn times_following_paren() -> Result<()> { + let expr = " + 2 + ( 3 ) + "; + test("el", "ClearSpeak", expr, "2 επί 3")?; + return Ok(()); + //theodora. fails because "times" was removed from the ClearSpeak rule and left blank (keeping it resulted in false positives) + +} + +#[test] +fn times_preceding_paren() -> Result<()> { + let expr = " + ( 2 ) + 3 + "; + test("el", "ClearSpeak", expr, "2 επί 3")?; + return Ok(()); + //theodora. fails because "times" was removed from the ClearSpeak rule and left blank (keeping it resulted in false positives) + +} + +#[test] +fn times_sqrt() -> Result<()> { + let expr = " + a + b + = + ab + "; + test("el", "ClearSpeak", expr, "η τετραγωνική ρίζα του a; επί, η τετραγωνική ρίζα του b; ισούται με; η τετραγωνική ρίζα του a b")?; + return Ok(()); + //theodora. fails because "times" was removed from the ClearSpeak rule and left blank (keeping it resulted in false positives) +} + +#[test] +fn more_implied_times() -> Result<()> { + let expr = " + + + + ( + 2x + ) + 2 + + + "; + test_ClearSpeak("el", "ClearSpeak_ImpliedTimes", "MoreImpliedTimes",expr, + "ανοίγει παρένθεση, 2 επί x, κλείνει παρένθεση στο τετράγωνο")?; + return Ok(()); +//theodora. fails because "times" was removed from the ClearSpeak rule and left blank (keeping it resulted in false positives) + + +} + +#[test] +fn explicit_times_more_implied_times() -> Result<()> { + let expr = "tx"; + test_ClearSpeak("el", "ClearSpeak_ImpliedTimes", "MoreImpliedTimes",expr, "t επί x")?; + return Ok(()); + //theodora. fails because "times" was removed from the ClearSpeak rule and left blank (keeping it resulted in false positives) + + +} + +#[test] +fn explicit_times_none_simple_right() -> Result<()> { + let expr = "2[3 ]"; + test_ClearSpeak("el", "ClearSpeak_ImpliedTimes", "None", + expr, "2, ανοίγει αγκύλη 3 κλείνει αγκύλη")?; + return Ok(()); + +} + +#[test] +fn explicit_times_none_simple_left() -> Result<()> { + let expr = "(21)x"; + test_ClearSpeak("el", "ClearSpeak_ImpliedTimes", "None", + expr, "ανοίγει παρένθεση, 2 μείον 1, κλείνει παρένθεση; x")?; + return Ok(()); + + +} + +#[test] +fn explicit_times_none_superscript() -> Result<()> { + let expr = " + f(x)= +x +2 + +( + +x+1 +) + "; + test_ClearSpeak_prefs("el", + vec![("ClearSpeak_ImpliedTimes", "None"), ("ClearSpeak_Functions", "None")], + expr, "f, ανοίγει παρένθεση x κλείνει παρένθεση; ισούται με; x στο τετράγωνο; ανοίγει παρένθεση, x συν 1, κλείνει παρένθεση")?; + return Ok(()); +} + +/* + * Tests for parens + */ + #[test] + fn no_parens_number() -> Result<()> { + let expr = " + ( + 25 + ) + x + "; + test("el", "ClearSpeak", expr, "25 επί x")?; + return Ok(()); + //theodora. fails because "times" was removed from the ClearSpeak rule and left blank (keeping it resulted in false positives) + + + } + + #[test] + fn no_parens_monomial() -> Result<()> { + let expr = " + b + ( + xy + ) + "; + test("el", "ClearSpeak", expr, "b; ανοίγει παρένθεση, x y, κλείνει παρένθεση")?; + return Ok(()); + + } + + #[test] + fn no_parens_negative_number() -> Result<()> { + let expr = " + 2+ + ( + 2 + ) + "; + test("el", "ClearSpeak", expr, "2 συν μείον 2")?; + return Ok(()); + + } + + + #[test] + fn no_parens_negative_number_with_var() -> Result<()> { + let expr = " + ( + 2x + ) + + +1 + "; + test("el", "ClearSpeak", expr, "μείον 2 x, συν 1")?; + return Ok(()); + + } + + #[test] + fn parens_superscript() -> Result<()> { + let expr = " + + + + ( + 2x + ) + 2 + + + "; + test("el", "ClearSpeak", expr, "ανοίγει παρένθεση, 2 x, κλείνει παρένθεση στο τετράγωνο")?; + return Ok(()); + + } + + #[test] + fn no_parens_fraction() -> Result<()> { + let expr = " + 2 + + + + ( + 12 + ) + "; + test("el", "ClearSpeak", expr, "2 συν 1 δεύτερο")?; + return Ok(()); + + } + + + // Tests for the ten types of intervals in ClearSpeak + #[test] + fn parens_interval_open_open() -> Result<()> { + let expr = " + ( + c,d + ) + "; + test_ClearSpeak("el", "ClearSpeak_Paren", "Interval",expr, + "το διάστημα από c ως d, δεν περιέχει c ή d")?; + return Ok(()); + +} + +#[test] + fn parens_interval_closed_open() -> Result<()> { + let expr = " + [ + c,d + ) + "; + test_ClearSpeak("el", "ClearSpeak_Paren", "Interval ",expr, + "το διάστημα από c ως d, περιέχει c αλλά δεν περιέχει d")?; + return Ok(()); + +} + + +#[test] +fn parens_interval_open_closed() -> Result<()> { + let expr = " + ( + c,d + ] + "; + test_ClearSpeak("el", "ClearSpeak_Paren", "Interval ",expr, + "το διάστημα από c ως d, δεν περιέχει c αλλά περιέχει d")?; + return Ok(()); + +} + + +#[test] +fn parens_interval_closed_closed() -> Result<()> { + let expr = " + [ + c,d + ] +"; +test_ClearSpeak("el", "ClearSpeak_Paren", "Interval ",expr, +"το διάστημα από c ως d, περιέχει c και d")?; +return Ok(()); + +} + + #[test] + fn parens_interval_neg_infinity_open_open() -> Result<()> { + let expr = " + ( + - ,d + ) + "; + test_ClearSpeak("el", "ClearSpeak_Paren", "Interval ",expr, + "το διάστημα από μείον άπειρο ως d, δεν περιέχει d")?; + return Ok(()); + +} + + #[test] + fn parens_interval_neg_infinity_closed_open() -> Result<()> { + let expr = " + ( + - ,d + ] + "; + test_ClearSpeak("el", "ClearSpeak_Paren", "Interval ",expr, + "το διάστημα από μείον άπειρο ως d, περιέχει d")?; + return Ok(()); + +} + + +#[test] +fn parens_interval_open_open_infinity() -> Result<()> { + let expr = " + ( + c, + ) + "; + test_ClearSpeak("el", "ClearSpeak_Paren", "Interval ",expr, + "το διάστημα από c ως άπειρο, δεν περιέχει c")?; + return Ok(()); + +} + + +#[test] +fn parens_interval_closed_open_infinity() -> Result<()> { + let expr = " + [ + c, + ) + "; + test_ClearSpeak("el", "ClearSpeak_Paren", "Interval ",expr, +"το διάστημα από c ως άπειρο, περιέχει c")?; +return Ok(()); + +} + +#[test] +fn parens_interval_neg_infinity_to_infinity() -> Result<()> { + let expr = " + ( + - , + ) + "; + test_ClearSpeak("el", "ClearSpeak_Paren", "Interval ",expr, + "το διάστημα από μείον άπειρο ως άπειρο")?; + return Ok(()); + +} + +#[test] +fn parens_interval_neg_infinity_to_pos_infinity() -> Result<()> { + let expr = " + ( + - ,+ + ) + "; + test_ClearSpeak("el", "ClearSpeak_Paren", "Interval ",expr, + "το διάστημα από μείον άπειρο ως συν άπειρο")?; + return Ok(()); + +} diff --git a/tests/Languages/el/ClearSpeak/large_ops.rs b/tests/Languages/el/ClearSpeak/large_ops.rs new file mode 100644 index 000000000..5c3d8fb6f --- /dev/null +++ b/tests/Languages/el/ClearSpeak/large_ops.rs @@ -0,0 +1,235 @@ +use crate::common::*; +use anyhow::Result; + +#[test] +fn sum_both() -> Result<()> { + let expr = " + + + n=1 + 10 + + n + "; + test("el", "ClearSpeak", expr, "άθροισμα από n ισούται με 1 ως 10 του n")?; + return Ok(()); + +} + +#[test] +fn sum_under() -> Result<()> { + let expr = " + + + S + + i + "; + test("el", "ClearSpeak", expr, "άθροισμα για κεφαλαίο s του i")?; + return Ok(()); + +} +#[test] +fn sum_both_msubsup() -> Result<()> { + let expr = " + + + n=1 + 10 + + n + "; + test("el", "ClearSpeak", expr, "άθροισμα από n ισούται με 1 ως 10 του n")?; + return Ok(()); + +} + +#[test] +fn sum_sub() -> Result<()> { + let expr = " + + + S + + i + "; + test("el", "ClearSpeak", expr, "άθροισμα για κεφαλαίο s του i")?; + return Ok(()); + +} + +#[test] +fn sum() -> Result<()> { + let expr = " + + ai + "; + test("el", "ClearSpeak", expr, "άθροισμα του a δείκτης i")?; + return Ok(()); + +} + +#[test] +fn product_both() -> Result<()> { + let expr = " + + + n=1 + 10 + + n + "; + test("el", "ClearSpeak", expr, "γινόμενο από n ισούται με 1 ως 10 του n")?; + return Ok(()); + +} + +#[test] +fn product_under() -> Result<()> { + let expr = " + + + S + + i + "; + test("el", "ClearSpeak", expr, "γινόμενο για κεφαλαίο s του i")?; + return Ok(()); + +} + +#[test] +fn product() -> Result<()> { + let expr = " + + ai + "; + test("el", "ClearSpeak", expr, "γινόμενο του a δείκτης i")?; + return Ok(()); + +} + +#[test] +fn intersection_both() -> Result<()> { + let expr = " + + + i=1 + 10 + + Si + "; + test("el", "ClearSpeak", expr, "τομή από i ισούται με 1 ως 10 του; κεφαλαίο s δείκτης i")?; + return Ok(()); + +} + +#[test] +fn intersection_under() -> Result<()> { + let expr = " + + + C + + Si + "; + test("el", "ClearSpeak", expr, "τομή για κεφαλαίο c του; κεφαλαίο s δείκτης i")?; + return Ok(()); + +} + +#[test] +fn intersection() -> Result<()> { + let expr = " + + Si + "; + test("el", "ClearSpeak", expr, "τομή του κεφαλαίο s δείκτης i")?; + return Ok(()); + +} + +#[test] +fn union_both() -> Result<()> { + let expr = " + + + i=1 + 10 + + Si + "; + test("el", "ClearSpeak", expr, "ένωση από i ισούται με 1 ως 10 του; κεφαλαίο s δείκτης i")?; + return Ok(()); + +} + +#[test] +fn union_under() -> Result<()> { + let expr = " + + + C + + Si + "; + test("el", "ClearSpeak", expr, "ένωση για κεφαλαίο c του; κεφαλαίο s δείκτης i")?; + return Ok(()); + +} + +#[test] +fn union() -> Result<()> { + let expr = " + + Si + "; + test("el", "ClearSpeak", expr, "ένωση του κεφαλαίο s δείκτης i")?; + return Ok(()); + +} + +#[test] +fn integral_both() -> Result<()> { + let expr = " + + + + 0 + 1 + + f(x ) + + dx + "; + test("el", "ClearSpeak", expr, "ολοκλήρωμα από 0 ως 1 του; f του x; d x")?; + return Ok(()); + +} + +#[test] +fn integral_under() -> Result<()> { + let expr = " + + + + + f(x ) + dx + "; + test("el", "ClearSpeak", expr, "ολοκλήρωμα επί του συνόλου των πραγματικών αριθμών του; f του x, d x")?; + return Ok(()); + +} + +#[test] +fn integral() -> Result<()> { + let expr = " + + f(x ) + dx + "; + test("el", "ClearSpeak", expr, "ολοκλήρωμα του f του x, d x")?; + return Ok(()); + +} \ No newline at end of file diff --git a/tests/Languages/el/ClearSpeak/menclose.rs b/tests/Languages/el/ClearSpeak/menclose.rs new file mode 100644 index 000000000..72eef2e5e --- /dev/null +++ b/tests/Languages/el/ClearSpeak/menclose.rs @@ -0,0 +1,242 @@ +use crate::common::*; +use anyhow::Result; + +#[test] +fn menclose_actuarial() -> Result<()> { + let expr = " + 3+2i + "; + test("el", "ClearSpeak", expr, "αναλογιστικό σύμβολο, περικλείει 3 συν 2 i τέλος περίκλεισης")?; + return Ok(()); + +} + +#[test] +fn menclose_box() -> Result<()> { + let expr = " + 3+2i + "; + test("el", "ClearSpeak", expr, "περίβλημα, κύκλος, περικλείει 3 συν 2 i τέλος περίκλεισης")?; + return Ok(()); + +} + +#[test] +fn menclose_left() -> Result<()> { + let expr = " + 32 + "; + test("el", "ClearSpeak", expr, "γραμμή αριστερά, περικλείει 3 δεύτερα τέλος περίκλεισης")?; + return Ok(()); + +} + +#[test] +fn menclose_right() -> Result<()> { + let expr = " + 32 + "; + test("el", "ClearSpeak", expr, "γραμμή δεξιά, περικλείει 3 δεύτερα τέλος περίκλεισης")?; + return Ok(()); + +} + +#[test] +fn menclose_top_bottom() -> Result<()> { + let expr = " + 32 + "; + test("el", "ClearSpeak", expr, "γραμμή πάνω, κάτω, περικλείει 3 δεύτερα τέλος περίκλεισης")?; + return Ok(()); + +} + +#[test] +fn menclose_updiagonalstrike() -> Result<()> { + let expr = " + 32 + "; + test("el", "ClearSpeak", expr, "άνω διαγώνια, διαγραφή, περικλείει 3 δεύτερα τέλος περίκλεισης")?; + return Ok(()); + +} + +#[test] +fn menclose_downdiagonalstrike() -> Result<()> { + let expr = " + 32 + "; + test("el", "ClearSpeak", expr, "κάτω διαγώνια, διαγραφή, περικλείει 3 δεύτερα τέλος περίκλεισης")?; + return Ok(()); + +} + +#[test] +fn menclose_cross_out() -> Result<()> { + let expr = " + 32 + "; + test("el", "ClearSpeak", expr, "x, διαγραφή, περικλείει 3 δεύτερα τέλος περίκλεισης")?; + return Ok(()); + +} + +#[test] +fn menclose_vertical_horizontal_strike() -> Result<()> { + let expr = " + 32 + "; + test("el", "ClearSpeak", expr, "κάθετη, οριζόντια, διαγραφή, περικλείει 3 δεύτερα τέλος περίκλεισης")?; + return Ok(()); + +} + +#[test] +fn menclose_leftarrow() -> Result<()> { + let expr = " + 32 + "; + test("el", "ClearSpeak", expr, "αριστερό βέλος, περικλείει 3 δεύτερα τέλος περίκλεισης")?; + return Ok(()); + +} + +#[test] +fn menclose_right_up_down_arrow() -> Result<()> { + let expr = " + 32 + "; + test("el", "ClearSpeak", expr, "βέλος προς τα πάνω, βέλος προς τα κάτω, δεξί βέλος, περικλείει 3 δεύτερα τέλος περίκλεισης")?; + return Ok(()); + +} + +#[test] +fn menclose_northeastarrow() -> Result<()> { + let expr = " + 32 + "; + test("el", "ClearSpeak", expr, "βορειοανατολικό βέλος, περικλείει 3 δεύτερα τέλος περίκλεισης")?; + return Ok(()); + +} + +#[test] +fn menclose_other_single_arrows() -> Result<()> { + let expr = " + 32 + "; + test("el", "ClearSpeak", expr, "νοτιοανατολικό βέλος, νοτιοδυτικό βέλος, βορειοδυτικό βέλος, περικλείει 3 δεύτερα τέλος περίκλεισης")?; + return Ok(()); + +} + +#[test] +fn menclose_northwestsoutheastarrow() -> Result<()> { + let expr = " + 32 + "; + test("el", "ClearSpeak", expr, "αμφίδρομο διαγώνιο προς τα κάτω βέλος, περικλείει 3 δεύτερα τέλος περίκλεισης")?; + return Ok(()); + +} + +#[test] +fn menclose_other_double_arrows() -> Result<()> { + let expr = " + 32 + "; + test("el", "ClearSpeak", expr, "αμφίδρομο κάθετο βέλος, αμφίδρομο οριζόντιο βέλος, αμφίδρομο διαγώνιο βέλος, περικλείει 3 δεύτερα τέλος περίκλεισης")?; + return Ok(()); + +} + +#[test] +fn menclose_madrub() -> Result<()> { + let expr = " + 32 + "; + test("el", "ClearSpeak", expr, "σύμβολο αραβικού παραγοντικού, περικλείει 3 δεύτερα τέλος περίκλεισης")?; + return Ok(()); + +} + +#[test] +fn menclose_phasorangle() -> Result<()> { + let expr = " + 32 + "; + test("el", "ClearSpeak", expr, "γωνία φάσης, περικλείει 3 δεύτερα τέλος περίκλεισης")?; + return Ok(()); + +} + +#[test] +fn menclose_circle_phasorangle() -> Result<()> { + let expr = " + 32 + "; + test("el", "ClearSpeak", expr, "κύκλος, γωνία φάσης, περικλείει 3 δεύτερα τέλος περίκλεισης")?; + return Ok(()); + +} + +#[test] +fn menclose_longdiv() -> Result<()> { + let expr = " + 32 + "; + test("el", "ClearSpeak", expr, "σύμβολο της μακράς διαίρεσης, περικλείει 3 δεύτερα τέλος περίκλεισης")?; + return Ok(()); + +} + +#[test] +fn menclose_longdiv_default() -> Result<()> { + let expr = " + 32 + "; + test("el", "ClearSpeak", expr, "σύμβολο της μακράς διαίρεσης, περικλείει 3 δεύτερα τέλος περίκλεισης")?; + return Ok(()); + +} + +#[test] +fn menclose_longdiv_empty_string() -> Result<()> { + let expr = " + 32 + "; + test("el", "ClearSpeak", expr, "σύμβολο της μακράς διαίρεσης, περικλείει 3 δεύτερα τέλος περίκλεισης")?; + return Ok(()); + +} + +#[test] +fn menclose_longdiv_whitespace_string() -> Result<()> { + let expr = " + 32 + "; + test("el", "ClearSpeak", expr, "σύμβολο της μακράς διαίρεσης, περικλείει 3 δεύτερα τέλος περίκλεισης")?; + return Ok(()); + +} + +#[test] +fn menclose_radical() -> Result<()> { + let expr = " + 32 + "; + test("el", "ClearSpeak", expr, "τετραγωνική ρίζα, περικλείει 3 δεύτερα τέλος περίκλεισης")?; + return Ok(()); + +} + +#[test] +fn simple_speak_menclose_top_bottom() -> Result<()> { + let expr = " + 32 + "; + test("el", "SimpleSpeak", expr, "γραμμή πάνω, κάτω, περικλείει 3 δεύτερα τέλος περίκλεισης")?; + return Ok(()); + +} diff --git a/tests/Languages/el/ClearSpeak/mfrac.rs b/tests/Languages/el/ClearSpeak/mfrac.rs new file mode 100644 index 000000000..f5ddd56ce --- /dev/null +++ b/tests/Languages/el/ClearSpeak/mfrac.rs @@ -0,0 +1,314 @@ +/// Tests for fractions +/// includes simple fractions and more complex fractions +/// also tests mixed fractions (implicit and explicit) +use crate::common::*; +use anyhow::Result; + +#[test] +fn common_fraction_half() -> Result<()> { + let expr = " + 1 2 + "; + test("el", "ClearSpeak", expr, "1 δεύτερο")?; + return Ok(()); + +} + +#[test] +fn common_fraction_thirds() -> Result<()> { + let expr = " + 2 3 + "; + test("el", "ClearSpeak", expr, "2 τρίτα")?; + return Ok(()); + +} + +#[test] +fn common_fraction_tenths() -> Result<()> { + let expr = " + 17 10 + "; + test_prefs("el", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Fractions", "Auto")], expr, "17 δέκατα")?; + test_prefs("el", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Fractions", "Ordinal")], expr, "17 δέκατα")?; + return Ok(()); + +} + +#[test] +#[allow(non_snake_case)] +fn not_ClearSpeak_common_fraction_tenths() -> Result<()> { + let expr = " + 89 10 + "; + test_prefs("el", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Fractions", "Auto")], expr, "89 προς 10")?; + test_prefs("el", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Fractions", "Ordinal")], expr, "89 δέκατα")?; + return Ok(()); + +} + +#[test] +fn non_simple_fraction() -> Result<()> { + let expr = " + + + + + x+y + + x-y + + + "; + test_prefs("el", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Fractions", "Auto")], expr, "το κλάσμα με αριθμητή; x συν y; και παρονομαστή x μείον y")?; + test_prefs("el", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Fractions", "Ordinal")], expr, "το κλάσμα με αριθμητή; x συν y; και παρονομαστή x μείον y")?; + test_prefs("el", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Fractions", "Over")], expr, "x συν y προς x μείον y")?; + test_prefs("el", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Fractions", "FracOver")], expr, "το κλάσμα x συν y προς x μείον y")?; + test_prefs("el", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Fractions", "General")], expr, "το κλάσμα με αριθμητή; x συν y; και παρονομαστή x μείον y")?; + test_prefs("el", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Fractions", "EndFrac")], expr, "το κλάσμα με αριθμητή; x συν y; και παρονομαστή x μείον y; τέλος κλάσματος")?; + test_prefs("el", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Fractions", "GeneralEndFrac")], expr, "το κλάσμα με αριθμητή; x συν y; και παρονομαστή x μείον y; τέλος κλάσματος")?; + test_prefs("el", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Fractions", "OverEndFrac")], expr, "x συν y προς x μείον y, τέλος κλάσματος")?; + test_prefs("el", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Fractions", "Per")], expr, "x συν y ανά x μείον y")?; + test_prefs("el", "ClearSpeak", vec![("Verbosity", "Verbose"),("ClearSpeak_Fractions", "Auto")], expr, "το κλάσμα με αριθμητή; x συν y; και παρονομαστή x μείον y; τέλος κλάσματος")?; + return Ok(()); + +} + +#[test] +fn frac_with_units() -> Result<()> { + let expr = " + + + 62 + + mi + hr + + + "; + test("el", "ClearSpeak", expr, "62 μίλια ανά ώρα")?; + return Ok(()); + +} + + +#[test] +fn mixed_number() -> Result<()> { + let expr = " + 3 + 1 2 + "; + test("el", "ClearSpeak", expr, "3 και 1 δεύτερο")?; + return Ok(()); + +} + +#[test] +fn explicit_mixed_number() -> Result<()> { + let expr = " + 3 + + 1 8 + "; + test("el", "ClearSpeak", expr, "3 και 1 όγδοο")?; + return Ok(()); + +} + +#[test] +fn mixed_number_big() -> Result<()> { + let expr = " + 3 + 7 83 + "; + test("el", "ClearSpeak", expr, "3 και 7 προς 83")?; + return Ok(()); + +} + +#[test] +fn simple_text() -> Result<()> { + let expr = " + rise run + "; + test("el", "ClearSpeak", expr, "rise προς run")?; + return Ok(()); + +} + +#[test] +fn number_and_text() -> Result<()> { + let expr = " + + + 2miles + + 3gallons + + "; + test("el", "ClearSpeak", expr, "2 miles προς 3 gallons")?; + return Ok(()); + +} + + +#[test] +fn nested_simple_fractions() -> Result<()> { + let expr = " + + + + + 1 + 2 + + + + + 2 + 3 + + + + + "; + test_prefs("el", "ClearSpeak", vec![("ClearSpeak_Fractions", "Auto")], expr, "1 δεύτερο προς 2 τρίτα")?; + test_prefs("el", "ClearSpeak", vec![("ClearSpeak_Fractions", "Ordinal")], expr, "1 δεύτερο προς 2 τρίτα")?; + test_prefs("el", "ClearSpeak", vec![("ClearSpeak_Fractions", "Over")], expr, "1 προς 2 προς 2 προς 3")?; + test_prefs("el", "ClearSpeak", vec![("ClearSpeak_Fractions", "FracOver")], expr, + "το κλάσμα το κλάσμα 1 προς 2 προς το κλάσμα 2 προς 3")?; + test_prefs("el", "ClearSpeak", vec![("ClearSpeak_Fractions", "General")], expr, + "το κλάσμα με αριθμητή το κλάσμα με αριθμητή 1; και παρονομαστή 2; και παρονομαστή το κλάσμα με αριθμητή 2; και παρονομαστή 3")?; + test_prefs("el", "ClearSpeak", vec![("ClearSpeak_Fractions", "EndFrac")], expr, "1 δεύτερο προς 2 τρίτα")?; + test_prefs("el", "ClearSpeak", vec![("ClearSpeak_Fractions", "GeneralEndFrac")], expr, + "το κλάσμα με αριθμητή το κλάσμα με αριθμητή 1; και παρονομαστή 2; τέλος κλάσματος; και παρονομαστή το κλάσμα με αριθμητή 2; και παρονομαστή 3; τέλος κλάσματος; τέλος κλάσματος")?; + test_prefs("el", "ClearSpeak", vec![("ClearSpeak_Fractions", "OverEndFrac")], expr, + "1 προς 2, τέλος κλάσματος, προς 2 προς 3, τέλος κλάσματος; τέλος κλάσματος")?; + return Ok(()); + +} + + +#[test] +fn semi_nested_fraction() -> Result<()> { + let expr = " + + + + + 2 + 3 + + x + + 6 + + + "; + test("el", "ClearSpeak", expr, "2 τρίτα x προς 6")?; + return Ok(()); + +} + +#[test] +fn general_nested_fraction() -> Result<()> { + let expr = " + + + + + + 10 + n + + + + + 2 + n + + + + + + "; + test("el", "ClearSpeak", expr, "το κλάσμα με αριθμητή; 10 προς n; και παρονομαστή 2 προς n")?; + return Ok(()); + +} + +#[test] +fn complex_nested_fraction() -> Result<()> { + let expr = " + + + + + + n + 10 + n + + + + + 2 + n + + + + + + "; + test("el", "ClearSpeak", expr, "το κλάσμα με αριθμητή; το κλάσμα με αριθμητή; n συν 10; και παρονομαστή n; και παρονομαστή 2 προς n")?; + return Ok(()); + +} + +#[test] +fn simple_function() -> Result<()> { + let expr = "f(x)2"; + test_prefs("el", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Fractions", "Auto")], expr, "f του x προς 2")?; + test_prefs("el", "ClearSpeak", vec![("Verbosity", "Verbose"), ("ClearSpeak_Fractions", "Auto")], expr, "f του x προς 2, τέλος κλάσματος")?; + return Ok(()); + +} + +#[test] +fn function_over_function() -> Result<()> { + let expr = " + f(x) + g(x) + "; + test_prefs("el", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Fractions", "Auto")], expr, "f του x προς g του x")?; + test_prefs("el", "ClearSpeak", vec![("Verbosity", "Verbose"), ("ClearSpeak_Fractions", "Auto")], expr, "f του x προς g του x, τέλος κλάσματος")?; + return Ok(()); + +} + +#[test] +fn non_simple_function_over_function() -> Result<()> { + let expr = " + f(x+1) + g(x) + "; + test_prefs("el", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Fractions", "Auto")], expr, + "το κλάσμα με αριθμητή; f του; ανοίγει παρένθεση, x συν 1, κλείνει παρένθεση; και παρονομαστή g του x")?; + test_prefs("el", "ClearSpeak", vec![("Verbosity", "Verbose"), ("ClearSpeak_Fractions", "Auto")], expr, + "το κλάσμα με αριθμητή; f του; ανοίγει παρένθεση, x συν 1, κλείνει παρένθεση; και παρονομαστή g του x; τέλος κλάσματος")?; + return Ok(()); + +} + +#[test] +fn binomial() -> Result<()> { + let expr = " + 2 + ( + 7 3 + ) + "; + test("el", "ClearSpeak", expr, "2 επί 7 ανά 3")?; + return Ok(()); + //theodora. fails because of the implicit "times" rule in Clearspeak which is left blank due to many false positives + +} diff --git a/tests/Languages/el/ClearSpeak/mroot.rs b/tests/Languages/el/ClearSpeak/mroot.rs new file mode 100644 index 000000000..ac89a39b7 --- /dev/null +++ b/tests/Languages/el/ClearSpeak/mroot.rs @@ -0,0 +1,171 @@ +use crate::common::*; +use anyhow::Result; + +#[test] +fn msqrt_simple() -> Result<()> { + let expr = " + x + "; + test("el", "ClearSpeak", expr, "η τετραγωνική ρίζα του x")?; + return Ok(()); + +} + +#[test] +fn msqrt_simple_end_root() -> Result<()> { + let expr = " + x + "; + test_ClearSpeak("el", "ClearSpeak_Roots", "RootEnd", expr, "η τετραγωνική ρίζα του x, τέλος ρίζας")?; + return Ok(()); + +} + +#[test] +fn msqrt_simple_positive() -> Result<()> { + let expr = " + x + "; + test_ClearSpeak("el", "ClearSpeak_Roots", "PosNegSqRoot", expr, "η συν τετραγωνική ρίζα του x")?; + return Ok(()); + +} + +#[test] +fn msqrt_simple_pos_end_root() -> Result<()> { + let expr = " + x + "; + test_ClearSpeak("el", "ClearSpeak_Roots", "PosNegSqRootEnd", expr, "η συν τετραγωνική ρίζα του x, τέλος ρίζας")?; + return Ok(()); + +} + +#[test] +fn msqrt_simple_pos_end_with_neg_root() -> Result<()> { + let expr = " + - x + - x 3 + "; + test_ClearSpeak("el", "ClearSpeak_Roots", "PosNegSqRootEnd", expr, + "η μείον τετραγωνική ρίζα του x, τέλος ρίζας; μείον, η συν κυβική ρίζα του x, τέλος ρίζας")?; + return Ok(()); + +} + +#[test] +fn mroot_simple_pos_end_with_neg_root() -> Result<()> { + let expr = " + - x 3 + - x + + "; + test_ClearSpeak("el", "ClearSpeak_Roots", "PosNegSqRoot", expr, + "η μείον κυβική ρίζα του x; μείον, η συν τετραγωνική ρίζα του x")?; + return Ok(()); + +} + +#[test] +fn neg_without_root() -> Result<()> { + let expr = " + - x - y + "; + test("el", "ClearSpeak", expr, "μείον x μείον y")?; + return Ok(()); + +} + +#[test] +fn msqrt() -> Result<()> { + let expr = " + + x + y + + "; + test("el", "ClearSpeak", expr, "η τετραγωνική ρίζα του x συν y")?; + return Ok(()); + +} + +#[test] +fn mroot_as_square_root() -> Result<()> { + let expr = " + x 2 + "; + test("el", "ClearSpeak", expr, "η τετραγωνική ρίζα του x")?; + return Ok(()); + +} + +#[test] +fn cube_root() -> Result<()> { + let expr = " + x 3 + "; + test("el", "ClearSpeak", expr, "η κυβική ρίζα του x")?; + return Ok(()); + +} + +#[test] +fn ordinal_root() -> Result<()> { + let expr = " + x 9 + "; + test("el", "ClearSpeak", expr, "η ένατη ρίζα του x")?; + return Ok(()); + +} + +#[test] +fn simple_mi_root() -> Result<()> { + let expr = " + x n + "; + test("el", "ClearSpeak", expr, "η n οστή ρίζα του x")?; + return Ok(()); + +} + +#[test] +fn mroot_simple_pos_end_root() -> Result<()> { + let expr = " + x t + "; + test_ClearSpeak("el", "ClearSpeak_Roots", "PosNegSqRootEnd", expr, "η συν t οστή ρίζα του x, τέλος ρίζας")?; + return Ok(()); + +} + +#[test] +fn mroot_simple_end_root() -> Result<()> { + let expr = " + x + y + 21 + "; + test_ClearSpeak("el", "ClearSpeak_Roots", "RootEnd", expr, "η εικοστή πρώτη ρίζα του x συν y, τέλος ρίζας")?; + return Ok(()); +// theodora. Now ok but ordinal numbers over 100 will have issues. The issue is likely in the src\xpath_functions.rs file, hundreds_to_words +} + +#[test] +fn simple_fraction_power() -> Result<()> { + let expr = " + + x + 13 + + "; + test("el", "ClearSpeak", expr, "η 1 τρίτο ρίζα του x")?; + return Ok(()); + +} + +#[test] +fn no_double_the_532() -> Result<()> { + let expr = "423"; + test("el", "ClearSpeak", expr, "η κυβική ρίζα της τετραγωνικής ρίζας του 42")?; + return Ok(()); + //theodora. fails with current rules. Should be fine when adding genitive +} diff --git a/tests/Languages/el/ClearSpeak/msup.rs b/tests/Languages/el/ClearSpeak/msup.rs new file mode 100644 index 000000000..9526fd36b --- /dev/null +++ b/tests/Languages/el/ClearSpeak/msup.rs @@ -0,0 +1,383 @@ +/// Tests for superscripts +/// simple superscripts +/// complex/nested superscripts +use crate::common::*; +use anyhow::Result; + +#[test] +fn squared() -> Result<()> { + let expr = " + x 2 + "; + test_prefs("el", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "Auto")], expr, "x στο τετράγωνο")?; + test_prefs("el", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "Ordinal")], expr, "x στην δεύτερη")?; + test_prefs("el", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "OrdinalPower")], expr, "x στην δεύτερη δύναμη")?; + test_prefs("el", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "AfterPower")], expr, "x υψωμένο στη δύναμη 2")?; + + return Ok(()); + +} + +#[test] +fn cubed() -> Result<()> { + let expr = " + x 3 + "; + test_prefs("el", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "Auto")], expr, "x στον κύβο")?; + test_prefs("el", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "Ordinal")], expr, "x στην τρίτη")?; + test_prefs("el", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "OrdinalPower")], expr, "x στην τρίτη δύναμη")?; + test_prefs("el", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "AfterPower")], expr, "x υψωμένο στη δύναμη 3")?; + return Ok(()); + +} + +#[test] +fn ordinal_power() -> Result<()> { + let expr = " + 3 5 + "; + test_prefs("el", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "Auto")], expr, "3 στην πέμπτη δύναμη")?; + test_prefs("el", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "Ordinal")], expr, "3 στην πέμπτη")?; + test_prefs("el", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "OrdinalPower")], expr, "3 στην πέμπτη δύναμη")?; + test_prefs("el", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "AfterPower")], expr, "3 υψωμένο στη δύναμη 5")?; + return Ok(()); + +} + + +#[test] +fn zero_power() -> Result<()> { + let expr = " + 3 0 + "; + test_prefs("el", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "Auto")], expr, "3 στην 0 δύναμη")?; + test_prefs("el", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "Ordinal")], expr, "3 στην 0")?; + test_prefs("el", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "OrdinalPower")], expr, "3 στην 0 δύναμη")?; + test_prefs("el", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "AfterPower")], expr, "3 υψωμένο στη δύναμη 0")?; + return Ok(()); + +} + +#[test] +fn simple_mi_power() -> Result<()> { + let expr = " + 4 x + "; + test_prefs("el", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "Auto")], expr, "4 στην x οστή δύναμη")?; + test_prefs("el", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "Ordinal")], expr, "4 στην x οστή")?; + test_prefs("el", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "OrdinalPower")], expr, "4 στην x οστή δύναμη")?; + test_prefs("el", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "AfterPower")], expr, "4 υψωμένο στη δύναμη x")?; + return Ok(()); + +} + +#[test] +fn decimal_power() -> Result<()> { + let expr = " + 3 5.0 + "; + test_prefs("el", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "Auto")], expr, "3 υψωμένο στην 5.0 τέλος δύναμης")?; + test_prefs("el", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "Ordinal")], expr, "3 υψωμένο στην 5.0 τέλος δύναμης")?; + test_prefs("el", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "OrdinalPower")], expr, "3 υψωμένο στην 5.0 τέλος δύναμης")?; + test_prefs("el", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "AfterPower")], expr, "3 υψωμένο στην 5.0")?; + return Ok(()); +//theodora. fails because 5.0 is somehow converted to 50, probably due to handling decimals +// The issue is at src/prefs (set_separator, decimal_separator) +} + +#[test] +fn non_simple_power() -> Result<()> { + let expr = " + 3 y+2 + "; + test_prefs("el", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "Auto")], expr, "3 υψωμένο στην y συν 2 τέλος δύναμης")?; + test_prefs("el", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "Ordinal")], expr, "3 υψωμένο στην y συν 2 τέλος δύναμης")?; + test_prefs("el", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "OrdinalPower")], expr, "3 υψωμένο στην y συν 2 τέλος δύναμης")?; + test_prefs("el", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "AfterPower")], expr, "3 υψωμένο στη δύναμη y συν 2")?; + return Ok(()); + +} + +#[test] +fn negative_power() -> Result<()> { + let expr = " + 3 - 2 + "; + test_prefs("el", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "Auto")], expr, "3 στην μείον 2 δύναμη")?; + test_prefs("el", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "Ordinal")], expr, "3 στην μείον 2")?; + test_prefs("el", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "OrdinalPower")], expr, "3 στην μείον 2 δύναμη")?; + test_prefs("el", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "AfterPower")], expr, "3 υψωμένο στη δύναμη μείον 2")?; + return Ok(()); + +} + +#[test] +fn simple_fraction_power() -> Result<()> { + let expr = " + + x + 13 + + "; + test("el", "ClearSpeak", expr, "x υψωμένο στην 1 τρίτο τέλος δύναμης")?; + return Ok(()); + +} + +#[test] +fn nested_squared_power_with_coef() -> Result<()> { + let expr = " + + + 3 + + 2 + + x + 2 + + + + + "; + test_prefs("el", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "Auto")], expr, "3 υψωμένο στην 2 x στο τετράγωνο δύναμη")?; + test_prefs("el", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "Ordinal")], expr, "3 υψωμένο στον εκθέτη, 2 x στην δεύτερη, τέλος εκθέτη")?; + test_prefs("el", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "OrdinalPower")], expr, "3 υψωμένο στον εκθέτη, 2, x στην δεύτερη δύναμη, τέλος εκθέτη")?; + test_prefs("el", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "AfterPower")], expr, "3 υψωμένο στον εκθέτη, 2, x υψωμένο στη δύναμη 2; τέλος εκθέτη")?; + + return Ok(()); + +} + +#[test] +fn nested_squared_power_with_neg_coef() -> Result<()> { + let expr = " + + + 3 + + - + 2 + + x + 2 + + + + + "; + test("el", "ClearSpeak", expr, "3 υψωμένο στην μείον 2 x στο τετράγωνο δύναμη")?; + return Ok(()); + +} + + +#[test] +fn nested_cubed_power() -> Result<()> { + let expr = " + + y + + 45 + 3 + + + "; + test("el", "ClearSpeak", expr, "y υψωμένο στην 4 πέμπτα στον κύβο δύναμη")?; + return Ok(()); + +} + +#[test] +fn nested_cubed_power_with_neg_base() -> Result<()> { + let expr = " + + y + + - + + 45 + 3 + + + + "; + test("el", "ClearSpeak", expr, "y υψωμένο στην μείον 4 πέμπτα στον κύβο τέλος δύναμης")?; + return Ok(()); + +} + +#[test] +fn nested_number_times_squared() -> Result<()> { + let expr = " + + + e + + + 1 + 2 + + + x + 2 + + + + + "; + test_prefs("el", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "Auto")], expr, "e υψωμένο στην 1 δεύτερο x στο τετράγωνο δύναμη")?; + return Ok(()); + +} + +#[test] +fn nested_negative_number_times_squared() -> Result<()> { + let expr = " + + + e + + + 1 + 2 + + + x + 2 + + + + + "; + test_prefs("el", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "Auto")], expr, "e υψωμένο στην μείον 1 δεύτερο, x στο τετράγωνο δύναμη")?; + test_prefs("el", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "Ordinal")], expr, "e υψωμένο στον εκθέτη, μείον 1 δεύτερο, x στην δεύτερη, τέλος εκθέτη")?; + test_prefs("el", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "OrdinalPower")], expr, "e υψωμένο στον εκθέτη, μείον 1 δεύτερο; x στην δεύτερη δύναμη, τέλος εκθέτη")?; + test_prefs("el", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "AfterPower")], expr, "e υψωμένο στον εκθέτη, μείον 1 δεύτερο; x υψωμένο στη δύναμη 2; τέλος εκθέτη")?; + return Ok(()); + +} + +#[test] +fn nested_expr_to_tenth() -> Result<()> { + let expr = " + + + 3 + + + 3 + + 10 + + + + + "; + test_prefs("el", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "Auto")], expr, "3 υψωμένο στον εκθέτη, 3 στην δέκατη δύναμη, τέλος εκθέτη")?; + test_prefs("el", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "Ordinal")], expr, "3 υψωμένο στον εκθέτη, 3 στην δέκατη, τέλος εκθέτη")?; + test_prefs("el", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "OrdinalPower")], expr, "3 υψωμένο στον εκθέτη, 3 στην δέκατη δύναμη, τέλος εκθέτη")?; + test_prefs("el", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "AfterPower")], expr, "3 υψωμένο στον εκθέτη, 3 υψωμένο στη δύναμη 10; τέλος εκθέτη")?; + + return Ok(()); + +} + +#[test] +fn nested_non_simple_squared_exp() -> Result<()> { + let expr = " + + + 3 + + + + ( + + x+1 + ) + 2 + + + + + "; + test_prefs("el", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "Auto")], expr, "3 υψωμένο στον εκθέτη, ανοίγει παρένθεση, x συν 1, κλείνει παρένθεση στο τετράγωνο, τέλος εκθέτη")?; + test_prefs("el", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "Ordinal")], expr, "3 υψωμένο στον εκθέτη, ανοίγει παρένθεση, x συν 1, κλείνει παρένθεση στην δεύτερη, τέλος εκθέτη")?; + test_prefs("el", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "OrdinalPower")], expr, "3 υψωμένο στον εκθέτη, ανοίγει παρένθεση, x συν 1, κλείνει παρένθεση στην δεύτερη δύναμη, τέλος εκθέτη")?; + test_prefs("el", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "AfterPower")], expr, "3 υψωμένο στον εκθέτη, ανοίγει παρένθεση, x συν 1, κλείνει παρένθεση υψωμένο στη δύναμη 2; τέλος εκθέτη")?; + return Ok(()); + +} + +#[test] +fn nested_default_power() -> Result<()> { + let expr = " + + t + + 45 + n + + +"; + test("el", "ClearSpeak", expr, "t υψωμένο στον εκθέτη, 4 πέμπτα στην n οστή δύναμη, τέλος εκθέτη")?; + return Ok(()); + +} + +#[test] +fn nested_complex_power() -> Result<()> { + let expr = " + + + e + + + 1 + 2 + + + + ( + + + + xμ + σ + + + ) + 2 + + + + + "; + test_prefs("el", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "Auto")], expr, + "e υψωμένο στον εκθέτη, μείον 1 δεύτερο; ανοίγει παρένθεση; το κλάσμα με αριθμητή; x μείον μί; και παρονομαστή σίγμα; κλείνει παρένθεση στο τετράγωνο, τέλος εκθέτη")?; + test_prefs("el", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "Ordinal")], expr, + "e υψωμένο στον εκθέτη, μείον 1 δεύτερο; ανοίγει παρένθεση; το κλάσμα με αριθμητή; x μείον μί; και παρονομαστή σίγμα; κλείνει παρένθεση στην δεύτερη, τέλος εκθέτη")?; + test_prefs("el", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "OrdinalPower")], expr, + "e υψωμένο στον εκθέτη, μείον 1 δεύτερο; ανοίγει παρένθεση; το κλάσμα με αριθμητή; x μείον μί; και παρονομαστή σίγμα; κλείνει παρένθεση στην δεύτερη δύναμη, τέλος εκθέτη")?; + test_prefs("el", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "AfterPower")], expr, + "e υψωμένο στον εκθέτη, μείον 1 δεύτερο; ανοίγει παρένθεση; το κλάσμα με αριθμητή; x μείον μί; και παρονομαστή σίγμα; κλείνει παρένθεση υψωμένο στη δύναμη 2; τέλος εκθέτη")?; + return Ok(()); + +} + +#[test] +fn default_power() -> Result<()> { + let expr = " + + t + + b+1 + 3 + + + "; + test("el", "ClearSpeak", expr, "t υψωμένο στην το κλάσμα με αριθμητή; b συν 1; και παρονομαστή 3; τέλος δύναμης")?; + return Ok(()); + +} diff --git a/tests/Languages/el/ClearSpeak/multiline.rs b/tests/Languages/el/ClearSpeak/multiline.rs new file mode 100644 index 000000000..15678f4c0 --- /dev/null +++ b/tests/Languages/el/ClearSpeak/multiline.rs @@ -0,0 +1,192 @@ +use crate::common::*; +use anyhow::Result; + + +#[test] +fn case_1() -> Result<()> { + let expr = " + f + + ( + x + ) + + = + + { + + -1ifx<0 + 0ifx=0 + 1ifx>0 + + + + "; + test_ClearSpeak("el", "ClearSpeak_MultiLineLabel", "Auto", expr, + "f του x, ισούται με; 3 περιπτώσεις; \ + περίπτωση 1; μείον 1 if, x είναι μικρότερο από 0; \ + περίπτωση 2; 0 if x ισούται με 0; \ + περίπτωση 3; 1 if, x είναι μεγαλύτερο από 0" + )?; + return Ok(()); +} + +#[test] +fn equation_auto() -> Result<()> { + let expr = " + + + x+y = 7 + 2x+3y = 17 + + + "; + test_ClearSpeak("el", "ClearSpeak_MultiLineLabel", "Auto", expr, + "2 σειρές; \ + σειρά 1; x συν y, ισούται με 7; \ + σειρά 2; 2 x συν 3 y; ισούται με 17")?; + return Ok(()); +} + + +#[test] +fn equation_plus_at_start() -> Result<()> { + let expr = " + + + x+y = 7 + 2x+3y = 17 + + + "; + test_ClearSpeak("el", "ClearSpeak_MultiLineLabel", "Auto", expr, "2 σειρές; \ + σειρά 1; x συν y, ισούται με 7; \ + σειρά 2; 2 x, συν 3 y, ισούται με 17")?; + return Ok(()); +} + +#[test] +fn equation_case() -> Result<()> { + let expr = " + + + x+y = 7 + 2x+3y = 17 + + + "; + test_ClearSpeak("el", "ClearSpeak_MultiLineLabel", "Case", expr, + "2 περιπτώσεις; περίπτωση 1; x συν y, ισούται με 7; περίπτωση 2; 2 x συν 3 y; ισούται με 17")?; + return Ok(()); +} + +#[test] +fn equation_constraint() -> Result<()> { + let expr = " + + + x+y = 7 + 2x+3y = 17 + + + "; + test_ClearSpeak("el", "ClearSpeak_MultiLineLabel", "Constraint", expr, "2 περιορισμοί; \ + περιορισμός 1; x συν y, ισούται με 7; \ + περιορισμός 2; 2 x συν 3 y; ισούται με 17")?; + return Ok(()); +} + +#[test] +fn equation_equation() -> Result<()> { + let expr = " + + + x+y = 7 + 2x+3y = 17 + + + "; + test_ClearSpeak("el", "ClearSpeak_MultiLineLabel", "Equation", expr, "2 εξισώσεις; \ + εξίσωση 1; x συν y, ισούται με 7; \ + εξίσωση 2; 2 x συν 3 y; ισούται με 17")?; + return Ok(()); +} + +#[test] +fn equation_line() -> Result<()> { + let expr = " + + + x+y = 7 + 2x+3y = 17 + + + "; + test_ClearSpeak("el", "ClearSpeak_MultiLineLabel", "Line", expr, "2 σειρές; \ + σειρά 1; x συν y, ισούται με 7; \ + σειρά 2; 2 x συν 3 y; ισούται με 17")?; + return Ok(()); +} + +#[test] +fn equation_none() -> Result<()> { + let expr = " + + + x+y = 7 + 2x+3y = 17 + + + "; + test_ClearSpeak("el", "ClearSpeak_MultiLineLabel", "None", expr, + "2 σειρές; \ + x συν y, ισούται με 7; \ + 2 x συν 3 y; ισούται με 17")?; + return Ok(()); +} + +#[test] +fn equation_row() -> Result<()> { + let expr = " + + + x+y = 7 + 2x+3y = 17 + + + "; + test_ClearSpeak("el", "ClearSpeak_MultiLineLabel", "Row", expr, "2 γραμμές; \ + γραμμή 1; x συν y, ισούται με 7; \ + γραμμή 2; 2 x συν 3 y; ισούται με 17")?; + return Ok(()); +} + +#[test] +fn equation_step() -> Result<()> { + let expr = " + + + x+y = 7 + 2x+3y = 17 + + + "; + test_ClearSpeak("el", "ClearSpeak_MultiLineLabel", "Step", expr, "2 βήματα; \ + βήμα 1; x συν y, ισούται με 7; \ + βήμα 2; 2 x συν 3 y; ισούται με 17")?; + return Ok(()); +} + +#[test] +fn continued_row() -> Result<()> { + let expr = " + + x=y + +1 + y=1 + +"; +test("el", "SimpleSpeak", expr, + "2 εξισώσεις; εξίσωση 1; x ισούται με y άδειο άδειο συν 1; εξίσωση 2; y ισούται με 1")?; + return Ok(()); +} diff --git a/tests/Languages/el/ClearSpeak/sets.rs b/tests/Languages/el/ClearSpeak/sets.rs new file mode 100644 index 000000000..001f65db4 --- /dev/null +++ b/tests/Languages/el/ClearSpeak/sets.rs @@ -0,0 +1,531 @@ +use crate::common::*; +use anyhow::Result; + +#[test] +fn complex() -> Result<()> { + let expr = " + + "; + test("el", "ClearSpeak", expr, "οι μιγαδικοί αριθμοί")?; + return Ok(()); + +} + +#[test] +fn natural() -> Result<()> { + let expr = " + + "; + test("el", "ClearSpeak", expr, "οι φυσικοί αριθμοί")?; + return Ok(()); + +} + +#[test] +fn rationals() -> Result<()> { + let expr = " + + "; + test("el", "ClearSpeak", expr, "οι ρητοί αριθμοί")?; + return Ok(()); + +} + +#[test] +fn reals() -> Result<()> { + let expr = " + + "; + test("el", "ClearSpeak", expr, "οι πραγματικοί αριθμοί")?; + return Ok(()); + +} + +#[test] +fn integers() -> Result<()> { + let expr = " + + "; + test("el", "ClearSpeak", expr, "οι ακέραιοι αριθμοί")?; + return Ok(()); + +} + + + +#[test] +fn msup_complex() -> Result<()> { + let expr = " + + + 2 + + "; + test("el", "ClearSpeak", expr, "c 2")?; + return Ok(()); + +} + +#[test] +fn msup_natural() -> Result<()> { + let expr = " + + + 2 + + "; + test("el", "ClearSpeak", expr, "n 2")?; + return Ok(()); + +} + +#[test] +fn msup_rationals() -> Result<()> { + let expr = " + + + 2 + + "; + test("el", "ClearSpeak", expr, "q 2")?; + return Ok(()); + +} + +#[test] +fn msup_reals() -> Result<()> { + let expr = " + + + 3 + + "; + test("el", "ClearSpeak", expr, "r 3")?; + return Ok(()); + +} + +#[test] +fn msup_integers() -> Result<()> { + let expr = " + + + 4 + + "; + test("el", "ClearSpeak", expr, "z 4")?; + return Ok(()); + +} + +#[test] +fn msup_positive_integers() -> Result<()> { + let expr = " + + + + + + "; + test("el", "ClearSpeak", expr, "οι θετικοί ακέραιοι αριθμοί")?; + return Ok(()); + +} + +#[test] +fn msup_negative_integers() -> Result<()> { + let expr = " + + + - + + "; + test("el", "ClearSpeak", expr, "οι αρνητικοί ακέραιοι αριθμοί")?; + return Ok(()); + +} + +#[test] +fn msup_positive_rationals() -> Result<()> { + let expr = " + + + + + + "; + test("el", "ClearSpeak", expr, "οι θετικοί ρητοί αριθμοί")?; + return Ok(()); + +} + +#[test] +fn msup_negative_rationals() -> Result<()> { + let expr = " + + + - + + "; + test("el", "ClearSpeak", expr, "οι αρνητικοί ρητοί αριθμοί")?; + return Ok(()); + +} + +#[test] +fn empty_set() -> Result<()> { + let expr = " + { } + "; + test("el", "ClearSpeak", expr, "το κενό σύνολο")?; + return Ok(()); + +} + +#[test] +fn single_element_set() -> Result<()> { + let expr = " + { 12} + "; + test("el", "ClearSpeak", expr, "το σύνολο 12")?; + return Ok(()); + +} + +#[test] +fn multiple_element_set() -> Result<()> { + let expr = " + { 5 , 10 , 15 } + "; + test("el", "ClearSpeak", expr, "το σύνολο 5 κόμμα, 10 κόμμα, 15")?; + return Ok(()); + +} + +#[test] +fn set_with_colon() -> Result<()> { + let expr = " + { x:x>2 } + "; + test("el", "ClearSpeak", expr, "το σύνολο όλων των x τέτοια ώστε x είναι μεγαλύτερο από 2")?; + return Ok(()); + +} + +#[test] +fn set_with_bar() -> Result<()> { + let expr = " + { x|x>2 } + "; + test("el", "ClearSpeak", expr, "το σύνολο όλων των x τέτοια ώστε x είναι μεγαλύτερο από 2")?; + return Ok(()); + +} + +#[test] +fn element_alone() -> Result<()> { + let expr = " + 3+2i + "; + test("el", "ClearSpeak", expr, "3 συν 2 i, δεν ανήκει, στους πραγματικούς αριθμούς")?; + return Ok(()); + +} + +#[test] +fn element_under_sum() -> Result<()> { + let expr = " + + + i + + + 1 + i 2 + + "; + test("el", "ClearSpeak", expr, + "άθροισμα για i ανήκει, στους ακέραιους αριθμούς του; το κλάσμα με αριθμητή 1; και παρονομαστή i στο τετράγωνο")?; + return Ok(()); + +} + +#[test] +fn complicated_set_with_colon() -> Result<()> { + let expr = " + { + x + + + : + 2 + < + x + < + 7 + } + "; + test("el", "ClearSpeak", expr, "το σύνολο όλων των x ανήκει, στους ακέραιους αριθμούς τέτοια ώστε 2 είναι μικρότερο από x είναι μικρότερο από 7")?; + return Ok(()); + +} + +#[test] +fn complicated_set_with_mtext() -> Result<()> { + // as of 8/5/21, parsing of "|" is problematic in the example, so are needed for this test + let expr = " + { + x + | + x is an even number + } + "; + test("el", "ClearSpeak", expr, + "το σύνολο όλων των x ανήκει, στους φυσικούς αριθμούς τέτοια ώστε x is an even number")?; + return Ok(()); + +} + + +#[test] +fn set_with_bar_member() -> Result<()> { + let expr = " + { + x + + + : + x + > + 5 + } + "; + test_ClearSpeak("el", "ClearSpeak_SetMemberSymbol", "Member", + expr, "το σύνολο όλων των x ανήκει, στους ακέραιους αριθμούς τέτοια ώστε x είναι μεγαλύτερο από 5")?; + return Ok(()); + +} + +#[test] +fn element_alone_member() -> Result<()> { + let expr = " + 3+2i + "; + test_ClearSpeak("el", "ClearSpeak_SetMemberSymbol", "Member", + expr, "3 συν 2 i, δεν ανήκει, στους πραγματικούς αριθμούς")?; + return Ok(()); + +} + +#[test] +fn element_under_sum_member() -> Result<()> { + let expr = " + + + i + + + 1 + i 2 + + "; + test_ClearSpeak("el", "ClearSpeak_SetMemberSymbol", "Member", + expr, "άθροισμα για i ανήκει, στους ακέραιους αριθμούς του; το κλάσμα με αριθμητή 1; και παρονομαστή i στο τετράγωνο")?; + return Ok(()); + +} + + +#[test] +fn set_with_bar_element() -> Result<()> { + let expr = " + { + x + + + : + x + > + 5 + } + "; + test_ClearSpeak("el", "ClearSpeak_SetMemberSymbol", "Element", + expr, "το σύνολο όλων των x ανήκει, στους ακέραιους αριθμούς τέτοια ώστε x είναι μεγαλύτερο από 5")?; + return Ok(()); + +} + +#[test] +fn element_alone_element() -> Result<()> { + let expr = " + 3+2i + "; + test_ClearSpeak("el", "ClearSpeak_SetMemberSymbol", "Element", + expr, "3 συν 2 i, δεν ανήκει, στους πραγματικούς αριθμούς")?; + return Ok(()); + +} + +#[test] +fn element_under_sum_element() -> Result<()> { + let expr = " + + + i + + + 1 + i 2 + + "; + test_ClearSpeak("el", "ClearSpeak_SetMemberSymbol", "Element", + expr, "άθροισμα για i ανήκει, στους ακέραιους αριθμούς του; το κλάσμα με αριθμητή 1; και παρονομαστή i στο τετράγωνο")?; + return Ok(()); + +} + +#[test] +fn set_with_bar_in() -> Result<()> { + let expr = " + { + x + + + : + x + > + 5 + } + "; + test_ClearSpeak("el", "ClearSpeak_SetMemberSymbol", "In", + expr, "το σύνολο όλων των x ανήκει, στους ακέραιους αριθμούς τέτοια ώστε x είναι μεγαλύτερο από 5")?; + return Ok(()); + +} + +#[test] +fn element_alone_in() -> Result<()> { + let expr = " + 3+2i + "; + test_ClearSpeak("el", "ClearSpeak_SetMemberSymbol", "In", + expr, "3 συν 2 i, δεν ανήκει, στους πραγματικούς αριθμούς")?; + return Ok(()); + +} + +#[test] +fn element_under_sum_in() -> Result<()> { + let expr = " + + + i + + + 1 + i 2 + + "; + test_ClearSpeak("el", "ClearSpeak_SetMemberSymbol", "In", + expr, "άθροισμα για i ανήκει, στους ακέραιους αριθμούς του; το κλάσμα με αριθμητή 1; και παρονομαστή i στο τετράγωνο")?; + return Ok(()); + +} + +#[test] +fn set_with_bar_belongs() -> Result<()> { + let expr = " + { + x + + + : + x + > + 5 + } + "; + test_ClearSpeak("el", "ClearSpeak_SetMemberSymbol", "Belongs", + expr, "το σύνολο όλων των x ανήκει, στους ακέραιους αριθμούς τέτοια ώστε x είναι μεγαλύτερο από 5")?; + return Ok(()); + +} + +#[test] +fn element_alone_belongs() -> Result<()> { + let expr = " + 3+2i + "; + test_ClearSpeak("el", "ClearSpeak_SetMemberSymbol", "Belongs", + expr, "3 συν 2 i, δεν ανήκει, στους πραγματικούς αριθμούς")?; + return Ok(()); + +} + +#[test] +fn element_under_sum_belongs() -> Result<()> { + let expr = " + + + i + + + 1 + i 2 + + "; + test_ClearSpeak("el", "ClearSpeak_SetMemberSymbol", "Belongs", + expr, "άθροισμα για i ανήκει, στους ακέραιους αριθμούς του; το κλάσμα με αριθμητή 1; και παρονομαστή i στο τετράγωνο")?; + return Ok(()); + +} + + +#[test] +fn set_member_woall() -> Result<()> { + let expr = " + { + x + + + : + x + > + 5 + } + "; + test_ClearSpeak_prefs("el", vec![("ClearSpeak_SetMemberSymbol", "Member"), ("ClearSpeak_Sets", "woAll")], + expr, "το σύνολο x ανήκει, στους ακέραιους αριθμούς τέτοια ώστε x είναι μεγαλύτερο από 5")?; + return Ok(()); + +} + +#[test] +fn multiple_element_set_woall() -> Result<()> { + let expr = " + { 5 , 10 , 15 } + "; + test_ClearSpeak("el", "ClearSpeak_Sets", "woAll", expr, "το σύνολο 5 κόμμα, 10 κόμμα, 15")?; + return Ok(()); + +} + +#[test] +fn multiple_element_set_silent_bracket() -> Result<()> { + let expr = " + { 5 , 10 , 15 } + "; + test_ClearSpeak("el", "ClearSpeak_Sets", "SilentBracket", expr, "5 κόμμα, 10 κόμμα, 15")?; + return Ok(()); + + } + +#[test] +fn silent_bracket() -> Result<()> { + let expr = " + {x|x>2} + "; + test_ClearSpeak("el", "ClearSpeak_Sets", "SilentBracket", expr, + "το σύνολο όλων των x τέτοια ώστε x είναι μεγαλύτερο από 2")?; + return Ok(()); + + } + diff --git a/tests/Languages/el/ClearSpeak/symbols_and_adornments.rs b/tests/Languages/el/ClearSpeak/symbols_and_adornments.rs new file mode 100644 index 000000000..cccabb3f4 --- /dev/null +++ b/tests/Languages/el/ClearSpeak/symbols_and_adornments.rs @@ -0,0 +1,378 @@ +use crate::common::*; +use anyhow::Result; + +#[test] +fn multiplication() -> Result<()> { + let expr = " + 2×3 + "; + test("el", "ClearSpeak", expr, "2 επί 3")?; + return Ok(()); + +} + +#[test] +fn multiplication_by() -> Result<()> { + let expr = " + 2×3 + "; + test_ClearSpeak("el", "ClearSpeak_MultSymbolX", "By", expr, "2 επί 3")?; + return Ok(()); + +} + +#[test] +fn multiplication_cross() -> Result<()> { + let expr = " + u×v + "; + test_ClearSpeak("el", "ClearSpeak_MultSymbolX", "Cross", expr, "u πολλαπλασιασμός v")?; + return Ok(()); + +} + +#[test] +fn ellipses_auto_start() -> Result<()> { + let expr = " + , + -2,-1,0 + "; + test("el", "ClearSpeak", expr, "αποσιωπητικά, κόμμα, μείον 2 κόμμα, μείον 1 κόμμα, 0")?; + return Ok(()); + +} + +#[test] +fn ellipses_auto_end() -> Result<()> { + let expr = " + 1 + , + 2 + , + 3 + , + + "; + test_ClearSpeak("el", "ClearSpeak_Ellipses", "Auto", expr, "1 κόμμα, 2 κόμμα, 3 κόμμα; αποσιωπητικά")?; + return Ok(()); + +} + +#[test] +fn ellipses_auto_middle() -> Result<()> { + let expr = " + + 1 + , + 2 + , + 3 + , + + , + 20 + + "; + test_ClearSpeak("el", "ClearSpeak_Ellipses", "Auto", expr, + "1 κόμμα, 2 κόμμα, 3 κόμμα; αποσιωπητικά, κόμμα, 20")?; + return Ok(()); + +} + +#[test] +fn ellipses_auto_both() -> Result<()> { + let expr = " + , + -2,-1,0,1,2 + , + "; + test_ClearSpeak("el", "ClearSpeak_Ellipses", "Auto", expr, + "αποσιωπητικά, κόμμα, μείον 2 κόμμα, μείον 1 κόμμα, 0 κόμμα, 1 κόμμα, 2 κόμμα; αποσιωπητικά")?; + return Ok(()); + +} + +#[test] +fn ellipses_and_so_on_start() -> Result<()> { + let expr = " + , + -2,-1,0 + "; + test_ClearSpeak("el", "ClearSpeak_Ellipses", "AndSoOn", expr, "αποσιωπητικά, κόμμα, μείον 2 κόμμα, μείον 1 κόμμα, 0")?; + return Ok(()); + +} + +#[test] +fn ellipses_and_so_on_end() -> Result<()> { + let expr = " + 1 + , + 2 + , + 3 + , + + "; + test_ClearSpeak("el", "ClearSpeak_Ellipses", "AndSoOn", expr, "1 κόμμα, 2 κόμμα, 3 και ούτω καθεξής")?; + return Ok(()); + +} + +#[test] +fn ellipses_and_so_on_middle() -> Result<()> { + let expr = " + + 1 + , + 2 + , + 3 + , + + , + 20 + + "; + test_ClearSpeak("el", "ClearSpeak_Ellipses", "AndSoOn", expr, + "1 κόμμα, 2 κόμμα, 3 και ούτω καθεξής ως, 20")?; + return Ok(()); + +} + +#[test] +fn ellipses_and_so_on_both() -> Result<()> { + let expr = " + , + -2,-1,0,1,2 + , + "; + test_ClearSpeak("el", "ClearSpeak_Ellipses", "AndSoOn", expr, + "αποσιωπητικά, κόμμα, μείον 2 κόμμα, μείον 1 κόμμα, 0 κόμμα, 1 κόμμα, 2 κόμμα; αποσιωπητικά")?; + return Ok(()); + +} + +#[test] +fn vertical_line_auto() -> Result<()> { + let expr = " + 3|6 + "; + test_ClearSpeak("el", "ClearSpeak_VerticalLine", "Auto", expr, + "3 διαιρεί 6")?; + return Ok(()); + +} + +#[test] +fn vertical_line_divides() -> Result<()> { + let expr = " + 3|6 + "; + test_ClearSpeak("el", "ClearSpeak_VerticalLine", "Divides", expr, + "3 διαιρεί 6")?; + return Ok(()); + +} + + #[test] + fn vertical_line_given() -> Result<()> { + let expr = " + 3|6 + "; + test_ClearSpeak("el", "ClearSpeak_VerticalLine", "Given", expr, + "3 δεδομένου 6")?; + return Ok(()); + + } + + #[test] + fn vertical_line_probability_given() -> Result<()> { + let expr = " + P + + ( + + A + | + B + + ) + + "; + test_ClearSpeak_prefs("el", vec![("ClearSpeak_VerticalLine", "Given"), ("ClearSpeak_ImpliedTimes", "None")] + , expr, "κεφαλαίο p; ανοίγει παρένθεση; κεφαλαίο A, δεδομένου, κεφαλαίο b; κλείνει παρένθεση")?; + return Ok(()); + + } + +#[test] +fn vertical_line_set() -> Result<()> { + let expr = " + { + + x + | + x + > + 0 + + } + "; + test_ClearSpeak("el", "ClearSpeak_VerticalLine", "Auto", expr, + "το σύνολο όλων των x τέτοια ώστε x είναι μεγαλύτερο από 0")?; + return Ok(()); + +} + + +#[test] +fn vertical_line_set_such_that() -> Result<()> { + let expr = " + { + + x + | + x + > + 0 + + } + "; + test_ClearSpeak("el", "ClearSpeak_VerticalLine", "SuchThat", expr, + "το σύνολο όλων των x τέτοια ώστε x είναι μεγαλύτερο από 0")?; + return Ok(()); + +} + +#[test] +fn vertical_line_set_given() -> Result<()> { + let expr = " + { + + x + | + x + > + 0 + + } + "; + // the rules for set will override all the options -- ClearSpeak spec should be clarified + test_ClearSpeak("el", "ClearSpeak_VerticalLine", "Given", expr, + "το σύνολο όλων των x τέτοια ώστε x είναι μεγαλύτερο από 0")?; + return Ok(()); + +} + +#[test] +fn vertical_line_set_and_abs() -> Result<()> { + let expr = " + { + + x + | + + | + x + | + + > + 2 + + } + "; + test_ClearSpeak("el", "ClearSpeak_VerticalLine", "Auto", expr, + "το σύνολο όλων των x τέτοια ώστε απόλυτη τιμή του x; είναι μεγαλύτερο από 2")?; + return Ok(()); + +} + +#[test] +fn vertical_line_evaluated_at() -> Result<()> { + let expr = " + f + + ( + x + ) + + + | + + x + = + 5 + + + "; + test_ClearSpeak("el", "ClearSpeak_VerticalLine", "Auto", expr, + "f του x, υπολογισμένο για; x ισούται με 5")?; + return Ok(()); + +} + +#[test] +fn vertical_line_evaluated_at_both() -> Result<()> { + let expr = " + + x + 2 + + + + x + + | + 0 + 1 + + "; + test_ClearSpeak("el", "ClearSpeak_VerticalLine", "Auto", expr, + "x στο τετράγωνο, συν x; υπολογισμένο για 1 μείον την ίδια έκφραση υπολογισμένη στο 0")?; + return Ok(()); + +} +#[test] +fn vertical_line_evaluated_at_divides() -> Result<()> { + let expr = " + f + + ( + x + ) + + + | + + x + = + 5 + + + "; + test_ClearSpeak("el", "ClearSpeak_VerticalLine", "Divides", expr, + "f του x, υπολογισμένο για; x ισούται με 5")?; + return Ok(()); + +} + +#[test] +fn vertical_line_evaluated_at_both_given() -> Result<()> { + let expr = " + + x + 2 + + + + x + + | + 0 + 1 + + "; + test_ClearSpeak("el", "ClearSpeak_VerticalLine", "Given", expr, + "x στο τετράγωνο, συν x; υπολογισμένο για 1 μείον την ίδια έκφραση υπολογισμένη στο 0")?; + return Ok(()); + +} \ No newline at end of file diff --git a/tests/Languages/el/SimpleSpeak/functions.rs b/tests/Languages/el/SimpleSpeak/functions.rs new file mode 100644 index 000000000..15ad629d0 --- /dev/null +++ b/tests/Languages/el/SimpleSpeak/functions.rs @@ -0,0 +1,415 @@ +/// 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; + +#[test] +fn trig_names() -> Result<()> { + let expr = " + sinx+ + cosy+ + tanz+ + secα+ + cscϕ+ + cotφ + "; + test("el", "SimpleSpeak", expr, "ημίτονο του x, συν, συνημίτονο του y, συν, εφαπτομένη του z, συν, τέμνουσα του άλφα; συν, συντέμνουσα, του παραλλαγή του φ; συν, συνεφαπτομένη, του φ")?; + return Ok(()); + +} + +#[test] +fn hyperbolic_trig_names() -> Result<()> { + let expr = " + sinhx+ + coshy+ + tanhz+ + sechα+ + cschϕ+ + cothφ + "; + test("el", "SimpleSpeak", expr, "υπερβολικό ημίτονο, του x; συν, \ + υπερβολικό συνημίτονο, του y; συν, \ + υπερβολική εφαπτομένη, του z; συν, \ + υπερβολική τέμνουσα, του άλφα; συν; \ + υπερβολική συντέμνουσα, του παραλλαγή του φ; συν, \ + υπερβολική συνεφαπτομένη; του φ")?; + return Ok(()); + + +} + + +#[test] +fn inverse_trig() -> Result<()> { + let expr = "sin-1x"; + test("el", "SimpleSpeak", expr, "αντίστροφη ημίτονο, του x")?; + return Ok(()); + +} + +#[test] +fn trig_squared() -> Result<()> { + let expr = "sin2x"; + test("el", "SimpleSpeak", expr, "ημίτονο στο τετράγωνο, του x")?; // ημίτονο στο τετράγωνο, του x + return Ok(()); + +} + +#[test] +fn trig_cubed() -> Result<()> { + let expr = "tan3x"; + test("el", "SimpleSpeak", expr, "εφαπτομένη στον κύβο, του x")?; + return Ok(()); + +} + +#[test] +fn trig_fourth() -> Result<()> { + let expr = "sec4x"; + test("el", "SimpleSpeak", expr, "η τέταρτη δύναμη του, τέμνουσα; του x")?; + return Ok(()); + +} + + +#[test] +fn trig_power_other() -> Result<()> { + let expr = "sinh>n-1x"; + test("el", "SimpleSpeak", expr, "η n μείον 1 δύναμη του, υπερβολικό ημίτονο; του x")?; + return Ok(()); + +} + +#[test] +fn simple_log() -> Result<()> { + let expr = " logx "; + test("el", "SimpleSpeak", expr, "ο λογάριθμος, του x")?; + return Ok(()); + +} + +#[test] +fn normal_log() -> Result<()> { + let expr = "log(x+y)"; + test("el", "SimpleSpeak", expr, "ο λογάριθμος, του; ανοίγει παρένθεση, x συν y, κλείνει παρένθεση")?; + return Ok(()); + +} + +#[test] +fn simple_log_with_base() -> Result<()> { + let expr = " logbx "; + test("el", "SimpleSpeak", expr, "ο λογάριθμος με βάση b; του x")?; + return Ok(()); + +} + +#[test] +fn normal_log_with_base() -> Result<()> { + let expr = "logb(x+y)"; + test("el", "SimpleSpeak", expr, "ο λογάριθμος με βάση b; του; ανοίγει παρένθεση, x συν y, κλείνει παρένθεση")?; + return Ok(()); + +} + +#[test] +fn normal_ln() -> Result<()> { + let expr = "ln(x+y)"; + test_prefs("el", "SimpleSpeak", vec![("Verbosity", "Terse")], + expr, "l n, άνοιγμα, x συν y, κλείσιμο")?; + test_prefs("el", "SimpleSpeak", vec![("Verbosity", "Medium")], + expr, "ο φυσικός λογάριθμος, του; ανοίγει παρένθεση, x συν y, κλείνει παρένθεση")?; + test_prefs("el", "SimpleSpeak", vec![("Verbosity", "Verbose")], + expr, "ο φυσικός λογάριθμος, του; ανοίγει παρένθεση, x συν y, κλείνει παρένθεση")?; + return Ok(()); + +} + +#[test] +fn simple_ln() -> Result<()> { + let expr = " lnx "; + test_prefs("el", "SimpleSpeak", vec![("Verbosity", "Terse")], + expr, "l n x")?; // l n x + test_prefs("el", "SimpleSpeak", vec![("Verbosity", "Medium")], + expr, "ο φυσικός λογάριθμος, του x")?; + test_prefs("el", "SimpleSpeak", vec![("Verbosity", "Verbose")], + expr, "ο φυσικός λογάριθμος, του x")?; + return Ok(()); + +} + +#[test] +fn other_names() -> Result<()> { + let expr = " Covx "; + test_prefs("el", "SimpleSpeak", vec![("Verbosity", "Terse")], + expr, "συνδιακύμανση, x")?; + test_prefs("el", "SimpleSpeak", vec![("Verbosity", "Medium")], + expr, "συνδιακύμανση, x")?; + let expr = " exp(x) "; + test_prefs("el", "SimpleSpeak", vec![("Verbosity", "Terse")], + expr, "εκθετική x")?; + test_prefs("el", "SimpleSpeak", vec![("Verbosity", "Medium")], + expr, "εκθετική του x")?; + return Ok(()); + +} + +#[test] +fn explicit_function_call_with_parens() -> Result<()> { + let expr = "t(x)"; + test("el", "SimpleSpeak", expr, "t του x")?; + return Ok(()); + +} + + +#[test] +fn explicit_times_with_parens() -> Result<()> { + let expr = "t(x)"; + test("el", "SimpleSpeak", expr, "t επί x")?; + return Ok(()); + //theodora. fails because "times" was removed from the SimpleSpeak rule and left blank (keeping it resulted in false positives) + + +} + +#[test] +fn explicit_function_call() -> Result<()> { + let expr = "tx"; + test("el", "SimpleSpeak", expr, "t του x")?; + return Ok(()); + +} + +#[test] +fn explicit_times() -> Result<()> { + let expr = "tx"; + test("el", "SimpleSpeak", expr, "t x")?; + return Ok(()); + +} + + +// Tests for times + + +#[test] +fn no_times_binomial() -> Result<()> { + let expr = "x y"; + test("el", "SimpleSpeak", expr, "x y")?; + return Ok(()); + +} + +#[test] +fn times_following_paren() -> Result<()> { + let expr = " + 2 + ( 3 ) + "; + test("el", "SimpleSpeak", expr, "2 επί 3")?; + return Ok(()); +//theodora. fails because "times" was removed from the SimpleSpeak rule and left blank (keeping it resulted in false positives) + +} + +#[test] +fn times_preceding_paren() -> Result<()> { + let expr = " + ( 2 ) + 3 + "; + test("el", "SimpleSpeak", expr, "2 επί 3")?; + return Ok(()); + //theodora. fails because "times" was removed from the SimpleSpeak rule and left blank (keeping it resulted in false positives) + +} + +#[test] +fn no_times_sqrt() -> Result<()> { + let expr = " + a + b + = + ab + "; + test("el", "SimpleSpeak", expr, + "η τετραγωνική ρίζα του a; επί, η τετραγωνική ρίζα του b; ισούται με; η τετραγωνική ρίζα του a b, τέλος ρίζας")?; + test_prefs("el", "SimpleSpeak", vec![("Impairment", "LearningDisability")], expr, + "η τετραγωνική ρίζα του a; επί, η τετραγωνική ρίζα του b; ισούται με; η τετραγωνική ρίζα του a b")?; + return Ok(()); + //theodora. fails because "times" was removed from the SimpleSpeak rule and left blank (keeping it resulted in false positives) +} + +// Tests for parens + + + #[test] + fn no_parens_number() -> Result<()> { + let expr = " + ( + 25 + ) + x + "; + test("el", "SimpleSpeak", expr, "25 επί x")?; + return Ok(()); + //theodora. fails because "times" was removed from the SimpleSpeak rule and left blank (keeping it resulted in false positives) + + + } + + #[test] + fn no_parens_monomial() -> Result<()> { + let expr = " + b + ( + xy + ) + "; + test("el", "SimpleSpeak", expr, "b; ανοίγει παρένθεση, x y, κλείνει παρένθεση")?; + return Ok(()); + + } + + #[test] + fn no_parens_negative_number() -> Result<()> { + let expr = " + 2+ + ( + 2 + ) + "; + test("el", "SimpleSpeak", expr, "2 συν μείον 2")?; + return Ok(()); + + } + + + #[test] + fn no_parens_negative_number_with_var() -> Result<()> { + let expr = " + ( + 2x + ) + +1 + "; + test("el", "SimpleSpeak", expr, "μείον 2 x, συν 1")?; + return Ok(()); + + } + + #[test] + fn parens_superscript() -> Result<()> { + let expr = " + + + + ( + 2x + ) + 2 + + + "; + test("el", "SimpleSpeak", expr, "ανοίγει παρένθεση, 2 x, κλείνει παρένθεση στο τετράγωνο")?; + return Ok(()); + + } + + #[test] + fn no_parens_fraction() -> Result<()> { + let expr = " + 2 + + + + ( + 12 + ) + "; + test("el", "SimpleSpeak", expr, "2 συν 1 δεύτερο")?; + return Ok(()); + + } + + +// Tests for the four types of intervals in SimpleSpeak + +#[test] + fn parens_interval_open_open() -> Result<()> { + let expr = " + ( + (c,d) + ) + "; + test("el", "SimpleSpeak",expr, "το ανοιχτό διάστημα από c ως d")?; + return Ok(()); + +} + +#[test] + fn parens_interval_closed_open() -> Result<()> { + let expr = " + [ + [(]c,d) + ) + "; + test("el", "SimpleSpeak",expr, "το κλειστό ανοιχτό διάστημα από c ως d")?; + return Ok(()); + +} + +#[test] +fn parens_interval_open_closed() -> Result<()> { + let expr = " + ( + (c,d] + ] + "; + test("el", "SimpleSpeak",expr,"το ανοιχτό κλειστό διάστημα από c ως d")?; + return Ok(()); + +} + +#[test] +fn parens_interval_closed_closed() -> Result<()> { + let expr = " + [ + [(]c,d] + ] + "; + test("el", "SimpleSpeak",expr, "το κλειστό διάστημα από c ως d")?; + return Ok(()); + +} + + #[test] + fn parens_interval_neg_infinity_open_open() -> Result<()> { + let expr = " + ( + - ,d) + ) + "; + test("el", "SimpleSpeak",expr, + "το ανοιχτό διάστημα από μείον άπειρο ως d")?; + return Ok(()); + +} + +#[test] + fn parens_interval_neg_infinity_open_closed() -> Result<()> { + let expr = " + ( + - ,d] + ] + "; + test("el", "SimpleSpeak",expr, + "το ανοιχτό κλειστό διάστημα από μείον άπειρο ως d")?; + return Ok(()); + +} + diff --git a/tests/Languages/el/SimpleSpeak/geometry.rs b/tests/Languages/el/SimpleSpeak/geometry.rs new file mode 100644 index 000000000..02ef351af --- /dev/null +++ b/tests/Languages/el/SimpleSpeak/geometry.rs @@ -0,0 +1,36 @@ +/// Tests for geometry listed in intent +/// ABC as mtext and as separated letters +use crate::common::*; +use anyhow::Result; + +#[test] +fn arc() -> Result<()> { + let expr = " BC "; + test("el", "SimpleSpeak", expr, "τόξο κεφαλαίο b κεφαλαίο c")?; + return Ok(()); + +} + +#[test] +fn ray() -> Result<()> { + let expr = " XY¯ "; + test("el", "SimpleSpeak", expr, "ευθύγραμμο τμήμα κεφαλαίο x κεφαλαίο y")?; + return Ok(()); + +} + +#[test] +fn arc_mtext() -> Result<()> { + let expr = " BC "; + test("el", "SimpleSpeak", expr, "τόξο κεφαλαίο b κεφαλαίο c")?; + return Ok(()); + +} + +#[test] +fn ray_mtext() -> Result<()> { + let expr = " XY "; + test("el", "SimpleSpeak", expr, "διάνυσμα κεφαλαίο x κεφαλαίο y")?; + return Ok(()); + +} diff --git a/tests/Languages/el/SimpleSpeak/large_ops.rs b/tests/Languages/el/SimpleSpeak/large_ops.rs new file mode 100644 index 000000000..6eccd21c7 --- /dev/null +++ b/tests/Languages/el/SimpleSpeak/large_ops.rs @@ -0,0 +1,235 @@ +use crate::common::*; +use anyhow::Result; + +#[test] +fn sum_both() -> Result<()> { + let expr = " + + + n=1 + 10 + + n + "; + test("el", "SimpleSpeak", expr, "άθροισμα από n ισούται με 1 ως 10 του n")?; + return Ok(()); + +} + +#[test] +fn sum_under() -> Result<()> { + let expr = " + + + S + + i + "; + test("el", "SimpleSpeak", expr, "άθροισμα για κεφαλαίο s του i")?; + return Ok(()); + +} +#[test] +fn sum_both_msubsup() -> Result<()> { + let expr = " + + + n=1 + 10 + + n + "; + test("el", "SimpleSpeak", expr, "άθροισμα από n ισούται με 1 ως 10 του n")?; + return Ok(()); + +} + +#[test] +fn sum_sub() -> Result<()> { + let expr = " + + + S + + i + "; + test("el", "SimpleSpeak", expr, "άθροισμα για κεφαλαίο s του i")?; + return Ok(()); + +} + +#[test] +fn sum() -> Result<()> { + let expr = " + + ai + "; + test("el", "SimpleSpeak", expr, "άθροισμα του a δείκτης i")?; + return Ok(()); + +} + +#[test] +fn product_both() -> Result<()> { + let expr = " + + + n=1 + 10 + + n + "; + test("el", "SimpleSpeak", expr, "γινόμενο από n ισούται με 1 ως 10 του n")?; + return Ok(()); + +} + +#[test] +fn product_under() -> Result<()> { + let expr = " + + + S + + i + "; + test("el", "SimpleSpeak", expr, "γινόμενο για κεφαλαίο s του i")?; + return Ok(()); + +} + +#[test] +fn product() -> Result<()> { + let expr = " + + ai + "; + test("el", "SimpleSpeak", expr, "γινόμενο του a δείκτης i")?; + return Ok(()); + +} + +#[test] +fn intersection_both() -> Result<()> { + let expr = " + + + i=1 + 10 + + Si + "; + test("el", "SimpleSpeak", expr, "τομή από i ισούται με 1 ως 10 του; κεφαλαίο s δείκτης i")?; + return Ok(()); + +} + +#[test] +fn intersection_under() -> Result<()> { + let expr = " + + + C + + Si + "; + test("el", "SimpleSpeak", expr, "τομή για κεφαλαίο c του; κεφαλαίο s δείκτης i")?; + return Ok(()); + +} + +#[test] +fn intersection() -> Result<()> { + let expr = " + + Si + "; + test("el", "SimpleSpeak", expr, "τομή του κεφαλαίο s δείκτης i")?; + return Ok(()); + +} + +#[test] +fn union_both() -> Result<()> { + let expr = " + + + i=1 + 10 + + Si + "; + test("el", "SimpleSpeak", expr, "ένωση από i ισούται με 1 ως 10 του; κεφαλαίο s δείκτης i")?; // ένωση από i ισούται με 1 ως 10 του; κεφαλαίο s δείκτης i + return Ok(()); + +} + +#[test] +fn union_under() -> Result<()> { + let expr = " + + + C + + Si + "; + test("el", "SimpleSpeak", expr, "ένωση για κεφαλαίο c του; κεφαλαίο s δείκτης i")?; // ένωση όπου κεφαλαίο c του; κεφαλαίο s δείκτης i + return Ok(()); + +} + +#[test] +fn union() -> Result<()> { + let expr = " + + Si + "; + test("el", "SimpleSpeak", expr, "ένωση του κεφαλαίο s δείκτης i")?; // ένωση του κεφαλαίο s δείκτης i + return Ok(()); + +} + +#[test] +fn integral_both() -> Result<()> { + let expr = " + + + + 0 + 1 + + f(x ) + + dx + "; + test("el", "SimpleSpeak", expr, "ολοκλήρωμα από 0 ως 1 του; f του x; d x")?; // ολοκλήρωμα από 0 ως 1 του; f του x; d x + return Ok(()); + +} + +#[test] +fn integral_under() -> Result<()> { + let expr = " + + + + + f(x ) + dx + "; + test("el", "SimpleSpeak", expr, "ολοκλήρωμα επί του συνόλου των πραγματικών αριθμών του; f του x, d x")?; // ολοκλήρωμα όπου οι πραγματικοί αριθμοί του; f του x, d x ???? όπου + return Ok(()); + +} + +#[test] +fn integral() -> Result<()> { + let expr = " + + f(x ) + dx + "; + test("el", "SimpleSpeak", expr, "ολοκλήρωμα του f του x, d x")?; // ολοκλήρωμα του f του x, d x + return Ok(()); + +} \ No newline at end of file diff --git a/tests/Languages/el/SimpleSpeak/linear_algebra.rs b/tests/Languages/el/SimpleSpeak/linear_algebra.rs new file mode 100644 index 000000000..ce4da58e4 --- /dev/null +++ b/tests/Languages/el/SimpleSpeak/linear_algebra.rs @@ -0,0 +1,112 @@ +use crate::common::*; +use anyhow::Result; + +#[test] +fn transpose() -> Result<()> { + let expr = " MT "; + test("el", "SimpleSpeak", expr, "κεφαλαίο m ανάστροφος")?; + return Ok(()); + +} + +#[test] +fn trace() -> Result<()> { + let expr = " TrM "; + test("el", "SimpleSpeak", expr, "ίχνος του κεφαλαίο m")?; + return Ok(()); + +} + +#[test] +fn dimension() -> Result<()> { + let expr = " DimM "; + test("el", "SimpleSpeak", expr, "διάσταση του κεφαλαίο m")?; + return Ok(()); + +} + +#[test] +fn homomorphism() -> Result<()> { + let expr = " Hom(M) "; + test("el", "SimpleSpeak", expr, "ομομορφισμός του κεφαλαίο m")?; + return Ok(()); + +} + +#[test] +fn kernel() -> Result<()> { + let expr = " ker(L) "; + test("el", "SimpleSpeak", expr, "πυρήνας του κεφαλαίο l")?; + return Ok(()); + +} + +#[test] +fn norm() -> Result<()> { + let expr = " + + + f + + + +"; + test("el", "SimpleSpeak", expr, "νόρμα του f")?; + return Ok(()); + +} + +#[test] +fn norm_non_simple() -> Result<()> { + let expr = " + + + x + + + y + + + +"; + test("el", "SimpleSpeak", expr, "νόρμα του x συν y τέλος νόρμας")?; + return Ok(()); + +} + +#[test] +fn norm_subscripted() -> Result<()> { + let expr = " + + + + f + + + p + + +"; + test("el", "SimpleSpeak", expr, "p νόρμα του f")?; + return Ok(()); + +} + +#[test] +fn not_gradient() -> Result<()> { + // the nabla is at the end, so it can't be gradient because it doesn't operate on anything + let expr = r#" + ( + b + + + + + ) + a + +"#; + test("el", "SimpleSpeak", expr, "ανοίγει παρένθεση; b φορές το ανάδελτα; κλείνει παρένθεση; επί a")?; + return Ok(()); + //theodora. fails because of the implicit "times" rule in Simplespeak which is left blank due to many false positives + +} \ No newline at end of file diff --git a/tests/Languages/el/SimpleSpeak/mfrac.rs b/tests/Languages/el/SimpleSpeak/mfrac.rs new file mode 100644 index 000000000..1e04d1d5f --- /dev/null +++ b/tests/Languages/el/SimpleSpeak/mfrac.rs @@ -0,0 +1,362 @@ +/// Tests for fractions +/// includes simple fractions and more complex fractions +/// also tests mixed fractions (implicit and explicit) +use crate::common::*; +use anyhow::Result; + +#[test] +fn common_fraction_half() -> Result<()> { + let expr = " + 1 2 + "; + test("el", "SimpleSpeak", expr, "1 δεύτερο")?; + return Ok(()); + +} + + +#[test] +fn common_fraction_thirds() -> Result<()> { + let expr = " + 2 3 + "; + test("el", "SimpleSpeak", expr, "2 τρίτα")?; + return Ok(()); + +} + + +#[test] +fn common_fraction_tenths() -> Result<()> { + let expr = " + 17 10 + "; + test("el", "SimpleSpeak", expr, "17 δέκατα")?; + return Ok(()); + +} + + +#[test] +#[allow(non_snake_case)] +fn not_SimpleSpeak_common_fraction_tenths() -> Result<()> { + let expr = " + 89 10 + "; + test("el", "SimpleSpeak", expr, "89 προς 10")?; + return Ok(()); + +} + +#[test] +fn non_simple_fraction() -> Result<()> { + let expr = " + + + + x+y + + x-y + + + + "; + test("el", "SimpleSpeak", expr, "κλάσμα, x συν y, προς, x μείον y, τέλος κλάσματος")?; + return Ok(()); + +} + +#[test] +fn nested_fraction() -> Result<()> { + let expr = " + + + + x+ 1y + + x-y + + + + "; + test("el", "SimpleSpeak", expr, "κλάσμα, x συν, κλάσμα, 1 προς y, τέλος κλάσματος; προς, x μείον y, τέλος κλάσματος")?; + return Ok(()); + +} + + +#[test] +fn deeply_nested_fraction_msqrt() -> Result<()> { + let expr = " + + + + x+ 1y + + x-y + + + + "; + test("el", "SimpleSpeak", expr, "κλάσμα, x συν; η τετραγωνική ρίζα του 1 προς y; τέλος ρίζας; προς, x μείον y, τέλος κλάσματος")?; + return Ok(()); + +} + +#[test] +fn deeply_nested_fraction_mrow_msqrt() -> Result<()> { + let expr = " + + + + x+ 2+1y + + x-y + + + + "; + test("el", "SimpleSpeak", expr, "κλάσμα, x συν; η τετραγωνική ρίζα του 2 συν 1 προς y; τέλος ρίζας; προς, x μείον y, τέλος κλάσματος")?; + return Ok(()); + +} + +#[test] +fn numerator_simple_fraction() -> Result<()> { + let expr = " + + + + x + + x-y + + + + "; + test("el", "SimpleSpeak", expr, "κλάσμα, x προς, x μείον y, τέλος κλάσματος")?; + return Ok(()); + +} + +#[test] +fn denominator_simple_fraction() -> Result<()> { + let expr = " + + + x-y + x + + + "; + test("el", "SimpleSpeak", expr, "κλάσμα, x μείον y, προς x, τέλος κλάσματος")?; + return Ok(()); + +} + + +#[test] +fn frac_with_units() -> Result<()> { + let expr = " + + + 62 + + mi + hr + + + "; + test("el", "SimpleSpeak", expr, "62 μίλια ανά ώρα")?; + return Ok(()); + +} + +#[test] +fn singular_frac_with_units() -> Result<()> { + let expr = " + + + 1 + + gal + mi + + + "; + test("el", "SimpleSpeak", expr, "1 γαλόνι ανά μίλι")?; + return Ok(()); + +} + +#[test] +fn number_in_numerator_with_units() -> Result<()> { + let expr = " + + + + 3 + gal + + mi + + "; + test("el", "SimpleSpeak", expr, "3 γαλόνια ανά μίλι")?; + return Ok(()); + +} + +#[test] +fn units_with_powers() -> Result<()> { + let expr = " + + + 3 m + s2 + + "; + test("el", "SimpleSpeak", expr, "3 μέτρα ανά δευτερόλεπτο στο τετράγωνο")?; + return Ok(()); + +} + +#[test] +fn mixed_number() -> Result<()> { + let expr = " + 3 + 1 2 + "; + test("el", "SimpleSpeak", expr, "3 και 1 δεύτερο")?; + return Ok(()); + +} + +#[test] +fn explicit_mixed_number() -> Result<()> { + let expr = " + 3 + + 1 8 + "; + test("el", "SimpleSpeak", expr, "3 και 1 όγδοο")?; + return Ok(()); + +} + +#[test] +fn mixed_number_big() -> Result<()> { + let expr = " + 3 + 7 83 + "; + test("el", "SimpleSpeak", expr, "3 και 7 ογδόντα τρίτα")?; + return Ok(()); + +} + +#[test] +fn simple_text() -> Result<()> { + let expr = " + rise run + "; + test("el", "SimpleSpeak", expr, "rise προς run")?; + return Ok(()); + +} + +#[test] +fn number_and_text() -> Result<()> { + let expr = " + + + 2miles + + 3gallons + + "; + test("el", "SimpleSpeak", expr, "κλάσμα, 2 miles, προς, 3 gallons, τέλος κλάσματος")?; + return Ok(()); + +} + +#[test] +fn nested_simple_fractions() -> Result<()> { + let expr = " + + + + + 1 + 2 + + + + + 2 + 3 + + + + + "; + test("el", "SimpleSpeak", expr, "κλάσμα, 1 δεύτερο, προς, 2 τρίτα, τέλος κλάσματος")?; + return Ok(()); + +} + +#[test] +fn binomial() -> Result<()> { + let expr = " + 2 + ( + 7 3 + ) + "; + test("el", "SimpleSpeak", expr, "2 επί 7 ανά 3")?; + return Ok(()); + //theodora. fails. Now reads 2 7 ανά 3 + +} + +#[test] +fn binomial_non_simple_top() -> Result<()> { + let expr = " + 2 + ( + n+7 3 + ) + "; + test("el", "SimpleSpeak", expr, "2 επί, διωνυμικό n συν 7 ανά 3")?; + return Ok(()); + +} + //theodora. fails because of the implicit "times" rule in Simplespeak which is left blank due to many false positives + +#[test] +fn binomial_non_simple_bottom() -> Result<()> { + let expr = " + 2 + ( + 7 k+3 + ) + "; + test("el", "SimpleSpeak", expr, "2 επί, 7 ανά k συν 3 τέλος διωνυμικού")?; + return Ok(()); + //theodora. fails because of the implicit "times" rule in Simplespeak which is left blank due to many false positives + + +} + +#[test] +fn binomial_non_simple_top_and_bottom() -> Result<()> { + let expr = " + 2 + ( + n+7 k+3 + ) + "; + test("el", "SimpleSpeak", expr, "2 επί; διωνυμικό n συν 7 ανά k συν 3 τέλος διωνυμικού")?; + return Ok(()); + //theodora. fails because of the implicit "times" rule in Simplespeak which is left blank due to many false positives + +} diff --git a/tests/Languages/el/SimpleSpeak/msup.rs b/tests/Languages/el/SimpleSpeak/msup.rs new file mode 100644 index 000000000..acfa58d8a --- /dev/null +++ b/tests/Languages/el/SimpleSpeak/msup.rs @@ -0,0 +1,380 @@ +/// Tests for superscripts +/// simple superscripts +/// complex/nested superscripts +use crate::common::*; +use anyhow::Result; + +#[test] +fn squared() -> Result<()> { + let expr = " + x 2 + "; + test("el", "SimpleSpeak", expr, "x στο τετράγωνο")?; // x στο τετράγωνο + return Ok(()); + +} + +#[test] +fn cubed() -> Result<()> { + let expr = " + x 3 + "; + test("el", "SimpleSpeak", expr, "x στον κύβο")?; // x στον κύβο + return Ok(()); + +} + +#[test] + fn ordinal_power() -> Result<()> { + let expr = " + x 4 + "; + test("el", "SimpleSpeak", expr, "x στην τέταρτη")?; + return Ok(()); + + } + +#[test] +fn simple_mi_power() -> Result<()> { + let expr = " + x n + "; + test("el", "SimpleSpeak", expr, "x στην n οστή")?; + return Ok(()); + +} + +#[test] +fn zero_power() -> Result<()> { + let expr = " + x 0 + "; + test("el", "SimpleSpeak", expr, "x στην 0")?; + return Ok(()); + +} + + +#[test] +fn decimal_power() -> Result<()> { + let expr = " + x 2.0 + "; + test("el", "SimpleSpeak", expr, "x στην 2.0")?; + return Ok(()); + //theodora. fails because of 2.0 -> 20 + // The issue is at src/prefs (set_separator, decimal_separator) + +} + +#[test] +fn non_simple_power() -> Result<()> { + let expr = " + + + 3 + + y+2 + + + "; + test("el", "SimpleSpeak", expr, "3 που υψώνεται στη y συν 2 τέλος δύναμης")?; + return Ok(()); + +} + +#[test] +fn negative_power() -> Result<()> { + let expr = " + + x + - 2 + + "; + test("el", "SimpleSpeak", expr, "x στην μείον 2")?; + return Ok(()); + +} + +#[test] +fn simple_fraction_power() -> Result<()> { + let expr = " + + x + 13 + + "; + test("el", "SimpleSpeak", expr, "x που υψώνεται στη 1 τρίτο τέλος δύναμης")?; + return Ok(()); + +} + +#[test] +fn nested_squared_power_with_coef() -> Result<()> { + let expr = " + + + 3 + + 2 + + x + 2 + + + + + "; + test("el", "SimpleSpeak", expr, "3 που υψώνεται στη 2 x στο τετράγωνο τέλος δύναμης")?; + return Ok(()); + +} + +#[test] +fn nested_squared_power_with_neg_coef() -> Result<()> { + let expr = " + + + 3 + + - + 2 + + x + 2 + + + + + "; + test("el", "SimpleSpeak", expr, "3 που υψώνεται στη μείον 2 x στο τετράγωνο τέλος δύναμης")?; + return Ok(()); + +} + +#[test] +fn nested_cubed_power() -> Result<()> { + let expr = " + + y + + 45 + 3 + + + "; + test("el", "SimpleSpeak", expr, "y που υψώνεται στη 4 πέμπτα στον κύβο τέλος δύναμης")?; + return Ok(()); + +} + +#[test] +fn nested_cubed_power_with_neg_base() -> Result<()> { + let expr = " + + y + + - + + 45 + 3 + + + + "; + test("el", "SimpleSpeak", expr, "y που υψώνεται στη μείον 4 πέμπτα στον κύβο τέλος δύναμης")?; + return Ok(()); + +} + +#[test] +fn nested_number_times_squared() -> Result<()> { + let expr = " + + + e + + + 1 + 2 + + + x + 2 + + + + + "; + test("el", "SimpleSpeak", expr, "e που υψώνεται στη 1 δεύτερο x στο τετράγωνο τέλος δύναμης")?; + return Ok(()); + +} + +#[test] +fn nested_negative_number_times_squared() -> Result<()> { + let expr = " + + + e + + + 1 + 2 + + + x + 2 + + + + + "; + test("el", "SimpleSpeak", expr, "e που υψώνεται στη μείον 1 δεύτερο, x στο τετράγωνο τέλος δύναμης")?; + return Ok(()); + +} + +#[test] +fn nested_expr_to_tenth() -> Result<()> { + let expr = " + + + 3 + + + 3 + + 10 + + + + + "; + test("el", "SimpleSpeak", expr, "3 που υψώνεται στη 3 στην δέκατη τέλος δύναμης")?; + return Ok(()); + +} + +#[test] +fn nested_non_simple_squared_exp() -> Result<()> { + let expr = " + + + 3 + + + + ( + + x+1 + ) + 2 + + + + + "; + test("el", "SimpleSpeak", expr, "3 που υψώνεται στη ανοίγει παρένθεση, x συν 1, κλείνει παρένθεση στο τετράγωνο τέλος δύναμης")?; + return Ok(()); + +} + +#[test] +fn nested_simple_power() -> Result<()> { + let expr = " + + t + + 45 + n + + + "; + test("el", "SimpleSpeak", expr, "t που υψώνεται στη 4 πέμπτα στην n οστή τέλος δύναμης")?; + return Ok(()); + +} + +#[test] +fn nested_end_exponent_power() -> Result<()> { + let expr = " + + t + + 45 + n+1 + + + "; + test("el", "SimpleSpeak", expr, "t που υψώνεται στη 4 πέμπτα που υψώνεται στη n συν 1 τέλος δύναμης; τέλος εκθέτη")?; + test_prefs("el", "SimpleSpeak", vec![("Impairment", "LearningDisability")], expr, + "t που υψώνεται στη 4 πέμπτα που υψώνεται στη n συν 1 τέλος δύναμης")?; + return Ok(()); + +} + +#[test] +fn nested_end_exponent_neg_power() -> Result<()> { + let expr = " + + t + + 45 + -3 + + + "; + test("el", "SimpleSpeak", expr, "t που υψώνεται στη 4 πέμπτα στην μείον 3, τέλος εκθέτη")?; + return Ok(()); + +} + +#[test] +fn nested_complex_power() -> Result<()> { + let expr = " + + + e + + + 1 + 2 + + + + ( + + + + xμ + σ + + + ) + 2 + + + + + "; + test("el", "SimpleSpeak", expr, "e που υψώνεται στη μείον 1 δεύτερο; ανοίγει παρένθεση; κλάσμα, x μείον μί, προς σίγμα, τέλος κλάσματος; κλείνει παρένθεση στο τετράγωνο τέλος δύναμης")?; + return Ok(()); + +} + +#[test] +fn default_power() -> Result<()> { + let expr = " + + t + + b+1 + 3 + + + "; + test("el", "SimpleSpeak", expr, "t που υψώνεται στη κλάσμα, b συν 1, προς 3, τέλος κλάσματος; τέλος δύναμης")?; // t που υψώνεται στη κλάσμα, b συν 1, προς 3, τέλος κλάσματος; τέλος δύναμης + return Ok(()); + +} diff --git a/tests/Languages/el/SimpleSpeak/multiline.rs b/tests/Languages/el/SimpleSpeak/multiline.rs new file mode 100644 index 000000000..52bf3ee62 --- /dev/null +++ b/tests/Languages/el/SimpleSpeak/multiline.rs @@ -0,0 +1,78 @@ +use crate::common::*; +use anyhow::Result; + +#[test] +fn case_1() -> Result<()> { + let expr = " + + f( + x + )={ + + + + + 1 if x<0 + + + + + + 0 if x=0 + + + + + + 1 if x>0 + + + + + "; + test("el", "SimpleSpeak", expr, "f του x, ισούται με; 3 περιπτώσεις; \ + περίπτωση 1; μείον 1 if x; είναι μικρότερο από 0; \ + περίπτωση 2; 0 if x, ισούται με 0; \ + περίπτωση 3; 1 if x; είναι μεγαλύτερο από 0")?; + return Ok(()); +} + +#[test] +fn equation_1() -> Result<()> { + let expr = " + + + + + + x+y + + + = + + + 7 + + + + + + 2x+3y + + + = + + + + 17 + + + + + + "; + test("el", "SimpleSpeak", expr, "2 εξισώσεις; \ + εξίσωση 1; x συν y, ισούται με 7; \ + εξίσωση 2; 2 x συν 3 y; ισούται με 17")?; + return Ok(()); +} diff --git a/tests/Languages/el/SimpleSpeak/sets.rs b/tests/Languages/el/SimpleSpeak/sets.rs new file mode 100644 index 000000000..71e339841 --- /dev/null +++ b/tests/Languages/el/SimpleSpeak/sets.rs @@ -0,0 +1,295 @@ +use crate::common::*; +use anyhow::Result; + +#[test] +fn complex() -> Result<()> { + let expr = " + + "; + test("el", "SimpleSpeak", expr, "οι μιγαδικοί αριθμοί")?; + return Ok(()); + +} + +#[test] +fn natural() -> Result<()> { + let expr = " + + "; + test("el", "SimpleSpeak", expr, "οι φυσικοί αριθμοί")?; + return Ok(()); + +} + +#[test] +fn rationals() -> Result<()> { + let expr = " + + "; + test("el", "SimpleSpeak", expr, "οι ρητοί αριθμοί")?; + return Ok(()); + +} + +#[test] +fn reals() -> Result<()> { + let expr = " + + "; + test("el", "SimpleSpeak", expr, "οι πραγματικοί αριθμοί")?; + return Ok(()); + +} + +#[test] +fn integers() -> Result<()> { + let expr = " + + "; + test("el", "SimpleSpeak", expr, "οι ακέραιοι αριθμοί")?; + return Ok(()); + +} + +#[test] +fn msup_complex() -> Result<()> { + let expr = " + + + 2 + + "; + test("el", "SimpleSpeak", expr, "c 2")?; + return Ok(()); + +} + +#[test] +fn msup_natural() -> Result<()> { + let expr = " + + + 2 + + "; + test("el", "SimpleSpeak", expr, "n 2")?; + return Ok(()); + +} + +#[test] +fn msup_rationals() -> Result<()> { + let expr = " + + + 2 + + "; + test("el", "SimpleSpeak", expr, "q 2")?; + return Ok(()); + +} + +#[test] +fn msup_reals() -> Result<()> { + let expr = " + + + 3 + + "; + test("el", "SimpleSpeak", expr, "r 3")?; + return Ok(()); + +} + +#[test] +fn msup_integers() -> Result<()> { + let expr = " + + + 4 + + "; + test("el", "SimpleSpeak", expr, "z 4")?; + return Ok(()); + +} + +#[test] +fn msup_positive_integers() -> Result<()> { + let expr = " + + + + + + "; + test("el", "SimpleSpeak", expr, "οι θετικοί ακέραιοι αριθμοί")?; + return Ok(()); + +} + +#[test] +fn msup_negative_integers() -> Result<()> { + let expr = " + + + - + + "; + test("el", "SimpleSpeak", expr, "οι αρνητικοί ακέραιοι αριθμοί")?; + return Ok(()); + +} + +#[test] +fn msup_positive_rationals() -> Result<()> { + let expr = " + + + + + + "; + test("el", "SimpleSpeak", expr, "οι θετικοί ρητοί αριθμοί")?; + return Ok(()); + +} + +#[test] +fn msup_negative_rationals() -> Result<()> { + let expr = " + + + - + + "; + test("el", "SimpleSpeak", expr, "οι αρνητικοί ρητοί αριθμοί")?; + return Ok(()); + +} + +#[test] +fn empty_set() -> Result<()> { + let expr = " + { } + "; + test("el", "SimpleSpeak", expr, "το κενό σύνολο")?; + return Ok(()); + +} + +#[test] +fn single_element_set() -> Result<()> { + let expr = " + { 12} + "; + test("el", "SimpleSpeak", expr, "το σύνολο 12")?; + return Ok(()); + +} + +#[test] +fn multiple_element_set() -> Result<()> { + let expr = " + { 5 , 10 , 15 } + "; + test("el", "SimpleSpeak", expr, "το σύνολο 5 κόμμα, 10 κόμμα, 15")?; + return Ok(()); + +} + +#[test] +fn set_with_colon() -> Result<()> { + let expr = " + { x:x>2 } + "; + test("el", "SimpleSpeak", expr, "το σύνολο όλων των x τέτοια ώστε x είναι μεγαλύτερο από 2")?; + return Ok(()); + +} + +#[test] +fn set_with_bar() -> Result<()> { + let expr = " + { x|x>2 } + "; + test("el", "SimpleSpeak", expr, "το σύνολο όλων των x τέτοια ώστε x είναι μεγαλύτερο από 2")?; // το σύνολο όλων των x τέτοια ώστε x είναι μεγαλύτερο από 2 + return Ok(()); + +} + +#[test] +fn element_alone() -> Result<()> { + let expr = " + 3+2i + "; + test("el", "SimpleSpeak", expr, "3 συν 2 i, δεν ανήκει, στους πραγματικούς αριθμούς")?; + return Ok(()); + +} + +#[test] // vivi +fn element_set() -> Result<()> { + let expr = " + x + + + "; + test("el", "SimpleSpeak", expr, "x ανήκει, στους ακέραιους αριθμούς")?; + return Ok(()); + +} + +#[test] +fn element_under_sum() -> Result<()> { + let expr = " + + + i + + + 1 + i 2 + + "; + test("el", "SimpleSpeak", expr, + "άθροισμα για i ανήκει, στους ακέραιους αριθμούς του; κλάσμα, 1 προς, i στο τετράγωνο, τέλος κλάσματος")?; + return Ok(()); + +} + +#[test] +fn complicated_set_with_colon() -> Result<()> { + let expr = " + { + x + + + : + 2 + < + x + < + 7 + } + "; + test("el", "SimpleSpeak", expr, "το σύνολο όλων των x που ανήκει, στους ακέραιους αριθμούς τέτοια ώστε 2 είναι μικρότερο από x είναι μικρότερο από 7")?; + return Ok(()); + +} + +#[test] +fn complicated_set_with_mtext() -> Result<()> { + // as of 8/5/21, parsing of "|" is problematic an element of the example, so are needed for this test + let expr = " + { + x + | + x  is an even number + } + "; + test("el", "SimpleSpeak", expr, + "το σύνολο όλων των x που ανήκει, στους φυσικούς αριθμούς τέτοια ώστε x is an even number")?; + return Ok(()); + +} diff --git a/tests/Languages/el/SimpleSpeak/subscripts.rs b/tests/Languages/el/SimpleSpeak/subscripts.rs new file mode 100644 index 000000000..8098f94d8 --- /dev/null +++ b/tests/Languages/el/SimpleSpeak/subscripts.rs @@ -0,0 +1,67 @@ +use crate::common::*; +use anyhow::Result; + +#[test] +fn msub_simple() -> Result<()> { + let expr = " x 1 "; + test_prefs("el", "SimpleSpeak", vec![("Verbosity", "Terse")], expr, "x 1")?; + test_prefs("el", "SimpleSpeak", vec![("Verbosity", "Medium")], expr, "x δείκτης 1")?; + test_prefs("el", "SimpleSpeak", vec![("Verbosity", "Verbose")], expr, "x δείκτης 1")?; + return Ok(()); + + } + +#[test] +fn msub_not_simple() -> Result<()> { + let expr = " x 1.2 "; + test_prefs("el", "SimpleSpeak", vec![("Verbosity", "Terse")], expr, "x δείκτης 1.2")?; + return Ok(()); +//theodora. fails --> converts 1.2 to 12. +// The issue is at src/prefs (set_separator, decimal_separator) + } + +#[test] +fn msubsup_not_simple() -> Result<()> { + let expr = " x 1.2 3 "; + test_prefs("el", "SimpleSpeak", vec![("Verbosity", "Terse")], expr, "x δείκτης 1.2, στον κύβο")?; + return Ok(()); +//theodora. fails --> converts 1.2 to 12, check what happens with decimals +// The issue is at src/prefs (set_separator, decimal_separator) + } + +#[test] +fn msub_simple_mi() -> Result<()> { + let expr = " x i "; + test_prefs("el", "SimpleSpeak", vec![("Verbosity", "Terse")], expr, "x δείκτης i")?; + test_prefs("el", "SimpleSpeak", vec![("Verbosity", "Verbose")], expr, "x δείκτης i")?; + return Ok(()); + +} + +#[test] +fn msub_simple_number_follows() -> Result<()> { + let expr = " x 1 102 "; + test_prefs("el", "SimpleSpeak", vec![("Verbosity", "Terse")], expr, "x 1, 10 στο τετράγωνο")?; + test_prefs("el", "SimpleSpeak", vec![("Verbosity", "Verbose")], expr, "x δείκτης 1; 10 στο τετράγωνο")?; + return Ok(()); + +} + +#[test] +fn msub_simple_non_number_follows() -> Result<()> { + let expr = " x 1 2 "; + test_prefs("el", "SimpleSpeak", vec![("Verbosity", "Terse")], expr, "x 1, στο τετράγωνο")?; + test_prefs("el", "SimpleSpeak", vec![("Verbosity", "Verbose")], expr, "x δείκτης 1, στο τετράγωνο")?; + return Ok(()); + +} + +#[test] +fn msubsup_simple() -> Result<()> { + let expr = " x 1 x,2 "; + test_prefs("el", "SimpleSpeak", vec![("Verbosity", "Terse")], expr, "x 1, x στο τετράγωνο")?; + test_prefs("el", "SimpleSpeak", vec![("Verbosity", "Verbose")], expr, "x δείκτης 1; x στο τετράγωνο")?; + return Ok(()); + +} + \ No newline at end of file diff --git a/tests/Languages/el/alphabets.rs b/tests/Languages/el/alphabets.rs new file mode 100644 index 000000000..03feea05a --- /dev/null +++ b/tests/Languages/el/alphabets.rs @@ -0,0 +1,416 @@ +/// Tests for rules shared between various speech styles: +/// * this has tests focused on the various alphabets +use crate::common::*; +use anyhow::Result; + + +#[test] +fn special_alphabet_chars() -> Result<()> { + let expr = " ,"; + test("el", "SimpleSpeak", expr, "φράκτουρ κεφαλαίο h, κόμμα; φράκτουρ κεφαλαίο c")?; + let expr = " ,"; + test("el", "SimpleSpeak", expr, "με διπλή γραφή κεφαλαίο h; κόμμα; με διπλή γραφή κεφαλαίο π")?; + let expr = " ,"; + test("el", "SimpleSpeak", expr, "καλλιγραφικό κεφαλαίο i; κόμμα; καλλιγραφικό κεφαλαίο m")?; + return Ok(()); + +} + +#[test] +fn greek() -> Result<()> { + let expr = " Α,Ω"; + test("el", "SimpleSpeak", expr, "κεφαλαίο άλφα, κόμμα; κεφαλαίο ωμέγα")?; + let expr = " α,ω"; + test("el", "SimpleSpeak", expr, "άλφα κόμμα, ωμέγα")?; + // MathType private space versions + let expr = " ,"; + test("el", "SimpleSpeak", expr, "διπλής γραφής κεφαλαίο δέλτα; κόμμα; διπλής γραφής κεφαλαίο ύψιλον")?; + let expr = " α,ω"; + test("el", "SimpleSpeak", expr, "άλφα κόμμα, ωμέγα")?; + return Ok(()); + +} + +#[test] +fn cap_cyrillic() -> Result<()> { + let expr = " А,Я"; + test("el", "SimpleSpeak", expr, "κεφαλαίο α, κόμμα; κεφαλαίο γιά")?; + return Ok(()); + +} + +#[test] +fn parenthesized() -> Result<()> { + let expr = " ,"; + test("el", "SimpleSpeak", expr, "εντός παρενθέσεων a, κόμμα; εντός παρενθέσεων z")?; + return Ok(()); + +} + +#[test] +fn circled() -> Result<()> { + let expr = " ,"; + test("el", "SimpleSpeak", expr, "κυκλωμένο κεφαλαίο A, κόμμα; κυκλωμένο κεφαλαίο z")?; + let expr = " 🅐,🅩"; + test("el", "SimpleSpeak", expr, "μαύρο κυκλωμένο κεφαλαίο A; κόμμα; μαύρο κυκλωμένο κεφαλαίο z")?; + let expr = " ,"; + test("el", "SimpleSpeak", expr, "κυκλωμένο a, κόμμα; κυκλωμένο z")?; + return Ok(()); + +} + +#[test] +fn fraktur() -> Result<()> { + let expr = " 𝔄,𝔜"; + test("el", "SimpleSpeak", expr, "φρακτούρ κεφαλαίο A, κόμμα; φρακτούρ κεφαλαίο y")?; + let expr = " 𝔞,𝔷"; + test("el", "SimpleSpeak", expr, "φρακτούρ a, κόμμα; φρακτούρ z")?; + // MathType private space versions + let expr = " ,"; + test("el", "SimpleSpeak", expr, "φρακτούρ κεφαλαίο A, κόμμα; φρακτούρ κεφαλαίο y")?; + let expr = " ,"; + test("el", "SimpleSpeak", expr, "φρακτούρ a, κόμμα; φρακτούρ z")?; + return Ok(()); + +} + +#[test] +fn bold_fraktur() -> Result<()> { + let expr = " 𝕬,𝖅"; + test("el", "SimpleSpeak", expr, "έντονο φρακτούρ κεφαλαίο A; κόμμα; έντονο φρακτούρ κεφαλαίο z")?; + let expr = " 𝖆,𝖟"; + test("el", "SimpleSpeak", expr, "έντονο φρακτούρ a, κόμμα; έντονο φρακτούρ z")?; + // MathType private space versions + let expr = " ,"; + test("el", "SimpleSpeak", expr, "έντονο φρακτούρ κεφαλαίο A; κόμμα; έντονο φρακτούρ κεφαλαίο z")?; + let expr = " ,"; + test("el", "SimpleSpeak", expr, "έντονο φρακτούρ a, κόμμα; έντονο φρακτούρ z")?; + return Ok(()); + +} + +#[test] +fn double_struck() -> Result<()> { + let expr = " 𝔸,𝕐"; + test("el", "SimpleSpeak", expr, "διπλής γραφής κεφαλαίο A; κόμμα; διπλής γραφής κεφαλαίο y")?; + let expr = " 𝕒,𝕫"; + test("el", "SimpleSpeak", expr, "διπλής γραφής a, κόμμα; διπλής γραφής z")?; + let expr = " 𝟘,𝟡"; + test("el", "SimpleSpeak", expr, "διπλής γραφής 0, κόμμα; διπλής γραφής 9")?; + // doesn't read 0 or 9 + // MathType private space versions + let expr = " ,"; + test("el", "SimpleSpeak", expr, "διπλής γραφής κεφαλαίο A; κόμμα; διπλής γραφής κεφαλαίο y")?; + let expr = " ,"; + test("el", "SimpleSpeak", expr, "διπλής γραφής a, κόμμα; διπλής γραφής z")?; + let expr = " ,"; + test("el", "SimpleSpeak", expr, "διπλής γραφής 0, κόμμα; διπλής γραφής 9")?; + return Ok(()); + +} + +#[test] +fn script() -> Result<()> { + let expr = " 𝒜,𝒵"; + test("el", "SimpleSpeak", expr, "καλλιγραφικό κεφαλαίο A; κόμμα; καλλιγραφικό κεφαλαίο z")?; + let expr = " 𝒶,𝓏"; + test("el", "SimpleSpeak", expr, "καλλιγραφικό a, κόμμα; καλλιγραφικό z")?; + // MathType private space versions + let expr = " ,"; + test("el", "SimpleSpeak", expr, "καλλιγραφικό κεφαλαίο A; κόμμα; καλλιγραφικό κεφαλαίο z")?; + let expr = " ,"; + test("el", "SimpleSpeak", expr, "καλλιγραφικό a, κόμμα; καλλιγραφικό z")?; + return Ok(()); + +} + +#[test] +fn bold_script() -> Result<()> { + let expr = " 𝓐,𝓩"; + test("el", "SimpleSpeak", expr, "έντονο καλλιγραφικό κεφαλαίο A; κόμμα; έντονο καλλιγραφικό κεφαλαίο z")?; + let expr = " 𝓪,𝔃"; + test("el", "SimpleSpeak", expr, "έντονο καλλιγραφικό a, κόμμα; έντονο καλλιγραφικό z")?; + // MathType private space versions + let expr = " ,"; + test("el", "SimpleSpeak", expr, "έντονο καλλιγραφικό κεφαλαίο A; κόμμα; έντονο καλλιγραφικό κεφαλαίο z")?; + let expr = " ,"; + test("el", "SimpleSpeak", expr, "έντονο καλλιγραφικό a, κόμμα; έντονο καλλιγραφικό z")?; + return Ok(()); + +} + +#[test] +fn bold() -> Result<()> { + let expr = " 𝐀,𝐙"; + test("el", "SimpleSpeak", expr, "έντονο κεφαλαίο A, κόμμα; έντονο κεφαλαίο z")?; + let expr = " 𝐚,𝐳"; + test("el", "SimpleSpeak", expr, "έντονο a κόμμα, έντονο z")?; + // MathType private space versions + let expr = " ,"; + test("el", "SimpleSpeak", expr, "έντονο κεφαλαίο A, κόμμα; έντονο κεφαλαίο z")?; + let expr = " ,"; + test("el", "SimpleSpeak", expr, "έντονο a κόμμα, έντονο z")?; + return Ok(()); + +} + +#[test] +fn italic() -> Result<()> { + let expr = " 𝐴,𝑍"; + test("el", "SimpleSpeak", expr, "κεφαλαίο A, κόμμα; κεφαλαίο z")?; + let expr = " 𝑎,𝑧"; + test("el", "SimpleSpeak", expr, "a κόμμα, z")?; + // MathType private space versions + let expr = " ,"; + test("el", "SimpleSpeak", expr, "κεφαλαίο A, κόμμα; κεφαλαίο z")?; + let expr = " ,"; + test("el", "SimpleSpeak", expr, "a κόμμα, z")?; + return Ok(()); + +} + +#[test] +fn sans_serif() -> Result<()> { + let expr = " 𝖠,𝖹"; + test("el", "SimpleSpeak", expr, "κεφαλαίο A, κόμμα; κεφαλαίο z")?; + let expr = " 𝖺,𝗓"; + test("el", "SimpleSpeak", expr, "a κόμμα, z")?; + // MathType private space versions + let expr = " ,"; + test("el", "SimpleSpeak", expr, "κεφαλαίο A, κόμμα; κεφαλαίο z")?; + let expr = " ,"; + test("el", "SimpleSpeak", expr, "a κόμμα, z")?; + return Ok(()); + +} + +#[test] +fn sans_serif_bold() -> Result<()> { + let expr = " 𝗔,𝗭"; + test("el", "SimpleSpeak", expr, "έντονο κεφαλαίο A, κόμμα; έντονο κεφαλαίο z")?; + let expr = " 𝗮,𝘇"; + test("el", "SimpleSpeak", expr, "έντονο a κόμμα, έντονο z")?; + // MathType private space versions + let expr = " ,"; + test("el", "SimpleSpeak", expr, "έντονο κεφαλαίο A, κόμμα; έντονο κεφαλαίο z")?; + let expr = " ,"; + test("el", "SimpleSpeak", expr, "έντονο a κόμμα, έντονο z")?; + return Ok(()); + +} + +#[test] +fn sans_serif_italic() -> Result<()> { + let expr = " 𝘈,𝘡"; + test("el", "SimpleSpeak", expr, "κεφαλαίο A, κόμμα; κεφαλαίο z")?; + let expr = " 𝘢,𝘻"; + test("el", "SimpleSpeak", expr, "a κόμμα, z")?; + // MathType private space versions + let expr = " ,"; + test("el", "SimpleSpeak", expr, "κεφαλαίο A, κόμμα; κεφαλαίο z")?; + let expr = " ,"; + test("el", "SimpleSpeak", expr, "a κόμμα, z")?; + return Ok(()); + +} + +#[test] +fn sans_serif_bold_italic() -> Result<()> { + let expr = " 𝘼,𝙕"; + test("el", "SimpleSpeak", expr, "έντονο κεφαλαίο A, κόμμα; έντονο κεφαλαίο z")?; + let expr = " 𝙖,𝙯"; + test("el", "SimpleSpeak", expr, "έντονο a κόμμα, έντονο z")?; + // MathType private space versions + let expr = " ,"; + test("el", "SimpleSpeak", expr, "έντονο κεφαλαίο A, κόμμα; έντονο κεφαλαίο z")?; + let expr = " ,"; + test("el", "SimpleSpeak", expr, "έντονο a κόμμα, έντονο z")?; + return Ok(()); + +} + +#[test] +fn monospace() -> Result<()> { + let expr = " 𝙰,𝚉"; + test("el", "SimpleSpeak", expr, "κεφαλαίο A, κόμμα; κεφαλαίο z")?; + let expr = " 𝚊,𝚣"; + test("el", "SimpleSpeak", expr, "a κόμμα, z")?; + // MathType private space versions + let expr = " ,"; + test("el", "SimpleSpeak", expr, "κεφαλαίο A, κόμμα; κεφαλαίο z")?; + let expr = " ,"; + test("el", "SimpleSpeak", expr, "a κόμμα, z")?; + return Ok(()); + +} + + +#[test] +fn bold_greek() -> Result<()> { + let expr = " 𝚨,𝛀"; + test("el", "SimpleSpeak", expr, "έντονο κεφαλαίο άλφα, κόμμα; έντονο κεφαλαίο ωμέγα")?; + let expr = " 𝛂,𝛚"; + test("el", "SimpleSpeak", expr, "έντονο άλφα, κόμμα; έντονο ωμέγα")?; + // MathType private space versions + let expr = " ,"; + test("el", "SimpleSpeak", expr, "έντονο κεφαλαίο άλφα, κόμμα; έντονο κεφαλαίο ωμέγα")?; + let expr = " ,"; + test("el", "SimpleSpeak", expr, "έντονο άλφα, κόμμα; έντονο ωμέγα")?; + return Ok(()); + +} + +#[test] +fn bold_greek_others() -> Result<()> { + let expr = " 𝛛,𝛡"; + test("el", "SimpleSpeak", expr, "έντονο μερικό διαφορικό; κόμμα, έντονο π")?; + // MathType private space versions + let expr = " ,"; + test("el", "SimpleSpeak", expr, "έντονο μερικό διαφορικό; κόμμα, έντονο π")?; + return Ok(()); + +} + + +#[test] +fn italic_greek() -> Result<()> { + let expr = " 𝛢,𝛺"; + test("el", "SimpleSpeak", expr, "κεφαλαίο άλφα, κόμμα; κεφαλαίο ωμέγα")?; + let expr = " 𝛼,𝜔"; + test("el", "SimpleSpeak", expr, "άλφα κόμμα, ωμέγα")?; + // MathType private space versions + let expr = " ,"; + test("el", "SimpleSpeak", expr, "κεφαλαίο άλφα, κόμμα; κεφαλαίο ωμέγα")?; + let expr = " ,"; + test("el", "SimpleSpeak", expr, "άλφα κόμμα, ωμέγα")?; + return Ok(()); + +} + +#[test] +fn italic_greek_others() -> Result<()> { + let expr = " 𝜕,𝜛"; + test("el", "SimpleSpeak", expr, "μερικό διαφορικό, κόμμα, π")?; + // MathType private space versions + let expr = " ,"; + test("el", "SimpleSpeak", expr, "μερικό διαφορικό, κόμμα, π")?; + return Ok(()); + +} + +#[test] +fn bold_italic_greek() -> Result<()> { + let expr = " 𝜜,𝜴"; + test("el", "SimpleSpeak", expr, "έντονο κεφαλαίο άλφα, κόμμα; έντονο κεφαλαίο ωμέγα")?; + let expr = " 𝜶,𝝎"; + test("el", "SimpleSpeak", expr, "έντονο άλφα, κόμμα; έντονο ωμέγα")?; + // MathType private space versions + let expr = " ,"; + test("el", "SimpleSpeak", expr, "έντονο κεφαλαίο άλφα, κόμμα; έντονο κεφαλαίο ωμέγα")?; + let expr = " ,"; + test("el", "SimpleSpeak", expr, "έντονο άλφα, κόμμα; έντονο ωμέγα")?; + return Ok(()); + +} + +#[test] +fn bold_italic_greek_others() -> Result<()> { + let expr = " 𝝏,𝝕"; + test("el", "SimpleSpeak", expr, "έντονο μερικό διαφορικό; κόμμα, έντονο π")?; + // MathType private space versions + let expr = " ,"; + test("el", "SimpleSpeak", expr, "έντονο μερικό διαφορικό; κόμμα, έντονο π")?; + return Ok(()); + +} + +#[test] +fn sans_serif_bold_greek() -> Result<()> { + let expr = " 𝝖,𝝮"; + test("el", "SimpleSpeak", expr, "έντονο κεφαλαίο άλφα, κόμμα; έντονο κεφαλαίο ωμέγα")?; + let expr = " 𝝰,𝞈"; + test("el", "SimpleSpeak", expr, "έντονο άλφα, κόμμα; έντονο ωμέγα")?; + // MathType private space versions + let expr = " ,"; + test("el", "SimpleSpeak", expr, "έντονο κεφαλαίο άλφα, κόμμα; έντονο κεφαλαίο ωμέγα")?; + let expr = " ,"; + test("el", "SimpleSpeak", expr, "έντονο άλφα, κόμμα; έντονο ωμέγα")?; + return Ok(()); + +} + +#[test] +fn sans_serif_bold_greek_others() -> Result<()> { + let expr = " 𝞉,𝞏"; + test("el", "SimpleSpeak", expr, "έντονο μερικό διαφορικό; κόμμα, έντονο π")?; + // MathType private space versions + let expr = " ,"; + test("el", "SimpleSpeak", expr, "έντονο μερικό διαφορικό; κόμμα, έντονο π")?; + return Ok(()); + +} + +#[test] +fn sans_serif_bold_italic_greek() -> Result<()> { + let expr = " 𝞐,𝞨"; + test("el", "SimpleSpeak", expr, "έντονο κεφαλαίο άλφα, κόμμα; έντονο κεφαλαίο ωμέγα")?; + let expr = " 𝞪,𝟂"; + test("el", "SimpleSpeak", expr, "έντονο άλφα, κόμμα; έντονο ωμέγα")?; + // MathType private space versions + let expr = " ,"; + test("el", "SimpleSpeak", expr, "έντονο κεφαλαίο άλφα, κόμμα; έντονο κεφαλαίο ωμέγα")?; + let expr = " ,"; + test("el", "SimpleSpeak", expr, "έντονο άλφα, κόμμα; έντονο ωμέγα")?; + return Ok(()); + +} + +#[test] +fn sans_serif_bold_italic_greek_others() -> Result<()> { + let expr = " 𝟃,𝟉"; + test("el", "SimpleSpeak", expr, "έντονο μερικό διαφορικό; κόμμα, έντονο π")?; + // MathType private space versions + let expr = " ,"; + test("el", "SimpleSpeak", expr, "έντονο μερικό διαφορικό; κόμμα, έντονο π")?; + return Ok(()); + +} + +#[test] +fn pua_regular() -> Result<()> { + let expr = " ,"; + test("el", "SimpleSpeak", expr, "κεφαλαίο A, κόμμα; κεφαλαίο z")?; + return Ok(()); + +} + +#[test] +fn turned() -> Result<()> { + let expr = " ,"; + test("el", "SimpleSpeak", expr, "ανάποδο κεφαλαίο f, κόμμα; ανάποδο χωρίς σέριφ κεφαλαίο y")?; + return Ok(()); + + } + +#[test] +fn unicode_typo_regressions() -> Result<()> { + test("el", "SimpleSpeak", "", "εις την i οστή δύναμη")?; + test("el", "SimpleSpeak", "", "σύνοδος")?; + Ok(()) +} + +#[test] +fn enclosed_numbers() -> Result<()> { + let expr = " ,"; + test("el", "SimpleSpeak", expr, "κυκλωμένο 1, κόμμα; κυκλωμένο 9")?; + let expr = " ,"; + test("el", "SimpleSpeak", expr, "κυκλωμένο μαύρο ένα, κόμμα; κυκλωμένος αριθμός πενήντα")?; + let expr = " ,"; + test("el", "SimpleSpeak", expr, "εντός παρενθέσεων 1, κόμμα; εντός παρενθέσεων 9")?; + let expr = " ,"; + test("el", "SimpleSpeak", expr, "1 με τελεία, κόμμα; 9 με τελεία")?; + let expr = " ,"; + test("el", "SimpleSpeak", expr, "διπλά κυκλωμένο 1, κόμμα; διπλά κυκλωμένο 9")?; + return Ok(()); + +} diff --git a/tests/Languages/el/chemistry.rs b/tests/Languages/el/chemistry.rs new file mode 100644 index 000000000..ae9908388 --- /dev/null +++ b/tests/Languages/el/chemistry.rs @@ -0,0 +1,769 @@ +/// Tests for rules shared between various speech styles: +/// * modified var +use crate::common::*; +use anyhow::Result; + +#[test] +fn salt() -> Result<()> { + let expr = "NaCl"; + test_prefs("el", "SimpleSpeak", vec![("Verbosity", "Terse")], expr, "κεφαλαίο n a; κεφαλαίο c l")?; + return Ok(()); + +} + +#[test] +fn water() -> Result<()> { + let expr = "H2O"; + test_prefs("el", "ClearSpeak", vec![("Verbosity", "Terse")], expr, "κεφαλαίο h, 2, κεφαλαίο o")?; + test_prefs("el", "ClearSpeak", vec![("Verbosity", "Medium")], expr, "κεφαλαίο h, κάτω 2, κεφαλαίο o")?; + test_prefs("el", "ClearSpeak", vec![("Verbosity", "Verbose")], expr, "κεφαλαίο h, κάτω δείκτης 2; κεφαλαίο o")?; + return Ok(()); + +} + +#[test] +fn carbon() -> Result<()> { + let expr = "C"; // not enough to trigger recognition + test_prefs("el", "SimpleSpeak", vec![("Verbosity", "Terse")], expr, "κεφαλαίο c")?; + return Ok(()); + +} + +#[test] +fn sulfate() -> Result<()> { + let expr = " + [SO4] + 2 + "; + test_prefs("el", "ClearSpeak", vec![("Verbosity", "Medium")], expr, "ανοίγει αγκύλη; κεφαλαίο s; κεφαλαίο o, κάτω 4; κλείνει αγκύλη άνω 2 μείον")?; + return Ok(()); + +} + +#[test] +fn aluminum_sulfate() -> Result<()> { + let expr = "Al2 + (SO4)3"; + test_prefs("el", "ClearSpeak", vec![("Verbosity", "Terse")], expr, "κεφαλαίο A l, 2; άνοιγμα, κεφαλαίο s; κεφαλαίο o, 4; κλείσιμο 3")?; + test_prefs("el", "ClearSpeak", vec![("Verbosity", "Medium")], expr, "κεφαλαίο A l, κάτω 2; ανοίγει παρένθεση; κεφαλαίο s; κεφαλαίο o, κάτω 4; κλείνει παρένθεση κάτω 3")?; + test_prefs("el", "ClearSpeak", vec![("Verbosity", "Verbose")], expr, "κεφαλαίο A l, κάτω δείκτης 2; ανοίγει παρένθεση; κεφαλαίο s; κεφαλαίο o, κάτω δείκτης 4; κλείνει παρένθεση κάτω δείκτης 3")?; + return Ok(()); + +} + +#[test] +fn ethanol_bonds() -> Result<()> { + let expr = " + + C + H 3 + + C + H 2 + + O + H + + "; + test_prefs("el", "ClearSpeak", vec![("Verbosity", "Terse")], expr, "κεφαλαίο c; κεφαλαίο h, 3, απλός δεσμός, κεφαλαίο c; κεφαλαίο h, 2, απλός δεσμός, κεφαλαίο o; κεφαλαίο h")?; + + return Ok(()); + +} + +#[test] +fn dichlorine_hexoxide() -> Result<()> { + let expr = " + + [ClO2] + + + + + [ClO4] + - + + "; + test_prefs("el", "SimpleSpeak", vec![("Verbosity", "Terse")], + expr, "ανοίγει αγκύλη; κεφαλαίο c l; κεφαλαίο o, 2; κλείνει αγκύλη συν; \ + ανοίγει αγκύλη; κεφαλαίο c l; κεφαλαίο o, 4; κλείνει αγκύλη μείον")?; + test_prefs("el", "SimpleSpeak", vec![("Verbosity", "Medium")], + expr, "ανοίγει αγκύλη; κεφαλαίο c l; κεφαλαίο o, κάτω 2; κλείνει αγκύλη άνω συν; \ + ανοίγει αγκύλη; κεφαλαίο c l; κεφαλαίο o, κάτω 4; κλείνει αγκύλη άνω μείον")?; + test_prefs("el", "SimpleSpeak", vec![("Verbosity", "Verbose")], + expr, "ανοίγει αγκύλη; κεφαλαίο c l; κεφαλαίο o, κάτω δείκτης 2; κλείνει αγκύλη άνω δείκτης συν; \ + ανοίγει αγκύλη; κεφαλαίο c l; κεφαλαίο o, κάτω δείκτης 4; κλείνει αγκύλη άνω δείκτης μείον")?; + return Ok(()); + +} + + +#[test] +fn ethylene_with_bond() -> Result<()> { + let expr = " + H2C + = + CH2 + "; + test_prefs("el", "SimpleSpeak", vec![("Verbosity", "Terse")], expr, "κεφαλαίο h, 2, κεφαλαίο c; διπλός δεσμός, κεφαλαίο c; κεφαλαίο h, 2")?; + return Ok(()); + +} + +#[test] +fn ferric_chloride_aq() -> Result<()> { + let expr = " + Fe + Cl3 + (aq) + "; + test_prefs("el", "SimpleSpeak", vec![("Verbosity", "Terse")], expr, "κεφαλαίο f e; κεφαλαίο c l, 3, υδατικό")?; + return Ok(()); + + } + +#[test] +fn ethylene_with_colon_bond() -> Result<()> { + let expr = " + H2C + :: + CH2 + "; + test_prefs("el", "SimpleSpeak", vec![("Verbosity", "Terse")], expr, "κεφαλαίο h, 2, κεφαλαίο c; διπλός δεσμός, κεφαλαίο c; κεφαλαίο h, 2")?; + return Ok(()); + +} + +#[test] +fn beta_decay() -> Result<()> { + let expr = " + + C + + 6 + 14 + + + + N + + 7 + 14 + + + + + e + + + + 1 + + 0 + + "; + test_prefs("el", "ClearSpeak", vec![("Verbosity", "Terse")], expr, + "14, 6, κεφαλαίο c; σχηματίζουν; 14, 7, κεφαλαίο n; συν 0, μείον 1, e")?; + test_prefs("el", "ClearSpeak", vec![("Verbosity", "Medium")], expr, + "άνω 14, κάτω 6, κεφαλαίο c; αντιδρούν για να σχηματίσουν; άνω 14, κάτω 7, κεφαλαίο n; συν, άνω 0, κάτω μείον 1, e")?; + test_prefs("el", "ClearSpeak", vec![("Verbosity", "Verbose")], expr, + "άνω δείκτης 14, κάτω δείκτης 6, κεφαλαίο c; αντιδρούν για να σχηματίσουν; άνω δείκτης 14, κάτω δείκτης 7, κεφαλαίο n; συν, άνω δείκτης 0, κάτω δείκτης μείον 1, e")?; + return Ok(()); + +} + +#[test] +fn mhchem_beta_decay() -> Result<()> { + let expr = " + + + + + + + A + + + + + + + + + 6 + + + + + + + + + 14 + + + + + + + + + + + + A + + + + + + + + + 2 + + + + + + + + 6 + + + + + + + + + + + + 2 + + + + + + + + 14 + + + + + + C + + + + + + + + + + + + A + + + + + + + + + 7 + + + + + + + + + 14 + + + + + + + + + + + + A + + + + + + + + + 2 + + + + + + + + 7 + + + + + + + + + + + + 2 + + + + + + + + 14 + + + + + + N + + + + + + + + + + + A + + + + + + + + + + 1 + + + + + + + + + 0 + + + + + + + + + + + + A + + + + + + + + + 2 + + + + + + + + + 1 + + + + + + + + + + + + 2 + + + + + + + + 0 + + + + + + e + + + "; + test_prefs("el", "ClearSpeak", vec![("Verbosity", "Terse")], expr, + "14, 6, κεφαλαίο c; σχηματίζουν; 14, 7, κεφαλαίο n; συν 0, μείον 1, e")?; + test_prefs("el", "ClearSpeak", vec![("Verbosity", "Medium")], expr, + "άνω 14, κάτω 6, κεφαλαίο c; αντιδρούν για να σχηματίσουν; άνω 14, κάτω 7, κεφαλαίο n; συν, άνω 0, κάτω μείον 1, e")?; + test_prefs("el", "ClearSpeak", vec![("Verbosity", "Verbose")], expr, + "άνω δείκτης 14, κάτω δείκτης 6, κεφαλαίο c; αντιδρούν για να σχηματίσουν; άνω δείκτης 14, κάτω δείκτης 7, κεφαλαίο n; συν, άνω δείκτης 0, κάτω δείκτης μείον 1, e")?; + return Ok(()); + +} + +#[test] +fn hcl_na_yields() -> Result<()> { + let expr = " + 2HCl+2Na + + 2NaCl+ + H 2 + + "; + test_prefs("el", "SimpleSpeak", vec![("Verbosity", "Verbose")], expr, + "2, κεφαλαίο h; κεφαλαίο c l; συν, 2 κεφαλαίο n a; αντιδρούν για να σχηματίσουν; 2, κεφαλαίο n a; κεφαλαίο c l; συν, κεφαλαίο h, κάτω δείκτης 2")?; + return Ok(()); + +} + +#[test] +fn mhchem_so4_2plus() -> Result<()> { + let expr = " + + + SO + + + + + + + A + + + + + + + + 4 + + + + + + + + + + A + + + + + + 2 + + + + + + "; + test_prefs("el", "SimpleSpeak", vec![("Verbosity", "Terse")], expr, "κεφαλαίο s; κεφαλαίο o, 4, 2 συν")?; + test_prefs("el", "SimpleSpeak", vec![("Verbosity", "Medium")], expr, "κεφαλαίο s; κεφαλαίο o, κάτω 4, άνω 2 συν")?; + test_prefs("el", "SimpleSpeak", vec![("Verbosity", "Verbose")], expr, "κεφαλαίο s; κεφαλαίο o, κάτω δείκτης 4, άνω δείκτης 2 συν")?; + return Ok(()); + +} + + +#[test] +fn mhchem_hcl_aq_etc() -> Result<()> { + let expr = " + + 2 + + + + + HCl + + + ( + + aq + + ) + + + + + 2 + + + + + Na + + + ( + + s + + ) + + + + + + 2 + + + + + NaCl + + + ( + + aq + + ) + + + + + + H + + + + + + + A + + + + + + + + 2 + + + + + + ( + + g + + ) + + "; + test_prefs("el", "SimpleSpeak", vec![("Verbosity", "Terse")], + expr, "2; κεφαλαίο h; κεφαλαίο c l; υδατικό; συν, 2, κεφαλαίο n a; στερεό; σχηματίζουν; 2; κεφαλαίο n a; κεφαλαίο c l; υδατικό; συν, κεφαλαίο h, 2; αέριο")?; + + return Ok(()); + +} + + +#[test] +fn mhchem_barbed_equilibrium() -> Result<()> { + let expr = " + + + + H + 2 + + + + + ( + g + ) + + + + + + + + I + 2 + + + + + ( + g + ) + + + + + + + - + + + - + + + + + 2 + + + H + + I + + + ( + g + ) + + + + + "; + test_prefs("el", "SimpleSpeak", vec![("Verbosity", "Terse")], + expr, "κεφαλαίο h, 2; αέριο; συν; κεφαλαίο i, 2; αέριο; είναι σε ισορροπία μετατοπισμένη προς τα αριστερά με το; 2; κεφαλαίο h; κεφαλαίο i; αέριο")?; + return Ok(()); + +} + + + +#[test] +fn mhchem_roman_in_superscript() -> Result<()> { + let expr = " + + + Fe + + II + + + + Fe + + III + + + + O + 4 + + + + "; + test_prefs("el", "SimpleSpeak", vec![("Verbosity", "Terse")], + expr, "κεφαλαίο f e, 2; κεφαλαίο f e, 3; κεφαλαίο o, 4")?; + return Ok(()); + +} + + +#[test] +fn dropped_msubsup_bug_358() -> Result<()> { + let expr = r#" + + + 2 + + + SO + + 2 + + + + + + + + + O + + 2 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 2 + + + SO + + 3 + + + + + + + + "#; + test_prefs("el", "SimpleSpeak", vec![("Verbosity", "Terse")], + expr, "2, κεφαλαίο s; κεφαλαίο o, 2; συν; κεφαλαίο o, 2; είναι σε ισορροπία μετατοπισμένη προς τα αριστερά με το; 2, κεφαλαίο s; κεφαλαίο o, 3")?; + return Ok(()); + +} + + diff --git a/tests/Languages/el/difficult_greek.rs b/tests/Languages/el/difficult_greek.rs new file mode 100644 index 000000000..4ae705ff7 --- /dev/null +++ b/tests/Languages/el/difficult_greek.rs @@ -0,0 +1,2305 @@ +use crate::common::*; +use anyhow::Result; + +#[test] +fn one() -> Result<()> { + let expr = r#" + + ln + χ + = + 2 + { + + + ( + + + χ + + 1 + + + χ + + + 1 + + + ) + + + + + + + 1 + 3 + + + + + ( + + + χ + + 1 + + + χ + + + 1 + + + ) + + 3 + + + + + + + 1 + 5 + + + + + ( + + + χ + + 1 + + + χ + + + 1 + + + ) + + 5 + + + + + + + } + + + "#; + test("el", "ClearSpeak", expr, "l n χ, ισούται με; 2; ανοίγει άγκιστρο; ανοίγει παρένθεση; το κλάσμα με αριθμητή; χ μείον 1; και παρονομαστή χ συν 1; κλείνει παρένθεση; συν; 1 τρίτο; ανοίγει παρένθεση; το κλάσμα με αριθμητή; χ μείον 1; και παρονομαστή χ συν 1; κλείνει παρένθεση στον κύβο; συν; 1 πέμπτο; ανοίγει παρένθεση; το κλάσμα με αριθμητή; χ μείον 1; και παρονομαστή χ συν 1; κλείνει παρένθεση στην πέμπτη δύναμη; συν αποσιωπητικά; κλείνει άγκιστρο")?; + return Ok(()); + +} + + +#[test] +fn two() -> Result<()> { + let expr = r#"sin2ν1Α=(1)ν122ν2{sin(2ν1)Α(2ν11)sin(2ν3)Α+(1)ν1(2ν1ν1)sinΑ}"#; + test("el", "ClearSpeak", expr, "η 2 νί, μείον 1 δύναμη του, ημίτονο; του κεφαλαίο άλφα; ισούται με; το κλάσμα με αριθμητή; ανοίγει παρένθεση, μείον 1, κλείνει παρένθεση υψωμένο στην νί μείον 1 τέλος δύναμης; και παρονομαστή 2 υψωμένο στην 2 νί, μείον 2 τέλος δύναμης; ανοίγει άγκιστρο; ημίτονο του; ανοίγει παρένθεση; 2 νί, μείον 1; κλείνει παρένθεση; κεφαλαίο άλφα; μείον; ανοίγει παρένθεση; το κλάσμα με αριθμητή; 2 νί, μείον 1; και παρονομαστή 1; κλείνει παρένθεση; ημίτονο του; ανοίγει παρένθεση; 2 νί, μείον 3; κλείνει παρένθεση; κεφαλαίο άλφα; συν αποσιωπητικά; ανοίγει παρένθεση, μείον 1, κλείνει παρένθεση υψωμένο στην νί μείον 1 τέλος δύναμης; ανοίγει παρένθεση; το κλάσμα με αριθμητή; 2 νί, μείον 1; και παρονομαστή νί μείον 1; κλείνει παρένθεση; ημίτονο κεφαλαίο άλφα; κλείνει άγκιστρο")?; + return Ok(()); + + +} + +#[test] +fn three() -> Result<()> { + let expr = r#" + + + + + Β + Τ + + 1 + , + π + ( + τ + ) + + + + = + + + + Β + ˜ + + Τ + + 1 + , + π + ( + τ + ) + + + + + + + + Ν + + + + + "#; + test("el", "ClearSpeak", expr, "κεφαλαίο βήτα δείκτης, κεφαλαίο τάαφ, υψωμένο στην 1 κόμμα; π του τάαφ τέλος δύναμης; ισούται με; κεφαλαίο βήτα κυματοειδής γραμμή, δείκτης, κεφαλαίο τάαφ, υψωμένο στην 1 κόμμα; π του τάαφ τέλος δύναμης; κυκλωμένο συν; οι πραγματικοί αριθμοί στην κεφαλαίο νί οστή δύναμη")?; + return Ok(()); + +} + +#[test] +fn four() -> Result<()> { + let expr = r#" + + + + + + w + s + e + p + , + 1 + + + μ + + κ + + + + = + + { + + + + ( + + + ε + , + + + + { + + + ε + + + ξ + + } + + + + ξ + = + 1 + + + μ + + + + ) + + + + + + + w + s + e + p + + + μ + + κ + + + + : + + + + + ε + 2 + + + + + + ε + μ + + + + + + + + + + 0 + + + + } + + + + "#; + test("el", "ClearSpeak", expr, "φράκτουρ κεφαλαίο i δείκτης, wsep κόμμα, 1 τέλος δείκτη, υψωμένο στην μί κυματοειδής γραμμή, καπα τέλος δύναμης; ισούται με; το σύνολο όλων των ανοίγει παρένθεση; έψιλον κόμμα; ανοίγει άγκιστρο; έψιλον τόνος, δείκτης ξ; κλείνει άγκιστρο δείκτης, ξ ισούται με 1 τέλος δείκτη, στην μί οστή δύναμη; κλείνει παρένθεση; ανήκει; φράκτουρ κεφαλαίο i δείκτης wsep τέλος δείκτη, υψωμένο στην μί κυματοειδής γραμμή, καπα τέλος δύναμης τέτοια ώστε το κλάσμα με αριθμητή; έψιλον στο τετράγωνο; και παρονομαστή έψιλον με 2 μετατεταγμένα μέρη, δείκτης μί εκθέτης τόνος; βέλος προς τα δεξιά 0")?; + return Ok(()); + +} + +#[test] +fn five() -> Result<()> { + let expr = r#" + + + + Β + + + + δ + 0 + + + 1 + , + η + + + + + λ + 2 + + + 2 + μ + , + 0 + + + + ( + + + + ε + + + γ + τ + + + + , + + + Κ + + + + + ) + + + + + Β + + + + δ + 1 + + , + η + + + + + λ + 2 + + + 2 + μ + , + 0 + + + + ( + + + + ε + + + γ + τ + + + + , + + + Κ + + + + + ) + + + + "#; + test("el", "ClearSpeak", expr, "κεφαλαίο βήτα δείκτης; δέλτα δείκτης 0; μείον 1; κόμμα, ήτα τέλος δείκτη, υψωμένο στην λάμδα δείκτης 2; μείον 2 μί; κόμμα, 0 τέλος δύναμης; ανοίγει παρένθεση έψιλον υψωμένο στην μείον γάμμα τάαφ τέλος δύναμης, κόμμα κεφαλαίο καπα δείκτης άπειρο, κλείνει παρένθεση; είναι ένα υποσύνολο του; κεφαλαίο βήτα δείκτης; δέλτα δείκτης 1; κόμμα, ήτα τέλος δείκτη, υψωμένο στην λάμδα δείκτης 2; μείον 2 μί; κόμμα, 0 τέλος δύναμης; ανοίγει παρένθεση έψιλον υψωμένο στην μείον γάμμα, τάαφ τέλος δύναμης, κόμμα κεφαλαίο καπα δείκτης άπειρο; κλείνει παρένθεση")?; + return Ok(()); + //theodora. fails. recognizes parenthesis as an interval but it is not. + //Now reads: κεφαλαίο βήτα δείκτης; δέλτα δείκτης 0; μείον 1; κόμμα, ήτα τέλος δείκτη, υψωμένο στην λάμδα δείκτης 2; μείον 2 μί; κόμμα, 0 τέλος δύναμης; το διάστημα από έψιλον υψωμένο στην μείον γάμμα, τάαφ τέλος δύναμης ως κεφαλαίο καπα δείκτης άπειρο; δεν περιέχει έψιλον υψωμένο στην μείον γάμμα, τάαφ τέλος δύναμης ή κεφαλαίο καπα δείκτης άπειρο; είναι ένα υποσύνολο του; κεφαλαίο βήτα δείκτης; δέλτα δείκτης 1; κόμμα, ήτα τέλος δείκτη, υψωμένο στην λάμδα δείκτης 2; μείον 2 μί; κόμμα, 0 τέλος δύναμης; το διάστημα από έψιλον υψωμένο στην μείον γάμμα, τάαφ τέλος δύναμης ως κεφαλαίο καπα δείκτης άπειρο; δεν περιέχει έψιλον υψωμένο στην μείον γάμμα, τάαφ τέλος δύναμης ή κεφαλαίο καπα δείκτης άπειρο +} + +#[test] +fn six() -> Result<()> { + let expr = r#" + + + + α + + 1 + , + 1 + + + + + + + + α + + 2 + , + 2 + + + + + + "#; + test("el", "ClearSpeak", expr, "άλφα στην 1,1 δύναμη, συν άλφα στην 2,2 δύναμη")?; + return Ok(()); + //theodora. For some reason in en it expicitely reads the comma: alpha raised to the 1 comma, 1 power; plus, alpha raised to the 2 comma, 2 power + //listened to the example using NVDA, no issues occur with plain "," but I am not sure if it was supposed to appear in greek tests too. + + } + +#[test] +fn seven() -> Result<()> { + let expr = r#" + + + + ε + 1 + + + = + + { + + + + ε + + , + + { + + + + + ε + + 0 + , + 2 + + + + , + + + ε + + 0 + , + 5 + + + + , + + ε + + , + + + ε + + 1 + , + 2 + + + + , + + + + + ε + + 1 + , + 5 + + + + + + | + log + ε + | + + + + + + } + + + + } + + + + "#; + test("el", "ClearSpeak", expr, "έψιλον δείκτης 1; ισούται με; το σύνολο έψιλον κόμμα; το σύνολο έψιλον στην 0,2 δύναμη, κόμμα; έψιλον στην 0,5 δύναμη, κόμμα, έψιλον κόμμα; έψιλον στην 1,2 δύναμη, κόμμα; το κλάσμα με αριθμητή; έψιλον στην 1,5 δύναμη; και παρονομαστή απόλυτη τιμή του λογάριθμος, έψιλον")?; + return Ok(()); + +} + +#[test] +fn eight() -> Result<()> { + let expr = r#" + + + ( + + + + + + + Σ + + 1 + , + 1 + + + + + + + Σ + + 1 + , + 2 + + + + + + + + + Σ + + 2 + , + 1 + + + + + + + Σ + + 2 + , + 2 + + + + + + + + ) + + + + "#; + test("el", "ClearSpeak", expr, "2 επί 2 πίνακας; γραμμή 1; στήλη 1; κεφαλαίο σίγμα δείκτης 1,1; στήλη 2; κεφαλαίο σίγμα δείκτης 1,2; γραμμή 2; στήλη 1; κεφαλαίο σίγμα δείκτης 2,1; στήλη 2; κεφαλαίο σίγμα δείκτης 2,2")?; + return Ok(()); + + +} + +#[test] +fn nine() -> Result<()> { + let expr = r#" + + + [ + + + + ( + + + + + + + Χ + 1 + + + + + 0 + + + + + + + + + + Σ + + 2 + , + 1 + + + + + Σ + + 1 + , + 1 + + + + 1 + + + + + Χ + 1 + + + + + + + Χ + 2 + + + + + + + ) + + + + + ( + + + + + + + β + 1 + + + + + + + + β + 2 + + + + + + + ) + + + , + + + + ( + + + + + + + Σ + + 1 + , + 1 + + + + + + 0 + + + + + + 0 + + + + + Σ + + 22.1 + + + + + + + + ) + + + ] + + + + "#; + test("el", "ClearSpeak", expr, "ανοίγει αγκύλη; 2 επί 2 πίνακας; γραμμή 1; στήλη 1; κεφαλαίο χ δείκτης 1; στήλη 2; 0; γραμμή 2; στήλη 1; μείον κεφαλαίο σίγμα δείκτης 2,1; κεφαλαίο σίγμα δείκτης 1,1, στην μείον 1 δύναμη; κεφαλαίο χ δείκτης 1; στήλη 2; κεφαλαίο χ δείκτης 2; 2 επί ένα πίνακας-στήλη; γραμμή 1; βήτα δείκτης 1; γραμμή 2; βήτα δείκτης 2; κόμμα; ο 2 επί 2 διαγώνιος πίνακας; στήλη 1; κεφαλαίο σίγμα δείκτης 1,1; στήλη 2; κεφαλαίο σίγμα δείκτης 22.1; κλείνει αγκύλη")?; + return Ok(()); + // theodora. now reads: ανοίγει αγκύλη; 2 επί 2 πίνακας; γραμμή 1; στήλη 1; κεφαλαίο χ δείκτης 1; στήλη 2; 0; γραμμή 2; στήλη 1; μείον κεφαλαίο σίγμα δείκτης 2,1; κεφαλαίο σίγμα δείκτης 1,1, στην μείον 1 δύναμη; κεφαλαίο χ δείκτης 1; στήλη 2; κεφαλαίο χ δείκτης 2; 2 επί ένα πίνακας-στήλη; γραμμή 1; βήτα δείκτης 1; γραμμή 2; βήτα δείκτης 2; κόμμα; 2 επί 2 διαγώνιος πίνακας; στήλη 1; κεφαλαίο σίγμα δείκτης 1,1; στήλη 2; κεφαλαίο σίγμα δείκτης 221; κλείνει αγκύλη + // converts 22.1 --> 221 + // Issue is at src/prefs (set_separator, decimal_separator) + +} + +#[test] +fn ten() -> Result<()> { + let expr = r#" + + + max + + { + + + 1 + , + 2 + , + 3 + + + } + + + + "#; + test("el", "ClearSpeak", expr, "μέγιστο του, συνόλου 1 κόμμα, 2 κόμμα, 3")?; + return Ok(()); + +} + + +#[test] +fn eleven() -> Result<()> { + let expr = r#"φ(Φσκ)=φ(Φσκ)φκ(Φσκ)0+φκ(Φσκ)χκχ"#; + test("el", "ClearSpeak", expr, "φ του; ανοίγει παρένθεση; κεφαλαίο φ δείκτης σίγμα, στην καπα οστή δύναμη; κλείνει παρένθεση; ισούται με; παράσταση παράσταση φ του; ανοίγει παρένθεση; κεφαλαίο φ δείκτης σίγμα, στην καπα οστή δύναμη; κλείνει παρένθεση; μείον; φ δείκτης καπα; του; ανοίγει παρένθεση; κεφαλαίο φ δείκτης σίγμα, στην καπα οστή δύναμη; κλείνει παρένθεση με κάτω άγκιστρο από κάτω με ζεύγος βελών προς τα δεξιά 0 από κάτω; συν; παράσταση παράσταση φ δείκτης καπα; του; ανοίγει παρένθεση; κεφαλαίο φ δείκτης σίγμα, στην καπα οστή δύναμη; κλείνει παρένθεση με κάτω άγκιστρο από κάτω με χ στην καπα οστή δύναμη από κάτω; βέλος προς τα δεξιά χ")?; + return Ok(()); + +} + +#[test] +fn twelve() -> Result<()> { + let expr = r#" + + + + Γ + 2 + + + [ + + + 0 + , + 1 + + + ] + + + + "#; + test("el", "ClearSpeak", expr, "κεφαλαίο γάμμα στο τετράγωνο; το διάστημα από 0 ως 1, περιέχει 0 και 1")?; + return Ok(()); + +} + +#[test] +fn thirteen() -> Result<()> { + let expr = r#" + + + η + + : + + ( + + 0 + , + 1 + + ) + + + + [ + + 0 + , + + + ) + + + + "#; + test("el", "ClearSpeak", expr, "ήτα άνω κάτω τελεία; ανοίγει παρένθεση; 0 κόμμα, 1, κλείνει παρένθεση; βέλος προς τα δεξιά; το διάστημα από 0 ως άπειρο, περιέχει 0")?; + return Ok(()); + +} + +#[test] +fn fourteen() -> Result<()> { + let expr = r#" + + + + + + + { + + + + + + + Μ + + + ( + + + + + Χ + 0 + + + + 0 + Χ + + + + + ) + + + + + + [ + + + + ( + + + + + + + σ + + 1 + , + 0 + + 2 + + + + + + γ + 0 + + + + + + + + γ + 0 + + + + + + σ + + 2 + , + 0 + + 2 + + + + + + + ) + + + + + Ι + ν + + + + + ] + + + + + Μ + + + ( + + + + + Χ + 0 + + + + 0 + Χ + + + + + ) + + + + + + + } + + + + + + + + + + + "#; + test("el", "ClearSpeak", expr, "το σύνολο κεφαλαίο μί δείκτης; ο 2 επί 2 διαγώνιος πίνακας; στήλη 1; κεφαλαίο χ; στήλη 2; κεφαλαίο χ; τέλος δείκτη; ανοίγει αγκύλη; ο 2 επί 2 πίνακας; γραμμή 1; στήλη 1; σίγμα δείκτης 1,0, στο τετράγωνο, στήλη 2; γάμμα δείκτης 0; γραμμή 2; στήλη 1; γάμμα δείκτης 0; στήλη 2; σίγμα δείκτης 2,0, στο τετράγωνο; κυκλωμένο επί; κεφαλαίο ιότα δείκτης νί; κλείνει αγκύλη; επί; κεφαλαίο μί δείκτης; 2 επί 2 διαγώνιος πίνακας; στήλη 1; κεφαλαίο χ; στήλη 2; κεφαλαίο χ; τέλος δείκτη, εκθέτης συν")?; + return Ok(()); + //theodora. Now reads: Το σύνολο κεφαλαίο μί δείκτης; TEMP NAME του ο 2 επί 2 διαγώνιος πίνακας; στήλη 1; κεφαλαίο χ; στήλη 2; κεφαλαίο χ; τέλος δείκτη; ανοίγει αγκύλη; ο 2 επί 2 πίνακας; γραμμή 1; στήλη 1; σίγμα δείκτης 1,0, στο τετράγωνο, στήλη 2; γάμμα δείκτης 0; γραμμή 2; στήλη 1; γάμμα δείκτης 0; στήλη 2; σίγμα δείκτης 2,0, στο τετράγωνο; κυκλωμένο επί; κεφαλαίο ιότα δείκτης νί; κλείνει αγκύλη; επί; κεφαλαίο μί δείκτης; TEMP NAME του 2 επί 2 διαγώνιος πίνακας; στήλη 1; κεφαλαίο χ; στήλη 2; κεφαλαίο χ; τέλος δείκτη, εκθέτης συν +} + +#[test] +fn fifteen() -> Result<()> { + let expr = r#" + + + + ( + + + + + + + Υ + 1 + + + + + + + + Υ + 2 + + + + + + + ) + + + + [ + + + ( + + + + + Χ + 0 + + + + 0 + Χ + + + + + ) + + + ( + + + + + + + β + 1 + + + + + + + + β + 2 + + + + + + + ) + + , + + + ( + + + + + + + Σ + + 1 + , + 1 + + + + + + + Σ + + 1 + , + 2 + + + + + + + + + Σ + + 2 + , + 1 + + + + + + + Σ + + 2 + , + 2 + + + + + + + + ) + + ] + + + + "#; + test("el", "ClearSpeak", expr, "2 επί ένα πίνακας-στήλη; γραμμή 1; κεφαλαίο ύψιλον δείκτης 1; γραμμή 2; κεφαλαίο ύψιλον δείκτης 2; κυματοειδής γραμμή; ανοίγει αγκύλη; ο 2 επί 2 διαγώνιος πίνακας; στήλη 1; κεφαλαίο χ; στήλη 2; κεφαλαίο χ; 2 επί ένα πίνακας-στήλη; γραμμή 1; βήτα δείκτης 1; γραμμή 2; βήτα δείκτης 2; κόμμα; 2 επί 2 πίνακας; γραμμή 1; στήλη 1; κεφαλαίο σίγμα δείκτης 1,1; στήλη 2; κεφαλαίο σίγμα δείκτης 1,2; γραμμή 2; στήλη 1; κεφαλαίο σίγμα δείκτης 2,1; στήλη 2; κεφαλαίο σίγμα δείκτης 2,2; κλείνει αγκύλη")?; + return Ok(()); + +} + +#[test] +fn sixteen() -> Result<()> { + let expr = r#" + + + + + + + + + d + + d + τ + + + + ( + + + + + + + + + υ + + + + 2 + + + + + + 2 + + + + + + + Ω + + + + Φ + ( + υ + ) + d + χ + + + + + + + + ) + + + + + 2 + + + + + + + + + + υ + + + + τ + + + + + + + + 2 + + + + + + + + + + = + + 2 + + ( + + + + ( + + + + + + + α + + + + τ + + + + , + + + + + υ + + + + τ + + + + + + ) + + + + ) + + + + + + + + "#; + test("el", "ClearSpeak", expr, "πίνακας με 2 γραμμές και 1 στήλες; γραμμή 1; στήλη 1; το κλάσμα με αριθμητή d; και παρονομαστή d τάαφ; ανοίγει παρένθεση; νόρμα του ανάδελτα του ύψιλον στο τετράγωνο; συν; 2; ολοκλήρωμα επί του συνόλου κεφαλαίο ωμέγα του; κεφαλαίο φ του ύψιλον; d χ; κλείνει παρένθεση; συν; 2; νόρμα του κλάσματος με αριθμητή; μερικό διαφορικό, ύψιλον; και παρονομαστή μερικό διαφορικό, τάαφ; στο τετράγωνο; γραμμή 2; στήλη 1; ισούται με; 2; ανοίγει παρένθεση; ανοίγει παρένθεση; το κλάσμα με αριθμητή; μερικό διαφορικό, άλφα; και παρονομαστή μερικό διαφορικό, τάαφ; κόμμα; το κλάσμα με αριθμητή; μερικό διαφορικό, ύψιλον; και παρονομαστή μερικό διαφορικό, τάαφ; κλείνει παρένθεση; κλείνει παρένθεση")?; + return Ok(()); + //theodora. fails with current rules. Should be fine when introducing genitive + +} + +#[test] +fn seventeen() -> Result<()> { + let expr = r#" + + + + 2 + + + + ( + + + Δ + α + + u + + + ( + + χ + , + + τ + ν + + + ) + + + ) + + + = + + + 1 + + + κ + 2 + + + + + + + + + + + + τ + + ν + + 1 + + + + + + τ + ν + + + + + + + + + + + + + τ + + η + + τ + + + + + + + ( + + + Δ + α + + u + + ) + + + + τ + τ + + + + + ( + + χ + , + τ + + ) + + + d + σ + + + + + + + d + τ + + + + + + + + "#; + test("el", "ClearSpeak", expr, "μερικό διαφορικό στο τετράγωνο; ανοίγει παρένθεση; κεφαλαίο δέλτα στην άλφα οστή δύναμη; u; ανοίγει παρένθεση; χ κόμμα; τάαφ δείκτης νί; κλείνει παρένθεση; κλείνει παρένθεση; ισούται με; το κλάσμα με αριθμητή 1; και παρονομαστή καπα στο τετράγωνο; ολοκλήρωμα από τάαφ δείκτης, νί μείον 1 τέλος δείκτη, ως τάαφ δείκτης νί, του; ολοκλήρωμα από τάαφ μείον ήτα ως τάαφ του; ανοίγει παρένθεση; κεφαλαίο δέλτα στην άλφα οστή δύναμη; u; κλείνει παρένθεση δείκτης, τάαφ τάαφ τέλος δείκτη; ανοίγει παρένθεση; χ κόμμα, τάαφ; κλείνει παρένθεση; d σίγμα; d τάαφ")?; + return Ok(()); + +} + +#[test] +fn eighteen() -> Result<()> { + let expr = r#" + + + + 1 + + + κ + 2 + + + + + + + + + + + Κ + + + + + + + + + + + + + + τ + + ν + + 1 + + + + + + + τ + ν + + + + + + + + + + + + + + + + τ + + ν + + 1 + + + + + τ + + + + + + + + + + + σ + + + σ + + + κ + + + + + + Δ + + + + + d + 2 + + υ + + + + d + + λ + 2 + + + + + + ( + + χ + , + λ + + ) + + + d + λ + + + + + + + d + σ + + + + + + + d + τ + + + + + + + d + χ + + + + + + + + "#; + test("el", "ClearSpeak", expr, "το κλάσμα με αριθμητή 1; και παρονομαστή καπα στο τετράγωνο; ολοκλήρωμα επί του συνόλου κεφαλαίο καπα του; ολοκλήρωμα από τάαφ δείκτης, νί μείον 1 τέλος δείκτη, ως τάαφ δείκτης νί, του; ολοκλήρωμα από τάαφ δείκτης, νί μείον 1 τέλος δείκτη, ως τάαφ του; ολοκλήρωμα από σίγμα ως σίγμα συν καπα του; κεφαλαίο δέλτα; το κλάσμα με αριθμητή; d στο τετράγωνο, ύψιλον; και παρονομαστή d, λάμδα στο τετράγωνο; ανοίγει παρένθεση; χ κόμμα, λάμδα; κλείνει παρένθεση; d λάμδα; d σίγμα; d τάαφ; d χ")?; + return Ok(()); + + +} + +#[test] +fn nineteen() -> Result<()> { + let expr = r#" + + + inf + + + { + + + + + + + + β + + + + + + Η + β + λ + + + + ( + Ω + ) + + + + + : + + + β + + + + + Η + β + λ + + + + ( + Ω + ) + + + , + + + β + + + | + Γ + + + = + + υ + + + + } + + + + "#; + test("el", "ClearSpeak", expr, "ινφίμουμ του; συνόλου νόρμα του βήτα δείκτης; η λάμδα δύναμη του, κεφαλαίο ήτα δείκτης βήτα; του κεφαλαίο ωμέγα τέλος δείκτη; άνω κάτω τελεία; βήτα ανήκει; η λάμδα δύναμη του, κεφαλαίο ήτα δείκτης βήτα; του κεφαλαίο ωμέγα; κόμμα; βήτα, κάθετη γραμμή, κεφαλαίο γάμμα; ισούται με, ύψιλον")?; + return Ok(()); + //theodora. not wrong but seems that it is ambiguous about where the sub ends. The way it's curretly read, the reader could assume sub is b(Ω) and not b. Could it also be a problem in english? +} + +#[test] +fn twenty() -> Result<()> { + let expr = r#" + + + + + Κ + β + + + + ( + ρ + ) + + + = + + + { + + + + + υ + + + + + Κ + β + + + : + + + + + υ + + + + < + + ρ + + + + } + + + + "#; + test("el", "ClearSpeak", expr, "η βήτα δύναμη του, κεφαλαίο καπα; του ρ; ισούται με; το σύνολο όλων των ύψιλον ανήκει, κεφαλαίο καπα στην βήτα οστή δύναμη τέτοια ώστε νόρμα του ύψιλον; είναι μικρότερο από ρ")?; + return Ok(()); + +} + +#[test] +fn twentyone() -> Result<()> { + let expr = r#" + + + + + φ + 0 + + + + + + + + Γ + ˙ + + + + + + + ( + + + Υ + 0 + + + ) + + + + + "#; + test("el", "ClearSpeak", expr, "φ δείκτης 0; ανήκει; η απειροστή δύναμη του, κεφαλαίο γάμμα τελεία; του; ανοίγει παρένθεση; κεφαλαίο ύψιλον δείκτης 0; κλείνει παρένθεση")?; + return Ok(()); + +} + + +#[test] +fn twentytwo() -> Result<()> { + let expr = r#" + α + + + + + Δ + + + η + Δ + ν + + + + + "#; + test("el", "ClearSpeak", expr, "άλφα; νόρμα του ανάδελτα δείκτης, κεφαλαίο δέλτα; ήτα δείκτης, κεφαλαίο δέλτα, στην νί οστή δύναμη")?; + return Ok(()); + //theodora. fails with current rules. should be fine when adding genitive clause + // Now reads: άλφα; νόρμα του το ανάδελτα δείκτης, κεφαλαίο δέλτα; ήτα δείκτης, κεφαλαίο δέλτα, στην νί οστή δύναμη +} +#[test] +fn twentythree() -> Result<()> { + let expr = r#" + + + 1 + + + + + + 2 + + + + + + 2 + + + + + + 2 + + + + + + + + + + + + + + + + "#; + test("el", "ClearSpeak", expr, "η τετραγωνική ρίζα του 1 συν; η τετραγωνική ρίζα του 2 συν; η τετραγωνική ρίζα του 2 συν; η τετραγωνική ρίζα του 2 συν αποσιωπητικά, τέλος ρίζας, τέλος ρίζας, τέλος ρίζας, τέλος ρίζας")?; + return Ok(()); + //theodora. fails. Now reads: η τετραγωνική ρίζα του 1 συν; η τετραγωνική ρίζα του 2 συν; η τετραγωνική ρίζα του 2 συν; η τετραγωνική ρίζα του 2 συν τρεις τελείες + // it's not understood where each root ends +} +#[test] +fn twentyfour() -> Result<()> { + let expr = r#" + tan + ( + 22.5 + ° + ) + = + + + + + + 2 + + + 2 + + + + + + + + + 2 + + + + 2 + + + + + + + = + + + 2 + + + + 1 + + "#; + test("el", "ClearSpeak", expr, "εφαπτομένη του; ανοίγει παρένθεση, 22.5 μοίρες; κλείνει παρένθεση; ισούται με; το κλάσμα με αριθμητή; η τετραγωνική ρίζα του 2 μείον, η τετραγωνική ρίζα του 2; και παρονομαστή η τετραγωνική ρίζα του 2 συν, η τετραγωνική ρίζα του 2; ισούται με; η τετραγωνική ρίζα του 2; μείον 1")?; + return Ok(()); + //theodora. 22.5 --> 225 +} +#[test] +fn twentyfive() -> Result<()> { + let expr = r#" + + + + + + + Σ + + 1,1 + + + + + + + Σ + + 1,2 + + + + + + + + + Σ + + 2,1 + + + + + + + Σ + + 2,2 + + + + + + + + = + + + + + + + + Σ + + 1,1 + + + + + + + Σ + + 1,2 + + + + + + + + + Σ + + 2,1 + + + + + + + Σ + + 2,2 + + + + + + + + + + 1 + + + + + "#; + test("el", "ClearSpeak", expr, "2 επί 2 πίνακας; γραμμή 1; στήλη 1; κεφαλαίο σίγμα στην 1,1 δύναμη, στήλη 2; κεφαλαίο σίγμα στην 1,2 δύναμη; γραμμή 2; στήλη 1; κεφαλαίο σίγμα στην 2,1 δύναμη, στήλη 2; κεφαλαίο σίγμα στην 2,2 δύναμη; ισούται με; 2 επί 2 πίνακας; γραμμή 1; στήλη 1; κεφαλαίο σίγμα δείκτης 1,1; στήλη 2; κεφαλαίο σίγμα δείκτης 1,2; γραμμή 2; στήλη 1; κεφαλαίο σίγμα δείκτης 2,1; στήλη 2; κεφαλαίο σίγμα δείκτης 2,2; στην μείον 1 δύναμη")?; + return Ok(()); + //theodora. fails. Now read: 2 επί 2 πίνακας; γραμμή 1; στήλη 1; κεφαλαίο σίγμα στην 1,1 δύναμη, στήλη 2; κεφαλαίο σίγμα στην 1,2 δύναμη; γραμμή 2; στήλη 1; κεφαλαίο σίγμα στην 2,1 δύναμη, στήλη 2; κεφαλαίο σίγμα στην 2,2 δύναμη; ισούται με; TEMP NAME του 2 επί 2 πίνακας; γραμμή 1; στήλη 1; κεφαλαίο σίγμα δείκτης 1,1; στήλη 2; κεφαλαίο σίγμα δείκτης 1,2; γραμμή 2; στήλη 1; κεφαλαίο σίγμα δείκτης 2,1; στήλη 2; κεφαλαίο σίγμα δείκτης 2,2; στην μείον 1 δύναμη +} +#[test] +fn twentysix() -> Result<()> { + let expr = r#" + + + + + + + κ + + + + + + + + α + κ + + + + + + "#; + test("el", "ClearSpeak", expr, "άθροισμα για καπα ανήκει, στους πραγματικούς αριθμούς του; άλφα δείκτης καπα")?; + return Ok(()); + +} + +// Some rules for Greek nominative, accusative, genitive +#[test] +fn test_sup_set_with_curly_braces_accusative() -> Result<()> { + let expr = "sup{1,2,3}"; + test("el", "ClearSpeak", expr, "σουπρέμουμ του, συνόλου 1 κόμμα, 2 κόμμα, 3")?; + return Ok(()); +} + +#[test] +fn test_log_after_operator_accusative() -> Result<()> { + let expr = "x2+1y=logx+1"; + test("el", "ClearSpeak", expr, "x στο τετράγωνο, συν 1 προς y; ισούται με; το λογάριθμο, του; ανοίγει παρένθεση, x συν 1, κλείνει παρένθεση")?; + return Ok(()); +} +#[test] +fn test_ln_after_operator_accusative() -> Result<()> { + let expr = "x2+1y=lnx+1"; + test("el", "ClearSpeak", expr, "x στο τετράγωνο, συν 1 προς y; ισούται με; το l n του; ανοίγει παρένθεση, x συν 1, κλείνει παρένθεση")?; + return Ok(()); +} +#[test] +fn test_root_after_operator_accusative() -> Result<()> { + let expr = "x2+1y2"; + test("el", "ClearSpeak", expr, "x στο τετράγωνο, συν 1 προς y; είναι μικρότερο από ή ίσο με; την τετραγωνική ρίζα του 2")?; + return Ok(()); +} +#[test] +fn test_root_after_operator_frac_nominative() -> Result<()> { + let expr = "x2+1y=23"; + test("el", "ClearSpeak", expr, "x στο τετράγωνο, συν 1 προς y; ισούται με; το κλάσμα με αριθμητή; η τετραγωνική ρίζα του 2; και παρονομαστή 3")?; + return Ok(()); +} + +#[test] +fn test_root_after_operator_frac_nominative2() -> Result<()> { + let expr = "x2+1y=2"; + test("el", "ClearSpeak", expr, "x στο τετράγωνο, συν 1 προς y; ισούται με, την τετραγωνική ρίζα του 2")?; + return Ok(()); +} +#[test] +fn test_root_after_operator_nominative2() -> Result<()> { + let expr = "x2+1y=52"; + test("el", "ClearSpeak", expr, "x στο τετράγωνο, συν 1 προς y; ισούται με; 5, η τετραγωνική ρίζα του 2")?; + return Ok(()); +} +#[test] +fn test_log_after_operator_frac_nominative() -> Result<()> { + let expr = "x2+1y=logx+1+log(x+1)2"; + test("el", "ClearSpeak", expr, "x στο τετράγωνο, συν 1 προς y; ισούται με; το κλάσμα με αριθμητή; ο λογάριθμος, του; ανοίγει παρένθεση, x συν 1, κλείνει παρένθεση; συν; ο λογάριθμος, του; ανοίγει παρένθεση, x συν 1, κλείνει παρένθεση; και παρονομαστή 2")?; + return Ok(()); +} +#[test] +fn test_abs_value_after_operator_accusative() -> Result<()> { + let expr = "|Η(τ,χ)||χ|+γ(τ)"; + test("el", "ClearSpeak", expr, "απόλυτη τιμή του ανάδελτα του κεφαλαίο ήτα; ανοίγει παρένθεση; τάαφ κόμμα, χ; κλείνει παρένθεση; είναι μικρότερο από ή ίσο με; απόλυτη τιμή του χ; συν, γάμμα του τάαφ")?; + return Ok(()); +} +#[test] +fn test_abs_value_after_operator_nominative() -> Result<()> { + let expr = "|Η(τ,χ)||χ|2+γ(τ)"; + test("el", "ClearSpeak", expr, "απόλυτη τιμή του ανάδελτα του κεφαλαίο ήτα; ανοίγει παρένθεση; τάαφ κόμμα, χ; κλείνει παρένθεση; είναι μικρότερο από ή ίσο με; το κλάσμα με αριθμητή; απόλυτη τιμή του χ; και παρονομαστή 2; συν, γάμμα του τάαφ")?; + return Ok(()); +} + +#[test] +fn test_matrix_after_operator_accusative() -> Result<()> { + let expr = "α+β=(Σ1,1Σ1,2Σ2,1Σ2,2)"; + test("el", "ClearSpeak", expr, "άλφα συν βήτα, ισούται με; 2 επί 2 πίνακα; γραμμή 1; στήλη 1; κεφαλαίο σίγμα δείκτης 1,1; στήλη 2; κεφαλαίο σίγμα δείκτης 1,2; γραμμή 2; στήλη 1; κεφαλαίο σίγμα δείκτης 2,1; στήλη 2; κεφαλαίο σίγμα δείκτης 2,2")?; + return Ok(()); +} +#[test] +fn test_matrix_after_operator_nominative() -> Result<()> { + let expr = "α+β=2(Σ1,1Σ1,2Σ2,1Σ2,2)"; + test("el", "ClearSpeak", expr, "άλφα συν βήτα, ισούται με; 2; 2 επί 2 πίνακας; γραμμή 1; στήλη 1; κεφαλαίο σίγμα δείκτης 1,1; στήλη 2; κεφαλαίο σίγμα δείκτης 1,2; γραμμή 2; στήλη 1; κεφαλαίο σίγμα δείκτης 2,1; στήλη 2; κεφαλαίο σίγμα δείκτης 2,2")?; + return Ok(()); + //theodora. fails due to unrelated to accusative reasons. Now reads: άλφα συν βήτα, ισούται με; 2; 2 επί 2 πίνακας; γραμμή 1; στήλη 1; κεφαλαίο σίγμα δείκτης 1,1; στήλη 2; κεφαλαίο σίγμα δείκτης 1,2; γραμμή 2; στήλη 1; κεφαλαίο σίγμα δείκτης 2,1; στήλη 2; κεφαλαίο σίγμα δείκτης 2,2 +} +// #[test] +// fn test_matrix_after_operator_nominative2() -> Result<()> { +// let expr = "α+β=(Σ1,1Σ1,2Σ2,1Σ2,2)x"; +// test("el", "ClearSpeak", expr, "άλφα συν βήτα, ισούται με; το κλάσμα με αριθμητή; ο 2 επί 2 πίνακας; γραμμή 1; στήλη 1; κεφαλαίο σίγμα δείκτης 1,1; στήλη 2; κεφαλαίο σίγμα δείκτης 1,2; γραμμή 2; στήλη 1; κεφαλαίο σίγμα δείκτης 2,1; στήλη 2; κεφαλαίο σίγμα δείκτης 2,2; και παρονομαστή x")?; +// return Ok(()); +// //theodora. fails due to unrelated to accusative reasons. Now reads: άλφα συν βήτα, ισούται με; το κλάσμα με αριθμητή; TEMP NAME του 2 επί 2 πίνακας; γραμμή 1; στήλη 1; κεφαλαίο σίγμα δείκτης 1,1; στήλη 2; κεφαλαίο σίγμα δείκτης 1,2; γραμμή 2; στήλη 1; κεφαλαίο σίγμα δείκτης 2,1; στήλη 2; κεφαλαίο σίγμα δείκτης 2,2; και παρονομαστή x +// } +#[test] +fn matrix_nominative() -> Result<()> { + let expr = r#" + + ( + + + + + + + Υ + 1 + + + + + + + + + Υ + 2 + + + + + + + )[ + ( + + + + + Χ + + + 0 + + + + + 0 + + + Χ + + + + + )( + + + + + + + β + 1 + + + + + + + + + β + 2 + + + + + + + ),( + + + + + + + Σ + + 1,1 + + + + + + + Σ + + 1,2 + + + + + + + + + Σ + + 2,1 + + + + + + + Σ + + 2,2 + + + + + + + ) ] + "#; + test("el", "ClearSpeak", expr, "2 επί ένα πίνακας-στήλη; γραμμή 1; κεφαλαίο ύψιλον δείκτης 1; γραμμή 2; κεφαλαίο ύψιλον δείκτης 2; κυματοειδής γραμμή; ανοίγει αγκύλη; ο 2 επί 2 διαγώνιος πίνακας; στήλη 1; κεφαλαίο χ; στήλη 2; κεφαλαίο χ; 2 επί ένα πίνακας-στήλη; γραμμή 1; βήτα δείκτης 1; γραμμή 2; βήτα δείκτης 2; κόμμα; 2 επί 2 πίνακας; γραμμή 1; στήλη 1; κεφαλαίο σίγμα δείκτης 1,1; στήλη 2; κεφαλαίο σίγμα δείκτης 1,2; γραμμή 2; στήλη 1; κεφαλαίο σίγμα δείκτης 2,1; στήλη 2; κεφαλαίο σίγμα δείκτης 2,2; κλείνει αγκύλη")?; + return Ok(()); +} +#[test] +fn diagonal_matrix_accusative() -> Result<()> { + let expr = r#"(Υ1Υ2)=(Χ00Χ)"#; + test("el", "ClearSpeak", expr, "2 επί ένα πίνακας-στήλη; γραμμή 1; κεφαλαίο ύψιλον δείκτης 1; γραμμή 2; κεφαλαίο ύψιλον δείκτης 2; ισούται με; τον 2 επί 2 διαγώνιο πίνακα; στήλη 1; κεφαλαίο χ; στήλη 2; κεφαλαίο χ")?; + return Ok(()); +} +#[test] +fn diagonal_matrix_nominative() -> Result<()> { + let expr = r#"(Υ1Υ2)=2(Χ00Χ)"#; + test("el", "ClearSpeak", expr, "2 επί ένα πίνακας-στήλη; γραμμή 1; κεφαλαίο ύψιλον δείκτης 1; γραμμή 2; κεφαλαίο ύψιλον δείκτης 2; ισούται με; 2; ο 2 επί 2 διαγώνιος πίνακας; στήλη 1; κεφαλαίο χ; στήλη 2; κεφαλαίο χ")?; + return Ok(()); +} +// #[test] +// fn diagonal_matrix_frac_nominative() -> Result<()> { +// let expr = r#"(Υ1Υ2)=(Χ00Χ)5"#; +// test("el", "ClearSpeak", expr, "2 επί ένα πίνακας-στήλη; γραμμή 1; κεφαλαίο ύψιλον δείκτης 1; γραμμή 2; κεφαλαίο ύψιλον δείκτης 2; ισούται με; το κλάσμα με αριθμητή; ο 2 επί 2 διαγώνιος πίνακας; στήλη 1; κεφαλαίο χ; στήλη 2; κεφαλαίο χ; και παρονομαστή 5")?; +// return Ok(()); +// //theodora. fails due to unrelated issues to accusative/nominative. Now reads: 2 επί ένα πίνακας-στήλη; γραμμή 1; κεφαλαίο ύψιλον δείκτης 1; γραμμή 2; κεφαλαίο ύψιλον δείκτης 2; ισούται με; το κλάσμα με αριθμητή; TEMP NAME του ο 2 επί 2 διαγώνιος πίνακας; στήλη 1; κεφαλαίο χ; στήλη 2; κεφαλαίο χ; και παρονομαστή 5 +// } +#[test] +fn matrix_default_accusative() -> Result<()> { + let expr = r#"χ=τ(υτ)Δυτ+φ'(υ)υτ=ατ+Δαυυτ"#; + test("el", "ClearSpeak", expr, "χ ισούται με; πίνακα με 2 γραμμές και 1 στήλες; γραμμή 1; στήλη 1; το κλάσμα με αριθμητή; μερικό διαφορικό; και παρονομαστή μερικό διαφορικό, τάαφ; ανοίγει παρένθεση; το κλάσμα με αριθμητή; μερικό διαφορικό, ύψιλον; και παρονομαστή μερικό διαφορικό, τάαφ; κλείνει παρένθεση; μείον; κεφαλαίο δέλτα; το κλάσμα με αριθμητή; μερικό διαφορικό, ύψιλον; και παρονομαστή μερικό διαφορικό, τάαφ; συν; φ τόνος, του ύψιλον; το κλάσμα με αριθμητή; μερικό διαφορικό, ύψιλον; και παρονομαστή μερικό διαφορικό, τάαφ; γραμμή 2; στήλη 1; ισούται με; μείον το κλάσμα με αριθμητή; μερικό διαφορικό, άλφα; και παρονομαστή μερικό διαφορικό, τάαφ; συν, κεφαλαίο δέλτα, άλφα; μείον ύψιλον μείον; το κλάσμα με αριθμητή; μερικό διαφορικό, ύψιλον; και παρονομαστή μερικό διαφορικό, τάαφ")?; + return Ok(()); +} +#[test] +fn matrix_default_nominative() -> Result<()> { + let expr = r#"χ=2τ(υτ)Δυτ+φ'(υ)υτ=ατ+Δαυυτ"#; + test("el", "ClearSpeak", expr, "χ ισούται με; 2; πίνακας με 2 γραμμές και 1 στήλες; γραμμή 1; στήλη 1; το κλάσμα με αριθμητή; μερικό διαφορικό; και παρονομαστή μερικό διαφορικό, τάαφ; ανοίγει παρένθεση; το κλάσμα με αριθμητή; μερικό διαφορικό, ύψιλον; και παρονομαστή μερικό διαφορικό, τάαφ; κλείνει παρένθεση; μείον; κεφαλαίο δέλτα; το κλάσμα με αριθμητή; μερικό διαφορικό, ύψιλον; και παρονομαστή μερικό διαφορικό, τάαφ; συν; φ τόνος, του ύψιλον; το κλάσμα με αριθμητή; μερικό διαφορικό, ύψιλον; και παρονομαστή μερικό διαφορικό, τάαφ; γραμμή 2; στήλη 1; ισούται με; μείον το κλάσμα με αριθμητή; μερικό διαφορικό, άλφα; και παρονομαστή μερικό διαφορικό, τάαφ; συν, κεφαλαίο δέλτα, άλφα; μείον ύψιλον μείον; το κλάσμα με αριθμητή; μερικό διαφορικό, ύψιλον; και παρονομαστή μερικό διαφορικό, τάαφ")?; + return Ok(()); +} +#[test] +fn matrix_default_without_accusative2() -> Result<()> { + let expr = r#"χ=τ(υτ)Δυτ+φ'(υ)υτ=ατ+Δαυυτ4"#; + test("el", "ClearSpeak", expr, "χ ισούται με; το κλάσμα με αριθμητή; πίνακας με 2 γραμμές και 1 στήλες; γραμμή 1; στήλη 1; το κλάσμα με αριθμητή; μερικό διαφορικό; και παρονομαστή μερικό διαφορικό, τάαφ; ανοίγει παρένθεση; το κλάσμα με αριθμητή; μερικό διαφορικό, ύψιλον; και παρονομαστή μερικό διαφορικό, τάαφ; κλείνει παρένθεση; μείον; κεφαλαίο δέλτα; το κλάσμα με αριθμητή; μερικό διαφορικό, ύψιλον; και παρονομαστή μερικό διαφορικό, τάαφ; συν; φ τόνος, του ύψιλον; το κλάσμα με αριθμητή; μερικό διαφορικό, ύψιλον; και παρονομαστή μερικό διαφορικό, τάαφ; γραμμή 2; στήλη 1; ισούται με; μείον το κλάσμα με αριθμητή; μερικό διαφορικό, άλφα; και παρονομαστή μερικό διαφορικό, τάαφ; συν, κεφαλαίο δέλτα, άλφα; μείον ύψιλον μείον; το κλάσμα με αριθμητή; μερικό διαφορικό, ύψιλον; και παρονομαστή μερικό διαφορικό, τάαφ; και παρονομαστή 4")?; + return Ok(()); +} + +#[test] +fn max_munder() -> Result<()> { // + let expr = r#"Β~1(Τ)=maxι=1,νΓξ|υι|dτ"#; + test("el", "ClearSpeak", expr, "κεφαλαίο βήτα κυματοειδής γραμμή, δείκτης 1; του κεφαλαίο τάαφ; ισούται με; μέγιστο για ιότα ισούται με; 1, αποσιωπητικά, νί; του; ολοκλήρωμα επί του συνόλου κεφαλαίο γάμμα δείκτης ξ, του; απόλυτη τιμή του ύψιλον δείκτης ιότα; d τάαφ")?; + return Ok(()); + + } + #[test] +fn union_real_numbers_munder() -> Result<()> { // + let expr = r#"a+b"#; + test("el", "ClearSpeak", expr, "ένωση για τους πραγματικούς αριθμούς; a συν b")?; + return Ok(()); + + } + #[test] +fn intersection_munder() -> Result<()> { // + let expr = r#"aa+b"#; + // TODO: add expected speech + test("el", "ClearSpeak", expr, "τομή για a ανήκει, στους πραγματικούς αριθμούς; a συν b")?; + return Ok(()); + } + \ No newline at end of file diff --git a/tests/Languages/el/intent.rs b/tests/Languages/el/intent.rs new file mode 100644 index 000000000..3031d100a --- /dev/null +++ b/tests/Languages/el/intent.rs @@ -0,0 +1,145 @@ +/// Tests for rules shared between various speech styles: +/// * this has tests focused on the various alphabets +use crate::common::*; +use anyhow::Result; + + +#[test] +fn silent_intent() -> Result<()> { + let expr = " 2 x "; + test("el", "SimpleSpeak", expr, "2 x")?; + test("el", "LiteralSpeak", expr, "2 x")?; + return Ok(()); + +} + +#[test] +fn prefix_intent() -> Result<()> { + let expr = r#" x T "#; + test("el", "SimpleSpeak", expr, "testing x")?; + return Ok(()); + +} + +#[test] +fn postfix_intent() -> Result<()> { + let expr = r#" x T "#; + test("el", "SimpleSpeak", expr, "x testing")?; + return Ok(()); + +} + +#[test] +fn infix_intent() -> Result<()> { + let expr = r#" + x + y + z + "#; + test("el", "SimpleSpeak", expr, "x testing y testing z testing 2")?; + return Ok(()); + +} + +#[test] +fn infix_intent_no_args() -> Result<()> { + // this is illegal intent, so it is just an mrow with one child + let expr = r#" + x + "#; + test("el", "SimpleSpeak", expr, "x")?; + return Ok(()); + +} + +#[test] +fn infix_intent_one_arg() -> Result<()> { + let expr = r#" + x + "#; + // Note: we say the intent name because there are infix plus/minus with a single arg due to continued rows or combined columns + test("el", "SimpleSpeak", expr, "testing x")?; + return Ok(()); + +} + +#[test] +fn function_intent() -> Result<()> { + let expr = r#" + x + y + z + "#; + test("el", "SimpleSpeak", expr, "testing του x κόμμα, y κόμμα, z κόμμα, 2")?; + return Ok(()); + +} + +#[test] +fn function_no_args_intent() -> Result<()> { + // this is illegal intent, so it is just an mrow with one child + let expr = r#" + x + "#; + test("el", "SimpleSpeak", expr, "x")?; + return Ok(()); + +} + +#[test] +fn function_one_arg_intent() -> Result<()> { + let expr = r#" + x + "#; + test("el", "SimpleSpeak", expr, "testing του x")?; + //theodora. fails probably because + return Ok(()); + +} + +#[test] +fn silent_intent_mi() -> Result<()> { + let expr = " 2 x"; + test("el", "SimpleSpeak", expr, "2")?; + test("el", "ClearSpeak", expr, "2")?; + return Ok(()); + +} + +#[test] +fn silent_intent_msup() -> Result<()> { + let expr = " + + H + 2 + "; + test("el", "SimpleSpeak", expr, "κεφαλαίο h 2")?; + test("el", "ClearSpeak", expr, "κεφαλαίο h 2")?; + return Ok(()); + +} + +#[test] +fn silent_intent_underscore() -> Result<()> { + let expr = " + + H + 2 + "; + test("el", "SimpleSpeak", expr, "κεφαλαίο h 2")?; + test("el", "ClearSpeak", expr, "κεφαλαίο h 2")?; + return Ok(()); + +} + +#[test] +fn intent_prob_x() -> Result<()> { + let expr = " + + x + P + "; + test("el", "ClearSpeak", expr, "πιθανότητα του x")?; + return Ok(()); + +} diff --git a/tests/Languages/el/mtable.rs b/tests/Languages/el/mtable.rs new file mode 100644 index 000000000..f8b649b18 --- /dev/null +++ b/tests/Languages/el/mtable.rs @@ -0,0 +1,1191 @@ +use crate::common::*; +use anyhow::Result; + +#[test] +fn matrix_1x1() -> Result<()> { + let expr = " + + + ( + + 3 + + ) + + "; + test("el", "ClearSpeak", expr, "ένα επί ένα πίνακας με καταχώρηση 3")?; + test("el", "SimpleSpeak", expr, "ένα επί ένα πίνακας με καταχώρηση 3")?; + return Ok(()); + +} + +#[test] +fn determinant_1x1() -> Result<()> { + let expr = " + + + | + + 3 + + | + + "; + test("el", "ClearSpeak", expr, "ένα επί ένα ορίζουσα με καταχώρηση 3")?; + test("el", "SimpleSpeak", expr, "ένα επί ένα ορίζουσα με καταχώρηση 3")?; + return Ok(()); + +} + + +#[test] +fn matrix_1x2() -> Result<()> { + let expr = " + + + ( + + + + 3 + + + 5 + + + + ) + + "; + test("el", "ClearSpeak", expr, "ένα επί 2 πίνακας-γραμμή; 3, 5")?; + test("el", "SimpleSpeak", expr, "ένα επί 2 πίνακας-γραμμή; 3, 5")?; + return Ok(()); + +} + + +#[test] +fn matrix_1x3() -> Result<()> { + let expr = " + + + ( + + + + -x + + + 5 + + + 12 + + + + ) + + "; + test("el", "ClearSpeak", expr, "ένα επί 3 πίνακας-γραμμή; μείον x, 5, 12")?; + test("el", "SimpleSpeak", expr, "ένα επί 3 πίνακας-γραμμή; μείον x, 5, 12")?; + return Ok(()); + +} + +#[test] +fn matrix_2x1_not_simple() -> Result<()> { + let expr = " + + + ( + + + + + x+1 + + + + + + + x-1 + + + + ) + + "; + test("el", "ClearSpeak", expr, "2 επί ένα πίνακας-στήλη; γραμμή 1; x συν 1; γραμμή 2; x μείον 1")?; + test("el", "SimpleSpeak", expr, "2 επί ένα πίνακας-στήλη; γραμμή 1; x συν 1; γραμμή 2; x μείον 1")?; + return Ok(()); + +} +#[test] +fn matrix_3x1_not_simple() -> Result<()> { + let expr = " + + + ( + + + + + x + + + + + + + a + + + + + + + x + + x+1 + + + + + + ) + "; + test("el", "SimpleSpeak", expr, "3 επί ένα πίνακας-στήλη; \ + γραμμή 1; x; \ + γραμμή 2; a; \ + γραμμή 3; κλάσμα, x προς, x συν 1, τέλος κλάσματος")?; + test("el", "ClearSpeak", expr, "3 επί ένα πίνακας-στήλη; \ + γραμμή 1; x; \ + γραμμή 2; a; \ + γραμμή 3; το κλάσμα με αριθμητή x; και παρονομαστή x συν 1")?; + return Ok(()); + +} + +#[test] +fn determinant_2x2() -> Result<()> { + let expr = " + + | + + + + 2 + + + 1 + + + + + 7 + + + 5 + + + + + | + "; + test("el", "ClearSpeak", expr, "2 επί 2 ορίζουσα; γραμμή 1; 2, 1; γραμμή 2; 7, 5")?; + test("el", "SimpleSpeak", expr, "2 επί 2 ορίζουσα; γραμμή 1; 2, 1; γραμμή 2; 7, 5")?; + return Ok(()); + +} + +#[test] +fn matrix_2x3() -> Result<()> { + let expr = " + + + [ + + + + 3 + + + 1 + + + 4 + + + + + 0 + + + 2 + + + 6 + + + + ] + + "; + test("el", "ClearSpeak", expr, "2 επί 3 πίνακας; γραμμή 1; 3, 1, 4; γραμμή 2; 0, 2, 6")?; + test("el", "SimpleSpeak", expr, "2 επί 3 πίνακας; γραμμή 1; 3, 1, 4; γραμμή 2; 0, 2, 6")?; + return Ok(()); + +} + +#[test] +fn matrix_2x3_labeled() -> Result<()> { + let expr = " + + + [ + + + + (3.1) + + + 3 + + + 1 + + + 4 + + + + + 0 + + + 2 + + + 6 + + + + ] + + "; + test("el", "ClearSpeak", expr, + "2 επί 3 πίνακας; γραμμή 1 με ένδειξη (3.1); στήλη 1; 3, στήλη 2; 1, στήλη 3; 4; \ + γραμμή 2; στήλη 1; 0, στήλη 2; 2, στήλη 3; 6")?; + test("el", "SimpleSpeak", expr, + "2 επί 3 πίνακας; γραμμή 1 με ένδειξη (3.1); στήλη 1; 3, στήλη 2; 1, στήλη 3; 4; \ + γραμμή 2; στήλη 1; 0, στήλη 2; 2, στήλη 3; 6")?; + return Ok(()); + +} + +#[test] +fn matrix_3x1() -> Result<()> { + let expr = " + + + [ + + + + 1 + + + + + 2 + + + + + 3 + + + ] + + "; + test("el", "ClearSpeak", expr, "3 επί ένα πίνακας-στήλη; 1; 2; 3")?; + test("el", "SimpleSpeak", expr, "3 επί ένα πίνακας-στήλη; 1; 2; 3")?; + return Ok(()); + +} + +#[test] +fn matrix_4x1() -> Result<()> { + let expr = " + + + ( + + + + 3 + + + + + 6 + + + + + 1 + + + + + 2 + + + + ) + + "; + test("el", "ClearSpeak", expr, "4 επί ένα πίνακας-στήλη; γραμμή 1; 3; γραμμή 2; 6; γραμμή 3; 1; γραμμή 4; 2")?; + test("el", "SimpleSpeak", expr, "4 επί ένα πίνακας-στήλη; γραμμή 1; 3; γραμμή 2; 6; γραμμή 3; 1; γραμμή 4; 2")?; + return Ok(()); + +} + +#[test] +fn matrix_4x1_labeled() -> Result<()> { + let expr = " + + + ( + + + + 3 + + + + + 6 + + + + + 1 + + + + + (3.1) + + + 2 + + + + ) + + "; + test("el", "ClearSpeak", expr, + "4 επί ένα πίνακας-στήλη; γραμμή 1; 3; γραμμή 2; 6; γραμμή 3; 1; γραμμή 4 με ένδειξη (3.1); 2")?; + test("el", "SimpleSpeak", expr, + "4 επί ένα πίνακας-στήλη; γραμμή 1; 3; γραμμή 2; 6; γραμμή 3; 1; γραμμή 4 με ένδειξη (3.1); 2")?; + return Ok(()); + +} + +#[test] +fn matrix_1x4() -> Result<()> { + let expr = " + + + ( + + + + 3 + + + 6 + + + 1 + + + 2 + + + + ) + + "; + test("el", "ClearSpeak", expr, "ένα επί 4 πίνακας-γραμμή; στήλη 1; 3, στήλη 2; 6, στήλη 3; 1, στήλη 4; 2")?; + test("el", "SimpleSpeak", expr, "ένα επί 4 πίνακας-γραμμή; στήλη 1; 3, στήλη 2; 6, στήλη 3; 1, στήλη 4; 2")?; + return Ok(()); + +} + +#[test] +fn matrix_4x4() -> Result<()> { + let expr = " + + + ( + + + + 0 + + + 3 + + + 4 + + + 3 + + + + + 2 + + + 1 + + + 0 + + + 9 + + + + + 3 + + + 0 + + + 2 + + + 1 + + + + + 6 + + + 2 + + + 9 + + + 0 + + + + ) + + "; + test("el", "ClearSpeak", expr, "4 επί 4 πίνακας; \ + γραμμή 1; στήλη 1; 0, στήλη 2; 3, στήλη 3; 4, στήλη 4; 3; \ + γραμμή 2; στήλη 1; 2, στήλη 2; 1, στήλη 3; 0, στήλη 4; 9; \ + γραμμή 3; στήλη 1; 3, στήλη 2; 0, στήλη 3; 2, στήλη 4; 1; \ + γραμμή 4; στήλη 1; 6, στήλη 2; 2, στήλη 3; 9, στήλη 4; 0")?; + test("el", "SimpleSpeak", expr, "4 επί 4 πίνακας; \ + γραμμή 1; στήλη 1; 0, στήλη 2; 3, στήλη 3; 4, στήλη 4; 3; \ + γραμμή 2; στήλη 1; 2, στήλη 2; 1, στήλη 3; 0, στήλη 4; 9; \ + γραμμή 3; στήλη 1; 3, στήλη 2; 0, στήλη 3; 2, στήλη 4; 1; \ + γραμμή 4; στήλη 1; 6, στήλη 2; 2, στήλη 3; 9, στήλη 4; 0")?; + return Ok(()); +} + +#[test] +fn matrix_4x2() -> Result<()> { + let expr = " + + + ( + + + + 1 + + + 3 + + + + + 4 + + + 2 + + + + + 2 + + + 1 + + + + + 0 + + + 5 + + + + + ) + + "; + test("el", "ClearSpeak", expr, "4 επί 2 πίνακας; \ + γραμμή 1; στήλη 1; 1, στήλη 2; 3; \ + γραμμή 2; στήλη 1; 4, στήλη 2; 2; \ + γραμμή 3; στήλη 1; 2, στήλη 2; 1; \ + γραμμή 4; στήλη 1; 0, στήλη 2; 5\ + ")?; + test("el", "SimpleSpeak", expr, "4 επί 2 πίνακας; \ + γραμμή 1; στήλη 1; 1, στήλη 2; 3; \ + γραμμή 2; στήλη 1; 4, στήλη 2; 2; \ + γραμμή 3; στήλη 1; 2, στήλη 2; 1; \ + γραμμή 4; στήλη 1; 0, στήλη 2; 5\ + ")?; + return Ok(()); +} + +// put absolute value test here since it is related to determinate and is small for its own file +#[test] +fn simple_absolute_value() -> Result<()> { + let expr = " + | x | + "; + test("el", "SimpleSpeak", expr, "η απόλυτη τιμή του x")?; + test("el", "ClearSpeak", expr, "απόλυτη τιμή του x")?; + test_prefs("el", "ClearSpeak", vec![("Verbosity", "Terse"), ("ClearSpeak_AbsoluteValue", "Auto")], expr, "απόλυτη τιμή του x")?; + test_prefs("el", "ClearSpeak", vec![("Verbosity", "Verbose"), ("ClearSpeak_AbsoluteValue", "AbsEnd")], + expr, "απόλυτη τιμή του x, τέλος απόλυτης τιμής")?; + return Ok(()); +} + +#[test] +fn absolute_value_plus_1() -> Result<()> { +let expr = " + | + x+1 + | + "; + test("el", "ClearSpeak", expr, "απόλυτη τιμή του x συν 1")?; + test_prefs("el", "ClearSpeak", vec![("Verbosity", "Terse"), ("ClearSpeak_AbsoluteValue", "AbsEnd")], + expr, "απόλυτη τιμή του x συν 1, τέλος απόλυτης τιμής")?; + return Ok(()); +} + +#[test] +fn simple_cardinality_value() -> Result<()> { + let expr = " + | S | + "; + test_prefs("el", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_AbsoluteValue", "Cardinality")], expr, + "πληθικός αριθμός του κεφαλαίο s")?; + return Ok(()); +} + +// Test preferences +#[test] +fn simple_matrix_speak_col_num() -> Result<()> { +let expr = " + + ( + + + + 2 + 1 + + + 7 + 5 + + + ) + "; + test_ClearSpeak("el", "ClearSpeak_Matrix", "SpeakColNum", + expr, "2 επί 2 πίνακας; γραμμή 1; στήλη 1; 2, στήλη 2; 1; γραμμή 2; στήλη 1; 7, στήλη 2; 5")?; + return Ok(()); +} + +#[test] +fn col_matrix_3x1_speak_col_num() -> Result<()> { +let expr = " + + ( + + + + 1 + + + 2 + + + 3 + + + ) + "; +test_ClearSpeak("el", "ClearSpeak_Matrix", "SpeakColNum", + expr, "3 επί ένα πίνακας-στήλη; γραμμή 1; 1; γραμμή 2; 2; γραμμή 3; 3")?; + return Ok(()); +} + +#[test] +fn row_matrix_1x2_speak_col_num() -> Result<()> { +let expr = " + + [ + + + + 1 2 + + + ] + "; +test_ClearSpeak("el", "ClearSpeak_Matrix", "SpeakColNum", + expr, "ένα επί 2 πίνακας-γραμμή; στήλη 1; 1, στήλη 2; 2")?; + return Ok(()); +} + +#[test] +fn matrix_2x2_speak_col_num() -> Result<()> { +let expr = "( + + + b11 + b12 + + + b21 + b22 + + + )"; +test_ClearSpeak("el", "ClearSpeak_Matrix", "SpeakColNum", + expr, "2 επί 2 πίνακας; γραμμή 1; στήλη 1; b δείκτης 1 1; στήλη 2; b δείκτης 1 2; \ + γραμμή 2; στήλη 1; b δείκτης 2 1; στήλη 2; b δείκτης 2 2")?; + return Ok(()); +} + + +#[test] +fn simple_matrix_silent_col_num() -> Result<()> { +let expr = " + + ( + + + + 2 + 1 + + + 7 + 5 + + + ) + "; + test_ClearSpeak("el", "ClearSpeak_Matrix", "SilentColNum", + expr, "2 επί 2 πίνακας; γραμμή 1; 2, 1; γραμμή 2; 7, 5")?; + return Ok(()); +} + +#[test] +fn col_matrix_3x1_silent_col_num() -> Result<()> { +let expr = " + + ( + + + + 1 + + + 2 + + + 3 + + + ) + "; +test_ClearSpeak("el", "ClearSpeak_Matrix", "SilentColNum", + expr, "3 επί ένα πίνακας-στήλη; 1; 2; 3")?; + return Ok(()); +} + +#[test] +fn row_matrix_1x2_silent_col_num() -> Result<()> { +let expr = " + + [ + + + + 1 2 + + + ] + "; +test_ClearSpeak("el", "ClearSpeak_Matrix", "SilentColNum", + expr, "ένα επί 2 πίνακας-γραμμή; 1, 2")?; + return Ok(()); +} + +#[test] +fn matrix_2x2_silent_col_num() -> Result<()> { +let expr = "( + + + b11 + b12 + + + b21 + b22 + + + )"; +test_ClearSpeak("el", "ClearSpeak_Matrix", "SilentColNum", + expr, "2 επί 2 πίνακας; γραμμή 1; b δείκτης 1 1; b δείκτης 1 2; \ + γραμμή 2; b δείκτης 2 1; b δείκτης 2 2")?; + return Ok(()); + } + + +#[test] +fn simple_matrix_end_matrix() -> Result<()> { +let expr = " + + ( + + + + 2 + 1 + + + 7 + 5 + + + ) + "; + test_ClearSpeak("el", "ClearSpeak_Matrix", "EndMatrix", + expr, "2 επί 2 πίνακας; γραμμή 1; 2, 1; γραμμή 2; 7, 5; τέλος πίνακα")?; + return Ok(()); + } + +#[test] +fn col_matrix_3x1_end_matrix() -> Result<()> { +let expr = " + + ( + + + + 1 + + + 2 + + + 3 + + + ) + "; +test_ClearSpeak("el", "ClearSpeak_Matrix", "EndMatrix", + expr, "3 επί ένα πίνακας-στήλη; 1; 2; 3; τέλος πίνακα")?; + return Ok(()); + } + +#[test] +fn row_matrix_1x2_end_matrix() -> Result<()> { +let expr = " + + [ + + + + 1 2 + + + ] + "; +test_ClearSpeak("el", "ClearSpeak_Matrix", "EndMatrix", + expr, "ένα επί 2 πίνακας-γραμμή; 1, 2; τέλος πίνακα")?; + return Ok(()); + } + +#[test] +fn matrix_2x2_end_matrix() -> Result<()> { +let expr = "( + + + b11 + b12 + + + b21 + b22 + + + )"; +test_ClearSpeak("el", "ClearSpeak_Matrix", "EndMatrix", + expr, "2 επί 2 πίνακας; γραμμή 1; στήλη 1; b δείκτης 1 1; στήλη 2; b δείκτης 1 2; \ + γραμμή 2; στήλη 1; b δείκτης 2 1; στήλη 2; b δείκτης 2 2; τέλος πίνακα")?; + return Ok(()); + } + + +#[test] +fn simple_matrix_vector() -> Result<()> { +let expr = " + + ( + + + + 2 + 1 + + + 7 + 5 + + + ) + "; + test_ClearSpeak("el", "ClearSpeak_Matrix", "Vector", + expr, "2 επί 2 πίνακας; γραμμή 1; 2, 1; γραμμή 2; 7, 5")?; + return Ok(()); + } + +#[test] +fn col_matrix_3x1_vector() -> Result<()> { +let expr = " + + ( + + + + 1 + + + 2 + + + 3 + + + ) + "; +test_ClearSpeak("el", "ClearSpeak_Matrix", "Vector", + expr, "3 επί ένα διάνυσμα-στήλη; 1; 2; 3")?; + return Ok(()); + } + +#[test] +fn row_matrix_1x2_vector() -> Result<()> { +let expr = " + + [ + + + + 1 2 + + + ] + "; +test_ClearSpeak("el", "ClearSpeak_Matrix", "Vector", + expr, "ένα επί 2 διάνυσμα-γραμμή; 1, 2")?; + return Ok(()); + } + +#[test] +fn matrix_2x2_vector() -> Result<()> { +let expr = "( + + + b11 + b12 + + + b21 + b22 + + + )"; +test_ClearSpeak("el", "ClearSpeak_Matrix", "Vector", + expr, "2 επί 2 πίνακας; γραμμή 1; στήλη 1; b δείκτης 1 1; στήλη 2; b δείκτης 1 2; \ + γραμμή 2; στήλη 1; b δείκτης 2 1; στήλη 2; b δείκτης 2 2")?; + return Ok(()); + } + + +#[test] +fn simple_matrix_end_vector() -> Result<()> { +let expr = " + + ( + + + + 2 + 1 + + + 7 + 5 + + + ) + "; + test_ClearSpeak("el", "ClearSpeak_Matrix", "EndVector", + expr, "2 επί 2 πίνακας; γραμμή 1; 2, 1; γραμμή 2; 7, 5; τέλος πίνακα")?; + return Ok(()); + } + +#[test] +fn col_matrix_3x1_end_vector() -> Result<()> { +let expr = " + + ( + + + + 1 + + + 2 + + + 3 + + + ) + "; +test_ClearSpeak("el", "ClearSpeak_Matrix", "EndVector", + expr, "3 επί ένα διάνυσμα-στήλη; 1; 2; 3; τέλος διανύσματος")?; + return Ok(()); + } + +#[test] +fn row_matrix_1x2_end_vector() -> Result<()> { +let expr = " + + [ + + + + 1 2 + + + ] + "; +test_ClearSpeak("el", "ClearSpeak_Matrix", "EndVector", + expr, "ένα επί 2 διάνυσμα-γραμμή; 1, 2; τέλος διανύσματος")?; + return Ok(()); + } + +#[test] +fn matrix_2x2_end_vector() -> Result<()> { +let expr = "( + + + b11 + b12 + + + b21 + b22 + + + )"; +test_ClearSpeak("el", "ClearSpeak_Matrix", "EndVector", + expr, "2 επί 2 πίνακας; γραμμή 1; στήλη 1; b δείκτης 1 1; στήλη 2; b δείκτης 1 2; \ + γραμμή 2; στήλη 1; b δείκτης 2 1; στήλη 2; b δείκτης 2 2; τέλος πίνακα")?; + return Ok(()); + } + + + +#[test] +fn matrix_binomial() -> Result<()> { + let expr = " + ( + 32 + ) + "; + test_ClearSpeak("el", "ClearSpeak_Matrix", "Combinatorics", expr, "3 ανά 2")?; + return Ok(()); + } + +#[test] +fn matrix_times() -> Result<()> { + let expr = " + 1234 + abcd + "; + test("el", "SimpleSpeak", expr, + "2 επί 2 πίνακας; γραμμή 1; 1, 2; γραμμή 2; 3, 4; 2 επί 2 πίνακας; γραμμή 1; a, b; γραμμή 2; c, d")?; + return Ok(()); + } + +#[test] +fn unknown_mtable_property() -> Result<()> { + let expr = " + + + + a + + + = + + + + b + + + c + + d + + + + + + + + + + e + + f + + + + "; + test("el", "ClearSpeak", expr, + "2 σειρές; σειρά 1; a ισούται με, b συν c μείον d; σειρά 2; συν e μείον f")?; + return Ok(()); + } + + +#[test] +fn zero_matrix() -> Result<()> { + let expr = " + [ + + 00 + 00 + + ] + "; + test("el", "SimpleSpeak", expr, + "ο 2 επί 2 μηδενικός πίνακας")?; + return Ok(()); + } + +#[test] +fn identity_matrix() -> Result<()> { + let expr = " + ( + + 100 + 010 + 001 + + ) + "; + test("el", "SimpleSpeak", expr, + "ο 3 επί 3 μοναδιαίος πίνακας")?; + return Ok(()); + } + +#[test] +fn identity_matrix_false_positive_negative_one() -> Result<()> { + let expr = " + [ + + 10 + 0-1 + + ] + "; + test_prefs("el", "SimpleSpeak", vec![("Verbosity", "Terse")], + expr, "ο 2 επί 2 διαγώνιος πίνακας; στήλη 1; 1; στήλη 2; μείον 1")?; + Ok(()) +} + +#[test] +fn identity_matrix_false_positive_zero_diagonal() -> Result<()> { + let expr = " + [ + + 10 + 00 + + ] + "; + test_prefs("el", "SimpleSpeak", vec![("Verbosity", "Terse")], + expr, "ο 2 επί 2 διαγώνιος πίνακας; στήλη 1; 1")?; + Ok(()) +} + +#[test] +fn diagonal_matrix() -> Result<()> { + let expr = " + ( + + 200 + 010 + 00x2 + + ) + "; + test_prefs("el", "SimpleSpeak", vec![("Verbosity", "Terse")], + expr, "ο 3 επί 3 διαγώνιος πίνακας; στήλη 1; 2; στήλη 2; 1; στήλη 3; x στο τετράγωνο")?; +// test_prefs("el", "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(()); + } + +#[test] +fn single_line_with_label() -> Result<()> { + let expr = r#" + + + (2) + 𝑏 = 2 + + + "#; + test_prefs("el", "ClearSpeak", vec![("Verbosity", "Terse")], + expr, "1 σειρά, με ένδειξη 2; b ισούται με 2")?; + test_prefs("el", "SimpleSpeak", vec![("Verbosity", "Terse")], + expr, "1 εξίσωση, με ένδειξη 2; b ισούται με 2")?; + return Ok(()); + } diff --git a/tests/Languages/el/shared.rs b/tests/Languages/el/shared.rs new file mode 100644 index 000000000..799841711 --- /dev/null +++ b/tests/Languages/el/shared.rs @@ -0,0 +1,564 @@ +/// Tests for rules shared between various speech styles: +/// * modified var +use crate::common::*; +use anyhow::Result; + +#[test] +fn modified_vars() -> Result<()> { + let expr = " + a ` + b ~ + c ̆ + b ̌ + c ` + + r ˇ + + x . + y ˙ + z ¨ + u + v + + x ^ + + t + "; + test("el", "SimpleSpeak", expr, + "a βαρεία; b κυματοειδής γραμμή; c βραχεία; b καλλωσπιστική ανεστραμμένη γαλλική περισπωμένη; c βαρεία; συν, \ + r ανεστραμμένη γαλλική περισπωμένη; συν; x τελεία, y τελεία, z διπλή κουκκίδα; u καλλωπιστική τριπλή τελεία; v καλλωπιστική τετραπλή τελεία; συν x καπέλο, συν διάνυσμα t")?; + return Ok(()); + +} + +#[test] +fn limit() -> Result<()> { + let expr = " + + lim + x 0 + + + + sin x + x + + + "; + test("el", "SimpleSpeak", expr, "το όριο όταν x προσεγγίζει 0; του; κλάσμα, ημίτονο του x, προς x, τέλος κλάσματος")?; + test_prefs("el", "SimpleSpeak", vec![("Impairment", "LearningDisability")], expr, + "το όριο όταν x προσεγγίζει 0; του; ημίτονο του x, προς x")?; + return Ok(()); + +} + +#[test] +fn limit_from_below() -> Result<()> { + let expr = " + + lim + x 0 + + + sin x + + "; + test("el", "SimpleSpeak", expr, "το όριο όταν x προσεγγίζει από κάτω 0; του ημίτονο του x")?; + return Ok(()); + +} + + +#[test] +fn binomial_mmultiscripts() -> Result<()> { + let expr = "Cmn"; + test("el", "SimpleSpeak", expr, "n ανά m")?; + return Ok(()); + +} + +#[test] +fn binomial_mmultiscripts_other() -> Result<()> { + let expr = "Cmn"; + test("el", "SimpleSpeak", expr, "n ανά m")?; + return Ok(()); + +} + +#[test] +fn binomial_subscript() -> Result<()> { // C_{n,k} + let expr = "Cn,m"; + test("el", "SimpleSpeak", expr, "n ανά m")?; + return Ok(()); + +} + +#[test] +fn permutation_mmultiscripts() -> Result<()> { + let expr = "Pkn"; + test("el", "SimpleSpeak", expr, "k μεταθέσεις των n")?; + return Ok(()); + +} + +#[test] +fn permutation_mmultiscripts_sup() -> Result<()> { + let expr = "Pkn"; + test("el", "SimpleSpeak", expr, "k μεταθέσεις των n")?; + return Ok(()); +} + +#[test] +fn permutation_msubsup() -> Result<()> { + let expr = "Pkn"; + test("el", "SimpleSpeak", expr, "k μεταθέσεις των n")?; + return Ok(()); + +} + +#[test] +fn tensor_mmultiscripts() -> Result<()> { + let expr = " + R i j k l + "; + test_prefs("el", "SimpleSpeak", vec![("Verbosity", "Verbose")], expr, + "κεφαλαίο r με 4 μετατεταγμένα μέρη, δείκτης i εκθέτης j δείκτης k δείκτης l")?; + test_prefs("el", "SimpleSpeak", vec![("Verbosity", "Medium")], expr, + "κεφαλαίο r με 4 μετατεταγμένα μέρη, δείκτης i εκθέτης j δείκτης k δείκτης l")?; + return Ok(()); + +} + +#[test] +fn huge_num_mmultiscripts() -> Result<()> { + let expr = " + R i j k l m + I J K L + "; + test_prefs("el", "SimpleSpeak", vec![("Verbosity", "Verbose")], expr, + "κεφαλαίο r με 4 προτεταγμένα μέρη, προτεταγμένος δείκτης κεφαλαίο i, προτεταγμένος εκθέτης κεφαλαίο j και εναλλάξ προτεταγμένα μέρη κεφαλαίο k none κεφαλαίο l none τέλος προτεταγμένων μερών και με 5 μετατεταγμένα μέρη, δείκτης i εκθέτης j δείκτης k δείκτης l και εναλλάξ τεταγμένα μέρη m none τέλος τεταγμένων μερών")?; + return Ok(()); +//theodora. Το none στις άλλες γλώσσες το έχουν αφήσει έτσι, οπότε το άφησα κι εγώ έτσι. +} + +#[test] +fn prime() -> Result<()> { + let expr = " x "; + test("el", "SimpleSpeak", expr, "x τόνος")?; + return Ok(()); + +} + +#[test] +fn given() -> Result<()> { + let expr = "P(A|B)"; + test("el", "SimpleSpeak", expr, "κεφαλαίο p; ανοίγει παρένθεση; κεφαλαίο A, δεδομένου, κεφαλαίο b; κλείνει παρένθεση")?; + test("el", "ClearSpeak", expr, "κεφαλαίο p; ανοίγει παρένθεση; κεφαλαίο A, δεδομένου, κεφαλαίο b; κλείνει παρένθεση")?; // not good, but follows the spec + return Ok(()); + +} + +#[test] +fn simple_msubsup() -> Result<()> { + let expr = " + + + x + + k + + + i + + + + "; + test("el", "ClearSpeak", expr, "x δείκτης k, στην i οστή δύναμη")?; + return Ok(()); + +} + +#[test] +fn non_simple_msubsup() -> Result<()> { + let expr = "ij2k"; + test("el", "SimpleSpeak", expr, "i δείκτης, j μείον 2 τέλος δείκτη, στην k οστή")?; + test("el", "ClearSpeak", expr, "i δείκτης, j μείον 2 τέλος δείκτη, στην k οστή δύναμη")?; + test_prefs("el", "SimpleSpeak", vec![("Impairment", "LearningDisability")], expr, + "i δείκτης, j μείον 2, στην k οστή")?; + return Ok(()); + +} + +#[test] +fn presentation_mathml_in_semantics() -> Result<()> { + let expr = " + + {\\displaystyle x_k^i} + + + x + + k + + + i + + + + + "; + test("el", "ClearSpeak", expr, "x δείκτης k, στην i οστή δύναμη")?; + return Ok(()); + +} + +#[test] +fn ignore_period() -> Result<()> { + // from https://en.wikipedia.org/wiki/Probability + let expr = " + + {\\displaystyle x_k^i} + + + + P + ( + A + + +  and  + + + B + ) + = + P + ( + A + + B + ) + = + P + ( + A + ) + P + ( + B + ) + . + + + + + "; + test("el", "SimpleSpeak", expr, "κεφαλαίο p; ανοίγει παρένθεση; κεφαλαίο A and κεφαλαίο b; κλείνει παρένθεση; ισούται με; κεφαλαίο p; ανοίγει παρένθεση; κεφαλαίο A τομή κεφαλαίο b; κλείνει παρένθεση; ισούται με; κεφαλαίο p του κεφαλαίο A; κεφαλαίο p του κεφαλαίο b")?; + return Ok(()); + +} + +#[test] +fn ignore_mtext_period() -> Result<()> { + let expr = "{2}."; + test("el", "SimpleSpeak", expr, "το σύνολο 2")?; + return Ok(()); + +} + +#[test] +fn ignore_comma() -> Result<()> { + // from https://en.wikipedia.org/wiki/Probability + let expr = " + + + ϕ + ( + x + ) + = + c + + e + + + + h + + 2 + + + + x + + 2 + + + + + , + + +"; + test("el", "SimpleSpeak", expr, "παραλλαγή του φι, του x; ισούται με; c; e που υψώνεται στη μείον h στο τετράγωνο, x στο τετράγωνο τέλος δύναμης")?; + return Ok(()); + +} + +#[test] +#[ignore] // issue #14 +fn ignore_period_and_space() -> Result<()> { + // from https://en.wikipedia.org/wiki/Probability + let expr = " + + + P + ( + A + + B + ) + = + + + + P + ( + A + + B + ) + + + P + ( + B + ) + + + + . + + + +"; + test("el", "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(()); +// theodora. if not ignored, the correct greek translation: +// κεφαλαίο p; ανοίγει παρένθεση; κεφαλαίο A, δεδομένου κεφαλαίο b; κλείνει παρένθεση; ισούται με; το κλάσμα με αριθμητή; κεφαλαίο p; ανοίγει παρένθεση; κεφαλαίο A τομή κεφαλαίο b; κλείνει παρένθεση; και παρονομαστή κεφαλαίο p του κεφαλαίο b +} + + +#[test] +fn bug_199_2pi() -> Result<()> { + let expr = " + + [ + + 0 + + , + + 2 + π + + ) + + "; + test("el", "SimpleSpeak",expr, "το κλειστό ανοιχτό διάστημα από 0 ως 2 π")?; + return Ok(()); + +} + +#[test] +fn caret_and_hat() -> Result<()> { + let expr = "x^2+y^"; + test("el", "SimpleSpeak",expr, "x καπέλο 2, συν y καπέλο")?; + return Ok(()); + +} + +#[test] +fn mn_with_space() -> Result<()> { + let expr = "1 234 567"; + test_prefs("el", "SimpleSpeak", vec![("DecimalSeparators", "."), ("BlockSeparators", " ,")], expr, "1234567")?; + return Ok(()); + +} + +#[test] +fn ignore_bold() -> Result<()> { + let expr = r#" + x + = + 2 + + 𝒔𝒊𝒏 + + t + + - + 1 + "#; + test_prefs("el", "SimpleSpeak", vec![("IgnoreBold", "false")], + expr, "έντονο x ισούται με; 2, ημίτονο του έντονο t; μείον 1")?; + test_prefs("el", "SimpleSpeak", vec![("IgnoreBold", "true")], + expr, "έντονο x ισούται με; 2, ημίτονο του έντονο t; μείον 1")?; + return Ok(()); + +} + +#[test] +fn mn_with_block_and_decimal_separators() -> Result<()> { + let expr = "1,234.56"; // may want to change this for another language + test_prefs("el", "SimpleSpeak", vec![("DecimalSeparators", "."), ("BlockSeparators", " ,")], expr, "1234.56")?; + return Ok(()); + +} + +#[test] +fn divergence() -> Result<()> { + let expr = "·F"; // may want to change this for another language + test_prefs("el", "SimpleSpeak", vec![("Verbosity", "Terse")], expr, "απόκλιση κεφαλαίο f")?; + test_prefs("el", "SimpleSpeak", vec![("Verbosity", "Verbose")], expr, "απόκλιση του κεφαλαίο f")?; + return Ok(()); + +} + +#[test] +fn curl() -> Result<()> { + let expr = "×F"; + // may want to change this for another language + test_prefs("el", "SimpleSpeak", vec![("Verbosity", "Terse")], expr, "στροβιλισμός κεφαλαίο f")?; + test_prefs("el", "SimpleSpeak", vec![("Verbosity", "Verbose")], expr, "στροβιλισμός του κεφαλαίο f")?; + return Ok(()); + +} + +#[test] +fn gradient() -> Result<()> { + let expr = "F"; + // may want to change this for another language + test_prefs("el", "SimpleSpeak", vec![("Verbosity", "Terse")], expr, "ανάδελτα κεφαλαίο f")?; + test_prefs("el", "SimpleSpeak", vec![("Verbosity", "Verbose")], expr, "ανάδελτα του κεφαλαίο f")?; + return Ok(()); + +} + +#[test] +fn literal_speak_perpendicular() -> Result<()> { + let expr = r#" + + + A + + + + + B + + + + "#; + test("el", "LiteralSpeak", expr, "κεφαλαίο A βέλος προς τα δεξιά; perpendicular to, κεφαλαίο b βέλος προς τα δεξιά")?; + return Ok(()); + +} + +#[test] +fn literal_speak_chars() -> Result<()> { + let expr = r#" + + + x×y + · + z/2 + + + ab + + + x! + + + "#; + test("el", "LiteralSpeak", expr, "κάθετη γραμμη; x σύμβολο πολλαπλασιασμού; y τελεία, z κάθετος 2; συν a; διπλή κάθετη γραμμή; b συν x θαυμαστικό; κάθετη γραμμη")?; + return Ok(()); + +} + +#[test] +fn literal_speak_with_name() -> Result<()> { + let expr = r#" + + f + + + ( + + x + ! + + ) + + + "#; + test("el", "LiteralSpeak", expr, "forced f; αριστερή παρένθεση; x θαυμαστικό, δεξιά παρένθεση")?; + return Ok(()); + + +} + +#[test] +fn literal_speak_with_property() -> Result<()> { + let expr = r#" + + f + + + ( + + x + ! + + ) + + + "#; + test("el", "LiteralSpeak", expr, "f; αριστερή παρένθεση; x θαυμαστικό, δεξιά παρένθεση")?; + return Ok(()); + +} + +#[test] +fn literal_intent_property() -> Result<()> { + let expr = r#" + + + A + + + + + B + + + + "#; + test("el", "SimpleSpeak", expr, "κεφαλαίο A βέλος προς τα δεξιά; perpendicular to, κεφαλαίο b βέλος προς τα δεξιά")?; + return Ok(()); +} + +#[test] +fn literal_intent_property_with_name() -> Result<()> { + let expr = r#" + + f + + + ( + + x + ! + + ) + + + "#; + test("el", "SimpleSpeak", expr, "forced f; ανοίγει παρένθεση, x θαυμαστικό, κλείνει παρένθεση")?; + return Ok(()); + } diff --git a/tests/Languages/el/units.rs b/tests/Languages/el/units.rs new file mode 100644 index 000000000..5aac0a54f --- /dev/null +++ b/tests/Languages/el/units.rs @@ -0,0 +1,554 @@ +/// 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 + +#[test] +fn prefix_sweep() -> Result<()> { + let expr = r#" + Qg, + Rg, + Yg, + Zg, + Eg, + Pg, + Tg, + Gg, + Mg, + kg, + hg, + dag, + dg, + cg, + mg, + µg, + ng, + pg, + fg, + ag, + zg, + yg, + rg, + qg + "#; + test("el", "SimpleSpeak", expr, + "κουέτα-γραμμάρια, κόμμα; \ + ρόνα-γραμμάρια, κόμμα; \ + γιότα-γραμμάρια, κόμμα; \ + ζἐτα-γραμμάρια, κόμμα; \ + έξα-γραμμάρια, κόμμα; \ + πέτα-γραμμάρια, κόμμα; \ + τέρα-γραμμάρια, κόμμα; \ + γκίγκα-γραμμάρια, κόμμα; \ + μέγκα-γραμμάρια, κόμμα, \ + κιλά κόμμα; \ + χέκτο-γραμμάρια, κόμμα; \ + δέκα-γραμμάρια, κόμμα; \ + δεκατό-γραμμάρια, κόμμα; \ + εκατοστό-γραμμάρια; κόμμα; \ + μίλι-γραμμάρια, κόμμα; \ + μίκρο-γραμμάρια, κόμμα; \ + νάνο-γραμμάρια, κόμμα; \ + πίκο-γραμμάρια, κόμμα; \ + φέμτο-γραμμάρια, κόμμα; \ + άτο-γραμμάρια, κόμμα; \ + ζέπτο-γραμμάρια, κόμμα; \ + γιόκτο-γραμμάρια, κόμμα; \ + ρόντο-γραμμάρια, κόμμα; \ + κουέκτο-γραμμάρια")?; + return Ok(()); + +} + +#[test] +fn si_base() -> Result<()> { + let expr = r#" + 1A,2A, + 1cd,2cd, + 1K,2K, + 1,2, + 1g,2g, + 1m,2m, + 1mol,2mol, + 1s,2s, + 1,2, + 1",2", + 1sec,2sec + "#; + test("el", "SimpleSpeak", expr, + "1 αμπέρ, κόμμα; 2 αμπέρ, κόμμα; \ + 1 καντέλα, κόμμα; 2 καντέλα, κόμμα; \ + 1 κέλβιν, κόμμα; 2 κέλβιν, κόμμα; \ + 1 κέλβιν, κόμμα; 2 κέλβιν, κόμμα; \ + 1 γραμμάριο, κόμμα; 2 γραμμάρια, κόμμα; \ + 1 μέτρο, κόμμα; 2 μέτρα, κόμμα; \ + 1 μολ, κόμμα; 2 μολ, κόμμα; \ + 1 δευτερόλεπτο, κόμμα; 2 δευτερόλεπτα, κόμμα; \ + 1 δευτερόλεπτο, κόμμα; 2 δευτερόλεπτα, κόμμα; \ + 1 δευτερόλεπτο, κόμμα; 2 δευτερόλεπτα, κόμμα; \ + 1 δευτερόλεπτο, κόμμα; 2 δευτερόλεπτα")?; + return Ok(()); + +} + +#[test] +fn si_base_with_prefixes() -> Result<()> { + let expr = r#" + 1QA,2RA, + 1Ycd,2Zcd, + 1EK,2PK, + 1TK,2GK, + 1Mg,2kg, + 1hm,2dam, + 1dmol,2cmol, + 1ms,2µs, + 1nsec,2psec + "#; + test("el", "SimpleSpeak", expr, + "1 κουέτα-αμπέρ; κόμμα; 2 ρόνα-αμπέρ; κόμμα; \ + 1 γιότα-καντέλα; κόμμα; 2 ζἐτα-καντέλα; κόμμα; \ + 1 έξα-κέλβιν; κόμμα; 2 πέτα-κέλβιν; κόμμα; \ + 1 τέρα-κέλβιν; κόμμα; 2 γκίγκα-κέλβιν; κόμμα; \ + 1, μέγκα-γραμμάριο; κόμμα; 2 κιλά, κόμμα; \ + 1 χέκτο-μέτρο; κόμμα; 2 δέκα-μέτρα; κόμμα; \ + 1 δεκατό-μολ; κόμμα; 2 εκατοστό-μολ; κόμμα; \ + 1, μίλι-δευτερόλεπτο; κόμμα; 2, μίκρο-δευτερόλεπτα; κόμμα; \ + 1, νάνο-δευτερόλεπτο; κόμμα; 2, πίκο-δευτερόλεπτα")?; + return Ok(()); + +} + + +#[test] +fn si_derived_1() -> Result<()> { + let expr = r#" + 1Bq,2Bq, + 1C,2C, + 1°C,2°C, + 1,2, + 1F,2F, + 1Gy,2Gy, + 1H,2H, + 1Hz,2Hz, + 1J,2J, + 1kat,2kat, + 1lm,2lm, + 1lx,2lx + "#; + test("el", "SimpleSpeak", expr, + "1 μπεκερέλ, κόμμα; 2 μπεκερέλ, κόμμα; \ + 1 κουλόμπ, κόμμα; 2 κουλόμπ, κόμμα; \ + 1 βαθμός κελσίου; κόμμα; 2 βαθμοί κελσίου; κόμμα; \ + 1 βαθμός κελσίου; κόμμα; 2 βαθμοί κελσίου; κόμμα; \ + 1 φαράντ, κόμμα; 2 φαράντ, κόμμα; \ + 1 γκρέυ, κόμμα; 2 γκρέυ, κόμμα; \ + 1 χένρι, κόμμα; 2 χένρι, κόμμα; \ + 1 χέρτς, κόμμα; 2 χέρτς, κόμμα; \ + 1 τζάουλ, κόμμα; 2 τζάουλ, κόμμα; \ + 1 κάτελ, κόμμα; 2 κάτελ, κόμμα; \ + 1 λούμεν, κόμμα; 2 λούμεν, κόμμα; \ + 1 λουξ, κόμμα; 2 λουξ")?; + return Ok(()); + +} + +#[test] +fn si_derived_1_with_prefixes() -> Result<()> { + let expr = r#" + 1QBq,2RBq, + 1YC,2ZC, + 1EF,2PF, + 1TGy,2GGy, + 1MH,2kH, + 1daHz,2dHz, + 1cJ,2mJ, + 1µkat,2nkat, + 1plm,2flm, + 1alx,2zlx, + 1m°C,2µ°C, + 1p℃,2n℃ + "#; + test("el", "SimpleSpeak", expr, + "1, κουέτα-μπεκερέλ; κόμμα; 2 ρόνα-μπεκερέλ; κόμμα; \ + 1 γιότα-κουλόμπ; κόμμα; 2 ζἐτα-κουλόμπ; κόμμα; \ + 1 έξα-φαράντ; κόμμα; 2 πέτα-φαράντ; κόμμα; \ + 1 τέρα-γκρέυ; κόμμα; 2 γκίγκα-γκρέυ; κόμμα; \ + 1 μέγκα-χένρι; κόμμα; 2 χίλιο-χένρι; κόμμα; \ + 1 δέκα-χέρτς; κόμμα; 2 δεκατό-χέρτς; κόμμα; \ + 1, εκατοστό-τζάουλ; κόμμα; 2 μίλι-τζάουλ; κόμμα; \ + 1 μίκρο-κάτελ; κόμμα; 2 νάνο-κάτελ; κόμμα; \ + 1 πίκο-λούμεν; κόμμα; 2 φέμτο-λούμεν; κόμμα; \ + 1 άτο-λουξ, κόμμα; 2 ζέπτο-λουξ; κόμμα; \ + 1, μίλι-βαθμός κελσίου; κόμμα; 2, μίκρο-βαθμοί κελσίου; κόμμα; \ + 1, πίκο-βαθμός κελσίου; κόμμα; 2, νάνο-βαθμοί κελσίου")?; + return Ok(()); + +} + +#[test] +fn si_derived_2() -> Result<()> { + let expr = r#" + 1N,2N, + 1Ω,2Ω, + 1,2, + 1Pa,2Pa, + 1S,2S, + 1Sv,2Sv, + 1T,2T, + 1V,2V, + 1W,2W, + 1Wb,2Wb + "#; + test("el", "SimpleSpeak", expr, + "1 νιούτον, κόμμα; 2 νιούτον, κόμμα; \ + 1 ωμ, κόμμα; 2 ωμ, κόμμα; \ + 1 ωμ, κόμμα; 2 ωμ, κόμμα; \ + 1 πασκάλ, κόμμα; 2 πασκάλ, κόμμα; \ + 1 ζίμενς, κόμμα; 2 ζίμενς, κόμμα; \ + 1 σίβερτ, κόμμα; 2 σίβερτ, κόμμα; \ + 1 τέσλα, κόμμα; 2 τέσλα, κόμμα; \ + 1 βόλτ, κόμμα; 2 βόλτ, κόμμα; \ + 1 βατ, κόμμα; 2 βατ, κόμμα; \ + 1 βέμπερ, κόμμα; 2 βέμπερ")?; + return Ok(()); + +} + +#[test] +fn si_derived_2_with_prefixes() -> Result<()> { + let expr = r#" + 1qN,2rN, + 1,2, + 1aΩ,2fΩ, + 1pPa,2nPa, + 1µS,2mS, + 1cSv,2dSv, + 1daT,2hT, + 1kV,2MV, + 1GW,2TW, + 1PWb,2EWb + "#; + test("el", "SimpleSpeak", expr, + "1, κουέκτο-νιούτον; κόμμα; 2 ρόντο-νιούτον; κόμμα; \ + 1 γιόκτο-ωμ; κόμμα; 2 ζέπτο-ωμ, κόμμα; \ + 1 άτο-ωμ, κόμμα; 2 φέμτο-ωμ, κόμμα; \ + 1 πίκο-πασκάλ; κόμμα; 2 νάνο-πασκάλ; κόμμα; \ + 1 μίκρο-ζίμενς; κόμμα; 2 μίλι-ζίμενς; κόμμα; \ + 1, εκατοστό-σίβερτ; κόμμα; 2 δεκατό-σίβερτ; κόμμα; \ + 1 δέκα-τέσλα; κόμμα; 2 χέκτο-τέσλα; κόμμα; \ + 1 χίλιο-βόλτ; κόμμα; 2 μέγκα-βόλτ; κόμμα; \ + 1 γκίγκα-βατ; κόμμα; 2 τέρα-βατ, κόμμα; \ + 1 πέτα-βέμπερ; κόμμα; 2 έξα-βέμπερ")?; + return Ok(()); + +} + + +#[test] +fn si_accepted() -> Result<()> { + let expr = r#" + 1l,2l, + 1L,2L, + 1,2, + 1t,2t, + 1Da,2Da, + 1Np,2Np, + 1u,2u, + 1eV,2eV, + 1rad,2rad, + 1sr,2sr, + 1a,2a, + 1as,2as, + 1b,2b, + 1B,2B, + 1Bd,2Bd + "#; + test("el", "SimpleSpeak", expr, + "1 λίτρο, κόμμα; 2 λίτρα, κόμμα; \ + 1 λίτρο, κόμμα; 2 λίτρα, κόμμα; \ + 1 λίτρο, κόμμα; 2 λίτρα, κόμμα; \ + 1 τόνος, κόμμα; 2 τόνοι, κόμμα; \ + 1 ντάλτον, κόμμα; 2 ντάλτον, κόμμα; \ + 1 νέπερ, κόμμα; 2 νέπερ, κόμμα; \ + 1, ατομική μονάδα μάζας; κόμμα; 2, ατομικές μονάδες μάζας; κόμμα; \ + 1 ηλεκτρονιοβόλτ; κόμμα; 2 ηλεκτρονιοβόλτ; κόμμα; \ + 1 ακτίνιο, κόμμα; 2 ακτίνια, κόμμα; \ + 1 στερακτίνιο, κόμμα; 2 στερακτίνια, κόμμα; \ + 1 άνουμ, κόμμα; 2 άνουμ, κόμμα; \ + 1 δευτερόλεπτο τόξου; κόμμα; 2 δευτερόλεπτα τόξου; κόμμα; \ + 1 μπιτ, κόμμα; 2 μπιτ, κόμμα; \ + 1 μπάιτ, κόμμα; 2 μπάιτ, κόμμα; \ + 1 μπώ, κόμμα; 2 μπώ")?; + return Ok(()); + +} + +#[test] +fn si_accepted_with_prefixes() -> Result<()> { + let expr = r#" + 1Ql,2Rl, + 1YL,2ZL, + 1Eℓ,2Pℓ, + 1Tt,2Gt, + 1MDa,2kDa, + 1dNp,2cNp, + 1hu,2dau, + 1meV,2µeV, + 1nrad,2prad, + 1fsr,2asr, + 1Ga,2Ma, + 1zas,2yas, + 1kb,2Mb, + 1GB,2TB, + 1TBd,2EBd + "#; + test("el", "SimpleSpeak", expr, + "1 κουέτα-λίτρο; κόμμα; 2 ρόνα-λίτρα; κόμμα; \ + 1 γιότα-λίτρο; κόμμα; 2 ζἐτα-λίτρα; κόμμα; \ + 1 έξα-λίτρο; κόμμα; 2 πέτα-λίτρα; κόμμα; \ + 1 τέρα-τόνος; κόμμα; 2 γκίγκα-τόνοι; κόμμα; \ + 1 μέγκα-ντάλτον; κόμμα; 2 χίλιο-ντάλτον; κόμμα; \ + 1 δεκατό-νέπερ; κόμμα; 2 εκατοστό-νέπερ; κόμμα; \ + 1, χέκτο-ατομική μονάδα μάζας; κόμμα; \ + 2, δέκα-ατομικές μονάδες μάζας; κόμμα; \ + 1, μίλι-ηλεκτρονιοβόλτ; κόμμα; 2, μίκρο-ηλεκτρονιοβόλτ; κόμμα; \ + 1 νάνο-ακτίνιο; κόμμα; 2 πίκο-ακτίνια; κόμμα; \ + 1, φέμτο-στερακτίνιο; κόμμα; 2, άτο-στερακτίνια; κόμμα; \ + 1 γκίγκα-άνουμ; κόμμα; 2 μέγκα-άνουμ; κόμμα; \ + 1, ζέπτο-δευτερόλεπτο τόξου; κόμμα; 2, γιόκτο-δευτερόλεπτα τόξου; κόμμα; \ + 1 κιλο-μπιτ, κόμμα; 2 μέγκα-μπιτ; κόμμα; \ + 1 γκίγκα-μπάιτ; κόμμα; 2 τέρα-μπάιτ; κόμμα; \ + 1 τέρα-μπώ, κόμμα; 2 έξα-μπώ")?; + return Ok(()); + +} + +#[test] +fn without_prefix_time() -> Result<()> { + let expr = r#" + 1,2, + 1",2", + 1,2, + 1',2', + 1min,2min, + 1h,2h, + 1hr,2hr, + 1Hr,2Hr, + 1d,2d, + 1dy,2dy, + 1w,2w, + 1wk,2wk, + 1y,2y, + 1yr,2yr + "#; + test("el", "SimpleSpeak", expr, + "1 δευτερόλεπτο, κόμμα; 2 δευτερόλεπτα, κόμμα; \ + 1 δευτερόλεπτο, κόμμα; 2 δευτερόλεπτα, κόμμα; \ + 1 λεπτό, κόμμα; 2 λεπτά, κόμμα; \ + 1 λεπτό, κόμμα; 2 λεπτά, κόμμα; \ + 1 λεπτό, κόμμα; 2 λεπτά, κόμμα; \ + 1 ώρα, κόμμα; 2 ώρες, κόμμα; \ + 1 ώρα, κόμμα; 2 ώρες, κόμμα; \ + 1 ώρα, κόμμα; 2 ώρες, κόμμα; \ + 1 ημέρα, κόμμα; 2 ημέρες, κόμμα; \ + 1 ημέρα, κόμμα; 2 ημέρες, κόμμα; \ + 1 εβδομάδα, κόμμα; 2 εβδομάδες, κόμμα; \ + 1 εβδομάδα, κόμμα; 2 εβδομάδες, κόμμα; \ + 1 έτος, κόμμα; 2 έτη, κόμμα; \ + 1 έτος, κόμμα; 2 έτη")?; + return Ok(()); + +} + +#[test] +fn without_prefix_angles() -> Result<()> { + let expr = r#" + 1°,2°, + 1deg,2deg, + 1arcmin,2arcmin, + 1amin,2amin, + 1am,2am, + 1MOA,2MOA, + 1arcsec,2arcsec, + 1asec,2asec + "#; + test("el", "SimpleSpeak", expr, + "1 βαθμός, κόμμα; 2 βαθμοί, κόμμα; \ + 1 βαθμός, κόμμα; 2 βαθμοί, κόμμα; \ + 1 λεπτό τόξου, κόμμα; 2 λεπτά τόξου, κόμμα; \ + 1 λεπτό τόξου, κόμμα; 2 λεπτά τόξου, κόμμα; \ + 1 λεπτό τόξου, κόμμα; 2 λεπτά τόξου, κόμμα; \ + 1 λεπτό τόξου, κόμμα; 2 λεπτά τόξου, κόμμα; \ + 1 δευτερόλεπτο τόξου; κόμμα; 2 δευτερόλεπτα τόξου; κόμμα; \ + 1 δευτερόλεπτο τόξου; κόμμα; 2 δευτερόλεπτα τόξου")?; + return Ok(()); + +} + +#[test] +fn without_prefix_distance() -> Result<()> { + let expr = r#" + 1au,2au, + 1ltyr,2ltyr, + 1pc,2pc, + 1Å,2Å, + 1,2, + 1fm,2fm + "#; + test("el", "SimpleSpeak", expr, + "1 αστρονομική μονάδα; κόμμα; 2, αστρονομικές μονάδες; κόμμα; \ + 1 έτος φωτός, κόμμα; 2 έτη φωτός, κόμμα; \ + 1 παρσέκ, κόμμα; 2 παρσέκ, κόμμα; \ + 1 άνγκστρομ, κόμμα; 2 άνγκστρομ, κόμμα; \ + 1 άνγκστρομ, κόμμα; 2 άνγκστρομ, κόμμα; \ + 1 φέρμι, κόμμα; 2 φέρμι")?; + return Ok(()); + +} + +#[test] +fn without_prefix_other() -> Result<()> { + let expr = r#" + 1ha,2ha, + 1dB,2dB, + 1atm,2atm, + 1amu,2amu, + 1bar,2bar, + 1cal,2cal, + 1Ci,2Ci, + 1grad,2grad, + 1M,2M, + 1R,2R, + 1rpm,2rpm, + 1fl dr,2fl dr, + 1,2, + 1dyn,2dyn, + 1erg,2erg + "#; + test("el", "SimpleSpeak", expr, + "1 εκτάριο, κόμμα; 2 εκτάρια, κόμμα; \ + 1 ντεσιμπέλ, κόμμα; 2 ντεσιμπέλ, κόμμα; \ + 1 ατμόσφαιρα, κόμμα; 2 ατμόσφαιρες, κόμμα; \ + 1, ατομική μονάδα μάζας; κόμμα; 2, ατομικές μονάδες μάζας; κόμμα; \ + 1 μπαρ, κόμμα; 2 μπαρ, κόμμα; \ + 1 θερμίδα, κόμμα; 2 θερμίδες, κόμμα; \ + 1 κιουρί, κόμμα; 2 κιουρί, κόμμα; \ + 1 βαθμός, κόμμα; 2 βαθμοί, κόμμα; \ + 1 μολάρ, κόμμα; 2 μολάρ, κόμμα; \ + 1 ρέντγκεν, κόμμα; 2 ρεντγκεν, κόμμα; \ + 1 στροφή ανά λεπτό; κόμμα; 2 στροφές ανά λεπτό; κόμμα; \ + 1 δράμι υγρών, κόμμα; 2 δράμια υγρών, κόμμα; \ + 1 μο, κόμμα; 2 μο, κόμμα; \ + 1 ντυν, κόμμα; 2 ντυν, κόμμα; \ + 1 εργ, κόμμα; 2 εργ")?; + return Ok(()); + +} + +#[test] +fn without_prefix_powers_of_2() -> Result<()> { + let expr = r#" + 1Kib,2Kib, + 1Mib,2Mib, + 1Gib,2Gib, + 1Tib,2Tib, + 1Pib,2Pib, + 1Eib,2Eib, + 1Zib,2Zib, + 1Yib,2Yib, + 1KiB,2KiB, + 1MiB,2MiB, + 1GiB,2GiB, + 1TiB,2TiB, + 1PiB,2PiB, + 1EiB,2EiB, + 1ZiB,2ZiB, + 1YiB,2YiB + "#; + test("el", "SimpleSpeak", expr, + "1 kibi-bit, κόμμα; 2 kibi-bits, κόμμα; \ + 1 mebi-bit, κόμμα; 2 mebi-bits, κόμμα; \ + 1 gibi-bit, κόμμα; 2 gibi-bits, κόμμα; \ + 1 tebi-bit, κόμμα; 2 tebi-bits, κόμμα; \ + 1 pebi-bit, κόμμα; 2 pebi-bits, κόμμα; \ + 1 exbi-bit, κόμμα; 2 exbi-bits, κόμμα; \ + 1 zebi-bit, κόμμα; 2 zebi-bits, κόμμα; \ + 1 yobi-bit, κόμμα; 2 yobi-bits, κόμμα; \ + 1 kibi-byte, κόμμα; 2 kibi-bytes, κόμμα; \ + 1 mebi-byte, κόμμα; 2 mebi-bytes, κόμμα; \ + 1 gibi-byte, κόμμα; 2 gibi-bytes, κόμμα; \ + 1 tebi-byte, κόμμα; 2 tebi-bytes, κόμμα; \ + 1 pebi-byte, κόμμα; 2 pebi-bytes, κόμμα; \ + 1 exbi-byte, κόμμα; 2 exbi-bytes, κόμμα; \ + 1 zebi-byte, κόμμα; 2 zebi-bytes, κόμμα; \ + 1 yobi-byte, κόμμα; 2 yobi-bytes")?; + return Ok(()); + +} + + +#[test] +fn si_other_numbers() -> Result<()> { + let expr = r#"1.0l, + 2.0 m, + x ms, + yµs, + dag, + 1235daN, + 2.5µsec, + 32.34mol"#; + test_prefs("el", "SimpleSpeak", vec![("Verbosity", "Terse")], expr, + "1.0 l κόμμα, 2.0 m κόμμα; x, μίλι-δευτερόλεπτα; κόμμα; y, μίκρο-δευτερόλεπτα; κόμμα; \ + δέκα-γραμμάρια, κόμμα; 1235 δέκα-νιούτον; κόμμα; 2.5, μίκρο-δευτερόλεπτα; κόμμα; 32.34 μολ")?; + test_prefs("el", "ClearSpeak", vec![("Verbosity", "Medium")], expr, + "1.0 λίτρο, κόμμα; 2.0 μέτρα, κόμμα; x, μίλι-δευτερόλεπτα; κόμμα; y, μίκρο-δευτερόλεπτα; κόμμα; \ + δέκα-γραμμάρια, κόμμα; 1235 δέκα-νιούτον; κόμμα; 25, μίκρο-δευτερόλεπτα; κόμμα; 32.34 μολ")?; + test_prefs("el", "SimpleSpeak", vec![("Verbosity", "Verbose")], expr, + "1.0 λίτρο, κόμμα; 2.0 μέτρα, κόμμα; x, μίλι-δευτερόλεπτα; κόμμα; y, μίκρο-δευτερόλεπτα; κόμμα; \ + δέκα-γραμμάρια, κόμμα; 1235 δέκα-νιούτον; κόμμα; 2.5, μίκρο-δευτερόλεπτα; κόμμα; 32.34 μολ")?; + return Ok(()); + //theodora. fails 32.34 --> 3234 + // The issue is at src/prefs (set_separator, decimal_separator) + +} + + +#[test] +fn test_mtext_inference() -> Result<()> { + let expr = r#"[ + 1t, + 2PA, + 3Pa, + 4.5mT + ]"#; + test("el", "SimpleSpeak", expr, + "ανοίγει αγκύλη; 1 τόνος, κόμμα; 2 πέτα-αμπέρ; κόμμα; \ + 3 πασκάλ, κόμμα; 4.5 μίλι-τέσλα; κλείνει αγκύλη")?; + return Ok(()); + //theodora. fails 4.5 --> converted to 45 + // // The issue is at src/prefs (set_separator, decimal_separator) + +} + + #[test] + fn infer_unit() -> Result<()> { + let expr = r#" + 3m, + 1km, + 3m, + 310F, + mmin + "#; + test("el", "SimpleSpeak", expr, + "3 μέτρα, κόμμα; 1 χίλιο-μέτρο; κόμμα; 3 μέτρα, κόμμα; 3 δέκατα φαράντ; κόμμα; m δείκτης ελάχιστο τέλος δείκτη")?; + return Ok(()); + + } diff --git a/tests/Languages/el/uoa_corpus_Clearspeak.rs b/tests/Languages/el/uoa_corpus_Clearspeak.rs new file mode 100644 index 000000000..430d754bb --- /dev/null +++ b/tests/Languages/el/uoa_corpus_Clearspeak.rs @@ -0,0 +1,13738 @@ +use crate::common::*; +use anyhow::Result; + +#[test] +fn uoa_corpus_001() -> Result<()> { // + let expr = r#" + + 1 + 1 + 2 + + + + 1 + 3 + + + 1 + 4 + + + + 1 + 5 + + =ln2 + "#; + test("el", "ClearSpeak", expr, "1 μείον 1 δεύτερο συν 1 τρίτο μείον 1 τέταρτο συν 1 πέμπτο μείον αποσιωπητικά; ισούται με, l n 2")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_002() -> Result<()> { // same + let expr = r#" + + 1 + 1 + 3 + + + + 1 + 5 + + + 1 + 7 + + + + 1 + 9 + + = + π + 4 + + + "#; + test("el", "ClearSpeak", expr, "1 μείον 1 τρίτο συν 1 πέμπτο μείον 1 έβδομο συν 1 ένατο μείον αποσιωπητικά; ισούται με, π προς 4")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_003() -> Result<()> { // + let expr = r#" + + + 1 + 2 + + + 1 + 5 + + + + 1 + 8 + + + 1 + + 11 + + + + 1 + + 14 + + = + + π + 3 + + + 9 + + + + 1 + 3 + + ln2 + "#; + test("el", "ClearSpeak", expr, "1 δεύτερο μείον 1 πέμπτο συν 1 όγδοο μείον 1 προς 11 συν 1 προς 14 μείον αποσιωπητικά; ισούται με; το κλάσμα με αριθμητή; π, η τετραγωνική ρίζα του 3; και παρονομαστή 9; συν, 1 τρίτο l n 2")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_004() -> Result<()> { // + let expr = r#" + + + 1 + + + 1 + 2 + + + + + + 1 + + + 2 + 2 + + + + + + 1 + + + 3 + 2 + + + + + + 1 + + + 4 + 2 + + + + += + + + π + 2 + + + 6 + + + "#; + test("el", "ClearSpeak", expr, "το κλάσμα με αριθμητή 1; και παρονομαστή 1 στο τετράγωνο; συν; το κλάσμα με αριθμητή 1; και παρονομαστή 2 στο τετράγωνο; συν; το κλάσμα με αριθμητή 1; και παρονομαστή 3 στο τετράγωνο; συν; το κλάσμα με αριθμητή 1; και παρονομαστή 4 στο τετράγωνο; συν αποσιωπητικά; ισούται με; το κλάσμα με αριθμητή; π στο τετράγωνο; και παρονομαστή 6")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_005() -> Result<()> { // + let expr = r#" + + + 1 + + + 1 + 4 + + + + + + 1 + + + 2 + 4 + + + + + + 1 + + + 3 + 4 + + + + + + 1 + + + 4 + 4 + + + + += + + + π + 4 + + + + 90 + + + "#; + test("el", "ClearSpeak", expr, "το κλάσμα με αριθμητή 1; και παρονομαστή 1 στην τέταρτη δύναμη; συν; το κλάσμα με αριθμητή 1; και παρονομαστή 2 στην τέταρτη δύναμη; συν; το κλάσμα με αριθμητή 1; και παρονομαστή 3 στην τέταρτη δύναμη; συν; το κλάσμα με αριθμητή 1; και παρονομαστή 4 στην τέταρτη δύναμη; συν αποσιωπητικά; ισούται με; το κλάσμα με αριθμητή; π στην τέταρτη δύναμη; και παρονομαστή 90")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_006() -> Result<()> { // + let expr = r#" + + + 1 + + + 1 + 6 + + + + + + 1 + + + 2 + 6 + + + + + + 1 + + + 3 + 6 + + + + + + 1 + + + 4 + 6 + + + + += + + + π + 6 + + + + 945 + + + "#; + test("el", "ClearSpeak", expr, "το κλάσμα με αριθμητή 1; και παρονομαστή 1 στην έκτη δύναμη; συν; το κλάσμα με αριθμητή 1; και παρονομαστή 2 στην έκτη δύναμη; συν; το κλάσμα με αριθμητή 1; και παρονομαστή 3 στην έκτη δύναμη; συν; το κλάσμα με αριθμητή 1; και παρονομαστή 4 στην έκτη δύναμη; συν αποσιωπητικά; ισούται με; το κλάσμα με αριθμητή; π στην έκτη δύναμη; και παρονομαστή 945")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_007() -> Result<()> { // + let expr = r#" + + + 1 + + + 1 + 6 + + + + + + 1 + + + 2 + 6 + + + + + + 1 + + + 3 + 6 + + + + + + 1 + + + 4 + 6 + + + + += + + 31 + π + 6 + + + + 30,240 + + + "#; + test("el", "ClearSpeak", expr, "το κλάσμα με αριθμητή 1; και παρονομαστή 1 στην έκτη δύναμη; συν; το κλάσμα με αριθμητή 1; και παρονομαστή 2 στην έκτη δύναμη; συν; το κλάσμα με αριθμητή 1; και παρονομαστή 3 στην έκτη δύναμη; συν; το κλάσμα με αριθμητή 1; και παρονομαστή 4 στην έκτη δύναμη; συν αποσιωπητικά; ισούται με; το κλάσμα με αριθμητή; 31 π στην έκτη δύναμη; και παρονομαστή 30,240")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_008() -> Result<()> { // + let expr = r#" + + + 1 + + + 1 + 3 + + + + + + 1 + + + 3 + 3 + + + + + 1 + + + 5 + 3 + + + + + 1 + + + 7 + 3 + + + + += + + 3 + π + 3 + + + 2 + + + + 128 + + + "#; + test("el", "ClearSpeak", expr, "το κλάσμα με αριθμητή 1; και παρονομαστή 1 στον κύβο; συν; το κλάσμα με αριθμητή 1; και παρονομαστή 3 στον κύβο; μείον; το κλάσμα με αριθμητή 1; και παρονομαστή 5 στον κύβο; μείον; το κλάσμα με αριθμητή 1; και παρονομαστή 7 στον κύβο; συν αποσιωπητικά; ισούται με; το κλάσμα με αριθμητή; 3 π στον κύβο; η τετραγωνική ρίζα του 2; και παρονομαστή 128")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_009() -> Result<()> { // + let expr = r#" + + + 1 + + 1×3 + + + + 1 + + 3×5 + + + + 1 + + 5×7 + + + + 1 + + 7×9 + + += + 1 + 2 + + + "#; + test("el", "ClearSpeak", expr, "το κλάσμα με αριθμητή 1; και παρονομαστή 1 επί 3; συν; το κλάσμα με αριθμητή 1; και παρονομαστή 3 επί 5; συν; το κλάσμα με αριθμητή 1; και παρονομαστή 5 επί 7; συν; το κλάσμα με αριθμητή 1; και παρονομαστή 7 επί 9; συν αποσιωπητικά; ισούται με, 1 δεύτερο")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_010() -> Result<()> { // + let expr = r#" + + + 1 + + + 1 + 2 + + × + 3 + 2 + + + + + + 1 + + + 3 + 2 + + × + 5 + 2 + + + + + + 1 + + + 5 + 2 + + × + 7 + 2 + + + + + + 1 + + + 7 + 2 + + × + 9 + 2 + + + + += + + + π + 2 + + 8 + + 16 + + + "#; + test("el", "ClearSpeak", expr, "το κλάσμα με αριθμητή 1; και παρονομαστή 1 στο τετράγωνο, επί 3 στο τετράγωνο; συν; το κλάσμα με αριθμητή 1; και παρονομαστή 3 στο τετράγωνο, επί 5 στο τετράγωνο; συν; το κλάσμα με αριθμητή 1; και παρονομαστή 5 στο τετράγωνο, επί 7 στο τετράγωνο; συν; το κλάσμα με αριθμητή 1; και παρονομαστή 7 στο τετράγωνο, επί 9 στο τετράγωνο; συν αποσιωπητικά; ισούται με; το κλάσμα με αριθμητή; π στο τετράγωνο, μείον 8; και παρονομαστή 16")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_011() -> Result<()> { // + let expr = r#" + + β+ + γ + δ + + ε + "#; + test("el", "ClearSpeak", expr, "βήτα συν γάμμα προς δέλτα, μείον έψιλον")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_012() -> Result<()> { // + let expr = r#" + + + + β+γ + + δ+ε + + + "#; + test("el", "ClearSpeak", expr, "το κλάσμα με αριθμητή; βήτα συν γάμμα; και παρονομαστή δέλτα συν έψιλον")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_013() -> Result<()> { // + let expr = r#" + + + + βγ + δ + + +ε + "#; + test("el", "ClearSpeak", expr, "το κλάσμα με αριθμητή; βήτα μείον γάμμα; και παρονομαστή δέλτα; συν έψιλον")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_014() -> Result<()> { // same + let expr = r#" + + α+β+γ+δ + "#; + test("el", "ClearSpeak", expr, "άλφα συν βήτα συν γάμμα συν δέλτα")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_015() -> Result<()> { // + let expr = r#" + + α+ + β + γ + + +δ + "#; + test("el", "ClearSpeak", expr, "άλφα συν βήτα προς γάμμα, συν δέλτα")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_016() -> Result<()> { // + let expr = r#" + + + α + + β+γ+δ + + + "#; + test("el", "ClearSpeak", expr, "το κλάσμα με αριθμητή άλφα; και παρονομαστή βήτα συν γάμμα συν δέλτα")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_017() -> Result<()> { // + let expr = r#" + + + + α+β + + γ+δ + + + "#; + test("el", "ClearSpeak", expr, "το κλάσμα με αριθμητή; άλφα συν βήτα; και παρονομαστή γάμμα συν δέλτα")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_018() -> Result<()> { // same + let expr = r#" + + ( + + α+β + )( + + γ+δ + ) + "#; + test("el", "ClearSpeak", expr, "ανοίγει παρένθεση; άλφα συν βήτα; κλείνει παρένθεση; φορές; ανοίγει παρένθεση; γάμμα συν δέλτα; κλείνει παρένθεση")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_019() -> Result<()> { // + let expr = r#" + + + + χ+ + ψ + 2 + + + + κ+1 + + + "#; + test("el", "ClearSpeak", expr, "το κλάσμα με αριθμητή; χ συν ψ στο τετράγωνο; και παρονομαστή καπα συν 1")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_020() -> Result<()> { // + let expr = r#" + + χ+ + + + ψ + 2 + + + κ + + +1 + "#; + test("el", "ClearSpeak", expr, "χ συν; το κλάσμα με αριθμητή; ψ στο τετράγωνο; και παρονομαστή καπα; συν 1")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_021() -> Result<()> { // + let expr = r#" + + + + β×( + + γ+δ + ) + + + ε + 2 + + + + + "#; + test("el", "ClearSpeak", expr, "το κλάσμα με αριθμητή; βήτα επί; ανοίγει παρένθεση; γάμμα συν δέλτα; κλείνει παρένθεση; και παρονομαστή έψιλον στο τετράγωνο")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_022() -> Result<()> { // + let expr = r#" + + + 1 + + + 1 + + 2π + + + + + + 1 + + + 3 + + 2π + + + + + + 1 + + + 5 + + 2π + + + + + + 1 + + + 7 + + 2π + + + + += + + ( + + + 2 + + 2π + + 1 + ) + π + + 2π + + + Β + π + + + + 2( + + 2π + )! + + + "#; + test("el", "ClearSpeak", expr, "το κλάσμα με αριθμητή 1; και παρονομαστή 1 υψωμένο στην 2 π τέλος δύναμης; συν; το κλάσμα με αριθμητή 1; και παρονομαστή 3 υψωμένο στην 2 π τέλος δύναμης; συν; το κλάσμα με αριθμητή 1; και παρονομαστή 5 υψωμένο στην 2 π τέλος δύναμης; συν; το κλάσμα με αριθμητή 1; και παρονομαστή 7 υψωμένο στην 2 π τέλος δύναμης; συν αποσιωπητικά; ισούται με; το κλάσμα με αριθμητή; ανοίγει παρένθεση; 2 υψωμένο στην 2 π τέλος δύναμης; μείον 1; κλείνει παρένθεση; π υψωμένο στην 2 π τέλος δύναμης; κεφαλαίο βήτα δείκτης π; και παρονομαστή 2; ανοίγει παρένθεση, 2 π, κλείνει παρένθεση; παραγοντικό")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_023() -> Result<()> { // + let expr = r#" + + + 1 + + + 1 + + 2π + + + + + 1 + + + 2 + + 2π + + + + + + 1 + + + 3 + + 2π + + + + + 1 + + + 4 + + 2π + + + + += + + ( + + + 2 + + 2π1 + + 1 + ) + π + + 2π + + + Β + π + + + + ( + + 2π + )! + + + "#; + test("el", "ClearSpeak", expr, "το κλάσμα με αριθμητή 1; και παρονομαστή 1 υψωμένο στην 2 π τέλος δύναμης; μείον; το κλάσμα με αριθμητή 1; και παρονομαστή 2 υψωμένο στην 2 π τέλος δύναμης; συν; το κλάσμα με αριθμητή 1; και παρονομαστή 3 υψωμένο στην 2 π τέλος δύναμης; μείον; το κλάσμα με αριθμητή 1; και παρονομαστή 4 υψωμένο στην 2 π τέλος δύναμης; συν αποσιωπητικά; ισούται με; το κλάσμα με αριθμητή; ανοίγει παρένθεση; 2 υψωμένο στην 2 π μείον 1 τέλος δύναμης; μείον 1; κλείνει παρένθεση; π υψωμένο στην 2 π τέλος δύναμης; κεφαλαίο βήτα δείκτης π; και παρονομαστή ανοίγει παρένθεση, 2 π, κλείνει παρένθεση; παραγοντικό")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_024() -> Result<()> { // + let expr = r#" + + + 1 + + + 1 + + 2π+1 + + + + + 1 + + + 3 + + 2π+1 + + + + + + 1 + + + 5 + + 2π+1 + + + + + 1 + + + 7 + + 2π+1 + + + + += + + + π + + 2π+1 + + + Ε + π + + + + + 2 + + 2π+2 + + ( + + 2π + )! + + + "#; + test("el", "ClearSpeak", expr, "το κλάσμα με αριθμητή 1; και παρονομαστή 1 υψωμένο στην 2 π συν 1 τέλος δύναμης; μείον; το κλάσμα με αριθμητή 1; και παρονομαστή 3 υψωμένο στην 2 π συν 1 τέλος δύναμης; συν; το κλάσμα με αριθμητή 1; και παρονομαστή 5 υψωμένο στην 2 π συν 1 τέλος δύναμης; μείον; το κλάσμα με αριθμητή 1; και παρονομαστή 7 υψωμένο στην 2 π συν 1 τέλος δύναμης; συν αποσιωπητικά; ισούται με; το κλάσμα με αριθμητή; π υψωμένο στην 2 π συν 1 τέλος δύναμης; κεφαλαίο έψιλον δείκτης π; και παρονομαστή 2 υψωμένο στην 2 π συν 2 τέλος δύναμης; ανοίγει παρένθεση, 2 π, κλείνει παρένθεση; παραγοντικό")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_025() -> Result<()> { // + let expr = r#" + + + + + ( + + α+χ + ) + ν + + = + α + ν + + +ν + α + + ν1 + + χ+ + + ν(ν1) + + 2! + + + α + + ν2 + + + χ + 2 + + + + + + + + + + ν(ν1)(ν2) + + 3! + + + α + + ν3 + + + χ + 3 + + + + + + + "#; + test("el", "ClearSpeak", expr, "2 σειρές; σειρά 1; ανοίγει παρένθεση, άλφα συν χ, κλείνει παρένθεση στην νί οστή δύναμη; ισούται με; άλφα στην νί οστή δύναμη; συν; νί; άλφα υψωμένο στην νί μείον 1 τέλος δύναμης; χ; συν; το κλάσμα με αριθμητή; νί; ανοίγει παρένθεση, νί μείον 1, κλείνει παρένθεση; και παρονομαστή 2 παραγοντικό; άλφα υψωμένο στην νί μείον 2 τέλος δύναμης; χ στο τετράγωνο; σειρά 2; συν το κλάσμα με αριθμητή; νί; ανοίγει παρένθεση, νί μείον 1, κλείνει παρένθεση; ανοίγει παρένθεση, νί μείον 2, κλείνει παρένθεση; και παρονομαστή 3 παραγοντικό; άλφα υψωμένο στην νί μείον 3 τέλος δύναμης; χ στον κύβο; συν αποσιωπητικά")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_026() -> Result<()> { // + let expr = r#" + + + α + χ + + = + e + + χlnα + + =1+χlnα+ + + + + ( + + χlnα + ) + 2 + + + + 2! + + + + + + + ( + + χlnα + ) + 3 + + + + 3! + + + + "#; + test("el", "ClearSpeak", expr, "άλφα στην χ οστή δύναμη; ισούται με; e υψωμένο στην χ l n άλφα τέλος δύναμης; ισούται με; 1 συν, χ l n άλφα, συν; το κλάσμα με αριθμητή; ανοίγει παρένθεση; χ l n άλφα; κλείνει παρένθεση στο τετράγωνο; και παρονομαστή 2 παραγοντικό; συν; το κλάσμα με αριθμητή; ανοίγει παρένθεση; χ l n άλφα; κλείνει παρένθεση στον κύβο; και παρονομαστή 3 παραγοντικό; συν αποσιωπητικά")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_027() -> Result<()> { // + let expr = r#" + + lnχ=2{ + ( + + + + χ1 + + χ+1 + + + )+ + 1 + 3 + + + + ( + + + + χ1 + + χ+1 + + + ) + 3 + + + + 1 + 5 + + + + ( + + + + χ1 + + χ+1 + + + ) + 5 + + + } + "#; + test("el", "ClearSpeak", expr, "l n χ, ισούται με; 2; ανοίγει άγκιστρο; ανοίγει παρένθεση; το κλάσμα με αριθμητή; χ μείον 1; και παρονομαστή χ συν 1; κλείνει παρένθεση; συν; 1 τρίτο; ανοίγει παρένθεση; το κλάσμα με αριθμητή; χ μείον 1; και παρονομαστή χ συν 1; κλείνει παρένθεση στον κύβο; συν; 1 πέμπτο; ανοίγει παρένθεση; το κλάσμα με αριθμητή; χ μείον 1; και παρονομαστή χ συν 1; κλείνει παρένθεση στην πέμπτη δύναμη; συν αποσιωπητικά; κλείνει άγκιστρο")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_028() -> Result<()> { // + let expr = r#" + + + + 2sinμπ + π + + ( + + + + sinχ + + 1 + μ + 2 + + + + + + 2sin2χ + + + 2 + 2 + + + μ + 2 + + + + + + + 3sin3χ + + + 3 + 2 + + + μ + 2 + + + + + ) + "#; + test("el", "ClearSpeak", expr, "το κλάσμα με αριθμητή; 2, ημίτονο του μί π; και παρονομαστή π; ανοίγει παρένθεση; το κλάσμα με αριθμητή ημίτονο χ; και παρονομαστή 1 μείον, μί στο τετράγωνο; μείον; το κλάσμα με αριθμητή; 2, ημίτονο του 2 χ; και παρονομαστή 2 στο τετράγωνο, μείον, μί στο τετράγωνο; συν; το κλάσμα με αριθμητή; 3, ημίτονο του 3 χ; και παρονομαστή 3 στο τετράγωνο, μείον, μί στο τετράγωνο; μείον αποσιωπητικά; κλείνει παρένθεση")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_029() -> Result<()> { // + let expr = r#" + + 1+ + χ + + 1+ + χ + + 1+ + χ + + 1+ + χ + + 1+ + χ + + + + + + + + + + + + "#; + test("el", "ClearSpeak", expr, "1 συν; το κλάσμα με αριθμητή χ; και παρονομαστή 1 συν; το κλάσμα με αριθμητή χ; και παρονομαστή 1 συν; το κλάσμα με αριθμητή χ; και παρονομαστή 1 συν; το κλάσμα με αριθμητή χ; και παρονομαστή 1 συν, χ προς αποσιωπητικά")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_030() -> Result<()> { // + let expr = r#"φ'(χ)+φ(χ)×ψ+ζχ×ψ"#; + test("el", "ClearSpeak", expr, "το κλάσμα με αριθμητή; φ τόνος του χ, συν, φ του χ, επί ψ; συν ζήτα; και παρονομαστή χ επί ψ")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_031() -> Result<()> { // + let expr = r#" + + χ= + + β± + + + β + 2 + + 4αγ + + + + 2α + + + "#; + test("el", "ClearSpeak", expr, "χ ισούται με; το κλάσμα με αριθμητή; μείον βήτα, συν πλήν; η τετραγωνική ρίζα του βήτα στο τετράγωνο, μείον, 4 φορές άλφα φορές γάμμα; και παρονομαστή 2 φορές άλφα")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_032() -> Result<()> { // + let expr = r#" + + + + + β + γ + + + + +δε + "#; + test("el", "ClearSpeak", expr, "η τετραγωνική ρίζα του βήτα προς γάμμα; συν δέλτα μείον έψιλον")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_033() -> Result<()> { // + let expr = r#" + + + + + β + + γ+δ + + + + ε + "#; + test("el", "ClearSpeak", expr, "η τετραγωνική ρίζα του κλάσματος με αριθμητή βήτα; και παρονομαστή γάμμα συν δέλτα; μείον έψιλον")?; + return Ok(()); + //theodora. fails, needs genitive Now reads: η τετραγωνική ρίζα του τo κλάσμα με αριθμητή βήτα; και παρονομαστή γάμμα συν δέλτα; μείον έψιλον +} + +#[test] +fn uoa_corpus_034() -> Result<()> { // + let expr = r#" + + + + + β + γ + + ε + + + "#; + test("el", "ClearSpeak", expr, "η τετραγωνική ρίζα του βήτα προς γάμμα, μείον έψιλον")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_035() -> Result<()> { // + let expr = r#" + + + + β+γ + + + + δ + 2 + + + "#; + test("el", "ClearSpeak", expr, "η τετραγωνική ρίζα του βήτα συν γάμμα; συν, δέλτα στο τετράγωνο")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_036() -> Result<()> { // + let expr = r#" + + + + + β + + +γ + δ + + + "#; + test("el", "ClearSpeak", expr, "το κλάσμα με αριθμητή; η τετραγωνική ρίζα του βήτα; συν γάμμα; και παρονομαστή δέλτα")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_037() -> Result<()> { // + let expr = r#" + + + + + π + + + 2 + + + + + π + 2 + + + + + "#; + test("el", "ClearSpeak", expr, "το κλάσμα με αριθμητή; η τετραγωνική ρίζα του π; και παρονομαστή 2; είναι διάφορο του; η τετραγωνική ρίζα του π προς 2")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_038() -> Result<()> { // + let expr = r#" + + + + 1+ + + 2+ + + 2+ + + 2+ + + + + + + + + + "#; + test("el", "ClearSpeak", expr, "η τετραγωνική ρίζα του 1 συν; η τετραγωνική ρίζα του 2 συν; η τετραγωνική ρίζα του 2 συν; η τετραγωνική ρίζα του 2 συν αποσιωπητικά")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_039() -> Result<()> { // + let expr = r#" + + d( + + χ,ψ + )= + + + + ( + + + χ + 1 + + + ψ + 1 + + + ) + 2 + + + + + ( + + + χ + 2 + + + ψ + 2 + + + ) + 2 + + + + + "#; + test("el", "ClearSpeak", expr, "d; ανοίγει παρένθεση; χ κόμμα, ψ; κλείνει παρένθεση; ισούται με; την τετραγωνική ρίζα του ανοίγει παρένθεση; χ δείκτης 1; μείον, ψ δείκτης 1; κλείνει παρένθεση στο τετράγωνο; συν; ανοίγει παρένθεση; χ δείκτης 2; μείον, ψ δείκτης 2; κλείνει παρένθεση στο τετράγωνο")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_040() -> Result<()> { // + let expr = r#" + + Σ= + + + + α + β + + + 2π×φ(χ)× + + 1+ + + [ + φ'(χ) ] + 2 + + + + dχ + + + + "#; + test("el", "ClearSpeak", expr, "κεφαλαίο σίγμα, ισούται με; ολοκλήρωμα από άλφα ως βήτα του; 2 π επί φ του χ, επί; η τετραγωνική ρίζα του 1 συν; ανοίγει αγκύλη, φ τόνος, του χ; κλείνει αγκύλη στο τετράγωνο; d χ")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_041() -> Result<()> { // + let expr = r#" + + σ= + + [ + + + + + + + ( + + χ + χ + ¯ + + + ) + 2 + + + + ν + + ] + + + "#; + test("el", "ClearSpeak", expr, "σίγμα ισούται με; την τετραγωνική ρίζα του ανοίγει αγκύλη; το κλάσμα με αριθμητή; άθροισμα του ανοίγει παρένθεση; χ μείον χ παύλα; κλείνει παρένθεση στο τετράγωνο; και παρονομαστή νί; κλείνει αγκύλη")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_042() -> Result<()> { // + let expr = r#" + + Ω= + + Ω + ¯ + + + Ω + + + "#; + test("el", "ClearSpeak", expr, "μερικό διαφορικό, κεφαλαίο ωμέγα; ισούται με; το κλάσμα με αριθμητή; κεφαλαίο ωμέγα παύλα; και παρονομαστή κεφαλαίο ωμέγα")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_043() -> Result<()> { // same + let expr = r#" + + + υ + τ + + ( + + χ,τ + )=( + + Λ( + χ + )υ( + + χ,τ + ) + ) + "#; + test("el", "ClearSpeak", expr, "ύψιλον δείκτης τάαφ; ανοίγει παρένθεση; χ κόμμα, τάαφ; κλείνει παρένθεση; ισούται με; ανάδελτα του ανοίγει παρένθεση; κεφαλαίο λάμδα, του χ; ανάδελτα του ύψιλον; ανοίγει παρένθεση; χ κόμμα, τάαφ; κλείνει παρένθεση; κλείνει παρένθεση")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_044() -> Result<()> { // same + let expr = r#" + + + + Δ + + υ( + χ + )= + + + Κ,σ + + υ + "#; + test("el", "ClearSpeak", expr, "το ανάδελτα δείκτης, κεφαλαίο δέλτα; ύψιλον του χ; ισούται με; το ανάδελτα δείκτης; κεφαλαίο καπα, κόμμα, σίγμα τέλος δείκτη; ύψιλον")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_045() -> Result<()> { // + let expr = r#" + + + + 0 + + + υ + ν + + = + υ + ν + + + "#; + test("el", "ClearSpeak", expr, "μερικό διαφορικό στην 0 δύναμη; ύψιλον δείκτης νί; ισούται με, ύψιλον δείκτης νί")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_046() -> Result<()> { // + let expr = r#" + + + + 2 + + + υ + ν + + = + 1 + κ + + ( + + + + 1 + + + υ + ν + + + + 1 + + + υ + + ν1 + + + ) + "#; + test("el", "ClearSpeak", expr, "μερικό διαφορικό στο τετράγωνο; ύψιλον δείκτης νί; ισούται με; 1 προς καπα; ανοίγει παρένθεση; μερικό διαφορικό στην πρώτη δύναμη; ύψιλον δείκτης νί; μείον; μερικό διαφορικό στην πρώτη δύναμη; ύψιλον δείκτης, νί μείον 1 τέλος δείκτη; κλείνει παρένθεση")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_047() -> Result<()> { // + let expr = r#" + + α + + + Δ + + + η + Δ + ν + + + "#; + test("el", "ClearSpeak", expr, "άλφα; νόρμα του ανάδελτα δείκτης, κεφαλαίο δέλτα; ήτα δείκτης, κεφαλαίο δέλτα, στην νί οστή δύναμη")?; + return Ok(()); + //theodora. fails. Now reads: άλφα; νόρμα του το ανάδελτα δείκτης, κεφαλαίο δέλτα; ήτα δείκτης, κεφαλαίο δέλτα, στην νί οστή δύναμη. + //should be fixed when genitive is introduced +} + +#[test] +fn uoa_corpus_048() -> Result<()> { // + let expr = r#" + + + + + d + 2 + + υ + + d + λ + 2 + + + + + "#; + test("el", "ClearSpeak", expr, "το κλάσμα με αριθμητή; d στο τετράγωνο, ύψιλον; και παρονομαστή d, λάμδα στο τετράγωνο")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_049() -> Result<()> { // same + let expr = r#" + + ( + + Φ( + + τ,υ( + τ + ) + ) + ) + "#; + test("el", "ClearSpeak", expr, "ανάδελτα του ανοίγει παρένθεση; κεφαλαίο φ; ανοίγει παρένθεση; τάαφ κόμμα; ύψιλον του τάαφ; κλείνει παρένθεση; κλείνει παρένθεση")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_050() -> Result<()> { // same + let expr = r#" + + + υ + ¨ + + ( + τ + )=Φ( + + τ,υ( + τ + ) + ) + "#; + test("el", "ClearSpeak", expr, "ύψιλον διπλή κουκκίδα; του τάαφ; ισούται με; ανάδελτα του κεφαλαίο φ; ανοίγει παρένθεση; τάαφ κόμμα; ύψιλον του τάαφ; κλείνει παρένθεση")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_051() -> Result<()> { // + let expr = r#" + + | + Η( + + τ,χ + ) |φ( + τ + ) + + | χ | + α + + +γ( + τ + ) + "#; + test("el", "ClearSpeak", expr, "απόλυτη τιμή του ανάδελτα του κεφαλαίο ήτα; ανοίγει παρένθεση; τάαφ κόμμα, χ; κλείνει παρένθεση; είναι μικρότερο από ή ίσο με; φ του τάαφ; απόλυτη τιμή του χ, στην άλφα οστή δύναμη; συν, γάμμα του τάαφ")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_052() -> Result<()> { // same + let expr = r#" + + + φ + + + ( + + + υ + ν + + + )0 + "#; + test("el", "ClearSpeak", expr, "φ τόνος, του; ανοίγει παρένθεση; ύψιλον δείκτης νί; κλείνει παρένθεση; βέλος προς τα δεξιά 0")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_053() -> Result<()> { // + let expr = r#" + + + + + υ + ˜ + + + ν + + | + + + φ + + + ( + + + υ + ν + + + ), + + υ + ˜ + + + ν + + | + "#; + test("el", "ClearSpeak", expr, "νόρμα του ύψιλον κυματοειδής γραμμή, δείκτης νί; είναι μεγαλύτερο από ή ίσο με; απόλυτη τιμή του αριστερά γωνιακή αγκύλη; φ τόνος, του; ανοίγει παρένθεση; ύψιλον δείκτης νί; κλείνει παρένθεση; κόμμα; ύψιλον κυματοειδής γραμμή, δείκτης νί; δεξιά γωνιακή αγκύλη")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_054() -> Result<()> { // + let expr = r#" + + + + + + ξ + + + υ + 1 + + + + + τ + ξ + + + + + "#; + test("el", "ClearSpeak", expr, "το κλάσμα με αριθμητή; μερικό διαφορικό στην ξ οστή δύναμη; ύψιλον δείκτης 1; και παρονομαστή μερικό διαφορικό; τάαφ στην ξ οστή δύναμη")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_055() -> Result<()> { // same + let expr = r#" + + ιΔυ + υ + τ + + φ + "#; + test("el", "ClearSpeak", expr, "ιΔυ μείον, ύψιλον δείκτης τάαφ; φ")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_056() -> Result<()> { // same + let expr = r#" + + + Δ + ω + + υ+κ×υ=0 + "#; + test("el", "ClearSpeak", expr, "κεφαλαίο δέλτα δείκτης ωμέγα; ύψιλον; συν, καπα επί ύψιλον; ισούται με 0")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_057() -> Result<()> { // same + let expr = r#" + + χ=ρ× + χ + + + + "#; + test("el", "ClearSpeak", expr, "χ ισούται με, ρ επί χ τόνος")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_058() -> Result<()> { // + let expr = r#" + + + + + + + υ + + ω + + | + + ω=0 + + + "#; + test("el", "ClearSpeak", expr, "το κλάσμα με αριθμητή; μερικό διαφορικό, ύψιλον; και παρονομαστή μερικό διαφορικό, ωμέγα; κάθετη γραμμή δείκτης, ωμέγα ισούται με 0 τέλος δείκτη")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_059() -> Result<()> { // + let expr = r#" + + + + + + 2 + + υ + + + v + 2 + + + + + λ + 2 + + υ=0 + "#; + test("el", "ClearSpeak", expr, "το κλάσμα με αριθμητή; μερικό διαφορικό στο τετράγωνο; ύψιλον; και παρονομαστή μερικό διαφορικό, v στο τετράγωνο; μείον, λάμδα στο τετράγωνο, ύψιλον; ισούται με 0")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_060() -> Result<()> { // + let expr = r#" + + + + + + χ + ξ + + + + + γ + 2 + + ( + τ + )lnρ= + γ + 2 + + ( + τ + ) + + + χ + ξ + + + + + ρ + 2 + + + + + "#; + test("el", "ClearSpeak", expr, "το κλάσμα με αριθμητή; μερικό διαφορικό; και παρονομαστή μερικό διαφορικό, χ δείκτης ξ; γάμμα δείκτης 2; του τάαφ; l n ρ; ισούται με; γάμμα δείκτης 2; του τάαφ; το κλάσμα με αριθμητή; χ δείκτης ξ; και παρονομαστή ρ στο τετράγωνο")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_061() -> Result<()> { // + let expr = r#" + + + 1 + ρ + + sin + + ωπ + + + ω + 0 + + + + + + + ω + + + "#; + test("el", "ClearSpeak", expr, "1 προς ρ; ημίτονο του; το κλάσμα με αριθμητή; ωμέγα π; και παρονομαστή ωμέγα δείκτης 0; το κλάσμα με αριθμητή; μερικό διαφορικό; και παρονομαστή μερικό διαφορικό, ωμέγα")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_062() -> Result<()> { // same + let expr = r#" + + υ( + 0 + )= + υ + + + ( + 1 + )= + υ + + + ( + 0 + )= + υ + + + ( + 1 + )=0 + "#; + test("el", "ClearSpeak", expr, "ύψιλον του 0, ισούται με, ύψιλον τόνος; του 1; ισούται με; ύψιλον διπλή παράγωγος; του 0; ισούται με; ύψιλον τριπλή παράγωγος; του 1; ισούται με 0")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_063() -> Result<()> { // same + let expr = r#" + + + υ + + ( + 4 + ) + + ( + τ + )=φ( + + τ,υ( + τ + ) + ) + "#; + test("el", "ClearSpeak", expr, "η ανοίγει παρένθεση 4 κλείνει παρένθεση δύναμη του, ύψιλον; του τάαφ; ισούται με; φ; ανοίγει παρένθεση; τάαφ κόμμα; ύψιλον του τάαφ; κλείνει παρένθεση")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_064() -> Result<()> { // + let expr = r#" + + + + + + 2 + + + + + u + 2 + + + + Ξ( + + τ,σ + )=Γ( + + τ,σ + ) + "#; + test("el", "ClearSpeak", expr, "το κλάσμα με αριθμητή; μερικό διαφορικό στο τετράγωνο; και παρονομαστή μερικό διαφορικό, u στο τετράγωνο; κεφαλαίο ξ; ανοίγει παρένθεση; τάαφ κόμμα, σίγμα; κλείνει παρένθεση; ισούται με; μείον κεφαλαίο γάμμα; ανοίγει παρένθεση; τάαφ κόμμα, σίγμα; κλείνει παρένθεση")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_065() -> Result<()> { // + let expr = r#" + + | + υ |=max{ + υ , + υ + + + , + υ + + + } + "#; + test("el", "ClearSpeak", expr, "απόλυτη τιμή του νόρμα του ύψιλον; ισούται με; μέγιστο του; συνόλου νόρμα του ύψιλον, κόμμα; νόρμα του ύψιλον τόνος; κόμμα; νόρμα του ύψιλον διπλή παράγωγος")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_066() -> Result<()> { // + let expr = r#" + + + + ( + + + υ + * + + + ) + + + + ( + τ + )= + + ( + + Τ + υ + * + + + ) + + + + ( + τ + ) + "#; + test("el", "ClearSpeak", expr, "ανοίγει παρένθεση; ύψιλον αστερίσκος; κλείνει παρένθεση υψωμένο στην τόνος τόνος, τέλος δύναμης; του τάαφ; ισούται με; ανοίγει παρένθεση; κεφαλαίο τάαφ; ύψιλον αστερίσκος; κλείνει παρένθεση υψωμένο στην τόνος τόνος, τέλος δύναμης; του τάαφ")?; + return Ok(()); + //theodora. fails. Since υ* and Tυ* are functions or operators it would be best to read "Tυ* of τ" + //Now reads: ανοίγει παρένθεση; ύψιλον αστερίσκος; κλείνει παρένθεση υψωμένο στην τόνος τόνος, τέλος δύναμης; τάαφ; ισούται με; ανοίγει παρένθεση; κεφαλαίο τάαφ; ύψιλον αστερίσκος; κλείνει παρένθεση υψωμένο στην τόνος τόνος, τέλος δύναμης; τάαφ +} + +#[test] +fn uoa_corpus_067() -> Result<()> { // + let expr = r#" + + + d + + dτ + + ( + + + + | + + υ + ˙ + + ( + τ + ) | + + π( + τ + )2 + + + υ + ˙ + + ( + τ + ) + )=Φ( + + τ,υ( + τ + ) + ) + "#; + test("el", "ClearSpeak", expr, "το κλάσμα με αριθμητή d; και παρονομαστή d τάαφ; ανοίγει παρένθεση; απόλυτη τιμή του ύψιλον τελεία; του τάαφ, υψωμένο στην π του τάαφ, μείον 2 τέλος δύναμης; ύψιλον τελεία; του τάαφ; κλείνει παρένθεση; ισούται με; ανάδελτα του κεφαλαίο φ; ανοίγει παρένθεση; τάαφ κόμμα; ύψιλον του τάαφ; κλείνει παρένθεση")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_068() -> Result<()> { // + let expr = r#"ddτ(υ2+2ΩΦ(υ)dχ)+2υτ2=2((ατ,υτ))"#; + test("el", "ClearSpeak", expr, "το κλάσμα με αριθμητή d; και παρονομαστή d τάαφ; ανοίγει παρένθεση; νόρμα του ανάδελτα του ύψιλον στο τετράγωνο; συν; 2; ολοκλήρωμα επί του συνόλου κεφαλαίο ωμέγα του; κεφαλαίο φ του ύψιλον; d χ; κλείνει παρένθεση; συν; 2; νόρμα του κλάσματος με αριθμητή; μερικό διαφορικό, ύψιλον; και παρονομαστή μερικό διαφορικό, τάαφ; στο τετράγωνο; ισούται με; 2; ανοίγει παρένθεση; ανοίγει παρένθεση; το κλάσμα με αριθμητή; μερικό διαφορικό, άλφα; και παρονομαστή μερικό διαφορικό, τάαφ; κόμμα; το κλάσμα με αριθμητή; μερικό διαφορικό, ύψιλον; και παρονομαστή μερικό διαφορικό, τάαφ; κλείνει παρένθεση; κλείνει παρένθεση")?; + return Ok(()); + //theodora. fails, needs genitive +} + +#[test] +fn uoa_corpus_069() -> Result<()> { // + let expr = r#"τ(υτ)Δυτ+φ'(υ)υτ=ατ+Δαυυτ"#; + test("el", "ClearSpeak", expr, "το κλάσμα με αριθμητή; μερικό διαφορικό; και παρονομαστή μερικό διαφορικό, τάαφ; ανοίγει παρένθεση; το κλάσμα με αριθμητή; μερικό διαφορικό, ύψιλον; και παρονομαστή μερικό διαφορικό, τάαφ; κλείνει παρένθεση; μείον; κεφαλαίο δέλτα; το κλάσμα με αριθμητή; μερικό διαφορικό, ύψιλον; και παρονομαστή μερικό διαφορικό, τάαφ; συν; φ τόνος, του ύψιλον; το κλάσμα με αριθμητή; μερικό διαφορικό, ύψιλον; και παρονομαστή μερικό διαφορικό, τάαφ; ισούται με; μείον το κλάσμα με αριθμητή; μερικό διαφορικό, άλφα; και παρονομαστή μερικό διαφορικό, τάαφ; συν, κεφαλαίο δέλτα, άλφα; μείον ύψιλον μείον; το κλάσμα με αριθμητή; μερικό διαφορικό, ύψιλον; και παρονομαστή μερικό διαφορικό, τάαφ")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_071() -> Result<()> { // + let expr = r#" + + + + + υ + μ + + + + τ + + + + + + ν + μ + + + + τ + + + + + + + υ + ¯ + + + μ + + + + χ + + = + + φ + ¯ + + + μ + + + "#; + test("el", "ClearSpeak", expr, "το κλάσμα με αριθμητή; μερικό διαφορικό; ύψιλον δείκτης μί; και παρονομαστή μερικό διαφορικό, τάαφ; συν; το κλάσμα με αριθμητή; μερικό διαφορικό; νί δείκτης μί; και παρονομαστή μερικό διαφορικό, τάαφ; συν; το κλάσμα με αριθμητή; μερικό διαφορικό; ύψιλον παύλα, δείκτης μί; και παρονομαστή μερικό διαφορικό χ; ισούται με, φ παύλα, δείκτης μί")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_072() -> Result<()> { // + let expr = r#"sup0τΤ[(υνυ)τ]+sup0τΤ[(θνθ)τ] Γ(λν+118+μν+118)"#; + test("el", "ClearSpeak", expr, "σουπρέμουμ για 0, είναι μικρότερο από ή ίσο με; τάαφ, είναι μικρότερο από ή ίσο με; κεφαλαίο τάαφ; του; ανοίγει αγκύλη; το κλάσμα με αριθμητή; μερικό διαφορικό; ανοίγει παρένθεση; ύψιλον δείκτης νί; μείον ύψιλον; κλείνει παρένθεση; και παρονομαστή μερικό διαφορικό, τάαφ; κλείνει αγκύλη; συν; σουπρέμουμ για 0, είναι μικρότερο από ή ίσο με; τάαφ, είναι μικρότερο από ή ίσο με; κεφαλαίο τάαφ; του; ανοίγει αγκύλη; το κλάσμα με αριθμητή; μερικό διαφορικό; ανοίγει παρένθεση; θήτα δείκτης νί; μείον θήτα; κλείνει παρένθεση; και παρονομαστή μερικό διαφορικό, τάαφ; κλείνει αγκύλη; είναι μικρότερο από ή ίσο με; κεφαλαίο γάμμα; ανοίγει παρένθεση; λάμδα δείκτης, νί συν 1 τέλος δείκτη, υψωμένο στην μείον 1 όγδοο τέλος δύναμης; συν; μί δείκτης, νί συν 1 τέλος δείκτη, υψωμένο στην μείον 1 όγδοο τέλος δύναμης; κλείνει παρένθεση")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_073() -> Result<()> { // + let expr = r#" + + + + d[ + + + φ(χ) + + τ(χ) + + ] + + dx + + = + + τ(χ)× + + d[ + φ(χ) ] + + dx + + φ(χ)× + + d[ + τ(χ) ] + + dx + + + + + + [ + τ(χ) ] + 2 + + + + + "#; + test("el", "ClearSpeak", expr, "το κλάσμα με αριθμητή; d του; ανοίγει αγκύλη; φ του χ προς τάαφ του χ; κλείνει αγκύλη; και παρονομαστή d x; ισούται με; το κλάσμα με αριθμητή; τάαφ του χ, επί; το κλάσμα με αριθμητή; d; ανοίγει αγκύλη, φ του χ, κλείνει αγκύλη; και παρονομαστή d x; μείον; φ του χ, επί; το κλάσμα με αριθμητή; d; ανοίγει αγκύλη, τάαφ του χ, κλείνει αγκύλη; και παρονομαστή d x; και παρονομαστή ανοίγει αγκύλη, τάαφ του χ, κλείνει αγκύλη στο τετράγωνο")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_074() -> Result<()> { // same + let expr = r#" + + + δ + + Κ,σ + + >0 + "#; + test("el", "ClearSpeak", expr, "δέλτα δείκτης; κεφαλαίο καπα, κόμμα, σίγμα τέλος δείκτη; είναι μεγαλύτερο από 0")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_075() -> Result<()> { // + let expr = r#" + + + β + σ + Κ + + 0 + "#; + test("el", "ClearSpeak", expr, "βήτα δείκτης σίγμα, στην κεφαλαίο καπα οστή δύναμη; είναι διάφορο του 0")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_076() -> Result<()> { // + let expr = r#" + + + χ + σ + + = + + + + ΚΜ + + + + β + σ + Κ + + + χ + Κ + + + + "#; + test("el", "ClearSpeak", expr, "χ δείκτης σίγμα; ισούται με; άθροισμα για κεφαλαίο καπα, ανήκει κεφαλαίο μί του; βήτα δείκτης σίγμα, στην κεφαλαίο καπα οστή δύναμη; χ δείκτης, κεφαλαίο καπα")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_077() -> Result<()> { // same + let expr = r#" + + + + { + + χ + Κ + + } + Κ + + + "#; + test("el", "ClearSpeak", expr, "ανοίγει άγκιστρο; χ δείκτης, κεφαλαίο καπα; κλείνει άγκιστρο δείκτης, κεφαλαίο καπα")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_078() -> Result<()> { // + let expr = r#" + + + υ + Κ + + =φ( + + + χ + Κ + + + ),ΚΜ + "#; + test("el", "ClearSpeak", expr, "ύψιλον δείκτης, κεφαλαίο καπα; ισούται με; φ του; ανοίγει παρένθεση; χ δείκτης, κεφαλαίο καπα; κλείνει παρένθεση; κόμμα; για κάθε; κεφαλαίο καπα, ανήκει κεφαλαίο μί")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_079() -> Result<()> { // + let expr = r#" + + + + 1 + + + υ + ν + + = + + + υ + ν + + + υ + + ν1 + + + κ + + + "#; + test("el", "ClearSpeak", expr, "μερικό διαφορικό στην πρώτη δύναμη; ύψιλον στην νί οστή δύναμη; ισούται με; το κλάσμα με αριθμητή; ύψιλον στην νί οστή δύναμη; μείον; ύψιλον υψωμένο στην νί μείον 1 τέλος δύναμης; και παρονομαστή καπα")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_080() -> Result<()> { // + let expr = r#" + + + Φ + + Κ,σ + + ( + υ + )= + + + + + σ + + + + Ε + κ + + + + + + Α + + σ + σ + + + + + ( + + + υ + κ + + + υ + + σ + + + + + + ) + + "#; + test("el", "ClearSpeak", expr, "κεφαλαίο φ δείκτης; κεφαλαίο καπα, κόμμα, σίγμα τέλος δείκτη; του ύψιλον; ισούται με; άθροισμα για σίγμα τόνος; ανήκει, κεφαλαίο έψιλον δείκτης καπα, του; κεφαλαίο άλφα υψωμένο στην σίγμα σίγμα τόνος, τέλος δύναμης; ανοίγει παρένθεση; ύψιλον δείκτης καπα; μείον; ύψιλον δείκτης, σίγμα τόνος, τέλος δείκτη; κλείνει παρένθεση")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_081() -> Result<()> { // + let expr = r#" + + α + + | υ | + χ + 2 + + + + + υ,υ + Φ + + + "#; + test("el", "ClearSpeak", expr, "άλφα; απόλυτη τιμή του ύψιλον, δείκτης χ, στο τετράγωνο; είναι μικρότερο από ή ίσο με; αριστερά γωνιακή αγκύλη; ύψιλον κόμμα, ύψιλον; δεξιά γωνιακή αγκύλη δείκτης, κεφαλαίο φ")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_082() -> Result<()> { // + let expr = r#" + + + Γ + 6 + + = + δ + 3 + + θ+ + δ + + + 7 + 2 + + + + + θ + 2 + + + + δ + + + 5 + 2 + + + + θ+1 + "#; + test("el", "ClearSpeak", expr, "κεφαλαίο γάμμα δείκτης 6; ισούται με; δέλτα στον κύβο, θήτα; συν; δέλτα υψωμένο στην 7 δεύτερα τέλος δύναμης; θήτα στο τετράγωνο; συν; δέλτα υψωμένο στην 5 δεύτερα τέλος δύναμης; θήτα; συν 1")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_083() -> Result<()> { // + let expr = r#" + + + + υ + ¯ + + + Δ + 0 + + = + υ + Δ + 0 + + + "#; + test("el", "ClearSpeak", expr, "ύψιλον παύλα, δείκτης, κεφαλαίο δέλτα, στην 0 δύναμη; ισούται με; ύψιλον δείκτης, κεφαλαίο δέλτα, στην 0 δύναμη")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_084() -> Result<()> { // + let expr = r#" + + + θ + 2 + + + υ + ν + + = + κ + + 1 + + ( + + + + 1 + + + υ + ν + + + + 1 + + + υ + + ν1 + + + ) + "#; + test("el", "ClearSpeak", expr, "θήτα στο τετράγωνο; ύψιλον στην νί οστή δύναμη; ισούται με; καπα στην μείον 1 δύναμη; ανοίγει παρένθεση; μερικό διαφορικό στην πρώτη δύναμη; ύψιλον στην νί οστή δύναμη; μείον; μερικό διαφορικό στην πρώτη δύναμη; ύψιλον υψωμένο στην νί μείον 1 τέλος δύναμης; κλείνει παρένθεση")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_085() -> Result<()> { // same + let expr = r#" + + χ + "#; + test("el", "ClearSpeak", expr, "νόρμα του χ")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_086() -> Result<()> { // + let expr = r#" + + α + + η + Δ + + ν+1 + + χ + Γ + π + + + Μ + Δ + + ν+1 + + + "#; + test("el", "ClearSpeak", expr, "άλφα; νόρμα του ήτα δείκτης, κεφαλαίο δέλτα, υψωμένο στην νί συν 1 τέλος δύναμης; χ; είναι μικρότερο από ή ίσο με; κεφαλαίο γάμμα δείκτης π; κεφαλαίο μί δείκτης, κεφαλαίο δέλτα, υψωμένο στην νί συν 1 τέλος δύναμης")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_087() -> Result<()> { // + let expr = r#" + + + Φ + 2 + + ( + + τ,χ + )=| + sinωτ | + + | χ | + 3 + + + "#; + test("el", "ClearSpeak", expr, "κεφαλαίο φ δείκτης 2; ανοίγει παρένθεση; τάαφ κόμμα, χ; κλείνει παρένθεση; ισούται με; απόλυτη τιμή του ημίτονο του ωμέγα τάαφ; απόλυτη τιμή του χ, στον κύβο")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_088() -> Result<()> { // + let expr = r#" + + Η( + + τ,χ + )= + + | χ | + + 1+α + + + "#; + test("el", "ClearSpeak", expr, "κεφαλαίο ήτα; ανοίγει παρένθεση; τάαφ κόμμα, χ; κλείνει παρένθεση; ισούται με; μείον απόλυτη τιμή του χ, υψωμένο στην 1 συν άλφα τέλος δύναμης")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_089() -> Result<()> { // same + let expr = r#" + + γ= + + log + + 2λ + + ( + + 2μ + ) + "#; + test("el", "ClearSpeak", expr, "γάμμα ισούται με; το λογάριθμο με βάση 2 λάμδα; του; ανοίγει παρένθεση, 2 μί, κλείνει παρένθεση")?; + return Ok(()); + //theodora. fails. accusative rule doesn't include log with base +} + +#[test] +fn uoa_corpus_090() -> Result<()> { // + let expr = r#" + + + 1 + 2 + + μ< + 2 + + + π + + + 1 + + + λ + + + π + + + + + + "#; + test("el", "ClearSpeak", expr, "1 δεύτερο, είναι μικρότερο από ή ίσο με; μί είναι μικρότερο από; 2 υψωμένο στην π εκθέτης μείον; μείον 1 τέλος δύναμης; λάμδα υψωμένο στην π εκθέτης μείον, τέλος δύναμης")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_091() -> Result<()> { // + let expr = r#" + + + + | υ | + + π( + τ + ) + + >1 + + | υ | + + π( + τ + ) + + + π + + + + + ρ( + υ + ) + + | υ | + + π( + τ + ) + + + π + + + + + + + "#; + test("el", "ClearSpeak", expr, "απόλυτη τιμή του ύψιλον, δείκτης, π του τάαφ; είναι μεγαλύτερο από; 1, διπλό βέλος προς τα δεξιά; απόλυτη τιμή του ύψιλον, δείκτης, π του τάαφ, υψωμένο στην π εκθέτης μείον, τέλος δύναμης; είναι μικρότερο από ή ίσο με; ρ του ύψιλον; είναι μικρότερο από ή ίσο με; απόλυτη τιμή του ύψιλον, δείκτης, π του τάαφ, υψωμένο στην π εκθέτης συν, τέλος δύναμης")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_092() -> Result<()> { // + let expr = r#" + + + Β + Τ + + 1,π( + τ + ) + + = + + Β + ˜ + + + Τ + + 1,π( + τ + ) + + + + Ν + + + "#; + test("el", "ClearSpeak", expr, "κεφαλαίο βήτα δείκτης, κεφαλαίο τάαφ, υψωμένο στην 1, π του τάαφ τέλος δύναμης; ισούται με; κεφαλαίο βήτα κυματοειδής γραμμή, δείκτης, κεφαλαίο τάαφ, υψωμένο στην 1, π του τάαφ τέλος δύναμης; κυκλωμένο συν; οι πραγματικοί αριθμοί στην κεφαλαίο νί οστή δύναμη")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_093() -> Result<()> { // + let expr = r#" + + υ( + + χ,τ + )= + γ + 1 + + ( + τ + )+ + γ + 2 + + ( + τ + )lnρ+ + υ + 0 + + ( + + χ,τ + ) + "#; + test("el", "ClearSpeak", expr, "ύψιλον; ανοίγει παρένθεση; χ κόμμα, τάαφ; κλείνει παρένθεση; ισούται με; γάμμα δείκτης 1; του τάαφ; συν; γάμμα δείκτης 2; του τάαφ; l n ρ; συν; ύψιλον δείκτης 0; ανοίγει παρένθεση; χ κόμμα, τάαφ; κλείνει παρένθεση")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_094() -> Result<()> { // + let expr = r#" + + | + + υ + 1 + + |Γ + + | χ | + + Im + λ + 1 + + + + + "#; + test("el", "ClearSpeak", expr, "απόλυτη τιμή του ύψιλον δείκτης 1; είναι μικρότερο από ή ίσο με; κεφαλαίο γάμμα; απόλυτη τιμή του χ, υψωμένο στην φανταστικό μέρος, του, λάμδα δείκτης 1, τέλος δύναμης")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_095() -> Result<()> { // same + let expr = r#" + + Imλ( + τ + )=β+α + "#; + test("el", "ClearSpeak", expr, "φανταστικό μέρος, του λάμδα του τάαφ; ισούται με, βήτα συν άλφα")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_096() -> Result<()> { // same + let expr = r#" + + Im + λ + + + Ν + 0 + + + + ( + + + τ + 0 + + + )= + β + 1 + + +2μ+ + λ + 1 + + + ν + 2 + + + "#; + test("el", "ClearSpeak", expr, "φανταστικό μέρος, του; λάμδα δείκτης, κεφαλαίο νί δείκτης 0, τέλος δείκτη; του; ανοίγει παρένθεση; τάαφ δείκτης 0; κλείνει παρένθεση; ισούται με; μείον βήτα δείκτης 1; συν 2 μί συν, λάμδα δείκτης 1; μείον νί προς 2")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_097() -> Result<()> { // same + let expr = r#" + + + φ + ^ + + = + κ + 0 + + φ+ + Λ + 1 + + υ + "#; + test("el", "ClearSpeak", expr, "φ καπέλο; ισούται με; καπα δείκτης 0; φ; συν, κεφαλαίο λάμδα δείκτης 1; ύψιλον")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_098() -> Result<()> { // same + let expr = r#" + + Λ + Σ + δ + + = + Α + δ + + + + Ρ + δ + + + "#; + test("el", "ClearSpeak", expr, "κεφαλαίο λάμδα; κεφαλαίο σίγμα δείκτης δέλτα; ισούται με; κεφαλαίο άλφα δείκτης δέλτα; συν, κεφαλαίο ρ δείκτης δέλτα")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_099() -> Result<()> { // + let expr = r#" + + ι + + ( + + 1 + ) + + μ1 + + Λυ + υ + τ + + =φ + "#; + test("el", "ClearSpeak", expr, "ιότα; ανοίγει παρένθεση, μείον 1, κλείνει παρένθεση υψωμένο στην μί μείον 1 τέλος δύναμης; κεφαλαίο λάμδα, ύψιλον; μείον, ύψιλον δείκτης τάαφ; ισούται με φ")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_100() -> Result<()> { // + let expr = r#" + + + χ + 0 + + +χ+ + χ + 2 + + + + χ + 3 + + + + χ + 4 + + + + χ + 5 + + + + χ + 6 + + ++ + χ + + ν1 + + + "#; + test("el", "ClearSpeak", expr, "χ στην 0 δύναμη, συν χ συν χ στο τετράγωνο, συν χ στον κύβο συν, χ στην τέταρτη δύναμη, συν, χ στην πέμπτη δύναμη, συν χ στην έκτη δύναμη, συν αποσιωπητικά, συν, χ υψωμένο στην νί μείον 1 τέλος δύναμης")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_101() -> Result<()> { // same + let expr = r#" + + + + ( + + χ+ψ+ζ + ) + 2 + + + "#; + test("el", "ClearSpeak", expr, "ανοίγει παρένθεση; χ συν ψ συν ζήτα; κλείνει παρένθεση στο τετράγωνο")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_102() -> Result<()> { // same + let expr = r#" + + + + ( + + χ+ψ + ) + 2 + + +ζ + "#; + test("el", "ClearSpeak", expr, "ανοίγει παρένθεση, χ συν ψ, κλείνει παρένθεση στο τετράγωνο; συν ζήτα")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_103() -> Result<()> { // same + let expr = r#" + + χ+ + + ( + + ψ+ζ + ) + 2 + + + "#; + test("el", "ClearSpeak", expr, "χ συν; ανοίγει παρένθεση; ψ συν ζήτα; κλείνει παρένθεση στο τετράγωνο")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_104() -> Result<()> { // same + let expr = r#" + + χ+ψ+ + ζ + 2 + + + "#; + test("el", "ClearSpeak", expr, "χ συν ψ συν ζήτα στο τετράγωνο")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_105() -> Result<()> { // same + let expr = r#" + + + χ + 0 + + + + χ + 1 + + + "#; + test("el", "ClearSpeak", expr, "χ δείκτης 0; συν χ δείκτης 1")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_106() -> Result<()> { // same + let expr = r#" + + + χ + ˙ + + + + χ + ¨ + + + + χ + ˜ + + + + χ + ^ + + + + χ + + + + + χ + + + + + χ + + + + + χ + * + + + "#; + test("el", "ClearSpeak", expr, "χ τελεία, συν χ διπλή κουκκίδα; συν, χ κυματοειδής γραμμή; συν χ καπέλο, συν, χ διπλή παράγωγος; συν, χ τριπλή παράγωγος; συν χ τόνος, συν χ αστερίσκος")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_107() -> Result<()> { // + let expr = r#" + + + α + + 1,1 + + + + α + + 2,2 + + + "#; + test("el", "ClearSpeak", expr, "άλφα στην 1,1 δύναμη, συν άλφα στην 2,2 δύναμη")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_108() -> Result<()> { // same + let expr = r#" + + + + + υ,υ + φ + + + "#; + test("el", "ClearSpeak", expr, "αριστερά γωνιακή αγκύλη; ύψιλον κόμμα, ύψιλον; δεξιά γωνιακή αγκύλη δείκτης φ")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_109() -> Result<()> { // same + let expr = r#" + + + + + + κ + + + + α + κ + + + + "#; + test("el", "ClearSpeak", expr, "άθροισμα για καπα ανήκει, στους πραγματικούς αριθμούς του; άλφα δείκτης καπα")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_110() -> Result<()> { // same + let expr = r#" + + + + + + ι=1 + Ν + + + + α + 2 + + + +β+ + γ + 2 + + + "#; + test("el", "ClearSpeak", expr, "άθροισμα από ιότα ισούται με 1 ως κεφαλαίο νί του; άλφα στο τετράγωνο; συν βήτα συν, γάμμα στο τετράγωνο")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_111() -> Result<()> { // + let expr = r#" + + + ε + + + ε + + + ε + χ + + + + + + + "#; + test("el", "ClearSpeak", expr, "έψιλον υψωμένο στον εκθέτη, έψιλον υψωμένο στον εκθέτη, έψιλον στην χ οστή δύναμη, τέλος εκθέτη, τέλος εκθέτη")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_112() -> Result<()> { // + let expr = r#" + + + ε + + + ε + + + ε + χ + + + + + + + ε + + + ε + χ + + + + + ε + χ + + + "#; + test("el", "ClearSpeak", expr, "έψιλον υψωμένο στον εκθέτη, έψιλον υψωμένο στον εκθέτη, έψιλον στην χ οστή δύναμη, τέλος εκθέτη, τέλος εκθέτη; φορές; έψιλον υψωμένο στον εκθέτη, έψιλον στην χ οστή δύναμη, τέλος εκθέτη; φορές, έψιλον στην χ οστή δύναμη")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_113() -> Result<()> { // + let expr = r#" + + + ε + + ( + + + ε + + + ε + χ + + + + + + ε + χ + + +χ + ) + + + "#; + test("el", "ClearSpeak", expr, "έψιλον υψωμένο στην ανοίγει παρένθεση; έψιλον υψωμένο στον εκθέτη, έψιλον στην χ οστή δύναμη, τέλος εκθέτη; συν, έψιλον στην χ οστή δύναμη; συν χ; κλείνει παρένθεση τέλος δύναμης")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_114() -> Result<()> { // same + let expr = r#" + + + + + + ι=1 + ν + + + + α + ι + + + =1 + "#; + test("el", "ClearSpeak", expr, "άθροισμα από ιότα ισούται με 1 ως νί του; άλφα δείκτης ιότα; ισούται με 1")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_115() -> Result<()> { // same + let expr = r#" + + + + + + ι=1 + ν + + + + α + ι + + + + β + ι + + + =1 + "#; + test("el", "ClearSpeak", expr, "άθροισμα από ιότα ισούται με 1 ως νί του; άλφα δείκτης ιότα; συν, βήτα δείκτης ιότα; ισούται με 1")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_116() -> Result<()> { // + let expr = r#" + + 1+χ+ + χ + 2 + + + + χ + 3 + + + + χ + 4 + + ++ + χ + + ν1 + + += + 1 + + 1+χ + + + "#; + test("el", "ClearSpeak", expr, "1 συν χ συν χ στο τετράγωνο, συν χ στον κύβο συν, χ στην τέταρτη δύναμη, συν αποσιωπητικά, συν, χ υψωμένο στην νί μείον 1 τέλος δύναμης; συν αποσιωπητικά; ισούται με; το κλάσμα με αριθμητή 1; και παρονομαστή 1 συν χ")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_117() -> Result<()> { // + let expr = r#" + + χ + + + χ + 2 + + + 2 + + + + + + χ + 3 + + + 3 + + + + + χ + 4 + + + 4 + + + + + + χ + 5 + + + 5 + + ±=log( + + 1+χ + ) + "#; + test("el", "ClearSpeak", expr, "χ μείον; το κλάσμα με αριθμητή; χ στο τετράγωνο; και παρονομαστή 2; συν; το κλάσμα με αριθμητή; χ στον κύβο; και παρονομαστή 3; μείον; το κλάσμα με αριθμητή; χ στην τέταρτη δύναμη; και παρονομαστή 4; συν; το κλάσμα με αριθμητή; χ στην πέμπτη δύναμη; και παρονομαστή 5; συν πλήν, αποσιωπητικά; ισούται με; το λογάριθμο, του; ανοίγει παρένθεση, 1 συν χ, κλείνει παρένθεση")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_118() -> Result<()> { // same + let expr = r#" + + + + ( + + α+β + ) + 3 + + = + α + 3 + + +3 + α + 2 + + β+3α + β + 2 + + + + β + 3 + + + "#; + test("el", "ClearSpeak", expr, "ανοίγει παρένθεση; άλφα συν βήτα; κλείνει παρένθεση στον κύβο; ισούται με; άλφα στον κύβο, συν; 3 φορές, άλφα στο τετράγωνο, φορές βήτα; συν; 3 φορές άλφα φορές, βήτα στο τετράγωνο; συν βήτα στον κύβο")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_119() -> Result<()> { // + let expr = r#" + + + χ + 1 + κ + + + + χ + 2 + κ + + + + χ + 3 + κ + + ++ + χ + ν + κ + + =0 + "#; + test("el", "ClearSpeak", expr, "χ δείκτης 1, στην καπα οστή δύναμη; συν, χ δείκτης 2, στην καπα οστή δύναμη; συν, χ δείκτης 3, στην καπα οστή δύναμη; συν αποσιωπητικά, συν, χ δείκτης νί, στην καπα οστή δύναμη; ισούται με 0")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_120() -> Result<()> { // + let expr = r#" + + + χ + + + κ + 1 + + + + + + χ + + + κ + 2 + + + + + + χ + + + κ + 3 + + + + + + χ + + + κ + ν + + + + =0 + "#; + test("el", "ClearSpeak", expr, "χ δείκτης, καπα στην πρώτη δύναμη τέλος δείκτη; συν; χ δείκτης, καπα στο τετράγωνο τέλος δείκτη; συν, χ δείκτης, καπα στον κύβο τέλος δείκτη; συν; αποσιωπητικά; χ δείκτης, καπα στην νί οστή δύναμη τέλος δείκτη; ισούται με 0")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_121() -> Result<()> { // same + let expr = r#" + + + χ + + + κ + 1 + + + + + + χ + + + κ + 2 + + + + + + χ + + + κ + 3 + + + + ++ + χ + + + κ + ν + + + + =0 + "#; + test("el", "ClearSpeak", expr, "χ δείκτης, καπα δείκτης 1, τέλος δείκτη; συν; χ δείκτης, καπα δείκτης 2, τέλος δείκτη; συν; χ δείκτης, καπα δείκτης 3, τέλος δείκτη; συν αποσιωπητικά, συν; χ δείκτης, καπα δείκτης νί, τέλος δείκτη; ισούται με 0")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_122() -> Result<()> { // + let expr = r#" + + + χ + + + 2 + ψ + + + + + χ + + + 2 + ψ + + + + + "#; + test("el", "ClearSpeak", expr, "χ υψωμένο στον εκθέτη, 2 στην ψ οστή δύναμη, τέλος εκθέτη; είναι διάφορο του; χ υψωμένο στον εκθέτη, 2 στην ψ οστή δύναμη, τέλος εκθέτη")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_123() -> Result<()> { // same + let expr = r#" + + α + χ + 2 + + +βχ+γ=0 + "#; + test("el", "ClearSpeak", expr, "άλφα φορές, χ στο τετράγωνο; συν βήτα φορές χ, συν γάμμα; ισούται με 0")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_124() -> Result<()> { // + let expr = r#" + + log3 + + (χ+ψ) + 3 + + + "#; + test("el", "ClearSpeak", expr, "λογάριθμος, 3; ανοίγει παρένθεση, χ συν ψ, κλείνει παρένθεση στον κύβο")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_125() -> Result<()> { // + let expr = r#" + + + + log + 2 + + χ2logχ + "#; + test("el", "ClearSpeak", expr, "ο λογάριθμος στο τετράγωνο; του χ; είναι διάφορο του; 2 φορές, λογάριθμος, χ")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_126() -> Result<()> { // + let expr = r#" + + + + logχ + + logα + + = + + log + α + + χ + "#; + test("el", "ClearSpeak", expr, "λογάριθμος, χ προς λογάριθμος, άλφα; ισούται με; το λογάριθμο με βάση άλφα; του χ")?; + return Ok(()); + //theodora. fails. Needs to fix accusative for logarithm with base. Now reads: λογάριθμος, χ προς λογάριθμος, άλφα; ισούται με; ο λογάριθμος με βάση άλφα; του χ +} + +#[test] +fn uoa_corpus_127() -> Result<()> { // same + let expr = r#" + + + χ + ¯ + + +χ + "#; + test("el", "ClearSpeak", expr, "χ παύλα, συν χ")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_128() -> Result<()> { // same + let expr = r#" + + arg( + ζ + ) + "#; + test("el", "ClearSpeak", expr, "όρισμα του ζήτα")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_129() -> Result<()> { // + let expr = r#" + + + υ + + ( + 0 + ) + + = + + + + ζ=1 + ν + + + + ξ + ζ + + + + + ( + 1 + ) + + + ρ + ζ + + ( + + + υ + + ( + ι + ) + + + ) + = + + + + ζ=1 + ν + + + + ξ + ζ + + + + + ( + 2 + ) + + + ρ + ζ + + ( + + + υ + + ( + 2 + ) + + + ) + + "#; + test("el", "ClearSpeak", expr, "ύψιλον υψωμένο στην ανοίγει παρένθεση 0 κλείνει παρένθεση τέλος δύναμης; ισούται με; άθροισμα από ζήτα ισούται με 1 ως νί του; ξ δείκτης ζήτα; εκθέτης ανοίγει παρένθεση 1 κλείνει παρένθεση, ρ δείκτης ζήτα; του; ανοίγει παρένθεση; ύψιλον υψωμένο στην ανοίγει παρένθεση, ιότα, κλείνει παρένθεση τέλος δύναμης; κλείνει παρένθεση; ισούται με; άθροισμα από ζήτα ισούται με 1 ως νί του; ξ δείκτης ζήτα; εκθέτης ανοίγει παρένθεση 2 κλείνει παρένθεση, ρ, δείκτης ζήτα; του; ανοίγει παρένθεση; ύψιλον υψωμένο στην ανοίγει παρένθεση 2 κλείνει παρένθεση τέλος δύναμης; κλείνει παρένθεση")?; + return Ok(()); + //theodora. fails . a mathml or rules issue? +} +#[test] +fn uoa_corpus_130() -> Result<()> { // + let expr = r#" + + | υ | + = + + ορισμος + + + + ( + + + + + + κ=1 + ν + + + + υ + κ + 2 + + + + ) + + + 1 + 2 + + + + + "#; + test("el", "ClearSpeak", expr, "απόλυτη τιμή του ύψιλον; ισούται με με ορισμος από πάνω; ανοίγει παρένθεση; άθροισμα από καπα ισούται με 1 ως νί του; ύψιλον δείκτης καπα, στο τετράγωνο; κλείνει παρένθεση υψωμένο στην 1 δεύτερο τέλος δύναμης")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_131() -> Result<()> { // + let expr = r#" + + + + + + + 0 + + + + | + + ξ + ι + + + + + ( + 1 + ) + + ( + + τ,χ + ) |dχ + + + + + + + + Γ( + + + + + + φ + + ( + 0 + ) + + + + + Λ + 1 + + ( + + + + + + + + ) + + + + + + + α + + ( + 0 + ) + + + + + Λ + 1 + + ( + + + + + + + + ) + + + + + + + η + + ( + 0 + ) + + + + + Λ + 1 + + ( + + + + + + + + ) + + + ) + + + + + "#; + test("el", "ClearSpeak", expr, "πίνακας με 2 γραμμές και 1 στήλες; γραμμή 1; στήλη 1; ολοκλήρωμα από 0 ως άπειρο του; απόλυτη τιμή του ξ με 2 μετατεταγμένα μέρη, δείκτης ιότα εκθέτης 1; ανοίγει παρένθεση; τάαφ κόμμα, χ; κλείνει παρένθεση; d χ; είναι μικρότερο από ή ίσο με; γραμμή 2; στήλη 1; κεφαλαίο γάμμα; ανοίγει παρένθεση; νόρμα του φ υψωμένο στην ανοίγει παρένθεση 0 κλείνει παρένθεση τέλος δύναμης δείκτης; η πρώτη δύναμη του, κεφαλαίο λάμδα; του; ανοίγει παρένθεση; οι θετικοί πραγματικοί αριθμοί; κλείνει παρένθεση τέλος δείκτη; συν; νόρμα του άλφα υψωμένο στην ανοίγει παρένθεση 0 κλείνει παρένθεση τέλος δύναμης δείκτης; η πρώτη δύναμη του, κεφαλαίο λάμδα; του; ανοίγει παρένθεση; οι θετικοί πραγματικοί αριθμοί; κλείνει παρένθεση τέλος δείκτη; συν; νόρμα του ήτα υψωμένο στην ανοίγει παρένθεση 0 κλείνει παρένθεση τέλος δύναμης δείκτης; η πρώτη δύναμη του, κεφαλαίο λάμδα; του; ανοίγει παρένθεση; οι θετικοί πραγματικοί αριθμοί; κλείνει παρένθεση τέλος δείκτη; κλείνει παρένθεση")?; + return Ok(()); + //theodora. it's read as a matrix because of the mathml, not an actual issues +} + +#[test] +fn uoa_corpus_132() -> Result<()> { // + let expr = r#" + + + + Β + ˜ + + + 1 + + ( + Τ + )= + + max + + ι=1,ν + + + + max + + ξι + + + + sup + + + Γ + ξ + + + + + + + + + + Γ + ξ + + + + + | + + υ + ι + + |dτ + + + + "#; + test("el", "ClearSpeak", expr, "κεφαλαίο βήτα κυματοειδής γραμμή, δείκτης 1; του κεφαλαίο τάαφ; ισούται με; μέγιστο για ιότα ισούται με; 1, αποσιωπητικά, νί; του, μέγιστο για ξ είναι διάφορο του, ιότα; του, σουπρέμουμ για κεφαλαίο γάμμα δείκτης ξ; του; ολοκλήρωμα επί του συνόλου κεφαλαίο γάμμα δείκτης ξ, του; απόλυτη τιμή του ύψιλον δείκτης ιότα; d τάαφ")?; + return Ok(()); + + } + + + +#[test] +fn uoa_corpus_133() -> Result<()> { // + let expr = r#" + + + + { + + ε + λ + + + + + + + } + + λ=1 + + ν+μ2κ + + ={ + + + { + + ε + ι + + } + + ιΑ + + , + + { + + ε + ξ + + + + + + } + + ξ + Α + + + + + } + "#; + test("el", "ClearSpeak", expr, "ανοίγει άγκιστρο; έψιλον με 2 μετατεταγμένα μέρη, δείκτης λάμδα εκθέτης τόνος τόνος; κλείνει άγκιστρο δείκτης, λάμδα ισούται με 1 τέλος δείκτη, υψωμένο στην νί συν μί μείον 2 καπα τέλος δύναμης; ισούται με; το σύνολο ανοίγει άγκιστρο; έψιλον δείκτης ιότα; κλείνει άγκιστρο δείκτης; ιότα δεν ανήκει, κεφαλαίο άλφα τέλος δείκτη; κόμμα; ανοίγει άγκιστρο; έψιλον με 2 μετατεταγμένα μέρη, δείκτης ξ εκθέτης τόνος; κλείνει άγκιστρο δείκτης; ξ δεν ανήκει, κεφαλαίο άλφα τόνος, τέλος δείκτη")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_134() -> Result<()> { // same + let expr = r#" + + + υ + ε + + + + + (ν+1,μ+1) + + υ+ + + + + κ=1 + ν + + + + + + + ψ + κ + + + + + υ + κ + + + + "#; + test("el", "ClearSpeak", expr, "ανάδελτα του ύψιλον δείκτης έψιλον, τέλος ανάδελτα; βέλος προς τα δεξιά με ανοίγει παρένθεση; νί συν 1, μί, συν 1; κλείνει παρένθεση από πάνω; ανάδελτα του ύψιλον, συν; άθροισμα από καπα ισούται με 1 ως νί του; ανάδελτα δείκτης, ψ δείκτης καπα, τέλος δείκτη; ύψιλον δείκτης καπα")?; + return Ok(()); + //theodora. Now reads: ανάδελτα του ύψιλον δείκτης έψιλον, τέλος ανάδελτα; βέλος προς τα δεξιά με ανοίγει παρένθεση; νί συν 1, μί, συν 1; κλείνει παρένθεση από πάνω; ανάδελτα του ύψιλον, συν; άθροισμα από καπα ισούται με 1 ως νί του; το ανάδελτα δείκτης, ψ δείκτης καπα, τέλος δείκτη; ύψιλον δείκτης καπα + //should be fixed when adding genitive clause + } + +#[test] +fn uoa_corpus_135() -> Result<()> { // + let expr = r#" + + + + + wsep,1 + + μκ + + ={ + ( + + ε, + + { + + + ε + + + + ξ + + } + + ξ=1 + μ + + + ) + + + wsep + + μκ + + : + + + ε + 2 + + + + + ε + μ + + + + + + + + 0 } + "#; + test("el", "ClearSpeak", expr, "φράκτουρ κεφαλαίο i δείκτης wsep,1 τέλος δείκτη, υψωμένο στην μί κυματοειδής γραμμή, καπα τέλος δύναμης; ισούται με; το σύνολο όλων των ανοίγει παρένθεση; έψιλον κόμμα; ανοίγει άγκιστρο; έψιλον τόνος, δείκτης ξ; κλείνει άγκιστρο δείκτης, ξ ισούται με 1 τέλος δείκτη, στην μί οστή δύναμη; κλείνει παρένθεση; ανήκει; φράκτουρ κεφαλαίο i δείκτης wsep τέλος δείκτη, υψωμένο στην μί κυματοειδής γραμμή, καπα τέλος δύναμης τέτοια ώστε το κλάσμα με αριθμητή; έψιλον στο τετράγωνο; και παρονομαστή έψιλον με 2 μετατεταγμένα μέρη, δείκτης μί εκθέτης τόνος; βέλος προς τα δεξιά 0")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_136() -> Result<()> { // + let expr = r#" + + + ε + 1 + + ={ + ε,{ + + ε + + 0,2 + + , + ε + + 0,5 + + ,ε, + ε + + 1,2 + + , + + + ε + + 1,5 + + + + | + logε | + + } } + "#; + test("el", "ClearSpeak", expr, "έψιλον δείκτης 1; ισούται με; το σύνολο έψιλον κόμμα; το σύνολο έψιλον στην 0,2 δύναμη, κόμμα; έψιλον στην 0,5 δύναμη, κόμμα, έψιλον κόμμα; έψιλον στην 1,2 δύναμη, κόμμα; το κλάσμα με αριθμητή; έψιλον στην 1,5 δύναμη; και παρονομαστή απόλυτη τιμή του λογαρίθμου, έψιλον")?; + return Ok(()); + //theodora. fails with current rules. Should be okay when we add genitive clause +} + +#[test] +fn uoa_corpus_137() -> Result<()> { // + let expr = r#" + + + υ + μ + ν + + + + ν + μ + ν + + +κ + + d + υ + μ + ν + + + + dχ + + =κ× + φ + μ + ν + + + + υ + μ + + ν1 + + + + ν + μ + + ν1 + + + "#; + test("el", "ClearSpeak", expr, "ύψιλον δείκτης μί, στην νί οστή δύναμη; συν, νί δείκτης μί, στην νί οστή δύναμη; συν; καπα; το κλάσμα με αριθμητή; d; ύψιλον δείκτης μί, στην νί οστή δύναμη; και παρονομαστή d χ; ισούται με; καπα επί, φ δείκτης μί, στην νί οστή δύναμη; συν; ύψιλον δείκτης μί, υψωμένο στην νί μείον 1 τέλος δύναμης; συν; νί δείκτης μί, υψωμένο στην νί μείον 1 τέλος δύναμης")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_138() -> Result<()> { // + let expr = r#" + + + + + + Ω + + + + + | + + κ + μ + ξ + + | + 2 + + dχ+κ + + + + ν=1 + ξ + + + + + | + + κ + μ + ν + + | + 2 + + + + + + + "#; + test("el", "ClearSpeak", expr, "ολοκλήρωμα επί του συνόλου κεφαλαίο ωμέγα του; απόλυτη τιμή του καπα δείκτης μί, στην ξ οστή δύναμη, στο τετράγωνο; d χ; συν; καπα; άθροισμα από νί ισούται με 1 ως ξ του; απόλυτη τιμή του καπα δείκτης μί, στην νί οστή δύναμη, στο τετράγωνο")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_139() -> Result<()> { // same + let expr = r#" + + sgn + + + + ξΙ( + + + δ + 1 + + , + δ + 2 + + + ) + + + + α + ξ + + + + + + + + Γ + + + ι + 1 + + + + + + + + ε + ξ + + dχ + + + + =sgn + + + + ξΙ( + + + δ + 1 + + , + δ + 2 + + + ) + + + + α + ξ + + + + + + + + Γ + + + ι + 2 + + + + + + + + ε + ξ + + dχ + + + + + "#; + test("el", "ClearSpeak", expr, "πρόσημο; άθροισμα για ξ ανήκει; κεφαλαίο ιότα; ανοίγει παρένθεση; δέλτα δείκτης 1; κόμμα; δέλτα δείκτης 2; κλείνει παρένθεση του; άλφα δείκτης ξ; ολοκλήρωμα επί του συνόλου κεφαλαίο γάμμα δείκτης, ιότα δείκτης 1, τέλος δείκτη, του; έψιλον δείκτης ξ; d χ; ισούται με; μείον πρόσημο; άθροισμα για ξ ανήκει; κεφαλαίο ιότα; ανοίγει παρένθεση; δέλτα δείκτης 1; κόμμα; δέλτα δείκτης 2; κλείνει παρένθεση του; άλφα δείκτης ξ; ολοκλήρωμα επί του συνόλου κεφαλαίο γάμμα δείκτης, ιότα δείκτης 2, τέλος δείκτη, του; έψιλον δείκτης ξ; d χ")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_140() -> Result<()> { // + let expr = r#"φ(Φσκ)=φ(Φσκ)φκ(Φσκ)0+φκ(Φσκ)χκχ"#; + test("el", "ClearSpeak", expr, "φ του; ανοίγει παρένθεση; κεφαλαίο φ δείκτης σίγμα, στην καπα οστή δύναμη; κλείνει παρένθεση; ισούται με; παράσταση παράσταση φ του; ανοίγει παρένθεση; κεφαλαίο φ δείκτης σίγμα, στην καπα οστή δύναμη; κλείνει παρένθεση; μείον; φ δείκτης καπα; του; ανοίγει παρένθεση; κεφαλαίο φ δείκτης σίγμα, στην καπα οστή δύναμη; κλείνει παρένθεση με κάτω άγκιστρο από κάτω με ζεύγος βελών προς τα δεξιά 0 από κάτω; συν; παράσταση παράσταση φ δείκτης καπα; του; ανοίγει παρένθεση; κεφαλαίο φ δείκτης σίγμα, στην καπα οστή δύναμη; κλείνει παρένθεση με κάτω άγκιστρο από κάτω με χ στην καπα οστή δύναμη από κάτω; βέλος προς τα δεξιά χ")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_141() -> Result<()> { // + let expr = r#" + + φ(χ)=φ(α)+φ'(α)×(χα)++ + + + φ + ν + + (α) + ν + + × + + (χα) + ν + + + + + + φ + + (ν+1) + + ( + γ + ) + + ν+1 + + × + + ( + + χα + ) + + (ν+1) + + + "#; + test("el", "ClearSpeak", expr, "φ του χ, ισούται με; φ του άλφα, συν; φ τόνος, του άλφα; επί; ανοίγει παρένθεση; χ μείον άλφα; κλείνει παρένθεση; συν αποσιωπητικά, συν; το κλάσμα με αριθμητή; η νί δύναμη του, φ, του άλφα; και παρονομαστή νί; επί; ανοίγει παρένθεση; χ μείον άλφα; κλείνει παρένθεση στην νί οστή δύναμη; συν; το κλάσμα με αριθμητή; η ανοίγει παρένθεση, νί συν 1, κλείνει παρένθεση δύναμη του, φ; του γάμμα; και παρονομαστή νί συν 1; επί; ανοίγει παρένθεση; χ μείον άλφα; κλείνει παρένθεση υψωμένο στην ανοίγει παρένθεση, νί συν 1, κλείνει παρένθεση τέλος δύναμης")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_142() -> Result<()> { // + let expr = r#"2υχψ=(χ2ψ2)×{τ×φ''(τ)+3×φ'(τ)}"#; + test("el", "ClearSpeak", expr, "το κλάσμα με αριθμητή; μερικό διαφορικό στο τετράγωνο; ύψιλον; και παρονομαστή μερικό διαφορικό χ; μερικό διαφορικό ψ; ισούται με; ανοίγει παρένθεση; χ στο τετράγωνο, μείον, ψ στο τετράγωνο; κλείνει παρένθεση; επί; ανοίγει άγκιστρο; τάαφ επί, φ διπλή παράγωγος; του τάαφ; συν, 3 επί, φ τόνος, του τάαφ; κλείνει άγκιστρο")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_143() -> Result<()> { // + let expr = r#" + + log( + + 1+χ + )log( + + 1χ + )=log + + 1+χ + + 1χ + + = + + + + ι=1 + + + + + + + χ + + 2ι1 + + + + 2ι1 + + + + "#; + test("el", "ClearSpeak", expr, "ο λογάριθμος, του; ανοίγει παρένθεση, 1 συν χ, κλείνει παρένθεση; μείον; ο λογάριθμος, του; ανοίγει παρένθεση, 1 μείον χ, κλείνει παρένθεση; ισούται με; το λογάριθμο, του; το κλάσμα με αριθμητή; 1 συν χ; και παρονομαστή 1 μείον χ; ισούται με; άθροισμα από ιότα ισούται με 1 ως άπειρο του; κλάσματος με αριθμητή; χ υψωμένο στην 2 φορές ιότα, μείον 1 τέλος δύναμης; και παρονομαστή 2 φορές ιότα, μείον 1")?; + return Ok(()); + //theodora. fails with current rules. Should be okay when we add genitive clause +} +#[test] +fn uoa_corpus_144() -> Result<()> { // + let expr = r#" + + + Δ + χ + ν + + ω= + + + + 0λν + + + + + + + + + + + κ + 1 + + ++ + κ + ν + + =λ + + + + + + + κ + 1 + + +2 + κ + 2 + + ++ν + κ + ν + + =ν + + + + + + + κ + 1 + + ,, + κ + ν + + 0 + + + + + + + + Δ + υ + λ + + ω× + + n! + + ( + + + Δ + χ + 1 + + υ + ) + + + κ + 1 + + + + + + ( + + + Δ + χ + ν + + υ + ) + + + κ + ν + + + + + + + κ + 1 + + ! + + (1!) + + + κ + 1 + + + + + κ + ν + + ! + + ( + + ν! + ) + + + κ + ν + + + + + + + + + "#; + test("el", "ClearSpeak", expr, "κεφαλαίο δέλτα δείκτης χ, στην νί οστή δύναμη; ωμέγα; ισούται με; άθροισμα για 0, είναι μικρότερο από ή ίσο με; λάμδα, είναι μικρότερο από ή ίσο με; νί του; άθροισμα για 3 σειρές; σειρά 1; καπα δείκτης 1; συν αποσιωπητικά, συν, καπα δείκτης νί; ισούται με, λάμδα; σειρά 2; καπα δείκτης 1; συν, 2 καπα δείκτης 2; συν αποσιωπητικά, συν, νί, καπα δείκτης νί; ισούται με νί; σειρά 3; καπα δείκτης 1; κόμμα; αποσιωπητικά, κόμμα; καπα δείκτης νί; είναι μεγαλύτερο από ή ίσο με 0; του; κεφαλαίο δέλτα δείκτης ύψιλον, στην λάμδα οστή δύναμη; ωμέγα επί; το κλάσμα με αριθμητή; n; παραγοντικό; ανοίγει παρένθεση; κεφαλαίο δέλτα δείκτης χ, στην πρώτη δύναμη; ύψιλον; κλείνει παρένθεση υψωμένο στον εκθέτη, καπα στην πρώτη δύναμη, τέλος εκθέτη; αποσιωπητικά; ανοίγει παρένθεση; κεφαλαίο δέλτα δείκτης χ, στην νί οστή δύναμη; ύψιλον; κλείνει παρένθεση υψωμένο στην καπα δείκτης νί, τέλος δύναμης; και παρονομαστή καπα δείκτης 1; παραγοντικό; ανοίγει παρένθεση; 1 παραγοντικό, κλείνει παρένθεση υψωμένο στην καπα δείκτης 1, τέλος δύναμης; αποσιωπητικά; καπα δείκτης νί; παραγοντικό; ανοίγει παρένθεση; νί παραγοντικό; κλείνει παρένθεση υψωμένο στην καπα δείκτης νί, τέλος δύναμης")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_145() -> Result<()> { // same + let expr = r#" + + + + + + 1ιν + + + + α + ι + + + =1 + "#; + test("el", "ClearSpeak", expr, "άθροισμα για 1, είναι μικρότερο από ή ίσο με; ιότα, είναι μικρότερο από ή ίσο με; νί του; άλφα δείκτης ιότα; ισούται με 1")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_146() -> Result<()> { // + let expr = r#" + + + + + + κ=1 + + + + + + + + ( + + 1 + ) + + κ+1 + + + + ( + + κ+1 + )×ln(κ+1) + + + + "#; + test("el", "ClearSpeak", expr, "άθροισμα από καπα ισούται με 1 ως άπειρο του; το κλάσμα με αριθμητή; ανοίγει παρένθεση, μείον 1, κλείνει παρένθεση υψωμένο στην καπα συν 1 τέλος δύναμης; και παρονομαστή ανοίγει παρένθεση, καπα συν 1, κλείνει παρένθεση; επί; ο l n του; ανοίγει παρένθεση, καπα συν 1, κλείνει παρένθεση")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_147() -> Result<()> { // + let expr = r#" + + + + + + κ=11 + + 28 + + + (κ10)×sin[ + + π + + κ10 + + ] + + "#; + test("el", "ClearSpeak", expr, "άθροισμα από καπα ισούται με 11 ως 28 του; ανοίγει παρένθεση; καπα μείον 10; κλείνει παρένθεση; επί; ημίτονο του; ανοίγει αγκύλη; το κλάσμα με αριθμητή π; και παρονομαστή καπα μείον 10; κλείνει αγκύλη")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_148() -> Result<()> { // same + let expr = r#" + + + + + 0 + Τ + + + + Φ + 2 + + ( + + τ,χ + )dτ + + + Δ + "#; + test("el", "ClearSpeak", expr, "ολοκλήρωμα από 0 ως κεφαλαίο τάαφ του; κεφαλαίο φ δείκτης 2; ανοίγει παρένθεση; τάαφ κόμμα, χ; κλείνει παρένθεση; d τάαφ; είναι μεγαλύτερο από ή ίσο με; κεφαλαίο δέλτα")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_149() -> Result<()> { // same + let expr = r#" + + + + + 0 + Τ + + + η( + τ + )dτ + + + =0 + "#; + test("el", "ClearSpeak", expr, "ολοκλήρωμα από 0 ως κεφαλαίο τάαφ του; ήτα του τάαφ, d τάαφ; ισούται με 0")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_150() -> Result<()> { // + let expr = r#" + + + + + + υ + + Δ,υ + 0 + + + Φ + + = + + + + ΚΜ + + + + υ + Κ + + + + + + Κ + + + Δ + υ + 0 + + ( + χ + )dχ + + + + + "#; + test("el", "ClearSpeak", expr, "αριστερά γωνιακή αγκύλη; ύψιλον δείκτης; κεφαλαίο δέλτα, κόμμα, ύψιλον τέλος δείκτη, στην 0 δύναμη; δεξιά γωνιακή αγκύλη δείκτης, κεφαλαίο φ; ισούται με; μείον άθροισμα για κεφαλαίο καπα, ανήκει κεφαλαίο μί του; ύψιλον δείκτης, κεφαλαίο καπα; ολοκλήρωμα επί του συνόλου κεφαλαίο καπα του; κεφαλαίο δέλτα; η μηδενική δύναμη του, ύψιλον; του χ; d χ")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_151() -> Result<()> { // same + let expr = r#"υτ,υΩυ(χ,τ)×υ(χ)dχ =Ωφ(χ,τ)υ(χ)dχ"#; + test("el", "ClearSpeak", expr, "αριστερή γωνιακή αγκύλη; ύψιλον δείκτης τάαφ; κόμμα, ύψιλον; δεξιά γωνιακή αγκύλη; ολοκλήρωμα επί του συνόλου κεφαλαίο ωμέγα του; ανάδελτα του ύψιλον; ανοίγει παρένθεση; χ κόμμα, τάαφ; κλείνει παρένθεση; επί, ανάδελτα του ύψιλον του χ; d χ; ισούται με; ολοκλήρωμα επί του συνόλου κεφαλαίο ωμέγα του; φ; ανοίγει παρένθεση; χ κόμμα, τάαφ; κλείνει παρένθεση; ύψιλον του χ, d χ")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_152() -> Result<()> { // same + let expr = r#" + + α( + + β,υ + )= + + + + Ω + + + β( + χ + )υ( + χ + )dχ + + + + "#; + test("el", "ClearSpeak", expr, "άλφα; ανοίγει παρένθεση; βήτα κόμμα, ύψιλον; κλείνει παρένθεση; ισούται με; ολοκλήρωμα επί του συνόλου κεφαλαίο ωμέγα του; ανάδελτα του βήτα του χ; εσωτερικό γινόμενο; ανάδελτα του ύψιλον του χ; d χ")?; + return Ok(()); + //theodora. fails. Can't access the definitions rule? Now reads: άλφα; ανοίγει παρένθεση; βήτα κόμμα, ύψιλον; κλείνει παρένθεση; ισούται με; ολοκλήρωμα επί του συνόλου κεφαλαίο ωμέγα του; ανάδελτα του βήτα του χ; dot product; ανάδελτα του ύψιλον του χ; d χ +} + +#[test] +fn uoa_corpus_153() -> Result<()> { // same + let expr = r#" + + + + + + Ω + + + φ( + + χ,τ + )υ( + χ + )dχ + + + + "#; + test("el", "ClearSpeak", expr, "ολοκλήρωμα επί του συνόλου κεφαλαίο ωμέγα του; φ; ανοίγει παρένθεση; χ κόμμα, τάαφ; κλείνει παρένθεση; ύψιλον του χ, d χ")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_154() -> Result<()> { // same + let expr = r#" + + + + + + Κ + + + ( + + υ( + + χ, + τ + + ν+1 + + + )υ( + + χ, + τ + ν + + + ) + )dχ + + + + "#; + test("el", "ClearSpeak", expr, "ολοκλήρωμα επί του συνόλου κεφαλαίο καπα του; ανοίγει παρένθεση; ύψιλον; ανοίγει παρένθεση; χ κόμμα; τάαφ δείκτης, νί συν 1 τέλος δείκτη; κλείνει παρένθεση; μείον; ύψιλον; ανοίγει παρένθεση; χ κόμμα; τάαφ δείκτης νί; κλείνει παρένθεση; κλείνει παρένθεση; d χ")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_155() -> Result<()> { // same + let expr = r#" + + + + + + Κ + + + Δ + υ + 0 + + ( + χ + )dχ + + + + "#; + test("el", "ClearSpeak", expr, "μείον ολοκλήρωμα επί του συνόλου κεφαλαίο καπα του; κεφαλαίο δέλτα; η μηδενική δύναμη του, ύψιλον; του χ; d χ")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_156() -> Result<()> { // same + let expr = r#" + + + Λ + + Κ, + σ + + + + + = + + + + + Κ, + σ + + + + + + Ιdχ + + + + "#; + test("el", "ClearSpeak", expr, "κεφαλαίο λάμδα δείκτης; κεφαλαίο καπα, κόμμα; σίγμα διπλή παράγωγος, τέλος δείκτη; ισούται με; ολοκλήρωμα για κεφαλαίο καπα, κόμμα; σίγμα διπλή παράγωγος, του; κεφαλαίο ιότα, d χ")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_157() -> Result<()> { // same + let expr = r#" + + + + + + + τ + ν + + + + + τ + + ν+1 + + + + + Δυ( + + χ,τ + )dτ + + + + "#; + test("el", "ClearSpeak", expr, "ολοκλήρωμα από τάαφ δείκτης νί, ως τάαφ δείκτης, νί συν 1 τέλος δείκτη, του; κεφαλαίο δέλτα, ύψιλον; ανοίγει παρένθεση; χ κόμμα, τάαφ; κλείνει παρένθεση; d τάαφ")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_158() -> Result<()> { // + let expr = r#" + + + + + 0 + Τ + + + + + | + υ( + τ + ) | + 2 + + dτ + + + + "#; + test("el", "ClearSpeak", expr, "ολοκλήρωμα από 0 ως κεφαλαίο τάαφ του; απόλυτη τιμή του ύψιλον του τάαφ, στο τετράγωνο; d τάαφ")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_159() -> Result<()> { // + let expr = r#" + + + + + 0 + Τ + + + + + | + + υ + ˙ + + ( + τ + ) | + 2 + + dτ + + + + "#; + test("el", "ClearSpeak", expr, "ολοκλήρωμα από 0 ως κεφαλαίο τάαφ του; απόλυτη τιμή του ύψιλον τελεία; του τάαφ, στο τετράγωνο; d τάαφ")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_160() -> Result<()> { // same + let expr = r#" + + + + + 0 + Τ + + + + υ + + + φdτ + + + + "#; + test("el", "ClearSpeak", expr, "ολοκλήρωμα από 0 ως κεφαλαίο τάαφ του; ύψιλον τόνος; φ d τάαφ")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_161() -> Result<()> { // + let expr = r#" + + + + + 0 + Τ + + + + + | + + υ + ˜ + + ( + τ + ) | + + + π + + + + + dτ + + + + "#; + test("el", "ClearSpeak", expr, "ολοκλήρωμα από 0 ως κεφαλαίο τάαφ του; απόλυτη τιμή του ύψιλον κυματοειδής γραμμή; του τάαφ, υψωμένο στην π εκθέτης μείον, τέλος δύναμης; d τάαφ")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_162() -> Result<()> { // same + let expr = r#" + + + + + 0 + Τ + + + Φ( + + τ,χ + )dτ + + + + "#; + test("el", "ClearSpeak", expr, "ολοκλήρωμα από 0 ως κεφαλαίο τάαφ του; κεφαλαίο φ; ανοίγει παρένθεση; τάαφ κόμμα, χ; κλείνει παρένθεση; d τάαφ; βέλος προς τα δεξιά, άπειρο")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_163() -> Result<()> { // + let expr = r#" + + + + + 0 + Τ + + + + + + 0 + 1 + + + γ( + τ + )| + υ( + τ + ) |dσ + + + dτ + + + +"#; + test("el", "ClearSpeak", expr, "ολοκλήρωμα από 0 ως κεφαλαίο τάαφ του; ολοκλήρωμα από 0 ως 1 του; γάμμα του τάαφ; απόλυτη τιμή του ύψιλον του τάαφ; d σίγμα; d τάαφ")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_164() -> Result<()> { // same + let expr = r#" + + + 1 + μ + + + + + 0 + Τ + + + + Φ + 1 + + ( + + τ,λ + υ + ¯ + + + )dτ + + + + "#; + test("el", "ClearSpeak", expr, "1 προς μί; ολοκλήρωμα από 0 ως κεφαλαίο τάαφ του; κεφαλαίο φ δείκτης 1; ανοίγει παρένθεση; τάαφ κόμμα; λάμδα ύψιλον παύλα; κλείνει παρένθεση; d τάαφ")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_165() -> Result<()> { // + let expr = r#" + + + + + + Ω + + + + ρ + + 2 + + dχ + + + + "#; + test("el", "ClearSpeak", expr, "ολοκλήρωμα επί του συνόλου κεφαλαίο ωμέγα του; ρ στην μείον 2 δύναμη, d χ")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_166() -> Result<()> { // same + let expr = r#" + + + 1 + 6 + + + + + σ + 1 + + + σ( + + 3 + σ + 2 + + + )η( + σ + )α( + σ + )dσ + + + + "#; + test("el", "ClearSpeak", expr, "1 έκτο; ολοκλήρωμα από σίγμα ως 1 του; σίγμα; ανοίγει παρένθεση; 3 μείον, σίγμα στο τετράγωνο; κλείνει παρένθεση; ήτα του σίγμα; άλφα του σίγμα, d σίγμα")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_167() -> Result<()> { // same + let expr = r#" + + λ + + max + + 0τ1 + + + + + 0 + 1 + + + Γ( + + τ,σ + )η( + σ + )ψ( + + σ,β + )dσ + + + + "#; + test("el", "ClearSpeak", expr, "λάμδα; μέγιστο για 0, είναι μικρότερο από ή ίσο με; τάαφ, είναι μικρότερο από ή ίσο με 1; του; ολοκλήρωμα από 0 ως 1 του; κεφαλαίο γάμμα; ανοίγει παρένθεση; τάαφ κόμμα, σίγμα; κλείνει παρένθεση; ήτα του σίγμα, ψ; ανοίγει παρένθεση; σίγμα κόμμα, βήτα; κλείνει παρένθεση; d σίγμα")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_168() -> Result<()> { // + let expr = r#" + + + 1 + 2 + + λ + + sup + + υΥ( + ρ + ) + + + + + 0 + 1 + + + | + υ( + σ + ) |dσ + + + + "#; + test("el", "ClearSpeak", expr, "1 δεύτερο λάμδα; σουπρέμουμ για ύψιλον ανήκει, κεφαλαίο ύψιλον, του ρ; του; ολοκλήρωμα από 0 ως 1 του; απόλυτη τιμή του ύψιλον του σίγμα; d σίγμα")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_169() -> Result<()> { // + let expr = r#" + + + + + 0 + 1 + + + + + + τ + + Ξ( + + τ,σ + )υ( + σ + )dσ + + + + "#; + test("el", "ClearSpeak", expr, "ολοκλήρωμα από 0 ως 1 του; κλάσματος με αριθμητή; μερικό διαφορικό; και παρονομαστή μερικό διαφορικό, τάαφ; κεφαλαίο ξ; ανοίγει παρένθεση; τάαφ κόμμα, σίγμα; κλείνει παρένθεση; ύψιλον του σίγμα; d σίγμα")?; + return Ok(()); + //theodora. fails with current rules. Will probably be ok when we introduce genitive +} + +#[test] +fn uoa_corpus_170() -> Result<()> { // same + let expr = r#" + + + + + τ + 1 + + + + υ + + + σdσ + + + + "#; + test("el", "ClearSpeak", expr, "ολοκλήρωμα από τάαφ ως 1 του; νόρμα του ύψιλον διπλή παράγωγος; σίγμα d σίγμα")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_171() -> Result<()> { // same + let expr = r#" + + + + + + Η + + η + + + ( + + χ+2 + )dχ + "#; + test("el", "ClearSpeak", expr, "ολοκλήρωμα επί του συνόλου κεφαλαίο ήτα του; ήτα; ανοίγει παρένθεση, χ συν 2, κλείνει παρένθεση; d χ")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_172() -> Result<()> { // + let expr = r#" + + + + + + 1 + + + + + ε + + + χ + 2 + + χ1 + + dχ + + + + "#; + test("el", "ClearSpeak", expr, "ολοκλήρωμα από 1 ως άπειρο του; έψιλον υψωμένο στον εκθέτη, χ στο τετράγωνο, μείον χ μείον 1, τέλος εκθέτη; d χ")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_173() -> Result<()> { // + let expr = r#" + + + + + + + dχ + χ + + + + + =logχ + "#; + test("el", "ClearSpeak", expr, "ολοκλήρωμα του κλάσματος με αριθμητή; d χ; και παρονομαστή χ; ισούται με, λογάριθμο χ")?; + return Ok(()); + //theodora. fails. Needs genitive +} + +#[test] +fn uoa_corpus_174() -> Result<()> { // same + let expr = r#"τντν+1Κυτ(χ,τ)dχdτσΕΚτντν+1συ(χ,τ)×νΚ,σ(χ)δγ(χ)dτ=τντν+1Κφ(χ,τ)dχdτ"#; + test("el", "ClearSpeak", expr, "ολοκλήρωμα από τάαφ δείκτης νί, ως τάαφ δείκτης, νί συν 1 τέλος δείκτη, του; ολοκλήρωμα επί του συνόλου κεφαλαίο καπα του; ύψιλον δείκτης τάαφ; ανοίγει παρένθεση; χ κόμμα, τάαφ; κλείνει παρένθεση; d χ d τάαφ; μείον; άθροισμα για σίγμα ανήκει; κεφαλαίο έψιλον δείκτης, κεφαλαίο καπα, του; ολοκλήρωμα από τάαφ δείκτης νί, ως τάαφ δείκτης, νί συν 1 τέλος δείκτη, του; ολοκλήρωμα επί του συνόλου σίγμα του; ανάδελτα του ύψιλον; ανοίγει παρένθεση; χ κόμμα, τάαφ; κλείνει παρένθεση; επί; νί δείκτης; κεφαλαίο καπα, κόμμα, σίγμα τέλος δείκτη; του χ; δέλτα δείκτης γάμμα; του χ; d τάαφ; ισούται με; ολοκλήρωμα από τάαφ δείκτης νί, ως τάαφ δείκτης, νί συν 1 τέλος δείκτη, του; ολοκλήρωμα επί του συνόλου κεφαλαίο καπα του; φ; ανοίγει παρένθεση; χ κόμμα, τάαφ; κλείνει παρένθεση; d χ d τάαφ")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_175() -> Result<()> { // + let expr = r#" + + + + 2 + + ( + + + Δ + α + + υ( + + χ, + τ + ν + + + ) + )= + 1 + + + κ + 2 + + + + + + + + + τ + + ν1 + + + + + τ + ν + + + + + + + + + τη + τ + + + + + ( + + + Δ + α + + υ + ) + + ττ + + ( + + χ,τ + )dσ + + + dτ + + + +"#; + test("el", "ClearSpeak", expr, "μερικό διαφορικό στο τετράγωνο; ανοίγει παρένθεση; κεφαλαίο δέλτα στην άλφα οστή δύναμη; ύψιλον; ανοίγει παρένθεση; χ κόμμα; τάαφ δείκτης νί; κλείνει παρένθεση; κλείνει παρένθεση; ισούται με; το κλάσμα με αριθμητή 1; και παρονομαστή καπα στο τετράγωνο; ολοκλήρωμα από τάαφ δείκτης, νί μείον 1 τέλος δείκτη, ως τάαφ δείκτης νί, του; ολοκλήρωμα από τάαφ μείον ήτα ως τάαφ του; ανοίγει παρένθεση; κεφαλαίο δέλτα στην άλφα οστή δύναμη; ύψιλον; κλείνει παρένθεση δείκτης, τάαφ τάαφ τέλος δείκτη; ανοίγει παρένθεση; χ κόμμα, τάαφ; κλείνει παρένθεση; d σίγμα; d τάαφ")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_176() -> Result<()> { // + let expr = r#" + + + 1 + κ + + + + + + Κ + + + + + 1 + + ( + + + + + + + τ + ν + + + + + τ + + ν+1 + + + + + Δυ( + + χ,τ + )dτ + + + + )dχ + + + + "#; + test("el", "ClearSpeak", expr, "1 προς καπα; ολοκλήρωμα επί του συνόλου κεφαλαίο καπα του; μερικό διαφορικό στην πρώτη δύναμη; ανοίγει παρένθεση; ολοκλήρωμα από τάαφ δείκτης νί, ως τάαφ δείκτης, νί συν 1 τέλος δείκτη, του; κεφαλαίο δέλτα, ύψιλον; ανοίγει παρένθεση; χ κόμμα, τάαφ; κλείνει παρένθεση; d τάαφ; κλείνει παρένθεση; d χ")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_177() -> Result<()> { // + let expr = r#" + + + 1 + + + κ + 2 + + + + + + + + Κ + + + + + + + + τ + + ν1 + + + + + τ + ν + + + + + + + + + + τ + + ν1 + + + τ + + + + + + σ + + σ+κ + + + Δ + + + d + 2 + + υ + + d + λ + 2 + + + + ( + + χ,λ + )dλ + + + dσ + + + dτ + + + dχ + + + +"#; + test("el", "ClearSpeak", expr, "το κλάσμα με αριθμητή 1; και παρονομαστή καπα στο τετράγωνο; ολοκλήρωμα επί του συνόλου κεφαλαίο καπα του; ολοκλήρωμα από τάαφ δείκτης, νί μείον 1 τέλος δείκτη, ως τάαφ δείκτης νί, του; ολοκλήρωμα από τάαφ δείκτης, νί μείον 1 τέλος δείκτη, ως τάαφ του; ολοκλήρωμα από σίγμα ως σίγμα συν καπα του; κεφαλαίο δέλτα; το κλάσμα με αριθμητή; d στο τετράγωνο, ύψιλον; και παρονομαστή d, λάμδα στο τετράγωνο; ανοίγει παρένθεση; χ κόμμα, λάμδα; κλείνει παρένθεση; d λάμδα; d σίγμα; d τάαφ; d χ")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_178() -> Result<()> { // + let expr = r#" + + υ + Γ + 1 + + ( + + + + ( + + + + + 0 + Τ + + + + + | + υ + ˙ + + | + + π( + τ + ) + + dτ + + + + ) + + + 1 + + + π + + + + + + + +1+| + υ + ¯ + + | + ) + "#; + test("el", "ClearSpeak", expr, "νόρμα του ύψιλον; είναι μικρότερο από ή ίσο με; κεφαλαίο γάμμα δείκτης 1; ανοίγει παρένθεση; ανοίγει παρένθεση; ολοκλήρωμα από 0 ως κεφαλαίο τάαφ του; απόλυτη τιμή του ύψιλον τελεία; υψωμένο στην π του τάαφ τέλος δύναμης; d τάαφ; κλείνει παρένθεση υψωμένο στην το κλάσμα με αριθμητή 1; και παρονομαστή π εκθέτης μείον; τέλος δύναμης; συν 1 συν, απόλυτη τιμή του ύψιλον παύλα; κλείνει παρένθεση")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_179() -> Result<()> { // + let expr = r#" + + + + Ξ + + + ( + υ + ),ν = + + + 0 + Τ + + + ( + + + + | + + υ + ˙ + + ( + τ + ) | + + π( + τ + )2 + + + υ + ˙ + + ( + τ + ), + υ + ˙ + + ( + τ + ) + )dτ + + + + "#; + test("el", "ClearSpeak", expr, "αριστερά γωνιακή αγκύλη; κεφαλαίο ξ τόνος; του ύψιλον; κόμμα, νί; δεξιά γωνιακή αγκύλη; ισούται με; ολοκλήρωμα από 0 ως κεφαλαίο τάαφ του; ανοίγει παρένθεση; απόλυτη τιμή του ύψιλον τελεία; του τάαφ, υψωμένο στην π του τάαφ, μείον 2 τέλος δύναμης; ύψιλον τελεία; του τάαφ; κόμμα; ύψιλον τελεία; του τάαφ; κλείνει παρένθεση; d τάαφ")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_180() -> Result<()> { // + let expr = r#" + + + Γ + 5 + + + + ( + + + + + 0 + Τ + + + + + | + + υ + ˙ + + ( + τ + ) | + + π( + τ + ) + + dτ + + + + ) + + + + α+1 + + + π + + + + + + + + "#; + test("el", "ClearSpeak", expr, "κεφαλαίο γάμμα δείκτης 5; ανοίγει παρένθεση; ολοκλήρωμα από 0 ως κεφαλαίο τάαφ του; απόλυτη τιμή του ύψιλον τελεία; του τάαφ, υψωμένο στην π του τάαφ τέλος δύναμης; d τάαφ; κλείνει παρένθεση υψωμένο στην το κλάσμα με αριθμητή; άλφα συν 1; και παρονομαστή π εκθέτης μείον; τέλος δύναμης")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_181() -> Result<()> { // + let expr = r#"φ'(υν),υνυ=0Τ[(|υ˙ν(τ)|π(τ)2υ˙ν(τ),υ˙ν(τ)υ˙(τ))+(Φ(τ,υν(τ)),υν(τ)υ(τ))]dτ"#; + test("el", "ClearSpeak", expr, "αριστερή γωνιακή αγκύλη; φ τόνος, του; ανοίγει παρένθεση; ύψιλον δείκτης νί; κλείνει παρένθεση; κόμμα; ύψιλον δείκτης νί; μείον ύψιλον; δεξιά γωνιακή αγκύλη; ισούται με; ολοκλήρωμα από 0 ως κεφαλαίο τάαφ του; ανοίγει αγκύλη; ανοίγει παρένθεση; απόλυτη τιμή του ύψιλον τελεία, δείκτης νί; του τάαφ, υψωμένο στην π του τάαφ, μείον 2 τέλος δύναμης; ύψιλον τελεία, δείκτης νί; του τάαφ; κόμμα; ύψιλον τελεία, δείκτης νί; του τάαφ; μείον, ύψιλον τελεία; του τάαφ; κλείνει παρένθεση; συν ανοίγει παρένθεση; ανάδελτα του κεφαλαίο φ; ανοίγει παρένθεση; τάαφ κόμμα; ύψιλον δείκτης νί; του τάαφ; κλείνει παρένθεση; κόμμα; ύψιλον δείκτης νί; του τάαφ; μείον, ύψιλον του τάαφ; κλείνει παρένθεση; κλείνει αγκύλη; d τάαφ")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_182() -> Result<()> { // same + let expr = r#" + + + + + 0 + Τ + + + + + + 0 + 1 + + + ( + + Γ( + + συ( + τ + ) + )Γ( + 0 + ),υ( + τ + ) + )dσ + + + dτ + + + +"#; + test("el", "ClearSpeak", expr, "ολοκλήρωμα από 0 ως κεφαλαίο τάαφ του; ολοκλήρωμα από 0 ως 1 του; ανοίγει παρένθεση; ανάδελτα του κεφαλαίο γάμμα; ανοίγει παρένθεση; σίγμα, ύψιλον του τάαφ; κλείνει παρένθεση; μείον; ανάδελτα του κεφαλαίο γάμμα, του 0; κόμμα; ύψιλον του τάαφ; κλείνει παρένθεση; d σίγμα; d τάαφ")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_183() -> Result<()> { // + let expr = r#" + + + + ( + + + + + + + + Ω + + + + + + ( + + + + + + | α |+ξ=1 + λ + + + + ρ + + 2( + + β+| α |+ξλ + ) + + + + | + + Δ + α + + λ + υ + + + τ + ξ + + + + | + 2 + + + + + | υ | + 2 + + + + ) + ε + + 2γτ + + dχdτ + + + + ) + + + 1 + 2 + + + + + "#; + test("el", "ClearSpeak", expr, "ανοίγει παρένθεση; ολοκλήρωμα επί του συνόλου κεφαλαίο ωμέγα δείκτης άπειρο, του; ανοίγει παρένθεση; άθροισμα από απόλυτη τιμή του άλφα; συν ξ; ισούται με 1 ως λάμδα του; ρ υψωμένο στην 2; ανοίγει παρένθεση; βήτα συν, απόλυτη τιμή του άλφα; συν ξ μείον λάμδα; κλείνει παρένθεση τέλος δύναμης; απόλυτη τιμή του κεφαλαίο δέλτα στην άλφα οστή δύναμη; λάμδα; ύψιλον δείκτης, τάαφ στην ξ οστή δύναμη τέλος δείκτη; στο τετράγωνο; συν, απόλυτη τιμή του ύψιλον, στο τετράγωνο; κλείνει παρένθεση; έψιλον υψωμένο στην μείον 2 γάμμα τάαφ τέλος δύναμης; d χ d τάαφ; κλείνει παρένθεση υψωμένο στην 1 δεύτερο τέλος δύναμης")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_184() -> Result<()> { // + let expr = r#" + + + + + + | π |,| ρ |=0 + μ + + + + + ( + + 1 + ) + + | π | + + + + + + Ω + + + + α + + πρ + + ( + + ·,τ + ) + Δ + ρ + + υ + + + Δ + Π + + υ + ¯ + + dχ + + + + + "#; + test("el", "ClearSpeak", expr, "άθροισμα από απόλυτη τιμή του π; κόμμα; απόλυτη τιμή του ρ; ισούται με 0 ως μί του; ανοίγει παρένθεση, μείον 1, κλείνει παρένθεση υψωμένο στην απόλυτη τιμή του π, τέλος δύναμης; ολοκλήρωμα επί του συνόλου κεφαλαίο ωμέγα του; άλφα δείκτης π ρ τέλος δείκτη; ανοίγει παρένθεση; τελεία κόμμα, τάαφ; κλείνει παρένθεση; κεφαλαίο δέλτα στην ρ οστή δύναμη; ύψιλον; παράσταση κεφαλαίο δέλτα στην κεφαλαίο π οστή δύναμη; ύψιλον με γραμμή από πάνω; d χ")?; + return Ok(()); + //theodora. Now reads: άθροισμα από απόλυτη τιμή του π; κόμμα; απόλυτη τιμή του ρ; ισούται με 0 ως μί του; ανοίγει παρένθεση, μείον 1, κλείνει παρένθεση υψωμένο στην απόλυτη τιμή του π, τέλος δύναμης; ολοκλήρωμα επί του συνόλου κεφαλαίο ωμέγα του; άλφα δείκτης π ρ τέλος δείκτη; ανοίγει παρένθεση; φορές κόμμα, τάαφ; κλείνει παρένθεση; κεφαλαίο δέλτα στην ρ οστή δύναμη; ύψιλον; παράσταση κεφαλαίο δέλτα στην κεφαλαίο π οστή δύναμη; ύψιλον με γραμμή από πάνω; d χ +} + +#[test] +fn uoa_corpus_185() -> Result<()> { // + let expr = r#" + + + + + + ξ=0 + + μ1 + + + + + + + Γ + + + + Β + ξ + + υ + + + + ξ + + + υ + ¯ + + + + + ν + ξ + + + + dσ + + + + + "#; + test("el", "ClearSpeak", expr, "άθροισμα από ξ ισούται με 0 ως μί μείον 1 του; ολοκλήρωμα επί του συνόλου κεφαλαίο γάμμα του; κεφαλαίο βήτα δείκτης ξ; ύψιλον; το κλάσμα με αριθμητή; μερικό διαφορικό στην ξ οστή δύναμη; ύψιλον παύλα; και παρονομαστή μερικό διαφορικό; νί στην ξ οστή δύναμη; d σίγμα")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_186() -> Result<()> { // + let expr = r#" + + + Γ + 1 + + + + + + + Κ + + + + + + [ + + υ + 2 + + + + + | + gradυ | + 2 + + + + + + + | α |=2 + + + + + | + + Δ + α + + + υ + 1 + + | + 2 + + + ]d + χ + + + + + + + "#; + test("el", "ClearSpeak", expr, "κεφαλαίο γάμμα δείκτης 1; ολοκλήρωμα επί του συνόλου κεφαλαίο καπα τόνος, του; ανοίγει αγκύλη; ύψιλον στο τετράγωνο, συν; απόλυτη τιμή του κλίση του ύψιλον, στο τετράγωνο; συν; άθροισμα για απόλυτη τιμή του άλφα; ισούται με 2 του; απόλυτη τιμή του κεφαλαίο δέλτα στην άλφα οστή δύναμη; ύψιλον δείκτης 1; στο τετράγωνο; κλείνει αγκύλη; d χ τόνος")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_187() -> Result<()> { // + let expr = r#" + + + + + + 0 + 1 + + + ( + + + χ + ψ + + + ζ + + 10 + + + )dζ + + + + "#; + test("el", "ClearSpeak", expr, "ολοκλήρωμα από 0 ως 1 του; ανοίγει παρένθεση; χ στην ψ οστή δύναμη, μείον ζήτα προς 10; κλείνει παρένθεση; d ζήτα")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_188() -> Result<()> { // + let expr = r#" + + + + + + 0 + 1 + + + + + + + 0 + + + + 1 + ψ + 2 + + + + + + + 1dχdψ + + + + + + = + + + + 0 + + + π + 2 + + + + + + + + + 0 + 1 + + + ρdρdθ + + + + + + + "#; + test("el", "ClearSpeak", expr, "ολοκλήρωμα από 0 ως 1 του; ολοκλήρωμα από 0 ως η τετραγωνική ρίζα του 1 μείον, ψ στο τετράγωνο; του; 1 d χ d ψ; ισούται με; ολοκλήρωμα από 0 ως π προς 2 του; ολοκλήρωμα από 0 ως 1 του; ρ d ρ d θήτα")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_189() -> Result<()> { // + let expr = r#" + + + + + [ + + + cos + χ + + + + 2× + χ + + + + ] + + + dχ + "#; + test("el", "ClearSpeak", expr, "ολοκλήρωμα του ανοίγει αγκύλη; το κλάσμα με αριθμητή; συνημίτονο του, η τετραγωνική ρίζα του χ; και παρονομαστή 2 επί, η τετραγωνική ρίζα του χ; κλείνει αγκύλη; d χ")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_190() -> Result<()> { // + let expr = r#" + + + + lim + + ν + + + + | + + υ + ν + + υ | + + π( + τ + ) + + =0 + "#; + test("el", "ClearSpeak", expr, "το όριο όταν νί προσεγγίζει, άπειρο; του; απόλυτη τιμή του ύψιλον δείκτης νί; μείον ύψιλον, δείκτης, π του τάαφ; ισούται με 0")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_191() -> Result<()> { // same + let expr = r#" + + + + lim + + ν + + ρ( + + + υ + ν + + υ + )=0 + "#; + test("el", "ClearSpeak", expr, "το όριο όταν νί προσεγγίζει, άπειρο; του ρ; ανοίγει παρένθεση; ύψιλον δείκτης νί; μείον ύψιλον; κλείνει παρένθεση; ισούται με 0")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_192() -> Result<()> { // same + let expr = r#" + + + + lim + + ν + + ρ( + + + υ + ν + + + )=ρ( + + + υ + ν + + + ) + "#; + test("el", "ClearSpeak", expr, "το όριο όταν νί προσεγγίζει, άπειρο; του ρ του; ανοίγει παρένθεση; ύψιλον δείκτης νί; κλείνει παρένθεση; ισούται με; ρ του; ανοίγει παρένθεση; ύψιλον δείκτης νί; κλείνει παρένθεση")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_193() -> Result<()> { // same + let expr = r#" + + + + limsup + + ν + + + + Ξ + + + ( + + + υ + ν + + + ) + Ξ + + + ( + υ + ), + υ + ν + + υ =0 + "#; + test("el", "ClearSpeak", expr, "ανώτατο όριο για νί βέλος προς τα δεξιά, άπειρο; αριστερά γωνιακή αγκύλη; κεφαλαίο ξ τόνος; του; ανοίγει παρένθεση; ύψιλον δείκτης νί; κλείνει παρένθεση; μείον, κεφαλαίο ξ τόνος; του ύψιλον; κόμμα; ύψιλον δείκτης νί; μείον ύψιλον; δεξιά γωνιακή αγκύλη; ισούται με 0")?; + return Ok(()); + //theodora. Now reads:παράσταση lim του σουπρέμουμ με νί βέλος προς τα δεξιά, άπειρο από κάτω; αριστερά γωνιακή αγκύλη; κεφαλαίο ξ τόνος; του; ανοίγει παρένθεση; ύψιλον δείκτης νί; κλείνει παρένθεση; μείον, κεφαλαίο ξ τόνος; του ύψιλον; κόμμα; ύψιλον δείκτης νί; μείον ύψιλον; δεξιά γωνιακή αγκύλη; ισούται με 0 +} + +#[test] +fn uoa_corpus_194() -> Result<()> { // + let expr = r#" + + + + [ + Α + + lim + + χ+0 + + + + φ( + χ + ) + χ + + ] + + 1 + + <λ< + + [ + Β + + lim + + χ + + + + φ( + χ + ) + χ + + ] + + 1 + + + "#; + test("el", "ClearSpeak", expr, "ανοίγει αγκύλη; κεφαλαίο άλφα; το όριο όταν χ προσεγγίζει, συν 0; του φ του χ προς χ; κλείνει αγκύλη στην μείον 1 δύναμη; είναι μικρότερο από, λάμδα, είναι μικρότερο από; ανοίγει αγκύλη; κεφαλαίο βήτα; το όριο όταν χ προσεγγίζει, άπειρο; του φ του χ προς χ; κλείνει αγκύλη στην μείον 1 δύναμη")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_195() -> Result<()> { // + let expr = r#" + + + + [ + Α + + lim + + χ + + + + φ( + χ + ) + χ + + ] + + 1 + + <λ< + + [ + Β + + lim + + χ+0 + + + + φ( + χ + ) + χ + + ] + + 1 + + + "#; + test("el", "ClearSpeak", expr, "ανοίγει αγκύλη; κεφαλαίο άλφα; το όριο όταν χ προσεγγίζει, άπειρο; του φ του χ προς χ; κλείνει αγκύλη στην μείον 1 δύναμη; είναι μικρότερο από, λάμδα, είναι μικρότερο από; ανοίγει αγκύλη; κεφαλαίο βήτα; το όριο όταν χ προσεγγίζει, συν 0; του φ του χ προς χ; κλείνει αγκύλη στην μείον 1 δύναμη")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_196() -> Result<()> { // + let expr = r#" + + λ + + lim + + Δτ0 + + + 1 + + Δτ + + [ + ( + + Τυ + )( + + τ+Δτ + )( + + Τυ + )( + τ + ) ] + "#; + test("el", "ClearSpeak", expr, "λάμδα; το όριο όταν κεφαλαίο δέλτα, τάαφ; προσεγγίζει 0; του; το κλάσμα με αριθμητή 1; και παρονομαστή κεφαλαίο δέλτα, τάαφ; ανοίγει αγκύλη; ανοίγει παρένθεση; κεφαλαίο τάαφ, ύψιλον; κλείνει παρένθεση; ανοίγει παρένθεση; τάαφ συν, κεφαλαίο δέλτα, τάαφ; κλείνει παρένθεση; μείον; ανοίγει παρένθεση; κεφαλαίο τάαφ, ύψιλον; κλείνει παρένθεση; τάαφ; κλείνει αγκύλη")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_197() -> Result<()> { // + let expr = r#" + + + + lim + + Δτ0 + + + + ( + + + Τ + 2 + + υ + )( + + τ+Δτ + )( + + + Τ + 2 + + υ + )( + τ + ) + + Δτ + + + "#; + test("el", "ClearSpeak", expr, "το όριο όταν κεφαλαίο δέλτα, τάαφ; προσεγγίζει 0; του; κλάσματος με αριθμητή; ανοίγει παρένθεση; κεφαλαίο τάαφ δείκτης 2; ύψιλον; κλείνει παρένθεση; του τάαφ συν, κεφαλαίο δέλτα, τάαφ; μείον; ανοίγει παρένθεση; κεφαλαίο τάαφ δείκτης 2; ύψιλον; κλείνει παρένθεση; τάαφ; και παρονομαστή κεφαλαίο δέλτα, του τάαφ")?; + return Ok(()); + //theodora. fails. Now reads: το όριο όταν κεφαλαίο δέλτα, τάαφ; προσεγγίζει 0; του; το κλάσμα με αριθμητή; ανοίγει παρένθεση; κεφαλαίο τάαφ δείκτης 2; ύψιλον; κλείνει παρένθεση; ανοίγει παρένθεση; τάαφ συν, κεφαλαίο δέλτα, τάαφ; κλείνει παρένθεση; μείον; ανοίγει παρένθεση; κεφαλαίο τάαφ δείκτης 2; ύψιλον; κλείνει παρένθεση; τάαφ; και παρονομαστή κεφαλαίο δέλτα, τάαφ +} + +#[test] +fn uoa_corpus_198() -> Result<()> { // + let expr = r#" + + + + lim + + ν + + + + + 0 + 1 + + + | + ( + + + Τ + 1 + + + υ + ν + + + )( + τ + )( + + + Τ + 1 + + + υ + 0 + + + )( + τ + ) |dτ + + + + "#; + test("el", "ClearSpeak", expr, "το όριο όταν νί προσεγγίζει, άπειρο; του; ολοκλήρωμα από 0 ως 1 του; απόλυτη τιμή του ανοίγει παρένθεση; κεφαλαίο τάαφ δείκτης 1; ύψιλον δείκτης νί; κλείνει παρένθεση; του τάαφ; μείον; κεφαλαίο τάαφ δείκτης 1; ύψιλον δείκτης 0; του τάαφ; d τάαφ")?; + return Ok(()); + //theodora. fails. Since T_1υ_ν and T_1υ_0 are functions or operators it would be best to read "Tυ of τ" + //Now reads: ανοίγει παρένθεση; ύψιλον αστερίσκος; κλείνει παρένθεση υψωμένο στην τόνος τόνος, τέλος δύναμης; τάαφ; ισούται με; ανοίγει παρένθεση; κεφαλαίο τάαφ; ύψιλον αστερίσκος; κλείνει παρένθεση υψωμένο στην τόνος τόνος, τέλος δύναμης; τάαφ +} + +#[test] +fn uoa_corpus_199() -> Result<()> { // + let expr = r#" + + + + lim + + χ+0 + + + + φ( + χ + ) + χ + + < + + ( + + λΒ + ) + + 1 + + + "#; + test("el", "ClearSpeak", expr, "το όριο όταν χ προσεγγίζει, συν 0; του φ του χ προς χ; είναι μικρότερο από; ανοίγει παρένθεση; λάμδα κεφαλαίο βήτα; κλείνει παρένθεση στην μείον 1 δύναμη")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_200() -> Result<()> { // + let expr = r#" + + λΑ + + lim + + χ + + + + φ( + χ + ) + χ + + >1 + "#; + test("el", "ClearSpeak", expr, "λάμδα κεφαλαίο άλφα; το όριο όταν χ προσεγγίζει, άπειρο; του φ του χ προς χ; είναι μεγαλύτερο από 1")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_201() -> Result<()> { // + let expr = r#" + + + + lim + + χ + + + + φ( + χ + ) + χ + + + + ( + + λ + Α + ¯ + + + ) + + 1 + + +ε + "#; + test("el", "ClearSpeak", expr, "το όριο όταν χ προσεγγίζει, άπειρο; του φ του χ προς χ; είναι μεγαλύτερο από ή ίσο με; ανοίγει παρένθεση; λάμδα, κεφαλαίο άλφα παύλα; κλείνει παρένθεση στην μείον 1 δύναμη; συν έψιλον")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_202() -> Result<()> { // same + let expr = r#" + + + + lim + + χ + 0 + + + + + + 1 + χ + + + "#; + test("el", "ClearSpeak", expr, "το όριο όταν χ προσεγγίζει, 0 εκθέτης μείον; του 1 προς χ")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_203() -> Result<()> { // + let expr = r#" + + + + lim + + x + 0 + + + + + ( + + + 1 + χ + + + + 1 + + + χ + 2 + + + + + ) + "#; + test("el", "ClearSpeak", expr, "το όριο όταν x προσεγγίζει, 0 εκθέτης μείον; του; ανοίγει παρένθεση; 1 προς χ συν; το κλάσμα με αριθμητή 1; και παρονομαστή χ στο τετράγωνο; κλείνει παρένθεση")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_204() -> Result<()> { // + let expr = r#" + + + + lim + + x3 + + + + 1 + + χ2 + + + + χ3 + + + "#; + test("el", "ClearSpeak", expr, "το όριο όταν x προσεγγίζει 3; του; το κλάσμα με αριθμητή; 1 μείον, η τετραγωνική ρίζα του χ μείον 2; και παρονομαστή χ μείον 3")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_205() -> Result<()> { // + let expr = r#" + + + + lim + + δx0 + + + + φ( + χ + 0 + + +δχ)φ( + χ + 0 + + ) + + δχ + + + "#; + test("el", "ClearSpeak", expr, "το όριο όταν δέλτα x, προσεγγίζει 0; του; το κλάσμα με αριθμητή; φ; ανοίγει παρένθεση; χ δείκτης 0; συν δέλτα χ; κλείνει παρένθεση; μείον; φ του; ανοίγει παρένθεση, χ δείκτης 0; κλείνει παρένθεση; και παρονομαστή δέλτα χ")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_206() -> Result<()> { // + let expr = r#" + + + + lim + + β1 + + + β + + + + ( + + γδ + ) + 2 + + + + + "#; + test("el", "ClearSpeak", expr, "το όριο όταν βήτα προσεγγίζει 1; του; το κλάσμα με αριθμητή βήτα; και παρονομαστή ανοίγει παρένθεση; γάμμα μείον δέλτα; κλείνει παρένθεση στο τετράγωνο")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_207() -> Result<()> { // same + let expr = r#" + + + + limsup + + ν + + ( + + + Ξ + + + ( + + + υ + ν + + + ) + Ξ + + + ( + υ + ), + υ + ν + + υ + )0 + "#; + test("el", "ClearSpeak", expr, "ανώτατο όριο όταν νί βέλος προς τα δεξιά, άπειρο του; ανοίγει παρένθεση; κεφαλαίο ξ τόνος; του; ανοίγει παρένθεση; ύψιλον δείκτης νί; κλείνει παρένθεση; μείον, κεφαλαίο ξ τόνος; του ύψιλον; κόμμα; ύψιλον δείκτης νί; μείον ύψιλον; κλείνει παρένθεση; είναι μικρότερο από ή ίσο με 0")?; + return Ok(()); + //theodora. fails the current rules. don't know why. Now reads: limit sup νί βέλος προς τα δεξιά, άπειρο; του; ανοίγει παρένθεση; κεφαλαίο ξ τόνος; του; ανοίγει παρένθεση; ύψιλον δείκτης νί; κλείνει παρένθεση; μείον, κεφαλαίο ξ τόνος; του ύψιλον; κόμμα; ύψιλον δείκτης νί; μείον ύψιλον; κλείνει παρένθεση; είναι μικρότερο από ή ίσο με 0 +} + +#[test] +fn uoa_corpus_208() -> Result<()> { // + let expr = r#" + + + + limsup + + ν + + + + | + + + υ + ¯ + + + ν + + | + + + ρ + + + + α + + φ( + + + υ + ν + + + )= + "#; + test("el", "ClearSpeak", expr, "ανώτατο όριο όταν νί βέλος προς τα δεξιά, άπειρο του; απόλυτη τιμή του ύψιλον παύλα, δείκτης νί; υψωμένο στην μείον ρ εκθέτης συν; άλφα τέλος δύναμης; φ του; ανοίγει παρένθεση; ύψιλον δείκτης νί; κλείνει παρένθεση; ισούται με, μείον άπειρο")?; + return Ok(()); + //theodora. fails. don't know why. Now reads: limit sup νί βέλος προς τα δεξιά, άπειρο; του; απόλυτη τιμή του ύψιλον παύλα, δείκτης νί; υψωμένο στην μείον ρ εκθέτης συν; άλφα τέλος δύναμης; φ του; ανοίγει παρένθεση; ύψιλον δείκτης νί; κλείνει παρένθεση; ισούται με, μείον άπειρο +} + + + +#[test] +fn uoa_corpus_209() -> Result<()> { // + let expr = r#" + + + + lim + + Δτ0 + + + λ + + Δτ + + + + + 0 + 1 + + + [ + Ξ( + + τ+Δτ,σ + )Ξ( + + τ,σ + ) ]υ( + σ + )dσ + + + + "#; + test("el", "ClearSpeak", expr, "το όριο όταν κεφαλαίο δέλτα, τάαφ; προσεγγίζει 0; του; το κλάσμα με αριθμητή λάμδα; και παρονομαστή κεφαλαίο δέλτα, τάαφ; ολοκλήρωμα από 0 ως 1 του; ανοίγει αγκύλη; κεφαλαίο ξ; ανοίγει παρένθεση; τάαφ συν, κεφαλαίο δέλτα, τάαφ; κόμμα, σίγμα; κλείνει παρένθεση; μείον; κεφαλαίο ξ; ανοίγει παρένθεση; τάαφ κόμμα, σίγμα; κλείνει παρένθεση; κλείνει αγκύλη; ύψιλον του σίγμα; d σίγμα")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_210() -> Result<()> { // + let expr = r#" + + + + lim + + ν + + + + + 0 + 1 + + + | + ( + + + Τ + 1 + + + υ + ν + + + )( + τ + ) + Τ + 1 + + + υ + 0 + + ( + τ + ) |dτ + + + + "#; + test("el", "ClearSpeak", expr, "το όριο όταν νί προσεγγίζει, άπειρο; του; ολοκλήρωμα από 0 ως 1 του; απόλυτη τιμή του ανοίγει παρένθεση; κεφαλαίο τάαφ δείκτης 1; ύψιλον δείκτης νί; κλείνει παρένθεση; του τάαφ; μείον; κεφαλαίο τάαφ δείκτης 1; ύψιλον δείκτης 0; του τάαφ; d τάαφ")?; + return Ok(()); + //theodora. fails. doesnt recognize the first operator as an operator. +} + +#[test] +fn uoa_corpus_211() -> Result<()> { // same + let expr = r#" + + + + lim + + ν + + φ( + + τ, + υ + ν + + ( + τ + ), + + υ + + + + ν + + ( + τ + ), + υ + + + ( + τ + ) + ) + "#; + test("el", "ClearSpeak", expr, "το όριο όταν νί προσεγγίζει, άπειρο; του φ; ανοίγει παρένθεση; τάαφ κόμμα; ύψιλον δείκτης νί; του τάαφ; κόμμα; ύψιλον τόνος, δείκτης νί; του τάαφ; κόμμα; ύψιλον διπλή παράγωγος; του τάαφ; κλείνει παρένθεση")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_212() -> Result<()> { // + let expr = r#"limΔτ001Ξ(τ+Δτ)Ξ(τ,σ)Δτη(σ)φ(σ,υ(σ),υ'(σ),υ''(σ))dσ"#; + test("el", "ClearSpeak", expr, "το όριο όταν κεφαλαίο δέλτα, τάαφ; προσεγγίζει 0; του; ολοκλήρωμα από 0 ως 1 του; το κλάσμα με αριθμητή; κεφαλαίο ξ; ανοίγει παρένθεση; τάαφ συν, κεφαλαίο δέλτα, τάαφ; κλείνει παρένθεση; μείον; κεφαλαίο ξ; ανοίγει παρένθεση; τάαφ κόμμα, σίγμα; κλείνει παρένθεση; και παρονομαστή κεφαλαίο δέλτα, τάαφ; ήτα του σίγμα, φ; ανοίγει παρένθεση; σίγμα κόμμα; ύψιλον του σίγμα; κόμμα; ύψιλον τόνος; του σίγμα; κόμμα; ύψιλον διπλή παράγωγος; του σίγμα; κλείνει παρένθεση; d σίγμα")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_213() -> Result<()> { // same + let expr = r#" + + Α= + + lim + + ν + + + + + + κ=1 + ν + + + φ( + δ + κ + + )Δχ + + "#; + test("el", "ClearSpeak", expr, "κεφαλαίο άλφα, ισούται με; το όριο όταν νί προσεγγίζει, άπειρο; του; άθροισμα από καπα ισούται με 1 ως νί του; φ του; ανοίγει παρένθεση; δέλτα δείκτης καπα; κλείνει παρένθεση; κεφαλαίο δέλτα, χ")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_214() -> Result<()> { // + let expr = r#" + + + + lim + + χ + + + + + + 0 + χ + + + + e + + + ψ + 2 + + + + dψ + + + = + + + π + + + 2 + + + "#; + test("el", "ClearSpeak", expr, "το όριο όταν χ προσεγγίζει, άπειρο; του; ολοκλήρωμα από 0 ως χ του; e υψωμένο στην μείον ψ στο τετράγωνο τέλος δύναμης; d ψ; ισούται με; το κλάσμα με αριθμητή; η τετραγωνική ρίζα του π; και παρονομαστή 2")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_215() -> Result<()> { // same + let expr = r#" + + ( + + + + + + + β + 1 + + + + + + + + + β + 2 + + + + + + + ) + "#; + test("el", "ClearSpeak", expr, "2 επί ένα πίνακας-στήλη; γραμμή 1; βήτα δείκτης 1; γραμμή 2; βήτα δείκτης 2")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_216() -> Result<()> { // same + let expr = r#" + + ( + + + + + + + Σ + + 1,1 + + + + + + + Σ + + 1,2 + + + + + + + + + Σ + + 2,1 + + + + + + + Σ + + 2,2 + + + + + + + ) + "#; + test("el", "ClearSpeak", expr, "2 επί 2 πίνακας; γραμμή 1; στήλη 1; κεφαλαίο σίγμα δείκτης 1,1; στήλη 2; κεφαλαίο σίγμα δείκτης 1,2; γραμμή 2; στήλη 1; κεφαλαίο σίγμα δείκτης 2,1; στήλη 2; κεφαλαίο σίγμα δείκτης 2,2")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_217() -> Result<()> { // + let expr = r#" + + ( + + + + + + + Σ + + 1,1 + + + + + + + Σ + + 1,2 + + + + + + + + + Σ + + 2,1 + + + + + + + Σ + + 2,2 + + + + + + + )= + + ( + + + + + + + Σ + + 1,1 + + + + + + + Σ + + 1,2 + + + + + + + + + Σ + + 2,1 + + + + + + + Σ + + 2,2 + + + + + + + ) + + 1 + + + "#; + test("el", "ClearSpeak", expr, "2 επί 2 πίνακας; γραμμή 1; στήλη 1; κεφαλαίο σίγμα στην 1,1 δύναμη, στήλη 2; κεφαλαίο σίγμα στην 1,2 δύναμη; γραμμή 2; στήλη 1; κεφαλαίο σίγμα στην 2,1 δύναμη, στήλη 2; κεφαλαίο σίγμα στην 2,2 δύναμη; ισούται με; 2 επί 2 πίνακα; γραμμή 1; στήλη 1; κεφαλαίο σίγμα δείκτης 1,1; στήλη 2; κεφαλαίο σίγμα δείκτης 1,2; γραμμή 2; στήλη 1; κεφαλαίο σίγμα δείκτης 2,1; στήλη 2; κεφαλαίο σίγμα δείκτης 2,2; στην μείον 1 δύναμη")?; + return Ok(()); + //theodora: fails. now reads 2 επί 2 πίνακας; γραμμή 1; στήλη 1; κεφαλαίο σίγμα στην 1,1 δύναμη, στήλη 2; κεφαλαίο σίγμα στην 1,2 δύναμη; γραμμή 2; στήλη 1; κεφαλαίο σίγμα στην 2,1 δύναμη, στήλη 2; κεφαλαίο σίγμα στην 2,2 δύναμη; ισούται με; TEMP NAME του 2 επί 2 πίνακας; γραμμή 1; στήλη 1; κεφαλαίο σίγμα δείκτης 1,1; στήλη 2; κεφαλαίο σίγμα δείκτης 1,2; γραμμή 2; στήλη 1; κεφαλαίο σίγμα δείκτης 2,1; στήλη 2; κεφαλαίο σίγμα δείκτης 2,2; στην μείον 1 δύναμη +} + +#[test] +fn uoa_corpus_218() -> Result<()> { // + let expr = r#" + + + + ( + + + + + Α + + + Β + + + + + + Β + + + + + + Γ + + + + + ) + + 1 + + =( + + + + + + αα + + + + αβ + + + + + + βα + + + + ββ + + + + + ) + "#; + test("el", "ClearSpeak", expr, "2 επί 2 πίνακας; γραμμή 1; στήλη 1; κεφαλαίο άλφα, στήλη 2; κεφαλαίο βήτα; γραμμή 2; στήλη 1; κεφαλαίο βήτα τόνος; στήλη 2; κεφαλαίο γάμμα; στην μείον 1 δύναμη; ισούται με; 2 επί 2 πίνακα; γραμμή 1; στήλη 1; άλφα άλφα, στήλη 2; άλφα βήτα; γραμμή 2; στήλη 1; βήτα άλφα, στήλη 2; βήτα βήτα")?; + return Ok(()); + //theodora. fails. Now reads: TEMP NAME του 2 επί 2 πίνακας; γραμμή 1; στήλη 1; κεφαλαίο άλφα, στήλη 2; κεφαλαίο βήτα; γραμμή 2; στήλη 1; κεφαλαίο βήτα τόνος; στήλη 2; κεφαλαίο γάμμα; στην μείον 1 δύναμη; ισούται με; 2 επί 2 πίνακα; γραμμή 1; στήλη 1; άλφα άλφα, στήλη 2; άλφα βήτα; γραμμή 2; στήλη 1; βήτα άλφα, στήλη 2; βήτα βήτα + +} + +#[test] +fn uoa_corpus_219() -> Result<()> { // same + let expr = r#" + + ( + + + + + + + Υ + 1 + + + + + + + + + Υ + 2 + + + + + + + ) + "#; + test("el", "ClearSpeak", expr, "2 επί ένα πίνακας-στήλη; γραμμή 1; κεφαλαίο ύψιλον δείκτης 1; γραμμή 2; κεφαλαίο ύψιλον δείκτης 2")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_220() -> Result<()> { // same + let expr = r#" + + ( + + + + + + + σ + 1 + 2 + + + + + γ + + + + + γ + + + + + σ + 2 + 2 + + + + + + + ) + Ι + ν + + + "#; + test("el", "ClearSpeak", expr, "2 επί 2 πίνακας; γραμμή 1; στήλη 1; σίγμα δείκτης 1, στο τετράγωνο, στήλη 2; γάμμα; γραμμή 2; στήλη 1; γάμμα, στήλη 2; σίγμα δείκτης 2, στο τετράγωνο; κεφαλαίο ιότα δείκτης νί")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_221() -> Result<()> { // same + let expr = r#"Β2=1000Ιν"#; + test("el", "ClearSpeak", expr, "κεφαλαίο βήτα δείκτης 1; ισούται με; τον 2 επί 2 διαγώνιο πίνακα; στήλη 1; 1; κυκλωμένο επί; κεφαλαίο ιότα δείκτης νί")?; + return Ok(()); + //theodora. fails accusative. don't know why. Now reads: κεφαλαίο βήτα δείκτης 1; ισούται με; ο 2 επί 2 διαγώνιος πίνακας; στήλη 1; 1; κυκλωμένο επί; κεφαλαίο ιότα δείκτης νί +} + +#[test] +fn uoa_corpus_222() -> Result<()> { // same + let expr = r#" + + + Β + 2 + + =( + + + + + 0 + + + 0 + + + + + 0 + + + 1 + + + + + ) + Ι + ν + + + "#; + test("el", "ClearSpeak", expr, "κεφαλαίο βήτα δείκτης 2; ισούται με; τον 2 επί 2 διαγώνιο πίνακα; στήλη 2; 1; κυκλωμένο επί; κεφαλαίο ιότα δείκτης νί")?; + return Ok(()); + //theodora. fails accusative. Now reads: κεφαλαίο βήτα δείκτης 2; ισούται με; ο 2 επί 2 διαγώνιος πίνακας; στήλη 2; 1; κυκλωμένο επί; κεφαλαίο ιότα δείκτης νί +} + +#[test] +fn uoa_corpus_223() -> Result<()> { // same + let expr = r#" + + + Β + 3 + + =( + + + + + 0 + + + 1 + + + + + 1 + + + 0 + + + + + ) + Ι + ν + + + "#; + test("el", "ClearSpeak", expr, "κεφαλαίο βήτα δείκτης 3; ισούται με; 2 επί 2 πίνακα; γραμμή 1; 0, 1; γραμμή 2; 1, 0; κυκλωμένο επί; κεφαλαίο ιότα δείκτης νί")?; + return Ok(()); + //theodora. fails accusative rule. + +} + +#[test] +fn uoa_corpus_224() -> Result<()> { // same + let expr = r#" + + + Μ + + ( + + + + + Χ + + + 0 + + + + + 0 + + + Χ + + + + + ) + + = + Ι + 2 + + + Μ + Χ + + + "#; + test("el", "ClearSpeak", expr, "κεφαλαίο μί δείκτης; ο 2 επί 2 διαγώνιος πίνακας; στήλη 1; κεφαλαίο χ; στήλη 2; κεφαλαίο χ; τέλος δείκτη; ισούται με; κεφαλαίο ιότα δείκτης 2; κυκλωμένο επί; κεφαλαίο μί δείκτης, κεφαλαίο χ")?; + return Ok(()); + //theodora. fails. Now reads: κεφαλαίο μί δείκτης; TEMP NAME του ο 2 επί 2 διαγώνιος πίνακας; στήλη 1; κεφαλαίο χ; στήλη 2; κεφαλαίο χ; τέλος δείκτη; ισούται με; κεφαλαίο ιότα δείκτης 2; κυκλωμένο επί; κεφαλαίο μί δείκτης, κεφαλαίο χ +} + +#[test] +fn uoa_corpus_225() -> Result<()> { // same + let expr = r#" + + var + + ( + + + + + + vec + + ( + + + + Υ + _ + + ^ + + 1 + + ) + + + + + + + + vec + + ( + + + + Υ + _ + + ^ + + 2 + + ) + + + + + + + ) + + + = + + + ( + + + + + + Σ + 1,1 + + + + + Σ + 1,2 + + + + + + + Σ + 2,1 + + + + + Σ + 2,2 + + + + + + ) + + + + + Ι + ν + + +"#; + test("el", "ClearSpeak", expr, "var του; 2 επί ένα πίνακας-στήλη; γραμμή 1; vec του; ανοίγει παρένθεση; παράσταση κεφαλαίο ύψιλον με γραμμή από κάτω με καπέλο από πάνω δείκτης 1; κλείνει παρένθεση; γραμμή 2; vec του; ανοίγει παρένθεση; παράσταση κεφαλαίο ύψιλον με γραμμή από κάτω με καπέλο από πάνω δείκτης 2; κλείνει παρένθεση; ισούται με; 2 επί 2 πίνακας; γραμμή 1; στήλη 1; κεφαλαίο σίγμα δείκτης 1,1; στήλη 2; κεφαλαίο σίγμα δείκτης 1,2; γραμμή 2; στήλη 1; κεφαλαίο σίγμα δείκτης 2,1; στήλη 2; κεφαλαίο σίγμα δείκτης 2,2; κυκλωμένο επί; κεφαλαίο ιότα δείκτης νί")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_226() -> Result<()> { // same + let expr = r#" + + Ιν + "#; + test("el", "ClearSpeak", expr, "κεφαλαίο ιότα, κυκλωμένο επί, νί")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_227() -> Result<()> { // same + let expr = r#" + + ( + + + + + + + Υ + 1 + + + + + + + + + Υ + 2 + + + + + + + )[ + ( + + + + + Χ + + + 0 + + + + + 0 + + + Χ + + + + + )( + + + + + + + β + 1 + + + + + + + + + β + 2 + + + + + + + ),( + + + + + + + Σ + + 1,1 + + + + + + + Σ + + 1,2 + + + + + + + + + Σ + + 2,1 + + + + + + + Σ + + 2,2 + + + + + + + ) ] + "#; + test("el", "ClearSpeak", expr, "2 επί ένα πίνακας-στήλη; γραμμή 1; κεφαλαίο ύψιλον δείκτης 1; γραμμή 2; κεφαλαίο ύψιλον δείκτης 2; κυματοειδής γραμμή; ανοίγει αγκύλη; ο 2 επί 2 διαγώνιος πίνακας; στήλη 1; κεφαλαίο χ; στήλη 2; κεφαλαίο χ; 2 επί ένα πίνακας-στήλη; γραμμή 1; βήτα δείκτης 1; γραμμή 2; βήτα δείκτης 2; κόμμα; 2 επί 2 πίνακας; γραμμή 1; στήλη 1; κεφαλαίο σίγμα δείκτης 1,1; στήλη 2; κεφαλαίο σίγμα δείκτης 1,2; γραμμή 2; στήλη 1; κεφαλαίο σίγμα δείκτης 2,1; στήλη 2; κεφαλαίο σίγμα δείκτης 2,2; κλείνει αγκύλη")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_228() -> Result<()> { // + let expr = r#" + + + + ( + + + + + + + + β + ^ + + + 1 + + + + + + + + + + β + ^ + + + 2 + + + + + + + )= + [ + ( + + + + + + + + Χ + + + + 1 + + + + + 0 + + + + + 0 + + + + + + Χ + + + + 2 + + + + + + + )( + + + + + + + Σ + + 1,1 + + + + + + + Σ + + 1,2 + + + + + + + + + Σ + + 2,1 + + + + + + + Σ + + 2,1 + + + + + + + )( + + + + + + + Χ + 1 + + + + + 0 + + + + + 0 + + + + + Χ + 2 + + + + + + + ) ] + + 1 + + + + + + + ×( + + + + + + + + Χ + + + + 1 + + + + + 0 + + + + + 0 + + + + + + Χ + + + + 2 + + + + + + + )( + + + + + + + Σ + + 1,1 + + + + + + + Σ + + 1,2 + + + + + + + + + Σ + + 2,1 + + + + + + + Σ + + 2,1 + + + + + + + )( + + + + + + + Υ + 1 + + + + + + + + + Υ + 2 + + + + + + + ) + + + + + "#; + test("el", "ClearSpeak", expr, "2 σειρές; σειρά 1; 2 επί ένα πίνακας-στήλη; γραμμή 1; βήτα καπέλο, δείκτης 1; γραμμή 2; βήτα καπέλο, δείκτης 2; ισούται με; ανοίγει αγκύλη; ο 2 επί 2 διαγώνιος πίνακας; κεφαλαίο χ τόνος, δείκτης 1; κεφαλαίο χ τόνος, δείκτης 2; 2 επί 2 πίνακας; γραμμή 1; στήλη 1; κεφαλαίο σίγμα στην 1,1 δύναμη, στήλη 2; κεφαλαίο σίγμα στην 1,2 δύναμη; γραμμή 2; στήλη 1; κεφαλαίο σίγμα στην 2,1 δύναμη, στήλη 2; κεφαλαίο σίγμα στην 2,1 δύναμη; ο 2 επί 2 διαγώνιος πίνακας; κεφαλαίο χ δείκτης 1; κεφαλαίο χ δείκτης 2; κλείνει αγκύλη στην μείον 1 δύναμη; σειρά 2; επί; ο 2 επί 2 διαγώνιος πίνακας; κεφαλαίο χ τόνος, δείκτης 1; κεφαλαίο χ τόνος, δείκτης 2; 2 επί 2 πίνακας; γραμμή 1; στήλη 1; κεφαλαίο σίγμα στην 1,1 δύναμη, στήλη 2; κεφαλαίο σίγμα στην 1,2 δύναμη; γραμμή 2; στήλη 1; κεφαλαίο σίγμα στην 2,1 δύναμη, στήλη 2; κεφαλαίο σίγμα στην 2,1 δύναμη; 2 επί ένα πίνακας-στήλη; γραμμή 1; κεφαλαίο ύψιλον δείκτης 1; γραμμή 2; κεφαλαίο ύψιλον δείκτης 2")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_229() -> Result<()> { // + let expr = r#" + + [ + ( + + + + + + + Χ + 1 + + + + + 0 + + + + + + + Σ + + 2,1 + + + Σ + + 1,1 + + 1 + + + Χ + 1 + + + + + + + Χ + 2 + + + + + + + )( + + + + + + + β + 1 + + + + + + + + + β + 2 + + + + + + + ),( + + + + + + + Σ + + 1,1 + + + + + 0 + + + + + 0 + + + + + Σ + + 22.1 + + + + + + + ) ] + "#; + test("el", "ClearSpeak", expr, "ανοίγει αγκύλη; 2 επί 2 πίνακας; γραμμή 1; στήλη 1; κεφαλαίο χ δείκτης 1; στήλη 2; 0; γραμμή 2; στήλη 1; μείον κεφαλαίο σίγμα δείκτης 2,1; κεφαλαίο σίγμα δείκτης 1,1, στην μείον 1 δύναμη; κεφαλαίο χ δείκτης 1; στήλη 2; κεφαλαίο χ δείκτης 2; 2 επί ένα πίνακας-στήλη; γραμμή 1; βήτα δείκτης 1; γραμμή 2; βήτα δείκτης 2; κόμμα; ο 2 επί 2 διαγώνιος πίνακας; στήλη 1; κεφαλαίο σίγμα δείκτης 1,1; στήλη 2; κεφαλαίο σίγμα δείκτης 22.1; κλείνει αγκύλη")?; + return Ok(()); + //theodora. fails. converts 22.1-->221 +} + +#[test] +fn uoa_corpus_230() -> Result<()> { // + let expr = r#" + + ( + + Ι,0 + )( + + + + + + + + Χ + + + + 1 + + + Σ + + 1,1 + + + Χ + 1 + + + + + + + + Χ + + + + 1 + + + Σ + + 1,2 + + + Χ + 2 + + + + + + + + + + Χ + + + + 2 + + + Σ + + 2,1 + + + Χ + 1 + + + + + + + + Χ + + + + 2 + + + Σ + + 2,2 + + + Χ + 2 + + + + + + + )( + + + + + 0 + + + + + Ι + + + + + ) + "#; + test("el", "ClearSpeak", expr, "ανοίγει παρένθεση; κεφαλαίο ιότα;0; κλείνει παρένθεση; 2 επί 2 πίνακας; γραμμή 1; στήλη 1; κεφαλαίο χ τόνος, δείκτης 1; κεφαλαίο σίγμα στην 1,1 δύναμη; κεφαλαίο χ δείκτης 1; στήλη 2; κεφαλαίο χ τόνος, δείκτης 1; κεφαλαίο σίγμα στην 1,2 δύναμη; κεφαλαίο χ δείκτης 2; γραμμή 2; στήλη 1; κεφαλαίο χ τόνος, δείκτης 2; κεφαλαίο σίγμα στην 2,1 δύναμη; κεφαλαίο χ δείκτης 1; στήλη 2; κεφαλαίο χ τόνος, δείκτης 2; κεφαλαίο σίγμα στην 2,2 δύναμη; κεφαλαίο χ δείκτης 2; 2 επί ένα πίνακας-στήλη; 0; κεφαλαίο ιότα")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_231() -> Result<()> { // + let expr = r#" + + ( + + + + + + β + ~ + + 1 + + + + + + + + β + ~ + + 2 + + + + + ) + + + ~ + + + Ν + + 2 + κ + + + + + [ + + + ( + + + + + β + 1 + + + + + + + β + 2 + + + + + ) + + + , + + + ( + + + + Var + + ( + + + β + ~ + + 1 + + ) + + + + + cov + + ( + + + β + ~ + + 1 + + , + + + β + ~ + + 2 + + ) + + + + + + + cov + + ( + + + β + ~ + + 2 + + , + + + β + ~ + + 1 + + ) + + + + + Var + + ( + + + β + ~ + + 2 + + ) + + + + + ) + + + ] + +"#; + test("el", "ClearSpeak", expr, "2 επί ένα πίνακας-στήλη; γραμμή 1; βήτα κυματοειδής γραμμή, δείκτης 1; γραμμή 2; βήτα κυματοειδής γραμμή, δείκτης 2; κυματοειδής γραμμή; κεφαλαίο νί δείκτης, 2 στην καπα οστή δύναμη τέλος δείκτη; ανοίγει αγκύλη; 2 επί ένα πίνακας-στήλη; γραμμή 1; βήτα δείκτης 1; γραμμή 2; βήτα δείκτης 2; κόμμα; 2 επί 2 πίνακας; γραμμή 1; στήλη 1; Var του; ανοίγει παρένθεση; βήτα κυματοειδής γραμμή, δείκτης 1; κλείνει παρένθεση, στήλη 2; cov; ανοίγει παρένθεση; βήτα κυματοειδής γραμμή, δείκτης 1; κόμμα; βήτα κυματοειδής γραμμή, δείκτης 2; κλείνει παρένθεση; γραμμή 2; στήλη 1; cov; ανοίγει παρένθεση; βήτα κυματοειδής γραμμή, δείκτης 2; κόμμα; βήτα κυματοειδής γραμμή, δείκτης 1; κλείνει παρένθεση, στήλη 2; Var του; ανοίγει παρένθεση; βήτα κυματοειδής γραμμή, δείκτης 2; κλείνει παρένθεση; κλείνει αγκύλη")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_232() -> Result<()> { // same + let expr = r#" + + ( + + + + + + + Υ + 1 + + + + + + + + + Υ + 2 + + + + + + + ) + Ν + + 2ν + + [ + ( + + + Ι + 2 + + Χ + )( + + + + + + + β + 1 + + + + + + + + + β + 2 + + + + + + + ),( + + + + + + + σ + 1 + 2 + + + + + γ + + + + + γ + + + + + σ + 2 + 2 + + + + + + + ) + Ι + ν + + ] + "#; + test("el", "ClearSpeak", expr, "2 επί ένα πίνακας-στήλη; γραμμή 1; κεφαλαίο ύψιλον δείκτης 1; γραμμή 2; κεφαλαίο ύψιλον δείκτης 2; κυματοειδής γραμμή; κεφαλαίο νί δείκτης, 2 νί τέλος δείκτη; ανοίγει αγκύλη; ανοίγει παρένθεση; κεφαλαίο ιότα δείκτης 2; κυκλωμένο επί, κεφαλαίο χ; κλείνει παρένθεση; 2 επί ένα πίνακας-στήλη; γραμμή 1; βήτα δείκτης 1; γραμμή 2; βήτα δείκτης 2; κόμμα; 2 επί 2 πίνακας; γραμμή 1; στήλη 1; σίγμα δείκτης 1, στο τετράγωνο, στήλη 2; γάμμα; γραμμή 2; στήλη 1; γάμμα, στήλη 2; σίγμα δείκτης 2, στο τετράγωνο; κυκλωμένο επί; κεφαλαίο ιότα δείκτης νί; κλείνει αγκύλη")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_233() -> Result<()> { // + let expr = r#" + + ( + + + + + + + σ + + 2,0 + 4 + + + + + + + γ + 0 + 2 + + + + + + 2 + γ + 0 + + + σ + + 2,0 + 2 + + + + + + + + + γ + 0 + 2 + + + + + + + σ + + 1,0 + 4 + + + + + + 2 + γ + 0 + + + σ + + 1,0 + 2 + + + + + + + + 2 + γ + 0 + + + σ + + 2,0 + 2 + + + + + + 2 + γ + 0 + + + σ + + 1,0 + 2 + + + + + + 2( + + + σ + + 1,0 + 2 + + , + σ + + 2,0 + 2 + + + + γ + 0 + 2 + + + ) + + + + + ) + "#; + test("el", "ClearSpeak", expr, "3 επί 3 πίνακας; γραμμή 1; στήλη 1; σίγμα δείκτης 2,0, στην τέταρτη δύναμη, στήλη 2; γάμμα δείκτης 0, στο τετράγωνο, στήλη 3; μείον 2, γάμμα δείκτης 0; σίγμα δείκτης 2,0, στο τετράγωνο; γραμμή 2; στήλη 1; γάμμα δείκτης 0, στο τετράγωνο, στήλη 2; σίγμα δείκτης 1,0, στην τέταρτη δύναμη, στήλη 3; μείον 2, γάμμα δείκτης 0; σίγμα δείκτης 1,0, στο τετράγωνο; γραμμή 3; στήλη 1; μείον 2, γάμμα δείκτης 0; σίγμα δείκτης 2,0, στο τετράγωνο, στήλη 2; μείον 2, γάμμα δείκτης 0; σίγμα δείκτης 1,0, στο τετράγωνο, στήλη 3; 2; ανοίγει παρένθεση; σίγμα δείκτης 1,0, στο τετράγωνο; κόμμα; σίγμα δείκτης 2,0, στο τετράγωνο; συν, γάμμα δείκτης 0, στο τετράγωνο; κλείνει παρένθεση")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_234() -> Result<()> { // same + let expr = r#" + + + + { + + Μ + + ( + + + + + Χ + + + 0 + + + + + 0 + + + Χ + + + + + ) + + [ + ( + + + + + + + σ + + 1,0 + 2 + + + + + + + γ + 0 + + + + + + + + + γ + 0 + + + + + + + σ + + 2,0 + 2 + + + + + + + ) + Ι + ν + + ] + Μ + + ( + + + + + Χ + + + 0 + + + + + 0 + + + Χ + + + + + ) + + } + + + + + "#; + test("el", "ClearSpeak", expr, "ανοίγει άγκιστρο κεφαλαίο μί δείκτης; ο 2 επί 2 διαγώνιος πίνακας; στήλη 1; κεφαλαίο χ; στήλη 2; κεφαλαίο χ; τέλος δείκτη; ανοίγει αγκύλη; 2 επί 2 πίνακας; γραμμή 1; στήλη 1; σίγμα δείκτης 1,0, στο τετράγωνο, στήλη 2; γάμμα δείκτης 0; γραμμή 2; στήλη 1; γάμμα δείκτης 0; στήλη 2; σίγμα δείκτης 2,0, στο τετράγωνο; κυκλωμένο επί; κεφαλαίο ιότα δείκτης νί; κλείνει αγκύλη; κεφαλαίο μί δείκτης; ο 2 επί 2 διαγώνιος πίνακας; στήλη 1; κεφαλαίο χ; στήλη 2; κεφαλαίο χ; τέλος δείκτη, κλείνει άγκιστρο εκθέτης συν")?; + return Ok(()); + //theodora. fails. Now reads: το σύνολο κεφαλαίο μί δείκτης; TEMP NAME του ο 2 επί 2 διαγώνιος πίνακας; στήλη 1; κεφαλαίο χ; στήλη 2; κεφαλαίο χ; τέλος δείκτη; ανοίγει αγκύλη; 2 επί 2 πίνακας; γραμμή 1; στήλη 1; σίγμα δείκτης 1,0, στο τετράγωνο, στήλη 2; γάμμα δείκτης 0; γραμμή 2; στήλη 1; γάμμα δείκτης 0; στήλη 2; σίγμα δείκτης 2,0, στο τετράγωνο; κυκλωμένο επί; κεφαλαίο ιότα δείκτης νί; κλείνει αγκύλη; κεφαλαίο μί δείκτης; TEMP NAME του ο 2 επί 2 διαγώνιος πίνακας; στήλη 1; κεφαλαίο χ; στήλη 2; κεφαλαίο χ; τέλος δείκτη, εκθέτης συν +} + +#[test] +fn uoa_corpus_235() -> Result<()> { // same + let expr = r#" + + ( + + + + + η + + + + ( + + + Μ + Α + + + Σ + 0 + + + Μ + Α + + + ) + + + + + Β + 1 + + + ( + + + Μ + Α + + + Σ + 0 + + + Μ + Α + + + ) + + + + η + + + + + + + + + + + η + + + + ( + + + Μ + Α + + + Σ + 0 + + + Μ + Α + + + ) + + + + + Β + π + + + ( + + + Μ + Α + + + Σ + 0 + + + Μ + Α + + + ) + + + + η + + + + + ) + "#; + test("el", "ClearSpeak", expr, "3 επί ένα πίνακας-στήλη; γραμμή 1; ήτα τόνος; ανοίγει παρένθεση; κεφαλαίο μί δείκτης, κεφαλαίο άλφα; κεφαλαίο σίγμα δείκτης 0; κεφαλαίο μί δείκτης, κεφαλαίο άλφα; κλείνει παρένθεση εκθέτης συν; κεφαλαίο βήτα δείκτης 1; ανοίγει παρένθεση; κεφαλαίο μί δείκτης, κεφαλαίο άλφα; κεφαλαίο σίγμα δείκτης 0; κεφαλαίο μί δείκτης, κεφαλαίο άλφα; κλείνει παρένθεση εκθέτης συν; ήτα; γραμμή 2; κατακόρυφα αποσιωπητικά; γραμμή 3; ήτα τόνος; ανοίγει παρένθεση; κεφαλαίο μί δείκτης, κεφαλαίο άλφα; κεφαλαίο σίγμα δείκτης 0; κεφαλαίο μί δείκτης, κεφαλαίο άλφα; κλείνει παρένθεση εκθέτης συν; κεφαλαίο βήτα δείκτης π; ανοίγει παρένθεση; κεφαλαίο μί δείκτης, κεφαλαίο άλφα; κεφαλαίο σίγμα δείκτης 0; κεφαλαίο μί δείκτης, κεφαλαίο άλφα; κλείνει παρένθεση εκθέτης συν; ήτα")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_236() -> Result<()> { // + let expr = r#" + + Κ=( + + + φ + 1 + + ,, + φ + + ρ( + Τ + ) + + + )( + + + + + + + 1 + + + + + λ + 1 + + + + + + + + + + + + 0 + + + + + + + + + + + + + + + + 0 + + + + + + + + 1 + + + + + λ + + ρ( + Τ + ) + + + + + + + + + + + ) + "#; + test("el", "ClearSpeak", expr, "κεφαλαίο καπα, ισούται με; ανοίγει παρένθεση; φ δείκτης 1; κόμμα; αποσιωπητικά, κόμμα; φ δείκτης, ρ του κεφαλαίο τάαφ; κλείνει παρένθεση; 3 επί 3 πίνακας; γραμμή 1; στήλη 1; το κλάσμα με αριθμητή 1; και παρονομαστή η τετραγωνική ρίζα του λάμδα δείκτης 1; στήλη 2; αποσιωπητικά, στήλη 3; 0; γραμμή 2; στήλη 1; κατακόρυφα αποσιωπητικά, στήλη 2; διαγώνια αποσιωπητικά προς τα κάτω δεξιά, στήλη 3; κατακόρυφα αποσιωπητικά; γραμμή 3; στήλη 1; 0, στήλη 2; αποσιωπητικά, στήλη 3; το κλάσμα με αριθμητή 1; και παρονομαστή η τετραγωνική ρίζα του λάμδα δείκτης, ρ του κεφαλαίο τάαφ")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_237() -> Result<()> { // same + let expr = r#" + + ( + + + + + Σ + + + + + γ + + + + + + τ(γ) + + + + + )=( + + + + + 1 + + + 1 + + + 1 + + + + + 1 + + + + + ζ + 2 + + + + + ζ + + + + + 1 + + + ζ + + + + + ζ + 2 + + + + + + + )×( + + + + + θ + + + + + + σ(θ) + + + + + + + σ + 2 + + (θ) + + + + + ) + "#; + test("el", "ClearSpeak", expr, "3 επί ένα πίνακας-στήλη; κεφαλαίο σίγμα; γάμμα; τάαφ του γάμμα; ισούται με; 3 επί 3 πίνακας; γραμμή 1; στήλη 1; 1, στήλη 2; 1, στήλη 3; 1; γραμμή 2; στήλη 1; 1, στήλη 2; ζήτα στο τετράγωνο, στήλη 3; ζήτα; γραμμή 3; στήλη 1; 1, στήλη 2; ζήτα, στήλη 3; ζήτα στο τετράγωνο; επί; 3 επί ένα πίνακας-στήλη; γραμμή 1; θήτα; γραμμή 2; σίγμα του θήτα; γραμμή 3; σίγμα στο τετράγωνο, του θήτα")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_238() -> Result<()> { // same + let expr = r#" + + Τ( + + 0, + ) + "#; + test("el", "ClearSpeak", expr, "κεφαλαίο τάαφ, ανήκει; ανοίγει παρένθεση, 0, άπειρο, κλείνει παρένθεση")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_239() -> Result<()> { // same + let expr = r#" + + ω=( + + + ω + 1 + + ,, + ω + + ν1 + + + ) + "#; + test("el", "ClearSpeak", expr, "ωμέγα ισούται με; ανοίγει παρένθεση; ωμέγα δείκτης 1; κόμμα; αποσιωπητικά, κόμμα; ωμέγα δείκτης, νί μείον 1 τέλος δείκτη; κλείνει παρένθεση")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_240() -> Result<()> { // same + let expr = r#" + + + Α + + + =Α×( + + 0, + ) + "#; + test("el", "ClearSpeak", expr, "κεφαλαίο άλφα δείκτης άπειρο; ισούται με; κεφαλαίο άλφα, επί; ανοίγει παρένθεση, 0, άπειρο, κλείνει παρένθεση")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_241() -> Result<()> { // + let expr = r#" + + + Β + χ + + ( + + 0,; + ) + "#; + test("el", "ClearSpeak", expr, "κεφαλαίο βήτα στην χ οστή δύναμη; ανοίγει παρένθεση; 0, άπειρο; ελληνικό ερωτηματικό; οι μιγαδικοί αριθμοί; κλείνει παρένθεση")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_242() -> Result<()> { // + let expr = r#" + + + + δ + + + "#; + test("el", "ClearSpeak", expr, "οι πραγματικοί αριθμοί στην δέλτα οστή δύναμη")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_243() -> Result<()> { // same + let expr = r#" + + δ\{ 0 } + "#; + test("el", "ClearSpeak", expr, "δέλτα ανήκει; στους φυσικούς αριθμούς; ανάστροφη κάθετος, το σύνολο 0")?; + return Ok(()); + //theodora. fails. Now reads: δέλτα ανήκει; οι φυσικοί αριθμοί; ανάστροφη κάθετος, το σύνολο 0 +} + +#[test] +fn uoa_corpus_244() -> Result<()> { // same + let expr = r#" + + σΩ + "#; + test("el", "ClearSpeak", expr, "σίγμα, είναι ένα υποσύνολο του; μερικό διαφορικό, κεφαλαίο ωμέγα")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_245() -> Result<()> { // + let expr = r#" + + [ + + χ + κ + + ,χ ]Κ + "#; + test("el", "ClearSpeak", expr, "το διάστημα από χ δείκτης καπα, ως χ, περιέχει χ δείκτης καπα, και χ; είναι ένα υποσύνολο του; κεφαλαίο καπα")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_246() -> Result<()> { // same + let expr = r#" + + χ + Ω + ¯ + + + "#; + test("el", "ClearSpeak", expr, "χ ανήκει, κεφαλαίο ωμέγα παύλα")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_247() -> Result<()> { // same + let expr = r#" + + + Μ + σ + + ={ + Κ,Λ } + "#; + test("el", "ClearSpeak", expr, "κεφαλαίο μί δείκτης σίγμα; ισούται με; το σύνολο κεφαλαίο καπα, κόμμα; κεφαλαίο λάμδα")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_248() -> Result<()> { // + let expr = r#" + + + Γ + + ,α + + ( + + Ω×[ + 0, ] + ) + "#; + test("el", "ClearSpeak", expr, "κεφαλαίο γάμμα υψωμένο στην άπειρο κόμμα, άλφα τέλος δύναμης; ανοίγει παρένθεση; μερικό διαφορικό, κεφαλαίο ωμέγα; επί; ανοίγει αγκύλη, 0, άπειρο, κλείνει αγκύλη; κλείνει παρένθεση")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_249() -> Result<()> { // + let expr = r#" + + χΩ + "#; + test("el", "ClearSpeak", expr, "χ ανήκει, μερικό διαφορικό, κεφαλαίο ωμέγα")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_250() -> Result<()> { // + let expr = r#" + + { + + β + σ + Κ + + :σΒ,ΚΜ } + "#; + test("el", "ClearSpeak", expr, "το σύνολο βήτα δείκτης σίγμα, στην κεφαλαίο καπα οστή δύναμη; άνω κάτω τελεία; σίγμα ανήκει, κεφαλαίο βήτα; κόμμα; κεφαλαίο καπα, ανήκει κεφαλαίο μί")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_251() -> Result<()> { // + let expr = r#" + + { + + Κ + Κ + ν + + :ν + 0,Ν+1,ΚΜ } + "#; + test("el", "ClearSpeak", expr, "το σύνολο κεφαλαίο καπα δείκτης, κεφαλαίο καπα, στην νί οστή δύναμη; άνω κάτω τελεία; νί ανήκει; αριστερή λευκή τετραγωνική αγκύλη; 0, κεφαλαίο νί, συν 1; δεξιά λευκή τετραγωνική αγκύλη; κόμμα; κεφαλαίο καπα, ανήκει κεφαλαίο μί")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_252() -> Result<()> { // same + let expr = r#" + + + τ + 0 + + [ + 0, ] + "#; + test("el", "ClearSpeak", expr, "τάαφ δείκτης 0; ανήκει; ανοίγει αγκύλη, 0, άπειρο, κλείνει αγκύλη")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_253() -> Result<()> { // same + let expr = r#" + + + υ + 0 + + + Λ + 2 + + ( + Ω + ) + "#; + test("el", "ClearSpeak", expr, "ύψιλον δείκτης 0; ανήκει; κεφαλαίο λάμδα στο τετράγωνο; του κεφαλαίο ωμέγα")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_254() -> Result<()> { // + let expr = r#" + + + φ + 0 + + + + Γ + ˙ + + + + + ( + + + Υ + 0 + + + ) + "#; + test("el", "ClearSpeak", expr, "φ δείκτης 0; ανήκει; η απειροστή δύναμη του, κεφαλαίο γάμμα τελεία; του; ανοίγει παρένθεση; κεφαλαίο ύψιλον δείκτης 0; κλείνει παρένθεση")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_255() -> Result<()> { // + let expr = r#" + + + Η + 2 + + ( + + + ε + + γ×τ + + , + Ω + + + + ) + "#; + test("el", "ClearSpeak", expr, "κεφαλαίο ήτα στο τετράγωνο; ανοίγει παρένθεση έψιλον υψωμένο στην μείον γάμμα, επί τάαφ τέλος δύναμης, κόμμα, κεφαλαίο ωμέγα δείκτης άπειρο; κλείνει παρένθεση")?; + return Ok(()); + //theodora. fails with current rules. Noa reads: κεφαλαίο ήτα στο τετράγωνο; το διάστημα από έψιλον υψωμένο στην μείον γάμμα, επί τάαφ τέλος δύναμης ως κεφαλαίο ωμέγα δείκτης άπειρο; δεν περιέχει έψιλον υψωμένο στην μείον γάμμα, επί τάαφ τέλος δύναμης ή κεφαλαίο ωμέγα δείκτης άπειρο +} + +#[test] +fn uoa_corpus_256() -> Result<()> { // + let expr = r#" + + + Ω + ρ + + :={ + χΩ: + ρ + 2 + + <| χ |<2ρ,ρ>0 } + "#; + test("el", "ClearSpeak", expr, "κεφαλαίο ωμέγα στην ρ οστή δύναμη; άνω κάτω τελεία; ισούται με; το σύνολο χ ανήκει, κεφαλαίο ωμέγα; άνω κάτω τελεία; ρ προς 2, είναι μικρότερο από; απόλυτη τιμή του χ; είναι μικρότερο από, 2 ρ; κόμμα; ρ είναι μεγαλύτερο από 0")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_257() -> Result<()> { // + let expr = r#" + + Κ={ + χ=( + + + χ + 1 + + , + χ + 2 + + + ) + + 2 + + :ρ>0,0<ω< + ω + 0 + + } + "#; + test("el", "ClearSpeak", expr, "κεφαλαίο καπα, ισούται με; το σύνολο όλων των χ ισούται με; ανοίγει παρένθεση; χ δείκτης 1; κόμμα; χ δείκτης 2; κλείνει παρένθεση; ανήκει r 2 τέτοια ώστε ρ είναι μεγαλύτερο από; 0,0 είναι μικρότερο από, ωμέγα, είναι μικρότερο από; ωμέγα δείκτης 0")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_258() -> Result<()> { // + let expr = r#" + + Α={ + τ[ + 0,Τ ]:| + + υ + ˙ + + ( + τ + ) |1 } + "#; + test("el", "ClearSpeak", expr, "κεφαλαίο άλφα, ισούται με; το σύνολο όλων των τάαφ ανήκει; ανοίγει αγκύλη; 0, κεφαλαίο τάαφ; κλείνει αγκύλη τέτοια ώστε απόλυτη τιμή του ύψιλον τελεία; του τάαφ; είναι μεγαλύτερο από ή ίσο με 1")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_259() -> Result<()> { // same + let expr = r#" + + η:( + + 0,1 + )[ + 0, ) + "#; + test("el", "ClearSpeak", expr, "ήτα άνω κάτω τελεία; 0,1 βέλος προς τα δεξιά; ανοίγει αγκύλη, 0, άπειρο, κλείνει παρένθεση")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_260() -> Result<()> { // same + let expr = r#" + + φ:( + + 0,1 + )×( + + 0, + )×( + + 0, + )×( + + ,0 + )[ + 0, ) + "#; + test("el", "ClearSpeak", expr, "φ άνω κάτω τελεία; 0,1 επί; ανοίγει παρένθεση, 0, άπειρο, κλείνει παρένθεση; επί; ανοίγει παρένθεση, 0, άπειρο, κλείνει παρένθεση; επί; ανοίγει παρένθεση; μείον άπειρο;0; κλείνει παρένθεση; βέλος προς τα δεξιά; ανοίγει αγκύλη, 0, άπειρο, κλείνει παρένθεση")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_261() -> Result<()> { // same + let expr = r#" + + + Γ + 2 + + [ + 0,1 ] + "#; + test("el", "ClearSpeak", expr, "κεφαλαίο γάμμα στο τετράγωνο; του 0,1κεφαλαίο γάμμα στο τετράγωνο; του 0,1")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_262() -> Result<()> { // + let expr = r#" + + Κ( + ρ + )={ + υΚ:| + υ |<ρ } + "#; + test("el", "ClearSpeak", expr, "κεφαλαίο καπα, του ρ; ισούται με; το σύνολο όλων των ύψιλον ανήκει, κεφαλαίο καπα τέτοια ώστε απόλυτη τιμή του νόρμα του ύψιλον; είναι μικρότερο από ρ")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_263() -> Result<()> { // + let expr = r#" + + χ + + ν + + + "#; + test("el", "ClearSpeak", expr, "χ ανήκει; στους πραγματικούς αριθμοί στην νί οστή δύναμη")?; + return Ok(()); + //theodora. fails with current rules. Now reads:χ ανήκει; οι πραγματικοί αριθμοί στην νί οστή δύναμη +} + +#[test] +fn uoa_corpus_264() -> Result<()> { // same + let expr = r#" + + α[ + 0, + π + + + 1 ) + "#; + test("el", "ClearSpeak", expr, "άλφα ανήκει; ανοίγει αγκύλη; 0; π εκθέτης μείον; μείον 1; κλείνει παρένθεση")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_265() -> Result<()> { // same + let expr = r#" + + υ + + Κ( + + + ρ + 2 + + + ) + ¯ + + \Κ( + + + ρ + 1 + + + ) + "#; + test("el", "ClearSpeak", expr, "ύψιλον ανήκει; παράσταση κεφαλαίο καπα, του; ανοίγει παρένθεση, ρ δείκτης 2; κλείνει παρένθεση με γραμμή από πάνω; ανάστροφη κάθετος; κεφαλαίο καπα, του; ανοίγει παρένθεση, ρ δείκτης 1; κλείνει παρένθεση")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_266() -> Result<()> { // + let expr = r#" + + + Κ + β + + ( + ρ + )={ + υ + Κ + β + + : υ <ρ } + "#; + test("el", "ClearSpeak", expr, "η βήτα δύναμη του, κεφαλαίο καπα; του ρ; ισούται με; το σύνολο όλων των ύψιλον ανήκει, κεφαλαίο καπα στην βήτα οστή δύναμη τέτοια ώστε νόρμα του ύψιλον; είναι μικρότερο από ρ")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_267() -> Result<()> { // same + let expr = r#" + + 0 + Ω + 1 + + + + Ω + ¯ + + + 1 + + + Ω + 2 + + + "#; + test("el", "ClearSpeak", expr, "0 ανήκει; κεφαλαίο ωμέγα δείκτης 1; είναι ένα υποσύνολο του; κεφαλαίο ωμέγα παύλα, δείκτης 1; είναι ένα υποσύνολο του; κεφαλαίο ωμέγα δείκτης 2")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_268() -> Result<()> { // same + let expr = r#" + + + υ + * + + Κ + "#; + test("el", "ClearSpeak", expr, "ύψιλον αστερίσκος; ανήκει, κεφαλαίο καπα")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_269() -> Result<()> { // same + let expr = r#" + + Γ( + + 0,σ + )0 + "#; + test("el", "ClearSpeak", expr, "κεφαλαίο γάμμα; ανοίγει παρένθεση, 0, σίγμα, κλείνει παρένθεση; είναι ταυτόσημο με 0")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_270() -> Result<()> { // same + let expr = r#" + + + Υ + 1 + + ( + + + Χ + + β1 + + , + Σ + + 1,1 + + + ) + "#; + test("el", "ClearSpeak", expr, "κεφαλαίο ύψιλον δείκτης 1; κυματοειδής γραμμή; ανοίγει παρένθεση; κεφαλαίο χ δείκτης, βήτα 1 τέλος δείκτη; κόμμα; κεφαλαίο σίγμα δείκτης 1,1; κλείνει παρένθεση")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_271() -> Result<()> { // + let expr = r#" + + ( + + + Υ + 1 + + , + Υ + 2 + + + )= + Σ + + 1,2 + + 0 + "#; + test("el", "ClearSpeak", expr, "ανοίγει παρένθεση κεφαλαίο ύψιλον δείκτης 1, κόμμα, ύψιλον δείκτης 2; κλείνει παρένθεση; ισούται με; κεφαλαίο σίγμα δείκτης 1,2; είναι διάφορο του 0")?; + return Ok(()); + //theodora. fails. recognizes as a set. Now reads: το διάστημα από κεφαλαίο ύψιλον δείκτης 1, ως κεφαλαίο ύψιλον δείκτης 2; δεν περιέχει κεφαλαίο ύψιλον δείκτης 1, ή κεφαλαίο ύψιλον δείκτης 2; ισούται με; κεφαλαίο σίγμα δείκτης 1,2; είναι διάφορο του 0 +} + +#[test] +fn uoa_corpus_272() -> Result<()> { // + let expr = r#" + + + Ω + ¯ + + = + + + + ΚΜ + + + Κ + ¯ + + + + "#; + test("el", "ClearSpeak", expr, "κεφαλαίο ωμέγα παύλα; ισούται με; ένωση για κεφαλαίο καπα, ανήκει κεφαλαίο μί; κεφαλαίο καπα παύλα")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_273() -> Result<()> { // same + let expr = r#" + + max{ + 1,2,3 } + "#; + test("el", "ClearSpeak", expr, "μέγιστο του συνόλου 1,2,3")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_274() -> Result<()> { // same + let expr = r#" + + sup{ + 1,2,3 }=3 + "#; + test("el", "ClearSpeak", expr, "σουπρέμουμ του συνόλου 1,2,3; ισούται με 3")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_275() -> Result<()> { // same + let expr = r#" + + ΑΒ + "#; + test("el", "ClearSpeak", expr, "κεφαλαίο άλφα, είναι ένα υποσύνολο του; κεφαλαίο βήτα")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_276() -> Result<()> { // same + let expr = r#" + + inf{ + 1,2,3 }=1 + "#; + test("el", "ClearSpeak", expr, "ινφίμουμ του συνόλου 1,2,3; ισούται με 1")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_277() -> Result<()> { // same + let expr = r#" + + + + + α + + Α + + "#; + test("el", "ClearSpeak", expr, "ένωση για άλφα, κεφαλαίο άλφα")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_278() -> Result<()> { // same + let expr = r#" + + + + + α + + Α + + "#; + test("el", "ClearSpeak", expr, "γινόμενο για άλφα του; κεφαλαίο άλφα")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_279() -> Result<()> { // same + let expr = r#" + + αβ + "#; + test("el", "ClearSpeak", expr, "άλφα ένωση βήτα")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_280() -> Result<()> { // same + let expr = r#" + + Α= + "#; + test("el", "ClearSpeak", expr, "κεφαλαίο άλφα, ισούται με, κενό σύνολο")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_281() -> Result<()> { // same + let expr = r#" + + αβ + "#; + test("el", "ClearSpeak", expr, "άλφα ένωση βήτα")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_282() -> Result<()> { // same + let expr = r#" + + cov( + + + β + 1 + + , + β + 2 + + + ) + "#; + test("el", "ClearSpeak", expr, "cov; ανοίγει παρένθεση; βήτα δείκτης 1; κόμμα; βήτα δείκτης 2; κλείνει παρένθεση")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_283() -> Result<()> { // same + let expr = r#"Var(β1)"#; + test("el", "ClearSpeak", expr, "κεφαλαίο Var του; ανοίγει παρένθεση; βήτα δείκτης 1; κλείνει παρένθεση")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_284() -> Result<()> { // + let expr = r#" + + χΧ:ψΨ:χ=ψ + "#; + test("el", "ClearSpeak", expr, "για κάθε, χ ανήκει κεφαλαίο χ; άνω κάτω τελεία; υπάρχει, ψ ανήκει κεφαλαίο ψ; άνω κάτω τελεία, χ ισούται με ψ")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_285() -> Result<()> { // + let expr = r#" + + + Γ + 0 + 2 + + [ + 0,1 ]={ + υ + Γ + 2 + + [ + 0,1 ]:υ( + 0 + )= + υ + + + ( + 1 + )=0 } + "#; + test("el", "ClearSpeak", expr, "κεφαλαίο γάμμα δείκτης 0, στο τετράγωνο; του 0,1; ισούται με; το σύνολο όλων των ύψιλον ανήκει; κεφαλαίο γάμμα στο τετράγωνο; του 0,1 τέτοια ώστε ύψιλον του 0, ισούται με, ύψιλον τόνος; του 1; ισούται με 0")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_286() -> Result<()> { // + let expr = r#" + + max{ + + 1 + 5 + + + χ + 2 + + + + 1 + + + χ + + + + : + 1 + 2 + + ρτ( + + 3 + τ + 2 + + + )χρτ( + + 2τ + ) } + "#; + test("el", "ClearSpeak", expr, "μέγιστο του; συνόλου όλων των 1 πέμπτο χ στο τετράγωνο; συν; το κλάσμα με αριθμητή 1; και παρονομαστή η τετραγωνική ρίζα του χ; τέτοια ώστε 1 δεύτερο ρ τάαφ; ανοίγει παρένθεση; 3 μείον, τάαφ στο τετράγωνο; κλείνει παρένθεση; είναι μικρότερο από ή ίσο με χ, είναι μικρότερο από ή ίσο με; ρ τάαφ; ανοίγει παρένθεση; 2 μείον τάαφ; κλείνει παρένθεση")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_287() -> Result<()> { // + let expr = r#" + + min{ + + 1 + 5 + + + χ + 2 + + + + 1 + + + χ + + + + : + 1 + 2 + + ρτ( + + 3 + τ + 2 + + + )χρτ( + + 2τ + ) } + "#; + test("el", "ClearSpeak", expr, "ελάχιστο του; συνόλου όλων των 1 πέμπτο χ στο τετράγωνο; συν; το κλάσμα με αριθμητή 1; και παρονομαστή η τετραγωνική ρίζα του χ; τέτοια ώστε 1 δεύτερο ρ τάαφ; ανοίγει παρένθεση; 3 μείον, τάαφ στο τετράγωνο; κλείνει παρένθεση; είναι μικρότερο από ή ίσο με χ, είναι μικρότερο από ή ίσο με; ρ τάαφ; ανοίγει παρένθεση; 2 μείον τάαφ; κλείνει παρένθεση")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_288() -> Result<()> { // + let expr = r#" + + + υ + + + τ + ξ + + + + ={ + + + + + ξ + + + υ + 1 + + + + + τ + ξ + + + + ,, + + + + ξ + + + υ + σ + + + + + τ + ξ + + + + } + "#; + test("el", "ClearSpeak", expr, "ύψιλον δείκτης, τάαφ στην ξ οστή δύναμη τέλος δείκτη; ισούται με; το σύνολο το κλάσμα με αριθμητή; μερικό διαφορικό στην ξ οστή δύναμη; ύψιλον δείκτης 1; και παρονομαστή μερικό διαφορικό; τάαφ στην ξ οστή δύναμη; κόμμα; αποσιωπητικά, κόμμα; το κλάσμα με αριθμητή; μερικό διαφορικό στην ξ οστή δύναμη; ύψιλον δείκτης σίγμα; και παρονομαστή μερικό διαφορικό; τάαφ στην ξ οστή δύναμη")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_289() -> Result<()> { // + let expr = r#" + + inf{ + + + β + + + Η + β + λ + + ( + Ω + ) + + :β + Η + β + λ + + ( + Ω + ),β|Γ=υ } + "#; + test("el", "ClearSpeak", expr, "ινφίμουμ του; συνόλου νόρμα του βήτα δείκτης; η λάμδα δύναμη του, κεφαλαίο ήτα δείκτης βήτα; του κεφαλαίο ωμέγα τέλος δείκτη; άνω κάτω τελεία; βήτα ανήκει; η λάμδα δύναμη του, κεφαλαίο ήτα δείκτης βήτα; του κεφαλαίο ωμέγα; κόμμα; βήτα, κάθετη γραμμή, κεφαλαίο γάμμα; ισούται με, ύψιλον")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_290() -> Result<()> { // + let expr = r#" + + + Β + + + δ + 0 + + 1,η + + + λ + 2 + + 2μ,0 + + ( + + + ε + + γτ + + , + Κ + + + + ) + Β + + + δ + 1 + + ,η + + + λ + 2 + + 2μ,0 + + ( + + + ε + + γτ + + , + Κ + + + + ) + "#; + test("el", "ClearSpeak", expr, "κεφαλαίο βήτα δείκτης; δέλτα δείκτης 0; μείον 1, ήτα τέλος δείκτη, υψωμένο στην λάμδα δείκτης 2; μείον, 2 μί,0 τέλος δύναμης; ανοίγει παρένθεση έψιλον υψωμένο στην μείον γάμμα, τάαφ τέλος δύναμης , κόμμα, κεφαλαίο καπα δείκτης άπειρο; κλείνει παρένθεση; είναι ένα υποσύνολο του; κεφαλαίο βήτα δείκτης; δέλτα δείκτης 1; κόμμα, ήτα τέλος δείκτη, υψωμένο στην λάμδα δείκτης 2; μείον, 2 μί,0 τέλος δύναμης; ανοίγει παρένθεση έψιλον υψωμένο στην μείον γάμμα, τάαφ τέλος δύναμης, κόμμα, κεφαλαίο καπα δείκτης άπειρο; κλείνει παρένθεση")?; + return Ok(()); + //theodora. fails: κεφαλαίο βήτα δείκτης; δέλτα δείκτης 0; μείον 1, ήτα τέλος δείκτη, υψωμένο στην λάμδα δείκτης 2; μείον, 2 μί,0 τέλος δύναμης; το διάστημα από έψιλον υψωμένο στην μείον γάμμα, τάαφ τέλος δύναμης ως κεφαλαίο καπα δείκτης άπειρο; δεν περιέχει έψιλον υψωμένο στην μείον γάμμα, τάαφ τέλος δύναμης ή κεφαλαίο καπα δείκτης άπειρο; είναι ένα υποσύνολο του; κεφαλαίο βήτα δείκτης; δέλτα δείκτης 1; κόμμα, ήτα τέλος δείκτη, υψωμένο στην λάμδα δείκτης 2; μείον, 2 μί,0 τέλος δύναμης; το διάστημα από έψιλον υψωμένο στην μείον γάμμα, τάαφ τέλος δύναμης ως κεφαλαίο καπα δείκτης άπειρο; δεν περιέχει έψιλον υψωμένο στην μείον γάμμα, τάαφ τέλος δύναμης ή κεφαλαίο καπα δείκτης άπειρο +} + +#[test] +fn uoa_corpus_291() -> Result<()> { // + let expr = r#" + + υ( + + ·,τ + ) + Β + μ + + 2μ + + ( + Κ + ) + Β + β + + 2μ + + ( + Κ + ) + Β + + β+ε + + 2μ + + ( + Κ + ) + Η + + β+ε + + 2μ + + ( + Κ + ) + "#; + test("el", "ClearSpeak", expr, "ύψιλον; ανοίγει παρένθεση; φορές κόμμα, τάαφ; κλείνει παρένθεση; ανήκει; η 2 μί δύναμη του, κεφαλαίο βήτα δείκτης μί; του κεφαλαίο καπα; είναι ένα υποσύνολο του; η 2 μί δύναμη του, κεφαλαίο βήτα δείκτης βήτα; του κεφαλαίο καπα; είναι ένα υποσύνολο του; η 2 μί δύναμη του, κεφαλαίο βήτα δείκτης, βήτα συν έψιλον τέλος δείκτη; του κεφαλαίο καπα; είναι ταυτόσημο με; η 2 μί δύναμη του, κεφαλαίο ήτα δείκτης, βήτα συν έψιλον τέλος δείκτη; του κεφαλαίο καπα")?; + return Ok(()); + //theodora. fails with current rules. ύψιλον; ανοίγει παρένθεση; τελεία κόμμα, τάαφ; κλείνει παρένθεση; ανήκει; η 2 μί δύναμη του, κεφαλαίο βήτα δείκτης μί; του κεφαλαίο καπα; είναι ένα υποσύνολο του; η 2 μί δύναμη του, κεφαλαίο βήτα δείκτης βήτα; του κεφαλαίο καπα; είναι ένα υποσύνολο του; η 2 μί δύναμη του, κεφαλαίο βήτα δείκτης, βήτα συν έψιλον τέλος δείκτη; του κεφαλαίο καπα; είναι ταυτόσημο με; η 2 μί δύναμη του, κεφαλαίο ήτα δείκτης, βήτα συν έψιλον τέλος δείκτη; του κεφαλαίο καπα + } + +#[test] +fn uoa_corpus_292() -> Result<()> { // + let expr = r#" + + tanΑ= + + sinΑ + + cosΑ + + + "#; + test("el", "ClearSpeak", expr, "εφαπτομένη, κεφαλαίο άλφα; ισούται με; ημίτονο κεφαλαίο άλφα προς συνημίτονο, κεφαλαίο άλφα")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_293() -> Result<()> { // + let expr = r#" + + cotΑ= + 1 + + tanΑ + + + "#; + test("el", "ClearSpeak", expr, "συνεφαπτομένη, κεφαλαίο άλφα; ισούται με; 1 προς εφαπτομένη, κεφαλαίο άλφα")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_294() -> Result<()> { // + let expr = r#" + + secΑ= + 1 + + cosΑ + + + "#; + test("el", "ClearSpeak", expr, "τέμνουσα κεφαλαίο άλφα; ισούται με; 1 προς συνημίτονο, κεφαλαίο άλφα")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_295() -> Result<()> { // + let expr = r#" + + cscΑ= + 1 + + sinΑ + + + "#; + test("el", "ClearSpeak", expr, "συντέμνουσα, κεφαλαίο άλφα; ισούται με; 1 προς ημίτονο κεφαλαίο άλφα")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_296() -> Result<()> { // same + let expr = r#" + + + + sec + 2 + + Α + + tan + 2 + + Α=1 + "#; + test("el", "ClearSpeak", expr, "τέμνουσα στο τετράγωνο, του κεφαλαίο άλφα; μείον; εφαπτομένη στο τετράγωνο; του κεφαλαίο άλφα; ισούται με 1")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_297() -> Result<()> { // + let expr = r#" + + tan(Α)=tanΑ + "#; + test("el", "ClearSpeak", expr, "εφαπτομένη του, μείον κεφαλαίο άλφα; ισούται με; μείον εφαπτομένη, κεφαλαίο άλφα")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_298() -> Result<()> { // + let expr = r#" + + cos(Α)=cosΑ + "#; + test("el", "ClearSpeak", expr, "συνημίτονο του, μείον κεφαλαίο άλφα; ισούται με; συνημίτονο, κεφαλαίο άλφα")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_299() -> Result<()> { // + let expr = r#" + + sin2Α=2sinΑcosΑ + "#; + test("el", "ClearSpeak", expr, "ημίτονο του, 2 κεφαλαίο άλφα; ισούται με; 2, ημίτονο κεφαλαίο άλφα; συνημίτονο, κεφαλαίο άλφα")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_300() -> Result<()> { // + let expr = r#" + + + + cos2Α= + cos + 2 + + Α + sin + 2 + + Α + + + + + =12 + sin + 2 + + Α=2 + cos + 2 + + Α1 + + + + + "#; + test("el", "ClearSpeak", expr, "2 σειρές; σειρά 1; συνημίτονο του, 2 κεφαλαίο άλφα; ισούται με; συνημίτονο στο τετράγωνο; του κεφαλαίο άλφα; μείον; ημίτονο στο τετράγωνο, του κεφαλαίο άλφα; σειρά 2; ισούται με; 1 μείον; 2; ημίτονο στο τετράγωνο, του κεφαλαίο άλφα; ισούται με; 2; συνημίτονο στο τετράγωνο; του κεφαλαίο άλφα; μείον 1")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_301() -> Result<()> { // + let expr = r#" + + sin3Α=3sinΑ4 + + sin + 3 + + Α + "#; + test("el", "ClearSpeak", expr, "ημίτονο του, 3 κεφαλαίο άλφα; ισούται με; 3, ημίτονο κεφαλαίο άλφα; μείον; 4, ημίτονο στον κύβο, του κεφαλαίο άλφα")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_302() -> Result<()> { // same + let expr = r#" + + + + sin + 2 + + Α= + 1 + 2 + + + 1 + 2 + + cos2Α + "#; + test("el", "ClearSpeak", expr, "ημίτονο στο τετράγωνο, του κεφαλαίο άλφα; ισούται με; 1 δεύτερο μείον; 1 δεύτερο; συνημίτονο του, 2 κεφαλαίο άλφα")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_303() -> Result<()> { // same + let expr = r#" + + + + sin + 4 + + Α= + 3 + 8 + + + 1 + 2 + + cos2Α+ + 1 + 8 + + cos4Α + "#; + test("el", "ClearSpeak", expr, "η τέταρτη δύναμη του, ημίτονο; του κεφαλαίο άλφα; ισούται με; 3 όγδοα μείον; 1 δεύτερο; συνημίτονο του, 2 κεφαλαίο άλφα; συν; 1 όγδοο; συνημίτονο του, 4 κεφαλαίο άλφα")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_304() -> Result<()> { // + let expr = r#" + + + + cos + 5 + + Α= + 5 + 8 + + cosΑ+ + 5 + + 16 + + cos3Α+ + 1 + + 16 + + cos5Α + "#; + test("el", "ClearSpeak", expr, "η πέμπτη δύναμη του, συνημίτονο; του κεφαλαίο άλφα; ισούται με; 5 όγδοα, συνημίτονο, κεφαλαίο άλφα; συν; 5 προς 16; συνημίτονο του, 3 κεφαλαίο άλφα; συν; 1 προς 16; συνημίτονο του, 5 κεφαλαίο άλφα")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_305() -> Result<()> { // + let expr = r#" + + sinΑ+sinΒ=2sin + 1 + 2 + + ( + + Α+Β + )cos + 1 + 2 + + ( + + ΑΒ + ) + "#; + test("el", "ClearSpeak", expr, "ημίτονο κεφαλαίο άλφα; συν, ημίτονο κεφαλαίο βήτα; ισούται με; 2, ημίτονο 1 δεύτερο; ανοίγει παρένθεση; κεφαλαίο άλφα, συν κεφαλαίο βήτα; κλείνει παρένθεση; συνημίτονο, 1 δεύτερο; ανοίγει παρένθεση; κεφαλαίο άλφα, μείον κεφαλαίο βήτα; κλείνει παρένθεση")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_306() -> Result<()> { // + let expr = r#" + + + + cos + + 1 + + ( + + χ + )=π + + cos + + 1 + + χ + "#; + test("el", "ClearSpeak", expr, "αντίστροφη συνημίτονο, του μείον χ; ισούται με; π μείον, αντίστροφη συνημίτονο, του χ")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_307() -> Result<()> { // same + let expr = r#" + + cos( + + χ×ψ + )+ + + tan + 2 + + χ+ψ + "#; + test("el", "ClearSpeak", expr, "συνημίτονο του; ανοίγει παρένθεση, χ επί ψ, κλείνει παρένθεση; συν, εφαπτομένη στο τετράγωνο; του χ; συν ψ")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_308() -> Result<()> { // same + let expr = r#" + + cos( + + χ×ψ + )+ + + tan + 2 + + ( + + χ+ψ + ) + "#; + test("el", "ClearSpeak", expr, "συνημίτονο του; ανοίγει παρένθεση, χ επί ψ, κλείνει παρένθεση; συν; εφαπτομένη στο τετράγωνο; του; ανοίγει παρένθεση, χ συν ψ, κλείνει παρένθεση")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_309() -> Result<()> { // + let expr = r#" + + cosχ×ψ+ + + tan + 2 + + χ+ψ + "#; + test("el", "ClearSpeak", expr, "συνημίτονο, χ, επί ψ; συν, εφαπτομένη στο τετράγωνο; του χ; συν ψ")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_310() -> Result<()> { // + let expr = r#" + + cosχ×ψ+ + + tan + 2 + + ( + + χ+ψ + ) + "#; + test("el", "ClearSpeak", expr, "συνημίτονο, χ, επί ψ; συν; εφαπτομένη στο τετράγωνο; του; ανοίγει παρένθεση, χ συν ψ, κλείνει παρένθεση")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_311() -> Result<()> { // same + let expr = r#" + + tan + + ( + + χ+2×ψ + ) + 2 + + + "#; + test("el", "ClearSpeak", expr, "εφαπτομένη του; ανοίγει παρένθεση; χ συν 2 επί ψ; κλείνει παρένθεση στο τετράγωνο")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_312() -> Result<()> { // + let expr = r#" + + + + sin + 2 + + (χ+ψ)+cosχ+ + ψ + 2 + + + "#; + test("el", "ClearSpeak", expr, "ημίτονο στο τετράγωνο, του; ανοίγει παρένθεση, χ συν ψ, κλείνει παρένθεση; συν συνημίτονο, χ, συν ψ στο τετράγωνο")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_313() -> Result<()> { // same + let expr = r#" + + cos( + + xψ + )+ + + tan + 2 + + x+ψ + "#; + test("el", "ClearSpeak", expr, "συνημίτονο του; ανοίγει παρένθεση, x ψ, κλείνει παρένθεση; συν, εφαπτομένη στο τετράγωνο; του x; συν ψ")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_314() -> Result<()> { // same + let expr = r#" + + cos( + + xψ + )+ + + tan + 2 + + ( + + χ+y + ) + "#; + test("el", "ClearSpeak", expr, "συνημίτονο του; ανοίγει παρένθεση, x ψ, κλείνει παρένθεση; συν; εφαπτομένη στο τετράγωνο; του; ανοίγει παρένθεση, χ συν y, κλείνει παρένθεση")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_315() -> Result<()> { // + let expr = r#" + + cosχy+ + + tan + 2 + + χ+y + "#; + test("el", "ClearSpeak", expr, "συνημίτονο, χ y; συν, εφαπτομένη στο τετράγωνο; του χ; συν y")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_316() -> Result<()> { // + let expr = r#" + + cosχy+ + + tan + 2 + + ( + + x+ψ + ) + "#; + test("el", "ClearSpeak", expr, "συνημίτονο, χ y; συν; εφαπτομένη στο τετράγωνο; του; ανοίγει παρένθεση, x συν ψ, κλείνει παρένθεση")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_317() -> Result<()> { // same + let expr = r#" + + + + cosh + 2 + + χ + + sinh + 2 + + χ=1 + "#; + test("el", "ClearSpeak", expr, "υπερβολικό συνημίτονο στο τετράγωνο; του χ; μείον; υπερβολικό ημίτονο στο τετράγωνο; του χ; ισούται με 1")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_318() -> Result<()> { // same + let expr = r#" + + + + sin + 2 + + χ+ + + cos + 2 + + χ=1 + "#; + test("el", "ClearSpeak", expr, "ημίτονο στο τετράγωνο, του χ; συν, συνημίτονο στο τετράγωνο; του χ; ισούται με 1")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_319() -> Result<()> { // + let expr = r#" + + + + sin + + 1 + + χsin + χ + + 1 + + + "#; + test("el", "ClearSpeak", expr, "αντίστροφη ημίτονο, του χ; είναι διάφορο του; ημίτονο του, χ στην μείον 1 δύναμη")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_320() -> Result<()> { // + let expr = r#" + + cos( + + χ+ψ + )=cosχcosψsinχsinψ + "#; + test("el", "ClearSpeak", expr, "συνημίτονο του; ανοίγει παρένθεση, χ συν ψ, κλείνει παρένθεση; ισούται με; συνημίτονο, χ, φορές, συνημίτονο, ψ; μείον; ημίτονο χ, φορές, ημίτονο ψ")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_321() -> Result<()> { // + let expr = r#" + + cos2χ= + + cos + 2 + + χ + + sin + 2 + + χ + "#; + test("el", "ClearSpeak", expr, "συνημίτονο, 2, φορές χ; ισούται με; συνημίτονο στο τετράγωνο; του χ; μείον, ημίτονο στο τετράγωνο, του χ")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_322() -> Result<()> { // + let expr = r#"sinνΑ=sinΑ{(2cosΑ)ν1(ν21)(2cosΑ)ν3+(ν32)(2cosΑ)ν5}"#; + test("el", "ClearSpeak", expr, "ημίτονο του, νί κεφαλαίο άλφα; ισούται με; ημίτονο κεφαλαίο άλφα; ανοίγει άγκιστρο; ανοίγει παρένθεση; 2, συνημίτονο, κεφαλαίο άλφα; κλείνει παρένθεση υψωμένο στην νί μείον 1 τέλος δύναμης; μείον; διωνυμικό νί μείον 2 ανά 1; ανοίγει παρένθεση; 2, συνημίτονο, κεφαλαίο άλφα; κλείνει παρένθεση υψωμένο στην νί μείον 3 τέλος δύναμης; συν; διωνυμικό νί μείον 3 ανά 2; ανοίγει παρένθεση; 2, συνημίτονο, κεφαλαίο άλφα; κλείνει παρένθεση υψωμένο στην νί μείον 5 τέλος δύναμης; μείον αποσιωπητικά; κλείνει άγκιστρο")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_323() -> Result<()> { // + let expr = r#" + + +cosνΑ += +12 +{ + +(2cosΑ)ν + +ν1 +(2cosΑ)ν2 ++ +ν2 +( +ν31 +) +(2cosΑ)ν4 + + +ν3 +( +ν42 +) +(2cosΑ)ν6 ++ + +} + + +"#; + test("el", "ClearSpeak", expr, "συνημίτονο του, νί κεφαλαίο άλφα; ισούται με; 1 δεύτερο; ανοίγει άγκιστρο; ανοίγει παρένθεση; 2, συνημίτονο, κεφαλαίο άλφα; κλείνει παρένθεση στην νί οστή δύναμη; μείον; νί προς 1; ανοίγει παρένθεση; 2, συνημίτονο, κεφαλαίο άλφα; κλείνει παρένθεση υψωμένο στην νί μείον 2 τέλος δύναμης; συν; νί προς 2, διωνυμικό νί μείον 3 ανά 1; ανοίγει παρένθεση; 2, συνημίτονο, κεφαλαίο άλφα; κλείνει παρένθεση υψωμένο στην νί μείον 4 τέλος δύναμης; μείον; νί προς 3, διωνυμικό νί μείον 4 ανά 2; ανοίγει παρένθεση; 2, συνημίτονο, κεφαλαίο άλφα; κλείνει παρένθεση υψωμένο στην νί μείον 6 τέλος δύναμης; συν αποσιωπητικά; κλείνει άγκιστρο")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_324() -> Result<()> { // + let expr = r#" + + +sin2ν1Α += + +(1)ν1 +22ν2 + +{ + +sin(2ν1)Α + +( +2ν11 +) +sin(2ν3)Α + ++ +(1)ν1 +( +2ν1ν1 +) +sinΑ + +} + + +"#; + test("el", "ClearSpeak", expr, "η 2 νί, μείον 1 δύναμη του, ημίτονο; του κεφαλαίο άλφα; ισούται με; το κλάσμα με αριθμητή; ανοίγει παρένθεση, μείον 1, κλείνει παρένθεση υψωμένο στην νί μείον 1 τέλος δύναμης; και παρονομαστή 2 υψωμένο στην 2 νί, μείον 2 τέλος δύναμης; ανοίγει άγκιστρο; ημίτονο του; ανοίγει παρένθεση; 2 νί, μείον 1; κλείνει παρένθεση; κεφαλαίο άλφα; μείον; διωνυμικό 2 νί, μείον 1 ανά 1; ημίτονο του; ανοίγει παρένθεση; 2 νί, μείον 3; κλείνει παρένθεση; κεφαλαίο άλφα; συν; αποσιωπητικά; ανοίγει παρένθεση, μείον 1, κλείνει παρένθεση υψωμένο στην νί μείον 1 τέλος δύναμης; διωνυμικό 2 νί, μείον 1 ανά νί μείον 1 τέλος διωνυμικού; ημίτονο κεφαλαίο άλφα; κλείνει άγκιστρο")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_325() -> Result<()> { // + let expr = r#" + + +cos2ν1Α += + +1 +22ν2 + +{ + +cos(2ν1)Α ++ +( +2ν11 +) +cos(2ν3)Α + +++ +( +2ν1ν1 +) +cosΑ + +} + + +"#; + test("el", "ClearSpeak", expr, "η 2 νί, μείον 1 δύναμη του, συνημίτονο; του κεφαλαίο άλφα; ισούται με; το κλάσμα με αριθμητή 1; και παρονομαστή 2 υψωμένο στην 2 νί, μείον 2 τέλος δύναμης; ανοίγει άγκιστρο; συνημίτονο του; ανοίγει παρένθεση; 2 νί, μείον 1; κλείνει παρένθεση; κεφαλαίο άλφα; συν; διωνυμικό 2 νί, μείον 1 ανά 1; συνημίτονο του; ανοίγει παρένθεση; 2 νί, μείον 3; κλείνει παρένθεση; κεφαλαίο άλφα; συν αποσιωπητικά, συν; διωνυμικό 2 νί, μείον 1 ανά νί μείον 1 τέλος διωνυμικού; συνημίτονο, κεφαλαίο άλφα; κλείνει άγκιστρο")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_326() -> Result<()> { // + let expr = r#" + + coshχ= + + + e + χ + + + + e + + χ + + + 2 + + + "#; + test("el", "ClearSpeak", expr, "υπερβολικό συνημίτονο, του χ; ισούται με; το κλάσμα με αριθμητή; e στην χ οστή δύναμη, συν, e υψωμένο στην μείον χ τέλος δύναμης; και παρονομαστή 2")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_327() -> Result<()> { // same + let expr = r#" + + + + ( + + x+ψ+z + ) + 2 + + + "#; + test("el", "ClearSpeak", expr, "ανοίγει παρένθεση; x συν ψ συν z; κλείνει παρένθεση στο τετράγωνο")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_328() -> Result<()> { // same + let expr = r#" + + + + ( + + χ+y + ) + 2 + + +z + "#; + test("el", "ClearSpeak", expr, "ανοίγει παρένθεση, χ συν y, κλείνει παρένθεση στο τετράγωνο; συν z")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_329() -> Result<()> { // same + let expr = r#" + + x+ + + ( + + ψ+ζ + ) + 2 + + + "#; + test("el", "ClearSpeak", expr, "x συν; ανοίγει παρένθεση; ψ συν ζήτα; κλείνει παρένθεση στο τετράγωνο")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_330() -> Result<()> { // same + let expr = r#" + + x+ψ+ + z + 2 + + + "#; + test("el", "ClearSpeak", expr, "x συν ψ συν z στο τετράγωνο")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_331() -> Result<()> { // + let expr = r#" + + + + + b + c + + + + +δε + "#; + test("el", "ClearSpeak", expr, "η τετραγωνική ρίζα του b προς c; συν δέλτα μείον έψιλον")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_332() -> Result<()> { // + let expr = r#" + + + + + β + + c+d + + + + ε + "#; + test("el", "ClearSpeak", expr, "η τετραγωνική ρίζα του κλάσματος με αριθμητή βήτα; και παρονομαστή c συν d; μείον έψιλον")?; + return Ok(()); + //theodora. fails. Needs genitive +} + +#[test] +fn uoa_corpus_333() -> Result<()> { // + let expr = r#" + + + + + β + c + + e + + + "#; + test("el", "ClearSpeak", expr, "η τετραγωνική ρίζα του βήτα προς c, μείον e")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_334() -> Result<()> { // same + let expr = r#" + + cos( + + xψ + )+ + + tan + 2 + + x+ψ + "#; + test("el", "ClearSpeak", expr, "συνημίτονο του; ανοίγει παρένθεση, x ψ, κλείνει παρένθεση; συν, εφαπτομένη στο τετράγωνο; του x; συν ψ")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_335() -> Result<()> { // same + let expr = r#" + + cos( + + xψ + )+ + + tan + 2 + + ( + + χ+y + ) + "#; + test("el", "ClearSpeak", expr, "συνημίτονο του; ανοίγει παρένθεση, x ψ, κλείνει παρένθεση; συν; εφαπτομένη στο τετράγωνο; του; ανοίγει παρένθεση, χ συν y, κλείνει παρένθεση")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_336() -> Result<()> { // + let expr = r#" + + cosχy+ + + tan + 2 + + χ+y + "#; + test("el", "ClearSpeak", expr, "συνημίτονο, χ y; συν, εφαπτομένη στο τετράγωνο; του χ; συν y")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_337() -> Result<()> { // + let expr = r#" + + cosχy+ + + tan + 2 + + ( + + x+ψ + ) + "#; + test("el", "ClearSpeak", expr, "συνημίτονο, χ y; συν; εφαπτομένη στο τετράγωνο; του; ανοίγει παρένθεση, x συν ψ, κλείνει παρένθεση")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_338() -> Result<()> { // same + let expr = r#" + + α×( + + β+γ + ) + "#; + test("el", "ClearSpeak", expr, "άλφα επί; ανοίγει παρένθεση; βήτα συν γάμμα; κλείνει παρένθεση")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_339() -> Result<()> { // same + let expr = r#" + + 3× + χ + 2 + + ×( + + 2 + χ + 3 + + +6χ + ) + "#; + test("el", "ClearSpeak", expr, "3 επί χ στο τετράγωνο, επί; ανοίγει παρένθεση; 2 χ στον κύβο, συν 6 χ; κλείνει παρένθεση")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_340() -> Result<()> { // same + let expr = r#" + + ( + + α+β + )×( + + γ+δ + ) + "#; + test("el", "ClearSpeak", expr, "ανοίγει παρένθεση; άλφα συν βήτα; κλείνει παρένθεση; επί; ανοίγει παρένθεση; γάμμα συν δέλτα; κλείνει παρένθεση")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_341() -> Result<()> { // same + let expr = r#" + + ( + + 3 + χ + 2 + + ψ+2ψ + )×( + + 2 + χ + 2 + + +5 + ) + "#; + test("el", "ClearSpeak", expr, "ανοίγει παρένθεση; 3 χ στο τετράγωνο, ψ; συν 2 ψ; κλείνει παρένθεση; επί; ανοίγει παρένθεση; 2 χ στο τετράγωνο, συν 5; κλείνει παρένθεση")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_342() -> Result<()> { // same + let expr = r#" + + 3 + χ + 2 + + ×( + + 2 + χ + 3 + + +6χ + ) + "#; + test("el", "ClearSpeak", expr, "3 χ στο τετράγωνο, επί; ανοίγει παρένθεση; 2 χ στον κύβο, συν 6 χ; κλείνει παρένθεση")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_343() -> Result<()> { // same + let expr = r#" + + 3 + χ + 2 + + + "#; + test("el", "ClearSpeak", expr, "3 χ στο τετράγωνο")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_344() -> Result<()> { // same + let expr = r#" + + 2 + χ + 3 + + +6χ + "#; + test("el", "ClearSpeak", expr, "2 χ στον κύβο, συν 6 χ")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_345() -> Result<()> { // + let expr = r#" + + 3 + χ + 2 + + ×( + + 2 + χ + 3 + + +6χ + )=3 + χ + 2 + + ×2 + χ + 3 + + +3 + χ + 2 + + ×6χ=6 + χ + 5 + + +18 + χ + 3 + + + "#; + test("el", "ClearSpeak", expr, "3 χ στο τετράγωνο, επί; ανοίγει παρένθεση; 2 χ στον κύβο, συν 6 χ; κλείνει παρένθεση; ισούται με; 3 χ στο τετράγωνο, επί 2 χ στον κύβο; συν, 3 χ στο τετράγωνο, επί 6 χ; ισούται με; 6, χ στην πέμπτη δύναμη; συν, 18 χ στον κύβο")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_346() -> Result<()> { // same + let expr = r#" + + ( + + 3 + χ + 2 + + ψ+2ψ + )×( + + 2 + χ + 2 + + +5 + ) + "#; + test("el", "ClearSpeak", expr, "ανοίγει παρένθεση; 3 χ στο τετράγωνο, ψ; συν 2 ψ; κλείνει παρένθεση; επί; ανοίγει παρένθεση; 2 χ στο τετράγωνο, συν 5; κλείνει παρένθεση")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_347() -> Result<()> { // same + let expr = r#" + + 3 + χ + 2 + + ψ+2ψ + "#; + test("el", "ClearSpeak", expr, "3 χ στο τετράγωνο, ψ; συν 2 ψ")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_348() -> Result<()> { // same + let expr = r#" + + 2 + χ + 2 + + +5 + "#; + test("el", "ClearSpeak", expr, "2 χ στο τετράγωνο, συν 5")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_349() -> Result<()> { // same + let expr = r#" + + ( + + 3 + χ + 2 + + ψ+2ψ + )×( + + 2 + χ + 2 + + +5 + ) + "#; + test("el", "ClearSpeak", expr, "ανοίγει παρένθεση; 3 χ στο τετράγωνο, ψ; συν 2 ψ; κλείνει παρένθεση; επί; ανοίγει παρένθεση; 2 χ στο τετράγωνο, συν 5; κλείνει παρένθεση")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_350() -> Result<()> { // same + let expr = r#" + + =3 + χ + 2 + + ψ×2 + χ + 2 + + +3 + χ + 2 + + ψ×5+2ψ×2 + χ + 2 + + +2ψ×5 + "#; + test("el", "ClearSpeak", expr, "ισούται με; 3 χ στο τετράγωνο, ψ επί 2 χ στο τετράγωνο; συν, 3 χ στο τετράγωνο, ψ επί 5; συν, 2 ψ επί 2 χ στο τετράγωνο; συν 2 ψ επί 5")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_351() -> Result<()> { // + let expr = r#" + + =6 + χ + 4 + + ψ+15 + χ + 2 + + ψ+4 + χ + 2 + + ψ+10ψ=6 + χ + 4 + + ψ+19 + χ + 2 + + ψ+10ψ + "#; + test("el", "ClearSpeak", expr, "ισούται με; 6, χ στην τέταρτη δύναμη, ψ; συν, 15 χ στο τετράγωνο, ψ; συν, 4 χ στο τετράγωνο, ψ; συν 10 ψ; ισούται με; 6, χ στην τέταρτη δύναμη, ψ; συν, 19 χ στο τετράγωνο, ψ; συν 10 ψ")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_352() -> Result<()> { // same + let expr = r#" + + 2α + "#; + test("el", "ClearSpeak", expr, "2 άλφα")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_353() -> Result<()> { // same + let expr = r#" + + sin( + + α+β + ) + "#; + test("el", "ClearSpeak", expr, "ημίτονο του; ανοίγει παρένθεση; άλφα συν βήτα; κλείνει παρένθεση")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_354() -> Result<()> { // same + let expr = r#" + + cos( + + α+β + ) + "#; + test("el", "ClearSpeak", expr, "συνημίτονο του; ανοίγει παρένθεση; άλφα συν βήτα; κλείνει παρένθεση")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_355() -> Result<()> { // same + let expr = r#" + + tan( + + α+β + ) + "#; + test("el", "ClearSpeak", expr, "εφαπτομένη του; ανοίγει παρένθεση; άλφα συν βήτα; κλείνει παρένθεση")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_356() -> Result<()> { // same + let expr = r#" + + sin( + + 2α + )=sin( + + α+α + )=sin( + α + )×cos( + α + )+cos( + α + )×sin( + α + )=2×sin( + α + )×cos( + a + ) + "#; + test("el", "ClearSpeak", expr, "ημίτονο του; ανοίγει παρένθεση, 2 άλφα, κλείνει παρένθεση; ισούται με; ημίτονο του; ανοίγει παρένθεση; άλφα συν άλφα; κλείνει παρένθεση; ισούται με; ημίτονο του άλφα, επί, συνημίτονο του άλφα; συν; συνημίτονο του άλφα; επί, ημίτονο του άλφα; ισούται με; 2 επί, ημίτονο του άλφα, επί, συνημίτονο του a")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_357() -> Result<()> { // same + let expr = r#" + + sin( + + 2α + )=2×sin( + α + )×cos( + α + ) + "#; + test("el", "ClearSpeak", expr, "ημίτονο του; ανοίγει παρένθεση, 2 άλφα, κλείνει παρένθεση; ισούται με; 2 επί, ημίτονο του άλφα, επί, συνημίτονο του άλφα")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_358() -> Result<()> { // same + let expr = r#" + + cos( + + 2α + )=cos( + + α+α + )=cos( + α + )×cos( + α + )sin( + α + )×sin( + α + )= + + cos + 2 + + α + + sin + 2 + + α + "#; + test("el", "ClearSpeak", expr, "συνημίτονο του; ανοίγει παρένθεση, 2 άλφα, κλείνει παρένθεση; ισούται με; συνημίτονο του; ανοίγει παρένθεση; άλφα συν άλφα; κλείνει παρένθεση; ισούται με; συνημίτονο του άλφα; επί, συνημίτονο του άλφα; μείον; ημίτονο του άλφα, επί, ημίτονο του άλφα; ισούται με; συνημίτονο στο τετράγωνο; του άλφα; μείον, ημίτονο στο τετράγωνο, του άλφα")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_359() -> Result<()> { // same + let expr = r#" + + = + + cos + 2 + + α(1 + + cos + 2 + + α)=2 + + cos + 2 + + α1 + "#; + test("el", "ClearSpeak", expr, "ισούται με; συνημίτονο στο τετράγωνο; του άλφα; μείον; ανοίγει παρένθεση; 1 μείον; συνημίτονο στο τετράγωνο; του άλφα; κλείνει παρένθεση; ισούται με; 2, συνημίτονο στο τετράγωνο; του άλφα; μείον 1")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_360() -> Result<()> { // same + let expr = r#" + + =(1 + + sin + 2 + + α) + + sin + 2 + + α=12 + + sin + 2 + + α + "#; + test("el", "ClearSpeak", expr, "ισούται με; ανοίγει παρένθεση; 1 μείον, ημίτονο στο τετράγωνο, του άλφα; κλείνει παρένθεση; μείον, ημίτονο στο τετράγωνο, του άλφα; ισούται με; 1 μείον; 2, ημίτονο στο τετράγωνο, του άλφα")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_361() -> Result<()> { // same + let expr = r#" + + cos( + + 2α + )= + + cos + 2 + + α + + sin + 2 + + α + "#; + test("el", "ClearSpeak", expr, "συνημίτονο του; ανοίγει παρένθεση, 2 άλφα, κλείνει παρένθεση; ισούται με; συνημίτονο στο τετράγωνο; του άλφα; μείον, ημίτονο στο τετράγωνο, του άλφα")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_362() -> Result<()> { // same + let expr = r#" + + cos( + + 2α + )= + + cos + 2 + + α + + sin + 2 + + α=2 + + cos + 2 + + α1=12 + + sin + 2 + + α + "#; + test("el", "ClearSpeak", expr, "συνημίτονο του; ανοίγει παρένθεση, 2 άλφα, κλείνει παρένθεση; ισούται με; συνημίτονο στο τετράγωνο; του άλφα; μείον, ημίτονο στο τετράγωνο, του άλφα; ισούται με; 2, συνημίτονο στο τετράγωνο; του άλφα; μείον 1; ισούται με; 1 μείον; 2, ημίτονο στο τετράγωνο, του άλφα")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_363() -> Result<()> { // + let expr = r#" + + tan(2α)= + + tanα+tanα + + 1tanαtanα + + = + + 2tanα + + 1 + + tan + 2 + + α + + + "#; + test("el", "ClearSpeak", expr, "εφαπτομένη του; ανοίγει παρένθεση, 2 άλφα, κλείνει παρένθεση; ισούται με; το κλάσμα με αριθμητή; εφαπτομένη, άλφα, συν, εφαπτομένη, άλφα; και παρονομαστή 1 μείον; εφαπτομένη, άλφα; εφαπτομένη, άλφα; ισούται με; το κλάσμα με αριθμητή; 2, εφαπτομένη, άλφα; και παρονομαστή 1 μείον; εφαπτομένη στο τετράγωνο; του άλφα")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_364() -> Result<()> { // + let expr = r#" + + tan(2α)= + + 2tanα + + 1 + + tan + 2 + + α + + + "#; + test("el", "ClearSpeak", expr, "εφαπτομένη του; ανοίγει παρένθεση, 2 άλφα, κλείνει παρένθεση; ισούται με; το κλάσμα με αριθμητή; 2, εφαπτομένη, άλφα; και παρονομαστή 1 μείον; εφαπτομένη στο τετράγωνο; του άλφα")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_365() -> Result<()> { // + let expr = r#" + + cos(2α)=2 + + cos + 2 + + α11+cos( + + 2α + )=2 + + cos + 2 + + α + + cos + 2 + + α= + + 1+cos2α + 2 + + + "#; + test("el", "ClearSpeak", expr, "συνημίτονο του; ανοίγει παρένθεση, 2 άλφα, κλείνει παρένθεση; ισούται με; 2, συνημίτονο στο τετράγωνο; του άλφα; μείον 1; αμφίδρομο διπλό βέλος; 1 συν; συνημίτονο του; ανοίγει παρένθεση, 2 άλφα, κλείνει παρένθεση; ισούται με; 2, συνημίτονο στο τετράγωνο; του άλφα; αμφίδρομο διπλό βέλος; συνημίτονο στο τετράγωνο; του άλφα; ισούται με; το κλάσμα με αριθμητή; 1 συν, συνημίτονο του 2 άλφα; και παρονομαστή 2")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_366() -> Result<()> { // + let expr = r#" + + cos( + + 2α + )=12 + + sin + 2 + + α2 + + sin + 2 + + α=1cos(2α)si + n + 2 + + α= + + 1cos( + + 2α + ) + 2 + + + "#; + test("el", "ClearSpeak", expr, "συνημίτονο του; ανοίγει παρένθεση, 2 άλφα, κλείνει παρένθεση; ισούται με; 1 μείον; 2, ημίτονο στο τετράγωνο, του άλφα; αμφίδρομο διπλό βέλος; 2, ημίτονο στο τετράγωνο, του άλφα; ισούται με; 1 μείον; συνημίτονο του; ανοίγει παρένθεση, 2 άλφα, κλείνει παρένθεση; αμφίδρομο διπλό βέλος; ημίτονο στο τετράγωνο, του άλφα; ισούται με; το κλάσμα με αριθμητή; 1 μείον; συνημίτονο του; ανοίγει παρένθεση, 2 άλφα, κλείνει παρένθεση; και παρονομαστή 2")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_367() -> Result<()> { // + let expr = r#" + + + + tan + 2 + + α= + + + + sin + 2 + + α + + + + cos + 2 + + α + + = + + + + 1cos(2α) + 2 + + + + + + 1+cos( + + 2α + ) + 2 + + + + = + + 1cos(2α) + + 1+cos(2α) + + + "#; + test("el", "ClearSpeak", expr, "εφαπτομένη στο τετράγωνο; του άλφα; ισούται με; το κλάσμα με αριθμητή; ημίτονο στο τετράγωνο, του άλφα; και παρονομαστή συνημίτονο στο τετράγωνο; του άλφα; ισούται με; το κλάσμα με αριθμητή; το κλάσμα με αριθμητή; 1 μείον; συνημίτονο του; ανοίγει παρένθεση, 2 άλφα, κλείνει παρένθεση; και παρονομαστή 2; και παρονομαστή το κλάσμα με αριθμητή; 1 συν; συνημίτονο του; ανοίγει παρένθεση, 2 άλφα, κλείνει παρένθεση; και παρονομαστή 2; ισούται με; το κλάσμα με αριθμητή; 1 μείον; συνημίτονο του; ανοίγει παρένθεση, 2 άλφα, κλείνει παρένθεση; και παρονομαστή 1 συν; συνημίτονο του; ανοίγει παρένθεση, 2 άλφα, κλείνει παρένθεση")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_368() -> Result<()> { // + let expr = r#" + + 22.5°= + + 45° + 2 + + + "#; + test("el", "ClearSpeak", expr, "22.5 μοίρες; ισούται με; το κλάσμα με αριθμητή; 45 μοίρες; και παρονομαστή 2")?; + return Ok(()); + //theodora. fails. coverts 22.5 --> 225 +} + +#[test] +fn uoa_corpus_369() -> Result<()> { // + let expr = r#" + + + + sin + 2 + + ( + + 22.5° + )= + + 1cos( + + 45° + ) + 2 + + = + + 1 + + + 2 + + + 2 + + + 2 + + = + + 2 + 2 + + + 2 + + + "#; + test("el", "ClearSpeak", expr, "ημίτονο στο τετράγωνο, του; ανοίγει παρένθεση, 22.5 μοίρες; κλείνει παρένθεση; ισούται με; το κλάσμα με αριθμητή; 1 μείον; συνημίτονο του; ανοίγει παρένθεση, 45 μοίρες; κλείνει παρένθεση; και παρονομαστή 2; ισούται με; το κλάσμα με αριθμητή; 1 μείον; το κλάσμα με αριθμητή; η τετραγωνική ρίζα του 2; και παρονομαστή 2; και παρονομαστή 2; ισούται με; το κλάσμα με αριθμητή; 2 μείον, η τετραγωνική ρίζα του 2; και παρονομαστή 2")?; + return Ok(()); + //theodora. fails. converts 22.5 to 225 +} + +#[test] +fn uoa_corpus_370() -> Result<()> { // + let expr = r#" + + sin( + + 22.5° + )= + + + + 2 + 2 + + + + + 2 + + + "#; + test("el", "ClearSpeak", expr, "διπλό βέλος προς τα δεξιά; ημίτονο του; ανοίγει παρένθεση, 22.5 μοίρες; κλείνει παρένθεση; ισούται με; το κλάσμα με αριθμητή; η τετραγωνική ρίζα του 2 μείον, η τετραγωνική ρίζα του 2; και παρονομαστή 2")?; + return Ok(()); + //theodora. fails. converts 22.5 to 225 + +} + +#[test] +fn uoa_corpus_371() -> Result<()> { // + let expr = r#" + + + + cos + 2 + + (22.5°)= + + 1+cos( + + 45° + ) + 2 + + = + + 1+ + + + 2 + + + 2 + + + 2 + + = + + 2+ + 2 + + + 2 + + cos(22.5°)= + + + + 2+ + 2 + + + + + 2 + + + "#; + test("el", "ClearSpeak", expr, "συνημίτονο στο τετράγωνο; του; ανοίγει παρένθεση, 22.5 μοίρες; κλείνει παρένθεση; ισούται με; το κλάσμα με αριθμητή; 1 συν; συνημίτονο του; ανοίγει παρένθεση, 45 μοίρες; κλείνει παρένθεση; και παρονομαστή 2; ισούται με; το κλάσμα με αριθμητή; 1 συν; το κλάσμα με αριθμητή; η τετραγωνική ρίζα του 2; και παρονομαστή 2; και παρονομαστή 2; ισούται με; το κλάσμα με αριθμητή; 2 συν, η τετραγωνική ρίζα του 2; και παρονομαστή 2; διπλό βέλος προς τα δεξιά; συνημίτονο του; ανοίγει παρένθεση, 22.5 μοίρες; κλείνει παρένθεση; ισούται με; το κλάσμα με αριθμητή; η τετραγωνική ρίζα του 2 συν, η τετραγωνική ρίζα του 2; και παρονομαστή 2")?; + return Ok(()); + //theodora. fails. converts 22.5 to 225 +} + +#[test] +fn uoa_corpus_372() -> Result<()> { // + let expr = r#" + + tan(22.5°)= + + + + 2 + 2 + + + + + + + + 2+ + 2 + + + + + + = + 2 + + 1 + "#; + test("el", "ClearSpeak", expr, "εφαπτομένη του; ανοίγει παρένθεση, 22.5 μοίρες; κλείνει παρένθεση; ισούται με; το κλάσμα με αριθμητή; η τετραγωνική ρίζα του 2 μείον, η τετραγωνική ρίζα του 2; και παρονομαστή η τετραγωνική ρίζα του 2 συν, η τετραγωνική ρίζα του 2; ισούται με; η τετραγωνική ρίζα του 2; μείον 1")?; + return Ok(()); + //theodora. fails. converts 22.5 to 225 +} + +#[test] +fn uoa_corpus_373() -> Result<()> { // + let expr = r#" + + cot(22.5°)= + + + + 2+ + 2 + + + + + + + + 2 + 2 + + + + + + = + 2 + + +1 + "#; + test("el", "ClearSpeak", expr, "συνεφαπτομένη, του; ανοίγει παρένθεση, 22.5 μοίρες; κλείνει παρένθεση; ισούται με; το κλάσμα με αριθμητή; η τετραγωνική ρίζα του 2 συν, η τετραγωνική ρίζα του 2; και παρονομαστή η τετραγωνική ρίζα του 2 μείον, η τετραγωνική ρίζα του 2; ισούται με; την τετραγωνική ρίζα του 2; συν 1")?; + return Ok(()); + //theodora. converts 22.5 to 225. also fails accusative rule +} + +#[test] +fn uoa_corpus_374() -> Result<()> { // + let expr = r#" + + p(χ| + + ω + ι + + ) + "#; + test("el", "ClearSpeak", expr, "p; ανοίγει παρένθεση; χ; κάθετη γραμμή; ωμέγα δείκτης ιότα; κλείνει παρένθεση")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_375() -> Result<()> { // same + let expr = r#" + + + θ + i + + + "#; + test("el", "ClearSpeak", expr, "θήτα δείκτης i")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_376() -> Result<()> { // + let expr = r#" + + p(χ| + + ω + ι + + ;θ) + "#; + test("el", "ClearSpeak", expr, "p; ανοίγει παρένθεση; χ; κάθετη γραμμή; ωμέγα δείκτης ιότα; ελληνικό ερωτηματικό, θήτα; κλείνει παρένθεση")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_377() -> Result<()> { // same + let expr = r#" + + + χ + 1 + + ,, + χ + Ν + + + "#; + test("el", "ClearSpeak", expr, "χ δείκτης 1; κόμμα; αποσιωπητικά, κόμμα; χ δείκτης, κεφαλαίο νί")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_378() -> Result<()> { // same + let expr = r#" + + p(Χ;θ) + "#; + test("el", "ClearSpeak", expr, "p; ανοίγει παρένθεση; κεφαλαίο χ, ελληνικό ερωτηματικό, θήτα; κλείνει παρένθεση")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_379() -> Result<()> { // same + let expr = r#" + + p(Χ;θ)=p( + χ + 1 + + , + χ + 2 + + ,, + χ + Ν + + ;θ)= + + + + κ=1 + Ν + + + p( + χ + κ + + ;θ) + + "#; + test("el", "ClearSpeak", expr, "p; ανοίγει παρένθεση; κεφαλαίο χ, ελληνικό ερωτηματικό, θήτα; κλείνει παρένθεση; ισούται με; p του; ανοίγει παρένθεση; χ δείκτης 1; κόμμα; χ δείκτης 2; κόμμα; αποσιωπητικά, κόμμα; χ δείκτης, κεφαλαίο νί; ελληνικό ερωτηματικό, θήτα; κλείνει παρένθεση; ισούται με; γινόμενο από καπα ισούται με 1 ως κεφαλαίο νί του; p; ανοίγει παρένθεση; χ δείκτης καπα; ελληνικό ερωτηματικό, θήτα; κλείνει παρένθεση")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_380() -> Result<()> { // same + let expr = r#" + + + θ + + ML + + =arg + + max + θ + + + + + + κ=1 + Ν + + + p( + χ + κ + + ;θ) + + "#; + test("el", "ClearSpeak", expr, "θήτα δείκτης κεφαλαίο m κεφαλαίο l; ισούται με; όρισμα του, μέγιστο δείκτης θήτα; του; γινόμενο από καπα ισούται με 1 ως κεφαλαίο νί του; p; ανοίγει παρένθεση; χ δείκτης καπα; ελληνικό ερωτηματικό, θήτα; κλείνει παρένθεση")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_381() -> Result<()> { // + let expr = r#" + + + + + + + + κ=1 + Ν + + + p( + χ + κ + + ;θ) + + + θ + + =0 + "#; + test("el", "ClearSpeak", expr, "το κλάσμα με αριθμητή; μερικό διαφορικό; γινόμενο από καπα ισούται με 1 ως κεφαλαίο νί του; p; ανοίγει παρένθεση; χ δείκτης καπα; ελληνικό ερωτηματικό, θήτα; κλείνει παρένθεση; και παρονομαστή μερικό διαφορικό, θήτα; ισούται με 0")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_382() -> Result<()> { // + let expr = r#" + + L(θ)=ln + + + + κ=1 + Ν + + + p( + χ + κ + + ;θ) + + "#; + test("el", "ClearSpeak", expr, "κεφαλαίο l του θήτα; ισούται με; το l n του; γινόμενο από καπα ισούται με 1 ως κεφαλαίο νί του; p; ανοίγει παρένθεση; χ δείκτης καπα; ελληνικό ερωτηματικό, θήτα; κλείνει παρένθεση")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_383() -> Result<()> { // + let expr = r#" + + + + L(θ) + + θ + + = + + + + κ=1 + Ν + + + + + lnp( + χ + κ + + ;θ) + + θ + + + = + + + + κ=1 + Ν + + + + 1 + + p( + χ + κ + + ;θ) + + × + + p( + χ + κ + + ;θ) + + θ + + + =0 + "#; + test("el", "ClearSpeak", expr, "το κλάσμα με αριθμητή; μερικό διαφορικό; κεφαλαίο l του θήτα; και παρονομαστή μερικό διαφορικό, θήτα; ισούται με; άθροισμα από καπα ισούται με 1 ως κεφαλαίο νί του; το κλάσμα με αριθμητή; μερικό διαφορικό, l n p; ανοίγει παρένθεση; χ δείκτης καπα; ελληνικό ερωτηματικό, θήτα; κλείνει παρένθεση; και παρονομαστή μερικό διαφορικό, θήτα; ισούται με; άθροισμα από καπα ισούται με 1 ως κεφαλαίο νί του; το κλάσμα με αριθμητή 1; και παρονομαστή p; ανοίγει παρένθεση; χ δείκτης καπα; ελληνικό ερωτηματικό, θήτα; κλείνει παρένθεση; επί; το κλάσμα με αριθμητή; μερικό διαφορικό p; ανοίγει παρένθεση; χ δείκτης καπα; ελληνικό ερωτηματικό, θήτα; κλείνει παρένθεση; και παρονομαστή μερικό διαφορικό, θήτα; ισούται με 0")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_384() -> Result<()> { // same + let expr = r#" + + a×( + + b+c + ) + "#; + test("el", "ClearSpeak", expr, "a επί; ανοίγει παρένθεση, b συν c, κλείνει παρένθεση")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_385() -> Result<()> { // same + let expr = r#" + + 3× + x + 2 + + ×( + + 2 + x + 3 + + +6x + ) + "#; + test("el", "ClearSpeak", expr, "3 επί x στο τετράγωνο, επί; ανοίγει παρένθεση; 2 x στον κύβο, συν 6 x; κλείνει παρένθεση")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_386() -> Result<()> { // same + let expr = r#" + + ( + + a+b + )×( + + c+d + ) + "#; + test("el", "ClearSpeak", expr, "ανοίγει παρένθεση, a συν b, κλείνει παρένθεση; επί; ανοίγει παρένθεση, c συν d, κλείνει παρένθεση")?; + return Ok(()); + //theodora. fails. For some reason it recognizes c + d as 100 + 500 + //does the same in english + } + +#[test] +fn uoa_corpus_386b() -> Result<()> { // same + let expr = r#"(a+b)×(c+d)"#; + test("el", "ClearSpeak", expr, "ανοίγει παρένθεση, a συν b, κλείνει παρένθεση; επί; ανοίγει παρένθεση, c συν d, κλείνει παρένθεση")?; + return Ok(()); + //theodora. this is the same example visually as 386 but here it doesn't fail + } + +#[test] +fn uoa_corpus_387() -> Result<()> { // same + let expr = r#" + + ( + + 3 + x + 2 + + ψ+2ψ + )×( + + 2 + x + 2 + + +5 + ) + "#; + test("el", "ClearSpeak", expr, "ανοίγει παρένθεση; 3 x στο τετράγωνο, ψ; συν 2 ψ; κλείνει παρένθεση; επί; ανοίγει παρένθεση; 2 x στο τετράγωνο, συν 5; κλείνει παρένθεση")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_388() -> Result<()> { // same + let expr = r#" + + 3 + x + 2 + + ×( + + 2 + x + 3 + + +6x + ) + "#; + test("el", "ClearSpeak", expr, "3 x στο τετράγωνο, επί; ανοίγει παρένθεση; 2 x στον κύβο, συν 6 x; κλείνει παρένθεση")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_389() -> Result<()> { // same + let expr = r#" + + 3 + x + 2 + + + "#; + test("el", "ClearSpeak", expr, "3 x στο τετράγωνο")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_390() -> Result<()> { // same + let expr = r#" + + 2 + x + 3 + + +6x + "#; + test("el", "ClearSpeak", expr, "2 x στον κύβο, συν 6 x")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_391() -> Result<()> { // + let expr = r#" + + 3 + x + 2 + + ×( + + 2 + x + 3 + + +6x + )=3 + x + 2 + + ×2 + x + 3 + + +3 + x + 2 + + ×6x=6 + x + 5 + + +18 + x + 3 + + + "#; + test("el", "ClearSpeak", expr, "3 x στο τετράγωνο, επί; ανοίγει παρένθεση; 2 x στον κύβο, συν 6 x; κλείνει παρένθεση; ισούται με; 3 x στο τετράγωνο, επί 2 x στον κύβο; συν, 3 x στο τετράγωνο, επί 6 x; ισούται με; 6, x στην πέμπτη δύναμη; συν, 18 x στον κύβο")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_392() -> Result<()> { // same + let expr = r#" + + ( + + 3 + x + 2 + + y+2y + )×( + + 2 + x + 2 + + +5 + ) + "#; + test("el", "ClearSpeak", expr, "ανοίγει παρένθεση; 3 x στο τετράγωνο, y; συν 2 y; κλείνει παρένθεση; επί; ανοίγει παρένθεση; 2 x στο τετράγωνο, συν 5; κλείνει παρένθεση")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_393() -> Result<()> { // same + let expr = r#" + + 3 + x + 2 + + y+2y + "#; + test("el", "ClearSpeak", expr, "3 x στο τετράγωνο, y; συν 2 y")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_394() -> Result<()> { // same + let expr = r#" + + 2 + x + 2 + + +5 + "#; + test("el", "ClearSpeak", expr, "2 x στο τετράγωνο, συν 5")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_395() -> Result<()> { // same + let expr = r#" + + ( + + 3 + x + 2 + + y+2y + )×( + + 2 + x + 2 + + +5 + ) + "#; + test("el", "ClearSpeak", expr, "ανοίγει παρένθεση; 3 x στο τετράγωνο, y; συν 2 y; κλείνει παρένθεση; επί; ανοίγει παρένθεση; 2 x στο τετράγωνο, συν 5; κλείνει παρένθεση")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_396() -> Result<()> { // same + let expr = r#" + + =3 + x + 2 + + y×2 + x + 2 + + +3 + x + 2 + + y×5+2y×2 + x + 2 + + +2y×5 + "#; + test("el", "ClearSpeak", expr, "ισούται με; 3 x στο τετράγωνο, y επί 2 x στο τετράγωνο; συν, 3 x στο τετράγωνο, y επί 5; συν, 2 y επί 2 x στο τετράγωνο; συν 2 y επί 5")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_397() -> Result<()> { // + let expr = r#" + + =6 + x + 4 + + y+15 + x + 2 + + y+4 + x + 2 + + y+10y=6 + x + 4 + + y+19 + x + 2 + + y+10y + "#; + test("el", "ClearSpeak", expr, "ισούται με; 6, x στην τέταρτη δύναμη, y; συν, 15 x στο τετράγωνο, y; συν, 4 x στο τετράγωνο, y; συν 10 y; ισούται με; 6, x στην τέταρτη δύναμη, y; συν, 19 x στο τετράγωνο, y; συν 10 y")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_398() -> Result<()> { // same + let expr = r#" + + 2a + "#; + test("el", "ClearSpeak", expr, "2 a")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_399() -> Result<()> { // same + let expr = r#" + + sin( + + a+b + ) + "#; + test("el", "ClearSpeak", expr, "ημίτονο του; ανοίγει παρένθεση, a συν b, κλείνει παρένθεση")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_400() -> Result<()> { // same + let expr = r#" + + cos( + + a+b + ) + "#; + test("el", "ClearSpeak", expr, "συνημίτονο του; ανοίγει παρένθεση, a συν b, κλείνει παρένθεση")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_401() -> Result<()> { // same + let expr = r#" + + tan( + + a+b + ) + "#; + test("el", "ClearSpeak", expr, "εφαπτομένη του; ανοίγει παρένθεση, a συν b, κλείνει παρένθεση")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_402() -> Result<()> { // same + let expr = r#" + + sin( + + 2a + )=sin( + + a+a + )=sin( + a + )×cos( + a + )+cos( + a + )×sin( + a + )=2×sin( + a + )×cos( + a + ) + "#; + test("el", "ClearSpeak", expr, "ημίτονο του 2 a; ισούται με; ημίτονο του; ανοίγει παρένθεση, a συν a, κλείνει παρένθεση; ισούται με; ημίτονο του a, επί, συνημίτονο του a; συν; συνημίτονο του a, επί ημίτονο του a; ισούται με; 2 επί ημίτονο του a, επί, συνημίτονο του a")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_403() -> Result<()> { // same + let expr = r#" + + sin( + + 2a + )=2×sin( + a + )×cos( + a + ) + "#; + test("el", "ClearSpeak", expr, "ημίτονο του 2 a; ισούται με; 2 επί ημίτονο του a, επί, συνημίτονο του a")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_404() -> Result<()> { // same + let expr = r#" + + cos( + + 2a + )=cos( + + a+a + )=cos( + a + )×cos( + a + )sin( + a + )×sin( + a + )= + + cos + 2 + + a + + sin + 2 + + a + "#; + test("el", "ClearSpeak", expr, "συνημίτονο του 2 a; ισούται με; συνημίτονο του; ανοίγει παρένθεση, a συν a, κλείνει παρένθεση; ισούται με; συνημίτονο του a, επί, συνημίτονο του a; μείον; ημίτονο του a, επί ημίτονο του a; ισούται με; συνημίτονο στο τετράγωνο; του a; μείον, ημίτονο στο τετράγωνο, του a")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_405() -> Result<()> { // same + let expr = r#" + + = + + cos + 2 + + a(1 + + cos + 2 + + a)=2 + + cos + 2 + + a1 + "#; + test("el", "ClearSpeak", expr, "ισούται με; συνημίτονο στο τετράγωνο; του a; μείον; ανοίγει παρένθεση; 1 μείον, συνημίτονο στο τετράγωνο; του a; κλείνει παρένθεση; ισούται με; 2, συνημίτονο στο τετράγωνο; του a; μείον 1")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_406() -> Result<()> { // same + let expr = r#" + + =(1 + + sin + 2 + + a) + + sin + 2 + + a=12 + + sin + 2 + + a + "#; + test("el", "ClearSpeak", expr, "ισούται με; ανοίγει παρένθεση; 1 μείον, ημίτονο στο τετράγωνο, του a; κλείνει παρένθεση; μείον, ημίτονο στο τετράγωνο, του a; ισούται με; 1 μείον; 2, ημίτονο στο τετράγωνο, του a")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_407() -> Result<()> { // same + let expr = r#" + + cos( + + 2a + )= + + cos + 2 + + a + + sin + 2 + + a + "#; + test("el", "ClearSpeak", expr, "συνημίτονο του 2 a; ισούται με; συνημίτονο στο τετράγωνο; του a; μείον, ημίτονο στο τετράγωνο, του a")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_408() -> Result<()> { // same + let expr = r#" + + cos( + + 2a + )= + + cos + 2 + + a + + sin + 2 + + a=2 + + cos + 2 + + a1=12 + + sin + 2 + + a + "#; + test("el", "ClearSpeak", expr, "συνημίτονο του 2 a; ισούται με; συνημίτονο στο τετράγωνο; του a; μείον, ημίτονο στο τετράγωνο, του a; ισούται με; 2, συνημίτονο στο τετράγωνο; του a; μείον 1; ισούται με; 1 μείον; 2, ημίτονο στο τετράγωνο, του a")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_409() -> Result<()> { // + let expr = r#" + + tan(2a)= + + tana+tana + + 1tanatana + + = + + 2tana + + 1 + + tan + 2 + + a + + + "#; + test("el", "ClearSpeak", expr, "εφαπτομένη του 2 a; ισούται με; το κλάσμα με αριθμητή; εφαπτομένη, a, συν εφαπτομένη, a; και παρονομαστή 1 μείον; εφαπτομένη, a; εφαπτομένη, a; ισούται με; το κλάσμα με αριθμητή; 2 εφαπτομένη, a; και παρονομαστή 1 μείον, εφαπτομένη στο τετράγωνο; του a")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_410() -> Result<()> { // + let expr = r#" + + tan(2a)= + + 2tana + + 1 + + tan + 2 + + a + + + "#; + test("el", "ClearSpeak", expr, "εφαπτομένη του 2 a; ισούται με; το κλάσμα με αριθμητή; 2 εφαπτομένη, a; και παρονομαστή 1 μείον, εφαπτομένη στο τετράγωνο; του a")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_411() -> Result<()> { // + let expr = r#" + + cos(2a)=2 + + cos + 2 + + a11+cos( + + 2a + )=2 + + cos + 2 + + a + + cos + 2 + + a= + + 1+cos2a + 2 + + + "#; + test("el", "ClearSpeak", expr, "συνημίτονο του 2 a; ισούται με; 2, συνημίτονο στο τετράγωνο; του a; μείον 1; αμφίδρομο διπλό βέλος; 1 συν, συνημίτονο του 2 a; ισούται με; 2, συνημίτονο στο τετράγωνο; του a; αμφίδρομο διπλό βέλος; συνημίτονο στο τετράγωνο; του a; ισούται με; το κλάσμα με αριθμητή; 1 συν, συνημίτονο, 2 a; και παρονομαστή 2")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_412() -> Result<()> { // + let expr = r#" + + cos( + + 2a + )=12 + + sin + 2 + + a2 + + sin + 2 + + a=1cos(2a)si + n + 2 + + a= + + 1cos( + + 2a + ) + 2 + + + "#; + test("el", "ClearSpeak", expr, "συνημίτονο του 2 a; ισούται με; 1 μείον; 2, ημίτονο στο τετράγωνο, του a; αμφίδρομο διπλό βέλος; 2, ημίτονο στο τετράγωνο, του a; ισούται με; 1 μείον, συνημίτονο του 2 a; αμφίδρομο διπλό βέλος; ημίτονο στο τετράγωνο, του a; ισούται με; το κλάσμα με αριθμητή; 1 μείον, συνημίτονο του 2 a; και παρονομαστή 2")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_413() -> Result<()> { // + let expr = r#" + + + + tan + 2 + + a= + + + + sin + 2 + + a + + + + cos + 2 + + a + + = + + + + 1cos(2a) + 2 + + + + + + 1+cos( + + 2a + ) + 2 + + + + = + + 1cos(2a) + + 1+cos(2a) + + + "#; + test("el", "ClearSpeak", expr, "εφαπτομένη στο τετράγωνο; του a; ισούται με; το κλάσμα με αριθμητή; ημίτονο στο τετράγωνο, του a; και παρονομαστή συνημίτονο στο τετράγωνο; του a; ισούται με; το κλάσμα με αριθμητή; το κλάσμα με αριθμητή; 1 μείον, συνημίτονο του 2 a; και παρονομαστή 2; και παρονομαστή το κλάσμα με αριθμητή; 1 συν, συνημίτονο του 2 a; και παρονομαστή 2; ισούται με; το κλάσμα με αριθμητή; 1 μείον, συνημίτονο του 2 a; και παρονομαστή 1 συν, συνημίτονο του 2 a")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_414() -> Result<()> { // + let expr = r#" + + 22.5°= + + 45° + 2 + + + "#; + test("el", "ClearSpeak", expr, "22.5 μοίρες; ισούται με; το κλάσμα με αριθμητή; 45 μοίρες; και παρονομαστή 2")?; + return Ok(()); + //theodora. fails because it converts 22.5 --> 225 +} + +#[test] +fn uoa_corpus_415() -> Result<()> { // + let expr = r#" + + + + sin + 2 + + ( + + 22.5° + )= + + 1cos( + + 45° + ) + 2 + + = + + 1 + + + 2 + + + 2 + + + 2 + + = + + 2 + 2 + + + 2 + + + "#; + test("el", "ClearSpeak", expr, "ημίτονο στο τετράγωνο, του; ανοίγει παρένθεση, 225 μοίρες; κλείνει παρένθεση; ισούται με; το κλάσμα με αριθμητή; 1 μείον; συνημίτονο του; ανοίγει παρένθεση, 45 μοίρες; κλείνει παρένθεση; και παρονομαστή 2; ισούται με; το κλάσμα με αριθμητή; 1 μείον; το κλάσμα με αριθμητή; η τετραγωνική ρίζα του 2; και παρονομαστή 2; και παρονομαστή 2; ισούται με; το κλάσμα με αριθμητή; 2 μείον, η τετραγωνική ρίζα του 2; και παρονομαστή 2")?; + return Ok(()); + //theodora. fails. converts 22.5 --> 225 +} + +#[test] +fn uoa_corpus_416() -> Result<()> { // + let expr = r#" + + sin( + + 22.5° + )= + + + + 2 + 2 + + + + + 2 + + + "#; += test("el", "ClearSpeak", expr, "διπλό βέλος προς τα δεξιά; ημίτονο του; ανοίγει παρένθεση, 225 μοίρες; κλείνει παρένθεση; ισούται με; το κλάσμα με αριθμητή; η τετραγωνική ρίζα του 2 μείον, η τετραγωνική ρίζα του 2; και παρονομαστή 2")?; + return Ok(()); + //theodora. fails. converts 22.5 -->225 +} + +#[test] +fn uoa_corpus_417() -> Result<()> { // + let expr = r#" + + + + cos + 2 + + (22.5°)= + + 1+cos( + + 45° + ) + 2 + + = + + 1+ + + + 2 + + + 2 + + + 2 + + = + + 2+ + 2 + + + 2 + + cos(22.5°)= + + + + 2+ + 2 + + + + + 2 + + + "#; + test("el", "ClearSpeak", expr, "συνημίτονο στο τετράγωνο; του; ανοίγει παρένθεση, 22.5 μοίρες; κλείνει παρένθεση; ισούται με; το κλάσμα με αριθμητή; 1 συν; συνημίτονο του; ανοίγει παρένθεση, 45 μοίρες; κλείνει παρένθεση; και παρονομαστή 2; ισούται με; το κλάσμα με αριθμητή; 1 συν; το κλάσμα με αριθμητή; η τετραγωνική ρίζα του 2; και παρονομαστή 2; και παρονομαστή 2; ισούται με; το κλάσμα με αριθμητή; 2 συν, η τετραγωνική ρίζα του 2; και παρονομαστή 2; διπλό βέλος προς τα δεξιά; συνημίτονο του; ανοίγει παρένθεση, 22.5 μοίρες; κλείνει παρένθεση; ισούται με; το κλάσμα με αριθμητή; η τετραγωνική ρίζα του 2 συν, η τετραγωνική ρίζα του 2; και παρονομαστή 2")?; + return Ok(()); + //theodora. fails. converts 22.5 --> 225 +} + +#[test] +fn uoa_corpus_418() -> Result<()> { // + let expr = r#" + + tan(22.5°)= + + + + 2 + 2 + + + + + + + + 2+ + 2 + + + + + + = + 2 + + 1 + "#; + test("el", "ClearSpeak", expr, "εφαπτομένη του; ανοίγει παρένθεση, 22.5 μοίρες; κλείνει παρένθεση; ισούται με; το κλάσμα με αριθμητή; η τετραγωνική ρίζα του 2 μείον, η τετραγωνική ρίζα του 2; και παρονομαστή η τετραγωνική ρίζα του 2 συν, η τετραγωνική ρίζα του 2; ισούται με; την τετραγωνική ρίζα του 2; μείον 1")?; + return Ok(()); + //theodora. fails. it converts 22.5 to 225. also fails accusative rule +} + +#[test] +fn uoa_corpus_419() -> Result<()> { // + let expr = r#" + + cot(22.5°)= + + + + 2+ + 2 + + + + + + + + 2 + 2 + + + + + + = + 2 + + +1 + "#; + test("el", "ClearSpeak", expr, "συνεφαπτομένη, του; ανοίγει παρένθεση, 225 μοίρες; κλείνει παρένθεση; ισούται με; το κλάσμα με αριθμητή; η τετραγωνική ρίζα του 2 συν, η τετραγωνική ρίζα του 2; και παρονομαστή η τετραγωνική ρίζα του 2 μείον, η τετραγωνική ρίζα του 2; ισούται με; την τετραγωνική ρίζα του 2; συν 1")?; + return Ok(()); + //theodora. fails. converts 22.5 to 225. also fails accusative rule +} + +#[test] +fn uoa_corpus_420() -> Result<()> { // + let expr = r#" + + p(x| + + ω + i + + ) + "#; + test("el", "ClearSpeak", expr, "p; ανοίγει παρένθεση; x; κάθετη γραμμή; ωμέγα δείκτης i; κλείνει παρένθεση")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_421() -> Result<()> { // + let expr = r#" + + + θ + i + + + "#; + test("el", "ClearSpeak", expr, "θήτα δείκτης i")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_422() -> Result<()> { // + let expr = r#" + + p(x| + + ω + i + + ;θ) + "#; + test("el", "ClearSpeak", expr, "p; ανοίγει παρένθεση; x; κάθετη γραμμή; ωμέγα δείκτης i; ελληνικό ερωτηματικό, θήτα; κλείνει παρένθεση")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_423() -> Result<()> { // same + let expr = r#" + + + x + 1 + + ,, + x + Ν + + + "#; + test("el", "ClearSpeak", expr, "x δείκτης 1; κόμμα; αποσιωπητικά, κόμμα; x δείκτης, κεφαλαίο νί")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_424() -> Result<()> { // same + let expr = r#" + + p(X;θ) + "#; + test("el", "ClearSpeak", expr, "p; ανοίγει παρένθεση; κεφαλαίο x, ελληνικό ερωτηματικό, θήτα; κλείνει παρένθεση")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_425() -> Result<()> { // same + let expr = r#" + + p(X;θ)=p( + x + 1 + + , + x + 2 + + ,, + x + N + + ;θ)= + + + + k=1 + N + + + p( + x + k + + ;θ) + + "#; + test("el", "ClearSpeak", expr, "p; ανοίγει παρένθεση; κεφαλαίο x, ελληνικό ερωτηματικό, θήτα; κλείνει παρένθεση; ισούται με; p του; ανοίγει παρένθεση; x δείκτης 1; κόμμα; x δείκτης 2; κόμμα; αποσιωπητικά, κόμμα; x δείκτης κεφαλαίο n; ελληνικό ερωτηματικό, θήτα; κλείνει παρένθεση; ισούται με; γινόμενο από k ισούται με 1 ως κεφαλαίο n του; p; ανοίγει παρένθεση; x δείκτης k; ελληνικό ερωτηματικό, θήτα; κλείνει παρένθεση")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_426() -> Result<()> { // same + let expr = r#" + + + θ + + ML + + =arg + + max + θ + + + + + + k=1 + N + + + p( + x + k + + ;θ) + + "#; + test("el", "ClearSpeak", expr, "θήτα δείκτης κεφαλαίο m κεφαλαίο l; ισούται με; όρισμα του, μέγιστο δείκτης θήτα; του; γινόμενο από k ισούται με 1 ως κεφαλαίο n του; p; ανοίγει παρένθεση; x δείκτης k; ελληνικό ερωτηματικό, θήτα; κλείνει παρένθεση")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_427() -> Result<()> { // + let expr = r#" + + + + + + + + k=1 + N + + + p( + x + k + + ;θ) + + + θ + + =0 + "#; + test("el", "ClearSpeak", expr, "το κλάσμα με αριθμητή; μερικό διαφορικό; γινόμενο από k ισούται με 1 ως κεφαλαίο n του; p; ανοίγει παρένθεση; x δείκτης k; ελληνικό ερωτηματικό, θήτα; κλείνει παρένθεση; και παρονομαστή μερικό διαφορικό, θήτα; ισούται με 0")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_428() -> Result<()> { // + let expr = r#" + + L(θ)=ln + + + + k=1 + N + + + p( + x + k + + ;θ) + + "#; + test("el", "ClearSpeak", expr, "κεφαλαίο l του θήτα; ισούται με; το l n του; γινόμενο από k ισούται με 1 ως κεφαλαίο n του; p; ανοίγει παρένθεση; x δείκτης k; ελληνικό ερωτηματικό, θήτα; κλείνει παρένθεση")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_429() -> Result<()> { // + let expr = r#" + + + + L(θ) + + θ + + = + + + + k=1 + N + + + + + lnp( + x + k + + ;θ) + + θ + + + = + + + + k=1 + N + + + + 1 + + p( + x + k + + ;θ) + + × + + p( + x + k + + ;θ) + + θ + + + =0 + "#; + test("el", "ClearSpeak", expr, "το κλάσμα με αριθμητή; μερικό διαφορικό; κεφαλαίο l του θήτα; και παρονομαστή μερικό διαφορικό, θήτα; ισούται με; άθροισμα από k ισούται με 1 ως κεφαλαίο n του; το κλάσμα με αριθμητή; μερικό διαφορικό, l n p; ανοίγει παρένθεση; x δείκτης k; ελληνικό ερωτηματικό, θήτα; κλείνει παρένθεση; και παρονομαστή μερικό διαφορικό, θήτα; ισούται με; άθροισμα από k ισούται με 1 ως κεφαλαίο n του; το κλάσμα με αριθμητή 1; και παρονομαστή p; ανοίγει παρένθεση; x δείκτης k; ελληνικό ερωτηματικό, θήτα; κλείνει παρένθεση; επί; το κλάσμα με αριθμητή; μερικό διαφορικό p; ανοίγει παρένθεση; x δείκτης k; ελληνικό ερωτηματικό, θήτα; κλείνει παρένθεση; και παρονομαστή μερικό διαφορικό, θήτα; ισούται με 0")?; + return Ok(()); +} + diff --git a/tests/Languages/el/uoa_corpus_Simplespeak.rs b/tests/Languages/el/uoa_corpus_Simplespeak.rs new file mode 100644 index 000000000..e5103cff3 --- /dev/null +++ b/tests/Languages/el/uoa_corpus_Simplespeak.rs @@ -0,0 +1,13716 @@ +use crate::common::*; +use anyhow::Result; + +#[test] +fn uoa_corpus_001() -> Result<()> { // + let expr = r#" + + 1 + 1 + 2 + + + + 1 + 3 + + + 1 + 4 + + + + 1 + 5 + + =ln2 + "#; + test("el", "SimpleSpeak", expr, "1 μείον 1 δεύτερο συν 1 τρίτο μείον 1 τέταρτο συν 1 πέμπτο μείον αποσιωπητικά; ισούται με, το φυσικό λογάριθμο, του 2")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_002() -> Result<()> { // same + let expr = r#" + + 1 + 1 + 3 + + + + 1 + 5 + + + 1 + 7 + + + + 1 + 9 + + = + π + 4 + + + "#; + test("el", "SimpleSpeak", expr, "1 μείον 1 τρίτο συν 1 πέμπτο μείον 1 έβδομο συν 1 ένατο μείον αποσιωπητικά; ισούται με, π προς 4")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_003() -> Result<()> { // + let expr = r#" + + + 1 + 2 + + + 1 + 5 + + + + 1 + 8 + + + 1 + + 11 + + + + 1 + + 14 + + = + + π + 3 + + + 9 + + + + 1 + 3 + + ln2 + "#; + test("el", "SimpleSpeak", expr, "1 δεύτερο μείον 1 πέμπτο συν 1 όγδοο μείον 1 προς 11, συν 1 προς 14, μείον αποσιωπητικά; ισούται με; κλάσμα, π, η τετραγωνική ρίζα του 3; προς 9, τέλος κλάσματος; συν; 1 τρίτο, ο φυσικός λογάριθμος, του 2")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_004() -> Result<()> { // + let expr = r#" + + + 1 + + + 1 + 2 + + + + + + 1 + + + 2 + 2 + + + + + + 1 + + + 3 + 2 + + + + + + 1 + + + 4 + 2 + + + + += + + + π + 2 + + + 6 + + + "#; + test("el", "SimpleSpeak", expr, "κλάσμα, 1 προς, 1 στο τετράγωνο, τέλος κλάσματος; συν; κλάσμα, 1 προς, 2 στο τετράγωνο, τέλος κλάσματος; συν; κλάσμα, 1 προς, 3 στο τετράγωνο, τέλος κλάσματος; συν; κλάσμα, 1 προς, 4 στο τετράγωνο, τέλος κλάσματος; συν αποσιωπητικά; ισούται με; κλάσμα, π στο τετράγωνο, προς 6, τέλος κλάσματος")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_005() -> Result<()> { // + let expr = r#" + + + 1 + + + 1 + 4 + + + + + + 1 + + + 2 + 4 + + + + + + 1 + + + 3 + 4 + + + + + + 1 + + + 4 + 4 + + + + += + + + π + 4 + + + + 90 + + + "#; + test("el", "SimpleSpeak", expr, "κλάσμα, 1 προς, 1 στην τέταρτη, τέλος κλάσματος; συν; κλάσμα, 1 προς, 2 στην τέταρτη, τέλος κλάσματος; συν; κλάσμα, 1 προς, 3 στην τέταρτη, τέλος κλάσματος; συν; κλάσμα, 1 προς, 4 στην τέταρτη, τέλος κλάσματος; συν αποσιωπητικά; ισούται με; κλάσμα, π στην τέταρτη, προς 90, τέλος κλάσματος")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_006() -> Result<()> { // + let expr = r#" + + + 1 + + + 1 + 6 + + + + + + 1 + + + 2 + 6 + + + + + + 1 + + + 3 + 6 + + + + + + 1 + + + 4 + 6 + + + + += + + + π + 6 + + + + 945 + + + "#; + test("el", "SimpleSpeak", expr, "κλάσμα, 1 προς, 1 στην έκτη, τέλος κλάσματος; συν; κλάσμα, 1 προς, 2 στην έκτη, τέλος κλάσματος; συν; κλάσμα, 1 προς, 3 στην έκτη, τέλος κλάσματος; συν; κλάσμα, 1 προς, 4 στην έκτη, τέλος κλάσματος; συν αποσιωπητικά; ισούται με; κλάσμα, π στην έκτη, προς 945, τέλος κλάσματος")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_007() -> Result<()> { // + let expr = r#" + + + 1 + + + 1 + 6 + + + + + + 1 + + + 2 + 6 + + + + + + 1 + + + 3 + 6 + + + + + + 1 + + + 4 + 6 + + + + += + + 31 + π + 6 + + + + 30,240 + + + "#; + test("el", "SimpleSpeak", expr, "κλάσμα, 1 προς, 1 στην έκτη, τέλος κλάσματος; συν; κλάσμα, 1 προς, 2 στην έκτη, τέλος κλάσματος; συν; κλάσμα, 1 προς, 3 στην έκτη, τέλος κλάσματος; συν; κλάσμα, 1 προς, 4 στην έκτη, τέλος κλάσματος; συν αποσιωπητικά; ισούται με; κλάσμα, 31 π στην έκτη, προς 30,240, τέλος κλάσματος")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_008() -> Result<()> { // + let expr = r#" + + + 1 + + + 1 + 3 + + + + + + 1 + + + 3 + 3 + + + + + 1 + + + 5 + 3 + + + + + 1 + + + 7 + 3 + + + + += + + 3 + π + 3 + + + 2 + + + + 128 + + + "#; + test("el", "SimpleSpeak", expr, "κλάσμα, 1 προς, 1 στον κύβο, τέλος κλάσματος; συν; κλάσμα, 1 προς, 3 στον κύβο, τέλος κλάσματος; μείον; κλάσμα, 1 προς, 5 στον κύβο, τέλος κλάσματος; μείον; κλάσμα, 1 προς, 7 στον κύβο, τέλος κλάσματος; συν αποσιωπητικά; ισούται με; κλάσμα, 3 π στον κύβο; η τετραγωνική ρίζα του 2; προς 128, τέλος κλάσματος")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_009() -> Result<()> { // + let expr = r#" + + + 1 + + 1×3 + + + + 1 + + 3×5 + + + + 1 + + 5×7 + + + + 1 + + 7×9 + + += + 1 + 2 + + + "#; + test("el", "SimpleSpeak", expr, "κλάσμα, 1 προς, 1 επί 3, τέλος κλάσματος; συν; κλάσμα, 1 προς, 3 επί 5, τέλος κλάσματος; συν; κλάσμα, 1 προς, 5 επί 7, τέλος κλάσματος; συν; κλάσμα, 1 προς, 7 επί 9, τέλος κλάσματος; συν αποσιωπητικά; ισούται με, 1 δεύτερο")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_010() -> Result<()> { // + let expr = r#" + + + 1 + + + 1 + 2 + + × + 3 + 2 + + + + + + 1 + + + 3 + 2 + + × + 5 + 2 + + + + + + 1 + + + 5 + 2 + + × + 7 + 2 + + + + + + 1 + + + 7 + 2 + + × + 9 + 2 + + + + += + + + π + 2 + + 8 + + 16 + + + "#; + test("el", "SimpleSpeak", expr, "κλάσμα, 1 προς, 1 στο τετράγωνο, επί 3 στο τετράγωνο, τέλος κλάσματος; συν; κλάσμα, 1 προς, 3 στο τετράγωνο, επί 5 στο τετράγωνο, τέλος κλάσματος; συν; κλάσμα, 1 προς, 5 στο τετράγωνο, επί 7 στο τετράγωνο, τέλος κλάσματος; συν; κλάσμα, 1 προς, 7 στο τετράγωνο, επί 9 στο τετράγωνο, τέλος κλάσματος; συν αποσιωπητικά; ισούται με; κλάσμα, π στο τετράγωνο, μείον 8, προς 16, τέλος κλάσματος")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_011() -> Result<()> { // + let expr = r#" + + β+ + γ + δ + + ε + "#; + test("el", "SimpleSpeak", expr, "βήτα συν γάμμα προς δέλτα; μείον έψιλον")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_012() -> Result<()> { // + let expr = r#" + + + + β+γ + + δ+ε + + + "#; + test("el", "SimpleSpeak", expr, "κλάσμα, βήτα συν γάμμα, προς, δέλτα συν έψιλον, τέλος κλάσματος")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_013() -> Result<()> { // + let expr = r#" + + + + βγ + δ + + +ε + "#; + test("el", "SimpleSpeak", expr, "κλάσμα, βήτα μείον γάμμα, προς δέλτα, τέλος κλάσματος; συν έψιλον")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_014() -> Result<()> { // same + let expr = r#" + + α+β+γ+δ + "#; + test("el", "SimpleSpeak", expr, "άλφα συν βήτα συν γάμμα συν δέλτα")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_015() -> Result<()> { // + let expr = r#" + + α+ + β + γ + + +δ + "#; + test("el", "SimpleSpeak", expr, "άλφα συν βήτα προς γάμμα; συν δέλτα")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_016() -> Result<()> { // + let expr = r#" + + + α + + β+γ+δ + + + "#; + test("el", "SimpleSpeak", expr, "κλάσμα, άλφα προς, βήτα συν γάμμα συν δέλτα, τέλος κλάσματος")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_017() -> Result<()> { // + let expr = r#" + + + + α+β + + γ+δ + + + "#; + test("el", "SimpleSpeak", expr, "κλάσμα, άλφα συν βήτα, προς, γάμμα συν δέλτα, τέλος κλάσματος")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_018() -> Result<()> { // same + let expr = r#" + + ( + + α+β + )( + + γ+δ + ) + "#; + test("el", "SimpleSpeak", expr, "ανοίγει παρένθεση; άλφα συν βήτα; κλείνει παρένθεση; φορές; ανοίγει παρένθεση; γάμμα συν δέλτα; κλείνει παρένθεση")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_019() -> Result<()> { // + let expr = r#" + + + + χ+ + ψ + 2 + + + + κ+1 + + + "#; + test("el", "SimpleSpeak", expr, "κλάσμα, χ συν ψ στο τετράγωνο, προς, καπα συν 1, τέλος κλάσματος")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_020() -> Result<()> { // + let expr = r#" + + χ+ + + + ψ + 2 + + + κ + + +1 + "#; + test("el", "SimpleSpeak", expr, "χ συν; κλάσμα, ψ στο τετράγωνο, προς καπα, τέλος κλάσματος; συν 1")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_021() -> Result<()> { // + let expr = r#" + + + + β×( + + γ+δ + ) + + + ε + 2 + + + + + "#; + test("el", "SimpleSpeak", expr, "κλάσμα, βήτα επί; ανοίγει παρένθεση; γάμμα συν δέλτα; κλείνει παρένθεση, προς, έψιλον στο τετράγωνο, τέλος κλάσματος")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_022() -> Result<()> { // + let expr = r#" + + + 1 + + + 1 + + 2π + + + + + + 1 + + + 3 + + 2π + + + + + + 1 + + + 5 + + 2π + + + + + + 1 + + + 7 + + 2π + + + + += + + ( + + + 2 + + 2π + + 1 + ) + π + + 2π + + + Β + π + + + + 2( + + 2π + )! + + + "#; + test("el", "SimpleSpeak", expr, "κλάσμα, 1 προς, 1 που υψώνεται στη 2 π τέλος δύναμης; τέλος κλάσματος; συν; κλάσμα, 1 προς, 3 που υψώνεται στη 2 π τέλος δύναμης; τέλος κλάσματος; συν; κλάσμα, 1 προς, 5 που υψώνεται στη 2 π τέλος δύναμης; τέλος κλάσματος; συν; κλάσμα, 1 προς, 7 που υψώνεται στη 2 π τέλος δύναμης; τέλος κλάσματος; συν αποσιωπητικά; ισούται με; κλάσμα, ανοίγει παρένθεση; 2 που υψώνεται στη 2 π τέλος δύναμης; μείον 1; κλείνει παρένθεση; π που υψώνεται στη 2 π τέλος δύναμης; κεφαλαίο βήτα δείκτης π; προς, 2; ανοίγει παρένθεση, 2 π, κλείνει παρένθεση; παραγοντικό, τέλος κλάσματος")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_023() -> Result<()> { // + let expr = r#" + + + 1 + + + 1 + + 2π + + + + + 1 + + + 2 + + 2π + + + + + + 1 + + + 3 + + 2π + + + + + 1 + + + 4 + + 2π + + + + += + + ( + + + 2 + + 2π1 + + 1 + ) + π + + 2π + + + Β + π + + + + ( + + 2π + )! + + + "#; + test("el", "SimpleSpeak", expr, "κλάσμα, 1 προς, 1 που υψώνεται στη 2 π τέλος δύναμης; τέλος κλάσματος; μείον; κλάσμα, 1 προς, 2 που υψώνεται στη 2 π τέλος δύναμης; τέλος κλάσματος; συν; κλάσμα, 1 προς, 3 που υψώνεται στη 2 π τέλος δύναμης; τέλος κλάσματος; μείον; κλάσμα, 1 προς, 4 που υψώνεται στη 2 π τέλος δύναμης; τέλος κλάσματος; συν αποσιωπητικά; ισούται με; κλάσμα, ανοίγει παρένθεση; 2 που υψώνεται στη 2 π μείον 1 τέλος δύναμης; μείον 1; κλείνει παρένθεση; π που υψώνεται στη 2 π τέλος δύναμης; κεφαλαίο βήτα δείκτης π; προς, ανοίγει παρένθεση, 2 π, κλείνει παρένθεση; παραγοντικό, τέλος κλάσματος")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_024() -> Result<()> { // + let expr = r#" + + + 1 + + + 1 + + 2π+1 + + + + + 1 + + + 3 + + 2π+1 + + + + + + 1 + + + 5 + + 2π+1 + + + + + 1 + + + 7 + + 2π+1 + + + + += + + + π + + 2π+1 + + + Ε + π + + + + + 2 + + 2π+2 + + ( + + 2π + )! + + + "#; + test("el", "SimpleSpeak", expr, "κλάσμα, 1 προς, 1 που υψώνεται στη 2 π συν 1 τέλος δύναμης; τέλος κλάσματος; μείον; κλάσμα, 1 προς, 3 που υψώνεται στη 2 π συν 1 τέλος δύναμης; τέλος κλάσματος; συν; κλάσμα, 1 προς, 5 που υψώνεται στη 2 π συν 1 τέλος δύναμης; τέλος κλάσματος; μείον; κλάσμα, 1 προς, 7 που υψώνεται στη 2 π συν 1 τέλος δύναμης; τέλος κλάσματος; συν αποσιωπητικά; ισούται με; κλάσμα, π που υψώνεται στη 2 π συν 1 τέλος δύναμης; κεφαλαίο έψιλον δείκτης π; προς, 2 που υψώνεται στη 2 π συν 2 τέλος δύναμης; ανοίγει παρένθεση, 2 π, κλείνει παρένθεση; παραγοντικό, τέλος κλάσματος")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_025() -> Result<()> { // + let expr = r#" + + + + + ( + + α+χ + ) + ν + + = + α + ν + + +ν + α + + ν1 + + χ+ + + ν(ν1) + + 2! + + + α + + ν2 + + + χ + 2 + + + + + + + + + + ν(ν1)(ν2) + + 3! + + + α + + ν3 + + + χ + 3 + + + + + + + "#; + test("el", "SimpleSpeak", expr, "2 σειρές; σειρά 1; ανοίγει παρένθεση, άλφα συν χ, κλείνει παρένθεση στην νί οστή δύναμη; ισούται με; άλφα στην νί οστή δύναμη; συν; νί; άλφα υψωμένο στην νί μείον 1 τέλος δύναμης; χ; συν; το κλάσμα με αριθμητή; νί; ανοίγει παρένθεση, νί μείον 1, κλείνει παρένθεση; και παρονομαστή 2 παραγοντικό; άλφα υψωμένο στην νί μείον 2 τέλος δύναμης; χ στο τετράγωνο; σειρά 2; συν το κλάσμα με αριθμητή; νί; ανοίγει παρένθεση, νί μείον 1, κλείνει παρένθεση; ανοίγει παρένθεση, νί μείον 2, κλείνει παρένθεση; και παρονομαστή 3 παραγοντικό; άλφα υψωμένο στην νί μείον 3 τέλος δύναμης; χ στον κύβο; συν αποσιωπητικά")?; + return Ok(()); + //theodora. fails. In Clearspeak it is recognized correctly as two rows. + //Now it reads: 2 εξισώσεις; εξίσωση 1; ανοίγει παρένθεση, άλφα συν χ, κλείνει παρένθεση στην νί οστή; ισούται με; άλφα στην νί οστή, συν; νί; άλφα που υψώνεται στη νί μείον 1 τέλος δύναμης; χ; συν; κλάσμα, νί; ανοίγει παρένθεση, νί μείον 1, κλείνει παρένθεση, προς, 2 παραγοντικό, τέλος κλάσματος; άλφα που υψώνεται στη νί μείον 2 τέλος δύναμης; χ στο τετράγωνο; εξίσωση 2; συν κλάσμα, νί; ανοίγει παρένθεση, νί μείον 1, κλείνει παρένθεση; ανοίγει παρένθεση, νί μείον 2, κλείνει παρένθεση, προς, 3 παραγοντικό, τέλος κλάσματος; άλφα που υψώνεται στη νί μείον 3 τέλος δύναμης; χ στον κύβο; συν αποσιωπητικά + +} +#[test] +fn uoa_corpus_026() -> Result<()> { // + let expr = r#" + + + α + χ + + = + e + + χlnα + + =1+χlnα+ + + + + ( + + χlnα + ) + 2 + + + + 2! + + + + + + + ( + + χlnα + ) + 3 + + + + 3! + + + + "#; + test("el", "SimpleSpeak", expr, "άλφα στην χ οστή, ισούται με; e που υψώνεται στη χ, ο φυσικός λογάριθμος, του άλφα τέλος δύναμης; ισούται με; 1 συν; χ, ο φυσικός λογάριθμος, του άλφα; συν; κλάσμα, ανοίγει παρένθεση; χ, ο φυσικός λογάριθμος, του άλφα; κλείνει παρένθεση στο τετράγωνο, προς, 2 παραγοντικό, τέλος κλάσματος; συν; κλάσμα, ανοίγει παρένθεση; χ, ο φυσικός λογάριθμος, του άλφα; κλείνει παρένθεση στον κύβο, προς, 3 παραγοντικό, τέλος κλάσματος; συν αποσιωπητικά")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_027() -> Result<()> { // + let expr = r#" + + lnχ=2{ + ( + + + + χ1 + + χ+1 + + + )+ + 1 + 3 + + + + ( + + + + χ1 + + χ+1 + + + ) + 3 + + + + 1 + 5 + + + + ( + + + + χ1 + + χ+1 + + + ) + 5 + + + } + "#; + test("el", "SimpleSpeak", expr, "ο φυσικός λογάριθμος, του χ; ισούται με; 2; ανοίγει άγκιστρο; ανοίγει παρένθεση; κλάσμα, χ μείον 1, προς, χ συν 1, τέλος κλάσματος; κλείνει παρένθεση; συν; 1 τρίτο; ανοίγει παρένθεση; κλάσμα, χ μείον 1, προς, χ συν 1, τέλος κλάσματος; κλείνει παρένθεση στον κύβο; συν; 1 πέμπτο; ανοίγει παρένθεση; κλάσμα, χ μείον 1, προς, χ συν 1, τέλος κλάσματος; κλείνει παρένθεση στην πέμπτη; συν αποσιωπητικά; κλείνει άγκιστρο")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_028() -> Result<()> { // + let expr = r#" + + + + 2sinμπ + π + + ( + + + + sinχ + + 1 + μ + 2 + + + + + + 2sin2χ + + + 2 + 2 + + + μ + 2 + + + + + + + 3sin3χ + + + 3 + 2 + + + μ + 2 + + + + + ) + "#; + test("el", "SimpleSpeak", expr, "κλάσμα, 2, ημίτονο του μί π, προς π, τέλος κλάσματος; ανοίγει παρένθεση; κλάσμα, ημίτονο του χ, προς, 1 μείον, μί στο τετράγωνο, τέλος κλάσματος; μείον; κλάσμα, 2, ημίτονο του 2 χ, προς, 2 στο τετράγωνο, μείον, μί στο τετράγωνο, τέλος κλάσματος; συν; κλάσμα, 3, ημίτονο του 3 χ, προς, 3 στο τετράγωνο, μείον, μί στο τετράγωνο, τέλος κλάσματος; μείον αποσιωπητικά; κλείνει παρένθεση")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_029() -> Result<()> { // + let expr = r#" + + 1+ + χ + + 1+ + χ + + 1+ + χ + + 1+ + χ + + 1+ + χ + + + + + + + + + + + + "#; + // TODO: add expected speech + test("el", "SimpleSpeak", expr, "1 συν; κλάσμα, χ προς, 1 συν; κλάσμα, χ προς, 1 συν; κλάσμα, χ προς, 1 συν; κλάσμα, χ προς, 1 συν; κλάσμα, χ προς αποσιωπητικά, τέλος κλάσματος; τέλος κλάσματος; τέλος κλάσματος; τέλος κλάσματος; τέλος κλάσματος")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_030() -> Result<()> { // + let expr = r#"φ'(χ)+φ(χ)×ψ+ζχ×ψ"#; + test("el", "SimpleSpeak", expr, "κλάσμα, φ τόνος, του χ, συν, φ του χ, επί ψ; συν ζήτα, προς, χ επί ψ, τέλος κλάσματος")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_031() -> Result<()> { // + let expr = r#" + + χ= + + β± + + + β + 2 + + 4αγ + + + + 2α + + + "#; + test("el", "SimpleSpeak", expr, "χ ισούται με; κλάσμα, μείον βήτα, συν πλήν; η τετραγωνική ρίζα του βήτα στο τετράγωνο, μείον, 4 φορές άλφα φορές γάμμα, τέλος ρίζας; προς, 2 φορές άλφα, τέλος κλάσματος")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_032() -> Result<()> { // + let expr = r#" + + + + + β + γ + + + + +δε + "#; + test("el", "SimpleSpeak", expr, "η τετραγωνική ρίζα του βήτα προς γάμμα; τέλος ρίζας; συν δέλτα μείον έψιλον")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_033() -> Result<()> { // + let expr = r#" + + + + + β + + γ+δ + + + + ε + "#; + test("el", "SimpleSpeak", expr, "η τετραγωνική ρίζα του κλάσματος, βήτα προς, γάμμα συν δέλτα, τέλος κλάσματος; τέλος ρίζας; μείον έψιλον")?; + return Ok(()); + //theodora. fails. needs genitive clause. Now reads: η τετραγωνική ρίζα το κλάσμα, βήτα προς, γάμμα συν δέλτα, τέλος κλάσματος; τέλος ρίζας; μείον έψιλον +} + +#[test] +fn uoa_corpus_034() -> Result<()> { // + let expr = r#" + + + + + β + γ + + ε + + + "#; + test("el", "SimpleSpeak", expr, "η τετραγωνική ρίζα του βήτα προς γάμμα; μείον έψιλον, τέλος ρίζας")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_035() -> Result<()> { // + let expr = r#" + + + + β+γ + + + + δ + 2 + + + "#; + test("el", "SimpleSpeak", expr, "η τετραγωνική ρίζα του βήτα συν γάμμα, τέλος ρίζας; συν, δέλτα στο τετράγωνο")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_036() -> Result<()> { // + let expr = r#" + + + + + β + + +γ + δ + + + "#; + test("el", "SimpleSpeak", expr, "κλάσμα, η τετραγωνική ρίζα του βήτα; συν γάμμα, προς δέλτα, τέλος κλάσματος")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_037() -> Result<()> { // + let expr = r#" + + + + + π + + + 2 + + + + + π + 2 + + + + + "#; + test("el", "SimpleSpeak", expr, "κλάσμα, η τετραγωνική ρίζα του π; προς 2, τέλος κλάσματος; είναι διάφορο της τετραγωνικής ρίζα του π προς 2; τέλος ρίζας")?; + return Ok(()); + //theodora. fails with current rules. Should be okay when adding genitive clause +} + +#[test] +fn uoa_corpus_038() -> Result<()> { // + let expr = r#" + + + + 1+ + + 2+ + + 2+ + + 2+ + + + + + + + + + "#; + test("el", "SimpleSpeak", expr, "η τετραγωνική ρίζα του 1 συν; η τετραγωνική ρίζα του 2 συν; η τετραγωνική ρίζα του 2 συν; η τετραγωνική ρίζα του 2 συν αποσιωπητικά, τέλος ρίζας; τέλος ρίζας; τέλος ρίζας; τέλος ρίζας")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_039() -> Result<()> { // + let expr = r#" + + d( + + χ,ψ + )= + + + + ( + + + χ + 1 + + + ψ + 1 + + + ) + 2 + + + + + ( + + + χ + 2 + + + ψ + 2 + + + ) + 2 + + + + + "#; + test("el", "SimpleSpeak", expr, "d; ανοίγει παρένθεση; χ κόμμα, ψ; κλείνει παρένθεση; ισούται με; την τετραγωνική ρίζα του ανοίγει παρένθεση; χ δείκτης 1; μείον, ψ δείκτης 1; κλείνει παρένθεση στο τετράγωνο; συν; ανοίγει παρένθεση; χ δείκτης 2; μείον, ψ δείκτης 2; κλείνει παρένθεση στο τετράγωνο, τέλος ρίζας")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_040() -> Result<()> { // + let expr = r#" + + Σ= + + + + α + β + + + 2π×φ(χ)× + + 1+ + + [ + φ'(χ) ] + 2 + + + + dχ + + + + "#; + test("el", "SimpleSpeak", expr, "κεφαλαίο σίγμα, ισούται με; ολοκλήρωμα από άλφα ως βήτα του; 2 π επί φ του χ, επί; η τετραγωνική ρίζα του 1 συν; ανοίγει αγκύλη, φ τόνος, του χ; κλείνει αγκύλη στο τετράγωνο, τέλος ρίζας; d χ")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_041() -> Result<()> { // + let expr = r#" + + σ= + + [ + + + + + + + ( + + χ + χ + ¯ + + + ) + 2 + + + + ν + + ] + + + "#; + test("el", "SimpleSpeak", expr, "σίγμα ισούται με; την τετραγωνική ρίζα του ανοίγει αγκύλη; κλάσμα, άθροισμα του ανοίγει παρένθεση; χ μείον χ παύλα; κλείνει παρένθεση στο τετράγωνο, προς νί, τέλος κλάσματος; κλείνει αγκύλη, τέλος ρίζας")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_042() -> Result<()> { // + let expr = r#" + + Ω= + + Ω + ¯ + + + Ω + + + "#; + test("el", "SimpleSpeak", expr, "μερικό διαφορικό, κεφαλαίο ωμέγα; ισούται με; κλάσμα, κεφαλαίο ωμέγα παύλα; προς κεφαλαίο ωμέγα, τέλος κλάσματος")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_043() -> Result<()> { // same + let expr = r#" + + + υ + τ + + ( + + χ,τ + )=( + + Λ( + χ + )υ( + + χ,τ + ) + ) + "#; + test("el", "SimpleSpeak", expr, "ύψιλον δείκτης τάαφ; ανοίγει παρένθεση; χ κόμμα, τάαφ; κλείνει παρένθεση; ισούται με; ανάδελτα του ανοίγει παρένθεση; κεφαλαίο λάμδα, του χ; ανάδελτα του ύψιλον; ανοίγει παρένθεση; χ κόμμα, τάαφ; κλείνει παρένθεση; κλείνει παρένθεση")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_044() -> Result<()> { // same + let expr = r#" + + + + Δ + + υ( + χ + )= + + + Κ,σ + + υ + "#; + test("el", "SimpleSpeak", expr, "το ανάδελτα δείκτης, κεφαλαίο δέλτα; ύψιλον του χ; ισούται με; το ανάδελτα δείκτης; κεφαλαίο καπα, κόμμα, σίγμα τέλος δείκτη; ύψιλον")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_045() -> Result<()> { // + let expr = r#" + + + + 0 + + + υ + ν + + = + υ + ν + + + "#; + test("el", "SimpleSpeak", expr, "μερικό διαφορικό στην 0; ύψιλον δείκτης νί; ισούται με, ύψιλον δείκτης νί")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_046() -> Result<()> { // + let expr = r#" + + + + 2 + + + υ + ν + + = + 1 + κ + + ( + + + + 1 + + + υ + ν + + + + 1 + + + υ + + ν1 + + + ) + "#; + test("el", "SimpleSpeak", expr, "μερικό διαφορικό στο τετράγωνο; ύψιλον δείκτης νί; ισούται με; 1 προς καπα; ανοίγει παρένθεση; μερικό διαφορικό στην πρώτη; ύψιλον δείκτης νί; μείον; μερικό διαφορικό στην πρώτη; ύψιλον δείκτης, νί μείον 1 τέλος δείκτη; κλείνει παρένθεση")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_047() -> Result<()> { // + let expr = r#" + + α + + + Δ + + + η + Δ + ν + + + "#; + test("el", "SimpleSpeak", expr, "άλφα; νόρμα του ανάδελτα δείκτης, κεφαλαίο δέλτα; ήτα δείκτης, κεφαλαίο δέλτα, στην νί οστή")?; + return Ok(()); + //theodora. fails with current rules. Sould be fine when we add genitive. + // //Now reads: άλφα; νόρμα του το ανάδελτα δείκτης, κεφαλαίο δέλτα; ήτα δείκτης, κεφαλαίο δέλτα, στην νί οστή +} + +#[test] +fn uoa_corpus_048() -> Result<()> { // + let expr = r#" + + + + + d + 2 + + υ + + d + λ + 2 + + + + + "#; + test("el", "SimpleSpeak", expr, "κλάσμα, d στο τετράγωνο, ύψιλον, προς, d, λάμδα στο τετράγωνο, τέλος κλάσματος")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_049() -> Result<()> { // same + let expr = r#" + + ( + + Φ( + + τ,υ( + τ + ) + ) + ) + "#; + test("el", "SimpleSpeak", expr, "ανάδελτα του ανοίγει παρένθεση; κεφαλαίο φ; ανοίγει παρένθεση; τάαφ κόμμα; ύψιλον του τάαφ; κλείνει παρένθεση; κλείνει παρένθεση")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_050() -> Result<()> { // same + let expr = r#" + + + υ + ¨ + + ( + τ + )=Φ( + + τ,υ( + τ + ) + ) + "#; + test("el", "SimpleSpeak", expr, "ύψιλον διπλή κουκκίδα; του τάαφ; ισούται με; ανάδελτα του κεφαλαίο φ; ανοίγει παρένθεση; τάαφ κόμμα; ύψιλον του τάαφ; κλείνει παρένθεση")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_051() -> Result<()> { // + let expr = r#" + + | + Η( + + τ,χ + ) |φ( + τ + ) + + | χ | + α + + +γ( + τ + ) + "#; + test("el", "SimpleSpeak", expr, "η απόλυτη τιμή του ανάδελτα του κεφαλαίο ήτα; ανοίγει παρένθεση; τάαφ κόμμα, χ; κλείνει παρένθεση τέλος απόλυτης τιμής; είναι μικρότερο από ή ίσο με; φ του τάαφ; η απόλυτη τιμή του χ στην άλφα οστή; συν, γάμμα του τάαφ")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_052() -> Result<()> { // same + let expr = r#" + + + φ + + + ( + + + υ + ν + + + )0 + "#; + test("el", "SimpleSpeak", expr, "φ τόνος, του; ανοίγει παρένθεση; ύψιλον δείκτης νί; κλείνει παρένθεση; βέλος προς τα δεξιά 0")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_053() -> Result<()> { // + let expr = r#" + + + + + υ + ˜ + + + ν + + | + + + φ + + + ( + + + υ + ν + + + ), + + υ + ˜ + + + ν + + | + "#; + // TODO: add expected speech + test("el", "SimpleSpeak", expr, "νόρμα του ύψιλον κυματοειδής γραμμή, δείκτης νί; είναι μεγαλύτερο από ή ίσο με; την απόλυτη τιμή του αριστερά γωνιακή αγκύλη; φ τόνος, του; ανοίγει παρένθεση; ύψιλον δείκτης νί; κλείνει παρένθεση; κόμμα; ύψιλον κυματοειδής γραμμή, δείκτης νί; δεξιά γωνιακή αγκύλη")?; + return Ok(()); + //theodora. fails with current rules. Needs accusative rule for absolute value in SimpleSpeak because right now it only exists in Clearspeak and it probably gets it from definitions + // Now reads: νόρμα του ύψιλον κυματοειδής γραμμή, δείκτης νί; είναι μεγαλύτερο από ή ίσο με; η απόλυτη τιμή του αριστερά γωνιακή αγκύλη; φ τόνος, του; ανοίγει παρένθεση; ύψιλον δείκτης νί; κλείνει παρένθεση; κόμμα; ύψιλον κυματοειδής γραμμή, δείκτης νί; δεξιά γωνιακή αγκύλη + } + +#[test] +fn uoa_corpus_054() -> Result<()> { // + let expr = r#" + + + + + + ξ + + + υ + 1 + + + + + τ + ξ + + + + + "#; + test("el", "SimpleSpeak", expr, "κλάσμα, μερικό διαφορικό στην ξ οστή; ύψιλον δείκτης 1; προς, μερικό διαφορικό, τάαφ στην ξ οστή, τέλος κλάσματος")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_055() -> Result<()> { // same + let expr = r#" + + ιΔυ + υ + τ + + φ + "#; + test("el", "SimpleSpeak", expr, "ιΔυ μείον, ύψιλον δείκτης τάαφ; φ")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_056() -> Result<()> { // same + let expr = r#" + + + Δ + ω + + υ+κ×υ=0 + "#; + test("el", "SimpleSpeak", expr, "κεφαλαίο δέλτα δείκτης ωμέγα; ύψιλον; συν, καπα επί ύψιλον; ισούται με 0")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_057() -> Result<()> { // same + let expr = r#" + + χ=ρ× + χ + + + + "#; + test("el", "SimpleSpeak", expr, "χ ισούται με, ρ επί χ τόνος")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_058() -> Result<()> { // + let expr = r#" + + + + + + + υ + + ω + + | + + ω=0 + + + "#; + test("el", "SimpleSpeak", expr, "κλάσμα, μερικό διαφορικό, ύψιλον, προς, μερικό διαφορικό, ωμέγα, τέλος κλάσματος; κάθετη γραμμη δείκτης, ωμέγα ισούται με 0 τέλος δείκτη")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_059() -> Result<()> { // + let expr = r#" + + + + + + 2 + + υ + + + v + 2 + + + + + λ + 2 + + υ=0 + "#; + test("el", "SimpleSpeak", expr, "κλάσμα, μερικό διαφορικό στο τετράγωνο; ύψιλον, προς, μερικό διαφορικό, v στο τετράγωνο, τέλος κλάσματος; μείον, λάμδα στο τετράγωνο, ύψιλον; ισούται με 0")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_060() -> Result<()> { // + let expr = r#" + + + + + + χ + ξ + + + + + γ + 2 + + ( + τ + )lnρ= + γ + 2 + + ( + τ + ) + + + χ + ξ + + + + + ρ + 2 + + + + + "#; + // TODO: add expected speech + test("el", "SimpleSpeak", expr, "κλάσμα, μερικό διαφορικό προς, μερικό διαφορικό, χ δείκτης ξ; τέλος κλάσματος; γάμμα δείκτης 2; του τάαφ; ο φυσικός λογάριθμος, του ρ; ισούται με; γάμμα δείκτης 2; του τάαφ; κλάσμα, χ δείκτης ξ; προς, ρ στο τετράγωνο, τέλος κλάσματος")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_061() -> Result<()> { // + let expr = r#" + + + 1 + ρ + + sin + + ωπ + + + ω + 0 + + + + + + + ω + + + "#; + // TODO: add expected speech + test("el", "SimpleSpeak", expr, "1 προς ρ; ημίτονο του; κλάσμα, ωμέγα π, προς, ωμέγα δείκτης 0; τέλος κλάσματος; κλάσμα, μερικό διαφορικό προς, μερικό διαφορικό, ωμέγα, τέλος κλάσματος")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_062() -> Result<()> { // same + let expr = r#" + + υ( + 0 + )= + υ + + + ( + 1 + )= + υ + + + ( + 0 + )= + υ + + + ( + 1 + )=0 + "#; + test("el", "SimpleSpeak", expr, "ύψιλον του 0, ισούται με, ύψιλον τόνος; του 1; ισούται με; ύψιλον διπλή παράγωγος; του 0; ισούται με; ύψιλον τριπλή παράγωγος; του 1; ισούται με 0")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_063() -> Result<()> { // same + let expr = r#" + + + υ + + ( + 4 + ) + + ( + τ + )=φ( + + τ,υ( + τ + ) + ) + "#; + test("el", "SimpleSpeak", expr, "η ανοίγει παρένθεση 4 κλείνει παρένθεση δύναμη του, ύψιλον; του τάαφ; ισούται με; φ; ανοίγει παρένθεση; τάαφ κόμμα; ύψιλον του τάαφ; κλείνει παρένθεση")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_064() -> Result<()> { // + let expr = r#" + + + + + + 2 + + + + + u + 2 + + + + Ξ( + + τ,σ + )=Γ( + + τ,σ + ) + "#; + test("el", "SimpleSpeak", expr, "κλάσμα, μερικό διαφορικό στο τετράγωνο, προς, μερικό διαφορικό, u στο τετράγωνο, τέλος κλάσματος; κεφαλαίο ξ; ανοίγει παρένθεση; τάαφ κόμμα, σίγμα; κλείνει παρένθεση; ισούται με; μείον κεφαλαίο γάμμα; ανοίγει παρένθεση; τάαφ κόμμα, σίγμα; κλείνει παρένθεση")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_065() -> Result<()> { // + let expr = r#" + + | + υ |=max{ + υ , + υ + + + , + υ + + + } + "#; + test("el", "SimpleSpeak", expr, "η απόλυτη τιμή του νόρμα του ύψιλον τέλος απόλυτης τιμής; ισούται με; μέγιστο του; συνόλου νόρμα του ύψιλον, κόμμα; νόρμα του ύψιλον τόνος; κόμμα; νόρμα του ύψιλον διπλή παράγωγος")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_066() -> Result<()> { // + let expr = r#" + + + + ( + + + υ + * + + + ) + + + + ( + τ + )= + + ( + + Τ + υ + * + + + ) + + + + ( + τ + ) + "#; + test("el", "SimpleSpeak", expr, "ανοίγει παρένθεση; ύψιλον αστερίσκος; κλείνει παρένθεση που υψώνεται στη τόνος τόνος, τέλος δύναμης; του τάαφ; ισούται με; ανοίγει παρένθεση; κεφαλαίο τάαφ; ύψιλον αστερίσκος; κλείνει παρένθεση που υψώνεται στη τόνος τόνος, τέλος δύναμης; του τάαφ")?; + return Ok(()); + //theodora. fails. Now reads: ανοίγει παρένθεση; ύψιλον αστερίσκος; κλείνει παρένθεση που υψώνεται στη τόνος τόνος, τέλος δύναμης; τάαφ; ισούται με; ανοίγει παρένθεση; κεφαλαίο τάαφ; ύψιλον αστερίσκος; κλείνει παρένθεση που υψώνεται στη τόνος τόνος, τέλος δύναμης; τάαφ +} + +#[test] +fn uoa_corpus_067() -> Result<()> { // + let expr = r#" + + + d + + dτ + + ( + + + + | + + υ + ˙ + + ( + τ + ) | + + π( + τ + )2 + + + υ + ˙ + + ( + τ + ) + )=Φ( + + τ,υ( + τ + ) + ) + "#; + test("el", "SimpleSpeak", expr, "κλάσμα, d προς, d τάαφ, τέλος κλάσματος; ανοίγει παρένθεση; η απόλυτη τιμή του ύψιλον τελεία; του τάαφ τέλος απόλυτης τιμής που υψώνεται στη π του τάαφ, μείον 2 τέλος δύναμης; ύψιλον τελεία; του τάαφ; κλείνει παρένθεση; ισούται με; ανάδελτα του κεφαλαίο φ; ανοίγει παρένθεση; τάαφ κόμμα; ύψιλον του τάαφ; κλείνει παρένθεση")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_068() -> Result<()> { // + let expr = r#"ddτ(υ2+2ΩΦ(υ)dχ)+2υτ2=2((ατ,υτ))"#; + test("el", "SimpleSpeak", expr, "κλάσμα, d προς, d τάαφ, τέλος κλάσματος; ανοίγει παρένθεση; νόρμα του ανάδελτα του ύψιλον στο τετράγωνο; συν; 2; ολοκλήρωμα επί του συνόλου κεφαλαίο ωμέγα του; κεφαλαίο φ του ύψιλον; d χ; κλείνει παρένθεση; συν; 2; νόρμα του κλάσματος, μερικό διαφορικό, ύψιλον, προς, μερικό διαφορικό, τάαφ, τέλος κλάσματος; στο τετράγωνο; ισούται με; 2; ανοίγει παρένθεση; ανοίγει παρένθεση; κλάσμα, μερικό διαφορικό, άλφα, προς, μερικό διαφορικό, τάαφ, τέλος κλάσματος; κόμμα; κλάσμα, μερικό διαφορικό, ύψιλον, προς, μερικό διαφορικό, τάαφ, τέλος κλάσματος; κλείνει παρένθεση; κλείνει παρένθεση")?; + return Ok(()); + //theodora. Needs genitive. Now reads: κλάσμα, d προς, d τάαφ, τέλος κλάσματος; ανοίγει παρένθεση; νόρμα του ανάδελτα του ύψιλον στο τετράγωνο; συν; 2; ολοκλήρωμα επί του συνόλου κεφαλαίο ωμέγα του; κεφαλαίο φ του ύψιλον; d χ; κλείνει παρένθεση; συν; 2; νόρμα του κλάσμα, μερικό διαφορικό, ύψιλον, προς, μερικό διαφορικό, τάαφ, τέλος κλάσματος; στο τετράγωνο; ισούται με; 2; ανοίγει παρένθεση; ανοίγει παρένθεση; κλάσμα, μερικό διαφορικό, άλφα, προς, μερικό διαφορικό, τάαφ, τέλος κλάσματος; κόμμα; κλάσμα, μερικό διαφορικό, ύψιλον, προς, μερικό διαφορικό, τάαφ, τέλος κλάσματος; κλείνει παρένθεση; κλείνει παρένθεση +} + +#[test] +fn uoa_corpus_069() -> Result<()> { // + let expr = r#"τ(υτ)Δυτ+φ'(υ)υτ=ατ+Δαυυτ"#; + test("el", "SimpleSpeak", expr, "κλάσμα, μερικό διαφορικό προς, μερικό διαφορικό, τάαφ, τέλος κλάσματος; ανοίγει παρένθεση; κλάσμα, μερικό διαφορικό, ύψιλον, προς, μερικό διαφορικό, τάαφ, τέλος κλάσματος; κλείνει παρένθεση; μείον; κεφαλαίο δέλτα; κλάσμα, μερικό διαφορικό, ύψιλον, προς, μερικό διαφορικό, τάαφ, τέλος κλάσματος; συν; φ τόνος, του ύψιλον; κλάσμα, μερικό διαφορικό, ύψιλον, προς, μερικό διαφορικό, τάαφ, τέλος κλάσματος; ισούται με; μείον κλάσμα, μερικό διαφορικό, άλφα, προς, μερικό διαφορικό, τάαφ, τέλος κλάσματος; συν, κεφαλαίο δέλτα, άλφα; μείον ύψιλον μείον; κλάσμα, μερικό διαφορικό, ύψιλον, προς, μερικό διαφορικό, τάαφ, τέλος κλάσματος")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_070() -> Result<()> { // + let expr = r#" + + + d + + dτ + + ( + + + + + + Α + + + 3 + 2 + + + + α + 2 + + + + + + Α + + dα + + dτ + + + 2 + + + )γ + + + Δυ + 2 + + + "#; + test("el", "SimpleSpeak", expr, "κλάσμα, d προς, d τάαφ, τέλος κλάσματος; ανοίγει παρένθεση; νόρμα του κεφαλαίο άλφα που υψώνεται στη 3 δεύτερα τέλος δύναμης; άλφα στο τετράγωνο; συν; νόρμα του κεφαλαίο άλφα; κλάσμα, d άλφα, προς, d τάαφ, τέλος κλάσματος; στο τετράγωνο; κλείνει παρένθεση; είναι μικρότερο από ή ίσο με; γάμμα; νόρμα του κεφαλαίο δέλτα, ύψιλον στο τετράγωνο")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_071() -> Result<()> { // + let expr = r#" + + + + + υ + μ + + + + τ + + + + + + ν + μ + + + + τ + + + + + + + υ + ¯ + + + μ + + + + χ + + = + + φ + ¯ + + + μ + + + "#; + test("el", "SimpleSpeak", expr, "κλάσμα, μερικό διαφορικό; ύψιλον δείκτης μί; προς, μερικό διαφορικό, τάαφ, τέλος κλάσματος; συν; κλάσμα, μερικό διαφορικό; νί δείκτης μί; προς, μερικό διαφορικό, τάαφ, τέλος κλάσματος; συν; κλάσμα, μερικό διαφορικό; ύψιλον παύλα, δείκτης μί; προς, μερικό διαφορικό χ, τέλος κλάσματος; ισούται με, φ παύλα, δείκτης μί")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_072() -> Result<()> { // + let expr = r#"sup0τΤ[(υνυ)τ]+sup0τΤ[(θνθ)τ] Γ(λν+118+μν+118)"#; + test("el", "SimpleSpeak", expr, "σουπρέμουμ για 0, είναι μικρότερο από ή ίσο με; τάαφ, είναι μικρότερο από ή ίσο με; κεφαλαίο τάαφ; του; ανοίγει αγκύλη; κλάσμα, μερικό διαφορικό; ανοίγει παρένθεση; ύψιλον δείκτης νί; μείον ύψιλον; κλείνει παρένθεση, προς, μερικό διαφορικό, τάαφ, τέλος κλάσματος; κλείνει αγκύλη; συν; σουπρέμουμ για 0, είναι μικρότερο από ή ίσο με; τάαφ, είναι μικρότερο από ή ίσο με; κεφαλαίο τάαφ; του; ανοίγει αγκύλη; κλάσμα, μερικό διαφορικό; ανοίγει παρένθεση; θήτα δείκτης νί; μείον θήτα; κλείνει παρένθεση, προς, μερικό διαφορικό, τάαφ, τέλος κλάσματος; κλείνει αγκύλη; είναι μικρότερο από ή ίσο με; κεφαλαίο γάμμα; ανοίγει παρένθεση; λάμδα δείκτης, νί συν 1 τέλος δείκτη, που υψώνεται στη μείον 1 όγδοο τέλος δύναμης; συν; μί δείκτης, νί συν 1 τέλος δείκτη, που υψώνεται στη μείον 1 όγδοο τέλος δύναμης; κλείνει παρένθεση")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_073() -> Result<()> { // + let expr = r#" + + + + d[ + + + φ(χ) + + τ(χ) + + ] + + dx + + = + + τ(χ)× + + d[ + φ(χ) ] + + dx + + φ(χ)× + + d[ + τ(χ) ] + + dx + + + + + + [ + τ(χ) ] + 2 + + + + + "#; + test("el", "SimpleSpeak", expr, "κλάσμα, d του; ανοίγει αγκύλη; κλάσμα, φ του χ, προς, τάαφ του χ, τέλος κλάσματος; κλείνει αγκύλη, προς, d x, τέλος κλάσματος; ισούται με; κλάσμα, τάαφ του χ, επί; κλάσμα, d; ανοίγει αγκύλη, φ του χ, κλείνει αγκύλη, προς, d x, τέλος κλάσματος; μείον; φ του χ, επί; κλάσμα, d; ανοίγει αγκύλη, τάαφ του χ, κλείνει αγκύλη, προς, d x, τέλος κλάσματος; προς, ανοίγει αγκύλη, τάαφ του χ, κλείνει αγκύλη στο τετράγωνο, τέλος κλάσματος")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_074() -> Result<()> { // same + let expr = r#" + + + δ + + Κ,σ + + >0 + "#; + test("el", "SimpleSpeak", expr, "δέλτα δείκτης; κεφαλαίο καπα, κόμμα, σίγμα τέλος δείκτη; είναι μεγαλύτερο από 0")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_075() -> Result<()> { // + let expr = r#" + + + β + σ + Κ + + 0 + "#; + test("el", "SimpleSpeak", expr, "βήτα δείκτης σίγμα, στην κεφαλαίο καπα οστή; είναι διάφορο του 0")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_076() -> Result<()> { // + let expr = r#" + + + χ + σ + + = + + + + ΚΜ + + + + β + σ + Κ + + + χ + Κ + + + + "#; + test("el", "SimpleSpeak", expr, "χ δείκτης σίγμα; ισούται με; άθροισμα για κεφαλαίο καπα, ανήκει κεφαλαίο μί του; βήτα δείκτης σίγμα, στην κεφαλαίο καπα οστή; χ δείκτης, κεφαλαίο καπα")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_077() -> Result<()> { // same + let expr = r#" + + + + { + + χ + Κ + + } + Κ + + + "#; + test("el", "SimpleSpeak", expr, "ανοίγει άγκιστρο; χ δείκτης, κεφαλαίο καπα; κλείνει άγκιστρο δείκτης, κεφαλαίο καπα")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_078() -> Result<()> { // + let expr = r#" + + + υ + Κ + + =φ( + + + χ + Κ + + + ),ΚΜ + "#; + test("el", "SimpleSpeak", expr, "ύψιλον δείκτης, κεφαλαίο καπα; ισούται με; φ του; ανοίγει παρένθεση; χ δείκτης, κεφαλαίο καπα; κλείνει παρένθεση; κόμμα; για κάθε; κεφαλαίο καπα, ανήκει κεφαλαίο μί")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_079() -> Result<()> { // + let expr = r#" + + + + 1 + + + υ + ν + + = + + + υ + ν + + + υ + + ν1 + + + κ + + + "#; + test("el", "SimpleSpeak", expr, "μερικό διαφορικό στην πρώτη; ύψιλον στην νί οστή; ισούται με; κλάσμα, ύψιλον στην νί οστή, μείον; ύψιλον που υψώνεται στη νί μείον 1 τέλος δύναμης; προς καπα, τέλος κλάσματος")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_080() -> Result<()> { // + let expr = r#" + + + Φ + + Κ,σ + + ( + υ + )= + + + + + σ + + + + Ε + κ + + + + + + Α + + σ + σ + + + + + ( + + + υ + κ + + + υ + + σ + + + + + + ) + + "#; + test("el", "SimpleSpeak", expr, "κεφαλαίο φ δείκτης; κεφαλαίο καπα, κόμμα, σίγμα τέλος δείκτη; του ύψιλον; ισούται με; άθροισμα για σίγμα τόνος; ανήκει, κεφαλαίο έψιλον δείκτης καπα, του; κεφαλαίο άλφα που υψώνεται στη σίγμα σίγμα τόνος, τέλος δύναμης; ανοίγει παρένθεση; ύψιλον δείκτης καπα; μείον; ύψιλον δείκτης, σίγμα τόνος, τέλος δείκτη; κλείνει παρένθεση")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_081() -> Result<()> { // + let expr = r#" + + α + + | υ | + χ + 2 + + + + + υ,υ + Φ + + + "#; + test("el", "SimpleSpeak", expr, "άλφα; η απόλυτη τιμή του ύψιλον δείκτης χ, στο τετράγωνο; είναι μικρότερο από ή ίσο με; αριστερά γωνιακή αγκύλη; ύψιλον κόμμα, ύψιλον; δεξιά γωνιακή αγκύλη δείκτης, κεφαλαίο φ")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_082() -> Result<()> { // + let expr = r#" + + + Γ + 6 + + = + δ + 3 + + θ+ + δ + + + 7 + 2 + + + + + θ + 2 + + + + δ + + + 5 + 2 + + + + θ+1 + "#; + test("el", "SimpleSpeak", expr, "κεφαλαίο γάμμα δείκτης 6; ισούται με; δέλτα στον κύβο, θήτα; συν; δέλτα που υψώνεται στη 7 δεύτερα τέλος δύναμης; θήτα στο τετράγωνο; συν; δέλτα που υψώνεται στη 5 δεύτερα τέλος δύναμης; θήτα; συν 1")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_083() -> Result<()> { // + let expr = r#" + + + + υ + ¯ + + + Δ + 0 + + = + υ + Δ + 0 + + + "#; + test("el", "SimpleSpeak", expr, "ύψιλον παύλα, δείκτης, κεφαλαίο δέλτα, στην 0; ισούται με; ύψιλον δείκτης, κεφαλαίο δέλτα, στην 0")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_084() -> Result<()> { // + let expr = r#" + + + θ + 2 + + + υ + ν + + = + κ + + 1 + + ( + + + + 1 + + + υ + ν + + + + 1 + + + υ + + ν1 + + + ) + "#; + test("el", "SimpleSpeak", expr, "θήτα στο τετράγωνο; ύψιλον στην νί οστή; ισούται με; καπα στην μείον 1; ανοίγει παρένθεση; μερικό διαφορικό στην πρώτη; ύψιλον στην νί οστή; μείον; μερικό διαφορικό στην πρώτη; ύψιλον που υψώνεται στη νί μείον 1 τέλος δύναμης; κλείνει παρένθεση")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_085() -> Result<()> { // same + let expr = r#" + + χ + "#; + test("el", "SimpleSpeak", expr, "νόρμα του χ")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_086() -> Result<()> { // + let expr = r#" + + α + + η + Δ + + ν+1 + + χ + Γ + π + + + Μ + Δ + + ν+1 + + + "#; + test("el", "SimpleSpeak", expr, "άλφα; νόρμα του ήτα δείκτης, κεφαλαίο δέλτα, που υψώνεται στη νί συν 1 τέλος δύναμης; χ; είναι μικρότερο από ή ίσο με; κεφαλαίο γάμμα δείκτης π; κεφαλαίο μί δείκτης, κεφαλαίο δέλτα, που υψώνεται στη νί συν 1 τέλος δύναμης")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_087() -> Result<()> { // + let expr = r#" + + + Φ + 2 + + ( + + τ,χ + )=| + sinωτ | + + | χ | + 3 + + + "#; + test("el", "SimpleSpeak", expr, "κεφαλαίο φ δείκτης 2; ανοίγει παρένθεση; τάαφ κόμμα, χ; κλείνει παρένθεση; ισούται με; η απόλυτη τιμή του ημίτονο του ωμέγα τάαφ τέλος απόλυτης τιμής; η απόλυτη τιμή του χ στον κύβο")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_088() -> Result<()> { // + let expr = r#" + + Η( + + τ,χ + )= + + | χ | + + 1+α + + + "#; + test("el", "SimpleSpeak", expr, "κεφαλαίο ήτα; ανοίγει παρένθεση; τάαφ κόμμα, χ; κλείνει παρένθεση; ισούται με; μείον η απόλυτη τιμή του χ που υψώνεται στη 1 συν άλφα τέλος δύναμης")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_089() -> Result<()> { // same + let expr = r#" + + γ= + + log + + 2λ + + ( + + 2μ + ) + "#; + test("el", "SimpleSpeak", expr, "γάμμα ισούται με; το λογάριθμο με βάση 2 λάμδα; του; ανοίγει παρένθεση, 2 μί, κλείνει παρένθεση")?; + return Ok(()); + //theodora. fails. accusative rule doesn't include log with base +} + +#[test] +fn uoa_corpus_090() -> Result<()> { // + let expr = r#" + + + 1 + 2 + + μ< + 2 + + + π + + + 1 + + + λ + + + π + + + + + + "#; + test("el", "SimpleSpeak", expr, "1 δεύτερο, είναι μικρότερο από ή ίσο με; μί είναι μικρότερο από; 2 που υψώνεται στη π εκθέτης μείον; μείον 1 τέλος δύναμης; λάμδα που υψώνεται στη π εκθέτης μείον, τέλος δύναμης")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_091() -> Result<()> { // + let expr = r#" + + + + | υ | + + π( + τ + ) + + >1 + + | υ | + + π( + τ + ) + + + π + + + + + ρ( + υ + ) + + | υ | + + π( + τ + ) + + + π + + + + + + + "#; + test("el", "SimpleSpeak", expr, "η απόλυτη τιμή του ύψιλον δείκτης, π του τάαφ; είναι μεγαλύτερο από; 1, διπλό βέλος προς τα δεξιά; η απόλυτη τιμή του ύψιλον δείκτης, π του τάαφ, που υψώνεται στη π εκθέτης μείον, τέλος δύναμης; είναι μικρότερο από ή ίσο με; ρ του ύψιλον; είναι μικρότερο από ή ίσο με; η απόλυτη τιμή του ύψιλον δείκτης, π του τάαφ, που υψώνεται στη π εκθέτης συν, τέλος δύναμης")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_092() -> Result<()> { // + let expr = r#" + + + Β + Τ + + 1,π( + τ + ) + + = + + Β + ˜ + + + Τ + + 1,π( + τ + ) + + + + Ν + + + "#; + // TODO: add expected speech + test("el", "SimpleSpeak", expr, "κεφαλαίο βήτα δείκτης, κεφαλαίο τάαφ, που υψώνεται στη 1, π του τάαφ τέλος δύναμης; ισούται με; κεφαλαίο βήτα κυματοειδής γραμμή, δείκτης, κεφαλαίο τάαφ, που υψώνεται στη 1, π του τάαφ τέλος δύναμης; κυκλωμένο συν; οι πραγματικοί αριθμοί στην κεφαλαίο νί οστή")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_093() -> Result<()> { // + let expr = r#" + + υ( + + χ,τ + )= + γ + 1 + + ( + τ + )+ + γ + 2 + + ( + τ + )lnρ+ + υ + 0 + + ( + + χ,τ + ) + "#; + test("el", "SimpleSpeak", expr, "ύψιλον; ανοίγει παρένθεση; χ κόμμα, τάαφ; κλείνει παρένθεση; ισούται με; γάμμα δείκτης 1; του τάαφ; συν; γάμμα δείκτης 2; του τάαφ; ο φυσικός λογάριθμος, του ρ; συν; ύψιλον δείκτης 0; ανοίγει παρένθεση; χ κόμμα, τάαφ; κλείνει παρένθεση")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_094() -> Result<()> { // + let expr = r#" + + | + + υ + 1 + + |Γ + + | χ | + + Im + λ + 1 + + + + + "#; + test("el", "SimpleSpeak", expr, "η απόλυτη τιμή του ύψιλον δείκτης 1, τέλος απόλυτης τιμής; είναι μικρότερο από ή ίσο με; κεφαλαίο γάμμα; η απόλυτη τιμή του χ που υψώνεται στη φανταστικό μέρος, του, λάμδα δείκτης 1, τέλος δύναμης")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_095() -> Result<()> { // same + let expr = r#" + + Imλ( + τ + )=β+α + "#; + test("el", "SimpleSpeak", expr, "φανταστικό μέρος, του λάμδα του τάαφ; ισούται με, βήτα συν άλφα")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_096() -> Result<()> { // same + let expr = r#" + + Im + λ + + + Ν + 0 + + + + ( + + + τ + 0 + + + )= + β + 1 + + +2μ+ + λ + 1 + + + ν + 2 + + + "#; + test("el", "SimpleSpeak", expr, "φανταστικό μέρος, του; λάμδα δείκτης, κεφαλαίο νί δείκτης 0, τέλος δείκτη; του; ανοίγει παρένθεση; τάαφ δείκτης 0; κλείνει παρένθεση; ισούται με; μείον βήτα δείκτης 1; συν 2 μί συν, λάμδα δείκτης 1; μείον νί προς 2")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_097() -> Result<()> { // same + let expr = r#" + + + φ + ^ + + = + κ + 0 + + φ+ + Λ + 1 + + υ + "#; + test("el", "SimpleSpeak", expr, "φ καπέλο; ισούται με; καπα δείκτης 0; φ; συν, κεφαλαίο λάμδα δείκτης 1; ύψιλον")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_098() -> Result<()> { // same + let expr = r#" + + Λ + Σ + δ + + = + Α + δ + + + + Ρ + δ + + + "#; + test("el", "SimpleSpeak", expr, "κεφαλαίο λάμδα; κεφαλαίο σίγμα δείκτης δέλτα; ισούται με; κεφαλαίο άλφα δείκτης δέλτα; συν, κεφαλαίο ρ δείκτης δέλτα")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_099() -> Result<()> { // + let expr = r#" + + ι + + ( + + 1 + ) + + μ1 + + Λυ + υ + τ + + =φ + "#; + test("el", "SimpleSpeak", expr, "ιότα; ανοίγει παρένθεση, μείον 1, κλείνει παρένθεση που υψώνεται στη μί μείον 1 τέλος δύναμης; κεφαλαίο λάμδα, ύψιλον; μείον, ύψιλον δείκτης τάαφ; ισούται με φ")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_100() -> Result<()> { // + let expr = r#" + + + χ + 0 + + +χ+ + χ + 2 + + + + χ + 3 + + + + χ + 4 + + + + χ + 5 + + + + χ + 6 + + ++ + χ + + ν1 + + + "#; + test("el", "SimpleSpeak", expr, "χ στην 0 συν χ συν χ στο τετράγωνο, συν χ στον κύβο συν χ στην τέταρτη, συν χ στην πέμπτη, συν χ στην έκτη συν αποσιωπητικά, συν; χ που υψώνεται στη νί μείον 1 τέλος δύναμης")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_101() -> Result<()> { // same + let expr = r#" + + + + ( + + χ+ψ+ζ + ) + 2 + + + "#; + test("el", "SimpleSpeak", expr, "ανοίγει παρένθεση; χ συν ψ συν ζήτα; κλείνει παρένθεση στο τετράγωνο")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_102() -> Result<()> { // same + let expr = r#" + + + + ( + + χ+ψ + ) + 2 + + +ζ + "#; + test("el", "SimpleSpeak", expr, "ανοίγει παρένθεση, χ συν ψ, κλείνει παρένθεση στο τετράγωνο; συν ζήτα")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_103() -> Result<()> { // same + let expr = r#" + + χ+ + + ( + + ψ+ζ + ) + 2 + + + "#; + test("el", "SimpleSpeak", expr, "χ συν; ανοίγει παρένθεση; ψ συν ζήτα; κλείνει παρένθεση στο τετράγωνο")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_104() -> Result<()> { // same + let expr = r#" + + χ+ψ+ + ζ + 2 + + + "#; + test("el", "SimpleSpeak", expr, "χ συν ψ συν ζήτα στο τετράγωνο")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_105() -> Result<()> { // same + let expr = r#" + + + χ + 0 + + + + χ + 1 + + + "#; + test("el", "SimpleSpeak", expr, "χ δείκτης 0; συν χ δείκτης 1")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_106() -> Result<()> { // same + let expr = r#" + + + χ + ˙ + + + + χ + ¨ + + + + χ + ˜ + + + + χ + ^ + + + + χ + + + + + χ + + + + + χ + + + + + χ + * + + + "#; + test("el", "SimpleSpeak", expr, "χ τελεία, συν χ διπλή κουκκίδα; συν, χ κυματοειδής γραμμή; συν χ καπέλο, συν, χ διπλή παράγωγος; συν, χ τριπλή παράγωγος; συν χ τόνος, συν χ αστερίσκος")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_107() -> Result<()> { // + let expr = r#" + + + α + + 1,1 + + + + α + + 2,2 + + + "#; + test("el", "SimpleSpeak", expr, "άλφα στην 1,1, συν άλφα στην 2,2")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_108() -> Result<()> { // same + let expr = r#" + + + + + υ,υ + φ + + + "#; + test("el", "SimpleSpeak", expr, "αριστερά γωνιακή αγκύλη; ύψιλον κόμμα, ύψιλον; δεξιά γωνιακή αγκύλη δείκτης φ")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_109() -> Result<()> { // same + let expr = r#" + + + + + + κ + + + + α + κ + + + + "#; + test("el", "SimpleSpeak", expr, "άθροισμα για καπα ανήκει, στους πραγματικούς αριθμούς του; άλφα δείκτης καπα")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_110() -> Result<()> { // same + let expr = r#" + + + + + + ι=1 + Ν + + + + α + 2 + + + +β+ + γ + 2 + + + "#; + test("el", "SimpleSpeak", expr, "άθροισμα από ιότα ισούται με 1 ως κεφαλαίο νί του; άλφα στο τετράγωνο; συν βήτα συν, γάμμα στο τετράγωνο")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_111() -> Result<()> { // + let expr = r#" + + + ε + + + ε + + + ε + χ + + + + + + + "#; + test("el", "SimpleSpeak", expr, "έψιλον που υψώνεται στη έψιλον που υψώνεται στη έψιλον στην χ οστή τέλος δύναμης; τέλος εκθέτη")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_112() -> Result<()> { // + let expr = r#" + + + ε + + + ε + + + ε + χ + + + + + + + ε + + + ε + χ + + + + + ε + χ + + + "#; + test("el", "SimpleSpeak", expr, "έψιλον που υψώνεται στη έψιλον που υψώνεται στη έψιλον στην χ οστή τέλος δύναμης; τέλος εκθέτη; φορές; έψιλον που υψώνεται στη έψιλον στην χ οστή τέλος δύναμης; φορές, έψιλον στην χ οστή")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_113() -> Result<()> { // + let expr = r#" + + + ε + + ( + + + ε + + + ε + χ + + + + + + ε + χ + + +χ + ) + + + "#; + test("el", "SimpleSpeak", expr, "έψιλον που υψώνεται στη ανοίγει παρένθεση; έψιλον που υψώνεται στη έψιλον στην χ οστή τέλος δύναμης; συν, έψιλον στην χ οστή, συν χ; κλείνει παρένθεση τέλος δύναμης")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_114() -> Result<()> { // same + let expr = r#" + + + + + + ι=1 + ν + + + + α + ι + + + =1 + "#; + test("el", "SimpleSpeak", expr, "άθροισμα από ιότα ισούται με 1 ως νί του; άλφα δείκτης ιότα; ισούται με 1")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_115() -> Result<()> { // same + let expr = r#" + + + + + + ι=1 + ν + + + + α + ι + + + + β + ι + + + =1 + "#; + test("el", "SimpleSpeak", expr, "άθροισμα από ιότα ισούται με 1 ως νί του; άλφα δείκτης ιότα; συν, βήτα δείκτης ιότα; ισούται με 1")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_116() -> Result<()> { // + let expr = r#" + + 1+χ+ + χ + 2 + + + + χ + 3 + + + + χ + 4 + + ++ + χ + + ν1 + + += + 1 + + 1+χ + + + "#; + test("el", "SimpleSpeak", expr, "1 συν χ συν χ στο τετράγωνο, συν χ στον κύβο συν χ στην τέταρτη, συν αποσιωπητικά, συν; χ που υψώνεται στη νί μείον 1 τέλος δύναμης; συν αποσιωπητικά; ισούται με; κλάσμα, 1 προς, 1 συν χ, τέλος κλάσματος")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_117() -> Result<()> { // + let expr = r#" + + χ + + + χ + 2 + + + 2 + + + + + + χ + 3 + + + 3 + + + + + χ + 4 + + + 4 + + + + + + χ + 5 + + + 5 + + ±=log( + + 1+χ + ) + "#; + test("el", "SimpleSpeak", expr, "χ μείον; κλάσμα, χ στο τετράγωνο, προς 2, τέλος κλάσματος; συν; κλάσμα, χ στον κύβο, προς 3, τέλος κλάσματος; μείον; κλάσμα, χ στην τέταρτη, προς 4, τέλος κλάσματος; συν; κλάσμα, χ στην πέμπτη, προς 5, τέλος κλάσματος; συν πλήν, αποσιωπητικά; ισούται με; το λογάριθμο, του; ανοίγει παρένθεση, 1 συν χ, κλείνει παρένθεση")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_118() -> Result<()> { // same + let expr = r#" + + + + ( + + α+β + ) + 3 + + = + α + 3 + + +3 + α + 2 + + β+3α + β + 2 + + + + β + 3 + + + "#; + test("el", "SimpleSpeak", expr, "ανοίγει παρένθεση; άλφα συν βήτα; κλείνει παρένθεση στον κύβο; ισούται με; άλφα στον κύβο, συν; 3 φορές, άλφα στο τετράγωνο, φορές βήτα; συν; 3 φορές άλφα φορές, βήτα στο τετράγωνο; συν βήτα στον κύβο")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_119() -> Result<()> { // + let expr = r#" + + + χ + 1 + κ + + + + χ + 2 + κ + + + + χ + 3 + κ + + ++ + χ + ν + κ + + =0 + "#; + test("el", "SimpleSpeak", expr, "χ δείκτης 1, στην καπα οστή; συν, χ δείκτης 2, στην καπα οστή; συν, χ δείκτης 3, στην καπα οστή; συν αποσιωπητικά, συν, χ δείκτης νί, στην καπα οστή; ισούται με 0")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_120() -> Result<()> { // + let expr = r#" + + + χ + + + κ + 1 + + + + + + χ + + + κ + 2 + + + + + + χ + + + κ + 3 + + + + + + χ + + + κ + ν + + + + =0 + "#; + test("el", "SimpleSpeak", expr, "χ δείκτης, καπα στην πρώτη τέλος δείκτη; συν; χ δείκτης, καπα στο τετράγωνο τέλος δείκτη; συν, χ δείκτης, καπα στον κύβο τέλος δείκτη; συν; αποσιωπητικά; χ δείκτης, καπα στην νί οστή τέλος δείκτη; ισούται με 0")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_121() -> Result<()> { // same + let expr = r#" + + + χ + + + κ + 1 + + + + + + χ + + + κ + 2 + + + + + + χ + + + κ + 3 + + + + ++ + χ + + + κ + ν + + + + =0 + "#; + test("el", "SimpleSpeak", expr, "χ δείκτης, καπα δείκτης 1, τέλος δείκτη; συν; χ δείκτης, καπα δείκτης 2, τέλος δείκτη; συν; χ δείκτης, καπα δείκτης 3, τέλος δείκτη; συν αποσιωπητικά, συν; χ δείκτης, καπα δείκτης νί, τέλος δείκτη; ισούται με 0")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_122() -> Result<()> { // + let expr = r#" + + + χ + + + 2 + ψ + + + + + χ + + + 2 + ψ + + + + + "#; + test("el", "SimpleSpeak", expr, "χ που υψώνεται στη 2 στην ψ οστή τέλος δύναμης; είναι διάφορο του; χ που υψώνεται στη 2 στην ψ οστή τέλος δύναμης")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_123() -> Result<()> { // same + let expr = r#" + + α + χ + 2 + + +βχ+γ=0 + "#; + test("el", "SimpleSpeak", expr, "άλφα φορές, χ στο τετράγωνο; συν βήτα φορές χ, συν γάμμα; ισούται με 0")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_124() -> Result<()> { // + let expr = r#" + + log3 + + (χ+ψ) + 3 + + + "#; + test("el", "SimpleSpeak", expr, "ο λογάριθμος, του 3; ανοίγει παρένθεση, χ συν ψ, κλείνει παρένθεση στον κύβο")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_125() -> Result<()> { // + let expr = r#" + + + + log + 2 + + χ2logχ + "#; + test("el", "SimpleSpeak", expr, "ο λογάριθμος στο τετράγωνο; του χ; είναι διάφορο του; 2 φορές, ο λογάριθμος, του χ")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_126() -> Result<()> { // + let expr = r#" + + + + logχ + + logα + + = + + log + α + + χ + "#; + test("el", "SimpleSpeak", expr, "κλάσμα, ο λογάριθμος, του χ, προς, ο λογάριθμος, του άλφα, τέλος κλάσματος; ισούται με; το λογάριθμο με βάση άλφα; του χ")?; + return Ok(()); + //theodora. fails. Needs to fix accusative for logarithm with base. Now reads: κλάσμα, ο λογάριθμος, του χ, προς, ο λογάριθμος, του άλφα, τέλος κλάσματος; ισούται με; ο λογάριθμος με βάση άλφα; του χ + +} + +#[test] +fn uoa_corpus_127() -> Result<()> { // same + let expr = r#" + + + χ + ¯ + + +χ + "#; + test("el", "SimpleSpeak", expr, "χ παύλα, συν χ")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_128() -> Result<()> { // same + let expr = r#" + + arg( + ζ + ) + "#; + test("el", "SimpleSpeak", expr, "όρισμα του ζήτα")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_129() -> Result<()> { // + let expr = r#" + + + υ + + ( + 0 + ) + + = + + + + ζ=1 + ν + + + + ξ + ζ + + + + + ( + 1 + ) + + + ρ + ζ + + ( + + + υ + + ( + ι + ) + + + ) + = + + + + ζ=1 + ν + + + + ξ + ζ + + + + + ( + 2 + ) + + + ρ + ζ + + ( + + + υ + + ( + 2 + ) + + + ) + + "#; + test("el", "SimpleSpeak", expr, "ύψιλον υψωμένο στην ανοίγει παρένθεση 0 κλείνει παρένθεση τέλος δύναμης; ισούται με; άθροισμα από ζήτα ισούται με 1 ως νί του; ξ δείκτης ζήτα; εκθέτης ανοίγει παρένθεση 1 κλείνει παρένθεση, ρ δείκτης ζήτα; του; ανοίγει παρένθεση; ύψιλον υψωμένο στην ανοίγει παρένθεση, ιότα, κλείνει παρένθεση τέλος δύναμης; κλείνει παρένθεση; ισούται με; άθροισμα από ζήτα ισούται με 1 ως νί του; ξ δείκτης ζήτα; εκθέτης ανοίγει παρένθεση 2 κλείνει παρένθεση, ρ, δείκτης ζήτα; του; ανοίγει παρένθεση; ύψιλον υψωμένο στην ανοίγει παρένθεση 2 κλείνει παρένθεση τέλος δύναμης; κλείνει παρένθεση")?; + return Ok(()); + // theodora. fails . a mathml or rules issue? + +} + +#[test] +fn uoa_corpus_130() -> Result<()> { // + let expr = r#" + + | υ | + = + + ορισμος + + + + ( + + + + + + κ=1 + ν + + + + υ + κ + 2 + + + + ) + + + 1 + 2 + + + + + "#; + test("el", "SimpleSpeak", expr, "η απόλυτη τιμή του ύψιλον; ισούται με με ορισμος από πάνω; ανοίγει παρένθεση; άθροισμα από καπα ισούται με 1 ως νί του; ύψιλον δείκτης καπα, στο τετράγωνο; κλείνει παρένθεση που υψώνεται στη 1 δεύτερο τέλος δύναμης")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_131() -> Result<()> { // + let expr = r#" + + + + + + + 0 + + + + | + + ξ + ι + + + + + ( + 1 + ) + + ( + + τ,χ + ) |dχ + + + + + + + + Γ( + + + + + + φ + + ( + 0 + ) + + + + + Λ + 1 + + ( + + + + + + + + ) + + + + + + + α + + ( + 0 + ) + + + + + Λ + 1 + + ( + + + + + + + + ) + + + + + + + η + + ( + 0 + ) + + + + + Λ + 1 + + ( + + + + + + + + ) + + + ) + + + + + "#; + test("el", "SimpleSpeak", expr, "πίνακας με 2 γραμμές και 1 στήλες; γραμμή 1; στήλη 1; ολοκλήρωμα από 0 ως άπειρο του; η απόλυτη τιμή του ξ με 2 μετατεταγμένα μέρη, δείκτης ιότα εκθέτης 1; ανοίγει παρένθεση; τάαφ κόμμα, χ; κλείνει παρένθεση τέλος απόλυτης τιμής; d χ; είναι μικρότερο από ή ίσο με; γραμμή 2; στήλη 1; κεφαλαίο γάμμα; ανοίγει παρένθεση; νόρμα του φ που υψώνεται στη ανοίγει παρένθεση 0 κλείνει παρένθεση τέλος δύναμης, δείκτης; η πρώτη δύναμη του, κεφαλαίο λάμδα; του; ανοίγει παρένθεση; οι θετικοί πραγματικοί αριθμοί; κλείνει παρένθεση τέλος δείκτη; συν; νόρμα του άλφα που υψώνεται στη ανοίγει παρένθεση 0 κλείνει παρένθεση τέλος δύναμης, δείκτης; η πρώτη δύναμη του, κεφαλαίο λάμδα; του; ανοίγει παρένθεση; οι θετικοί πραγματικοί αριθμοί; κλείνει παρένθεση τέλος δείκτη; συν; νόρμα του ήτα που υψώνεται στη ανοίγει παρένθεση 0 κλείνει παρένθεση τέλος δύναμης, δείκτης; η πρώτη δύναμη του, κεφαλαίο λάμδα; του; ανοίγει παρένθεση; οι θετικοί πραγματικοί αριθμοί; κλείνει παρένθεση τέλος δείκτη; κλείνει παρένθεση")?; + return Ok(()); + //theodora. it's read as a matrix because of the mathml, not an actual issues + +} + +#[test] +fn uoa_corpus_132() -> Result<()> { // + let expr = r#" + + + + Β + ˜ + + + 1 + + ( + Τ + )= + + max + + ι=1,ν + + + + max + + ξι + + + + sup + + + Γ + ξ + + + + + + + + + + Γ + ξ + + + + + | + + υ + ι + + |dτ + + + + "#; + test("el", "SimpleSpeak", expr, "κεφαλαίο βήτα κυματοειδής γραμμή, δείκτης 1; του κεφαλαίο τάαφ; ισούται με; μέγιστο για ιότα ισούται με; 1, αποσιωπητικά, νί; του, μέγιστο για ξ είναι διάφορο του, ιότα; του, σουπρέμουμ για κεφαλαίο γάμμα δείκτης ξ; του; ολοκλήρωμα επί του συνόλου κεφαλαίο γάμμα δείκτης ξ, του; η απόλυτη τιμή του ύψιλον δείκτης ιότα, τέλος απόλυτης τιμής; d τάαφ")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_133() -> Result<()> { // + let expr = r#" + + + + { + + ε + λ + + + + + + + } + + λ=1 + + ν+μ2κ + + ={ + + + { + + ε + ι + + } + + ιΑ + + , + + { + + ε + ξ + + + + + + } + + ξ + Α + + + + + } + "#; + test("el", "SimpleSpeak", expr, "ανοίγει άγκιστρο; έψιλον με 2 μετατεταγμένα μέρη, δείκτης λάμδα εκθέτης τόνος τόνος; κλείνει άγκιστρο δείκτης, λάμδα ισούται με 1 τέλος δείκτη, που υψώνεται στη νί συν μί μείον 2 καπα τέλος δύναμης; ισούται με; το σύνολο ανοίγει άγκιστρο; έψιλον δείκτης ιότα; κλείνει άγκιστρο δείκτης; ιότα δεν ανήκει, κεφαλαίο άλφα τέλος δείκτη; κόμμα; ανοίγει άγκιστρο; έψιλον με 2 μετατεταγμένα μέρη, δείκτης ξ εκθέτης τόνος; κλείνει άγκιστρο δείκτης; ξ δεν ανήκει, κεφαλαίο άλφα τόνος, τέλος δείκτη")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_134() -> Result<()> { // same + let expr = r#" + + + υ + ε + + + + + (ν+1,μ+1) + + υ+ + + + + κ=1 + ν + + + + + + + ψ + κ + + + + + υ + κ + + + + "#; + test("el", "SimpleSpeak", expr, "ανάδελτα του ύψιλον δείκτης έψιλον, τέλος ανάδελτα; βέλος προς τα δεξιά με ανοίγει παρένθεση; νί συν 1, μί, συν 1; κλείνει παρένθεση από πάνω; ανάδελτα του ύψιλον, συν; άθροισμα από καπα ισούται με 1 ως νί του; το ανάδελτα δείκτης, ψ δείκτης καπα, τέλος δείκτη; ύψιλον δείκτης καπα")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_135() -> Result<()> { // + let expr = r#" + + + + + wsep,1 + + μκ + + ={ + ( + + ε, + + { + + + ε + + + + ξ + + } + + ξ=1 + μ + + + ) + + + wsep + + μκ + + : + + + ε + 2 + + + + + ε + μ + + + + + + + + 0 } + "#; + test("el", "SimpleSpeak", expr, "φράκτουρ κεφαλαίο i δείκτης wsep,1 τέλος δείκτη, που υψώνεται στη μί κυματοειδής γραμμή, καπα τέλος δύναμης; ισούται με; το σύνολο όλων των ανοίγει παρένθεση; έψιλον κόμμα; ανοίγει άγκιστρο; έψιλον τόνος, δείκτης ξ; κλείνει άγκιστρο δείκτης, ξ ισούται με 1 τέλος δείκτη, στην μί οστή; κλείνει παρένθεση; που ανήκει; φράκτουρ κεφαλαίο i δείκτης wsep τέλος δείκτη, που υψώνεται στη μί κυματοειδής γραμμή, καπα τέλος δύναμης, τέτοια ώστε κλάσμα, έψιλον στο τετράγωνο, προς, έψιλον με 2 μετατεταγμένα μέρη, δείκτης μί εκθέτης τόνος, τέλος κλάσματος; βέλος προς τα δεξιά 0")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_136() -> Result<()> { // + let expr = r#" + + + ε + 1 + + ={ + ε,{ + + ε + + 0,2 + + , + ε + + 0,5 + + ,ε, + ε + + 1,2 + + , + + + ε + + 1,5 + + + + | + logε | + + } } + "#; + test("el", "SimpleSpeak", expr, "έψιλον δείκτης 1; ισούται με; το σύνολο έψιλον κόμμα; το σύνολο έψιλον στην 0,2, κόμμα; έψιλον στην 0,5, κόμμα, έψιλον κόμμα; έψιλον στην 1,2, κόμμα; κλάσμα, έψιλον στην 1,5, προς, η απόλυτη τιμή του ο λογαρίθμου, του έψιλον, τέλος κλάσματος")?; + return Ok(()); + //theodora. fails with current rules. Should be okay when adding genitive clause +} + + +#[test] +fn uoa_corpus_137() -> Result<()> { // + let expr = r#" + + + υ + μ + ν + + + + ν + μ + ν + + +κ + + d + υ + μ + ν + + + + dχ + + =κ× + φ + μ + ν + + + + υ + μ + + ν1 + + + + ν + μ + + ν1 + + + "#; + test("el", "SimpleSpeak", expr, "ύψιλον δείκτης μί, στην νί οστή; συν, νί δείκτης μί, στην νί οστή; συν; καπα; κλάσμα, d, ύψιλον δείκτης μί, στην νί οστή, προς, d χ, τέλος κλάσματος; ισούται με; καπα επί, φ δείκτης μί, στην νί οστή; συν; ύψιλον δείκτης μί, που υψώνεται στη νί μείον 1 τέλος δύναμης; συν; νί δείκτης μί, που υψώνεται στη νί μείον 1 τέλος δύναμης")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_138() -> Result<()> { // + let expr = r#" + + + + + + Ω + + + + + | + + κ + μ + ξ + + | + 2 + + dχ+κ + + + + ν=1 + ξ + + + + + | + + κ + μ + ν + + | + 2 + + + + + + + "#; + // TODO: add expected speech + test("el", "SimpleSpeak", expr, "ολοκλήρωμα επί του συνόλου κεφαλαίο ωμέγα της απόλυτης τιμής του καπα δείκτης μί, στην ξ οστή τέλος απόλυτης τιμής στο τετράγωνο; d χ; συν; καπα; άθροισμα από νί ισούται με 1 ως ξ της απόλυτης τιμής του καπα δείκτης μί, στην νί οστή τέλος απόλυτης τιμής στο τετράγωνο")?; + return Ok(()); + //theodora. fails with current rules. Should be okay when we add genitive +} + +#[test] +fn uoa_corpus_139() -> Result<()> { // same + let expr = r#" + + sgn + + + + ξΙ( + + + δ + 1 + + , + δ + 2 + + + ) + + + + α + ξ + + + + + + + + Γ + + + ι + 1 + + + + + + + + ε + ξ + + dχ + + + + =sgn + + + + ξΙ( + + + δ + 1 + + , + δ + 2 + + + ) + + + + α + ξ + + + + + + + + Γ + + + ι + 2 + + + + + + + + ε + ξ + + dχ + + + + + "#; + test("el", "SimpleSpeak", expr, "πρόσημο; άθροισμα για ξ ανήκει; κεφαλαίο ιότα; ανοίγει παρένθεση; δέλτα δείκτης 1; κόμμα; δέλτα δείκτης 2; κλείνει παρένθεση του; άλφα δείκτης ξ; ολοκλήρωμα επί του συνόλου κεφαλαίο γάμμα δείκτης, ιότα δείκτης 1, τέλος δείκτη, του; έψιλον δείκτης ξ; d χ; ισούται με; μείον πρόσημο; άθροισμα για ξ ανήκει; κεφαλαίο ιότα; ανοίγει παρένθεση; δέλτα δείκτης 1; κόμμα; δέλτα δείκτης 2; κλείνει παρένθεση του; άλφα δείκτης ξ; ολοκλήρωμα επί του συνόλου κεφαλαίο γάμμα δείκτης, ιότα δείκτης 2, τέλος δείκτη, του; έψιλον δείκτης ξ; d χ")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_140() -> Result<()> { // + let expr = r#"φ(Φσκ)=φ(Φσκ)φκ(Φσκ)0+φκ(Φσκ)χκχ"#; + test("el", "SimpleSpeak", expr, "φ του; ανοίγει παρένθεση; κεφαλαίο φ δείκτης σίγμα, στην καπα οστή; κλείνει παρένθεση; ισούται με; παράσταση παράσταση φ του; ανοίγει παρένθεση; κεφαλαίο φ δείκτης σίγμα, στην καπα οστή; κλείνει παρένθεση; μείον; φ δείκτης καπα; του; ανοίγει παρένθεση; κεφαλαίο φ δείκτης σίγμα, στην καπα οστή; κλείνει παρένθεση με κάτω άγκιστρο από κάτω με ζεύγος βελών προς τα δεξιά 0 από κάτω; συν; παράσταση παράσταση φ δείκτης καπα; του; ανοίγει παρένθεση; κεφαλαίο φ δείκτης σίγμα, στην καπα οστή; κλείνει παρένθεση με κάτω άγκιστρο από κάτω με χ στην καπα οστή από κάτω; βέλος προς τα δεξιά χ")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_141() -> Result<()> { // + let expr = r#" + + φ(χ)=φ(α)+φ'(α)×(χα)++ + + + φ + ν + + (α) + ν + + × + + (χα) + ν + + + + + + φ + + (ν+1) + + ( + γ + ) + + ν+1 + + × + + ( + + χα + ) + + (ν+1) + + + "#; + test("el", "SimpleSpeak", expr, "φ του χ, ισούται με; φ του άλφα, συν; φ τόνος, του άλφα; επί; ανοίγει παρένθεση; χ μείον άλφα; κλείνει παρένθεση; συν αποσιωπητικά, συν; κλάσμα, η νί δύναμη του, φ, του άλφα, προς νί, τέλος κλάσματος; επί; ανοίγει παρένθεση; χ μείον άλφα; κλείνει παρένθεση στην νί οστή; συν; κλάσμα, η ανοίγει παρένθεση, νί συν 1, κλείνει παρένθεση δύναμη του, φ; του γάμμα, προς, νί συν 1, τέλος κλάσματος; επί; ανοίγει παρένθεση; χ μείον άλφα; κλείνει παρένθεση που υψώνεται στη ανοίγει παρένθεση, νί συν 1, κλείνει παρένθεση τέλος δύναμης")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_142() -> Result<()> { // + let expr = r#"2υχψ=(χ2ψ2)×{τ×φ''(τ)+3×φ'(τ)}"#; + + test("el", "SimpleSpeak", expr, "κλάσμα, μερικό διαφορικό στο τετράγωνο; ύψιλον, προς, μερικό διαφορικό χ; μερικό διαφορικό ψ, τέλος κλάσματος; ισούται με; ανοίγει παρένθεση; χ στο τετράγωνο, μείον, ψ στο τετράγωνο; κλείνει παρένθεση; επί; ανοίγει άγκιστρο; τάαφ επί, φ διπλή παράγωγος; του τάαφ; συν, 3 επί, φ τόνος, του τάαφ; κλείνει άγκιστρο")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_143() -> Result<()> { // + let expr = r#" + + log( + + 1+χ + )log( + + 1χ + )=log + + 1+χ + + 1χ + + = + + + + ι=1 + + + + + + + χ + + 2ι1 + + + + 2ι1 + + + + "#; + test("el", "SimpleSpeak", expr, "ο λογάριθμος, του; ανοίγει παρένθεση, 1 συν χ, κλείνει παρένθεση; μείον; ο λογάριθμος, του; ανοίγει παρένθεση, 1 μείον χ, κλείνει παρένθεση; ισούται με; το λογάριθμο, του; κλάσμα, 1 συν χ, προς, 1 μείον χ, τέλος κλάσματος; ισούται με; άθροισμα από ιότα ισούται με 1 ως άπειρο του; κλάσμα, χ που υψώνεται στη 2 φορές ιότα, μείον 1 τέλος δύναμης; προς, 2 φορές ιότα, μείον 1, τέλος κλάσματος")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_144() -> Result<()> { // + let expr = r#" + + + Δ + χ + ν + + ω= + + + + 0λν + + + + + + + + + + + κ + 1 + + ++ + κ + ν + + =λ + + + + + + + κ + 1 + + +2 + κ + 2 + + ++ν + κ + ν + + =ν + + + + + + + κ + 1 + + ,, + κ + ν + + 0 + + + + + + + + Δ + υ + λ + + ω× + + n! + + ( + + + Δ + χ + 1 + + υ + ) + + + κ + 1 + + + + + + ( + + + Δ + χ + ν + + υ + ) + + + κ + ν + + + + + + + κ + 1 + + ! + + (1!) + + + κ + 1 + + + + + κ + ν + + ! + + ( + + ν! + ) + + + κ + ν + + + + + + + + + "#; + test("el", "SimpleSpeak", expr, "κεφαλαίο δέλτα δείκτης χ, στην νί οστή; ωμέγα; ισούται με; άθροισμα για 0, είναι μικρότερο από ή ίσο με; λάμδα, είναι μικρότερο από ή ίσο με; νί του; άθροισμα για 3 εξισώσεις; εξίσωση 1; καπα δείκτης 1; συν αποσιωπητικά, συν, καπα δείκτης νί; ισούται με, λάμδα; εξίσωση 2; καπα δείκτης 1; συν, 2 καπα δείκτης 2; συν αποσιωπητικά, συν, νί, καπα δείκτης νί; ισούται με νί; εξίσωση 3; καπα δείκτης 1; κόμμα; αποσιωπητικά, κόμμα; καπα δείκτης νί; είναι μεγαλύτερο από ή ίσο με 0; του; κεφαλαίο δέλτα δείκτης ύψιλον, στην λάμδα οστή; ωμέγα επί; κλάσμα, n; παραγοντικό; ανοίγει παρένθεση; κεφαλαίο δέλτα δείκτης χ, στην πρώτη; ύψιλον; κλείνει παρένθεση που υψώνεται στη καπα στην πρώτη τέλος δύναμης; αποσιωπητικά; ανοίγει παρένθεση; κεφαλαίο δέλτα δείκτης χ, στην νί οστή; ύψιλον; κλείνει παρένθεση που υψώνεται στη καπα δείκτης νί, τέλος δύναμης; προς, καπα δείκτης 1; παραγοντικό; ανοίγει παρένθεση; 1 παραγοντικό, κλείνει παρένθεση που υψώνεται στη καπα δείκτης 1, τέλος δύναμης; αποσιωπητικά; καπα δείκτης νί; παραγοντικό; ανοίγει παρένθεση; νί παραγοντικό; κλείνει παρένθεση που υψώνεται στη καπα δείκτης νί, τέλος δύναμης; τέλος κλάσματος")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_145() -> Result<()> { // same + let expr = r#" + + + + + + 1ιν + + + + α + ι + + + =1 + "#; + test("el", "SimpleSpeak", expr, "άθροισμα για 1, είναι μικρότερο από ή ίσο με; ιότα, είναι μικρότερο από ή ίσο με; νί του; άλφα δείκτης ιότα; ισούται με 1")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_146() -> Result<()> { // + let expr = r#" + + + + + + κ=1 + + + + + + + + ( + + 1 + ) + + κ+1 + + + + ( + + κ+1 + )×ln(κ+1) + + + + "#; + test("el", "SimpleSpeak", expr, "άθροισμα από καπα ισούται με 1 ως άπειρο του; κλάσμα, ανοίγει παρένθεση, μείον 1, κλείνει παρένθεση που υψώνεται στη καπα συν 1 τέλος δύναμης; προς, ανοίγει παρένθεση, καπα συν 1, κλείνει παρένθεση; επί; ο φυσικός λογάριθμος, του; ανοίγει παρένθεση, καπα συν 1, κλείνει παρένθεση, τέλος κλάσματος")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_147() -> Result<()> { // + let expr = r#" + + + + + + κ=11 + + 28 + + + (κ10)×sin[ + + π + + κ10 + + ] + + "#; + test("el", "SimpleSpeak", expr, "άθροισμα από καπα ισούται με 11 ως 28 του; ανοίγει παρένθεση; καπα μείον 10; κλείνει παρένθεση; επί; ημίτονο του; ανοίγει αγκύλη; κλάσμα, π προς, καπα μείον 10, τέλος κλάσματος; κλείνει αγκύλη")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_148() -> Result<()> { // same + let expr = r#" + + + + + 0 + Τ + + + + Φ + 2 + + ( + + τ,χ + )dτ + + + Δ + "#; + test("el", "SimpleSpeak", expr, "ολοκλήρωμα από 0 ως κεφαλαίο τάαφ του; κεφαλαίο φ δείκτης 2; ανοίγει παρένθεση; τάαφ κόμμα, χ; κλείνει παρένθεση; d τάαφ; είναι μεγαλύτερο από ή ίσο με; κεφαλαίο δέλτα")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_149() -> Result<()> { // same + let expr = r#" + + + + + 0 + Τ + + + η( + τ + )dτ + + + =0 + "#; + test("el", "SimpleSpeak", expr, "ολοκλήρωμα από 0 ως κεφαλαίο τάαφ του; ήτα του τάαφ, d τάαφ; ισούται με 0")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_150() -> Result<()> { // + let expr = r#" + + + + + + υ + + Δ,υ + 0 + + + Φ + + = + + + + ΚΜ + + + + υ + Κ + + + + + + Κ + + + Δ + υ + 0 + + ( + χ + )dχ + + + + + "#; + test("el", "SimpleSpeak", expr, "αριστερά γωνιακή αγκύλη; ύψιλον δείκτης; κεφαλαίο δέλτα, κόμμα, ύψιλον τέλος δείκτη, στην 0; δεξιά γωνιακή αγκύλη δείκτης, κεφαλαίο φ; ισούται με; μείον άθροισμα για κεφαλαίο καπα, ανήκει κεφαλαίο μί του; ύψιλον δείκτης, κεφαλαίο καπα; ολοκλήρωμα επί του συνόλου κεφαλαίο καπα του; κεφαλαίο δέλτα; η μηδενική δύναμη του, ύψιλον; του χ; d χ")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_151() -> Result<()> { // same + let expr = r#"υτ,υΩυ(χ,τ)×υ(χ)dχ =Ωφ(χ,τ)υ(χ)dχ"#; + test("el", "SimpleSpeak", expr, "αριστερή γωνιακή αγκύλη; ύψιλον δείκτης τάαφ; κόμμα, ύψιλον; δεξιά γωνιακή αγκύλη; ολοκλήρωμα επί του συνόλου κεφαλαίο ωμέγα του; ανάδελτα του ύψιλον; ανοίγει παρένθεση; χ κόμμα, τάαφ; κλείνει παρένθεση; επί, ανάδελτα του ύψιλον του χ; d χ; ισούται με; ολοκλήρωμα επί του συνόλου κεφαλαίο ωμέγα του; φ; ανοίγει παρένθεση; χ κόμμα, τάαφ; κλείνει παρένθεση; ύψιλον του χ, d χ")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_152() -> Result<()> { // same + let expr = r#" + + α( + + β,υ + )= + + + + Ω + + + β( + χ + )υ( + χ + )dχ + + + + "#; + test("el", "SimpleSpeak", expr, "άλφα; ανοίγει παρένθεση; βήτα κόμμα, ύψιλον; κλείνει παρένθεση; ισούται με; ολοκλήρωμα επί του συνόλου κεφαλαίο ωμέγα του; ανάδελτα του βήτα του χ; εσωτερικό γινόμενο; ανάδελτα του ύψιλον του χ; d χ")?; + return Ok(()); + //theodora. fails. Can't access the definition rule for dot product? Now reads:άλφα; ανοίγει παρένθεση; βήτα κόμμα, ύψιλον; κλείνει παρένθεση; ισούται με; ολοκλήρωμα επί του συνόλου κεφαλαίο ωμέγα του; ανάδελτα του βήτα του χ; dot product; ανάδελτα του ύψιλον του χ; d χ +} + +#[test] +fn uoa_corpus_153() -> Result<()> { // same + let expr = r#" + + + + + + Ω + + + φ( + + χ,τ + )υ( + χ + )dχ + + + + "#; + test("el", "SimpleSpeak", expr, "ολοκλήρωμα επί του συνόλου κεφαλαίο ωμέγα του; φ; ανοίγει παρένθεση; χ κόμμα, τάαφ; κλείνει παρένθεση; ύψιλον του χ, d χ")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_154() -> Result<()> { // same + let expr = r#" + + + + + + Κ + + + ( + + υ( + + χ, + τ + + ν+1 + + + )υ( + + χ, + τ + ν + + + ) + )dχ + + + + "#; + test("el", "SimpleSpeak", expr, "ολοκλήρωμα επί του συνόλου κεφαλαίο καπα του; ανοίγει παρένθεση; ύψιλον; ανοίγει παρένθεση; χ κόμμα; τάαφ δείκτης, νί συν 1 τέλος δείκτη; κλείνει παρένθεση; μείον; ύψιλον; ανοίγει παρένθεση; χ κόμμα; τάαφ δείκτης νί; κλείνει παρένθεση; κλείνει παρένθεση; d χ")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_155() -> Result<()> { // same + let expr = r#" + + + + + + Κ + + + Δ + υ + 0 + + ( + χ + )dχ + + + + "#; + test("el", "SimpleSpeak", expr, "μείον ολοκλήρωμα επί του συνόλου κεφαλαίο καπα του; κεφαλαίο δέλτα; η μηδενική δύναμη του, ύψιλον; του χ; d χ")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_156() -> Result<()> { // same + let expr = r#" + + + Λ + + Κ, + σ + + + + + = + + + + + Κ, + σ + + + + + + Ιdχ + + + + "#; + test("el", "SimpleSpeak", expr, "κεφαλαίο λάμδα δείκτης; κεφαλαίο καπα, κόμμα; σίγμα διπλή παράγωγος, τέλος δείκτη; ισούται με; ολοκλήρωμα για κεφαλαίο καπα, κόμμα; σίγμα διπλή παράγωγος, του; κεφαλαίο ιότα, d χ")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_157() -> Result<()> { // same + let expr = r#" + + + + + + + τ + ν + + + + + τ + + ν+1 + + + + + Δυ( + + χ,τ + )dτ + + + + "#; + test("el", "SimpleSpeak", expr, "ολοκλήρωμα από τάαφ δείκτης νί, ως τάαφ δείκτης, νί συν 1 τέλος δείκτη, του; κεφαλαίο δέλτα, ύψιλον; ανοίγει παρένθεση; χ κόμμα, τάαφ; κλείνει παρένθεση; d τάαφ")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_158() -> Result<()> { // + let expr = r#" + + + + + 0 + Τ + + + + + | + υ( + τ + ) | + 2 + + dτ + + + + "#; + test("el", "SimpleSpeak", expr, "ολοκλήρωμα από 0 ως κεφαλαίο τάαφ της απόλυτης τιμής του ύψιλον του τάαφ στο τετράγωνο; d τάαφ")?; + return Ok(()); + //theodora. fails. Should be okay when we add genitive +} + +#[test] +fn uoa_corpus_159() -> Result<()> { // + let expr = r#" + + + + + 0 + Τ + + + + + | + + υ + ˙ + + ( + τ + ) | + 2 + + dτ + + + + "#; + test("el", "SimpleSpeak", expr, "ολοκλήρωμα από 0 ως κεφαλαίο τάαφ της απόλυτης τιμής του ύψιλον τελεία; του τάαφ τέλος απόλυτης τιμής στο τετράγωνο; d τάαφ")?; + return Ok(()); + //theodora. fails. Should be okay when we add genitive +} + +#[test] +fn uoa_corpus_160() -> Result<()> { // same + let expr = r#" + + + + + 0 + Τ + + + + υ + + + φdτ + + + + "#; + test("el", "SimpleSpeak", expr, "ολοκλήρωμα από 0 ως κεφαλαίο τάαφ του; ύψιλον τόνος; φ d τάαφ")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_161() -> Result<()> { // + let expr = r#" + + + + + 0 + Τ + + + + + | + + υ + ˜ + + ( + τ + ) | + + + π + + + + + dτ + + + + "#; + test("el", "SimpleSpeak", expr, "ολοκλήρωμα από 0 ως κεφαλαίο τάαφ της απόλυτης τιμής του ύψιλον κυματοειδής γραμμή; του τάαφ τέλος απόλυτης τιμής που υψώνεται στη π εκθέτης μείον, τέλος δύναμης; d τάαφ")?; + return Ok(()); + //theodora. fails. Should be okay when we add genitive + +} + +#[test] +fn uoa_corpus_162() -> Result<()> { // same + let expr = r#" + + + + + 0 + Τ + + + Φ( + + τ,χ + )dτ + + + + "#; + test("el", "SimpleSpeak", expr, "ολοκλήρωμα από 0 ως κεφαλαίο τάαφ του; κεφαλαίο φ; ανοίγει παρένθεση; τάαφ κόμμα, χ; κλείνει παρένθεση; d τάαφ; βέλος προς τα δεξιά, άπειρο")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_163() -> Result<()> { // + let expr = r#" + + + + + 0 + Τ + + + + + + 0 + 1 + + + γ( + τ + )| + υ( + τ + ) |dσ + + + dτ + + + +"#; + test("el", "SimpleSpeak", expr, "ολοκλήρωμα από 0 ως κεφαλαίο τάαφ του; ολοκλήρωμα από 0 ως 1 του; γάμμα του τάαφ; η απόλυτη τιμή του ύψιλον του τάαφ; d σίγμα; d τάαφ")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_164() -> Result<()> { // same + let expr = r#" + + + 1 + μ + + + + + 0 + Τ + + + + Φ + 1 + + ( + + τ,λ + υ + ¯ + + + )dτ + + + + "#; + test("el", "SimpleSpeak", expr, "1 προς μί; ολοκλήρωμα από 0 ως κεφαλαίο τάαφ του; κεφαλαίο φ δείκτης 1; ανοίγει παρένθεση; τάαφ κόμμα; λάμδα ύψιλον παύλα; κλείνει παρένθεση; d τάαφ")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_165() -> Result<()> { // + let expr = r#" + + + + + + Ω + + + + ρ + + 2 + + dχ + + + + "#; + test("el", "SimpleSpeak", expr, "ολοκλήρωμα επί του συνόλου κεφαλαίο ωμέγα του; ρ στην μείον 2, d χ")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_166() -> Result<()> { // same + let expr = r#" + + + 1 + 6 + + + + + σ + 1 + + + σ( + + 3 + σ + 2 + + + )η( + σ + )α( + σ + )dσ + + + + "#; + test("el", "SimpleSpeak", expr, "1 έκτο; ολοκλήρωμα από σίγμα ως 1 του; σίγμα; ανοίγει παρένθεση; 3 μείον, σίγμα στο τετράγωνο; κλείνει παρένθεση; ήτα του σίγμα; άλφα του σίγμα, d σίγμα")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_167() -> Result<()> { // same + let expr = r#" + + λ + + max + + 0τ1 + + + + + 0 + 1 + + + Γ( + + τ,σ + )η( + σ + )ψ( + + σ,β + )dσ + + + + "#; + test("el", "SimpleSpeak", expr, "λάμδα; μέγιστο για 0, είναι μικρότερο από ή ίσο με; τάαφ, είναι μικρότερο από ή ίσο με 1; του; ολοκλήρωμα από 0 ως 1 του; κεφαλαίο γάμμα; ανοίγει παρένθεση; τάαφ κόμμα, σίγμα; κλείνει παρένθεση; ήτα του σίγμα, ψ; ανοίγει παρένθεση; σίγμα κόμμα, βήτα; κλείνει παρένθεση; d σίγμα")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_168() -> Result<()> { // + let expr = r#" + + + 1 + 2 + + λ + + sup + + υΥ( + ρ + ) + + + + + 0 + 1 + + + | + υ( + σ + ) |dσ + + + + "#; + test("el", "SimpleSpeak", expr, "1 δεύτερο λάμδα; σουπρέμουμ για ύψιλον ανήκει, κεφαλαίο ύψιλον, του ρ; του; ολοκλήρωμα από 0 ως 1 της απόλυτης τιμής του ύψιλον του σίγμα; d σίγμα")?; + return Ok(()); + //theodora. fails. Should be okay when we add genitive +} + +#[test] +fn uoa_corpus_169() -> Result<()> { // + let expr = r#" + + + + + 0 + 1 + + + + + + τ + + Ξ( + + τ,σ + )υ( + σ + )dσ + + + + "#; + test("el", "SimpleSpeak", expr, "ολοκλήρωμα από 0 ως 1 του; κλάσματος, μερικό διαφορικό προς, μερικό διαφορικό, τάαφ, τέλος κλάσματος; κεφαλαίο ξ; ανοίγει παρένθεση; τάαφ κόμμα, σίγμα; κλείνει παρένθεση; ύψιλον του σίγμα; d σίγμα")?; + return Ok(()); + //theodora. fails with current rules. Will probably be ok when we introduce genitive. Now reads: ολοκλήρωμα από 0 ως 1 του; κλάσμα, μερικό διαφορικό προς, μερικό διαφορικό, τάαφ, τέλος κλάσματος; κεφαλαίο ξ; ανοίγει παρένθεση; τάαφ κόμμα, σίγμα; κλείνει παρένθεση; ύψιλον του σίγμα; d σίγμα + +} + +#[test] +fn uoa_corpus_170() -> Result<()> { // same + let expr = r#" + + + + + τ + 1 + + + + υ + + + σdσ + + + + "#; + test("el", "SimpleSpeak", expr, "ολοκλήρωμα από τάαφ ως 1 του; νόρμα του ύψιλον διπλή παράγωγος; σίγμα d σίγμα")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_171() -> Result<()> { // same + let expr = r#" + + + + + + Η + + η + + + ( + + χ+2 + )dχ + "#; + test("el", "SimpleSpeak", expr, "ολοκλήρωμα επί του συνόλου κεφαλαίο ήτα του; ήτα; ανοίγει παρένθεση, χ συν 2, κλείνει παρένθεση; d χ")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_172() -> Result<()> { // + let expr = r#" + + + + + + 1 + + + + + ε + + + χ + 2 + + χ1 + + dχ + + + + "#; + test("el", "SimpleSpeak", expr, "ολοκλήρωμα από 1 ως άπειρο του; έψιλον που υψώνεται στη χ στο τετράγωνο, μείον χ μείον 1 τέλος δύναμης; d χ")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_173() -> Result<()> { // + let expr = r#" + + + + + + + dχ + χ + + + + + =logχ + "#; + test("el", "SimpleSpeak", expr, "ολοκλήρωμα του κλάσματος, d χ, προς χ, τέλος κλάσματος; ισούται με, το λογάριθμο, του χ")?; + return Ok(()); +//theodora. fails with current rules. needs genitive clause + } + +#[test] +fn uoa_corpus_174() -> Result<()> { // same + let expr = r#"τντν+1Κυτ(χ,τ)dχdτσΕΚτντν+1συ(χ,τ)×νΚ,σ(χ)δγ(χ)dτ=τντν+1Κφ(χ,τ)dχdτ"#; + test("el", "SimpleSpeak", expr, "ολοκλήρωμα από τάαφ δείκτης νί, ως τάαφ δείκτης, νί συν 1 τέλος δείκτη, του; ολοκλήρωμα επί του συνόλου κεφαλαίο καπα του; ύψιλον δείκτης τάαφ; ανοίγει παρένθεση; χ κόμμα, τάαφ; κλείνει παρένθεση; d χ d τάαφ; μείον; άθροισμα για σίγμα ανήκει; κεφαλαίο έψιλον δείκτης, κεφαλαίο καπα, του; ολοκλήρωμα από τάαφ δείκτης νί, ως τάαφ δείκτης, νί συν 1 τέλος δείκτη, του; ολοκλήρωμα επί του συνόλου σίγμα του; ανάδελτα του ύψιλον; ανοίγει παρένθεση; χ κόμμα, τάαφ; κλείνει παρένθεση; επί; νί δείκτης; κεφαλαίο καπα, κόμμα, σίγμα τέλος δείκτη; του χ; δέλτα δείκτης γάμμα; του χ; d τάαφ; ισούται με; ολοκλήρωμα από τάαφ δείκτης νί, ως τάαφ δείκτης, νί συν 1 τέλος δείκτη, του; ολοκλήρωμα επί του συνόλου κεφαλαίο καπα του; φ; ανοίγει παρένθεση; χ κόμμα, τάαφ; κλείνει παρένθεση; d χ d τάαφ")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_175() -> Result<()> { // + let expr = r#" + + + + 2 + + ( + + + Δ + α + + υ( + + χ, + τ + ν + + + ) + )= + 1 + + + κ + 2 + + + + + + + + + τ + + ν1 + + + + + τ + ν + + + + + + + + + τη + τ + + + + + ( + + + Δ + α + + υ + ) + + ττ + + ( + + χ,τ + )dσ + + + dτ + + + +"#; + test("el", "SimpleSpeak", expr, "μερικό διαφορικό στο τετράγωνο; ανοίγει παρένθεση; κεφαλαίο δέλτα στην άλφα οστή; ύψιλον; ανοίγει παρένθεση; χ κόμμα; τάαφ δείκτης νί; κλείνει παρένθεση; κλείνει παρένθεση; ισούται με; κλάσμα, 1 προς, καπα στο τετράγωνο, τέλος κλάσματος; ολοκλήρωμα από τάαφ δείκτης, νί μείον 1 τέλος δείκτη, ως τάαφ δείκτης νί, του; ολοκλήρωμα από τάαφ μείον ήτα ως τάαφ του; ανοίγει παρένθεση; κεφαλαίο δέλτα στην άλφα οστή; ύψιλον; κλείνει παρένθεση δείκτης, τάαφ τάαφ τέλος δείκτη; ανοίγει παρένθεση; χ κόμμα, τάαφ; κλείνει παρένθεση; d σίγμα; d τάαφ")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_176() -> Result<()> { // + let expr = r#" + + + 1 + κ + + + + + + Κ + + + + + 1 + + ( + + + + + + + τ + ν + + + + + τ + + ν+1 + + + + + Δυ( + + χ,τ + )dτ + + + + )dχ + + + + "#; + test("el", "SimpleSpeak", expr, "1 προς καπα; ολοκλήρωμα επί του συνόλου κεφαλαίο καπα του; μερικό διαφορικό στην πρώτη; ανοίγει παρένθεση; ολοκλήρωμα από τάαφ δείκτης νί, ως τάαφ δείκτης, νί συν 1 τέλος δείκτη, του; κεφαλαίο δέλτα, ύψιλον; ανοίγει παρένθεση; χ κόμμα, τάαφ; κλείνει παρένθεση; d τάαφ; κλείνει παρένθεση; d χ")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_177() -> Result<()> { // + let expr = r#" + + + 1 + + + κ + 2 + + + + + + + + Κ + + + + + + + + τ + + ν1 + + + + + τ + ν + + + + + + + + + + τ + + ν1 + + + τ + + + + + + σ + + σ+κ + + + Δ + + + d + 2 + + υ + + d + λ + 2 + + + + ( + + χ,λ + )dλ + + + dσ + + + dτ + + + dχ + + + +"#; + test("el", "SimpleSpeak", expr, "κλάσμα, 1 προς, καπα στο τετράγωνο, τέλος κλάσματος; ολοκλήρωμα επί του συνόλου κεφαλαίο καπα του; ολοκλήρωμα από τάαφ δείκτης, νί μείον 1 τέλος δείκτη, ως τάαφ δείκτης νί, του; ολοκλήρωμα από τάαφ δείκτης, νί μείον 1 τέλος δείκτη, ως τάαφ του; ολοκλήρωμα από σίγμα ως σίγμα συν καπα του; κεφαλαίο δέλτα; κλάσμα, d στο τετράγωνο, ύψιλον, προς, d, λάμδα στο τετράγωνο, τέλος κλάσματος; ανοίγει παρένθεση; χ κόμμα, λάμδα; κλείνει παρένθεση; d λάμδα; d σίγμα; d τάαφ; d χ")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_178() -> Result<()> { // + let expr = r#" + + υ + Γ + 1 + + ( + + + + ( + + + + + 0 + Τ + + + + + | + υ + ˙ + + | + + π( + τ + ) + + dτ + + + + ) + + + 1 + + + π + + + + + + + +1+| + υ + ¯ + + | + ) + "#; + test("el", "SimpleSpeak", expr, "νόρμα του ύψιλον; είναι μικρότερο από ή ίσο με; κεφαλαίο γάμμα δείκτης 1; ανοίγει παρένθεση; ανοίγει παρένθεση; ολοκλήρωμα από 0 ως κεφαλαίο τάαφ της απόλυτης τιμής του ύψιλον τελεία, τέλος απόλυτης τιμής που υψώνεται στη π του τάαφ τέλος δύναμης; d τάαφ; κλείνει παρένθεση που υψώνεται στη κλάσμα, 1 προς, π εκθέτης μείον; τέλος κλάσματος; τέλος δύναμης; συν 1 συν; η απόλυτη τιμή του ύψιλον παύλα, τέλος απόλυτης τιμής; κλείνει παρένθεση")?; + return Ok(()); + //theodora. fails. Should be okay when we add genitive +} + +#[test] +fn uoa_corpus_179() -> Result<()> { // + let expr = r#" + + + + Ξ + + + ( + υ + ),ν = + + + 0 + Τ + + + ( + + + + | + + υ + ˙ + + ( + τ + ) | + + π( + τ + )2 + + + υ + ˙ + + ( + τ + ), + υ + ˙ + + ( + τ + ) + )dτ + + + + "#; + test("el", "SimpleSpeak", expr, "αριστερά γωνιακή αγκύλη; κεφαλαίο ξ τόνος; του ύψιλον; κόμμα, νί; δεξιά γωνιακή αγκύλη; ισούται με; ολοκλήρωμα από 0 ως κεφαλαίο τάαφ του; ανοίγει παρένθεση; η απόλυτη τιμή του ύψιλον τελεία; του τάαφ τέλος απόλυτης τιμής που υψώνεται στη π του τάαφ, μείον 2 τέλος δύναμης; ύψιλον τελεία; του τάαφ; κόμμα; ύψιλον τελεία; του τάαφ; κλείνει παρένθεση; d τάαφ")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_180() -> Result<()> { // + let expr = r#" + + + Γ + 5 + + + + ( + + + + + 0 + Τ + + + + + | + + υ + ˙ + + ( + τ + ) | + + π( + τ + ) + + dτ + + + + ) + + + + α+1 + + + π + + + + + + + + "#; + test("el", "SimpleSpeak", expr, "κεφαλαίο γάμμα δείκτης 5; ανοίγει παρένθεση; ολοκλήρωμα από 0 ως κεφαλαίο τάαφ της απόλυτης τιμής του ύψιλον τελεία; του τάαφ τέλος απόλυτης τιμής που υψώνεται στη π του τάαφ τέλος δύναμης; d τάαφ; κλείνει παρένθεση που υψώνεται στη κλάσμα, άλφα συν 1, προς, π εκθέτης μείον; τέλος κλάσματος; τέλος δύναμης")?; + return Ok(()); + //theodora. fails. Should be okay when we add genitive +} + +#[test] +fn uoa_corpus_181() -> Result<()> { // + let expr = r#"φ'(υν),υνυ=0Τ[(|υ˙ν(τ)|π(τ)2υ˙ν(τ),υ˙ν(τ)υ˙(τ))+(Φ(τ,υν(τ)),υν(τ)υ(τ))]dτ"#; + test("el", "SimpleSpeak", expr, "αριστερή γωνιακή αγκύλη; φ τόνος, του; ανοίγει παρένθεση; ύψιλον δείκτης νί; κλείνει παρένθεση; κόμμα; ύψιλον δείκτης νί; μείον ύψιλον; δεξιά γωνιακή αγκύλη; ισούται με; ολοκλήρωμα από 0 ως κεφαλαίο τάαφ του; ανοίγει αγκύλη; ανοίγει παρένθεση; η απόλυτη τιμή του ύψιλον τελεία, δείκτης νί; του τάαφ τέλος απόλυτης τιμής που υψώνεται στη π του τάαφ, μείον 2 τέλος δύναμης; ύψιλον τελεία, δείκτης νί; του τάαφ; κόμμα; ύψιλον τελεία, δείκτης νί; του τάαφ; μείον, ύψιλον τελεία; του τάαφ; κλείνει παρένθεση; συν ανοίγει παρένθεση; ανάδελτα του κεφαλαίο φ; ανοίγει παρένθεση; τάαφ κόμμα; ύψιλον δείκτης νί; του τάαφ; κλείνει παρένθεση; κόμμα; ύψιλον δείκτης νί; του τάαφ; μείον, ύψιλον του τάαφ; κλείνει παρένθεση; κλείνει αγκύλη; d τάαφ")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_182() -> Result<()> { // same + let expr = r#" + + + + + 0 + Τ + + + + + + 0 + 1 + + + ( + + Γ( + + συ( + τ + ) + )Γ( + 0 + ),υ( + τ + ) + )dσ + + + dτ + + + +"#; + test("el", "SimpleSpeak", expr, "ολοκλήρωμα από 0 ως κεφαλαίο τάαφ του; ολοκλήρωμα από 0 ως 1 του; ανοίγει παρένθεση; ανάδελτα του κεφαλαίο γάμμα; ανοίγει παρένθεση; σίγμα, ύψιλον του τάαφ; κλείνει παρένθεση; μείον; ανάδελτα του κεφαλαίο γάμμα, του 0; κόμμα; ύψιλον του τάαφ; κλείνει παρένθεση; d σίγμα; d τάαφ")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_183() -> Result<()> { // + let expr = r#" + + + + ( + + + + + + + + Ω + + + + + + ( + + + + + + | α |+ξ=1 + λ + + + + ρ + + 2( + + β+| α |+ξλ + ) + + + + | + + Δ + α + + λ + υ + + + τ + ξ + + + + | + 2 + + + + + | υ | + 2 + + + + ) + ε + + 2γτ + + dχdτ + + + + ) + + + 1 + 2 + + + + + "#; + test("el", "SimpleSpeak", expr, "ανοίγει παρένθεση; ολοκλήρωμα επί του συνόλου κεφαλαίο ωμέγα δείκτης άπειρο, του; ανοίγει παρένθεση; άθροισμα από η απόλυτη τιμή του άλφα; συν ξ; ισούται με 1 ως λάμδα του; ρ που υψώνεται στη 2; ανοίγει παρένθεση; βήτα συν, η απόλυτη τιμή του άλφα; συν ξ μείον λάμδα; κλείνει παρένθεση τέλος δύναμης; η απόλυτη τιμή του κεφαλαίο δέλτα στην άλφα οστή; λάμδα; ύψιλον δείκτης, τάαφ στην ξ οστή τέλος δείκτη, τέλος απόλυτης τιμής στο τετράγωνο; συν, η απόλυτη τιμή του ύψιλον στο τετράγωνο; κλείνει παρένθεση; έψιλον που υψώνεται στη μείον 2 γάμμα τάαφ τέλος δύναμης; d χ d τάαφ; κλείνει παρένθεση που υψώνεται στη 1 δεύτερο τέλος δύναμης")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_184() -> Result<()> { // + let expr = r#" + + + + + + | π |,| ρ |=0 + μ + + + + + ( + + 1 + ) + + | π | + + + + + + Ω + + + + α + + πρ + + ( + + ·,τ + ) + Δ + ρ + + υ + + + Δ + Π + + υ + ¯ + + dχ + + + + + "#; + test("el", "SimpleSpeak", expr, "άθροισμα από η απόλυτη τιμή του π; κόμμα; η απόλυτη τιμή του ρ; ισούται με 0 ως μί του; ανοίγει παρένθεση, μείον 1, κλείνει παρένθεση που υψώνεται στη η απόλυτη τιμή του π τέλος δύναμης; ολοκλήρωμα επί του συνόλου κεφαλαίο ωμέγα του; άλφα δείκτης π ρ τέλος δείκτη; ανοίγει παρένθεση; τελεία κόμμα, τάαφ; κλείνει παρένθεση; κεφαλαίο δέλτα στην ρ οστή; ύψιλον; παράσταση κεφαλαίο δέλτα στην κεφαλαίο π οστή; ύψιλον με γραμμή από πάνω; d χ")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_185() -> Result<()> { // + let expr = r#" + + + + + + ξ=0 + + μ1 + + + + + + + Γ + + + + Β + ξ + + υ + + + + ξ + + + υ + ¯ + + + + + ν + ξ + + + + dσ + + + + + "#; + test("el", "SimpleSpeak", expr, "άθροισμα από ξ ισούται με 0 ως μί μείον 1 του; ολοκλήρωμα επί του συνόλου κεφαλαίο γάμμα του; κεφαλαίο βήτα δείκτης ξ; ύψιλον; κλάσμα, μερικό διαφορικό στην ξ οστή; ύψιλον παύλα; προς, μερικό διαφορικό, νί στην ξ οστή, τέλος κλάσματος; d σίγμα")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_186() -> Result<()> { // + let expr = r#" + + + Γ + 1 + + + + + + + Κ + + + + + + [ + + υ + 2 + + + + + | + gradυ | + 2 + + + + + + + | α |=2 + + + + + | + + Δ + α + + + υ + 1 + + | + 2 + + + ]d + χ + + + + + + + "#; + test("el", "SimpleSpeak", expr, "κεφαλαίο γάμμα δείκτης 1; ολοκλήρωμα επί του συνόλου κεφαλαίο καπα τόνος, του; ανοίγει αγκύλη; ύψιλον στο τετράγωνο, συν; η απόλυτη τιμή του κλίση του ύψιλον στο τετράγωνο; συν; άθροισμα για η απόλυτη τιμή του άλφα; ισούται με 2 της απόλυτης τιμής του κεφαλαίο δέλτα στην άλφα οστή; ύψιλον δείκτης 1, τέλος απόλυτης τιμής στο τετράγωνο; κλείνει αγκύλη; d χ τόνος")?; + return Ok(()); + //theodoa. fails. Should be okay when we add genitive +} + +#[test] +fn uoa_corpus_187() -> Result<()> { // + let expr = r#" + + + + + + 0 + 1 + + + ( + + + χ + ψ + + + ζ + + 10 + + + )dζ + + + + "#; + test("el", "SimpleSpeak", expr, "ολοκλήρωμα από 0 ως 1 του; ανοίγει παρένθεση; χ στην ψ οστή, μείον ζήτα προς 10; κλείνει παρένθεση; d ζήτα")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_188() -> Result<()> { // + let expr = r#" + + + + + + 0 + 1 + + + + + + + 0 + + + + 1 + ψ + 2 + + + + + + + 1dχdψ + + + + + + = + + + + 0 + + + π + 2 + + + + + + + + + 0 + 1 + + + ρdρdθ + + + + + + + "#; + test("el", "SimpleSpeak", expr, "ολοκλήρωμα από 0 ως 1 του; ολοκλήρωμα από 0 ως η τετραγωνική ρίζα του 1 μείον, ψ στο τετράγωνο, τέλος ρίζας; του; 1 d χ d ψ; ισούται με; ολοκλήρωμα από 0 ως π προς 2, του; ολοκλήρωμα από 0 ως 1 του; ρ d ρ d θήτα")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_189() -> Result<()> { // + let expr = r#" + + + + + [ + + + cos + χ + + + + 2× + χ + + + + ] + + + dχ + "#; + test("el", "SimpleSpeak", expr, "ολοκλήρωμα του ανοίγει αγκύλη; κλάσμα, συνημίτονο του, η τετραγωνική ρίζα του χ; προς, 2 επί, η τετραγωνική ρίζα του χ; τέλος κλάσματος; κλείνει αγκύλη; d χ")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_190() -> Result<()> { // + let expr = r#" + + + + lim + + ν + + + + | + + υ + ν + + υ | + + π( + τ + ) + + =0 + "#; + test("el", "SimpleSpeak", expr, "το όριο όταν νί προσεγγίζει, άπειρο; της απόλυτης τιμής του ύψιλον δείκτης νί; μείον ύψιλον τέλος απόλυτης τιμής δείκτης, π του τάαφ; ισούται με 0")?; + return Ok(()); + //theodora. fails. Should be okay when we add genitive +} + +#[test] +fn uoa_corpus_191() -> Result<()> { // same + let expr = r#" + + + + lim + + ν + + ρ( + + + υ + ν + + υ + )=0 + "#; + test("el", "SimpleSpeak", expr, "το όριο όταν νί προσεγγίζει, άπειρο; του ρ; ανοίγει παρένθεση; ύψιλον δείκτης νί; μείον ύψιλον; κλείνει παρένθεση; ισούται με 0")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_192() -> Result<()> { // same + let expr = r#" + + + + lim + + ν + + ρ( + + + υ + ν + + + )=ρ( + + + υ + ν + + + ) + "#; + test("el", "SimpleSpeak", expr, "το όριο όταν νί προσεγγίζει, άπειρο; του ρ του; ανοίγει παρένθεση; ύψιλον δείκτης νί; κλείνει παρένθεση; ισούται με; ρ του; ανοίγει παρένθεση; ύψιλον δείκτης νί; κλείνει παρένθεση")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_193() -> Result<()> { // same + let expr = r#" + + + + limsup + + ν + + + + Ξ + + + ( + + + υ + ν + + + ) + Ξ + + + ( + υ + ), + υ + ν + + υ =0 + "#; + test("el", "SimpleSpeak", expr, "ανώτατο όριο για νί βέλος προς τα δεξιά, άπειρο; αριστερά γωνιακή αγκύλη; κεφαλαίο ξ τόνος; του; ανοίγει παρένθεση; ύψιλον δείκτης νί; κλείνει παρένθεση; μείον, κεφαλαίο ξ τόνος; του ύψιλον; κόμμα; ύψιλον δείκτης νί; μείον ύψιλον; δεξιά γωνιακή αγκύλη; ισούται με 0")?; + return Ok(()); + //theodora. Now reads: παράσταση lim του σουπρέμουμ με νί βέλος προς τα δεξιά, άπειρο από κάτω; αριστερά γωνιακή αγκύλη; κεφαλαίο ξ τόνος; του; ανοίγει παρένθεση; ύψιλον δείκτης νί; κλείνει παρένθεση; μείον, κεφαλαίο ξ τόνος; του ύψιλον; κόμμα; ύψιλον δείκτης νί; μείον ύψιλον; δεξιά γωνιακή αγκύλη; ισούται με 0 +} + +#[test] +fn uoa_corpus_194() -> Result<()> { // + let expr = r#" + + + + [ + Α + + lim + + χ+0 + + + + φ( + χ + ) + χ + + ] + + 1 + + <λ< + + [ + Β + + lim + + χ + + + + φ( + χ + ) + χ + + ] + + 1 + + + "#; + test("el", "SimpleSpeak", expr, "ανοίγει αγκύλη; κεφαλαίο άλφα; το όριο όταν χ προσεγγίζει, συν 0; του; κλάσμα, φ του χ, προς χ, τέλος κλάσματος; κλείνει αγκύλη στην μείον 1; είναι μικρότερο από, λάμδα, είναι μικρότερο από; ανοίγει αγκύλη; κεφαλαίο βήτα; το όριο όταν χ προσεγγίζει, άπειρο; του; κλάσμα, φ του χ, προς χ, τέλος κλάσματος; κλείνει αγκύλη στην μείον 1")?; + return Ok(()); + +} + +#[test] +fn uoa_corpus_195() -> Result<()> { // + let expr = r#" + + + + [ + Α + + lim + + χ + + + + φ( + χ + ) + χ + + ] + + 1 + + <λ< + + [ + Β + + lim + + χ+0 + + + + φ( + χ + ) + χ + + ] + + 1 + + + "#; + test("el", "SimpleSpeak", expr, "ανοίγει αγκύλη; κεφαλαίο άλφα; το όριο όταν χ προσεγγίζει, άπειρο; του; κλάσμα, φ του χ, προς χ, τέλος κλάσματος; κλείνει αγκύλη στην μείον 1; είναι μικρότερο από, λάμδα, είναι μικρότερο από; ανοίγει αγκύλη; κεφαλαίο βήτα; το όριο όταν χ προσεγγίζει, συν 0; του; κλάσμα, φ του χ, προς χ, τέλος κλάσματος; κλείνει αγκύλη στην μείον 1")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_196() -> Result<()> { // + let expr = r#" + + λ + + lim + + Δτ0 + + + 1 + + Δτ + + [ + ( + + Τυ + )( + + τ+Δτ + )( + + Τυ + )( + τ + ) ] + "#; + test("el", "SimpleSpeak", expr, "λάμδα; το όριο όταν κεφαλαίο δέλτα, τάαφ; προσεγγίζει 0; του; κλάσμα, 1 προς, κεφαλαίο δέλτα, τάαφ, τέλος κλάσματος; ανοίγει αγκύλη; ανοίγει παρένθεση; κεφαλαίο τάαφ, ύψιλον; κλείνει παρένθεση; ανοίγει παρένθεση; τάαφ συν, κεφαλαίο δέλτα, τάαφ; κλείνει παρένθεση; μείον; ανοίγει παρένθεση; κεφαλαίο τάαφ, ύψιλον; κλείνει παρένθεση; τάαφ; κλείνει αγκύλη")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_197() -> Result<()> { // + let expr = r#" + + + + lim + + Δτ0 + + + + ( + + + Τ + 2 + + υ + )( + + τ+Δτ + )( + + + Τ + 2 + + υ + )( + τ + ) + + Δτ + + + "#; + test("el", "SimpleSpeak", expr, "το όριο όταν κεφαλαίο δέλτα, τάαφ; προσεγγίζει 0; του; κλάσματος, ανοίγει παρένθεση; κεφαλαίο τάαφ δείκτης 2; ύψιλον; κλείνει παρένθεση; του τάαφ συν, κεφαλαίο δέλτα, τάαφ; κλείνει παρένθεση; μείον; ανοίγει παρένθεση; κεφαλαίο τάαφ δείκτης 2; ύψιλον; κλείνει παρένθεση; του τάαφ, προς, κεφαλαίο δέλτα, τάαφ, τέλος κλάσματος")?; + return Ok(()); + //theodora. fails. Now reads: το όριο όταν κεφαλαίο δέλτα, τάαφ; προσεγγίζει 0; του; κλάσμα, ανοίγει παρένθεση; κεφαλαίο τάαφ δείκτης 2; ύψιλον; κλείνει παρένθεση; ανοίγει παρένθεση; τάαφ συν, κεφαλαίο δέλτα, τάαφ; κλείνει παρένθεση; μείον; ανοίγει παρένθεση; κεφαλαίο τάαφ δείκτης 2; ύψιλον; κλείνει παρένθεση; τάαφ, προς, κεφαλαίο δέλτα, τάαφ, τέλος κλάσματος + + } + +#[test] +fn uoa_corpus_198() -> Result<()> { // + let expr = r#" + + + + lim + + ν + + + + + 0 + 1 + + + | + ( + + + Τ + 1 + + + υ + ν + + + )( + τ + )( + + + Τ + 1 + + + υ + 0 + + + )( + τ + ) |dτ + + + + "#; + test("el", "SimpleSpeak", expr, "το όριο όταν νί προσεγγίζει, άπειρο; του; ολοκλήρωμα από 0 ως 1 της απόλυτης τιμής του ανοίγει παρένθεση; κεφαλαίο τάαφ δείκτης 1; ύψιλον δείκτης νί; κλείνει παρένθεση; του τάαφ; μείον; ανοίγει παρένθεση; κεφαλαίο τάαφ δείκτης 1; ύψιλον δείκτης 0; κλείνει παρένθεση; του τάαφ τέλος απόλυτης τιμής; d τάαφ")?; + return Ok(()); + //theodora Since T_1υ_ν and T_1υ_0 are functions or operators it would be best to read "Tυ of τ" + //genitive clause also needed here + } + +#[test] +fn uoa_corpus_199() -> Result<()> { // + let expr = r#" + + + + lim + + χ+0 + + + + φ( + χ + ) + χ + + < + + ( + + λΒ + ) + + 1 + + + "#; + test("el", "SimpleSpeak", expr, "το όριο όταν χ προσεγγίζει, συν 0; του; κλάσμα, φ του χ, προς χ, τέλος κλάσματος; είναι μικρότερο από; ανοίγει παρένθεση; λάμδα κεφαλαίο βήτα; κλείνει παρένθεση στην μείον 1")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_200() -> Result<()> { // + let expr = r#" + + λΑ + + lim + + χ + + + + φ( + χ + ) + χ + + >1 + "#; + test("el", "SimpleSpeak", expr, "λάμδα κεφαλαίο άλφα; το όριο όταν χ προσεγγίζει, άπειρο; του; κλάσμα, φ του χ, προς χ, τέλος κλάσματος; είναι μεγαλύτερο από 1")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_201() -> Result<()> { // + let expr = r#" + + + + lim + + χ + + + + φ( + χ + ) + χ + + + + ( + + λ + Α + ¯ + + + ) + + 1 + + +ε + "#; + test("el", "SimpleSpeak", expr, "το όριο όταν χ προσεγγίζει, άπειρο; του; κλάσμα, φ του χ, προς χ, τέλος κλάσματος; είναι μεγαλύτερο από ή ίσο με; ανοίγει παρένθεση; λάμδα, κεφαλαίο άλφα παύλα; κλείνει παρένθεση στην μείον 1; συν έψιλον")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_202() -> Result<()> { // same + let expr = r#" + + + + lim + + χ + 0 + + + + + + 1 + χ + + + "#; + test("el", "SimpleSpeak", expr, "το όριο όταν χ προσεγγίζει, 0 εκθέτης μείον; του 1 προς χ")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_203() -> Result<()> { // + let expr = r#" + + + + lim + + x + 0 + + + + + ( + + + 1 + χ + + + + 1 + + + χ + 2 + + + + + ) + "#; + test("el", "SimpleSpeak", expr, "το όριο όταν x προσεγγίζει, 0 εκθέτης μείον; του; ανοίγει παρένθεση; 1 προς χ, συν; κλάσμα, 1 προς, χ στο τετράγωνο, τέλος κλάσματος; κλείνει παρένθεση")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_204() -> Result<()> { // + let expr = r#" + + + + lim + + x3 + + + + 1 + + χ2 + + + + χ3 + + + "#; + test("el", "SimpleSpeak", expr, "το όριο όταν x προσεγγίζει 3; του; κλάσμα, 1 μείον; η τετραγωνική ρίζα του χ μείον 2, τέλος ρίζας; προς, χ μείον 3, τέλος κλάσματος")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_205() -> Result<()> { // + let expr = r#" + + + + lim + + δx0 + + + + φ( + χ + 0 + + +δχ)φ( + χ + 0 + + ) + + δχ + + + "#; + test("el", "SimpleSpeak", expr, "το όριο όταν δέλτα x, προσεγγίζει 0; του; κλάσμα, φ; ανοίγει παρένθεση; χ δείκτης 0; συν δέλτα χ; κλείνει παρένθεση; μείον; φ του; ανοίγει παρένθεση, χ δείκτης 0; κλείνει παρένθεση, προς, δέλτα χ, τέλος κλάσματος")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_206() -> Result<()> { // + let expr = r#" + + + + lim + + β1 + + + β + + + + ( + + γδ + ) + 2 + + + + + "#; + test("el", "SimpleSpeak", expr, "το όριο όταν βήτα προσεγγίζει 1; του; κλάσμα, βήτα προς, ανοίγει παρένθεση; γάμμα μείον δέλτα; κλείνει παρένθεση στο τετράγωνο, τέλος κλάσματος")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_207() -> Result<()> { // same + let expr = r#" + + + + limsup + + ν + + ( + + + Ξ + + + ( + + + υ + ν + + + ) + Ξ + + + ( + υ + ), + υ + ν + + υ + )0 + "#; + test("el", "SimpleSpeak", expr, "ανώτατο όριο για νί βέλος προς τα δεξιά, άπειρο; του; ανοίγει παρένθεση; κεφαλαίο ξ τόνος; του; ανοίγει παρένθεση; ύψιλον δείκτης νί; κλείνει παρένθεση; μείον, κεφαλαίο ξ τόνος; του ύψιλον; κόμμα; ύψιλον δείκτης νί; μείον ύψιλον; κλείνει παρένθεση; είναι μικρότερο από ή ίσο με 0")?; + return Ok(()); + //theodora. fails. Now reads: limit sup νί βέλος προς τα δεξιά, άπειρο; του; ανοίγει παρένθεση; κεφαλαίο ξ τόνος; του; ανοίγει παρένθεση; ύψιλον δείκτης νί; κλείνει παρένθεση; μείον, κεφαλαίο ξ τόνος; του ύψιλον; κόμμα; ύψιλον δείκτης νί; μείον ύψιλον; κλείνει παρένθεση; είναι μικρότερο από ή ίσο με 0 +} + +#[test] +fn uoa_corpus_208() -> Result<()> { // + let expr = r#" + + + + limsup + + ν + + + + | + + + υ + ¯ + + + ν + + | + + + ρ + + + + α + + φ( + + + υ + ν + + + )= + "#; + test("el", "SimpleSpeak", expr, "ανώτατο όριο για νί βέλος προς τα δεξιά, άπειρο; της απόλυτης τιμής του ύψιλον παύλα, δείκτης νί, τέλος απόλυτης τιμής που υψώνεται στη μείον ρ εκθέτης συν; άλφα τέλος δύναμης; φ του; ανοίγει παρένθεση; ύψιλον δείκτης νί; κλείνει παρένθεση; ισούται με, μείον άπειρο")?; + return Ok(()); + //theodora. fails. Now reads: limit sup νί βέλος προς τα δεξιά, άπειρο; του; η απόλυτη τιμή του ύψιλον παύλα, δείκτης νί, τέλος απόλυτης τιμής που υψώνεται στη μείον ρ εκθέτης συν; άλφα τέλος δύναμης; φ του; ανοίγει παρένθεση; ύψιλον δείκτης νί; κλείνει παρένθεση; ισούται με, μείον άπειρο + //also needs genitive + } + +#[test] +fn uoa_corpus_209() -> Result<()> { // + let expr = r#" + + + + lim + + Δτ0 + + + λ + + Δτ + + + + + 0 + 1 + + + [ + Ξ( + + τ+Δτ,σ + )Ξ( + + τ,σ + ) ]υ( + σ + )dσ + + + + "#; + test("el", "SimpleSpeak", expr, "το όριο όταν κεφαλαίο δέλτα, τάαφ; προσεγγίζει 0; του; κλάσμα, λάμδα προς, κεφαλαίο δέλτα, τάαφ, τέλος κλάσματος; ολοκλήρωμα από 0 ως 1 του; ανοίγει αγκύλη; κεφαλαίο ξ; ανοίγει παρένθεση; τάαφ συν, κεφαλαίο δέλτα, τάαφ; κόμμα, σίγμα; κλείνει παρένθεση; μείον; κεφαλαίο ξ; ανοίγει παρένθεση; τάαφ κόμμα, σίγμα; κλείνει παρένθεση; κλείνει αγκύλη; ύψιλον του σίγμα; d σίγμα")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_210() -> Result<()> { // + let expr = r#" + + + + lim + + ν + + + + + 0 + 1 + + + | + ( + + + Τ + 1 + + + υ + ν + + + )( + τ + ) + Τ + 1 + + + υ + 0 + + ( + τ + ) |dτ + + + + "#; + test("el", "SimpleSpeak", expr, "το όριο όταν νί προσεγγίζει, άπειρο; του; ολοκλήρωμα από 0 ως 1 της απόλυτης τιμής του ανοίγει παρένθεση; κεφαλαίο τάαφ δείκτης 1; ύψιλον δείκτης νί; κλείνει παρένθεση; του τάαφ; μείον; κεφαλαίο τάαφ δείκτης 1; ύψιλον δείκτης 0; του τάαφ τέλος απόλυτης τιμής; d τάαφ")?; + return Ok(()); + //theodora. doesnt recognize the first operator as an operator. + // genitive clause needed here. + +} + +#[test] +fn uoa_corpus_211() -> Result<()> { // same + let expr = r#" + + + + lim + + ν + + φ( + + τ, + υ + ν + + ( + τ + ), + + υ + + + + ν + + ( + τ + ), + υ + + + ( + τ + ) + ) + "#; + test("el", "SimpleSpeak", expr, "το όριο όταν νί προσεγγίζει, άπειρο; του φ; ανοίγει παρένθεση; τάαφ κόμμα; ύψιλον δείκτης νί; του τάαφ; κόμμα; ύψιλον τόνος, δείκτης νί; του τάαφ; κόμμα; ύψιλον διπλή παράγωγος; του τάαφ; κλείνει παρένθεση")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_212() -> Result<()> { // + let expr = r#"limΔτ001Ξ(τ+Δτ)Ξ(τ,σ)Δτη(σ)φ(σ,υ(σ),υ'(σ),υ''(σ))dσ"#; + test("el", "SimpleSpeak", expr, "το όριο όταν κεφαλαίο δέλτα, τάαφ; προσεγγίζει 0; του; ολοκλήρωμα από 0 ως 1 του; κλάσμα, κεφαλαίο ξ; ανοίγει παρένθεση; τάαφ συν, κεφαλαίο δέλτα, τάαφ; κλείνει παρένθεση; μείον; κεφαλαίο ξ; ανοίγει παρένθεση; τάαφ κόμμα, σίγμα; κλείνει παρένθεση, προς, κεφαλαίο δέλτα, τάαφ, τέλος κλάσματος; ήτα του σίγμα, φ; ανοίγει παρένθεση; σίγμα κόμμα; ύψιλον του σίγμα; κόμμα; ύψιλον τόνος; του σίγμα; κόμμα; ύψιλον διπλή παράγωγος; του σίγμα; κλείνει παρένθεση; d σίγμα")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_213() -> Result<()> { // same + let expr = r#" + + Α= + + lim + + ν + + + + + + κ=1 + ν + + + φ( + δ + κ + + )Δχ + + "#; + test("el", "SimpleSpeak", expr, "κεφαλαίο άλφα, ισούται με; το όριο όταν νί προσεγγίζει, άπειρο; του; άθροισμα από καπα ισούται με 1 ως νί του; φ του; ανοίγει παρένθεση; δέλτα δείκτης καπα; κλείνει παρένθεση; κεφαλαίο δέλτα, χ")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_214() -> Result<()> { // + let expr = r#" + + + + lim + + χ + + + + + + 0 + χ + + + + e + + + ψ + 2 + + + + dψ + + + = + + + π + + + 2 + + + "#; + test("el", "SimpleSpeak", expr, "το όριο όταν χ προσεγγίζει, άπειρο; του; ολοκλήρωμα από 0 ως χ του; e που υψώνεται στη μείον ψ στο τετράγωνο τέλος δύναμης; d ψ; ισούται με; κλάσμα, η τετραγωνική ρίζα του π; προς 2, τέλος κλάσματος")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_215() -> Result<()> { // same + let expr = r#" + + ( + + + + + + + β + 1 + + + + + + + + + β + 2 + + + + + + + ) + "#; + test("el", "SimpleSpeak", expr, "2 επί ένα πίνακας-στήλη; γραμμή 1; βήτα δείκτης 1; γραμμή 2; βήτα δείκτης 2")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_216() -> Result<()> { // same + let expr = r#" + + ( + + + + + + + Σ + + 1,1 + + + + + + + Σ + + 1,2 + + + + + + + + + Σ + + 2,1 + + + + + + + Σ + + 2,2 + + + + + + + ) + "#; + test("el", "SimpleSpeak", expr, "2 επί 2 πίνακας; γραμμή 1; στήλη 1; κεφαλαίο σίγμα δείκτης 1,1; στήλη 2; κεφαλαίο σίγμα δείκτης 1,2; γραμμή 2; στήλη 1; κεφαλαίο σίγμα δείκτης 2,1; στήλη 2; κεφαλαίο σίγμα δείκτης 2,2")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_217() -> Result<()> { // + let expr = r#" + + ( + + + + + + + Σ + + 1,1 + + + + + + + Σ + + 1,2 + + + + + + + + + Σ + + 2,1 + + + + + + + Σ + + 2,2 + + + + + + + )= + + ( + + + + + + + Σ + + 1,1 + + + + + + + Σ + + 1,2 + + + + + + + + + Σ + + 2,1 + + + + + + + Σ + + 2,2 + + + + + + + ) + + 1 + + + "#; + test("el", "SimpleSpeak", expr, "2 επί 2 πίνακας; γραμμή 1; στήλη 1; κεφαλαίο σίγμα στην 1,1, στήλη 2; κεφαλαίο σίγμα στην 1,2; γραμμή 2; στήλη 1; κεφαλαίο σίγμα στην 2,1, στήλη 2; κεφαλαίο σίγμα στην 2,2; ισούται με; τον 2 επί 2 πίνακα; γραμμή 1; στήλη 1; κεφαλαίο σίγμα δείκτης 1,1; στήλη 2; κεφαλαίο σίγμα δείκτης 1,2; γραμμή 2; στήλη 1; κεφαλαίο σίγμα δείκτης 2,1; στήλη 2; κεφαλαίο σίγμα δείκτης 2,2; στην μείον 1")?; + return Ok(()); + //theodora. fails. Now reads: 2 επί 2 πίνακας; γραμμή 1; στήλη 1; κεφαλαίο σίγμα στην 1,1, στήλη 2; κεφαλαίο σίγμα στην 1,2; γραμμή 2; στήλη 1; κεφαλαίο σίγμα στην 2,1, στήλη 2; κεφαλαίο σίγμα στην 2,2; ισούται με; TEMP NAME του 2 επί 2 πίνακας; γραμμή 1; στήλη 1; κεφαλαίο σίγμα δείκτης 1,1; στήλη 2; κεφαλαίο σίγμα δείκτης 1,2; γραμμή 2; στήλη 1; κεφαλαίο σίγμα δείκτης 2,1; στήλη 2; κεφαλαίο σίγμα δείκτης 2,2; στην μείον 1 +} + +#[test] +fn uoa_corpus_218() -> Result<()> { // + let expr = r#" + + + + ( + + + + + Α + + + Β + + + + + + Β + + + + + + Γ + + + + + ) + + 1 + + =( + + + + + + αα + + + + αβ + + + + + + βα + + + + ββ + + + + + ) + "#; + test("el", "SimpleSpeak", expr, "2 επί 2 πίνακας; γραμμή 1; στήλη 1; κεφαλαίο άλφα, στήλη 2; κεφαλαίο βήτα; γραμμή 2; στήλη 1; κεφαλαίο βήτα τόνος; στήλη 2; κεφαλαίο γάμμα; στην μείον 1; ισούται με; 2 επί 2 πίνακα; γραμμή 1; στήλη 1; άλφα άλφα, στήλη 2; άλφα βήτα; γραμμή 2; στήλη 1; βήτα άλφα, στήλη 2; βήτα βήτα")?; + return Ok(()); + //theodora. fails. Now reads: TEMP NAME του 2 επί 2 πίνακας; γραμμή 1; στήλη 1; κεφαλαίο άλφα, στήλη 2; κεφαλαίο βήτα; γραμμή 2; στήλη 1; κεφαλαίο βήτα τόνος; στήλη 2; κεφαλαίο γάμμα; στην μείον 1; ισούται με; 2 επί 2 πίνακα; γραμμή 1; στήλη 1; άλφα άλφα, στήλη 2; άλφα βήτα; γραμμή 2; στήλη 1; βήτα άλφα, στήλη 2; βήτα βήτα +} + +#[test] +fn uoa_corpus_219() -> Result<()> { // same + let expr = r#" + + ( + + + + + + + Υ + 1 + + + + + + + + + Υ + 2 + + + + + + + ) + "#; + test("el", "SimpleSpeak", expr, "2 επί ένα πίνακας-στήλη; γραμμή 1; κεφαλαίο ύψιλον δείκτης 1; γραμμή 2; κεφαλαίο ύψιλον δείκτης 2")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_220() -> Result<()> { // same + let expr = r#" + + ( + + + + + + + σ + 1 + 2 + + + + + γ + + + + + γ + + + + + σ + 2 + 2 + + + + + + + ) + Ι + ν + + + "#; + test("el", "SimpleSpeak", expr, "2 επί 2 πίνακας; γραμμή 1; στήλη 1; σίγμα δείκτης 1, στο τετράγωνο, στήλη 2; γάμμα; γραμμή 2; στήλη 1; γάμμα, στήλη 2; σίγμα δείκτης 2, στο τετράγωνο; κεφαλαίο ιότα δείκτης νί")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_221() -> Result<()> { // same + let expr = r#"Β2=1000Ιν"#; + test("el", "SimpleSpeak", expr, "κεφαλαίο βήτα δείκτης 2; ισούται με; τον 2 επί 2 διαγώνιο πίνακα; στήλη 1; 1; κυκλωμένο επί; κεφαλαίο ιότα δείκτης νί")?; + return Ok(()); + //theodora. fails. Now reads. κεφαλαίο βήτα δείκτης 2; ισούται με; ο 2 επί 2 διαγώνιος πίνακας; στήλη 1; 1; κυκλωμένο επί; κεφαλαίο ιότα δείκτης νί +} + +#[test] +fn uoa_corpus_222() -> Result<()> { // same + let expr = r#" + + + Β + 2 + + =( + + + + + 0 + + + 0 + + + + + 0 + + + 1 + + + + + ) + Ι + ν + + + "#; + test("el", "SimpleSpeak", expr, "κεφαλαίο βήτα δείκτης 2; ισούται με; τον 2 επί 2 διαγώνιο πίνακα; στήλη 2; 1; κυκλωμένο επί; κεφαλαίο ιότα δείκτης νί")?; + return Ok(()); + //theodora. fails accusative. Now reads: κεφαλαίο βήτα δείκτης 2; ισούται με; ο 2 επί 2 διαγώνιος πίνακας; στήλη 2; 1; κυκλωμένο επί; κεφαλαίο ιότα δείκτης νί +} + +#[test] +fn uoa_corpus_223() -> Result<()> { // same + let expr = r#" + + + Β + 3 + + =( + + + + + 0 + + + 1 + + + + + 1 + + + 0 + + + + + ) + Ι + ν + + + "#; + test("el", "SimpleSpeak", expr, "κεφαλαίο βήτα δείκτης 3; ισούται με; 2 επί 2 πίνακα; γραμμή 1; 0, 1; γραμμή 2; 1, 0; κυκλωμένο επί; κεφαλαίο ιότα δείκτης νί")?; + return Ok(()); + //theodora. fails accusative rule. +} + +#[test] +fn uoa_corpus_224() -> Result<()> { // same + let expr = r#" + + + Μ + + ( + + + + + Χ + + + 0 + + + + + 0 + + + Χ + + + + + ) + + = + Ι + 2 + + + Μ + Χ + + + "#; + test("el", "SimpleSpeak", expr, "κεφαλαίο μί δείκτης; ο 2 επί 2 διαγώνιος πίνακας; στήλη 1; κεφαλαίο χ; στήλη 2; κεφαλαίο χ; τέλος δείκτη; ισούται με; κεφαλαίο ιότα δείκτης 2; κυκλωμένο επί; κεφαλαίο μί δείκτης, κεφαλαίο χ")?; + return Ok(()); + //theodora. fails. Now reads: κεφαλαίο μί δείκτης; TEMP NAME του ο 2 επί 2 διαγώνιος πίνακας; στήλη 1; κεφαλαίο χ; στήλη 2; κεφαλαίο χ; τέλος δείκτη; ισούται με; κεφαλαίο ιότα δείκτης 2; κυκλωμένο επί; κεφαλαίο μί δείκτης, κεφαλαίο χ +} + +#[test] +fn uoa_corpus_225() -> Result<()> { // same + let expr = r#"var(vec(Υ_^1)vec(Υ_^2))=(Σ1,1Σ1,2Σ2,1Σ2,2)Ιν"#; + test("el", "SimpleSpeak", expr, "var του; 2 επί ένα πίνακα-στήλη; γραμμή 1; vec του; ανοίγει παρένθεση; παράσταση κεφαλαίο ύψιλον με γραμμή από κάτω με καπέλο από πάνω δείκτης 1; κλείνει παρένθεση; γραμμή 2; vec του; ανοίγει παρένθεση; παράσταση κεφαλαίο ύψιλον με γραμμή από κάτω με καπέλο από πάνω δείκτης 2; κλείνει παρένθεση; ισούται με; 2 επί 2 πίνακα; γραμμή 1; στήλη 1; κεφαλαίο σίγμα δείκτης 1,1; στήλη 2; κεφαλαίο σίγμα δείκτης 1,2; γραμμή 2; στήλη 1; κεφαλαίο σίγμα δείκτης 2,1; στήλη 2; κεφαλαίο σίγμα δείκτης 2,2; κυκλωμένο επί; κεφαλαίο ιότα δείκτης νί")?; + return Ok(()); + //theodora. fails. should be fixed with genitive. some accusatives fail + //Now reads: var του; 2 επί ένα πίνακας-στήλη; γραμμή 1; vec του; ανοίγει παρένθεση; παράσταση κεφαλαίο ύψιλον με γραμμή από κάτω με καπέλο από πάνω δείκτης 1; κλείνει παρένθεση; γραμμή 2; vec του; ανοίγει παρένθεση; παράσταση κεφαλαίο ύψιλον με γραμμή από κάτω με καπέλο από πάνω δείκτης 2; κλείνει παρένθεση; ισούται με; 2 επί 2 πίνακας; γραμμή 1; στήλη 1; κεφαλαίο σίγμα δείκτης 1,1; στήλη 2; κεφαλαίο σίγμα δείκτης 1,2; γραμμή 2; στήλη 1; κεφαλαίο σίγμα δείκτης 2,1; στήλη 2; κεφαλαίο σίγμα δείκτης 2,2; κυκλωμένο επί; κεφαλαίο ιότα δείκτης νί +} + +#[test] +fn uoa_corpus_226() -> Result<()> { // same + let expr = r#" + + Ιν + "#; + test("el", "SimpleSpeak", expr, "κεφαλαίο ιότα, κυκλωμένο επί, νί")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_227() -> Result<()> { // same + let expr = r#" + + ( + + + + + + + Υ + 1 + + + + + + + + + Υ + 2 + + + + + + + )[ + ( + + + + + Χ + + + 0 + + + + + 0 + + + Χ + + + + + )( + + + + + + + β + 1 + + + + + + + + + β + 2 + + + + + + + ),( + + + + + + + Σ + + 1,1 + + + + + + + Σ + + 1,2 + + + + + + + + + Σ + + 2,1 + + + + + + + Σ + + 2,2 + + + + + + + ) ] + "#; + test("el", "SimpleSpeak", expr, "2 επί ένα πίνακας-στήλη; γραμμή 1; κεφαλαίο ύψιλον δείκτης 1; γραμμή 2; κεφαλαίο ύψιλον δείκτης 2; κυματοειδής γραμμή; ανοίγει αγκύλη; ο 2 επί 2 διαγώνιος πίνακας; στήλη 1; κεφαλαίο χ; στήλη 2; κεφαλαίο χ; 2 επί ένα πίνακας-στήλη; γραμμή 1; βήτα δείκτης 1; γραμμή 2; βήτα δείκτης 2; κόμμα; 2 επί 2 πίνακας; γραμμή 1; στήλη 1; κεφαλαίο σίγμα δείκτης 1,1; στήλη 2; κεφαλαίο σίγμα δείκτης 1,2; γραμμή 2; στήλη 1; κεφαλαίο σίγμα δείκτης 2,1; στήλη 2; κεφαλαίο σίγμα δείκτης 2,2; κλείνει αγκύλη")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_228() -> Result<()> { // + let expr = r#" + + + + ( + + + + + + + + β + ^ + + + 1 + + + + + + + + + + β + ^ + + + 2 + + + + + + + )= + [ + ( + + + + + + + + Χ + + + + 1 + + + + + 0 + + + + + 0 + + + + + + Χ + + + + 2 + + + + + + + )( + + + + + + + Σ + + 1,1 + + + + + + + Σ + + 1,2 + + + + + + + + + Σ + + 2,1 + + + + + + + Σ + + 2,1 + + + + + + + )( + + + + + + + Χ + 1 + + + + + 0 + + + + + 0 + + + + + Χ + 2 + + + + + + + ) ] + + 1 + + + + + + + ×( + + + + + + + + Χ + + + + 1 + + + + + 0 + + + + + 0 + + + + + + Χ + + + + 2 + + + + + + + )( + + + + + + + Σ + + 1,1 + + + + + + + Σ + + 1,2 + + + + + + + + + Σ + + 2,1 + + + + + + + Σ + + 2,1 + + + + + + + )( + + + + + + + Υ + 1 + + + + + + + + + Υ + 2 + + + + + + + ) + + + + + "#; + test("el", "SimpleSpeak", expr, "2 εξισώσεις; εξίσωση 1; 2 επί ένα πίνακας-στήλη; γραμμή 1; βήτα καπέλο, δείκτης 1; γραμμή 2; βήτα καπέλο, δείκτης 2; ισούται με; ανοίγει αγκύλη; ο 2 επί 2 διαγώνιος πίνακας; κεφαλαίο χ τόνος, δείκτης 1; κεφαλαίο χ τόνος, δείκτης 2; 2 επί 2 πίνακας; γραμμή 1; στήλη 1; κεφαλαίο σίγμα στην 1,1, στήλη 2; κεφαλαίο σίγμα στην 1,2; γραμμή 2; στήλη 1; κεφαλαίο σίγμα στην 2,1, στήλη 2; κεφαλαίο σίγμα στην 2,1; ο 2 επί 2 διαγώνιος πίνακας; κεφαλαίο χ δείκτης 1; κεφαλαίο χ δείκτης 2; κλείνει αγκύλη στην μείον 1; εξίσωση 2; επί; ο 2 επί 2 διαγώνιος πίνακας; κεφαλαίο χ τόνος, δείκτης 1; κεφαλαίο χ τόνος, δείκτης 2; 2 επί 2 πίνακας; γραμμή 1; στήλη 1; κεφαλαίο σίγμα στην 1,1, στήλη 2; κεφαλαίο σίγμα στην 1,2; γραμμή 2; στήλη 1; κεφαλαίο σίγμα στην 2,1, στήλη 2; κεφαλαίο σίγμα στην 2,1; 2 επί ένα πίνακας-στήλη; γραμμή 1; κεφαλαίο ύψιλον δείκτης 1; γραμμή 2; κεφαλαίο ύψιλον δείκτης 2")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_229() -> Result<()> { // + let expr = r#" + + [ + ( + + + + + + + Χ + 1 + + + + + 0 + + + + + + + Σ + + 2,1 + + + Σ + + 1,1 + + 1 + + + Χ + 1 + + + + + + + Χ + 2 + + + + + + + )( + + + + + + + β + 1 + + + + + + + + + β + 2 + + + + + + + ),( + + + + + + + Σ + + 1,1 + + + + + 0 + + + + + 0 + + + + + Σ + + 22.1 + + + + + + + ) ] + "#; + test("el", "SimpleSpeak", expr, "ανοίγει αγκύλη; 2 επί 2 πίνακας; γραμμή 1; στήλη 1; κεφαλαίο χ δείκτης 1; στήλη 2; 0; γραμμή 2; στήλη 1; μείον κεφαλαίο σίγμα δείκτης 2,1; κεφαλαίο σίγμα δείκτης 1,1, στην μείον 1; κεφαλαίο χ δείκτης 1; στήλη 2; κεφαλαίο χ δείκτης 2; 2 επί ένα πίνακας-στήλη; γραμμή 1; βήτα δείκτης 1; γραμμή 2; βήτα δείκτης 2; κόμμα; ο 2 επί 2 διαγώνιος πίνακας; στήλη 1; κεφαλαίο σίγμα δείκτης 1,1; στήλη 2; κεφαλαίο σίγμα δείκτης 22.1; κλείνει αγκύλη")?; + return Ok(()); + //theodora. fails. converts 22.1-->221 +} + +#[test] +fn uoa_corpus_230() -> Result<()> { // + let expr = r#" + + ( + + Ι,0 + )( + + + + + + + + Χ + + + + 1 + + + Σ + + 1,1 + + + Χ + 1 + + + + + + + + Χ + + + + 1 + + + Σ + + 1,2 + + + Χ + 2 + + + + + + + + + + Χ + + + + 2 + + + Σ + + 2,1 + + + Χ + 1 + + + + + + + + Χ + + + + 2 + + + Σ + + 2,2 + + + Χ + 2 + + + + + + + )( + + + + + 0 + + + + + Ι + + + + + ) + "#; + test("el", "SimpleSpeak", expr, "ανοίγει παρένθεση; κεφαλαίο ιότα;0; κλείνει παρένθεση; 2 επί 2 πίνακας; γραμμή 1; στήλη 1; κεφαλαίο χ τόνος, δείκτης 1; κεφαλαίο σίγμα στην 1,1; κεφαλαίο χ δείκτης 1; στήλη 2; κεφαλαίο χ τόνος, δείκτης 1; κεφαλαίο σίγμα στην 1,2; κεφαλαίο χ δείκτης 2; γραμμή 2; στήλη 1; κεφαλαίο χ τόνος, δείκτης 2; κεφαλαίο σίγμα στην 2,1; κεφαλαίο χ δείκτης 1; στήλη 2; κεφαλαίο χ τόνος, δείκτης 2; κεφαλαίο σίγμα στην 2,2; κεφαλαίο χ δείκτης 2; 2 επί ένα πίνακας-στήλη; 0; κεφαλαίο ιότα")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_231() -> Result<()> { // + let expr = r#" + + ( + + + + + + β + ~ + + 1 + + + + + + + + β + ~ + + 2 + + + + + ) + + + ~ + + + Ν + + 2 + κ + + + + + [ + + + ( + + + + + β + 1 + + + + + + + β + 2 + + + + + ) + + + , + + + ( + + + + Var + + ( + + + β + ~ + + 1 + + ) + + + + + cov + + ( + + + β + ~ + + 1 + + , + + + β + ~ + + 2 + + ) + + + + + + + cov + + ( + + + β + ~ + + 2 + + , + + + β + ~ + + 1 + + ) + + + + + Var + + ( + + + β + ~ + + 2 + + ) + + + + + ) + + + ] + +"#; + test("el", "SimpleSpeak", expr, "2 επί ένα πίνακας-στήλη; γραμμή 1; βήτα κυματοειδής γραμμή, δείκτης 1; γραμμή 2; βήτα κυματοειδής γραμμή, δείκτης 2; κυματοειδής γραμμή; κεφαλαίο νί δείκτης, 2 στην καπα οστή τέλος δείκτη; ανοίγει αγκύλη; 2 επί ένα πίνακας-στήλη; γραμμή 1; βήτα δείκτης 1; γραμμή 2; βήτα δείκτης 2; κόμμα; 2 επί 2 πίνακας; γραμμή 1; στήλη 1; Var του; ανοίγει παρένθεση; βήτα κυματοειδής γραμμή, δείκτης 1; κλείνει παρένθεση, στήλη 2; cov; ανοίγει παρένθεση; βήτα κυματοειδής γραμμή, δείκτης 1; κόμμα; βήτα κυματοειδής γραμμή, δείκτης 2; κλείνει παρένθεση; γραμμή 2; στήλη 1; cov; ανοίγει παρένθεση; βήτα κυματοειδής γραμμή, δείκτης 2; κόμμα; βήτα κυματοειδής γραμμή, δείκτης 1; κλείνει παρένθεση, στήλη 2; Var του; ανοίγει παρένθεση; βήτα κυματοειδής γραμμή, δείκτης 2; κλείνει παρένθεση; κλείνει αγκύλη")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_232() -> Result<()> { // same + let expr = r#" + + ( + + + + + + + Υ + 1 + + + + + + + + + Υ + 2 + + + + + + + ) + Ν + + 2ν + + [ + ( + + + Ι + 2 + + Χ + )( + + + + + + + β + 1 + + + + + + + + + β + 2 + + + + + + + ),( + + + + + + + σ + 1 + 2 + + + + + γ + + + + + γ + + + + + σ + 2 + 2 + + + + + + + ) + Ι + ν + + ] + "#; + test("el", "SimpleSpeak", expr, "2 επί ένα πίνακας-στήλη; γραμμή 1; κεφαλαίο ύψιλον δείκτης 1; γραμμή 2; κεφαλαίο ύψιλον δείκτης 2; κυματοειδής γραμμή; κεφαλαίο νί δείκτης, 2 νί τέλος δείκτη; ανοίγει αγκύλη; ανοίγει παρένθεση; κεφαλαίο ιότα δείκτης 2; κυκλωμένο επί, κεφαλαίο χ; κλείνει παρένθεση; 2 επί ένα πίνακας-στήλη; γραμμή 1; βήτα δείκτης 1; γραμμή 2; βήτα δείκτης 2; κόμμα; 2 επί 2 πίνακας; γραμμή 1; στήλη 1; σίγμα δείκτης 1, στο τετράγωνο, στήλη 2; γάμμα; γραμμή 2; στήλη 1; γάμμα, στήλη 2; σίγμα δείκτης 2, στο τετράγωνο; κυκλωμένο επί; κεφαλαίο ιότα δείκτης νί; κλείνει αγκύλη")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_233() -> Result<()> { // + let expr = r#" + + ( + + + + + + + σ + + 2,0 + 4 + + + + + + + γ + 0 + 2 + + + + + + 2 + γ + 0 + + + σ + + 2,0 + 2 + + + + + + + + + γ + 0 + 2 + + + + + + + σ + + 1,0 + 4 + + + + + + 2 + γ + 0 + + + σ + + 1,0 + 2 + + + + + + + + 2 + γ + 0 + + + σ + + 2,0 + 2 + + + + + + 2 + γ + 0 + + + σ + + 1,0 + 2 + + + + + + 2( + + + σ + + 1,0 + 2 + + , + σ + + 2,0 + 2 + + + + γ + 0 + 2 + + + ) + + + + + ) + "#; + test("el", "SimpleSpeak", expr, "3 επί 3 πίνακας; γραμμή 1; στήλη 1; σίγμα δείκτης 2,0, στην τέταρτη, στήλη 2; γάμμα δείκτης 0, στο τετράγωνο, στήλη 3; μείον 2, γάμμα δείκτης 0; σίγμα δείκτης 2,0, στο τετράγωνο; γραμμή 2; στήλη 1; γάμμα δείκτης 0, στο τετράγωνο, στήλη 2; σίγμα δείκτης 1,0, στην τέταρτη, στήλη 3; μείον 2, γάμμα δείκτης 0; σίγμα δείκτης 1,0, στο τετράγωνο; γραμμή 3; στήλη 1; μείον 2, γάμμα δείκτης 0; σίγμα δείκτης 2,0, στο τετράγωνο, στήλη 2; μείον 2, γάμμα δείκτης 0; σίγμα δείκτης 1,0, στο τετράγωνο, στήλη 3; 2; ανοίγει παρένθεση; σίγμα δείκτης 1,0, στο τετράγωνο; κόμμα; σίγμα δείκτης 2,0, στο τετράγωνο; συν, γάμμα δείκτης 0, στο τετράγωνο; κλείνει παρένθεση")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_234() -> Result<()> { // same + let expr = r#" + + + + { + + Μ + + ( + + + + + Χ + + + 0 + + + + + 0 + + + Χ + + + + + ) + + [ + ( + + + + + + + σ + + 1,0 + 2 + + + + + + + γ + 0 + + + + + + + + + γ + 0 + + + + + + + σ + + 2,0 + 2 + + + + + + + ) + Ι + ν + + ] + Μ + + ( + + + + + Χ + + + 0 + + + + + 0 + + + Χ + + + + + ) + + } + + + + + "#; + test("el", "SimpleSpeak", expr, "ανοίγει άγκιστρο ο κεφαλαίο μί δείκτης; ο 2 επί 2 διαγώνιος πίνακας; στήλη 1; κεφαλαίο χ; στήλη 2; κεφαλαίο χ; τέλος δείκτη; ανοίγει αγκύλη; 2 επί 2 πίνακας; γραμμή 1; στήλη 1; σίγμα δείκτης 1,0, στο τετράγωνο, στήλη 2; γάμμα δείκτης 0; γραμμή 2; στήλη 1; γάμμα δείκτης 0; στήλη 2; σίγμα δείκτης 2,0, στο τετράγωνο; κυκλωμένο επί; κεφαλαίο ιότα δείκτης νί; κλείνει αγκύλη; κεφαλαίο μί δείκτης; ο 2 επί 2 διαγώνιος πίνακας; στήλη 1; κεφαλαίο χ; στήλη 2; κεφαλαίο χ; τέλος δείκτη, κλείνει άγκιστρο εκθέτης συν")?; + return Ok(()); + //theodora. fails. Now reads: το σύνολο κεφαλαίο μί δείκτης; TEMP NAME του ο 2 επί 2 διαγώνιος πίνακας; στήλη 1; κεφαλαίο χ; στήλη 2; κεφαλαίο χ; τέλος δείκτη; ανοίγει αγκύλη; 2 επί 2 πίνακας; γραμμή 1; στήλη 1; σίγμα δείκτης 1,0, στο τετράγωνο, στήλη 2; γάμμα δείκτης 0; γραμμή 2; στήλη 1; γάμμα δείκτης 0; στήλη 2; σίγμα δείκτης 2,0, στο τετράγωνο; κυκλωμένο επί; κεφαλαίο ιότα δείκτης νί; κλείνει αγκύλη; κεφαλαίο μί δείκτης; TEMP NAME του ο 2 επί 2 διαγώνιος πίνακας; στήλη 1; κεφαλαίο χ; στήλη 2; κεφαλαίο χ; τέλος δείκτη, εκθέτης συν +} + +#[test] +fn uoa_corpus_235() -> Result<()> { // same + let expr = r#" + + ( + + + + + η + + + + ( + + + Μ + Α + + + Σ + 0 + + + Μ + Α + + + ) + + + + + Β + 1 + + + ( + + + Μ + Α + + + Σ + 0 + + + Μ + Α + + + ) + + + + η + + + + + + + + + + + η + + + + ( + + + Μ + Α + + + Σ + 0 + + + Μ + Α + + + ) + + + + + Β + π + + + ( + + + Μ + Α + + + Σ + 0 + + + Μ + Α + + + ) + + + + η + + + + + ) + "#; + test("el", "SimpleSpeak", expr, "3 επί ένα πίνακας-στήλη; γραμμή 1; ήτα τόνος; ανοίγει παρένθεση; κεφαλαίο μί δείκτης, κεφαλαίο άλφα; κεφαλαίο σίγμα δείκτης 0; κεφαλαίο μί δείκτης, κεφαλαίο άλφα; κλείνει παρένθεση εκθέτης συν; κεφαλαίο βήτα δείκτης 1; ανοίγει παρένθεση; κεφαλαίο μί δείκτης, κεφαλαίο άλφα; κεφαλαίο σίγμα δείκτης 0; κεφαλαίο μί δείκτης, κεφαλαίο άλφα; κλείνει παρένθεση εκθέτης συν; ήτα; γραμμή 2; κατακόρυφα αποσιωπητικά; γραμμή 3; ήτα τόνος; ανοίγει παρένθεση; κεφαλαίο μί δείκτης, κεφαλαίο άλφα; κεφαλαίο σίγμα δείκτης 0; κεφαλαίο μί δείκτης, κεφαλαίο άλφα; κλείνει παρένθεση εκθέτης συν; κεφαλαίο βήτα δείκτης π; ανοίγει παρένθεση; κεφαλαίο μί δείκτης, κεφαλαίο άλφα; κεφαλαίο σίγμα δείκτης 0; κεφαλαίο μί δείκτης, κεφαλαίο άλφα; κλείνει παρένθεση εκθέτης συν; ήτα")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_236() -> Result<()> { // + let expr = r#" + + Κ=( + + + φ + 1 + + ,, + φ + + ρ( + Τ + ) + + + )( + + + + + + + 1 + + + + + λ + 1 + + + + + + + + + + + + 0 + + + + + + + + + + + + + + + + 0 + + + + + + + + 1 + + + + + λ + + ρ( + Τ + ) + + + + + + + + + + + ) + "#; + test("el", "SimpleSpeak", expr, "κεφαλαίο καπα, ισούται με; ανοίγει παρένθεση; φ δείκτης 1; κόμμα; αποσιωπητικά, κόμμα; φ δείκτης, ρ του κεφαλαίο τάαφ; κλείνει παρένθεση; 3 επί 3 πίνακας; γραμμή 1; στήλη 1; κλάσμα, 1 προς, η τετραγωνική ρίζα του λάμδα δείκτης 1; τέλος ρίζας; τέλος κλάσματος; στήλη 2; αποσιωπητικά, στήλη 3; 0; γραμμή 2; στήλη 1; κατακόρυφα αποσιωπητικά, στήλη 2; διαγώνια αποσιωπητικά προς τα κάτω δεξιά, στήλη 3; κατακόρυφα αποσιωπητικά; γραμμή 3; στήλη 1; 0, στήλη 2; αποσιωπητικά, στήλη 3; κλάσμα, 1 προς, η τετραγωνική ρίζα του λάμδα δείκτης, ρ του κεφαλαίο τάαφ; τέλος ρίζας; τέλος κλάσματος")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_237() -> Result<()> { // same + let expr = r#" + + ( + + + + + Σ + + + + + γ + + + + + + τ(γ) + + + + + )=( + + + + + 1 + + + 1 + + + 1 + + + + + 1 + + + + + ζ + 2 + + + + + ζ + + + + + 1 + + + ζ + + + + + ζ + 2 + + + + + + + )×( + + + + + θ + + + + + + σ(θ) + + + + + + + σ + 2 + + (θ) + + + + + ) + "#; + test("el", "SimpleSpeak", expr, "3 επί ένα πίνακας-στήλη; κεφαλαίο σίγμα; γάμμα; τάαφ του γάμμα; ισούται με; 3 επί 3 πίνακας; γραμμή 1; στήλη 1; 1, στήλη 2; 1, στήλη 3; 1; γραμμή 2; στήλη 1; 1, στήλη 2; ζήτα στο τετράγωνο, στήλη 3; ζήτα; γραμμή 3; στήλη 1; 1, στήλη 2; ζήτα, στήλη 3; ζήτα στο τετράγωνο; επί; 3 επί ένα πίνακας-στήλη; γραμμή 1; θήτα; γραμμή 2; σίγμα του θήτα; γραμμή 3; σίγμα στο τετράγωνο, του θήτα")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_238() -> Result<()> { // same + let expr = r#" + + Τ( + + 0, + ) + "#; + test("el", "SimpleSpeak", expr, "κεφαλαίο τάαφ, ανήκει; ανοίγει παρένθεση, 0, άπειρο, κλείνει παρένθεση")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_239() -> Result<()> { // same + let expr = r#" + + ω=( + + + ω + 1 + + ,, + ω + + ν1 + + + ) + "#; + test("el", "SimpleSpeak", expr, "ωμέγα ισούται με; ανοίγει παρένθεση; ωμέγα δείκτης 1; κόμμα; αποσιωπητικά, κόμμα; ωμέγα δείκτης, νί μείον 1 τέλος δείκτη; κλείνει παρένθεση")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_240() -> Result<()> { // same + let expr = r#" + + + Α + + + =Α×( + + 0, + ) + "#; + test("el", "SimpleSpeak", expr, "κεφαλαίο άλφα δείκτης άπειρο; ισούται με; κεφαλαίο άλφα, επί; ανοίγει παρένθεση, 0, άπειρο, κλείνει παρένθεση")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_241() -> Result<()> { // + let expr = r#" + + + Β + χ + + ( + + 0,; + ) + "#; + test("el", "SimpleSpeak", expr, "κεφαλαίο βήτα στην χ οστή; ανοίγει παρένθεση; 0, άπειρο; ελληνικό ερωτηματικό; οι μιγαδικοί αριθμοί; κλείνει παρένθεση")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_242() -> Result<()> { // + let expr = r#" + + + + δ + + + "#; + test("el", "SimpleSpeak", expr, "οι πραγματικοί αριθμοί στην δέλτα οστή")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_243() -> Result<()> { // same + let expr = r#" + + δ\{ 0 } + "#; + test("el", "SimpleSpeak", expr, "δέλτα ανήκει; στους φυσικούς αριθμούς; ανάστροφη κάθετος, το σύνολο 0")?; + return Ok(()); + //theodora. fails. Now reads: δέλτα ανήκει; οι φυσικοί αριθμοί; ανάστροφη κάθετος, το σύνολο 0 + +} + +#[test] +fn uoa_corpus_244() -> Result<()> { // same + let expr = r#" + + σΩ + "#; + test("el", "SimpleSpeak", expr, "σίγμα, είναι ένα υποσύνολο του; μερικό διαφορικό, κεφαλαίο ωμέγα")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_245() -> Result<()> { // + let expr = r#" + + [ + + χ + κ + + ,χ ]Κ + "#; + test("el", "SimpleSpeak", expr, "το κλειστό διάστημα από χ δείκτης καπα, ως χ; είναι ένα υποσύνολο του; κεφαλαίο καπα")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_246() -> Result<()> { // same + let expr = r#" + + χ + Ω + ¯ + + + "#; + test("el", "SimpleSpeak", expr, "χ ανήκει, κεφαλαίο ωμέγα παύλα")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_247() -> Result<()> { // same + let expr = r#" + + + Μ + σ + + ={ + Κ,Λ } + "#; + test("el", "SimpleSpeak", expr, "κεφαλαίο μί δείκτης σίγμα; ισούται με; το σύνολο κεφαλαίο καπα, κόμμα; κεφαλαίο λάμδα")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_248() -> Result<()> { // + let expr = r#" + + + Γ + + ,α + + ( + + Ω×[ + 0, ] + ) + "#; + test("el", "SimpleSpeak", expr, "κεφαλαίο γάμμα που υψώνεται στη άπειρο κόμμα, άλφα τέλος δύναμης; ανοίγει παρένθεση; μερικό διαφορικό, κεφαλαίο ωμέγα; επί; ανοίγει αγκύλη, 0, άπειρο, κλείνει αγκύλη; κλείνει παρένθεση")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_249() -> Result<()> { // + let expr = r#" + + χΩ + "#; + test("el", "SimpleSpeak", expr, "χ ανήκει, μερικό διαφορικό, κεφαλαίο ωμέγα")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_250() -> Result<()> { // + let expr = r#" + + { + + β + σ + Κ + + :σΒ,ΚΜ } + "#; + test("el", "SimpleSpeak", expr, "το σύνολο βήτα δείκτης σίγμα, στην κεφαλαίο καπα οστή; άνω κάτω τελεία; σίγμα που ανήκει, κεφαλαίο βήτα; κόμμα; κεφαλαίο καπα, που ανήκει, κεφαλαίο μί")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_251() -> Result<()> { // + let expr = r#" + + { + + Κ + Κ + ν + + :ν + 0,Ν+1,ΚΜ } + "#; + test("el", "SimpleSpeak", expr, "το σύνολο κεφαλαίο καπα δείκτης, κεφαλαίο καπα, στην νί οστή; άνω κάτω τελεία; νί που ανήκει; αριστερή λευκή τετραγωνική αγκύλη; 0, κεφαλαίο νί, συν 1; δεξιά λευκή τετραγωνική αγκύλη; κόμμα; κεφαλαίο καπα, που ανήκει, κεφαλαίο μί")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_252() -> Result<()> { // same + let expr = r#" + + + τ + 0 + + [ + 0, ] + "#; + test("el", "SimpleSpeak", expr, "τάαφ δείκτης 0; ανήκει; ανοίγει αγκύλη, 0, άπειρο, κλείνει αγκύλη")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_253() -> Result<()> { // same + let expr = r#" + + + υ + 0 + + + Λ + 2 + + ( + Ω + ) + "#; + test("el", "SimpleSpeak", expr, "ύψιλον δείκτης 0; ανήκει; κεφαλαίο λάμδα στο τετράγωνο; του κεφαλαίο ωμέγα")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_254() -> Result<()> { // + let expr = r#" + + + φ + 0 + + + + Γ + ˙ + + + + + ( + + + Υ + 0 + + + ) + "#; + test("el", "SimpleSpeak", expr, "φ δείκτης 0; ανήκει; η άπειρο δύναμη του, κεφαλαίο γάμμα τελεία; του; ανοίγει παρένθεση; κεφαλαίο ύψιλον δείκτης 0; κλείνει παρένθεση")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_255() -> Result<()> { // + let expr = r#" + + + Η + 2 + + ( + + + ε + + γ×τ + + , + Ω + + + + ) + "#; + test("el", "SimpleSpeak", expr, "κεφαλαίο ήτα στο τετράγωνο; ανοίγει παρένθεση, έψιλον που υψώνεται στη μείον γάμμα, επί τάαφ τέλος δύναμης, κόμμα, κεφαλαίο ωμέγα δείκτης άπειρο, κλείνει παρένθεση")?; + return Ok(()); + //theodora. fails with current rules. Now reads: κεφαλαίο ήτα στο τετράγωνο; το ανοιχτό διάστημα από έψιλον που υψώνεται στη μείον γάμμα, επί τάαφ τέλος δύναμης, ως κεφαλαίο ωμέγα δείκτης άπειρο +} + +#[test] +fn uoa_corpus_256() -> Result<()> { // + let expr = r#" + + + Ω + ρ + + :={ + χΩ: + ρ + 2 + + <| χ |<2ρ,ρ>0 } + "#; + test("el", "SimpleSpeak", expr, "κεφαλαίο ωμέγα στην ρ οστή; άνω κάτω τελεία; ισούται με; το σύνολο χ που ανήκει, κεφαλαίο ωμέγα; άνω κάτω τελεία; ρ προς 2; είναι μικρότερο από; την απόλυτη τιμή του χ; είναι μικρότερο από, 2 ρ; κόμμα; ρ είναι μεγαλύτερο από 0")?; + return Ok(()); + //theodora. fails. +} + +#[test] +fn uoa_corpus_257() -> Result<()> { // + let expr = r#" + + Κ={ + χ=( + + + χ + 1 + + , + χ + 2 + + + ) + + 2 + + :ρ>0,0<ω< + ω + 0 + + } + "#; + test("el", "SimpleSpeak", expr, "κεφαλαίο καπα, ισούται με; το σύνολο όλων των χ ισούται με; ανοίγει παρένθεση; χ δείκτης 1; κόμμα; χ δείκτης 2; κλείνει παρένθεση; που ανήκει r 2 τέτοια ώστε ρ είναι μεγαλύτερο από; 0,0 είναι μικρότερο από, ωμέγα, είναι μικρότερο από; ωμέγα δείκτης 0")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_258() -> Result<()> { // + let expr = r#" + + Α={ + τ[ + 0,Τ ]:| + + υ + ˙ + + ( + τ + ) |1 } + "#; + test("el", "SimpleSpeak", expr, "κεφαλαίο άλφα, ισούται με; το σύνολο όλων των τάαφ που ανήκει; ανοίγει αγκύλη; 0, κεφαλαίο τάαφ; κλείνει αγκύλη τέτοια ώστε η απόλυτη τιμή του ύψιλον τελεία; του τάαφ τέλος απόλυτης τιμής; είναι μεγαλύτερο από ή ίσο με 1")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_259() -> Result<()> { // same + let expr = r#" + + η:( + + 0,1 + )[ + 0, ) + "#; + test("el", "SimpleSpeak", expr, "ήτα άνω κάτω τελεία; 0,1 βέλος προς τα δεξιά; ανοίγει αγκύλη, 0, άπειρο, κλείνει παρένθεση")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_260() -> Result<()> { // same + let expr = r#" + + φ:( + + 0,1 + )×( + + 0, + )×( + + 0, + )×( + + ,0 + )[ + 0, ) + "#; + test("el", "SimpleSpeak", expr, "φ άνω κάτω τελεία; 0,1 επί; ανοίγει παρένθεση, 0, άπειρο, κλείνει παρένθεση; επί; ανοίγει παρένθεση, 0, άπειρο, κλείνει παρένθεση; επί; ανοίγει παρένθεση; μείον άπειρο;0; κλείνει παρένθεση; βέλος προς τα δεξιά; ανοίγει αγκύλη, 0, άπειρο, κλείνει παρένθεση")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_261() -> Result<()> { // same + let expr = r#" + + + Γ + 2 + + [ + 0,1 ] + "#; + test("el", "SimpleSpeak", expr, "κεφαλαίο γάμμα στο τετράγωνο; του 0,1")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_262() -> Result<()> { // + let expr = r#" + + Κ( + ρ + )={ + υΚ:| + υ |<ρ } + "#; + test("el", "SimpleSpeak", expr, "κεφαλαίο καπα, του ρ; ισούται με; το σύνολο όλων των ύψιλον που ανήκει, κεφαλαίο καπα τέτοια ώστε η απόλυτη τιμή του νόρμα του ύψιλον τέλος απόλυτης τιμής; είναι μικρότερο από ρ")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_263() -> Result<()> { // + let expr = r#" + + χ + + ν + + + "#; + test("el", "SimpleSpeak", expr, "χ ανήκει, στους πραγματικούς αριθμούς στην νί οστή")?; + return Ok(()); + //theodora. fails with current rules. Should be fixed with genitive +} + +#[test] +fn uoa_corpus_264() -> Result<()> { // same + let expr = r#" + + α[ + 0, + π + + + 1 ) + "#; + test("el", "SimpleSpeak", expr, "άλφα ανήκει; ανοίγει αγκύλη; 0; π εκθέτης μείον; μείον 1; κλείνει παρένθεση")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_265() -> Result<()> { // same + let expr = r#" + + υ + + Κ( + + + ρ + 2 + + + ) + ¯ + + \Κ( + + + ρ + 1 + + + ) + "#; + test("el", "SimpleSpeak", expr, "ύψιλον ανήκει; παράσταση κεφαλαίο καπα, του; ανοίγει παρένθεση, ρ δείκτης 2; κλείνει παρένθεση με γραμμή από πάνω; ανάστροφη κάθετος; κεφαλαίο καπα, του; ανοίγει παρένθεση, ρ δείκτης 1; κλείνει παρένθεση")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_266() -> Result<()> { // + let expr = r#" + + + Κ + β + + ( + ρ + )={ + υ + Κ + β + + : υ <ρ } + "#; + test("el", "SimpleSpeak", expr, "η βήτα δύναμη του, κεφαλαίο καπα; του ρ; ισούται με; το σύνολο όλων των ύψιλον που ανήκει, κεφαλαίο καπα στην βήτα οστή τέτοια ώστε νόρμα του ύψιλον; είναι μικρότερο από ρ")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_267() -> Result<()> { // same + let expr = r#" + + 0 + Ω + 1 + + + + Ω + ¯ + + + 1 + + + Ω + 2 + + + "#; + test("el", "SimpleSpeak", expr, "0 ανήκει; κεφαλαίο ωμέγα δείκτης 1; είναι ένα υποσύνολο του; κεφαλαίο ωμέγα παύλα, δείκτης 1; είναι ένα υποσύνολο του; κεφαλαίο ωμέγα δείκτης 2")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_268() -> Result<()> { // same + let expr = r#" + + + υ + * + + Κ + "#; + test("el", "SimpleSpeak", expr, "ύψιλον αστερίσκος; ανήκει, κεφαλαίο καπα")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_269() -> Result<()> { // same + let expr = r#" + + Γ( + + 0,σ + )0 + "#; + test("el", "SimpleSpeak", expr, "κεφαλαίο γάμμα; ανοίγει παρένθεση, 0, σίγμα, κλείνει παρένθεση; είναι ταυτόσημο με 0")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_270() -> Result<()> { // same + let expr = r#" + + + Υ + 1 + + ( + + + Χ + + β1 + + , + Σ + + 1,1 + + + ) + "#; + test("el", "SimpleSpeak", expr, "κεφαλαίο ύψιλον δείκτης 1; κυματοειδής γραμμή; ανοίγει παρένθεση; κεφαλαίο χ δείκτης, βήτα 1 τέλος δείκτη; κόμμα; κεφαλαίο σίγμα δείκτης 1,1; κλείνει παρένθεση")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_271() -> Result<()> { // + let expr = r#" + + ( + + + Υ + 1 + + , + Υ + 2 + + + )= + Σ + + 1,2 + + 0 + "#; + test("el", "SimpleSpeak", expr, "ανοίγει παρένθεση κεφαλαίο ύψιλον δείκτης 1, κόμμα, κεφαλαίο ύψιλον δείκτης 2; κλείνει παρένθεση, ισούται με; κεφαλαίο σίγμα δείκτης 1,2; είναι διάφορο του 0")?; + return Ok(()); + //theodora. fails. recognizes as a set. Now reads: το ανοιχτό διάστημα από κεφαλαίο ύψιλον δείκτης 1, ως κεφαλαίο ύψιλον δείκτης 2; ισούται με; κεφαλαίο σίγμα δείκτης 1,2; είναι διάφορο του 0 +} + +#[test] +fn uoa_corpus_272() -> Result<()> { // + let expr = r#" + + + Ω + ¯ + + = + + + + ΚΜ + + + Κ + ¯ + + + + "#; + test("el", "SimpleSpeak", expr, "κεφαλαίο ωμέγα παύλα; ισούται με; ένωση για κεφαλαίο καπα, ανήκει κεφαλαίο μί; κεφαλαίο καπα παύλα")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_273() -> Result<()> { // same + let expr = r#" + + max{ + 1,2,3 } + "#; + test("el", "SimpleSpeak", expr, "μέγιστο του συνόλου 1,2,3")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_274() -> Result<()> { // same + let expr = r#" + + sup{ + 1,2,3 }=3 + "#; + test("el", "SimpleSpeak", expr, "σουπρέμουμ του συνόλου 1,2,3; ισούται με 3")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_275() -> Result<()> { // same + let expr = r#" + + ΑΒ + "#; + test("el", "SimpleSpeak", expr, "κεφαλαίο άλφα, είναι ένα υποσύνολο του; κεφαλαίο βήτα")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_276() -> Result<()> { // same + let expr = r#" + + inf{ + 1,2,3 }=1 + "#; + test("el", "SimpleSpeak", expr, "ινφίμουμ του συνόλου 1,2,3; ισούται με 1")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_277() -> Result<()> { // same + let expr = r#" + + + + + α + + Α + + "#; + test("el", "SimpleSpeak", expr, "ένωση για άλφα, κεφαλαίο άλφα")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_278() -> Result<()> { // same + let expr = r#" + + + + + α + + Α + + "#; + test("el", "SimpleSpeak", expr, "γινόμενο για άλφα του; κεφαλαίο άλφα")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_279() -> Result<()> { // same + let expr = r#" + + αβ + "#; + test("el", "SimpleSpeak", expr, "άλφα ένωση βήτα")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_280() -> Result<()> { // same + let expr = r#" + + Α= + "#; + test("el", "SimpleSpeak", expr, "κεφαλαίο άλφα, ισούται με, κενό σύνολο")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_281() -> Result<()> { // same + let expr = r#" + + αβ + "#; + test("el", "SimpleSpeak", expr, "άλφα ένωση βήτα")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_282() -> Result<()> { // same + let expr = r#" + + cov( + + + β + 1 + + , + β + 2 + + + ) + "#; + test("el", "SimpleSpeak", expr, "cov; ανοίγει παρένθεση; βήτα δείκτης 1; κόμμα; βήτα δείκτης 2; κλείνει παρένθεση")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_283() -> Result<()> { // same + let expr = r#"Var(β1)"#; + // TODO: add expected speech + test("el", "SimpleSpeak", expr, "Var του; ανοίγει παρένθεση; βήτα δείκτης 1; κλείνει παρένθεση")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_284() -> Result<()> { // + let expr = r#" + + χΧ:ψΨ:χ=ψ + "#; + test("el", "SimpleSpeak", expr, "για κάθε, χ ανήκει κεφαλαίο χ; άνω κάτω τελεία; υπάρχει, ψ ανήκει κεφαλαίο ψ; άνω κάτω τελεία, χ ισούται με ψ")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_285() -> Result<()> { // + let expr = r#" + + + Γ + 0 + 2 + + [ + 0,1 ]={ + υ + Γ + 2 + + [ + 0,1 ]:υ( + 0 + )= + υ + + + ( + 1 + )=0 } + "#; + test("el", "SimpleSpeak", expr, "κεφαλαίο γάμμα δείκτης 0, στο τετράγωνο; του 0,1; ισούται με; το σύνολο όλων των ύψιλον που ανήκει; κεφαλαίο γάμμα στο τετράγωνο; του 0,1 τέτοια ώστε ύψιλον του 0, ισούται με, ύψιλον τόνος; του 1; ισούται με 0")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_286() -> Result<()> { // + let expr = r#" + + max{ + + 1 + 5 + + + χ + 2 + + + + 1 + + + χ + + + + : + 1 + 2 + + ρτ( + + 3 + τ + 2 + + + )χρτ( + + 2τ + ) } + "#; + test("el", "SimpleSpeak", expr, "μέγιστο του; συνόλου όλων των 1 πέμπτο χ στο τετράγωνο; συν; κλάσμα, 1 προς, η τετραγωνική ρίζα του χ; τέλος κλάσματος; τέτοια ώστε 1 δεύτερο ρ τάαφ; ανοίγει παρένθεση; 3 μείον, τάαφ στο τετράγωνο; κλείνει παρένθεση; είναι μικρότερο από ή ίσο με χ, είναι μικρότερο από ή ίσο με; ρ τάαφ; ανοίγει παρένθεση; 2 μείον τάαφ; κλείνει παρένθεση")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_287() -> Result<()> { // + let expr = r#" + + min{ + + 1 + 5 + + + χ + 2 + + + + 1 + + + χ + + + + : + 1 + 2 + + ρτ( + + 3 + τ + 2 + + + )χρτ( + + 2τ + ) } + "#; + test("el", "SimpleSpeak", expr, "ελάχιστο του; συνόλου όλων των 1 πέμπτο χ στο τετράγωνο; συν; κλάσμα, 1 προς, η τετραγωνική ρίζα του χ; τέλος κλάσματος; τέτοια ώστε 1 δεύτερο ρ τάαφ; ανοίγει παρένθεση; 3 μείον, τάαφ στο τετράγωνο; κλείνει παρένθεση; είναι μικρότερο από ή ίσο με χ, είναι μικρότερο από ή ίσο με; ρ τάαφ; ανοίγει παρένθεση; 2 μείον τάαφ; κλείνει παρένθεση")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_288() -> Result<()> { // + let expr = r#" + + + υ + + + τ + ξ + + + + ={ + + + + + ξ + + + υ + 1 + + + + + τ + ξ + + + + ,, + + + + ξ + + + υ + σ + + + + + τ + ξ + + + + } + "#; + test("el", "SimpleSpeak", expr, "ύψιλον δείκτης, τάαφ στην ξ οστή τέλος δείκτη; ισούται με; το σύνολο κλάσμα, μερικό διαφορικό στην ξ οστή; ύψιλον δείκτης 1; προς, μερικό διαφορικό, τάαφ στην ξ οστή, τέλος κλάσματος; κόμμα; αποσιωπητικά, κόμμα; κλάσμα, μερικό διαφορικό στην ξ οστή; ύψιλον δείκτης σίγμα; προς, μερικό διαφορικό, τάαφ στην ξ οστή, τέλος κλάσματος")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_289() -> Result<()> { // + let expr = r#" + + inf{ + + + β + + + Η + β + λ + + ( + Ω + ) + + :β + Η + β + λ + + ( + Ω + ),β|Γ=υ } + "#; + test("el", "SimpleSpeak", expr, "ινφίμουμ του; συνόλου νόρμα του βήτα δείκτης; η λάμδα δύναμη του, κεφαλαίο ήτα δείκτης βήτα; του κεφαλαίο ωμέγα τέλος δείκτη; άνω κάτω τελεία; βήτα που ανήκει; η λάμδα δύναμη του, κεφαλαίο ήτα δείκτης βήτα; του κεφαλαίο ωμέγα; κόμμα; βήτα, κάθετη γραμμη, κεφαλαίο γάμμα; ισούται με, ύψιλον")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_290() -> Result<()> { // + let expr = r#" + + + Β + + + δ + 0 + + 1,η + + + λ + 2 + + 2μ,0 + + ( + + + ε + + γτ + + , + Κ + + + + ) + Β + + + δ + 1 + + ,η + + + λ + 2 + + 2μ,0 + + ( + + + ε + + γτ + + , + Κ + + + + ) + "#; + test("el", "SimpleSpeak", expr, "κεφαλαίο βήτα δείκτης; δέλτα δείκτης 0; μείον 1, ήτα τέλος δείκτη, που υψώνεται στη λάμδα δείκτης 2; μείον, 2 μί,0 τέλος δύναμης; ανοίγει παρένθεση έψιλον που υψώνεται στη μείον γάμμα, τάαφ τέλος δύναμης, κόμμα, κεφαλαίο καπα δείκτης άπειρο κλείνει παρένθεση; είναι ένα υποσύνολο του; κεφαλαίο βήτα δείκτης; δέλτα δείκτης 1; κόμμα, ήτα τέλος δείκτη, που υψώνεται στη λάμδα δείκτης 2; μείον, 2 μί,0 τέλος δύναμης; ανοίγει παρένθεση, έψιλον που υψώνεται στη μείον γάμμα, τάαφ τέλος δύναμης, κόμμα, κεφαλαίο καπα δείκτης άπειρο κλείνει παρένθεση")?; + return Ok(()); + //theodora. fails Now reads: κεφαλαίο βήτα δείκτης; δέλτα δείκτης 0; μείον 1, ήτα τέλος δείκτη, που υψώνεται στη λάμδα δείκτης 2; μείον, 2 μί,0 τέλος δύναμης; το ανοιχτό διάστημα από έψιλον που υψώνεται στη μείον γάμμα, τάαφ τέλος δύναμης, ως κεφαλαίο καπα δείκτης άπειρο; είναι ένα υποσύνολο του; κεφαλαίο βήτα δείκτης; δέλτα δείκτης 1; κόμμα, ήτα τέλος δείκτη, που υψώνεται στη λάμδα δείκτης 2; μείον, 2 μί,0 τέλος δύναμης; το ανοιχτό διάστημα από έψιλον που υψώνεται στη μείον γάμμα, τάαφ τέλος δύναμης, ως κεφαλαίο καπα δείκτης άπειρο +} + +#[test] +fn uoa_corpus_291() -> Result<()> { // + let expr = r#" + + υ( + + ·,τ + ) + Β + μ + + 2μ + + ( + Κ + ) + Β + β + + 2μ + + ( + Κ + ) + Β + + β+ε + + 2μ + + ( + Κ + ) + Η + + β+ε + + 2μ + + ( + Κ + ) + "#; + test("el", "SimpleSpeak", expr, "ύψιλον; ανοίγει παρένθεση; τελεία κόμμα, τάαφ; κλείνει παρένθεση; ανήκει; η 2 μί δύναμη του, κεφαλαίο βήτα δείκτης μί; του κεφαλαίο καπα; είναι ένα υποσύνολο του; η 2 μί δύναμη του, κεφαλαίο βήτα δείκτης βήτα; του κεφαλαίο καπα; είναι ένα υποσύνολο του; η 2 μί δύναμη του, κεφαλαίο βήτα δείκτης, βήτα συν έψιλον τέλος δείκτη; του κεφαλαίο καπα; είναι ταυτόσημο με; η 2 μί δύναμη του, κεφαλαίο ήτα δείκτης, βήτα συν έψιλον τέλος δείκτη; του κεφαλαίο καπα")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_292() -> Result<()> { // + let expr = r#" + + tanΑ= + + sinΑ + + cosΑ + + + "#; + test("el", "SimpleSpeak", expr, "εφαπτομένη του κεφαλαίο άλφα; ισούται με; κλάσμα, ημίτονο του κεφαλαίο άλφα, προς, συνημίτονο του κεφαλαίο άλφα, τέλος κλάσματος")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_293() -> Result<()> { // + let expr = r#" + + cotΑ= + 1 + + tanΑ + + + "#; + // TODO: add expected speech + test("el", "SimpleSpeak", expr, "συνεφαπτομένη, του κεφαλαίο άλφα; ισούται με; κλάσμα, 1 προς, εφαπτομένη του κεφαλαίο άλφα, τέλος κλάσματος")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_294() -> Result<()> { // + let expr = r#" + + secΑ= + 1 + + cosΑ + + + "#; + test("el", "SimpleSpeak", expr, "τέμνουσα του κεφαλαίο άλφα; ισούται με; κλάσμα, 1 προς, συνημίτονο του κεφαλαίο άλφα, τέλος κλάσματος")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_295() -> Result<()> { // + let expr = r#" + + cscΑ= + 1 + + sinΑ + + + "#; + test("el", "SimpleSpeak", expr, "συντέμνουσα, του κεφαλαίο άλφα; ισούται με; κλάσμα, 1 προς, ημίτονο του κεφαλαίο άλφα, τέλος κλάσματος")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_296() -> Result<()> { // same + let expr = r#" + + + + sec + 2 + + Α + + tan + 2 + + Α=1 + "#; + test("el", "SimpleSpeak", expr, "τέμνουσα στο τετράγωνο, του κεφαλαίο άλφα; μείον; εφαπτομένη στο τετράγωνο; του κεφαλαίο άλφα; ισούται με 1")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_297() -> Result<()> { // + let expr = r#" + + tan(Α)=tanΑ + "#; + test("el", "SimpleSpeak", expr, "εφαπτομένη του, μείον κεφαλαίο άλφα; ισούται με; μείον εφαπτομένη του κεφαλαίο άλφα")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_298() -> Result<()> { // + let expr = r#" + + cos(Α)=cosΑ + "#; + test("el", "SimpleSpeak", expr, "συνημίτονο του, μείον κεφαλαίο άλφα; ισούται με; συνημίτονο του κεφαλαίο άλφα")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_299() -> Result<()> { // + let expr = r#" + + sin2Α=2sinΑcosΑ + "#; + test("el", "SimpleSpeak", expr, "ημίτονο του, 2 κεφαλαίο άλφα; ισούται με; 2, ημίτονο του κεφαλαίο άλφα; συνημίτονο του κεφαλαίο άλφα")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_300() -> Result<()> { // + let expr = r#" + + + + cos2Α= + cos + 2 + + Α + sin + 2 + + Α + + + + + =12 + sin + 2 + + Α=2 + cos + 2 + + Α1 + + + + + "#; + test("el", "SimpleSpeak", expr, "2 σειρές; σειρά 1; συνημίτονο του, 2 κεφαλαίο άλφα; ισούται με; συνημίτονο στο τετράγωνο; του κεφαλαίο άλφα; μείον; ημίτονο στο τετράγωνο, του κεφαλαίο άλφα; εξίσωση 2; ισούται με; 1 μείον; 2; ημίτονο στο τετράγωνο, του κεφαλαίο άλφα; ισούται με; 2; συνημίτονο στο τετράγωνο; του κεφαλαίο άλφα; μείον 1")?; + return Ok(()); + //theodora. fails. In Clearspeak it correctly recognizes 2 rows not 2 equations + //Now reads. 2 εξισώσεις; εξίσωση 1; συνημίτονο του, 2 κεφαλαίο άλφα; ισούται με; συνημίτονο στο τετράγωνο; του κεφαλαίο άλφα; μείον; ημίτονο στο τετράγωνο, του κεφαλαίο άλφα; εξίσωση 2; ισούται με; 1 μείον; 2; ημίτονο στο τετράγωνο, του κεφαλαίο άλφα; ισούται με; 2; συνημίτονο στο τετράγωνο; του κεφαλαίο άλφα; μείον 1 +} + +#[test] +fn uoa_corpus_301() -> Result<()> { // + let expr = r#" + + sin3Α=3sinΑ4 + + sin + 3 + + Α + "#; + test("el", "SimpleSpeak", expr, "ημίτονο του, 3 κεφαλαίο άλφα; ισούται με; 3, ημίτονο του κεφαλαίο άλφα; μείον; 4, ημίτονο στον κύβο, του κεφαλαίο άλφα")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_302() -> Result<()> { // same + let expr = r#" + + + + sin + 2 + + Α= + 1 + 2 + + + 1 + 2 + + cos2Α + "#; + test("el", "SimpleSpeak", expr, "ημίτονο στο τετράγωνο, του κεφαλαίο άλφα; ισούται με; 1 δεύτερο μείον; 1 δεύτερο; συνημίτονο του, 2 κεφαλαίο άλφα")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_303() -> Result<()> { // same + let expr = r#" + + + + sin + 4 + + Α= + 3 + 8 + + + 1 + 2 + + cos2Α+ + 1 + 8 + + cos4Α + "#; + test("el", "SimpleSpeak", expr, "η τέταρτη δύναμη του, ημίτονο; του κεφαλαίο άλφα; ισούται με; 3 όγδοα μείον; 1 δεύτερο; συνημίτονο του, 2 κεφαλαίο άλφα; συν; 1 όγδοο; συνημίτονο του, 4 κεφαλαίο άλφα")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_304() -> Result<()> { // + let expr = r#" + + + + cos + 5 + + Α= + 5 + 8 + + cosΑ+ + 5 + + 16 + + cos3Α+ + 1 + + 16 + + cos5Α + "#; + test("el", "SimpleSpeak", expr, "η πέμπτη δύναμη του, συνημίτονο; του κεφαλαίο άλφα; ισούται με; 5 όγδοα, συνημίτονο του κεφαλαίο άλφα; συν; 5 προς 16; συνημίτονο του, 3 κεφαλαίο άλφα; συν; 1 προς 16; συνημίτονο του, 5 κεφαλαίο άλφα")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_305() -> Result<()> { // + let expr = r#" + + sinΑ+sinΒ=2sin + 1 + 2 + + ( + + Α+Β + )cos + 1 + 2 + + ( + + ΑΒ + ) + "#; + test("el", "SimpleSpeak", expr, "ημίτονο του κεφαλαίο άλφα; συν, ημίτονο του κεφαλαίο βήτα; ισούται με; 2, ημίτονο του 1 δεύτερο; ανοίγει παρένθεση; κεφαλαίο άλφα, συν κεφαλαίο βήτα; κλείνει παρένθεση; συνημίτονο του 1 δεύτερο; ανοίγει παρένθεση; κεφαλαίο άλφα, μείον κεφαλαίο βήτα; κλείνει παρένθεση")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_306() -> Result<()> { // + let expr = r#" + + + + cos + + 1 + + ( + + χ + )=π + + cos + + 1 + + χ + "#; + test("el", "SimpleSpeak", expr, "αντίστροφη συνημίτονο, του μείον χ; ισούται με; π μείον, αντίστροφη συνημίτονο, του χ")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_307() -> Result<()> { // same + let expr = r#" + + cos( + + χ×ψ + )+ + + tan + 2 + + χ+ψ + "#; + test("el", "SimpleSpeak", expr, "συνημίτονο του; ανοίγει παρένθεση, χ επί ψ, κλείνει παρένθεση; συν, εφαπτομένη στο τετράγωνο; του χ; συν ψ")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_308() -> Result<()> { // same + let expr = r#" + + cos( + + χ×ψ + )+ + + tan + 2 + + ( + + χ+ψ + ) + "#; + test("el", "SimpleSpeak", expr, "συνημίτονο του; ανοίγει παρένθεση, χ επί ψ, κλείνει παρένθεση; συν; εφαπτομένη στο τετράγωνο; του; ανοίγει παρένθεση, χ συν ψ, κλείνει παρένθεση")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_309() -> Result<()> { // + let expr = r#" + + cosχ×ψ+ + + tan + 2 + + χ+ψ + "#; + test("el", "SimpleSpeak", expr, "συνημίτονο του χ, επί ψ; συν, εφαπτομένη στο τετράγωνο; του χ; συν ψ")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_310() -> Result<()> { // + let expr = r#" + + cosχ×ψ+ + + tan + 2 + + ( + + χ+ψ + ) + "#; + test("el", "SimpleSpeak", expr, "συνημίτονο του χ, επί ψ; συν; εφαπτομένη στο τετράγωνο; του; ανοίγει παρένθεση, χ συν ψ, κλείνει παρένθεση")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_311() -> Result<()> { // same + let expr = r#" + + tan + + ( + + χ+2×ψ + ) + 2 + + + "#; + test("el", "SimpleSpeak", expr, "εφαπτομένη του; ανοίγει παρένθεση; χ συν 2 επί ψ; κλείνει παρένθεση στο τετράγωνο")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_312() -> Result<()> { // + let expr = r#" + + + + sin + 2 + + (χ+ψ)+cosχ+ + ψ + 2 + + + "#; + test("el", "SimpleSpeak", expr, "ημίτονο στο τετράγωνο, του; ανοίγει παρένθεση, χ συν ψ, κλείνει παρένθεση; συν, συνημίτονο του χ, συν ψ στο τετράγωνο")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_313() -> Result<()> { // same + let expr = r#" + + cos( + + xψ + )+ + + tan + 2 + + x+ψ + "#; + test("el", "SimpleSpeak", expr, "συνημίτονο του; ανοίγει παρένθεση, x ψ, κλείνει παρένθεση; συν, εφαπτομένη στο τετράγωνο; του x; συν ψ")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_314() -> Result<()> { // same + let expr = r#" + + cos( + + xψ + )+ + + tan + 2 + + ( + + χ+y + ) + "#; + test("el", "SimpleSpeak", expr, "συνημίτονο του; ανοίγει παρένθεση, x ψ, κλείνει παρένθεση; συν; εφαπτομένη στο τετράγωνο; του; ανοίγει παρένθεση, χ συν y, κλείνει παρένθεση")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_315() -> Result<()> { // + let expr = r#" + + cosχy+ + + tan + 2 + + χ+y + "#; + test("el", "SimpleSpeak", expr, "συνημίτονο του χ y; συν, εφαπτομένη στο τετράγωνο; του χ; συν y")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_316() -> Result<()> { // + let expr = r#" + + cosχy+ + + tan + 2 + + ( + + x+ψ + ) + "#; + test("el", "SimpleSpeak", expr, "συνημίτονο του χ y; συν; εφαπτομένη στο τετράγωνο; του; ανοίγει παρένθεση, x συν ψ, κλείνει παρένθεση")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_317() -> Result<()> { // same + let expr = r#" + + + + cosh + 2 + + χ + + sinh + 2 + + χ=1 + "#; + test("el", "SimpleSpeak", expr, "υπερβολικό συνημίτονο στο τετράγωνο; του χ; μείον; υπερβολικό ημίτονο στο τετράγωνο; του χ; ισούται με 1")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_318() -> Result<()> { // same + let expr = r#" + + + + sin + 2 + + χ+ + + cos + 2 + + χ=1 + "#; + test("el", "SimpleSpeak", expr, "ημίτονο στο τετράγωνο, του χ; συν, συνημίτονο στο τετράγωνο; του χ; ισούται με 1")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_319() -> Result<()> { // + let expr = r#" + + + + sin + + 1 + + χsin + χ + + 1 + + + "#; + test("el", "SimpleSpeak", expr, "αντίστροφη ημίτονο, του χ; είναι διάφορο του; ημίτονο του χ στην μείον 1")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_320() -> Result<()> { // + let expr = r#" + + cos( + + χ+ψ + )=cosχcosψsinχsinψ + "#; + test("el", "SimpleSpeak", expr, "συνημίτονο του; ανοίγει παρένθεση, χ συν ψ, κλείνει παρένθεση; ισούται με; συνημίτονο του χ, φορές, συνημίτονο του ψ; μείον; ημίτονο του χ, φορές, ημίτονο του ψ")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_321() -> Result<()> { // + let expr = r#" + + cos2χ= + + cos + 2 + + χ + + sin + 2 + + χ + "#; + test("el", "SimpleSpeak", expr, "συνημίτονο του 2, φορές χ; ισούται με; συνημίτονο στο τετράγωνο; του χ; μείον, ημίτονο στο τετράγωνο, του χ")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_322() -> Result<()> { // + let expr = r#"sinνΑ=sinΑ{(2cosΑ)ν1(ν21)(2cosΑ)ν3+(ν32)(2cosΑ)ν5}"#; + test("el", "SimpleSpeak", expr, "ημίτονο του, νί κεφαλαίο άλφα; ισούται με; ημίτονο του κεφαλαίο άλφα; ανοίγει άγκιστρο; ανοίγει παρένθεση; 2, συνημίτονο του κεφαλαίο άλφα; κλείνει παρένθεση που υψώνεται στη νί μείον 1 τέλος δύναμης; μείον; διωνυμικό νί μείον 2 ανά 1; ανοίγει παρένθεση; 2, συνημίτονο του κεφαλαίο άλφα; κλείνει παρένθεση που υψώνεται στη νί μείον 3 τέλος δύναμης; συν; διωνυμικό νί μείον 3 ανά 2; ανοίγει παρένθεση; 2, συνημίτονο του κεφαλαίο άλφα; κλείνει παρένθεση που υψώνεται στη νί μείον 5 τέλος δύναμης; μείον αποσιωπητικά; κλείνει άγκιστρο")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_323() -> Result<()> { // + let expr = r#" + + +cosνΑ += +12 +{ + +(2cosΑ)ν + +ν1 +(2cosΑ)ν2 ++ +ν2 +( +ν31 +) +(2cosΑ)ν4 + + +ν3 +( +ν42 +) +(2cosΑ)ν6 ++ + +} + + +"#; + test("el", "SimpleSpeak", expr, "συνημίτονο του, νί κεφαλαίο άλφα; ισούται με; 1 δεύτερο; ανοίγει άγκιστρο; ανοίγει παρένθεση; 2, συνημίτονο του κεφαλαίο άλφα; κλείνει παρένθεση στην νί οστή; μείον; νί προς 1; ανοίγει παρένθεση; 2, συνημίτονο του κεφαλαίο άλφα; κλείνει παρένθεση που υψώνεται στη νί μείον 2 τέλος δύναμης; συν; νί προς 2; διωνυμικό νί μείον 3 ανά 1; ανοίγει παρένθεση; 2, συνημίτονο του κεφαλαίο άλφα; κλείνει παρένθεση που υψώνεται στη νί μείον 4 τέλος δύναμης; μείον; νί προς 3; διωνυμικό νί μείον 4 ανά 2; ανοίγει παρένθεση; 2, συνημίτονο του κεφαλαίο άλφα; κλείνει παρένθεση που υψώνεται στη νί μείον 6 τέλος δύναμης; συν αποσιωπητικά; κλείνει άγκιστρο")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_324() -> Result<()> { // + let expr = r#" + + +sin2ν1Α += + +(1)ν1 +22ν2 + +{ + +sin(2ν1)Α + +( +2ν11 +) +sin(2ν3)Α + ++ +(1)ν1 +( +2ν1ν1 +) +sinΑ + +} + + +"#; + test("el", "SimpleSpeak", expr, "η 2 νί, μείον 1 δύναμη του, ημίτονο; του κεφαλαίο άλφα; ισούται με; κλάσμα, ανοίγει παρένθεση, μείον 1, κλείνει παρένθεση που υψώνεται στη νί μείον 1 τέλος δύναμης; προς, 2 που υψώνεται στη 2 νί, μείον 2 τέλος δύναμης; τέλος κλάσματος; ανοίγει άγκιστρο; ημίτονο του; ανοίγει παρένθεση; 2 νί, μείον 1; κλείνει παρένθεση; κεφαλαίο άλφα; μείον; διωνυμικό 2 νί, μείον 1 ανά 1; ημίτονο του; ανοίγει παρένθεση; 2 νί, μείον 3; κλείνει παρένθεση; κεφαλαίο άλφα; συν; αποσιωπητικά; ανοίγει παρένθεση, μείον 1, κλείνει παρένθεση που υψώνεται στη νί μείον 1 τέλος δύναμης; διωνυμικό 2 νί, μείον 1 ανά νί μείον 1 τέλος διωνυμικού; ημίτονο του κεφαλαίο άλφα; κλείνει άγκιστρο")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_325() -> Result<()> { // + let expr = r#" + + +cos2ν1Α += + +1 +22ν2 + +{ + +cos(2ν1)Α ++ +( +2ν11 +) +cos(2ν3)Α + +++ +( +2ν1ν1 +) +cosΑ + +} + + +"#; + test("el", "SimpleSpeak", expr, "η 2 νί, μείον 1 δύναμη του, συνημίτονο; του κεφαλαίο άλφα; ισούται με; κλάσμα, 1 προς, 2 που υψώνεται στη 2 νί, μείον 2 τέλος δύναμης; τέλος κλάσματος; ανοίγει άγκιστρο; συνημίτονο του; ανοίγει παρένθεση; 2 νί, μείον 1; κλείνει παρένθεση; κεφαλαίο άλφα; συν; διωνυμικό 2 νί, μείον 1 ανά 1; συνημίτονο του; ανοίγει παρένθεση; 2 νί, μείον 3; κλείνει παρένθεση; κεφαλαίο άλφα; συν αποσιωπητικά, συν; διωνυμικό 2 νί, μείον 1 ανά νί μείον 1 τέλος διωνυμικού; συνημίτονο του κεφαλαίο άλφα; κλείνει άγκιστρο")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_326() -> Result<()> { // + let expr = r#" + + coshχ= + + + e + χ + + + + e + + χ + + + 2 + + + "#; + test("el", "SimpleSpeak", expr, "υπερβολικό συνημίτονο, του χ; ισούται με; κλάσμα, e στην χ οστή, συν, e που υψώνεται στη μείον χ τέλος δύναμης; προς 2, τέλος κλάσματος")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_327() -> Result<()> { // same + let expr = r#" + + + + ( + + x+ψ+z + ) + 2 + + + "#; + test("el", "SimpleSpeak", expr, "ανοίγει παρένθεση; x συν ψ συν z; κλείνει παρένθεση στο τετράγωνο")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_328() -> Result<()> { // same + let expr = r#" + + + + ( + + χ+y + ) + 2 + + +z + "#; + test("el", "SimpleSpeak", expr, "ανοίγει παρένθεση, χ συν y, κλείνει παρένθεση στο τετράγωνο; συν z")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_329() -> Result<()> { // same + let expr = r#" + + x+ + + ( + + ψ+ζ + ) + 2 + + + "#; + test("el", "SimpleSpeak", expr, "x συν; ανοίγει παρένθεση; ψ συν ζήτα; κλείνει παρένθεση στο τετράγωνο")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_330() -> Result<()> { // same + let expr = r#" + + x+ψ+ + z + 2 + + + "#; + test("el", "SimpleSpeak", expr, "x συν ψ συν z στο τετράγωνο")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_331() -> Result<()> { // + let expr = r#" + + + + + b + c + + + + +δε + "#; + test("el", "SimpleSpeak", expr, "η τετραγωνική ρίζα του b προς c; τέλος ρίζας; συν δέλτα μείον έψιλον")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_332() -> Result<()> { // + let expr = r#" + + + + + β + + c+d + + + + ε + "#; + test("el", "SimpleSpeak", expr, "η τετραγωνική ρίζα του κλάσμα, βήτα προς, c συν d, τέλος κλάσματος; τέλος ρίζας; μείον έψιλον")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_333() -> Result<()> { // + let expr = r#" + + + + + β + c + + e + + + "#; + test("el", "SimpleSpeak", expr, "η τετραγωνική ρίζα του βήτα προς c; μείον e, τέλος ρίζας")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_334() -> Result<()> { // same + let expr = r#" + + cos( + + xψ + )+ + + tan + 2 + + x+ψ + "#; + test("el", "SimpleSpeak", expr, "συνημίτονο του; ανοίγει παρένθεση, x ψ, κλείνει παρένθεση; συν, εφαπτομένη στο τετράγωνο; του x; συν ψ")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_335() -> Result<()> { // same + let expr = r#" + + cos( + + xψ + )+ + + tan + 2 + + ( + + χ+y + ) + "#; + test("el", "SimpleSpeak", expr, "συνημίτονο του; ανοίγει παρένθεση, x ψ, κλείνει παρένθεση; συν; εφαπτομένη στο τετράγωνο; του; ανοίγει παρένθεση, χ συν y, κλείνει παρένθεση")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_336() -> Result<()> { // + let expr = r#" + + cosχy+ + + tan + 2 + + χ+y + "#; + test("el", "SimpleSpeak", expr, "συνημίτονο του χ y; συν, εφαπτομένη στο τετράγωνο; του χ; συν y")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_337() -> Result<()> { // + let expr = r#" + + cosχy+ + + tan + 2 + + ( + + x+ψ + ) + "#; + test("el", "SimpleSpeak", expr, "συνημίτονο του χ y; συν; εφαπτομένη στο τετράγωνο; του; ανοίγει παρένθεση, x συν ψ, κλείνει παρένθεση")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_338() -> Result<()> { // same + let expr = r#" + + α×( + + β+γ + ) + "#; + test("el", "SimpleSpeak", expr, "άλφα επί; ανοίγει παρένθεση; βήτα συν γάμμα; κλείνει παρένθεση")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_339() -> Result<()> { // same + let expr = r#" + + 3× + χ + 2 + + ×( + + 2 + χ + 3 + + +6χ + ) + "#; + test("el", "SimpleSpeak", expr, "3 επί χ στο τετράγωνο, επί; ανοίγει παρένθεση; 2 χ στον κύβο, συν 6 χ; κλείνει παρένθεση")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_340() -> Result<()> { // same + let expr = r#" + + ( + + α+β + )×( + + γ+δ + ) + "#; + test("el", "SimpleSpeak", expr, "ανοίγει παρένθεση; άλφα συν βήτα; κλείνει παρένθεση; επί; ανοίγει παρένθεση; γάμμα συν δέλτα; κλείνει παρένθεση")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_341() -> Result<()> { // same + let expr = r#" + + ( + + 3 + χ + 2 + + ψ+2ψ + )×( + + 2 + χ + 2 + + +5 + ) + "#; + test("el", "SimpleSpeak", expr, "ανοίγει παρένθεση; 3 χ στο τετράγωνο, ψ; συν 2 ψ; κλείνει παρένθεση; επί; ανοίγει παρένθεση; 2 χ στο τετράγωνο, συν 5; κλείνει παρένθεση")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_342() -> Result<()> { // same + let expr = r#" + + 3 + χ + 2 + + ×( + + 2 + χ + 3 + + +6χ + ) + "#; + test("el", "SimpleSpeak", expr, "3 χ στο τετράγωνο, επί; ανοίγει παρένθεση; 2 χ στον κύβο, συν 6 χ; κλείνει παρένθεση")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_343() -> Result<()> { // same + let expr = r#" + + 3 + χ + 2 + + + "#; + test("el", "SimpleSpeak", expr, "3 χ στο τετράγωνο")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_344() -> Result<()> { // same + let expr = r#" + + 2 + χ + 3 + + +6χ + "#; + test("el", "SimpleSpeak", expr, "2 χ στον κύβο, συν 6 χ")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_345() -> Result<()> { // + let expr = r#" + + 3 + χ + 2 + + ×( + + 2 + χ + 3 + + +6χ + )=3 + χ + 2 + + ×2 + χ + 3 + + +3 + χ + 2 + + ×6χ=6 + χ + 5 + + +18 + χ + 3 + + + "#; + test("el", "SimpleSpeak", expr, "3 χ στο τετράγωνο, επί; ανοίγει παρένθεση; 2 χ στον κύβο, συν 6 χ; κλείνει παρένθεση; ισούται με; 3 χ στο τετράγωνο, επί 2 χ στον κύβο; συν, 3 χ στο τετράγωνο, επί 6 χ; ισούται με; 6 χ στην πέμπτη, συν, 18 χ στον κύβο")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_346() -> Result<()> { // same + let expr = r#" + + ( + + 3 + χ + 2 + + ψ+2ψ + )×( + + 2 + χ + 2 + + +5 + ) + "#; + test("el", "SimpleSpeak", expr, "ανοίγει παρένθεση; 3 χ στο τετράγωνο, ψ; συν 2 ψ; κλείνει παρένθεση; επί; ανοίγει παρένθεση; 2 χ στο τετράγωνο, συν 5; κλείνει παρένθεση")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_347() -> Result<()> { // same + let expr = r#" + + 3 + χ + 2 + + ψ+2ψ + "#; + test("el", "SimpleSpeak", expr, "3 χ στο τετράγωνο, ψ; συν 2 ψ")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_348() -> Result<()> { // same + let expr = r#" + + 2 + χ + 2 + + +5 + "#; + test("el", "SimpleSpeak", expr, "2 χ στο τετράγωνο, συν 5")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_349() -> Result<()> { // same + let expr = r#" + + ( + + 3 + χ + 2 + + ψ+2ψ + )×( + + 2 + χ + 2 + + +5 + ) + "#; + test("el", "SimpleSpeak", expr, "ανοίγει παρένθεση; 3 χ στο τετράγωνο, ψ; συν 2 ψ; κλείνει παρένθεση; επί; ανοίγει παρένθεση; 2 χ στο τετράγωνο, συν 5; κλείνει παρένθεση")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_350() -> Result<()> { // same + let expr = r#" + + =3 + χ + 2 + + ψ×2 + χ + 2 + + +3 + χ + 2 + + ψ×5+2ψ×2 + χ + 2 + + +2ψ×5 + "#; + test("el", "SimpleSpeak", expr, "ισούται με; 3 χ στο τετράγωνο, ψ επί 2 χ στο τετράγωνο; συν, 3 χ στο τετράγωνο, ψ επί 5; συν, 2 ψ επί 2 χ στο τετράγωνο; συν 2 ψ επί 5")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_351() -> Result<()> { // + let expr = r#" + + =6 + χ + 4 + + ψ+15 + χ + 2 + + ψ+4 + χ + 2 + + ψ+10ψ=6 + χ + 4 + + ψ+19 + χ + 2 + + ψ+10ψ + "#; + test("el", "SimpleSpeak", expr, "ισούται με; 6 χ στην τέταρτη, ψ; συν, 15 χ στο τετράγωνο, ψ; συν, 4 χ στο τετράγωνο, ψ; συν 10 ψ; ισούται με; 6 χ στην τέταρτη, ψ; συν, 19 χ στο τετράγωνο, ψ; συν 10 ψ")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_352() -> Result<()> { // same + let expr = r#" + + 2α + "#; + test("el", "SimpleSpeak", expr, "2 άλφα")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_353() -> Result<()> { // same + let expr = r#" + + sin( + + α+β + ) + "#; + test("el", "SimpleSpeak", expr, "ημίτονο του; ανοίγει παρένθεση; άλφα συν βήτα; κλείνει παρένθεση")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_354() -> Result<()> { // same + let expr = r#" + + cos( + + α+β + ) + "#; + test("el", "SimpleSpeak", expr, "συνημίτονο του; ανοίγει παρένθεση; άλφα συν βήτα; κλείνει παρένθεση")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_355() -> Result<()> { // same + let expr = r#" + + tan( + + α+β + ) + "#; + test("el", "SimpleSpeak", expr, "εφαπτομένη του; ανοίγει παρένθεση; άλφα συν βήτα; κλείνει παρένθεση")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_356() -> Result<()> { // same + let expr = r#" + + sin( + + 2α + )=sin( + + α+α + )=sin( + α + )×cos( + α + )+cos( + α + )×sin( + α + )=2×sin( + α + )×cos( + a + ) + "#; + test("el", "SimpleSpeak", expr, "ημίτονο του; ανοίγει παρένθεση, 2 άλφα, κλείνει παρένθεση; ισούται με; ημίτονο του; ανοίγει παρένθεση; άλφα συν άλφα; κλείνει παρένθεση; ισούται με; ημίτονο του άλφα, επί, συνημίτονο του άλφα; συν; συνημίτονο του άλφα; επί, ημίτονο του άλφα; ισούται με; 2 επί, ημίτονο του άλφα, επί, συνημίτονο του a")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_357() -> Result<()> { // same + let expr = r#" + + sin( + + 2α + )=2×sin( + α + )×cos( + α + ) + "#; + test("el", "SimpleSpeak", expr, "ημίτονο του; ανοίγει παρένθεση, 2 άλφα, κλείνει παρένθεση; ισούται με; 2 επί, ημίτονο του άλφα, επί, συνημίτονο του άλφα")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_358() -> Result<()> { // same + let expr = r#" + + cos( + + 2α + )=cos( + + α+α + )=cos( + α + )×cos( + α + )sin( + α + )×sin( + α + )= + + cos + 2 + + α + + sin + 2 + + α + "#; + test("el", "SimpleSpeak", expr, "συνημίτονο του; ανοίγει παρένθεση, 2 άλφα, κλείνει παρένθεση; ισούται με; συνημίτονο του; ανοίγει παρένθεση; άλφα συν άλφα; κλείνει παρένθεση; ισούται με; συνημίτονο του άλφα; επί, συνημίτονο του άλφα; μείον; ημίτονο του άλφα, επί, ημίτονο του άλφα; ισούται με; συνημίτονο στο τετράγωνο; του άλφα; μείον, ημίτονο στο τετράγωνο, του άλφα")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_359() -> Result<()> { // same + let expr = r#" + + = + + cos + 2 + + α(1 + + cos + 2 + + α)=2 + + cos + 2 + + α1 + "#; + test("el", "SimpleSpeak", expr, "ισούται με; συνημίτονο στο τετράγωνο; του άλφα; μείον; ανοίγει παρένθεση; 1 μείον; συνημίτονο στο τετράγωνο; του άλφα; κλείνει παρένθεση; ισούται με; 2, συνημίτονο στο τετράγωνο; του άλφα; μείον 1")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_360() -> Result<()> { // same + let expr = r#" + + =(1 + + sin + 2 + + α) + + sin + 2 + + α=12 + + sin + 2 + + α + "#; + test("el", "SimpleSpeak", expr, "ισούται με; ανοίγει παρένθεση; 1 μείον, ημίτονο στο τετράγωνο, του άλφα; κλείνει παρένθεση; μείον, ημίτονο στο τετράγωνο, του άλφα; ισούται με; 1 μείον; 2, ημίτονο στο τετράγωνο, του άλφα")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_361() -> Result<()> { // same + let expr = r#" + + cos( + + 2α + )= + + cos + 2 + + α + + sin + 2 + + α + "#; + test("el", "SimpleSpeak", expr, "συνημίτονο του; ανοίγει παρένθεση, 2 άλφα, κλείνει παρένθεση; ισούται με; συνημίτονο στο τετράγωνο; του άλφα; μείον, ημίτονο στο τετράγωνο, του άλφα")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_362() -> Result<()> { // same + let expr = r#" + + cos( + + 2α + )= + + cos + 2 + + α + + sin + 2 + + α=2 + + cos + 2 + + α1=12 + + sin + 2 + + α + "#; + test("el", "SimpleSpeak", expr, "συνημίτονο του; ανοίγει παρένθεση, 2 άλφα, κλείνει παρένθεση; ισούται με; συνημίτονο στο τετράγωνο; του άλφα; μείον, ημίτονο στο τετράγωνο, του άλφα; ισούται με; 2, συνημίτονο στο τετράγωνο; του άλφα; μείον 1; ισούται με; 1 μείον; 2, ημίτονο στο τετράγωνο, του άλφα")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_363() -> Result<()> { // + let expr = r#" + + tan(2α)= + + tanα+tanα + + 1tanαtanα + + = + + 2tanα + + 1 + + tan + 2 + + α + + + "#; + test("el", "SimpleSpeak", expr, "εφαπτομένη του; ανοίγει παρένθεση, 2 άλφα, κλείνει παρένθεση; ισούται με; κλάσμα, εφαπτομένη του άλφα; συν, εφαπτομένη του άλφα, προς, 1 μείον; εφαπτομένη του άλφα; εφαπτομένη του άλφα, τέλος κλάσματος; ισούται με; κλάσμα, 2, εφαπτομένη του άλφα, προς, 1 μείον; εφαπτομένη στο τετράγωνο; του άλφα, τέλος κλάσματος")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_364() -> Result<()> { // + let expr = r#" + + tan(2α)= + + 2tanα + + 1 + + tan + 2 + + α + + + "#; + test("el", "SimpleSpeak", expr, "εφαπτομένη του; ανοίγει παρένθεση, 2 άλφα, κλείνει παρένθεση; ισούται με; κλάσμα, 2, εφαπτομένη του άλφα, προς, 1 μείον; εφαπτομένη στο τετράγωνο; του άλφα, τέλος κλάσματος")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_365() -> Result<()> { // + let expr = r#" + + cos(2α)=2 + + cos + 2 + + α11+cos( + + 2α + )=2 + + cos + 2 + + α + + cos + 2 + + α= + + 1+cos2α + 2 + + + "#; + test("el", "SimpleSpeak", expr, "συνημίτονο του; ανοίγει παρένθεση, 2 άλφα, κλείνει παρένθεση; ισούται με; 2, συνημίτονο στο τετράγωνο; του άλφα; μείον 1; αμφίδρομο διπλό βέλος; 1 συν; συνημίτονο του; ανοίγει παρένθεση, 2 άλφα, κλείνει παρένθεση; ισούται με; 2, συνημίτονο στο τετράγωνο; του άλφα; αμφίδρομο διπλό βέλος; συνημίτονο στο τετράγωνο; του άλφα; ισούται με; κλάσμα, 1 συν, συνημίτονο του 2 άλφα, προς 2, τέλος κλάσματος")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_366() -> Result<()> { // + let expr = r#" + + cos( + + 2α + )=12 + + sin + 2 + + α2 + + sin + 2 + + α=1cos(2α)si + n + 2 + + α= + + 1cos( + + 2α + ) + 2 + + + "#; + test("el", "SimpleSpeak", expr, "συνημίτονο του; ανοίγει παρένθεση, 2 άλφα, κλείνει παρένθεση; ισούται με; 1 μείον; 2, ημίτονο στο τετράγωνο, του άλφα; αμφίδρομο διπλό βέλος; 2, ημίτονο στο τετράγωνο, του άλφα; ισούται με; 1 μείον; συνημίτονο του; ανοίγει παρένθεση, 2 άλφα, κλείνει παρένθεση; αμφίδρομο διπλό βέλος; ημίτονο στο τετράγωνο, του άλφα; ισούται με; κλάσμα, 1 μείον; συνημίτονο του; ανοίγει παρένθεση, 2 άλφα, κλείνει παρένθεση, προς 2, τέλος κλάσματος")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_367() -> Result<()> { // + let expr = r#" + + + + tan + 2 + + α= + + + + sin + 2 + + α + + + + cos + 2 + + α + + = + + + + 1cos(2α) + 2 + + + + + + 1+cos( + + 2α + ) + 2 + + + + = + + 1cos(2α) + + 1+cos(2α) + + + "#; + test("el", "SimpleSpeak", expr, "εφαπτομένη στο τετράγωνο; του άλφα; ισούται με; κλάσμα, ημίτονο στο τετράγωνο, του άλφα, προς, συνημίτονο στο τετράγωνο; του άλφα, τέλος κλάσματος; ισούται με; κλάσμα, κλάσμα, 1 μείον; συνημίτονο του; ανοίγει παρένθεση, 2 άλφα, κλείνει παρένθεση, προς 2, τέλος κλάσματος; προς, κλάσμα, 1 συν; συνημίτονο του; ανοίγει παρένθεση, 2 άλφα, κλείνει παρένθεση, προς 2, τέλος κλάσματος; τέλος κλάσματος; ισούται με; κλάσμα, 1 μείον; συνημίτονο του; ανοίγει παρένθεση, 2 άλφα, κλείνει παρένθεση, προς, 1 συν; συνημίτονο του; ανοίγει παρένθεση, 2 άλφα, κλείνει παρένθεση, τέλος κλάσματος")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_368() -> Result<()> { // + let expr = r#" + + 22.5°= + + 45° + 2 + + + "#; + test("el", "SimpleSpeak", expr, "22.5 μοίρες; ισούται με; κλάσμα, 45 μοίρες; προς 2, τέλος κλάσματος")?; + return Ok(()); + //theodora. fails. coverts 22.5 --> 225 +} + +#[test] +fn uoa_corpus_369() -> Result<()> { // + let expr = r#" + + + + sin + 2 + + ( + + 22.5° + )= + + 1cos( + + 45° + ) + 2 + + = + + 1 + + + 2 + + + 2 + + + 2 + + = + + 2 + 2 + + + 2 + + + "#; + test("el", "SimpleSpeak", expr, "ημίτονο στο τετράγωνο, του; ανοίγει παρένθεση, 22.5 μοίρες; κλείνει παρένθεση; ισούται με; κλάσμα, 1 μείον; συνημίτονο του; ανοίγει παρένθεση, 45 μοίρες; κλείνει παρένθεση, προς 2, τέλος κλάσματος; ισούται με; κλάσμα, 1 μείον; κλάσμα, η τετραγωνική ρίζα του 2; προς 2, τέλος κλάσματος; προς 2, τέλος κλάσματος; ισούται με; κλάσμα, 2 μείον, η τετραγωνική ρίζα του 2; προς 2, τέλος κλάσματος")?; + return Ok(()); + //theodora. fails. converts 22.5 to 225 + +} + +#[test] +fn uoa_corpus_370() -> Result<()> { // + let expr = r#" + + sin( + + 22.5° + )= + + + + 2 + 2 + + + + + 2 + + + "#; + test("el", "SimpleSpeak", expr, "διπλό βέλος προς τα δεξιά; ημίτονο του; ανοίγει παρένθεση, 22.5 μοίρες; κλείνει παρένθεση; ισούται με; κλάσμα, η τετραγωνική ρίζα του 2 μείον, η τετραγωνική ρίζα του 2; τέλος ρίζας; προς 2, τέλος κλάσματος")?; + return Ok(()); + //theodora. fails. converts 22.5 to 225 + +} + +#[test] +fn uoa_corpus_371() -> Result<()> { // + let expr = r#" + + + + cos + 2 + + (22.5°)= + + 1+cos( + + 45° + ) + 2 + + = + + 1+ + + + 2 + + + 2 + + + 2 + + = + + 2+ + 2 + + + 2 + + cos(22.5°)= + + + + 2+ + 2 + + + + + 2 + + + "#; + test("el", "SimpleSpeak", expr, "συνημίτονο στο τετράγωνο; του; ανοίγει παρένθεση, 22.5 μοίρες; κλείνει παρένθεση; ισούται με; κλάσμα, 1 συν; συνημίτονο του; ανοίγει παρένθεση, 45 μοίρες; κλείνει παρένθεση, προς 2, τέλος κλάσματος; ισούται με; κλάσμα, 1 συν; κλάσμα, η τετραγωνική ρίζα του 2; προς 2, τέλος κλάσματος; προς 2, τέλος κλάσματος; ισούται με; κλάσμα, 2 συν, η τετραγωνική ρίζα του 2; προς 2, τέλος κλάσματος; διπλό βέλος προς τα δεξιά; συνημίτονο του; ανοίγει παρένθεση, 22.5 μοίρες; κλείνει παρένθεση; ισούται με; κλάσμα, η τετραγωνική ρίζα του 2 συν, η τετραγωνική ρίζα του 2; τέλος ρίζας; προς 2, τέλος κλάσματος")?; + return Ok(()); + //theodora. fails. converts 22.5 to 225 + +} + +#[test] +fn uoa_corpus_372() -> Result<()> { // + let expr = r#" + + tan(22.5°)= + + + + 2 + 2 + + + + + + + + 2+ + 2 + + + + + + = + 2 + + 1 + "#; + test("el", "SimpleSpeak", expr, "εφαπτομένη του; ανοίγει παρένθεση, 22.5 μοίρες; κλείνει παρένθεση; ισούται με; κλάσμα, η τετραγωνική ρίζα του 2 μείον, η τετραγωνική ρίζα του 2; τέλος ρίζας; προς, η τετραγωνική ρίζα του 2 συν, η τετραγωνική ρίζα του 2; τέλος ρίζας; τέλος κλάσματος; ισούται με; η τετραγωνική ρίζα του 2; μείον 1")?; + return Ok(()); + //theodora. fails. converts 22.5 to 225 +} + +#[test] +fn uoa_corpus_373() -> Result<()> { // + let expr = r#" + + cot(22.5°)= + + + + 2+ + 2 + + + + + + + + 2 + 2 + + + + + + = + 2 + + +1 + "#; + test("el", "SimpleSpeak", expr, "συνεφαπτομένη, του; ανοίγει παρένθεση, 22.5 μοίρες; κλείνει παρένθεση; ισούται με; κλάσμα, η τετραγωνική ρίζα του 2 συν, η τετραγωνική ρίζα του 2; τέλος ρίζας; προς, η τετραγωνική ρίζα του 2 μείον, η τετραγωνική ρίζα του 2; τέλος ρίζας; τέλος κλάσματος; ισούται με; την τετραγωνική ρίζα του 2; συν 1")?; + return Ok(()); + //theodora. converts 22.5 to 225. also fails accusative +} + +#[test] +fn uoa_corpus_374() -> Result<()> { // + let expr = r#" + + p(χ| + + ω + ι + + ) + "#; + test("el", "SimpleSpeak", expr, "p; ανοίγει παρένθεση; χ; κάθετη γραμμη; ωμέγα δείκτης ιότα; κλείνει παρένθεση")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_375() -> Result<()> { // same + let expr = r#" + + + θ + i + + + "#; + test("el", "SimpleSpeak", expr, "θήτα δείκτης i")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_376() -> Result<()> { // + let expr = r#" + + p(χ| + + ω + ι + + ;θ) + "#; + test("el", "SimpleSpeak", expr, "p; ανοίγει παρένθεση; χ; κάθετη γραμμη; ωμέγα δείκτης ιότα; ελληνικό ερωτηματικό, θήτα; κλείνει παρένθεση")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_377() -> Result<()> { // same + let expr = r#" + + + χ + 1 + + ,, + χ + Ν + + + "#; + test("el", "SimpleSpeak", expr, "χ δείκτης 1; κόμμα; αποσιωπητικά, κόμμα; χ δείκτης, κεφαλαίο νί")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_378() -> Result<()> { // same + let expr = r#" + + p(Χ;θ) + "#; + test("el", "SimpleSpeak", expr, "p; ανοίγει παρένθεση; κεφαλαίο χ, ελληνικό ερωτηματικό, θήτα; κλείνει παρένθεση")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_379() -> Result<()> { // same + let expr = r#" + + p(Χ;θ)=p( + χ + 1 + + , + χ + 2 + + ,, + χ + Ν + + ;θ)= + + + + κ=1 + Ν + + + p( + χ + κ + + ;θ) + + "#; + test("el", "SimpleSpeak", expr, "p; ανοίγει παρένθεση; κεφαλαίο χ, ελληνικό ερωτηματικό, θήτα; κλείνει παρένθεση; ισούται με; p του; ανοίγει παρένθεση; χ δείκτης 1; κόμμα; χ δείκτης 2; κόμμα; αποσιωπητικά, κόμμα; χ δείκτης, κεφαλαίο νί; ελληνικό ερωτηματικό, θήτα; κλείνει παρένθεση; ισούται με; γινόμενο από καπα ισούται με 1 ως κεφαλαίο νί του; p; ανοίγει παρένθεση; χ δείκτης καπα; ελληνικό ερωτηματικό, θήτα; κλείνει παρένθεση")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_380() -> Result<()> { // same + let expr = r#" + + + θ + + ML + + =arg + + max + θ + + + + + + κ=1 + Ν + + + p( + χ + κ + + ;θ) + + "#; + test("el", "SimpleSpeak", expr, "θήτα δείκτης κεφαλαίο m κεφαλαίο l; ισούται με; όρισμα του, μέγιστο δείκτης θήτα; του; γινόμενο από καπα ισούται με 1 ως κεφαλαίο νί του; p; ανοίγει παρένθεση; χ δείκτης καπα; ελληνικό ερωτηματικό, θήτα; κλείνει παρένθεση")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_381() -> Result<()> { // + let expr = r#" + + + + + + + + κ=1 + Ν + + + p( + χ + κ + + ;θ) + + + θ + + =0 + "#; + test("el", "SimpleSpeak", expr, "κλάσμα, μερικό διαφορικό; γινόμενο από καπα ισούται με 1 ως κεφαλαίο νί του; p; ανοίγει παρένθεση; χ δείκτης καπα; ελληνικό ερωτηματικό, θήτα; κλείνει παρένθεση, προς, μερικό διαφορικό, θήτα, τέλος κλάσματος; ισούται με 0")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_382() -> Result<()> { // + let expr = r#" + + L(θ)=ln + + + + κ=1 + Ν + + + p( + χ + κ + + ;θ) + + "#; + test("el", "SimpleSpeak", expr, "κεφαλαίο l του θήτα; ισούται με; το φυσικό λογάριθμο, του; γινόμενο από καπα ισούται με 1 ως κεφαλαίο νί του; p; ανοίγει παρένθεση; χ δείκτης καπα; ελληνικό ερωτηματικό, θήτα; κλείνει παρένθεση")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_383() -> Result<()> { // + let expr = r#" + + + + L(θ) + + θ + + = + + + + κ=1 + Ν + + + + + lnp( + χ + κ + + ;θ) + + θ + + + = + + + + κ=1 + Ν + + + + 1 + + p( + χ + κ + + ;θ) + + × + + p( + χ + κ + + ;θ) + + θ + + + =0 + "#; + test("el", "SimpleSpeak", expr, "κλάσμα, μερικό διαφορικό; κεφαλαίο l του θήτα, προς, μερικό διαφορικό, θήτα, τέλος κλάσματος; ισούται με; άθροισμα από καπα ισούται με 1 ως κεφαλαίο νί του; κλάσμα, μερικό διαφορικό; ο φυσικός λογάριθμος, του p; ανοίγει παρένθεση; χ δείκτης καπα; ελληνικό ερωτηματικό, θήτα; κλείνει παρένθεση, προς, μερικό διαφορικό, θήτα, τέλος κλάσματος; ισούται με; άθροισμα από καπα ισούται με 1 ως κεφαλαίο νί του; κλάσμα, 1 προς, p; ανοίγει παρένθεση; χ δείκτης καπα; ελληνικό ερωτηματικό, θήτα; κλείνει παρένθεση, τέλος κλάσματος; επί; κλάσμα, μερικό διαφορικό p; ανοίγει παρένθεση; χ δείκτης καπα; ελληνικό ερωτηματικό, θήτα; κλείνει παρένθεση, προς, μερικό διαφορικό, θήτα, τέλος κλάσματος; ισούται με 0")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_384() -> Result<()> { // same + let expr = r#" + + a×( + + b+c + ) + "#; + test("el", "SimpleSpeak", expr, "a επί; ανοίγει παρένθεση, b συν c, κλείνει παρένθεση")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_385() -> Result<()> { // same + let expr = r#" + + 3× + x + 2 + + ×( + + 2 + x + 3 + + +6x + ) + "#; + test("el", "SimpleSpeak", expr, "3 επί x στο τετράγωνο, επί; ανοίγει παρένθεση; 2 x στον κύβο, συν 6 x; κλείνει παρένθεση")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_386() -> Result<()> { // same + let expr = r#" + + ( + + a+b + )×( + + c+d + ) + "#; + test("el", "SimpleSpeak", expr, "ανοίγει παρένθεση, a συν b, κλείνει παρένθεση; επί; ανοίγει παρένθεση, 100 συν 500, κλείνει παρένθεση")?; + return Ok(()); + //theodora. fails. For some reason it recognizes c + d as 100 + 500 + //does the same in english +} + +#[test] +fn uoa_corpus_387() -> Result<()> { // same + let expr = r#" + + ( + + 3 + x + 2 + + ψ+2ψ + )×( + + 2 + x + 2 + + +5 + ) + "#; + test("el", "SimpleSpeak", expr, "ανοίγει παρένθεση; 3 x στο τετράγωνο, ψ; συν 2 ψ; κλείνει παρένθεση; επί; ανοίγει παρένθεση; 2 x στο τετράγωνο, συν 5; κλείνει παρένθεση")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_388() -> Result<()> { // same + let expr = r#" + + 3 + x + 2 + + ×( + + 2 + x + 3 + + +6x + ) + "#; + test("el", "SimpleSpeak", expr, "3 x στο τετράγωνο, επί; ανοίγει παρένθεση; 2 x στον κύβο, συν 6 x; κλείνει παρένθεση")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_389() -> Result<()> { // same + let expr = r#" + + 3 + x + 2 + + + "#; + test("el", "SimpleSpeak", expr, "3 x στο τετράγωνο")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_390() -> Result<()> { // same + let expr = r#" + + 2 + x + 3 + + +6x + "#; + test("el", "SimpleSpeak", expr, "2 x στον κύβο, συν 6 x")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_391() -> Result<()> { // + let expr = r#" + + 3 + x + 2 + + ×( + + 2 + x + 3 + + +6x + )=3 + x + 2 + + ×2 + x + 3 + + +3 + x + 2 + + ×6x=6 + x + 5 + + +18 + x + 3 + + + "#; + test("el", "SimpleSpeak", expr, "3 x στο τετράγωνο, επί; ανοίγει παρένθεση; 2 x στον κύβο, συν 6 x; κλείνει παρένθεση; ισούται με; 3 x στο τετράγωνο, επί 2 x στον κύβο; συν, 3 x στο τετράγωνο, επί 6 x; ισούται με; 6 x στην πέμπτη, συν, 18 x στον κύβο")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_392() -> Result<()> { // same + let expr = r#" + + ( + + 3 + x + 2 + + y+2y + )×( + + 2 + x + 2 + + +5 + ) + "#; + test("el", "SimpleSpeak", expr, "ανοίγει παρένθεση; 3 x στο τετράγωνο, y; συν 2 y; κλείνει παρένθεση; επί; ανοίγει παρένθεση; 2 x στο τετράγωνο, συν 5; κλείνει παρένθεση")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_393() -> Result<()> { // same + let expr = r#" + + 3 + x + 2 + + y+2y + "#; + test("el", "SimpleSpeak", expr, "3 x στο τετράγωνο, y; συν 2 y")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_394() -> Result<()> { // same + let expr = r#" + + 2 + x + 2 + + +5 + "#; + test("el", "SimpleSpeak", expr, "2 x στο τετράγωνο, συν 5")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_395() -> Result<()> { // same + let expr = r#" + + ( + + 3 + x + 2 + + y+2y + )×( + + 2 + x + 2 + + +5 + ) + "#; + test("el", "SimpleSpeak", expr, "ανοίγει παρένθεση; 3 x στο τετράγωνο, y; συν 2 y; κλείνει παρένθεση; επί; ανοίγει παρένθεση; 2 x στο τετράγωνο, συν 5; κλείνει παρένθεση")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_396() -> Result<()> { // same + let expr = r#" + + =3 + x + 2 + + y×2 + x + 2 + + +3 + x + 2 + + y×5+2y×2 + x + 2 + + +2y×5 + "#; + test("el", "SimpleSpeak", expr, "ισούται με; 3 x στο τετράγωνο, y επί 2 x στο τετράγωνο; συν, 3 x στο τετράγωνο, y επί 5; συν, 2 y επί 2 x στο τετράγωνο; συν 2 y επί 5")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_397() -> Result<()> { // + let expr = r#" + + =6 + x + 4 + + y+15 + x + 2 + + y+4 + x + 2 + + y+10y=6 + x + 4 + + y+19 + x + 2 + + y+10y + "#; + test("el", "SimpleSpeak", expr, "ισούται με; 6 x στην τέταρτη, y; συν, 15 x στο τετράγωνο, y; συν, 4 x στο τετράγωνο, y; συν 10 y; ισούται με; 6 x στην τέταρτη, y; συν, 19 x στο τετράγωνο, y; συν 10 y")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_398() -> Result<()> { // same + let expr = r#" + + 2a + "#; + test("el", "SimpleSpeak", expr, "2 a")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_399() -> Result<()> { // same + let expr = r#" + + sin( + + a+b + ) + "#; + test("el", "SimpleSpeak", expr, "ημίτονο του; ανοίγει παρένθεση, a συν b, κλείνει παρένθεση")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_400() -> Result<()> { // same + let expr = r#" + + cos( + + a+b + ) + "#; + test("el", "SimpleSpeak", expr, "συνημίτονο του; ανοίγει παρένθεση, a συν b, κλείνει παρένθεση")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_401() -> Result<()> { // same + let expr = r#" + + tan( + + a+b + ) + "#; + test("el", "SimpleSpeak", expr, "εφαπτομένη του; ανοίγει παρένθεση, a συν b, κλείνει παρένθεση")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_402() -> Result<()> { // same + let expr = r#" + + sin( + + 2a + )=sin( + + a+a + )=sin( + a + )×cos( + a + )+cos( + a + )×sin( + a + )=2×sin( + a + )×cos( + a + ) + "#; + test("el", "SimpleSpeak", expr, "ημίτονο του 2 a; ισούται με; ημίτονο του; ανοίγει παρένθεση, a συν a, κλείνει παρένθεση; ισούται με; ημίτονο του a, επί, συνημίτονο του a; συν; συνημίτονο του a, επί ημίτονο του a; ισούται με; 2 επί ημίτονο του a, επί, συνημίτονο του a")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_403() -> Result<()> { // same + let expr = r#" + + sin( + + 2a + )=2×sin( + a + )×cos( + a + ) + "#; + test("el", "SimpleSpeak", expr, "ημίτονο του 2 a; ισούται με; 2 επί ημίτονο του a, επί, συνημίτονο του a")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_404() -> Result<()> { // same + let expr = r#" + + cos( + + 2a + )=cos( + + a+a + )=cos( + a + )×cos( + a + )sin( + a + )×sin( + a + )= + + cos + 2 + + a + + sin + 2 + + a + "#; + test("el", "SimpleSpeak", expr, "συνημίτονο του 2 a; ισούται με; συνημίτονο του; ανοίγει παρένθεση, a συν a, κλείνει παρένθεση; ισούται με; συνημίτονο του a, επί, συνημίτονο του a; μείον; ημίτονο του a, επί ημίτονο του a; ισούται με; συνημίτονο στο τετράγωνο; του a; μείον, ημίτονο στο τετράγωνο, του a")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_405() -> Result<()> { // same + let expr = r#" + + = + + cos + 2 + + a(1 + + cos + 2 + + a)=2 + + cos + 2 + + a1 + "#; + test("el", "SimpleSpeak", expr, "ισούται με; συνημίτονο στο τετράγωνο; του a; μείον; ανοίγει παρένθεση; 1 μείον, συνημίτονο στο τετράγωνο; του a; κλείνει παρένθεση; ισούται με; 2, συνημίτονο στο τετράγωνο; του a; μείον 1")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_406() -> Result<()> { // same + let expr = r#" + + =(1 + + sin + 2 + + a) + + sin + 2 + + a=12 + + sin + 2 + + a + "#; + test("el", "SimpleSpeak", expr, "ισούται με; ανοίγει παρένθεση; 1 μείον, ημίτονο στο τετράγωνο, του a; κλείνει παρένθεση; μείον, ημίτονο στο τετράγωνο, του a; ισούται με; 1 μείον; 2, ημίτονο στο τετράγωνο, του a")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_407() -> Result<()> { // same + let expr = r#" + + cos( + + 2a + )= + + cos + 2 + + a + + sin + 2 + + a + "#; + test("el", "SimpleSpeak", expr, "συνημίτονο του 2 a; ισούται με; συνημίτονο στο τετράγωνο; του a; μείον, ημίτονο στο τετράγωνο, του a")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_408() -> Result<()> { // same + let expr = r#" + + cos( + + 2a + )= + + cos + 2 + + a + + sin + 2 + + a=2 + + cos + 2 + + a1=12 + + sin + 2 + + a + "#; + test("el", "SimpleSpeak", expr, "συνημίτονο του 2 a; ισούται με; συνημίτονο στο τετράγωνο; του a; μείον, ημίτονο στο τετράγωνο, του a; ισούται με; 2, συνημίτονο στο τετράγωνο; του a; μείον 1; ισούται με; 1 μείον; 2, ημίτονο στο τετράγωνο, του a")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_409() -> Result<()> { // + let expr = r#" + + tan(2a)= + + tana+tana + + 1tanatana + + = + + 2tana + + 1 + + tan + 2 + + a + + + "#; + test("el", "SimpleSpeak", expr, "εφαπτομένη του 2 a; ισούται με; κλάσμα, εφαπτομένη του a, συν, εφαπτομένη του a, προς, 1 μείον; εφαπτομένη του a; εφαπτομένη του a, τέλος κλάσματος; ισούται με; κλάσμα, 2, εφαπτομένη του a, προς, 1 μείον, εφαπτομένη στο τετράγωνο; του a, τέλος κλάσματος")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_410() -> Result<()> { // + let expr = r#" + + tan(2a)= + + 2tana + + 1 + + tan + 2 + + a + + + "#; + test("el", "SimpleSpeak", expr, "εφαπτομένη του 2 a; ισούται με; κλάσμα, 2, εφαπτομένη του a, προς, 1 μείον, εφαπτομένη στο τετράγωνο; του a, τέλος κλάσματος")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_411() -> Result<()> { // + let expr = r#" + + cos(2a)=2 + + cos + 2 + + a11+cos( + + 2a + )=2 + + cos + 2 + + a + + cos + 2 + + a= + + 1+cos2a + 2 + + + "#; + test("el", "SimpleSpeak", expr, "συνημίτονο του 2 a; ισούται με; 2, συνημίτονο στο τετράγωνο; του a; μείον 1; αμφίδρομο διπλό βέλος; 1 συν, συνημίτονο του 2 a; ισούται με; 2, συνημίτονο στο τετράγωνο; του a; αμφίδρομο διπλό βέλος; συνημίτονο στο τετράγωνο; του a; ισούται με; κλάσμα, 1 συν, συνημίτονο του 2 a, προς 2, τέλος κλάσματος")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_412() -> Result<()> { // + let expr = r#" + + cos( + + 2a + )=12 + + sin + 2 + + a2 + + sin + 2 + + a=1cos(2a)si + n + 2 + + a= + + 1cos( + + 2a + ) + 2 + + + "#; + test("el", "SimpleSpeak", expr, "συνημίτονο του 2 a; ισούται με; 1 μείον; 2, ημίτονο στο τετράγωνο, του a; αμφίδρομο διπλό βέλος; 2, ημίτονο στο τετράγωνο, του a; ισούται με; 1 μείον, συνημίτονο του 2 a; αμφίδρομο διπλό βέλος; ημίτονο στο τετράγωνο, του a; ισούται με; κλάσμα, 1 μείον, συνημίτονο του 2 a, προς 2, τέλος κλάσματος")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_413() -> Result<()> { // + let expr = r#" + + + + tan + 2 + + a= + + + + sin + 2 + + a + + + + cos + 2 + + a + + = + + + + 1cos(2a) + 2 + + + + + + 1+cos( + + 2a + ) + 2 + + + + = + + 1cos(2a) + + 1+cos(2a) + + + "#; + test("el", "SimpleSpeak", expr, "εφαπτομένη στο τετράγωνο; του a; ισούται με; κλάσμα, ημίτονο στο τετράγωνο, του a, προς, συνημίτονο στο τετράγωνο; του a, τέλος κλάσματος; ισούται με; κλάσμα, κλάσμα, 1 μείον, συνημίτονο του 2 a, προς 2, τέλος κλάσματος; προς, κλάσμα, 1 συν, συνημίτονο του 2 a, προς 2, τέλος κλάσματος; τέλος κλάσματος; ισούται με; κλάσμα, 1 μείον, συνημίτονο του 2 a, προς, 1 συν, συνημίτονο του 2 a, τέλος κλάσματος")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_414() -> Result<()> { // + let expr = r#" + + 22.5°= + + 45° + 2 + + + "#; + // TODO: add expected speech + test("el", "SimpleSpeak", expr, "22.5 μοίρες; ισούται με; κλάσμα, 45 μοίρες; προς 2, τέλος κλάσματος")?; + return Ok(()); + //theodora. fails. converts 22.5 to 225 +} + +#[test] +fn uoa_corpus_415() -> Result<()> { // + let expr = r#" + + + + sin + 2 + + ( + + 22.5° + )= + + 1cos( + + 45° + ) + 2 + + = + + 1 + + + 2 + + + 2 + + + 2 + + = + + 2 + 2 + + + 2 + + + "#; + test("el", "SimpleSpeak", expr, "ημίτονο στο τετράγωνο, του; ανοίγει παρένθεση, 22.5 μοίρες; κλείνει παρένθεση; ισούται με; κλάσμα, 1 μείον; συνημίτονο του; ανοίγει παρένθεση, 45 μοίρες; κλείνει παρένθεση, προς 2, τέλος κλάσματος; ισούται με; κλάσμα, 1 μείον; κλάσμα, η τετραγωνική ρίζα του 2; προς 2, τέλος κλάσματος; προς 2, τέλος κλάσματος; ισούται με; κλάσμα, 2 μείον, η τετραγωνική ρίζα του 2; προς 2, τέλος κλάσματος")?; + return Ok(()); + //theodora. fails. converts 225 --> 225 +} + +#[test] +fn uoa_corpus_416() -> Result<()> { // + let expr = r#" + + sin( + + 22.5° + )= + + + + 2 + 2 + + + + + 2 + + + "#; + test("el", "SimpleSpeak", expr, "διπλό βέλος προς τα δεξιά; ημίτονο του; ανοίγει παρένθεση, 22.5 μοίρες; κλείνει παρένθεση; ισούται με; κλάσμα, η τετραγωνική ρίζα του 2 μείον, η τετραγωνική ρίζα του 2; τέλος ρίζας; προς 2, τέλος κλάσματος")?; + return Ok(()); + //theodora. fails. converts 22.5 -->225 +} + + +#[test] +fn uoa_corpus_417() -> Result<()> { // + let expr = r#" + + + + cos + 2 + + (22.5°)= + + 1+cos( + + 45° + ) + 2 + + = + + 1+ + + + 2 + + + 2 + + + 2 + + = + + 2+ + 2 + + + 2 + + cos(22.5°)= + + + + 2+ + 2 + + + + + 2 + + + "#; + test("el", "SimpleSpeak", expr, "συνημίτονο στο τετράγωνο; του; ανοίγει παρένθεση, 22.5 μοίρες; κλείνει παρένθεση; ισούται με; κλάσμα, 1 συν; συνημίτονο του; ανοίγει παρένθεση, 45 μοίρες; κλείνει παρένθεση, προς 2, τέλος κλάσματος; ισούται με; κλάσμα, 1 συν; κλάσμα, η τετραγωνική ρίζα του 2; προς 2, τέλος κλάσματος; προς 2, τέλος κλάσματος; ισούται με; κλάσμα, 2 συν, η τετραγωνική ρίζα του 2; προς 2, τέλος κλάσματος; διπλό βέλος προς τα δεξιά; συνημίτονο του; ανοίγει παρένθεση, 225 μοίρες; κλείνει παρένθεση; ισούται με; κλάσμα, η τετραγωνική ρίζα του 2 συν, η τετραγωνική ρίζα του 2; τέλος ρίζας; προς 2, τέλος κλάσματος")?; + return Ok(()); + //theodora. fails. converts 22.5 -->225 + +} + +#[test] +fn uoa_corpus_418() -> Result<()> { // + let expr = r#" + + tan(22.5°)= + + + + 2 + 2 + + + + + + + + 2+ + 2 + + + + + + = + 2 + + 1 + "#; + test("el", "SimpleSpeak", expr, "εφαπτομένη του; ανοίγει παρένθεση, 22.5 μοίρες; κλείνει παρένθεση; ισούται με; κλάσμα, η τετραγωνική ρίζα του 2 μείον, η τετραγωνική ρίζα του 2; τέλος ρίζας; προς, η τετραγωνική ρίζα του 2 συν, η τετραγωνική ρίζα του 2; τέλος ρίζας; τέλος κλάσματος; ισούται με; την τετραγωνική ρίζα του 2; μείον 1")?; + return Ok(()); + //theodora. fails. converts 22.5 --> 225. fails accusative rule +} + +#[test] +fn uoa_corpus_419() -> Result<()> { // + let expr = r#" + + cot(22.5°)= + + + + 2+ + 2 + + + + + + + + 2 + 2 + + + + + + = + 2 + + +1 + "#; + test("el", "SimpleSpeak", expr, "συνεφαπτομένη, του; ανοίγει παρένθεση, 22.5 μοίρες; κλείνει παρένθεση; ισούται με; κλάσμα, η τετραγωνική ρίζα του 2 συν, η τετραγωνική ρίζα του 2; τέλος ρίζας; προς, η τετραγωνική ρίζα του 2 μείον, η τετραγωνική ρίζα του 2; τέλος ρίζας; τέλος κλάσματος; ισούται με; την τετραγωνική ρίζα του 2; συν 1")?; + return Ok(()); + //theodora. fails. converts 22.5 to 225. also fails accusative rule + +} + +#[test] +fn uoa_corpus_420() -> Result<()> { // + let expr = r#" + + p(x| + + ω + i + + ) + "#; + test("el", "SimpleSpeak", expr, "p; ανοίγει παρένθεση; x; κάθετη γραμμη; ωμέγα δείκτης i; κλείνει παρένθεση")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_421() -> Result<()> { // + let expr = r#" + + + θ + i + + + "#; + test("el", "SimpleSpeak", expr, "θήτα δείκτης i")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_422() -> Result<()> { // + let expr = r#" + + p(x| + + ω + i + + ;θ) + "#; + test("el", "SimpleSpeak", expr, "p; ανοίγει παρένθεση; x; κάθετη γραμμη; ωμέγα δείκτης i; ελληνικό ερωτηματικό, θήτα; κλείνει παρένθεση")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_423() -> Result<()> { // same + let expr = r#" + + + x + 1 + + ,, + x + Ν + + + "#; + test("el", "SimpleSpeak", expr, "x δείκτης 1; κόμμα; αποσιωπητικά, κόμμα; x δείκτης, κεφαλαίο νί")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_424() -> Result<()> { // same + let expr = r#" + + p(X;θ) + "#; + test("el", "SimpleSpeak", expr, "p; ανοίγει παρένθεση; κεφαλαίο x, ελληνικό ερωτηματικό, θήτα; κλείνει παρένθεση")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_425() -> Result<()> { // same + let expr = r#" + + p(X;θ)=p( + x + 1 + + , + x + 2 + + ,, + x + N + + ;θ)= + + + + k=1 + N + + + p( + x + k + + ;θ) + + "#; + test("el", "SimpleSpeak", expr, "p; ανοίγει παρένθεση; κεφαλαίο x, ελληνικό ερωτηματικό, θήτα; κλείνει παρένθεση; ισούται με; p του; ανοίγει παρένθεση; x δείκτης 1; κόμμα; x δείκτης 2; κόμμα; αποσιωπητικά, κόμμα; x δείκτης κεφαλαίο n; ελληνικό ερωτηματικό, θήτα; κλείνει παρένθεση; ισούται με; γινόμενο από k ισούται με 1 ως κεφαλαίο n του; p; ανοίγει παρένθεση; x δείκτης k; ελληνικό ερωτηματικό, θήτα; κλείνει παρένθεση")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_426() -> Result<()> { // same + let expr = r#" + + + θ + + ML + + =arg + + max + θ + + + + + + k=1 + N + + + p( + x + k + + ;θ) + + "#; + test("el", "SimpleSpeak", expr, "θήτα δείκτης κεφαλαίο m κεφαλαίο l; ισούται με; όρισμα του, μέγιστο δείκτης θήτα; του; γινόμενο από k ισούται με 1 ως κεφαλαίο n του; p; ανοίγει παρένθεση; x δείκτης k; ελληνικό ερωτηματικό, θήτα; κλείνει παρένθεση")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_427() -> Result<()> { // + let expr = r#" + + + + + + + + k=1 + N + + + p( + x + k + + ;θ) + + + θ + + =0 + "#; + test("el", "SimpleSpeak", expr, "κλάσμα, μερικό διαφορικό; γινόμενο από k ισούται με 1 ως κεφαλαίο n του; p; ανοίγει παρένθεση; x δείκτης k; ελληνικό ερωτηματικό, θήτα; κλείνει παρένθεση, προς, μερικό διαφορικό, θήτα, τέλος κλάσματος; ισούται με 0")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_428() -> Result<()> { // + let expr = r#" + + L(θ)=ln + + + + k=1 + N + + + p( + x + k + + ;θ) + + "#; + test("el", "SimpleSpeak", expr, "κεφαλαίο l του θήτα; ισούται με; το φυσικό λογάριθμο, του; γινόμενο από k ισούται με 1 ως κεφαλαίο n του; p; ανοίγει παρένθεση; x δείκτης k; ελληνικό ερωτηματικό, θήτα; κλείνει παρένθεση")?; + return Ok(()); +} + +#[test] +fn uoa_corpus_429() -> Result<()> { // + let expr = r#" + + + + L(θ) + + θ + + = + + + + k=1 + N + + + + + lnp( + x + k + + ;θ) + + θ + + + = + + + + k=1 + N + + + + 1 + + p( + x + k + + ;θ) + + × + + p( + x + k + + ;θ) + + θ + + + =0 + "#; + test("el", "SimpleSpeak", expr, "κλάσμα, μερικό διαφορικό; κεφαλαίο l του θήτα, προς, μερικό διαφορικό, θήτα, τέλος κλάσματος; ισούται με; άθροισμα από k ισούται με 1 ως κεφαλαίο n του; κλάσμα, μερικό διαφορικό; ο φυσικός λογάριθμος, του p; ανοίγει παρένθεση; x δείκτης k; ελληνικό ερωτηματικό, θήτα; κλείνει παρένθεση, προς, μερικό διαφορικό, θήτα, τέλος κλάσματος; ισούται με; άθροισμα από k ισούται με 1 ως κεφαλαίο n του; κλάσμα, 1 προς, p; ανοίγει παρένθεση; x δείκτης k; ελληνικό ερωτηματικό, θήτα; κλείνει παρένθεση, τέλος κλάσματος; επί; κλάσμα, μερικό διαφορικό p; ανοίγει παρένθεση; x δείκτης k; ελληνικό ερωτηματικό, θήτα; κλείνει παρένθεση, προς, μερικό διαφορικό, θήτα, τέλος κλάσματος; ισούται με 0")?; + return Ok(()); +} +